py-samba3: Use passdb/param wrapper for samba3 module
[Samba.git] / source4 / scripting / python / samba / tests / samba3.py
blob03f19021427b2572612e10bfde239bf33a22362b
1 #!/usr/bin/env python
3 # Unix SMB/CIFS implementation.
4 # Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2007
5 #
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
28 import os
30 for p in [ "../../../../../testdata/samba3", "../../../../testdata/samba3" ]:
31 DATADIR = os.path.join(os.path.dirname(__file__), p)
32 if os.path.exists(DATADIR):
33 break
36 class RegistryTestCase(TestCase):
38 def setUp(self):
39 super(RegistryTestCase, self).setUp()
40 self.registry = Registry(os.path.join(DATADIR, "registry.tdb"))
42 def tearDown(self):
43 self.registry.close()
44 super(RegistryTestCase, self).tearDown()
46 def test_length(self):
47 self.assertEquals(28, len(self.registry))
49 def test_keys(self):
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):
63 def setUp(self):
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")
72 def tearDown(self):
73 self.lp = []
74 self.pdb = []
75 super(PassdbTestCase, self).tearDown()
77 def test_param(self):
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()
151 sids = []
152 for g in grouplist:
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):
170 def setUp(self):
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"])
180 def tearDown(self):
181 self.winsdb.close()
182 super(WinsDatabaseTestCase, self).tearDown()
185 class IdmapDbTestCase(TestCase):
187 def setUp(self):
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())
198 def test_uids(self):
199 self.assertEquals(1, len(list(self.idmapdb.uids())))
201 def test_gids(self):
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))
210 def tearDown(self):
211 self.idmapdb.close()
212 super(IdmapDbTestCase, self).tearDown()