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,36 @@
1
+ # Author:: Nathaniel Talbott.
2
+ # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
3
+ # License:: Ruby license.
4
+
5
+ require 'test/unit'
6
+ require 'test/unit/util/procwrapper'
7
+
8
+ module Test
9
+ module Unit
10
+ module Util
11
+ class TC_ProcWrapper < TestCase
12
+ def munge_proc(&a_proc)
13
+ return a_proc
14
+ end
15
+ def setup
16
+ @original = proc {}
17
+ @munged = munge_proc(&@original)
18
+ @wrapped_original = ProcWrapper.new(@original)
19
+ @wrapped_munged = ProcWrapper.new(@munged)
20
+ end
21
+ def test_wrapping
22
+ assert_same(@original, @wrapped_original.to_proc, "The wrapper should return what was wrapped")
23
+ end
24
+ def test_hashing
25
+
26
+ assert_equal(@wrapped_original.hash, @wrapped_munged.hash, "The original and munged should have the same hash when wrapped")
27
+ assert_equal(@wrapped_original, @wrapped_munged, "The wrappers should be equivalent")
28
+
29
+ a_hash = {@wrapped_original => @original}
30
+ assert(a_hash[@wrapped_original], "Should be able to access the wrapper in the hash")
31
+ assert_equal(a_hash[@wrapped_original], @original, "Should be able to access the wrapper in the hash")
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,276 @@
1
+ require 'test/unit'
2
+
3
+ require 'rbconfig'
4
+ require 'fileutils'
5
+ require 'tmpdir'
6
+
7
+ require File.join(File.dirname(__FILE__), "command")
8
+
9
+ require 'active_samba_ldap'
10
+
11
+ module AslTestUtils
12
+ def self.included(base)
13
+ base.class_eval do
14
+ include ActiveSambaLdap::GetTextSupport
15
+ include Configuration
16
+ include Connection
17
+ include Populate
18
+ include TemporaryEntry
19
+ include CommandSupport
20
+ end
21
+ end
22
+
23
+ module Configuration
24
+ def setup
25
+ super
26
+ @test_dir = File.expand_path(File.dirname(__FILE__))
27
+ @top_dir = File.expand_path(File.join(@test_dir, ".."))
28
+ @parent_dir = File.expand_path(File.join(@top_dir, ".."))
29
+ @config_file = File.join(@test_dir, "config.yaml")
30
+ ActiveSambaLdap::Base.configurations = read_config
31
+ end
32
+
33
+ def teardown
34
+ super
35
+ end
36
+
37
+ def reference_configuration
38
+ ActiveSambaLdap::Base.configurations["reference"]
39
+ end
40
+
41
+ def update_configuration
42
+ ActiveSambaLdap::Base.configurations["update"]
43
+ end
44
+
45
+ def read_config
46
+ unless File.exist?(@config_file)
47
+ raise "config file for testing doesn't exist: #{@config_file}"
48
+ end
49
+ ActiveSambaLdap::Configuration.read(@config_file)
50
+ end
51
+ end
52
+
53
+ module Connection
54
+ def setup
55
+ super
56
+ ActiveSambaLdap::Base.setup_connection(update_configuration)
57
+ end
58
+
59
+ def teardown
60
+ super
61
+ ActiveSambaLdap::Base.clear_active_connections!
62
+ end
63
+ end
64
+
65
+ module Populate
66
+ def setup
67
+ super
68
+ @dumped_data = ""
69
+ begin
70
+ @dumped_data = ActiveSambaLdap::Base.dump(:scope => :sub)
71
+ rescue ActiveLdap::ConnectionError
72
+ end
73
+ ActiveSambaLdap::Base.purge
74
+ ActiveSambaLdap::Base.populate
75
+ end
76
+
77
+ def teardown
78
+ super
79
+ ActiveSambaLdap::Base.setup_connection(update_configuration)
80
+ ActiveSambaLdap::Base.purge
81
+ ActiveSambaLdap::Base.load(@dumped_data)
82
+ end
83
+ end
84
+
85
+ module TemporaryEntry
86
+ def setup
87
+ super
88
+ @user_class = Class.new(ActiveSambaLdap::User)
89
+ @user_class.ldap_mapping
90
+ @computer_class = Class.new(ActiveSambaLdap::Computer)
91
+ @computer_class.ldap_mapping
92
+ @group_class = Class.new(ActiveSambaLdap::Group)
93
+ @group_class.ldap_mapping
94
+
95
+ @user_class.set_associated_class(:primary_group, @group_class)
96
+ @computer_class.set_associated_class(:primary_group, @group_class)
97
+ @user_class.set_associated_class(:groups, @group_class)
98
+ @computer_class.set_associated_class(:groups, @group_class)
99
+
100
+ @group_class.set_associated_class(:users, @user_class)
101
+ @group_class.set_associated_class(:computers, @computer_class)
102
+ @group_class.set_associated_class(:primary_users, @user_class)
103
+ @group_class.set_associated_class(:primary_computers, @computer_class)
104
+
105
+ @user_index = 0
106
+ @computer_index = 0
107
+ @group_index = 0
108
+ end
109
+
110
+ def make_dummy_user(config={})
111
+ @user_index += 1
112
+ name = config[:name] || "test-user#{@user_index}"
113
+ home_directory = config[:home_directory] || "/tmp/#{name}-#{Process.pid}"
114
+ ensure_delete_user(name, home_directory) do
115
+ password = config[:password] || "password"
116
+ uid_number = config[:uid_number] || (1000000 + @user_index)
117
+ default_user_gid = @user_class.configuration[:default_user_gid]
118
+ gid_number = config[:gid_number] || default_user_gid
119
+ _wrap_assertion do
120
+ assert(!@user_class.exists?(name))
121
+ options = {
122
+ :uid => name,
123
+ :uid_number => uid_number,
124
+ :group => @group_class.find_by_gid_number(gid_number),
125
+ :home_directory => home_directory,
126
+ :password => password,
127
+ }
128
+ user = @user_class.create(options)
129
+ assert_equal([], user.errors.to_a)
130
+ user.save!
131
+ FileUtils.mkdir(home_directory)
132
+ assert(@user_class.exists?(name))
133
+ yield(user, password)
134
+ end
135
+ end
136
+ end
137
+
138
+ def ensure_delete_user(uid, home=nil)
139
+ yield(uid, home)
140
+ ensure
141
+ if @user_class.exists?(uid)
142
+ @user_class.find(uid).destroy(:remove_from_group => true,
143
+ :remove_home_directory => true)
144
+ end
145
+ FileUtils.rm_rf(home) if home
146
+ end
147
+
148
+ def make_dummy_computer(config={})
149
+ @computer_index += 1
150
+ name = config[:name] || "test-computer#{@computer_index}$"
151
+ home_directory = config[:home_directory] || "/tmp/#{name}-#{Process.pid}"
152
+ ensure_delete_computer(name, home_directory) do |name, home_directory|
153
+ password = config[:password]
154
+ uid_number = config[:uid_number] || (1000000 + @computer_index)
155
+ default_computer_gid =
156
+ @computer_class.configuration[:default_computer_gid]
157
+ gid_number = config[:gid_number] || default_computer_gid
158
+ _wrap_assertion do
159
+ assert(!@computer_class.exists?(name))
160
+ options = {
161
+ :uid => name,
162
+ :uid_number => uid_number,
163
+ :group => @group_class.find_by_gid_number(gid_number),
164
+ :password => password,
165
+ }
166
+ computer = @computer_class.create(options)
167
+ assert_equal([], computer.errors.to_a)
168
+ FileUtils.mkdir(home_directory)
169
+ assert(@computer_class.exists?(name))
170
+ yield(computer, password)
171
+ end
172
+ end
173
+ end
174
+
175
+ def ensure_delete_computer(uid, home=nil)
176
+ yield(uid.sub(/\$+\z/, '') + "$", home)
177
+ ensure
178
+ if @computer_class.exists?(uid)
179
+ @computer_class.find(uid).destroy(:remove_from_group => true,
180
+ :remove_home_directory => true)
181
+ end
182
+ FileUtils.rm_rf(home) if home
183
+ end
184
+
185
+ def make_dummy_group(config={})
186
+ @group_index += 1
187
+ name = config[:name] || "test-group#{@group_index}"
188
+ ensure_delete_group(name) do
189
+ gid_number = config[:gid_number] || (2000000 + @group_index)
190
+ group_type = config[:group_type] || "domain"
191
+ _wrap_assertion do
192
+ assert(!@group_class.exists?(name))
193
+ options = {
194
+ :cn => name,
195
+ :gid_number => gid_number,
196
+ :group_type => group_type,
197
+ }
198
+ group = @group_class.create(options)
199
+ assert_equal([], group.errors.to_a)
200
+ assert(@group_class.exists?(name))
201
+ yield(group)
202
+ end
203
+ end
204
+ end
205
+
206
+ def ensure_delete_group(name)
207
+ yield(name)
208
+ ensure
209
+ if @group_class.exists?(name)
210
+ @group_class.find(name).destroy(:remove_members => false)
211
+ end
212
+ end
213
+
214
+ def ensure_delete_ou(ou)
215
+ yield(ou)
216
+ ensure
217
+ ou_class = Class.new(ActiveSambaLdap::Ou)
218
+ ou_class.ldap_mapping
219
+ ou_class.destroy(ou) if ou_class.exists?(ou)
220
+ end
221
+
222
+ def pool
223
+ pool_class = Class.new(ActiveSambaLdap::UnixIdPool)
224
+ pool_class.ldap_mapping
225
+ pool_class.required_configuration_variables :samba_domain
226
+ pool_class.new(pool_class.configuration[:samba_domain])
227
+ end
228
+
229
+ def next_uid_number
230
+ pool.uid_number || @user_class.configuration[:start_uid]
231
+ end
232
+
233
+ def next_gid_number
234
+ pool.gid_number || @group_class.configuration[:start_gid]
235
+ end
236
+ end
237
+
238
+ module CommandSupport
239
+ def setup
240
+ super
241
+ @fakeroot = "fakeroot"
242
+ @ruby = File.join(::Config::CONFIG["bindir"],
243
+ ::Config::CONFIG["RUBY_INSTALL_NAME"])
244
+ @bin_dir = File.join(@top_dir, "bin")
245
+ @lib_dir = File.join(@top_dir, "lib")
246
+ @ruby_args = [
247
+ "-I", @lib_dir,
248
+ "-I", File.join(@parent_dir, "activeldap", "lib"),
249
+ # "-I", File.join(@parent_dir, "ldap", "lib"),
250
+ # "-I", File.join(@parent_dir, "ldap"),
251
+ ]
252
+ end
253
+
254
+ def run_command_as_normal_user(*args, &block)
255
+ run_ruby(*[@command, "--config", @config_file, *args], &block)
256
+ end
257
+
258
+ def run_command_with_fakeroot(*args, &block)
259
+ run_ruby_with_fakeroot(*[@command, "--config", @config_file, *args],
260
+ &block)
261
+ end
262
+ alias_method :run_command, :run_command_with_fakeroot
263
+
264
+ def run_ruby(*ruby_args, &block)
265
+ args = [@ruby, *@ruby_args]
266
+ args.concat(ruby_args)
267
+ Command.run(*args, &block)
268
+ end
269
+
270
+ def run_ruby_with_fakeroot(*ruby_args, &block)
271
+ args = [@fakeroot, @ruby, *@ruby_args]
272
+ args.concat(ruby_args)
273
+ Command.run(*args, &block)
274
+ end
275
+ end
276
+ end
@@ -0,0 +1,67 @@
1
+ require "thread"
2
+ require "socket"
3
+ require "shellwords"
4
+ require "timeout"
5
+
6
+ module Command
7
+ class Error < StandardError
8
+ attr_reader :command, :result
9
+ def initialize(command, result)
10
+ @command = command
11
+ @result = result
12
+ super("#{command}: #{result}")
13
+ end
14
+ end
15
+
16
+ module_function
17
+ def detach_io
18
+ require 'fcntl'
19
+ [TCPSocket, ::File].each do |c|
20
+ ObjectSpace.each_object(c) do |io|
21
+ begin
22
+ unless io.closed?
23
+ io.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
24
+ end
25
+ rescue SystemCallError,IOError => e
26
+ end
27
+ end
28
+ end
29
+ end
30
+
31
+ def run(cmd, *args)
32
+ raise ArgumentError, "command isn't specified" if cmd.nil?
33
+ if args.any? {|x| x.nil?}
34
+ raise ArgumentError, "args has nil: #{args.inspect}"
35
+ end
36
+ in_r, in_w = IO.pipe
37
+ out_r, out_w = IO.pipe
38
+ err_r, err_w = IO.pipe
39
+ pid = exit_status = nil
40
+ Thread.exclusive do
41
+ verbose = $VERBOSE
42
+ # ruby(>=1.8)'s fork terminates other threads with warning messages
43
+ $VERBOSE = nil
44
+ pid = fork do
45
+ $VERBOSE = verbose
46
+ detach_io
47
+ $stdin.reopen(in_r)
48
+ in_r.close
49
+ $stdout.reopen(out_w)
50
+ $stderr.reopen(err_w)
51
+ out_w.close
52
+ err_w.close
53
+ exec(cmd, *args.collect {|arg| arg.to_s})
54
+ exit!(-1)
55
+ end
56
+ $VERBOSE = verbose
57
+ end
58
+ yield(out_r, in_w) if block_given?
59
+ in_r.close unless in_r.closed?
60
+ out_w.close unless out_w.closed?
61
+ err_w.close unless err_w.closed?
62
+ Timeout.timeout(5) do
63
+ pid, status = Process.waitpid2(pid)
64
+ [status.exited? && status.exitstatus.zero?, out_r.read, err_r.read]
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,17 @@
1
+ common:
2
+ sid: S-1-5-21-915876905-2926214379-2876160357
3
+ user_home_directory: /home/%U
4
+ user_login_shell: /bin/sh
5
+
6
+ update:
7
+ base: dc=test,dc=local,dc=net
8
+ host: 127.0.0.1
9
+ # method: :tls
10
+ bind_dn: cn=admin,dc=local,dc=net
11
+ password: secret
12
+
13
+ reference:
14
+ base: dc=test,dc=local,dc=net
15
+ host: 127.0.0.1
16
+ # method: :tls
17
+ allow_anonymous: true
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $VERBOSE = true
4
+
5
+ $KCODE = 'u'
6
+
7
+ top_dir = File.join(File.dirname(__FILE__), "..")
8
+
9
+ $LOAD_PATH.unshift(File.join(top_dir, "test-unit", "lib"))
10
+ require 'test/unit'
11
+
12
+ # $LOAD_PATH.unshift(File.join(top_dir, "..", "ldap", "lib"))
13
+ # $LOAD_PATH.unshift(File.join(top_dir, "..", "ldap"))
14
+ $LOAD_PATH.unshift(File.join(top_dir, "..", "activeldap", "lib"))
15
+ $LOAD_PATH.unshift(File.join(top_dir, "lib"))
16
+ $LOAD_PATH.unshift(File.join(top_dir, "test"))
17
+
18
+ ARGV.unshift("--priority")
19
+
20
+ exit Test::Unit::AutoRunner.run(true)
@@ -0,0 +1,69 @@
1
+ require 'asl-test-utils'
2
+
3
+ class AslGroupAddTest < Test::Unit::TestCase
4
+ include AslTestUtils
5
+
6
+ def setup
7
+ super
8
+ @command = File.join(@bin_dir, "asl-groupadd")
9
+ end
10
+
11
+ def test_run_as_normal_user
12
+ assert_equal([false, "", _("need root authority.") + "\n"],
13
+ run_command_as_normal_user("group-name"))
14
+ end
15
+
16
+ def test_exist_group
17
+ make_dummy_group do |group|
18
+ assert(@group_class.exists?(group.cn))
19
+ assert_equal([false, "", _("group already exists: %s") % group.cn + "\n"],
20
+ run_command(group.cn))
21
+ assert(@group_class.exists?(group.cn))
22
+ end
23
+ end
24
+
25
+ def test_add_group
26
+ ensure_delete_group("test-group") do |cn|
27
+ assert_asl_groupadd_successfully(cn)
28
+ end
29
+ end
30
+
31
+ def test_specify_gid
32
+ ensure_delete_group("test-group") do |cn|
33
+ gid_number = "11111"
34
+ assert_asl_groupadd_successfully(cn, "#{gid_number}\n",
35
+ "--print-gid-number",
36
+ "--gid", gid_number)
37
+ end
38
+ end
39
+
40
+ def test_print_gid_number
41
+ ensure_delete_group("test-group") do |cn|
42
+ pool_class = Class.new(ActiveSambaLdap::UnixIdPool)
43
+ pool_class.ldap_mapping
44
+ pool = pool_class.new(pool_class.configuration[:samba_domain])
45
+ next_gid = pool.find_available_gid_number(@group_class)
46
+ assert_asl_groupadd_successfully(cn, "#{next_gid}\n",
47
+ "--print-gid-number")
48
+ end
49
+ end
50
+
51
+ private
52
+ def assert_asl_groupadd_successfully(name, message=nil, *args)
53
+ _wrap_assertion do
54
+ assert(!@group_class.exists?(name))
55
+ args << name
56
+ assert_equal([true, "#{message}", ""], run_command(*args))
57
+ assert(@group_class.exists?(name))
58
+ end
59
+ end
60
+
61
+ def assert_asl_groupadd_failed(name, message, *args)
62
+ _wrap_assertion do
63
+ assert(!@group_class.exists?(name))
64
+ args << name
65
+ assert_equal([false, "", message], run_command(*args))
66
+ assert(!@group_class.exists?(name))
67
+ end
68
+ end
69
+ end