powerhome-activeldap 3.2.3
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.
- checksums.yaml +7 -0
- data/.yardopts +6 -0
- data/COPYING +340 -0
- data/Gemfile +12 -0
- data/LICENSE +59 -0
- data/README.textile +140 -0
- data/TODO +32 -0
- data/benchmark/README.md +64 -0
- data/benchmark/bench-backend.rb +247 -0
- data/benchmark/bench-instantiate.rb +98 -0
- data/benchmark/config.yaml.sample +5 -0
- data/doc/text/development.textile +54 -0
- data/doc/text/news.textile +811 -0
- data/doc/text/rails.textile +144 -0
- data/doc/text/tutorial.textile +1010 -0
- data/examples/config.yaml.example +5 -0
- data/examples/example.der +0 -0
- data/examples/example.jpg +0 -0
- data/examples/groupadd +41 -0
- data/examples/groupdel +35 -0
- data/examples/groupls +49 -0
- data/examples/groupmod +42 -0
- data/examples/lpasswd +55 -0
- data/examples/objects/group.rb +13 -0
- data/examples/objects/ou.rb +4 -0
- data/examples/objects/user.rb +20 -0
- data/examples/ouadd +38 -0
- data/examples/useradd +45 -0
- data/examples/useradd-binary +53 -0
- data/examples/userdel +34 -0
- data/examples/userls +50 -0
- data/examples/usermod +42 -0
- data/examples/usermod-binary-add +50 -0
- data/examples/usermod-binary-add-time +54 -0
- data/examples/usermod-binary-del +48 -0
- data/examples/usermod-lang-add +43 -0
- data/lib/active_ldap.rb +85 -0
- data/lib/active_ldap/action_controller/ldap_benchmarking.rb +55 -0
- data/lib/active_ldap/acts/tree.rb +78 -0
- data/lib/active_ldap/adapter/base.rb +707 -0
- data/lib/active_ldap/adapter/jndi.rb +184 -0
- data/lib/active_ldap/adapter/jndi_connection.rb +185 -0
- data/lib/active_ldap/adapter/ldap.rb +290 -0
- data/lib/active_ldap/adapter/ldap_ext.rb +105 -0
- data/lib/active_ldap/adapter/net_ldap.rb +309 -0
- data/lib/active_ldap/adapter/net_ldap_ext.rb +23 -0
- data/lib/active_ldap/association/belongs_to.rb +47 -0
- data/lib/active_ldap/association/belongs_to_many.rb +58 -0
- data/lib/active_ldap/association/children.rb +21 -0
- data/lib/active_ldap/association/collection.rb +105 -0
- data/lib/active_ldap/association/has_many.rb +31 -0
- data/lib/active_ldap/association/has_many_utils.rb +44 -0
- data/lib/active_ldap/association/has_many_wrap.rb +75 -0
- data/lib/active_ldap/association/proxy.rb +107 -0
- data/lib/active_ldap/associations.rb +205 -0
- data/lib/active_ldap/attribute_methods.rb +23 -0
- data/lib/active_ldap/attribute_methods/before_type_cast.rb +24 -0
- data/lib/active_ldap/attribute_methods/dirty.rb +43 -0
- data/lib/active_ldap/attribute_methods/query.rb +31 -0
- data/lib/active_ldap/attribute_methods/read.rb +44 -0
- data/lib/active_ldap/attribute_methods/write.rb +38 -0
- data/lib/active_ldap/attributes.rb +176 -0
- data/lib/active_ldap/base.rb +1410 -0
- data/lib/active_ldap/callbacks.rb +71 -0
- data/lib/active_ldap/command.rb +49 -0
- data/lib/active_ldap/compatible.rb +44 -0
- data/lib/active_ldap/configuration.rb +147 -0
- data/lib/active_ldap/connection.rb +299 -0
- data/lib/active_ldap/distinguished_name.rb +291 -0
- data/lib/active_ldap/entry_attribute.rb +78 -0
- data/lib/active_ldap/escape.rb +12 -0
- data/lib/active_ldap/get_text.rb +20 -0
- data/lib/active_ldap/get_text/parser.rb +161 -0
- data/lib/active_ldap/helper.rb +92 -0
- data/lib/active_ldap/human_readable.rb +133 -0
- data/lib/active_ldap/ldap_error.rb +74 -0
- data/lib/active_ldap/ldif.rb +930 -0
- data/lib/active_ldap/log_subscriber.rb +50 -0
- data/lib/active_ldap/object_class.rb +95 -0
- data/lib/active_ldap/operations.rb +624 -0
- data/lib/active_ldap/persistence.rb +100 -0
- data/lib/active_ldap/populate.rb +53 -0
- data/lib/active_ldap/railtie.rb +43 -0
- data/lib/active_ldap/railties/controller_runtime.rb +48 -0
- data/lib/active_ldap/schema.rb +701 -0
- data/lib/active_ldap/schema/syntaxes.rb +422 -0
- data/lib/active_ldap/timeout.rb +75 -0
- data/lib/active_ldap/timeout_stub.rb +17 -0
- data/lib/active_ldap/user_password.rb +99 -0
- data/lib/active_ldap/validations.rb +200 -0
- data/lib/active_ldap/version.rb +3 -0
- data/lib/active_ldap/xml.rb +139 -0
- data/lib/rails/generators/active_ldap/model/USAGE +18 -0
- data/lib/rails/generators/active_ldap/model/model_generator.rb +47 -0
- data/lib/rails/generators/active_ldap/model/templates/model_active_ldap.rb +3 -0
- data/lib/rails/generators/active_ldap/scaffold/scaffold_generator.rb +14 -0
- data/lib/rails/generators/active_ldap/scaffold/templates/ldap.yml +19 -0
- data/po/en/active-ldap.po +4029 -0
- data/po/ja/active-ldap.po +4060 -0
- data/test/add-phonetic-attribute-options-to-slapd.ldif +10 -0
- data/test/al-test-utils.rb +428 -0
- data/test/command.rb +111 -0
- data/test/config.yaml.sample +6 -0
- data/test/fixtures/lower_case_object_class_schema.rb +802 -0
- data/test/run-test.rb +34 -0
- data/test/test_acts_as_tree.rb +60 -0
- data/test/test_adapter.rb +121 -0
- data/test/test_associations.rb +701 -0
- data/test/test_attributes.rb +117 -0
- data/test/test_base.rb +1214 -0
- data/test/test_base_per_instance.rb +61 -0
- data/test/test_bind.rb +62 -0
- data/test/test_callback.rb +31 -0
- data/test/test_configuration.rb +40 -0
- data/test/test_connection.rb +82 -0
- data/test/test_connection_per_class.rb +112 -0
- data/test/test_connection_per_dn.rb +112 -0
- data/test/test_dirty.rb +98 -0
- data/test/test_dn.rb +172 -0
- data/test/test_find.rb +176 -0
- data/test/test_groupadd.rb +50 -0
- data/test/test_groupdel.rb +46 -0
- data/test/test_groupls.rb +107 -0
- data/test/test_groupmod.rb +51 -0
- data/test/test_ldif.rb +1890 -0
- data/test/test_load.rb +133 -0
- data/test/test_lpasswd.rb +75 -0
- data/test/test_object_class.rb +74 -0
- data/test/test_persistence.rb +131 -0
- data/test/test_reflection.rb +175 -0
- data/test/test_schema.rb +559 -0
- data/test/test_syntax.rb +444 -0
- data/test/test_user.rb +217 -0
- data/test/test_user_password.rb +108 -0
- data/test/test_useradd-binary.rb +62 -0
- data/test/test_useradd.rb +57 -0
- data/test/test_userdel.rb +48 -0
- data/test/test_userls.rb +91 -0
- data/test/test_usermod-binary-add-time.rb +65 -0
- data/test/test_usermod-binary-add.rb +64 -0
- data/test/test_usermod-binary-del.rb +66 -0
- data/test/test_usermod-lang-add.rb +59 -0
- data/test/test_usermod.rb +58 -0
- data/test/test_validation.rb +274 -0
- metadata +379 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
require 'al-test-utils'
|
|
2
|
+
|
|
3
|
+
class TestUserPassword < Test::Unit::TestCase
|
|
4
|
+
priority :must
|
|
5
|
+
|
|
6
|
+
priority :normal
|
|
7
|
+
def test_valid?
|
|
8
|
+
{
|
|
9
|
+
"{CRYPT}.yNLaKqtwQbnY" => 'wibble', #CRYPT
|
|
10
|
+
"{MD5}DRB9CfW75Ayt495ccenptw==" => 'letmein', #MD5
|
|
11
|
+
"{SMD5}8L2iXJuazftLVHrAf7ptPFQIDaw=" => 'letmein', #SMD5 as generated by slappasswd (4 bytes of salt)
|
|
12
|
+
"{SMD5}kXibTNG+O98gaQtkugYcmSTiE+M2Z5TA" => 'letmein', #SMD5 as generated by Apache Directory Studio (8 bytes of salt)
|
|
13
|
+
"{SHA}t6h1/B6iKLkGEEG3zsS9PFKrPOM=" => 'letmein', #SHA
|
|
14
|
+
"{SSHA}YA87hc9/L/cCGR1HValcJb7a8AYxZXY4" => 'wibble', # SSHA as generated by slappasswd (4 bytes of salt)
|
|
15
|
+
"{SSHA}6J6Ios3l1panY9sm0+g9l3/jFz2kwOPrVA4+OA==" => 'letmein', # SSHA as generated by Apache Directory Studio (8 bytes of salt)
|
|
16
|
+
"letmein" => 'letmein', #Cleartext password
|
|
17
|
+
}.each do |hash, plain|
|
|
18
|
+
assert_send([ActiveLdap::UserPassword, :valid?,
|
|
19
|
+
plain, hash])
|
|
20
|
+
assert_not_send([ActiveLdap::UserPassword, :valid?,
|
|
21
|
+
"not#{plain}", hash])
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_crypt
|
|
26
|
+
salt = ".WoUoU9f3IlUx9Hh7D/8y.xA6ziklGib"
|
|
27
|
+
assert_equal("{CRYPT}.W57FZhV52w0s",
|
|
28
|
+
ActiveLdap::UserPassword.crypt("password", salt))
|
|
29
|
+
|
|
30
|
+
password = "PASSWORD"
|
|
31
|
+
hashed_password = ActiveLdap::UserPassword.crypt(password)
|
|
32
|
+
salt = hashed_password.sub(/^\{CRYPT\}/, '')
|
|
33
|
+
assert_equal(hashed_password,
|
|
34
|
+
ActiveLdap::UserPassword.crypt(password, salt))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_extract_salt_for_crypt
|
|
38
|
+
assert_extract_salt(:crypt, "AB", "ABCDE")
|
|
39
|
+
assert_extract_salt(:crypt, "$1", "$1")
|
|
40
|
+
assert_extract_salt(:crypt, "$1$$", "$1$")
|
|
41
|
+
assert_extract_salt(:crypt, "$1$$", "$1$$")
|
|
42
|
+
assert_extract_salt(:crypt, "$1$abcdefgh$", "$1$abcdefgh$")
|
|
43
|
+
assert_extract_salt(:crypt, "$1$abcdefgh$", "$1$abcdefghi$")
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_md5
|
|
47
|
+
assert_equal("{MD5}X03MO1qnZdYdgyfeuILPmQ==",
|
|
48
|
+
ActiveLdap::UserPassword.md5("password"))
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_smd5
|
|
52
|
+
assert_equal("{SMD5}gjz+SUSfZaux99Xsji/No200cGI=",
|
|
53
|
+
ActiveLdap::UserPassword.smd5("password", "m4pb"))
|
|
54
|
+
|
|
55
|
+
password = "PASSWORD"
|
|
56
|
+
hashed_password = ActiveLdap::UserPassword.smd5(password)
|
|
57
|
+
salt = decode64(hashed_password.sub(/^\{SMD5\}/, ''))[-4, 4]
|
|
58
|
+
assert_equal(hashed_password,
|
|
59
|
+
ActiveLdap::UserPassword.smd5(password, salt))
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_extract_salt_for_smd5
|
|
63
|
+
assert_extract_salt(:smd5, 'this', encode64("1234567890123456this"))
|
|
64
|
+
assert_extract_salt(:smd5, 'this is the salt', encode64("1234567890123456this is the salt"))
|
|
65
|
+
assert_extract_salt(:smd5, nil, encode64("123456789"))
|
|
66
|
+
assert_extract_salt(:smd5, nil, encode64("123456789012345"))
|
|
67
|
+
assert_extract_salt(:smd5, nil, encode64("1234567890123456"))
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_sha
|
|
71
|
+
assert_equal("{SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g=",
|
|
72
|
+
ActiveLdap::UserPassword.sha("password"))
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_ssha
|
|
76
|
+
assert_equal("{SSHA}ipnlCLA1HaK3mm3hyneJIp+Px2h1RGk3",
|
|
77
|
+
ActiveLdap::UserPassword.ssha("password", "uDi7"))
|
|
78
|
+
|
|
79
|
+
password = "PASSWORD"
|
|
80
|
+
hashed_password = ActiveLdap::UserPassword.ssha(password)
|
|
81
|
+
salt = decode64(hashed_password.sub(/^\{SSHA\}/, ''))[-4, 4]
|
|
82
|
+
assert_equal(hashed_password,
|
|
83
|
+
ActiveLdap::UserPassword.ssha(password, salt))
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def test_extract_salt_for_ssha
|
|
87
|
+
assert_extract_salt(:ssha, 'this', encode64("12345678901234567890this"))
|
|
88
|
+
assert_extract_salt(:ssha, 'this is the salt', encode64("12345678901234567890this is the salt"))
|
|
89
|
+
assert_extract_salt(:ssha, nil, encode64("12345678901234"))
|
|
90
|
+
assert_extract_salt(:ssha, nil, encode64("1234567890123456789"))
|
|
91
|
+
assert_extract_salt(:ssha, nil, encode64("12345678901234567890"))
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
private
|
|
95
|
+
def assert_extract_salt(type, expected, hashed_password)
|
|
96
|
+
actual = ActiveLdap::UserPassword.send("extract_salt_for_#{type}",
|
|
97
|
+
hashed_password)
|
|
98
|
+
assert_equal(expected, actual)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def encode64(string)
|
|
102
|
+
[string].pack('m').chomp
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def decode64(string)
|
|
106
|
+
string.unpack('m')[0]
|
|
107
|
+
end
|
|
108
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
require 'al-test-utils'
|
|
2
|
+
|
|
3
|
+
class TestUseraddBinary < Test::Unit::TestCase
|
|
4
|
+
include AlTestUtils
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
super
|
|
8
|
+
@command = File.join(@examples_dir, "useradd-binary")
|
|
9
|
+
make_ou("People")
|
|
10
|
+
@user_class.prefix = "ou=People"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
priority :must
|
|
14
|
+
|
|
15
|
+
priority :normal
|
|
16
|
+
def test_exist_user
|
|
17
|
+
make_temporary_user do |user, password|
|
|
18
|
+
assert(@user_class.exists?(user.uid))
|
|
19
|
+
assert_equal([false, "User #{user.uid} already exists.\n"],
|
|
20
|
+
run_command(user.uid, user.cn, user.uid_number))
|
|
21
|
+
assert(@user_class.exists?(user.uid))
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_add_user
|
|
26
|
+
ensure_delete_user("test-user") do |uid,|
|
|
27
|
+
assert_useradd_binary_successfully(uid, uid, 10000)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
def assert_useradd_binary_successfully(name, cn, uid, *args, &block)
|
|
33
|
+
_wrap_assertion do
|
|
34
|
+
assert(!@user_class.exists?(name))
|
|
35
|
+
args.concat([name, cn, uid])
|
|
36
|
+
assert_equal([true, ""], run_command(*args, &block))
|
|
37
|
+
assert(@user_class.exists?(name))
|
|
38
|
+
|
|
39
|
+
user = @user_class.find(name)
|
|
40
|
+
assert_equal(name, user.uid)
|
|
41
|
+
assert_equal(cn, user.cn)
|
|
42
|
+
assert_equal(uid.to_i, user.uid_number)
|
|
43
|
+
assert_equal(uid.to_i, user.gid_number)
|
|
44
|
+
assert_equal(uid.to_s, user.uid_number_before_type_cast)
|
|
45
|
+
assert_equal(uid.to_s, user.gid_number_before_type_cast)
|
|
46
|
+
assert_equal(['person', 'posixAccount', 'shadowAccount',
|
|
47
|
+
'strongAuthenticationUser'].sort, user.classes.sort)
|
|
48
|
+
cert = File.read(File.join(@examples_dir, 'example.der'))
|
|
49
|
+
cert.force_encoding('ascii-8bit') if cert.respond_to?(:force_encoding)
|
|
50
|
+
assert_equal(cert, user.user_certificate)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def assert_useradd_binary_failed(name, cn, uid, message, *args, &block)
|
|
55
|
+
_wrap_assertion do
|
|
56
|
+
assert(!@user_class.exists?(name))
|
|
57
|
+
args.concat([name, cn, uid])
|
|
58
|
+
assert_equal([false, message], run_command(*args, &block))
|
|
59
|
+
assert(!@user_class.exists?(name))
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
require 'al-test-utils'
|
|
2
|
+
|
|
3
|
+
class TestUseradd < Test::Unit::TestCase
|
|
4
|
+
include AlTestUtils
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
super
|
|
8
|
+
@command = File.join(@examples_dir, "useradd")
|
|
9
|
+
make_ou("People")
|
|
10
|
+
@user_class.prefix = "ou=People"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
priority :must
|
|
14
|
+
|
|
15
|
+
priority :normal
|
|
16
|
+
def test_exist_user
|
|
17
|
+
make_temporary_user do |user, password|
|
|
18
|
+
assert(@user_class.exists?(user.uid))
|
|
19
|
+
assert_equal([false, "User #{user.uid} already exists.\n"],
|
|
20
|
+
run_command(user.uid, user.cn, user.uid_number))
|
|
21
|
+
assert(@user_class.exists?(user.uid))
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_add_user
|
|
26
|
+
ensure_delete_user("test-user") do |uid,|
|
|
27
|
+
assert_useradd_successfully(uid, uid, 10000)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
def assert_useradd_successfully(name, cn, uid, *args, &block)
|
|
33
|
+
_wrap_assertion do
|
|
34
|
+
assert(!@user_class.exists?(name))
|
|
35
|
+
args.concat([name, cn, uid])
|
|
36
|
+
assert_equal([true, ""], run_command(*args, &block))
|
|
37
|
+
assert(@user_class.exists?(name))
|
|
38
|
+
|
|
39
|
+
user = @user_class.find(name)
|
|
40
|
+
assert_equal(name, user.uid)
|
|
41
|
+
assert_equal(cn, user.cn)
|
|
42
|
+
assert_equal(uid.to_i, user.uid_number)
|
|
43
|
+
assert_equal(uid.to_i, user.gid_number)
|
|
44
|
+
assert_equal(uid.to_s, user.uid_number_before_type_cast)
|
|
45
|
+
assert_equal(uid.to_s, user.gid_number_before_type_cast)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def assert_useradd_failed(name, cn, uid, message, *args, &block)
|
|
50
|
+
_wrap_assertion do
|
|
51
|
+
assert(!@user_class.exists?(name))
|
|
52
|
+
args.concat([name, cn, uid])
|
|
53
|
+
assert_equal([false, message], run_command(*args, &block))
|
|
54
|
+
assert(!@user_class.exists?(name))
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require 'al-test-utils'
|
|
2
|
+
|
|
3
|
+
class TestUserdel < Test::Unit::TestCase
|
|
4
|
+
include AlTestUtils
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
super
|
|
8
|
+
@command = File.join(@examples_dir, "userdel")
|
|
9
|
+
make_ou("People")
|
|
10
|
+
@user_class.prefix = "ou=People"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
priority :must
|
|
14
|
+
|
|
15
|
+
priority :normal
|
|
16
|
+
def test_non_exist_user
|
|
17
|
+
ensure_delete_user("test-user") do |uid,|
|
|
18
|
+
assert(!@user_class.exists?(uid))
|
|
19
|
+
assert_equal([false, "User #{uid} doesn't exist.\n"], run_command(uid))
|
|
20
|
+
assert(!@user_class.exists?(uid))
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_delete_user
|
|
25
|
+
make_temporary_user do |user, password|
|
|
26
|
+
assert_userdel_successfully(user.uid)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
def assert_userdel_successfully(name, *args, &block)
|
|
32
|
+
_wrap_assertion do
|
|
33
|
+
assert(@user_class.exists?(name))
|
|
34
|
+
args.concat([name])
|
|
35
|
+
assert_equal([true, ""], run_command(*args, &block))
|
|
36
|
+
assert(!@user_class.exists?(name))
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def assert_userdel_failed(name, message, *args, &block)
|
|
41
|
+
_wrap_assertion do
|
|
42
|
+
assert(@user_class.exists?(name))
|
|
43
|
+
args.concat([name])
|
|
44
|
+
assert_equal([false, message], run_command(*args, &block))
|
|
45
|
+
assert(@user_class.exists?(name))
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
data/test/test_userls.rb
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
require 'al-test-utils'
|
|
2
|
+
|
|
3
|
+
class TestUserls < Test::Unit::TestCase
|
|
4
|
+
include AlTestUtils
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
super
|
|
8
|
+
@command = File.join(@examples_dir, "userls")
|
|
9
|
+
make_ou("People")
|
|
10
|
+
@user_class.prefix = "ou=People"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
priority :must
|
|
14
|
+
|
|
15
|
+
priority :normal
|
|
16
|
+
def test_non_exist_user
|
|
17
|
+
ensure_delete_user("test-user") do |uid,|
|
|
18
|
+
assert(!@user_class.exists?(uid))
|
|
19
|
+
assert_equal([false, "User #{uid} doesn't exist.\n"], run_command(uid))
|
|
20
|
+
assert(!@user_class.exists?(uid))
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_list_user_no_group
|
|
25
|
+
make_temporary_user do |user, password|
|
|
26
|
+
assert_userls_successfully(user.uid, [], [])
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_list_user_have_primary_group
|
|
31
|
+
make_temporary_group do |group|
|
|
32
|
+
make_temporary_user(:gid_number => group.gid_number) do |user, password|
|
|
33
|
+
assert_userls_successfully(user.uid, [group], [])
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_list_user_have_groups
|
|
39
|
+
make_temporary_group do |group1|
|
|
40
|
+
make_temporary_group do |group2|
|
|
41
|
+
options = {:gid_number => group2.gid_number.succ}
|
|
42
|
+
make_temporary_user(options) do |user, password|
|
|
43
|
+
user.groups << group1
|
|
44
|
+
user.groups << group2
|
|
45
|
+
assert_userls_successfully(user.uid, [], [group1, group2])
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_list_user_have_groups_and_primary_group
|
|
52
|
+
make_temporary_group do |group1|
|
|
53
|
+
make_temporary_user(:gid_number => group1.gid_number) do |user, password|
|
|
54
|
+
make_temporary_group do |group2|
|
|
55
|
+
make_temporary_group do |group3|
|
|
56
|
+
user.groups << group2
|
|
57
|
+
user.groups << group3
|
|
58
|
+
assert_userls_successfully(user.uid, [group1], [group2, group3])
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
private
|
|
66
|
+
def assert_userls_successfully(name, primary_groups, groups, *args, &block)
|
|
67
|
+
_wrap_assertion do
|
|
68
|
+
assert(@user_class.exists?(name))
|
|
69
|
+
args.concat([name])
|
|
70
|
+
user = @user_class.find(name)
|
|
71
|
+
group_names = groups.collect {|g| "#{g.cn}"}
|
|
72
|
+
group_infos = (primary_groups + groups).collect do |g|
|
|
73
|
+
"#{g.cn}[#{g.gid_number}]"
|
|
74
|
+
end
|
|
75
|
+
result = user.to_ldif
|
|
76
|
+
result << "Groups by name only: #{group_names.join(', ')}\n"
|
|
77
|
+
result << "Groups: #{group_infos.join(', ')}\n"
|
|
78
|
+
assert_equal([true, result], run_command(*args, &block))
|
|
79
|
+
assert(@user_class.exists?(name))
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def assert_userls_failed(name, message, *args, &block)
|
|
84
|
+
_wrap_assertion do
|
|
85
|
+
assert(@user_class.exists?(name))
|
|
86
|
+
args.concat([name])
|
|
87
|
+
assert_equal([false, message], run_command(*args, &block))
|
|
88
|
+
assert(@user_class.exists?(name))
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
require 'al-test-utils'
|
|
2
|
+
|
|
3
|
+
class TestUsermodBinaryAddTime < Test::Unit::TestCase
|
|
4
|
+
include AlTestUtils
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
super
|
|
8
|
+
@command = File.join(@examples_dir, "usermod-binary-add-time")
|
|
9
|
+
make_ou("People")
|
|
10
|
+
@user_class.prefix = "ou=People"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
priority :must
|
|
14
|
+
|
|
15
|
+
priority :normal
|
|
16
|
+
def test_non_exist_user
|
|
17
|
+
ensure_delete_user("test-user") do |uid,|
|
|
18
|
+
assert(!@user_class.exists?(uid))
|
|
19
|
+
assert_equal([false, "User #{uid} doesn't exist.\n"],
|
|
20
|
+
run_command(uid, "New CN", 11111))
|
|
21
|
+
assert(!@user_class.exists?(uid))
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_modify_user
|
|
26
|
+
make_temporary_user do |user, password|
|
|
27
|
+
assert_usermod_binary_add_time_successfully(user.uid, "New #{user.cn}",
|
|
28
|
+
user.uid_number.to_i + 100)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
def assert_usermod_binary_add_time_successfully(name, cn, uid, *args, &block)
|
|
34
|
+
_wrap_assertion do
|
|
35
|
+
assert(@user_class.exists?(name))
|
|
36
|
+
previous_classes = @user_class.find(name).classes
|
|
37
|
+
args.concat([name, cn, uid])
|
|
38
|
+
assert_equal([true, ""], run_command(*args, &block))
|
|
39
|
+
assert(@user_class.exists?(name))
|
|
40
|
+
|
|
41
|
+
user = @user_class.find(name)
|
|
42
|
+
assert_equal(name, user.uid)
|
|
43
|
+
assert_equal(cn, user.cn)
|
|
44
|
+
assert_equal(uid.to_i, user.uid_number)
|
|
45
|
+
assert_equal(uid.to_i, user.gid_number)
|
|
46
|
+
assert_equal(uid.to_s, user.uid_number_before_type_cast)
|
|
47
|
+
assert_equal(uid.to_s, user.gid_number_before_type_cast)
|
|
48
|
+
assert_equal((previous_classes + ['strongAuthenticationUser']).sort,
|
|
49
|
+
user.classes.sort)
|
|
50
|
+
cert = File.read(File.join(@examples_dir, 'example.der'))
|
|
51
|
+
cert.force_encoding("ascii-8bit") if cert.respond_to?(:force_encoding)
|
|
52
|
+
assert_equal(cert, user.user_certificate)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def assert_usermod_binary_add_time_failed(name, cn, uid, message,
|
|
57
|
+
*args, &block)
|
|
58
|
+
_wrap_assertion do
|
|
59
|
+
assert(@user_class.exists?(name))
|
|
60
|
+
args.concat([name, cn, uid])
|
|
61
|
+
assert_equal([false, message], run_command(*args, &block))
|
|
62
|
+
assert(@user_class.exists?(name))
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require 'al-test-utils'
|
|
2
|
+
|
|
3
|
+
class TestUsermodBinaryAdd < Test::Unit::TestCase
|
|
4
|
+
include AlTestUtils
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
super
|
|
8
|
+
@command = File.join(@examples_dir, "usermod-binary-add")
|
|
9
|
+
make_ou("People")
|
|
10
|
+
@user_class.prefix = "ou=People"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
priority :must
|
|
14
|
+
|
|
15
|
+
priority :normal
|
|
16
|
+
def test_non_exist_user
|
|
17
|
+
ensure_delete_user("test-user") do |uid,|
|
|
18
|
+
assert(!@user_class.exists?(uid))
|
|
19
|
+
assert_equal([false, "User #{uid} doesn't exist.\n"],
|
|
20
|
+
run_command(uid, "New CN", 11111))
|
|
21
|
+
assert(!@user_class.exists?(uid))
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_modify_user
|
|
26
|
+
make_temporary_user do |user, password|
|
|
27
|
+
assert_usermod_binary_add_successfully(user.uid, "New #{user.cn}",
|
|
28
|
+
user.uid_number.to_i + 100)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
def assert_usermod_binary_add_successfully(name, cn, uid, *args, &block)
|
|
34
|
+
_wrap_assertion do
|
|
35
|
+
assert(@user_class.exists?(name))
|
|
36
|
+
previous_classes = @user_class.find(name).classes
|
|
37
|
+
args.concat([name, cn, uid])
|
|
38
|
+
assert_equal([true, ""], run_command(*args, &block))
|
|
39
|
+
assert(@user_class.exists?(name))
|
|
40
|
+
|
|
41
|
+
user = @user_class.find(name)
|
|
42
|
+
assert_equal(name, user.uid)
|
|
43
|
+
assert_equal(cn, user.cn)
|
|
44
|
+
assert_equal(uid.to_i, user.uid_number)
|
|
45
|
+
assert_equal(uid.to_i, user.gid_number)
|
|
46
|
+
assert_equal(uid.to_s, user.uid_number_before_type_cast)
|
|
47
|
+
assert_equal(uid.to_s, user.gid_number_before_type_cast)
|
|
48
|
+
assert_equal((previous_classes + ['strongAuthenticationUser']).sort,
|
|
49
|
+
user.classes.sort)
|
|
50
|
+
cert = File.read(File.join(@examples_dir, 'example.der'))
|
|
51
|
+
cert.force_encoding("ascii-8bit") if cert.respond_to?(:force_encoding)
|
|
52
|
+
assert_equal(cert, user.user_certificate)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def assert_usermod_binary_add_failed(name, cn, uid, message, *args, &block)
|
|
57
|
+
_wrap_assertion do
|
|
58
|
+
assert(@user_class.exists?(name))
|
|
59
|
+
args.concat([name, cn, uid])
|
|
60
|
+
assert_equal([false, message], run_command(*args, &block))
|
|
61
|
+
assert(@user_class.exists?(name))
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|