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,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