3 # Unix SMB/CIFS implementation.
4 # Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2007
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
20 """Tests for samba.samba3."""
22 from samba
.samba3
import (Registry
, SecretsDatabase
)
23 from samba
.samba3
import (WinsDatabase
, IdmapDatabase
)
24 from samba
.samba3
import passdb
25 from samba
.samba3
import param
as s3param
26 from samba
.tests
import TestCase
27 from samba
.dcerpc
.security
import dom_sid
30 for p
in [ "../../../../../testdata/samba3", "../../../../testdata/samba3" ]:
31 DATADIR
= os
.path
.join(os
.path
.dirname(__file__
), p
)
32 if os
.path
.exists(DATADIR
):
36 class RegistryTestCase(TestCase
):
39 super(RegistryTestCase
, self
).setUp()
40 self
.registry
= Registry(os
.path
.join(DATADIR
, "registry.tdb"))
44 super(RegistryTestCase
, self
).tearDown()
46 def test_length(self
):
47 self
.assertEquals(28, len(self
.registry
))
50 self
.assertTrue("HKLM" in self
.registry
.keys())
52 def test_subkeys(self
):
53 self
.assertEquals(["SOFTWARE", "SYSTEM"], self
.registry
.subkeys("HKLM"))
55 def test_values(self
):
56 self
.assertEquals({'DisplayName': (1L, 'E\x00v\x00e\x00n\x00t\x00 \x00L\x00o\x00g\x00\x00\x00'),
57 'ErrorControl': (4L, '\x01\x00\x00\x00')},
58 self
.registry
.values("HKLM/SYSTEM/CURRENTCONTROLSET/SERVICES/EVENTLOG"))
61 class PassdbTestCase(TestCase
):
64 super (PassdbTestCase
, self
).setUp()
65 self
.lp
= s3param
.get_context()
66 self
.lp
.load(os
.path
.join(DATADIR
, "smb.conf"))
67 self
.lp
.set("private dir", DATADIR
)
68 self
.lp
.set("state directory", DATADIR
)
69 passdb
.set_secrets_dir(DATADIR
)
70 self
.pdb
= passdb
.PDB("tdbsam")
75 super(PassdbTestCase
, self
).tearDown()
78 self
.assertEquals("BEDWYR", self
.lp
.get("netbios name"))
79 self
.assertEquals("SAMBA", self
.lp
.get("workgroup"))
80 self
.assertEquals("USER", self
.lp
.get("security"))
82 def test_policy(self
):
83 policy
= self
.pdb
.get_account_policy()
84 self
.assertEquals(0, policy
['bad lockout attempt'])
85 self
.assertEquals(4294967295, policy
['disconnect time'])
86 self
.assertEquals(0, policy
['lockout duration'])
87 self
.assertEquals(999999999, policy
['maximum password age'])
88 self
.assertEquals(0, policy
['minimum password age'])
89 self
.assertEquals(5, policy
['min password length'])
90 self
.assertEquals(0, policy
['password history'])
91 self
.assertEquals(0, policy
['refuse machine password change'])
92 self
.assertEquals(0, policy
['reset count minutes'])
93 self
.assertEquals(0, policy
['user must logon to change password'])
95 def test_get_sid(self
):
96 domain_sid
= passdb
.get_global_sam_sid()
97 self
.assertEquals(dom_sid("S-1-5-21-2470180966-3899876309-2637894779"), domain_sid
)
99 def test_usernames(self
):
100 userlist
= self
.pdb
.search_users(0)
101 self
.assertEquals(3, len(userlist
))
103 def test_getuser(self
):
104 user
= self
.pdb
.getsampwnam("root")
106 self
.assertEquals(16, user
.acct_ctrl
)
107 self
.assertEquals("", user
.acct_desc
)
108 self
.assertEquals(0, user
.bad_password_count
)
109 self
.assertEquals(0, user
.bad_password_time
)
110 self
.assertEquals(0, user
.code_page
)
111 self
.assertEquals(0, user
.country_code
)
112 self
.assertEquals("", user
.dir_drive
)
113 self
.assertEquals("BEDWYR", user
.domain
)
114 self
.assertEquals("root", user
.full_name
)
115 self
.assertEquals(dom_sid('S-1-5-21-2470180966-3899876309-2637894779-513'), user
.group_sid
)
116 self
.assertEquals("\\\\BEDWYR\\root", user
.home_dir
)
117 self
.assertEquals([-1 for i
in range(21)], user
.hours
)
118 self
.assertEquals(21, user
.hours_len
)
119 self
.assertEquals(9223372036854775807, user
.kickoff_time
)
120 self
.assertEquals(None, user
.lanman_passwd
)
121 self
.assertEquals(9223372036854775807, user
.logoff_time
)
122 self
.assertEquals(0, user
.logon_count
)
123 self
.assertEquals(168, user
.logon_divs
)
124 self
.assertEquals("", user
.logon_script
)
125 self
.assertEquals(0, user
.logon_time
)
126 self
.assertEquals("", user
.munged_dial
)
127 self
.assertEquals('\x87\x8d\x80\x14`l\xda)gzD\xef\xa15?\xc7', user
.nt_passwd
)
128 self
.assertEquals("", user
.nt_username
)
129 self
.assertEquals(1125418267, user
.pass_can_change_time
)
130 self
.assertEquals(1125418267, user
.pass_last_set_time
)
131 self
.assertEquals(2125418266, user
.pass_must_change_time
)
132 self
.assertEquals(None, user
.plaintext_passwd
)
133 self
.assertEquals("\\\\BEDWYR\\root\\profile", user
.profile_path
)
134 self
.assertEquals(None, user
.pw_history
)
135 self
.assertEquals(dom_sid("S-1-5-21-2470180966-3899876309-2637894779-1000"), user
.user_sid
)
136 self
.assertEquals("root", user
.username
)
137 self
.assertEquals("", user
.workstations
)
139 def test_group_length(self
):
140 grouplist
= self
.pdb
.enum_group_mapping()
141 self
.assertEquals(13, len(grouplist
))
143 def test_get_group(self
):
144 group
= self
.pdb
.getgrsid(dom_sid("S-1-5-32-544"))
145 self
.assertEquals("Administrators", group
.nt_name
)
146 self
.assertEquals(4294967295, group
.gid
)
147 self
.assertEquals(5, group
.sid_name_use
)
149 def test_groupsids(self
):
150 grouplist
= self
.pdb
.enum_group_mapping()
153 sids
.append(str(g
.sid
))
154 self
.assertTrue("S-1-5-32-544" in sids
)
155 self
.assertTrue("S-1-5-32-545" in sids
)
156 self
.assertTrue("S-1-5-32-546" in sids
)
157 self
.assertTrue("S-1-5-32-548" in sids
)
158 self
.assertTrue("S-1-5-32-549" in sids
)
159 self
.assertTrue("S-1-5-32-550" in sids
)
160 self
.assertTrue("S-1-5-32-551" in sids
)
162 def test_alias_length(self
):
163 aliaslist
= self
.pdb
.search_aliases()
164 self
.assertEquals(1, len(aliaslist
))
165 self
.assertEquals("Jelmers NT Group", aliaslist
[0]['account_name'])
168 class WinsDatabaseTestCase(TestCase
):
171 super(WinsDatabaseTestCase
, self
).setUp()
172 self
.winsdb
= WinsDatabase(os
.path
.join(DATADIR
, "wins.dat"))
174 def test_length(self
):
175 self
.assertEquals(22, len(self
.winsdb
))
177 def test_first_entry(self
):
178 self
.assertEqual((1124185120, ["192.168.1.5"], 0x64), self
.winsdb
["ADMINISTRATOR#03"])
182 super(WinsDatabaseTestCase
, self
).tearDown()
185 class IdmapDbTestCase(TestCase
):
188 super(IdmapDbTestCase
, self
).setUp()
189 self
.idmapdb
= IdmapDatabase(os
.path
.join(DATADIR
,
190 "winbindd_idmap.tdb"))
192 def test_user_hwm(self
):
193 self
.assertEquals(10000, self
.idmapdb
.get_user_hwm())
195 def test_group_hwm(self
):
196 self
.assertEquals(10002, self
.idmapdb
.get_group_hwm())
199 self
.assertEquals(1, len(list(self
.idmapdb
.uids())))
202 self
.assertEquals(3, len(list(self
.idmapdb
.gids())))
204 def test_get_user_sid(self
):
205 self
.assertEquals("S-1-5-21-58189338-3053988021-627566699-501", self
.idmapdb
.get_user_sid(65534))
207 def test_get_group_sid(self
):
208 self
.assertEquals("S-1-5-21-2447931902-1787058256-3961074038-3007", self
.idmapdb
.get_group_sid(10001))
212 super(IdmapDbTestCase
, self
).tearDown()