ActiveSambaLdap 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
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,92 @@
1
+ require 'asl-test-utils'
2
+
3
+ class AslPopulateTest < Test::Unit::TestCase
4
+ include AslTestUtils
5
+
6
+ def setup
7
+ super
8
+ @command = File.join(@bin_dir, "asl-populate")
9
+ end
10
+
11
+ def test_run_as_normal_user
12
+ assert_equal([false, "", _("need root authority.") + "\n"],
13
+ run_command_as_normal_user)
14
+ end
15
+
16
+ def test_populate
17
+ ActiveSambaLdap::Base.purge
18
+ assert_equal([], ActiveSambaLdap::Base.search)
19
+ assert_asl_populate_successfully("Administrator")
20
+ base = ActiveSambaLdap::Base.base
21
+
22
+ results = ActiveSambaLdap::Base.search
23
+
24
+ config = ActiveSambaLdap::Base.configuration
25
+ users_suffix = config[:users_suffix]
26
+ groups_suffix = config[:groups_suffix]
27
+ computers_suffix = config[:computers_suffix]
28
+ idmap_suffix = config[:idmap_suffix]
29
+ domain = config[:samba_domain]
30
+ assert_equal([
31
+ nil,
32
+ users_suffix,
33
+ groups_suffix,
34
+ computers_suffix,
35
+ idmap_suffix,
36
+ "sambaDomainName=#{domain}",
37
+ "uid=Administrator,#{users_suffix}",
38
+ "uid=Guest,#{users_suffix}",
39
+ "cn=Users,#{groups_suffix}",
40
+ "cn=Account Operators,#{groups_suffix}",
41
+ "cn=Administrators,#{groups_suffix}",
42
+ "cn=Backup Operators,#{groups_suffix}",
43
+ "cn=Domain Admins,#{groups_suffix}",
44
+ "cn=Domain Computers,#{groups_suffix}",
45
+ "cn=Domain Guests,#{groups_suffix}",
46
+ "cn=Domain Users,#{groups_suffix}",
47
+ "cn=Guests,#{groups_suffix}",
48
+ "cn=Power Users,#{groups_suffix}",
49
+ "cn=Print Operators,#{groups_suffix}",
50
+ "cn=Replicators,#{groups_suffix}",
51
+ "cn=System Operators,#{groups_suffix}",
52
+ ].collect {|x| [x, base].compact.join(",")}.sort,
53
+ results.collect {|dn, attributes| dn}.sort)
54
+ end
55
+
56
+ def test_wrong_password
57
+ ActiveSambaLdap::Base.purge
58
+ assert_asl_populate_miss_match_password
59
+ end
60
+
61
+ private
62
+ def assert_asl_populate_successfully(password, name=nil, *args)
63
+ name ||= @user_class::DOMAIN_ADMIN_NAME
64
+ assert_equal([true,
65
+ [
66
+ _("Password for %s: ") % name,
67
+ _("Retype password for %s: ") % name,
68
+ ].join("\n") + "\n",
69
+ "",
70
+ ],
71
+ run_command(*args) do |input, output|
72
+ output.puts(password)
73
+ output.puts(password)
74
+ end)
75
+ end
76
+
77
+ def assert_asl_populate_miss_match_password(name=nil, *args)
78
+ name ||= @user_class::DOMAIN_ADMIN_NAME
79
+ password = "password"
80
+ assert_equal([false,
81
+ [
82
+ _("Password for %s: ") % name,
83
+ _("Retype password for %s: ") % name,
84
+ ].join("\n") + "\n",
85
+ _("Passwords don't match.") + "\n",
86
+ ],
87
+ run_command(*args) do |input, output|
88
+ output.puts(password)
89
+ output.puts(password + password.reverse)
90
+ end)
91
+ end
92
+ end
@@ -0,0 +1,21 @@
1
+ require 'asl-test-utils'
2
+
3
+ class AslPurgeTest < Test::Unit::TestCase
4
+ include AslTestUtils
5
+
6
+ def setup
7
+ super
8
+ @command = File.join(@bin_dir, "asl-purge")
9
+ end
10
+
11
+ def test_run_as_normal_user
12
+ assert_equal([false, "", _("need root authority.") + "\n"],
13
+ run_command_as_normal_user)
14
+ end
15
+
16
+ def test_populate
17
+ assert_not_equal([], ActiveSambaLdap::Base.search)
18
+ assert_equal([true, "", ""], run_command)
19
+ assert_equal([], ActiveSambaLdap::Base.search)
20
+ end
21
+ end
@@ -0,0 +1,712 @@
1
+ require 'asl-test-utils'
2
+
3
+ class AslUserAddTest < Test::Unit::TestCase
4
+ include AslTestUtils
5
+
6
+ def setup
7
+ super
8
+ @command = File.join(@bin_dir, "asl-useradd")
9
+ end
10
+
11
+ def test_run_as_normal_user
12
+ assert_equal([false, "", _("need root authority.") + "\n"],
13
+ run_asl_useradd_as_normal_user("user-name"))
14
+ assert_equal([false, "", _("need root authority.") + "\n"],
15
+ run_asl_useradd_as_normal_user("computer-name$",
16
+ "--computer-account"))
17
+ end
18
+
19
+ def test_exist_user
20
+ make_dummy_user do |user, password|
21
+ assert(@user_class.exists?(user.uid))
22
+ assert_equal([false, "", _("user already exists: %s") % user.uid + "\n"],
23
+ run_asl_useradd(user.uid))
24
+ assert(@user_class.exists?(user.uid))
25
+ end
26
+ end
27
+
28
+ def test_exist_computer
29
+ make_dummy_computer do |computer, password|
30
+ uid = computer.uid
31
+ assert(@computer_class.exists?(uid))
32
+ assert_equal([false, "",
33
+ _("%s already exists: %s") % [_("computer"), uid] + "\n"],
34
+ run_asl_useradd(uid, "--computer-account"))
35
+ assert(@computer_class.exists?(uid))
36
+ end
37
+ end
38
+
39
+ def test_add_user
40
+ ensure_delete_user("test-user") do |uid,|
41
+ assert_asl_useradd_successfully(uid)
42
+ end
43
+ end
44
+
45
+ def test_add_computer
46
+ ensure_delete_computer("test-computer$") do |uid,|
47
+ assert_asl_useradd_successfully(uid, "--computer-account")
48
+ end
49
+
50
+ ensure_delete_computer("test-computer") do |uid,|
51
+ assert_asl_useradd_successfully(uid, "--computer-account")
52
+ end
53
+ end
54
+
55
+ def test_ou_user
56
+ ensure_delete_ou("SubOu") do |ou|
57
+ ou_class = Class.new(ActiveSambaLdap::Ou)
58
+ ou_class.ldap_mapping :prefix => @user_class.prefix
59
+ assert(!ou_class.exists?(ou))
60
+
61
+ ensure_delete_user("test-user") do |uid,|
62
+ user_class = Class.new(ActiveSambaLdap::User)
63
+ user_class.ldap_mapping :prefix => "ou=#{ou},#{@user_class.prefix}"
64
+
65
+ assert(!user_class.exists?(uid))
66
+ assert_equal([true, "", ""], run_asl_useradd(uid, "--ou", ou))
67
+ assert(user_class.exists?(uid))
68
+
69
+ user = user_class.find(uid)
70
+ assert_match(/\Auid=#{uid},ou=#{ou},/, user.dn)
71
+ end
72
+
73
+ assert(ou_class.exists?(ou))
74
+ end
75
+ end
76
+
77
+ def test_ou_computer
78
+ ensure_delete_ou("SubOu") do |ou|
79
+ ou_class = Class.new(ActiveSambaLdap::Ou)
80
+ ou_class.ldap_mapping :prefix => @computer_class.prefix
81
+ assert(!ou_class.exists?(ou))
82
+
83
+ ensure_delete_computer("test-computer$") do |uid,|
84
+ computer_class = Class.new(ActiveSambaLdap::Computer)
85
+ computer_class.ldap_mapping :prefix =>
86
+ "ou=#{ou},#{@computer_class.prefix}"
87
+
88
+ assert(!computer_class.exists?(uid))
89
+ assert_equal([true, "", ""], run_asl_useradd(uid, "--computer-account",
90
+ "--ou", ou))
91
+ assert(computer_class.exists?(uid))
92
+
93
+ computer = computer_class.find(uid)
94
+ assert_match(/\Auid=#{Regexp.escape(uid)},ou=#{ou},/, computer.dn)
95
+ end
96
+
97
+ assert(ou_class.exists?(ou))
98
+ end
99
+ end
100
+
101
+ def test_uid_number
102
+ ensure_delete_user("test-user") do |uid,|
103
+ uid_number = Integer(next_uid_number) + 10
104
+ assert_asl_useradd_successfully(uid, "--uid", uid_number)
105
+ user = @user_class.find(uid)
106
+ assert_equal(uid_number, user.uid_number.to_i)
107
+ end
108
+
109
+ ensure_delete_computer("test-computer$") do |uid,|
110
+ uid_number = Integer(next_uid_number) + 10
111
+ assert_asl_useradd_successfully(uid, "--computer-account",
112
+ "--uid", uid_number)
113
+ computer = @computer_class.find(uid)
114
+ assert_equal(uid_number, computer.uid_number.to_i)
115
+ end
116
+ end
117
+
118
+ def test_gid_number
119
+ make_dummy_group(:name => "test-group") do |group|
120
+ gid_number = group.gid_number
121
+
122
+ ensure_delete_user("test-user") do |uid,|
123
+ assert_asl_useradd_successfully(uid, "--gid", gid_number)
124
+ user = @user_class.find(uid)
125
+ assert_equal(gid_number, user.gid_number)
126
+ end
127
+
128
+ ensure_delete_computer("test-computer") do |uid,|
129
+ assert_asl_useradd_successfully(uid, "--computer-account",
130
+ "--gid", gid_number)
131
+ computer = @computer_class.find(uid)
132
+ assert_equal(gid_number, computer.gid_number)
133
+ end
134
+ end
135
+ end
136
+
137
+ def test_groups
138
+ make_dummy_group do |group1|
139
+ make_dummy_group do |group2|
140
+ make_dummy_group do |group3|
141
+ gid_numbers = [group1.gid_number,
142
+ group2.gid_number,
143
+ group3.gid_number]
144
+
145
+ ensure_delete_user("test-user") do |uid,|
146
+ args = ["--groups", gid_numbers.join(",")]
147
+ assert_asl_useradd_successfully(uid, *args)
148
+
149
+ user = @user_class.find(uid)
150
+ primary_group = @group_class.find(:first,
151
+ :attribute => "gidNumber",
152
+ :value => user.gid_number)
153
+ groups = @group_class.find(:all,
154
+ :attribute => "memberUid",
155
+ :value => uid)
156
+ assert_equal([primary_group.cn,
157
+ group1.cn,
158
+ group2.cn,
159
+ group3.cn].sort,
160
+ groups.collect {|g| g.cn}.sort)
161
+ end
162
+
163
+ ensure_delete_computer("test-computer$") do |uid,|
164
+ args = ["--computer-account", "--groups", gid_numbers.join(",")]
165
+ assert_asl_useradd_successfully(uid, *args)
166
+
167
+ computer = @computer_class.find(uid)
168
+ primary_group = @group_class.find(:first,
169
+ :attribute => "gidNumber",
170
+ :value => computer.gid_number)
171
+ groups = @group_class.find(:all,
172
+ :attribute => "memberUid",
173
+ :value => uid)
174
+ assert_equal([primary_group.cn,
175
+ group1.cn,
176
+ group2.cn,
177
+ group3.cn].sort,
178
+ groups.collect {|g| g.cn}.sort)
179
+ end
180
+ end
181
+ end
182
+ end
183
+ end
184
+
185
+ def test_create_group_user
186
+ ensure_delete_group("test-user") do |gid,|
187
+ ensure_delete_user("test-user") do |uid,|
188
+ assert_equal(gid, uid)
189
+ assert(!@group_class.exists?(gid))
190
+ assert_asl_useradd_successfully(uid, "--create-group")
191
+ assert(@group_class.exists?(gid))
192
+
193
+ user = @user_class.find(uid)
194
+ group = @group_class.find(gid)
195
+ assert_equal(group.gid_number, user.gid_number)
196
+ end
197
+ end
198
+ end
199
+
200
+ def test_create_group_computer
201
+ ensure_delete_group("test-computer") do |gid,|
202
+ ensure_delete_computer("test-computer$") do |uid,|
203
+ assert_equal("#{gid}$", uid)
204
+ assert(!@group_class.exists?(gid))
205
+ assert_asl_useradd_successfully(uid, "--create-group",
206
+ "--computer-account")
207
+ assert(@group_class.exists?(gid))
208
+
209
+ computer = @computer_class.find(uid)
210
+ group = @group_class.find(gid)
211
+ assert_equal(group.gid_number, computer.gid_number)
212
+ end
213
+ end
214
+ end
215
+
216
+ def test_comment_user
217
+ ensure_delete_user("test-user") do |uid,|
218
+ gecos = "gecos for the user #{uid}"
219
+ assert_asl_useradd_successfully(uid, "--comment", gecos)
220
+ user = @user_class.find(uid)
221
+ assert_equal(gecos, user.gecos)
222
+ end
223
+ end
224
+
225
+ def test_comment_computer
226
+ ensure_delete_computer("test-computer$") do |uid,|
227
+ gecos = "gecos for the computer #{uid}"
228
+ assert_asl_useradd_successfully(uid, "--computer-account",
229
+ "--comment", gecos)
230
+ computer = @computer_class.find(uid)
231
+ assert_equal(gecos, computer.gecos)
232
+ end
233
+ end
234
+
235
+ def test_shell_user
236
+ ensure_delete_user("test-user") do |uid,|
237
+ shell = "/bin/zsh"
238
+ assert_asl_useradd_successfully(uid, "--shell", shell)
239
+ user = @user_class.find(uid)
240
+ assert_equal(shell, user.login_shell)
241
+ end
242
+ end
243
+
244
+ def test_shell_computer
245
+ ensure_delete_computer("test-computer") do |uid,|
246
+ shell = "/bin/zsh"
247
+ assert_asl_useradd_successfully(uid, "--computer-account",
248
+ "--shell", shell)
249
+ computer = @computer_class.find(uid)
250
+ assert_equal(shell, computer.login_shell)
251
+ end
252
+ end
253
+
254
+ def test_common_name_user
255
+ ensure_delete_user("test-user") do |uid,|
256
+ cn = "John Kennedy"
257
+ assert_asl_useradd_successfully(uid, "--common-name", cn)
258
+ user = @user_class.find(uid)
259
+ assert_equal(uid, user.given_name)
260
+ assert_equal(uid, user.surname)
261
+ assert_equal(cn, user.cn)
262
+ end
263
+ end
264
+
265
+ def test_common_name_computer
266
+ ensure_delete_computer("test-computer$") do |uid,|
267
+ cn = "A computer"
268
+ assert_asl_useradd_successfully(uid,
269
+ "--computer-account",
270
+ "--common-name", cn)
271
+ computer = @computer_class.find(uid)
272
+ assert_equal(uid, computer.given_name)
273
+ assert_equal(uid, computer.surname)
274
+ assert_equal(cn, computer.cn)
275
+ end
276
+ end
277
+
278
+ def test_given_name_user
279
+ ensure_delete_user("test-user") do |uid,|
280
+ given_name = "John"
281
+ assert_asl_useradd_successfully(uid, "--given-name", given_name)
282
+ user = @user_class.find(uid)
283
+ assert_equal(given_name, user.given_name)
284
+ assert_equal(uid, user.cn)
285
+ end
286
+ end
287
+
288
+ def test_given_name_computer
289
+ ensure_delete_computer("test-computer$") do |uid,|
290
+ given_name = "John"
291
+ assert_asl_useradd_successfully(uid, "--computer-account",
292
+ "--given-name", given_name)
293
+ computer = @computer_class.find(uid)
294
+ assert_equal(given_name, computer.given_name)
295
+ assert_equal(uid, computer.cn)
296
+ end
297
+ end
298
+
299
+ def test_surname_user
300
+ ensure_delete_user("test-user") do |uid,|
301
+ surname = "Kennedy"
302
+ assert_asl_useradd_successfully(uid, "--surname", surname)
303
+ user = @user_class.find(uid)
304
+ assert_equal(surname, user.surname)
305
+ assert_equal(uid, user.cn)
306
+ end
307
+ end
308
+
309
+ def test_surname_computer
310
+ ensure_delete_computer("test-computer$") do |uid,|
311
+ surname = "Kennedy"
312
+ assert_asl_useradd_successfully(uid, "--computer-account",
313
+ "--surname", surname)
314
+ computer = @computer_class.find(uid)
315
+ assert_equal(surname, computer.surname)
316
+ assert_equal(uid, computer.cn)
317
+ end
318
+ end
319
+
320
+ def test_given_name_and_surname_user
321
+ ensure_delete_user("test-user") do |uid,|
322
+ given_name = "John"
323
+ surname = "Kennedy"
324
+ assert_asl_useradd_successfully(uid,
325
+ "--given-name", given_name,
326
+ "--surname", surname)
327
+ user = @user_class.find(uid)
328
+ assert_equal(given_name, user.given_name)
329
+ assert_equal(surname, user.surname)
330
+ assert_equal("#{given_name} #{surname}", user.cn)
331
+ end
332
+ end
333
+
334
+ def test_given_name_and_surname_computer
335
+ ensure_delete_computer("test-computer$") do |uid,|
336
+ given_name = "John"
337
+ surname = "Kennedy"
338
+ assert_asl_useradd_successfully(uid,
339
+ "--computer-account",
340
+ "--given-name", given_name,
341
+ "--surname", surname)
342
+ computer = @computer_class.find(uid)
343
+ assert_equal(given_name, computer.given_name)
344
+ assert_equal(surname, computer.surname)
345
+ assert_equal("#{given_name} #{surname}", computer.cn)
346
+ end
347
+ end
348
+
349
+ def test_home_directory_user
350
+ ensure_delete_user("test-user") do |uid,|
351
+ home_directory = "/tmp/#{File.basename(__FILE__)}.#{Process.pid}"
352
+ begin
353
+ assert_asl_useradd_successfully(uid,
354
+ "--home-directory", home_directory,
355
+ "--setup-home-directory")
356
+ assert(File.exist?(home_directory))
357
+ assert_equal(@user_class.configuration[:user_home_directory_mode],
358
+ ("%o" % File.stat(home_directory).mode)[-3, 3].to_i(8))
359
+ ensure
360
+ FileUtils.rm_rf(home_directory)
361
+ end
362
+ end
363
+ end
364
+
365
+ def test_home_directory_user_with_mode
366
+ ensure_delete_user("test-user") do |uid,|
367
+ home_directory = "/tmp/#{File.basename(__FILE__)}.#{Process.pid}"
368
+ begin
369
+ assert_asl_useradd_successfully(uid,
370
+ "--home-directory", home_directory,
371
+ "--setup-home-directory",
372
+ "--home-directory-mode", "0700")
373
+ assert(File.exist?(home_directory))
374
+ assert_equal(0700,
375
+ ("%o" % File.stat(home_directory).mode)[-3, 3].to_i(8))
376
+ ensure
377
+ FileUtils.rm_rf(home_directory)
378
+ end
379
+ end
380
+ end
381
+
382
+ def test_home_directory_computer
383
+ ensure_delete_computer("test-computer$") do |uid,|
384
+ home_directory = "/tmp/#{File.basename(__FILE__)}.#{Process.pid}"
385
+ begin
386
+ assert_asl_useradd_successfully(uid,
387
+ "--computer-account",
388
+ "--home-directory", home_directory,
389
+ "--setup-home-directory")
390
+ assert(File.exist?(home_directory))
391
+ ensure
392
+ FileUtils.rm_rf(home_directory)
393
+ end
394
+ end
395
+ end
396
+
397
+ def test_skeleton_directory
398
+ home_directory = File.join(Dir.tmpdir,
399
+ "#{File.basename(__FILE__)}.#{Process.pid}")
400
+ skeleton_directory = "#{home_directory}.skel"
401
+ begin
402
+ normal_file = "hello"
403
+ dot_file = ".hello"
404
+ deep_file = File.join("dir", "hello")
405
+ FileUtils.touch([normal_file, dot_file, deep_file].collect do |f|
406
+ target = File.join(skeleton_directory, f)
407
+ FileUtils.mkdir_p(File.dirname(target))
408
+ target
409
+ end)
410
+
411
+ ensure_delete_user("test-user") do |uid,|
412
+ assert_asl_useradd_successfully(uid,
413
+ "--home-directory", home_directory,
414
+ "--skeleton-directory",
415
+ skeleton_directory,
416
+ "--setup-home-directory")
417
+ assert(File.exist?(home_directory))
418
+ assert(File.exist?(File.join(home_directory, normal_file)))
419
+ assert(File.exist?(File.join(home_directory, dot_file)))
420
+ assert(File.exist?(File.join(home_directory, deep_file)))
421
+ end
422
+
423
+ ensure_delete_computer("test-computer$") do |uid,|
424
+ assert_asl_useradd_successfully(uid,
425
+ "--computer-account",
426
+ "--home-directory", home_directory,
427
+ "--skeleton-directory",
428
+ skeleton_directory,
429
+ "--setup-home-directory")
430
+ assert(File.exist?(home_directory))
431
+ assert(File.exist?(File.join(home_directory, normal_file)))
432
+ assert(File.exist?(File.join(home_directory, dot_file)))
433
+ assert(File.exist?(File.join(home_directory, deep_file)))
434
+ end
435
+ ensure
436
+ FileUtils.rm_rf([home_directory, skeleton_directory])
437
+ end
438
+ end
439
+
440
+ def test_expire_date_user
441
+ ensure_delete_user("test-user") do |uid,|
442
+ expire_date = Time.now + 60 * 24
443
+ assert_asl_useradd_successfully(uid, "--expire-date", expire_date.iso8601)
444
+ user = @user_class.find(uid)
445
+ assert_equal(expire_date.to_i, user.samba_kickoff_time)
446
+ end
447
+ end
448
+
449
+ def test_expire_date_computer
450
+ ensure_delete_computer("test-computer$") do |uid,|
451
+ expire_date = Time.now + 60 * 24
452
+ assert_asl_useradd_successfully(uid, "--computer-account",
453
+ "--expire-date", expire_date.iso8601)
454
+ computer = @computer_class.find(uid)
455
+ assert_nil(computer.samba_kickoff_time)
456
+ end
457
+ end
458
+
459
+ def test_can_change_password_user
460
+ ensure_delete_user("test-user") do |uid,|
461
+ assert_asl_useradd_successfully(uid, "--can-change-password")
462
+ user = @user_class.find(uid)
463
+ assert(user.can_change_password?)
464
+ end
465
+ end
466
+
467
+ def test_can_change_password_computer
468
+ ensure_delete_computer("test-computer$") do |uid,|
469
+ ensure_delete_computer("test-computer2$") do |uid2,|
470
+ assert_asl_useradd_successfully(uid, "--computer-account")
471
+ assert_asl_useradd_successfully(uid2, "--computer-account",
472
+ "--can-change-password")
473
+ computer = @computer_class.find(uid)
474
+ computer2 = @computer_class.find(uid2)
475
+ assert_equal(computer.can_change_password?,
476
+ computer2.can_change_password?)
477
+ end
478
+ end
479
+ end
480
+
481
+ def test_no_can_change_password_user
482
+ ensure_delete_user("test-user") do |uid,|
483
+ assert_asl_useradd_successfully(uid, "--no-can-change-password")
484
+ user = @user_class.find(uid)
485
+ assert(!user.can_change_password?)
486
+ end
487
+ end
488
+
489
+ def test_no_can_change_password_computer
490
+ ensure_delete_computer("test-computer$") do |uid,|
491
+ ensure_delete_computer("test-computer2$") do |uid2,|
492
+ assert_asl_useradd_successfully(uid, "--computer-account")
493
+ assert_asl_useradd_successfully(uid2, "--computer-account",
494
+ "--no-can-change-password")
495
+ computer = @computer_class.find(uid)
496
+ computer2 = @computer_class.find(uid2)
497
+ assert_equal(computer.can_change_password?,
498
+ computer2.can_change_password?)
499
+ end
500
+ end
501
+ end
502
+
503
+ def test_must_change_password_user
504
+ ensure_delete_user("test-user") do |uid,|
505
+ assert_asl_useradd_successfully(uid, "--must-change-password")
506
+ user = @user_class.find(uid)
507
+ assert(user.must_change_password?)
508
+ end
509
+ end
510
+
511
+ def test_must_change_password_computer
512
+ ensure_delete_computer("test-computer$") do |uid,|
513
+ ensure_delete_computer("test-computer2$") do |uid2,|
514
+ assert_asl_useradd_successfully(uid, "--computer-account")
515
+ assert_asl_useradd_successfully(uid2, "--computer-account",
516
+ "--must-change-password")
517
+ computer = @computer_class.find(uid)
518
+ computer2 = @computer_class.find(uid2)
519
+ assert_equal(computer.must_change_password?,
520
+ computer2.must_change_password?)
521
+ end
522
+ end
523
+ end
524
+
525
+ def test_no_must_change_password_user
526
+ ensure_delete_user("test-user") do |uid,|
527
+ assert_asl_useradd_successfully(uid, "--no-must-change-password")
528
+ user = @user_class.find(uid)
529
+ assert(!user.must_change_password?)
530
+ end
531
+ end
532
+
533
+ def test_no_must_change_password_computer
534
+ ensure_delete_computer("test-computer$") do |uid,|
535
+ ensure_delete_computer("test-computer2$") do |uid2,|
536
+ assert_asl_useradd_successfully(uid, "--computer-account")
537
+ assert_asl_useradd_successfully(uid2, "--computer-account",
538
+ "--no-must-change-password")
539
+ computer = @computer_class.find(uid)
540
+ computer2 = @computer_class.find(uid2)
541
+ assert_equal(computer.must_change_password?,
542
+ computer2.must_change_password?)
543
+ end
544
+ end
545
+ end
546
+
547
+ def test_samba_home_path_user
548
+ ensure_delete_user("test-user") do |uid,|
549
+ home_path = "\\\\ANYWHERE\\here\\%U"
550
+ assert_asl_useradd_successfully(uid, "--samba-home-path", home_path)
551
+ user = @user_class.find(uid)
552
+ assert_equal(home_path.gsub(/%U/, uid), user.samba_home_path)
553
+ end
554
+ end
555
+
556
+ def test_samba_home_path_computer
557
+ ensure_delete_computer("test-computer$") do |uid,|
558
+ home_path = "\\\\ANYWHERE\\here\\%U"
559
+ assert_asl_useradd_successfully(uid, "--computer-account",
560
+ "--samba-home-path", home_path)
561
+ computer = @computer_class.find(uid)
562
+ assert_nil(computer.samba_home_path)
563
+ end
564
+ end
565
+
566
+ def test_samba_home_drive_user
567
+ ensure_delete_user("test-user") do |uid,|
568
+ home_drive = "X:"
569
+ assert_asl_useradd_successfully(uid, "--samba-home-drive", home_drive)
570
+ user = @user_class.find(uid)
571
+ assert_equal(home_drive, user.samba_home_drive)
572
+ end
573
+ end
574
+
575
+ def test_samba_home_drive_computer
576
+ ensure_delete_computer("test-computer$") do |uid,|
577
+ home_drive = "X:"
578
+ assert_asl_useradd_successfully(uid, "--computer-account",
579
+ "--samba-home-drive", home_drive)
580
+ computer = @computer_class.find(uid)
581
+ assert_nil(computer.samba_home_drive)
582
+ end
583
+ end
584
+
585
+ def test_samba_home_drive_abbrev_user
586
+ ensure_delete_user("test-user") do |uid,|
587
+ home_drive = "X"
588
+ assert_asl_useradd_successfully(uid, "--samba-home-drive", home_drive)
589
+ user = @user_class.find(uid)
590
+ assert_equal("#{home_drive}:", user.samba_home_drive)
591
+ end
592
+ end
593
+
594
+ def test_samba_home_drive_abbrev_computer
595
+ ensure_delete_computer("test-computer$") do |uid,|
596
+ home_drive = "X"
597
+ assert_asl_useradd_successfully(uid, "--computer-account",
598
+ "--samba-home-drive", home_drive)
599
+ computer = @computer_class.find(uid)
600
+ assert_nil(computer.samba_home_drive)
601
+ end
602
+ end
603
+
604
+ def test_samba_logon_script_user
605
+ ensure_delete_user("test-user") do |uid,|
606
+ script = "%U-logon.bat"
607
+ assert_asl_useradd_successfully(uid, "--samba-logon-script", script)
608
+ user = @user_class.find(uid)
609
+ assert_equal(script.gsub(/%U/, uid), user.samba_logon_script)
610
+ end
611
+ end
612
+
613
+ def test_samba_logon_script_computer
614
+ ensure_delete_computer("test-computer$") do |uid,|
615
+ script = "%U-logon.bat"
616
+ assert_asl_useradd_successfully(uid, "--computer-account",
617
+ "--samba-logon-script", script)
618
+ computer = @computer_class.find(uid)
619
+ assert_nil(computer.samba_logon_script)
620
+ end
621
+ end
622
+
623
+ def test_samba_profile_path_user
624
+ ensure_delete_user("test-user") do |uid,|
625
+ profile = "\\\\ANYWHERE\\profiles\\profile-%U"
626
+ assert_asl_useradd_successfully(uid, "--samba-profile-path", profile)
627
+ user = @user_class.find(uid)
628
+ assert_equal(profile.gsub(/%U/, uid), user.samba_profile_path)
629
+ end
630
+ end
631
+
632
+ def test_samba_profile_path_computer
633
+ ensure_delete_computer("test-computer$") do |uid,|
634
+ profile = "\\\\ANYWHERE\\profiles\\profile-%U"
635
+ assert_asl_useradd_successfully(uid, "--computer-account",
636
+ "--samba-profile-path", profile)
637
+ computer = @computer_class.find(uid)
638
+ assert_nil(computer.samba_profile_path)
639
+ end
640
+ end
641
+
642
+ def test_samba_account_flags_user
643
+ ensure_delete_user("test-user") do |uid,|
644
+ flags = "[UX]"
645
+ assert_asl_useradd_successfully(uid, "--samba-account-flags", flags)
646
+ user = @user_class.find(uid)
647
+ assert_equal(flags, user.samba_acct_flags)
648
+ end
649
+ end
650
+
651
+ def test_samba_account_flags_computer
652
+ ensure_delete_computer("test-computer$") do |uid,|
653
+ flags = "[WX]"
654
+ assert_asl_useradd_successfully(uid, "--computer-account",
655
+ "--samba-account-flags", flags)
656
+ computer = @computer_class.find(uid)
657
+ assert_equal(flags, computer.samba_acct_flags)
658
+ end
659
+ end
660
+
661
+ private
662
+ def run_asl_useradd(*other_args, &block)
663
+ other_args = prepare_args(other_args)
664
+ run_command(*other_args, &block)
665
+ end
666
+
667
+ def run_asl_useradd_as_normal_user(*other_args, &block)
668
+ other_args = prepare_args(other_args)
669
+ run_command_as_normal_user(*other_args, &block)
670
+ end
671
+
672
+ def prepare_args(args)
673
+ args = args.dup
674
+ if args.grep(/\A--(no-)?setup-home-directory\z/).empty?
675
+ args << "--no-setup-home-directory"
676
+ end
677
+ if args.grep(/\A--(no-)?create-group\z/).empty?
678
+ args << "--no-create-group"
679
+ end
680
+ args
681
+ end
682
+
683
+ def assert_asl_useradd_successfully(name, *args)
684
+ _wrap_assertion do
685
+ if args.grep(/\A--computer-account\z/).empty?
686
+ member_class = @user_class
687
+ else
688
+ name = name.sub(/\$*\z/, '') + "$"
689
+ member_class = @computer_class
690
+ end
691
+ assert(!member_class.exists?(name))
692
+ args << name
693
+ assert_equal([true, "", ""], run_asl_useradd(*args))
694
+ assert(member_class.exists?(name))
695
+ end
696
+ end
697
+
698
+ def assert_asl_useradd_failed(name, message, *args)
699
+ _wrap_assertion do
700
+ if args.grep(/\A--computer-account\z/).empty?
701
+ member_class = @user_class
702
+ else
703
+ name = name.sub(/\$*\z/, '') + "$"
704
+ member_class = @computer_class
705
+ end
706
+ assert(!member_class.exists?(name))
707
+ args << name
708
+ assert_equal([false, "", message], run_asl_useradd(*args))
709
+ assert(!member_class.exists?(name))
710
+ end
711
+ end
712
+ end