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 @@
1
+
@@ -0,0 +1,49 @@
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 += " USER_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
+ unless Process.uid.zero?
21
+ $stderr.puts(_("need root authority."))
22
+ exit 1
23
+ end
24
+
25
+ ActiveSambaLdap::Base.setup_connection("update")
26
+
27
+ class User < ActiveSambaLdap::User
28
+ ldap_mapping :recommended_classes => []
29
+ end
30
+
31
+ class Computer < ActiveSambaLdap::Computer
32
+ ldap_mapping :recommended_classes => []
33
+ end
34
+
35
+ class Group < ActiveSambaLdap::Group
36
+ ldap_mapping :recommended_classes => []
37
+ end
38
+
39
+ unless User.exists?(name)
40
+ $stderr.puts(_("user doesn't exist: %s") % name)
41
+ exit 1
42
+ end
43
+
44
+ user = User.find(name)
45
+ user.destroy(:removed_from_group => true, :remove_home_directory => true)
46
+
47
+ ActiveSambaLdap::Base.restart_nscd
48
+
49
+ ActiveSambaLdap::Base.clear_active_connections!
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,94 @@
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.computer_account = false
10
+ options.gid = nil
11
+
12
+ opts.banner += " USER_NAME"
13
+
14
+ opts.on("-c", "--[no-]computer-account",
15
+ _("is a Windows Workstation"),
16
+ _("(otherwise, Windows user)"),
17
+ "(#{options.computer_account})") {|options.computer_account|}
18
+
19
+ opts.on("-g", "--gid=GID", _("gid")) {|options.gid|}
20
+ end
21
+
22
+ name = nil
23
+ if argv.size == 1
24
+ name = argv.first
25
+ else
26
+ $stderr.puts opts
27
+ exit 1
28
+ end
29
+
30
+ ActiveSambaLdap::Base.setup_connection("update")
31
+
32
+ class User < ActiveSambaLdap::User
33
+ ldap_mapping :recommended_classes => []
34
+ end
35
+
36
+ class Computer < ActiveSambaLdap::Computer
37
+ ldap_mapping :recommended_classes => []
38
+ end
39
+
40
+ class Group < ActiveSambaLdap::Group
41
+ ldap_mapping :recommended_classes => []
42
+ end
43
+
44
+ options.computer_account = true if /\$$/ =~ name
45
+
46
+ if options.computer_account
47
+ member_class = Computer
48
+ member_type = _("computer")
49
+ else
50
+ member_class = User
51
+ member_type = _("user")
52
+ end
53
+
54
+ if options.computer_account
55
+ name = name.chomp("$") + "$"
56
+ end
57
+
58
+ unless member_class.exists?(name)
59
+ $stderr.puts(_("%s doesn't exist: %s") % [member_type, name])
60
+ exit 1
61
+ end
62
+ member = member_class.find(name)
63
+
64
+ unless Process.uid.zero?
65
+ password = ActiveSambaLdap::Command.read_password(_("Enter your password: "))
66
+
67
+ begin
68
+ member.bind(password)
69
+ rescue ActiveLdap::AuthenticationError
70
+ $stderr.puts(_("password doesn't match."))
71
+ exit 1
72
+ end
73
+ member.remove_connection
74
+ end
75
+
76
+ if options.gid
77
+ begin
78
+ member.primary_group = Group.find_by_name_or_gid_number(options.gid)
79
+ rescue ActiveSambaLdap::Error
80
+ $stderr.puts $!.message
81
+ exit 1
82
+ end
83
+ end
84
+
85
+ unless member.save
86
+ member.errors.each_full do |message|
87
+ $stderr.puts(message)
88
+ end
89
+ exit 1
90
+ end
91
+
92
+ ActiveSambaLdap::Base.restart_nscd
93
+
94
+ ActiveSambaLdap::Base.clear_active_connections!
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,264 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'time'
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.ou = nil
12
+ options.computer_account = false
13
+ options.uid = nil
14
+ options.gid = nil
15
+ options.supplementary_groups = []
16
+ options.create_group = true
17
+ options.home_directory = nil
18
+ options.home_directory_mode = nil
19
+ options.shell = nil
20
+ options.comment = nil
21
+ options.setup_home_directory = true
22
+ options.skeleton_directory = nil
23
+ options.time = 0
24
+
25
+ options.expire_date = nil
26
+ options.can_change_password = nil
27
+ options.must_change_password = nil
28
+ options.samba_home_unc = nil
29
+ options.samba_home_drive = nil
30
+ options.samba_logon_script = nil
31
+ options.samba_profile_path = nil
32
+ options.samba_account_flags = nil
33
+ options.common_name = nil
34
+ options.given_name = nil
35
+ options.surname = nil
36
+ options.mail_addresses = nil
37
+ options.mail_to_addresses = nil
38
+
39
+ opts.banner += " USER_NAME"
40
+
41
+ opts.on("-o", "--ou=OU",
42
+ _("add the user in the organizational unit OU"),
43
+ _("(relative to the user suffix)")) do |ou|
44
+ if /^ou=/ =~ ou
45
+ options.ou = ou
46
+ else
47
+ options.ou = "ou=#{ou}"
48
+ end
49
+ end
50
+ opts.on("-c", "--[no-]computer-account",
51
+ _("is a Windows Workstation"),
52
+ _("(otherwise, Windows user)"),
53
+ "(#{options.computer_account})") {|options.computer_account|}
54
+ opts.on("-u", "--uid=UID", Integer, _("uid")) {|options.uid|}
55
+ opts.on("-g", "--gid=GID", _("gid")) {|options.gid|}
56
+ opts.on("-G", "--groups=GID1,GID2,GID3", Array,
57
+ _("supplementary groups (comma separated)")) do |groups|
58
+ options.supplementary_groups = groups
59
+ end
60
+ opts.on("--[no-]create-group",
61
+ _("create a group for the user"),
62
+ "(#{options.create_group})") {|options.create_group|}
63
+ opts.on("-c", "--comment=COMMENT",
64
+ _("set the GECOS field for the new user account")) {|options.comment|}
65
+ opts.on("-s", "--shell=SHELL", _("shell")) {|options.shell|}
66
+ opts.on("-G", "--given-name=NAME", _("given name")) {|options.given_name|}
67
+ opts.on("-N", "--common-name=NAME",
68
+ _("common name")) {|options.common_name|}
69
+ opts.on("-S", "--surname=NAME", _("surname")) {|options.surname|}
70
+
71
+ opts.on("-d", "--home-directory=HOME_DIR",
72
+ _("home directory")) {|options.home_directory|}
73
+ opts.on("--home-directory-mode=MODE",
74
+ _("permission of home directory")) {|options.home_directory_mode|}
75
+ opts.on("--[no-]setup-home-directory",
76
+ _("setup home directory"),
77
+ "(#{options.setup_home_directory})") {|options.setup_home_directory|}
78
+ opts.on("-k", "--skel=DIR", "--skeleton-directory=DIR",
79
+ _("skeleton directory")) {|options.skeleton_directory|}
80
+
81
+ opts.on("--time=TIME", Integer,
82
+ _("wait TIME seconds before exiting"),
83
+ "(#{options.time})") {|options.time|}
84
+
85
+ opts.separator("")
86
+ opts.separator(_("For samba accounts:"))
87
+
88
+ opts.on("-e", "--expire-date=DATE", _("expire date")) do |date|
89
+ options.expire_date = Time.parse(date)
90
+ end
91
+ opts.on("-C", "--[no-]can-change-password",
92
+ _("can change password")) do |bool|
93
+ options.can_change_password = bool
94
+ end
95
+ opts.on("-M", "--[no-]must-change-password",
96
+ _("must change password")) do |bool|
97
+ options.must_change_password = bool
98
+ end
99
+ opts.on("--samba-home-path=UNC",
100
+ _("sambaHomePath"),
101
+ _("(SMB home share, like '\\\\PDC\\user'")) do |unc|
102
+ options.samba_home_unc = unc
103
+ end
104
+ opts.on("--samba-home-drive=DRIVE",
105
+ _("sambaHomeDrive"),
106
+ _("(letter associated with home share, like 'H:')")) do |drive|
107
+ options.samba_home_drive = drive
108
+ end
109
+ opts.on("--samba-logon-script=SCRIPT",
110
+ _("sambaLogonScript"),
111
+ _("(DOS script to execute on login)")) do |script|
112
+ options.samba_logon_script = script
113
+ end
114
+ opts.on("--samba-profile-path=PATH",
115
+ _("sambaProfilePath"),
116
+ _("(profile directory, like '\\\\PDC\\profiles\\user')")) do |path|
117
+ options.samba_profile_path = path
118
+ end
119
+ opts.on("--samba-account-flags=FLAGS",
120
+ _("sambaAcctFlags"),
121
+ _("(samba account control bits, " \
122
+ "like '[NDHTUMWSLXI]')")) {|options.samba_account_flags|}
123
+
124
+ # opts.on("--mail-addresses=ADDRESS1,ADDRESS2,ADDRESS3",
125
+ # Array,
126
+ # _("mailAddresses (comma separated)")) {|options.mail_addresses|}
127
+ # opts.on("--mail-to-addresses=ADDRESS1,ADDRESS2,ADDRESS3",
128
+ # Array,
129
+ # _("mailToAddresses (forward address)"),
130
+ # _("(comma separated)")) do |addresses|
131
+ # options.mail_to_addresses = addresses
132
+ # end
133
+ end
134
+
135
+ name = nil
136
+ if argv.size == 1
137
+ name = argv.first
138
+ else
139
+ $stderr.puts opts
140
+ exit 1
141
+ end
142
+
143
+ unless Process.uid.zero?
144
+ $stderr.puts(_("need root authority."))
145
+ exit 1
146
+ end
147
+
148
+ ActiveSambaLdap::Base.setup_connection("update")
149
+
150
+
151
+ class User < ActiveSambaLdap::User
152
+ ldap_mapping
153
+ end
154
+
155
+ class Computer < ActiveSambaLdap::Computer
156
+ ldap_mapping
157
+ end
158
+
159
+ class Group < ActiveSambaLdap::Group
160
+ ldap_mapping
161
+ end
162
+
163
+ class UnixIdPool < ActiveSambaLdap::UnixIdPool
164
+ ldap_mapping
165
+ end
166
+
167
+ if options.computer_account
168
+ member_class = Computer
169
+ member_type = _("computer")
170
+ name = name.chomp("$") + "$"
171
+ else
172
+ member_class = User
173
+ member_type = _("user")
174
+ end
175
+
176
+ unless member_class.valid_name?(name)
177
+ $stderr.puts(_("illegal %s name: %s") % [name, member_type])
178
+ exit 1
179
+ end
180
+
181
+ if member_class.exists?(name)
182
+ $stderr.puts(_("%s already exists: %s") % [member_type, name])
183
+ exit 1
184
+ end
185
+
186
+ create_options = {
187
+ :uid => [name, options.ou].compact.join(","),
188
+ :uid_number => options.uid,
189
+ :gid_number => options.gid,
190
+ :create_group => options.create_group,
191
+ :group_class => Group,
192
+ :home_directory => options.home_directory,
193
+ :login_shell => options.shell,
194
+ :given_name => options.given_name,
195
+ :cn => options.common_name,
196
+ :sn => options.surname,
197
+ :gecos => options.comment,
198
+ :samba_acct_flags => options.samba_account_flags,
199
+ }
200
+
201
+ if !create_options[:cn] and options.given_name and options.surname
202
+ create_options[:cn] = "#{options.given_name} #{options.surname}"
203
+ end
204
+
205
+ if options.computer_account
206
+ create_options[:description] = "Computer"
207
+ create_options[:gecos] ||= "Computer"
208
+ else
209
+ create_options.merge!(:can_change_password => options.can_change_password,
210
+ :must_change_password => options.must_change_password,
211
+ :user_logon_script => options.samba_logon_script,
212
+ :user_home_unc => options.samba_home_unc,
213
+ :user_home_drive => options.samba_home_drive,
214
+ :user_profile => options.samba_profile_path)
215
+ if options.expire_date
216
+ create_options[:samba_kickoff_time] = options.expire_date.to_i.to_s
217
+ end
218
+ end
219
+
220
+ member = nil
221
+ begin
222
+ member = member_class.create(create_options)
223
+ rescue ActiveSambaLdap::UidNumberAlreadyExists
224
+ $stderr.puts(_("UID already exists: %s") % uid_number)
225
+ exit 1
226
+ rescue ActiveSambaLdap::GidNumberDoesNotExist,
227
+ ActiveSambaLdap::GroupDoesNotExist,
228
+ ActiveSambaLdap::GroupDoesNotHaveSambaSID
229
+ $stderr.puts $!
230
+ exit 1
231
+ end
232
+
233
+ unless member.errors.empty?
234
+ member.errors.each_full do |message|
235
+ $stderr.puts(message)
236
+ end
237
+ exit 1
238
+ end
239
+
240
+ if options.setup_home_directory
241
+ begin
242
+ setup_options = {
243
+ :mode => options.home_directory_mode,
244
+ :skeleton_directory => options.skeleton_directory,
245
+ }
246
+ member.setup_home_directory(setup_options)
247
+ rescue SystemCallError
248
+ $stderr.puts $!
249
+ exit 1
250
+ end
251
+ end
252
+
253
+ [member.gid_number, *options.supplementary_groups].each do |group|
254
+ group = Group.find_by_name_or_gid_number(group)
255
+ if options.computer_account
256
+ group.computers << member
257
+ else
258
+ group.users << member
259
+ end
260
+ end
261
+
262
+ ActiveSambaLdap::Base.restart_nscd
263
+
264
+ ActiveSambaLdap::Base.clear_active_connections!
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,84 @@
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.remove_home_directory = false
10
+ options.interactive = false
11
+ options.computer_account = false
12
+
13
+ opts.banner += " USER_NAME"
14
+
15
+ opts.on("-c", "--[no-]computer-account",
16
+ _("is a Windows Workstation"),
17
+ _("(otherwise, Windows user)"),
18
+ "(#{options.computer_account})") {|options.computer_account|}
19
+
20
+ opts.on("-r", "--[no-]remove-home-directory",
21
+ _("remove home directory"),
22
+ "(#{options.remove_home_directory})") do |bool|
23
+ options.remove_home_directory = bool
24
+ end
25
+
26
+ opts.on("-i", "--[no-]interactive",
27
+ _("do interactively"),
28
+ "(#{options.interactive})") do |bool|
29
+ options.interactive = bool
30
+ end
31
+ end
32
+
33
+ name = nil
34
+ if argv.size == 1
35
+ name = argv.first
36
+ else
37
+ $stderr.puts opts
38
+ exit 1
39
+ end
40
+
41
+ unless Process.uid.zero?
42
+ $stderr.puts(_("need root authority."))
43
+ exit 1
44
+ end
45
+
46
+ ActiveSambaLdap::Base.setup_connection("update")
47
+
48
+ class User < ActiveSambaLdap::User
49
+ ldap_mapping
50
+ end
51
+
52
+ class Computer < ActiveSambaLdap::Computer
53
+ ldap_mapping
54
+ end
55
+
56
+ class Group < ActiveSambaLdap::Group
57
+ ldap_mapping
58
+ end
59
+
60
+ if options.computer_account
61
+ member_class = Computer
62
+ member_type = _("computer")
63
+ else
64
+ member_class = User
65
+ member_type = _("user")
66
+ end
67
+
68
+ if options.computer_account
69
+ name = name.chomp("$") + "$"
70
+ end
71
+
72
+ unless member_class.exists?(name)
73
+ $stderr.puts(_("%s doesn't exist: %s") % [member_type, name])
74
+ exit 1
75
+ end
76
+ member = member_class.find(name)
77
+
78
+ member.destroy(:removed_from_group => true,
79
+ :remove_home_directory => options.remove_home_directory,
80
+ :remove_home_directory_interactive => options.interactive)
81
+
82
+ ActiveSambaLdap::Base.restart_nscd
83
+
84
+ ActiveSambaLdap::Base.clear_active_connections!