ActiveSambaLdap 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. data/NEWS.en +40 -0
  2. data/NEWS.ja +44 -0
  3. data/README.en +366 -0
  4. data/README.ja +361 -0
  5. data/Rakefile +168 -0
  6. data/bin/asl-groupadd +73 -0
  7. data/bin/asl-groupadd.help +1 -0
  8. data/bin/asl-groupdel +61 -0
  9. data/bin/asl-groupdel.help +1 -0
  10. data/bin/asl-groupmod +137 -0
  11. data/bin/asl-groupmod.help +1 -0
  12. data/bin/asl-groupshow +33 -0
  13. data/bin/asl-groupshow.help +1 -0
  14. data/bin/asl-passwd +90 -0
  15. data/bin/asl-passwd.help +1 -0
  16. data/bin/asl-populate +101 -0
  17. data/bin/asl-populate.help +1 -0
  18. data/bin/asl-purge +26 -0
  19. data/bin/asl-purge.help +1 -0
  20. data/bin/asl-samba-computeradd +96 -0
  21. data/bin/asl-samba-computeradd.help +1 -0
  22. data/bin/asl-samba-groupadd +57 -0
  23. data/bin/asl-samba-groupadd.help +1 -0
  24. data/bin/asl-samba-groupdel +55 -0
  25. data/bin/asl-samba-groupdel.help +1 -0
  26. data/bin/asl-samba-groupmod +99 -0
  27. data/bin/asl-samba-groupmod.help +1 -0
  28. data/bin/asl-samba-useradd +100 -0
  29. data/bin/asl-samba-useradd.help +1 -0
  30. data/bin/asl-samba-userdel +49 -0
  31. data/bin/asl-samba-userdel.help +1 -0
  32. data/bin/asl-samba-usermod +94 -0
  33. data/bin/asl-samba-usermod.help +1 -0
  34. data/bin/asl-useradd +264 -0
  35. data/bin/asl-useradd.help +1 -0
  36. data/bin/asl-userdel +84 -0
  37. data/bin/asl-userdel.help +1 -0
  38. data/bin/asl-usermod +335 -0
  39. data/bin/asl-usermod.help +1 -0
  40. data/bin/asl-usershow +33 -0
  41. data/bin/asl-usershow.help +1 -0
  42. data/lib/active_samba_ldap.rb +42 -0
  43. data/lib/active_samba_ldap/account_entry.rb +208 -0
  44. data/lib/active_samba_ldap/base.rb +137 -0
  45. data/lib/active_samba_ldap/command.rb +100 -0
  46. data/lib/active_samba_ldap/computer.rb +24 -0
  47. data/lib/active_samba_ldap/computer_account_entry.rb +34 -0
  48. data/lib/active_samba_ldap/configuration.rb +333 -0
  49. data/lib/active_samba_ldap/dc.rb +19 -0
  50. data/lib/active_samba_ldap/entry.rb +81 -0
  51. data/lib/active_samba_ldap/get_text_support.rb +12 -0
  52. data/lib/active_samba_ldap/group.rb +17 -0
  53. data/lib/active_samba_ldap/group_entry.rb +187 -0
  54. data/lib/active_samba_ldap/idmap.rb +19 -0
  55. data/lib/active_samba_ldap/ou.rb +20 -0
  56. data/lib/active_samba_ldap/populate.rb +257 -0
  57. data/lib/active_samba_ldap/reloadable.rb +15 -0
  58. data/lib/active_samba_ldap/samba_account_entry.rb +225 -0
  59. data/lib/active_samba_ldap/samba_entry.rb +26 -0
  60. data/lib/active_samba_ldap/samba_group_entry.rb +143 -0
  61. data/lib/active_samba_ldap/unix_id_pool.rb +43 -0
  62. data/lib/active_samba_ldap/user.rb +44 -0
  63. data/lib/active_samba_ldap/user_account_entry.rb +30 -0
  64. data/lib/active_samba_ldap/version.rb +3 -0
  65. data/lib/samba/encrypt.rb +86 -0
  66. data/misc/rd2html.rb +42 -0
  67. data/po/ja/active-samba-ldap.po +465 -0
  68. data/rails/README +30 -0
  69. data/rails/init.rb +33 -0
  70. data/rails_generators/scaffold_active_samba_ldap/scaffold_active_samba_ldap_generator.rb +27 -0
  71. data/rails_generators/scaffold_active_samba_ldap/templates/computer.rb +3 -0
  72. data/rails_generators/scaffold_active_samba_ldap/templates/dc.rb +3 -0
  73. data/rails_generators/scaffold_active_samba_ldap/templates/group.rb +3 -0
  74. data/rails_generators/scaffold_active_samba_ldap/templates/idmap.rb +3 -0
  75. data/rails_generators/scaffold_active_samba_ldap/templates/ldap.yml +24 -0
  76. data/rails_generators/scaffold_active_samba_ldap/templates/ou.rb +3 -0
  77. data/rails_generators/scaffold_active_samba_ldap/templates/samba_controller.rb +12 -0
  78. data/rails_generators/scaffold_active_samba_ldap/templates/samba_helper.rb +2 -0
  79. data/rails_generators/scaffold_active_samba_ldap/templates/samba_index.rhtml +17 -0
  80. data/rails_generators/scaffold_active_samba_ldap/templates/samba_populate.rhtml +15 -0
  81. data/rails_generators/scaffold_active_samba_ldap/templates/samba_purge.rhtml +10 -0
  82. data/rails_generators/scaffold_active_samba_ldap/templates/unix_id_pool.rb +3 -0
  83. data/rails_generators/scaffold_active_samba_ldap/templates/user.rb +3 -0
  84. data/setup.rb +1585 -0
  85. data/test-unit/History.txt +107 -0
  86. data/test-unit/README.txt +52 -0
  87. data/test-unit/Rakefile +40 -0
  88. data/test-unit/TODO +5 -0
  89. data/test-unit/bin/testrb +5 -0
  90. data/test-unit/lib/test/unit.rb +342 -0
  91. data/test-unit/lib/test/unit/assertionfailederror.rb +14 -0
  92. data/test-unit/lib/test/unit/assertions.rb +1149 -0
  93. data/test-unit/lib/test/unit/attribute.rb +125 -0
  94. data/test-unit/lib/test/unit/autorunner.rb +329 -0
  95. data/test-unit/lib/test/unit/collector.rb +43 -0
  96. data/test-unit/lib/test/unit/collector/descendant.rb +23 -0
  97. data/test-unit/lib/test/unit/collector/dir.rb +108 -0
  98. data/test-unit/lib/test/unit/collector/load.rb +135 -0
  99. data/test-unit/lib/test/unit/collector/objectspace.rb +34 -0
  100. data/test-unit/lib/test/unit/color-scheme.rb +86 -0
  101. data/test-unit/lib/test/unit/color.rb +96 -0
  102. data/test-unit/lib/test/unit/diff.rb +538 -0
  103. data/test-unit/lib/test/unit/error.rb +124 -0
  104. data/test-unit/lib/test/unit/exceptionhandler.rb +39 -0
  105. data/test-unit/lib/test/unit/failure.rb +110 -0
  106. data/test-unit/lib/test/unit/fixture.rb +176 -0
  107. data/test-unit/lib/test/unit/notification.rb +125 -0
  108. data/test-unit/lib/test/unit/omission.rb +143 -0
  109. data/test-unit/lib/test/unit/pending.rb +146 -0
  110. data/test-unit/lib/test/unit/priority.rb +181 -0
  111. data/test-unit/lib/test/unit/runner/console.rb +52 -0
  112. data/test-unit/lib/test/unit/runner/emacs.rb +8 -0
  113. data/test-unit/lib/test/unit/testcase.rb +425 -0
  114. data/test-unit/lib/test/unit/testresult.rb +89 -0
  115. data/test-unit/lib/test/unit/testsuite.rb +110 -0
  116. data/test-unit/lib/test/unit/ui/console/outputlevel.rb +14 -0
  117. data/test-unit/lib/test/unit/ui/console/testrunner.rb +223 -0
  118. data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +49 -0
  119. data/test-unit/lib/test/unit/ui/testrunner.rb +20 -0
  120. data/test-unit/lib/test/unit/ui/testrunnermediator.rb +77 -0
  121. data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +41 -0
  122. data/test-unit/lib/test/unit/util/backtracefilter.rb +41 -0
  123. data/test-unit/lib/test/unit/util/method-owner-finder.rb +28 -0
  124. data/test-unit/lib/test/unit/util/observable.rb +90 -0
  125. data/test-unit/lib/test/unit/util/procwrapper.rb +48 -0
  126. data/test-unit/lib/test/unit/version.rb +7 -0
  127. data/test-unit/sample/adder.rb +13 -0
  128. data/test-unit/sample/subtracter.rb +12 -0
  129. data/test-unit/sample/tc_adder.rb +18 -0
  130. data/test-unit/sample/tc_subtracter.rb +18 -0
  131. data/test-unit/sample/test_user.rb +22 -0
  132. data/test-unit/sample/ts_examples.rb +7 -0
  133. data/test-unit/test/collector/test-descendant.rb +135 -0
  134. data/test-unit/test/collector/test-load.rb +333 -0
  135. data/test-unit/test/collector/test_dir.rb +406 -0
  136. data/test-unit/test/collector/test_objectspace.rb +98 -0
  137. data/test-unit/test/run-test.rb +13 -0
  138. data/test-unit/test/test-attribute.rb +86 -0
  139. data/test-unit/test/test-color-scheme.rb +56 -0
  140. data/test-unit/test/test-color.rb +47 -0
  141. data/test-unit/test/test-diff.rb +477 -0
  142. data/test-unit/test/test-emacs-runner.rb +60 -0
  143. data/test-unit/test/test-fixture.rb +287 -0
  144. data/test-unit/test/test-notification.rb +33 -0
  145. data/test-unit/test/test-omission.rb +81 -0
  146. data/test-unit/test/test-pending.rb +70 -0
  147. data/test-unit/test/test-priority.rb +119 -0
  148. data/test-unit/test/test-testcase.rb +507 -0
  149. data/test-unit/test/test_assertions.rb +1082 -0
  150. data/test-unit/test/test_error.rb +26 -0
  151. data/test-unit/test/test_failure.rb +33 -0
  152. data/test-unit/test/test_testresult.rb +113 -0
  153. data/test-unit/test/test_testsuite.rb +129 -0
  154. data/test-unit/test/testunit-test-util.rb +14 -0
  155. data/test-unit/test/ui/test_testrunmediator.rb +20 -0
  156. data/test-unit/test/util/test-method-owner-finder.rb +38 -0
  157. data/test-unit/test/util/test_backtracefilter.rb +41 -0
  158. data/test-unit/test/util/test_observable.rb +102 -0
  159. data/test-unit/test/util/test_procwrapper.rb +36 -0
  160. data/test/asl-test-utils.rb +276 -0
  161. data/test/command.rb +67 -0
  162. data/test/config.yaml.sample +17 -0
  163. data/test/run-test.rb +20 -0
  164. data/test/test_asl_groupadd.rb +69 -0
  165. data/test/test_asl_groupdel.rb +88 -0
  166. data/test/test_asl_groupmod.rb +259 -0
  167. data/test/test_asl_groupshow.rb +21 -0
  168. data/test/test_asl_passwd.rb +126 -0
  169. data/test/test_asl_populate.rb +92 -0
  170. data/test/test_asl_purge.rb +21 -0
  171. data/test/test_asl_useradd.rb +712 -0
  172. data/test/test_asl_userdel.rb +75 -0
  173. data/test/test_asl_usermod.rb +549 -0
  174. data/test/test_asl_usershow.rb +27 -0
  175. data/test/test_entry.rb +21 -0
  176. data/test/test_group.rb +21 -0
  177. data/test/test_password.rb +51 -0
  178. data/test/test_samba_encrypt.rb +35 -0
  179. data/test/test_user_home_directory.rb +43 -0
  180. metadata +314 -0
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'active_samba_ldap'
4
+ require 'active_samba_ldap/command'
5
+
6
+ include ActiveSambaLdap::GetTextSupport
7
+
8
+ argv, opts, options = ActiveSambaLdap::Command.parse_options do |opts, options|
9
+ options.gid = nil
10
+ options.group_type = "domain"
11
+ options.print_gid_number = false
12
+
13
+ opts.banner += " GROUP_NAME"
14
+
15
+ opts.on("-g", "--gid=GID", Integer, _("GID number")) {|options.gid|}
16
+ opts.on("-t", "--type=TYPE",
17
+ _("group type"),
18
+ "(#{options.group_type})") {|options.group_type|}
19
+ opts.on("-p", "--[no-]print-gid-number",
20
+ _("print the gid number to stdout"),
21
+ "(#{options.print_gid_number})") {|options.print_gid_number|}
22
+ end
23
+
24
+ name = nil
25
+ if argv.size == 1
26
+ name = argv.first
27
+ else
28
+ $stderr.puts opts
29
+ exit 1
30
+ end
31
+
32
+ unless Process.uid.zero?
33
+ $stderr.puts(_("need root authority."))
34
+ exit 1
35
+ end
36
+
37
+ ActiveSambaLdap::Base.setup_connection("update")
38
+
39
+ class Group < ActiveSambaLdap::Group
40
+ ldap_mapping
41
+ end
42
+
43
+ class UnixIdPool < ActiveSambaLdap::UnixIdPool
44
+ ldap_mapping
45
+ end
46
+
47
+ if Group.exists?(name)
48
+ $stderr.puts(_("group already exists: %s") % name)
49
+ exit 1
50
+ end
51
+
52
+ create_options = {
53
+ :cn => name,
54
+ :gid_number => options.gid,
55
+ :pool_class => UnixIdPool,
56
+ :group_type => options.group_type,
57
+ }
58
+ group = Group.create(create_options)
59
+
60
+ unless group.errors.empty?
61
+ group.errors.each_full do |message|
62
+ $stderr.puts(message)
63
+ end
64
+ exit 1
65
+ end
66
+
67
+ if options.print_gid_number
68
+ puts group.gid_number
69
+ end
70
+
71
+ ActiveSambaLdap::Base.restart_nscd
72
+
73
+ ActiveSambaLdap::Base.clear_active_connections!
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'active_samba_ldap'
4
+ require 'active_samba_ldap/command'
5
+
6
+ include ActiveSambaLdap::GetTextSupport
7
+
8
+ argv, opts, options = ActiveSambaLdap::Command.parse_options do |opts, options|
9
+ options.force = false
10
+
11
+ opts.banner += " GROUP_NAME"
12
+
13
+ opts.on("-f", "--[no-]force",
14
+ _("force delete group"),
15
+ "(#{options.force})") {|options.force|}
16
+ end
17
+
18
+ name = nil
19
+ if argv.size == 1
20
+ name = argv.first
21
+ else
22
+ $stderr.puts opts
23
+ exit 1
24
+ end
25
+
26
+ unless Process.uid.zero?
27
+ $stderr.puts(_("need root authority."))
28
+ exit 1
29
+ end
30
+
31
+ ActiveSambaLdap::Base.setup_connection("update")
32
+
33
+ class Group < ActiveSambaLdap::Group
34
+ ldap_mapping
35
+ end
36
+
37
+ class User < ActiveSambaLdap::User
38
+ ldap_mapping
39
+ end
40
+
41
+ class Computer < ActiveSambaLdap::Computer
42
+ ldap_mapping
43
+ end
44
+
45
+ unless Group.exists?(name)
46
+ $stderr.puts(_("group doesn't exist: %s") % name)
47
+ exit 1
48
+ end
49
+ group = Group.find(name)
50
+
51
+ begin
52
+ group.destroy(:remove_members => true,
53
+ :force_change_primary_members => options.force)
54
+ rescue ActiveSambaLdap::Error
55
+ $stderr.puts $!
56
+ exit 1
57
+ end
58
+
59
+ ActiveSambaLdap::Base.restart_nscd
60
+
61
+ ActiveSambaLdap::Base.clear_active_connections!
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,137 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'active_samba_ldap'
4
+ require 'active_samba_ldap/command'
5
+
6
+ include ActiveSambaLdap::GetTextSupport
7
+
8
+ argv, opts, options = ActiveSambaLdap::Command.parse_options do |opts, options|
9
+ options.gid = nil
10
+ options.allow_non_unique_gid_number = false
11
+ options.new_group_name = nil
12
+ options.members_to_add = nil
13
+ options.members_to_delete = nil
14
+
15
+ opts.banner += " GROUP_NAME"
16
+
17
+ opts.on("-g", "--gid=GID", _("GID number")) {|options.gid|}
18
+ opts.on("--[no-]allow-non-unique-gid",
19
+ _("gid can be non unique"),
20
+ "(#{options.allow_non_unique_gid_number})") do |bool|
21
+ options.allow_non_unique_gid_number = bool
22
+ end
23
+ opts.on("-r", "--rename=NEW_NAME",
24
+ _("new group name")) {|options.new_group_name|}
25
+ opts.on("-a", "--add-members=MEMBER1,MEMBER2,MEBMER3", Array,
26
+ _("add members (comma delimited)")) {|options.members_to_add|}
27
+ opts.on("-d", "--delete-members=MEMBER1,MEMBER2,MEBMER3", Array,
28
+ _("delete members (comma delimited)")) {|options.members_to_delete|}
29
+ end
30
+
31
+ name = nil
32
+ if argv.size == 1
33
+ name = argv.first
34
+ else
35
+ $stderr.puts opts
36
+ exit 1
37
+ end
38
+
39
+ unless Process.uid.zero?
40
+ $stderr.puts(_("need root authority."))
41
+ exit 1
42
+ end
43
+
44
+ ActiveSambaLdap::Base.setup_connection("update")
45
+
46
+ class Group < ActiveSambaLdap::Group
47
+ ldap_mapping
48
+ end
49
+
50
+ class User < ActiveSambaLdap::User
51
+ ldap_mapping
52
+ end
53
+
54
+ class Computer < ActiveSambaLdap::Computer
55
+ ldap_mapping
56
+ end
57
+
58
+ unless Group.exists?(name)
59
+ $stderr.puts(_("group doesn't exist: %s") % name)
60
+ exit 1
61
+ end
62
+ group = Group.find(name)
63
+
64
+ if options.gid
65
+ begin
66
+ group.change_gid_number(options.gid, options.allow_non_unique_gid_number)
67
+ rescue ActiveSambaLdap::GidNumberAlreadyExists
68
+ $stderr.puts $!.message
69
+ exit 1
70
+ end
71
+ end
72
+
73
+ if options.members_to_add and options.members_to_delete
74
+ duplicated_members = options.members_to_add & options.members_to_delete
75
+ unless duplicated_members.empty?
76
+ format =
77
+ n_("there is duplicated member in adding and deleting members: %s",
78
+ "there are duplicated members in adding and deleting members: %s",
79
+ duplicated_members.size)
80
+ $stderr.puts(format % duplicated_members.join(", "))
81
+ exit 1
82
+ end
83
+ end
84
+
85
+ if options.members_to_add
86
+ users = []
87
+ computers = []
88
+ options.members_to_add.each do |member|
89
+ if /\$$/ =~ member
90
+ computers << Computer.find(member)
91
+ else
92
+ users << User.find(member)
93
+ end
94
+ end
95
+ group.users.concat(users)
96
+ group.computers.concat(computers)
97
+ end
98
+
99
+ if options.members_to_delete
100
+ users = []
101
+ computers = []
102
+ options.members_to_delete.each do |member|
103
+ if /\$$/ =~ member
104
+ computers << Computer.find(member)
105
+ else
106
+ users << User.find(member)
107
+ end
108
+ end
109
+ group.users -= users
110
+ group.computers -= computers
111
+ end
112
+
113
+ group.save!
114
+
115
+ if options.new_group_name
116
+ if Group.exists?(options.new_group_name)
117
+ $stderr.puts(_("group already exists: %s") % options.new_group_name)
118
+ exit 1
119
+ end
120
+
121
+ new_group = Group.new(options.new_group_name)
122
+ new_group.attributes = group.attributes.reject do |key, value|
123
+ %w(cn).include?(key)
124
+ end
125
+ primary_members = group.primary_members
126
+ group.gid_number = nil
127
+ new_group.save!
128
+ primary_members.each do |member|
129
+ member.primary_group = new_group
130
+ member.save!
131
+ end
132
+ group.destroy(:remove_members => true)
133
+ end
134
+
135
+ ActiveSambaLdap::Base.restart_nscd
136
+
137
+ ActiveSambaLdap::Base.clear_active_connections!
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'active_samba_ldap'
4
+ require 'active_samba_ldap/command'
5
+
6
+ include ActiveSambaLdap::GetTextSupport
7
+
8
+ argv, opts, options = ActiveSambaLdap::Command.parse_options do |opts, options|
9
+ opts.banner += " GROUP_NAME"
10
+ end
11
+
12
+ name = nil
13
+ if argv.size == 1
14
+ name = argv.first
15
+ else
16
+ $stderr.puts opts
17
+ exit 1
18
+ end
19
+
20
+ ActiveSambaLdap::Base.setup_connection("reference")
21
+
22
+ class Group < ActiveSambaLdap::Group
23
+ ldap_mapping
24
+ end
25
+
26
+ unless Group.exists?(name)
27
+ $stderr.puts(_("group doesn't exist: %s") % name)
28
+ exit 1
29
+ end
30
+ group = Group.find(name)
31
+ puts group.to_ldif
32
+
33
+ ActiveSambaLdap::Base.clear_active_connections!
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'etc'
4
+
5
+ require 'active_samba_ldap'
6
+ require 'active_samba_ldap/command'
7
+
8
+ include ActiveSambaLdap::GetTextSupport
9
+
10
+ argv, opts, options = ActiveSambaLdap::Command.parse_options do |opts, options|
11
+ options.update_samba_password = true
12
+ options.update_unix_password = true
13
+
14
+ opts.banner += " [USER_NAME]"
15
+
16
+ opts.on("-s", "--[no-]samba-password",
17
+ _("update samba password"),
18
+ "(#{options.update_samba_password})") do |bool|
19
+ options.update_samba_password = bool
20
+ end
21
+
22
+ opts.on("-u", "--[no-]unix-password",
23
+ _("update UNIX password"),
24
+ "(#{options.update_unix_password})") do |bool|
25
+ options.update_unix_password = bool
26
+ end
27
+ end
28
+
29
+ name = nil
30
+ case argv.size
31
+ when 0
32
+ name = Etc.getpwuid(Process.uid).name
33
+ when 1
34
+ name = argv.first
35
+ else
36
+ $stderr.puts opts
37
+ exit 1
38
+ end
39
+
40
+ if !options.update_samba_password and !options.update_unix_password
41
+ $stderr.puts(_("do nothing."))
42
+ exit
43
+ end
44
+
45
+ ActiveSambaLdap::Base.setup_connection("update")
46
+
47
+ class User < ActiveSambaLdap::User
48
+ ldap_mapping
49
+ end
50
+
51
+ unless User.exists?(name)
52
+ $stderr.puts(_("user doesn't exist: %s") % name)
53
+ exit 1
54
+ end
55
+ user = User.find(name)
56
+
57
+ unless Process.uid.zero?
58
+ prompt = _("Enter your current password: ")
59
+ old_password = ActiveSambaLdap::Command.read_password(prompt)
60
+ begin
61
+ user.bind(old_password)
62
+ rescue ActiveLdap::AuthenticationError
63
+ $stderr.puts(_("password doesn't match."))
64
+ exit 1
65
+ end
66
+ end
67
+
68
+ password = ActiveSambaLdap::Command.read_password(_("New password: "))
69
+ password2 = ActiveSambaLdap::Command.read_password(_("Retype new password: "))
70
+
71
+ unless password == password2
72
+ $stderr.puts(_("New passwords don't match."))
73
+ exit 1
74
+ end
75
+
76
+ changed = false
77
+
78
+ if options.update_unix_password
79
+ user.change_password(password)
80
+ changed = true
81
+ end
82
+
83
+ if options.update_samba_password
84
+ user.change_samba_password(password)
85
+ changed = true
86
+ end
87
+
88
+ user.save! if changed
89
+
90
+ ActiveSambaLdap::Base.clear_active_connections!
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,101 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fileutils'
4
+ require 'etc'
5
+ require 'time'
6
+
7
+ require 'active_samba_ldap'
8
+ require 'active_samba_ldap/command'
9
+
10
+ include ActiveSambaLdap::GetTextSupport
11
+
12
+ argv, opts, options = ActiveSambaLdap::Command.parse_options do |opts, options|
13
+ default = ActiveSambaLdap::Configuration::ClassMethods::Private.new({})
14
+ options.start_uid = Integer(default.start_uid)
15
+ options.start_gid = Integer(default.start_gid)
16
+ options.administrator = ActiveSambaLdap::User::DOMAIN_ADMIN_NAME
17
+ admin_rid = ActiveSambaLdap::User::DOMAIN_ADMIN_RID
18
+ admins_rid = ActiveSambaLdap::Group::DOMAIN_ADMINS_RID
19
+ guest_rid = ActiveSambaLdap::User::DOMAIN_GUEST_RID
20
+ guests_rid = ActiveSambaLdap::Group::DOMAIN_GUESTS_RID
21
+ options.administrator_uid = ActiveSambaLdap::User.rid2uid(admin_rid)
22
+ options.administrator_gid = ActiveSambaLdap::Group.rid2gid(admins_rid)
23
+ options.guest = ActiveSambaLdap::User::DOMAIN_GUEST_NAME
24
+ options.guest_uid = ActiveSambaLdap::User.rid2uid(guest_rid)
25
+ options.guest_gid = ActiveSambaLdap::Group.rid2gid(guests_rid)
26
+ options.export_ldif = nil
27
+ options.import_ldif = nil
28
+
29
+ opts.on("-u", "--start-uid=UID", Integer,
30
+ _("first uid number to allocate"),
31
+ "(#{options.start_uid})") {|options.start_uid|}
32
+ opts.on("-g", "--start-gid=GID", Integer,
33
+ _("first gid number to allocate"),
34
+ "(#{options.start_gid})") {|options.start_gid|}
35
+ opts.on("-a", "--administrator=NAME",
36
+ _("administrator login name"),
37
+ "(#{options.administrator})") {|options.administrator|}
38
+ opts.on("--administrator-uid=UID", Integer,
39
+ _("administrator's uid number"),
40
+ "(#{options.administrator_uid})") {|options.administrator_uid|}
41
+ opts.on("--administrator-gid=GID", Integer,
42
+ _("administrator's gid number"),
43
+ "(#{options.administrator_gid})") {|options.administrator_gid|}
44
+ opts.on("--guest=NAME",
45
+ _("guest login name"),
46
+ "(#{options.guest})") {|options.guest|}
47
+ opts.on("--guest-uid=UID", Integer,
48
+ _("guest's uid number"),
49
+ "(#{options.guest_uid})") {|options.guest_uid|}
50
+ opts.on("--guest-gid=GID", Integer,
51
+ _("guest's gid number"),
52
+ "(#{options.guest_gid})") {|options.guest_gid|}
53
+ opts.on("-e", "--export-ldif=LDIF",
54
+ _("export LDIF file")) {|options.export_ldif|}
55
+ # opts.on("-i", "--import-ldif=LDIF",
56
+ # _("import LDIF file")) {|options.import_ldif|}
57
+ end
58
+
59
+ unless Process.uid.zero?
60
+ $stderr.puts(_("need root authority."))
61
+ exit 1
62
+ end
63
+
64
+ ActiveSambaLdap::Base.setup_connection("update")
65
+
66
+ entries, opts = ActiveSambaLdap::Base.populate(options.marshal_dump)
67
+
68
+ def init_administrator(opts, entries)
69
+ admin_name = opts[:administrator]
70
+ user_class = opts[:user_class]
71
+ admin = entries.find do |entry|
72
+ entry.is_a?(user_class) and entry.uid == admin_name
73
+ end
74
+ return if admin.new_entry?
75
+
76
+ prompt = _("Password for %s: ") % admin_name
77
+ password = ActiveSambaLdap::Command.read_password(prompt)
78
+ prompt2 = _("Retype password for %s: ") % admin_name
79
+ password2 = ActiveSambaLdap::Command.read_password(prompt2)
80
+ unless password == password2
81
+ $stderr.puts(_("Passwords don't match."))
82
+ exit 1
83
+ end
84
+
85
+ admin.change_password(password)
86
+ admin.change_samba_password(password)
87
+ admin.enable
88
+ admin.save!
89
+ end
90
+
91
+ init_administrator(opts, entries)
92
+
93
+ if options.export_ldif
94
+ File.open(options.export_ldif, "w") do |out|
95
+ out.puts(entries.join("\n"))
96
+ end
97
+ end
98
+
99
+ ActiveSambaLdap::Base.restart_nscd
100
+
101
+ ActiveSambaLdap::Base.clear_active_connections!