44ffc6a861ca4bea59a441e901c38fc11caa9d70
[samba.git] / source4 / scripting / bin / samba3dump
1 #!/usr/bin/python
2 #
3 #       Dump Samba3 data
4 #       Copyright Jelmer Vernooij 2005-2007
5 #       Released under the GNU GPL v3 or later
6 #
7
8 import optparse
9 import os, sys
10 sys.path.append(os.path.join(os.path.dirname(__file__), "../python"))
11 import samba
12 import samba.samba3
13
14 parser = optparse.OptionParser("provision <libdir> <smb.conf>")
15 parser.add_option("--format", type="choice", metavar="FORMAT",
16                           choices=["full", "summary"])
17
18 opts, args = parser.parse_args()
19
20 if opts.format is None:
21         opts.format = "summary"
22
23 def print_header(txt):
24         print "\n%s" % txt
25         print "=========================================="
26
27 def print_samba3_policy(pol):
28         print_header("Account Policies")
29         print "Min password length: %d" % pol.min_password_length
30         print "Password history length: %d" % pol.password_history
31         print "User must logon to change password: %d" % pol.user_must_logon_to_change_password
32         print "Maximum password age: %d" % pol.maximum_password_age
33         print "Minimum password age: %d" % pol.minimum_password_age
34         print "Lockout duration: %d" % pol.lockout_duration
35         print "Reset Count Minutes: %d" % pol.reset_count_minutes
36         print "Bad Lockout Minutes: %d" % pol.bad_lockout_minutes
37         print "Disconnect Time: %d" % pol.disconnect_time
38         print "Refuse Machine Password Change: %d" % pol.refuse_machine_password_change
39
40 def print_samba3_sam(samba3):
41         print_header("SAM Database")
42         
43         for a in samba3.samaccounts:
44                 print "%d: %s" % a.user_rid, a.username
45
46 def print_samba3_shares(samba3):
47         print_header("Configured shares")
48         for s in samba3.shares:
49                 print "--- %s ---" % s.name
50
51                 for p in s.parameters:
52                         print "\t%s = %s" % (p.name, p.value)
53
54                 print ""
55
56 def print_samba3_secrets(secrets):
57         print_header("Secrets")
58
59         print "IPC Credentials:"
60         if secrets.ipc_cred.username_obtained:
61                 print " User: %s\n" % secrets.ipc_cred.get_username
62         if secrets.ipc_cred.password_obtained:
63                 print " Password: %s\n" % secrets.ipc_cred.get_password
64
65         if secrets.ipc_cred.domain_obtained:
66                 print " Domain: %s\n" % secrets.ipc_cred.get_domain
67
68         print "LDAP passwords:"
69         for pw in secrets.ldappws:
70                 print "\t%s -> %s" % (pw.dn, pw.password)
71         print ""
72
73         print "Domains:"
74         for d in secrets.domains:
75                 print "\t--- %s ---" % d.name
76                 print "\tSID: %s" % d.sid
77                 print "\tGUID: %s" % d.guid
78                 print "\tPlaintext pwd: %s" % d.plaintext_pw
79                 print "\tLast Changed: %lu" % d.last_change_time
80                 print "\tSecure Channel Type: %d\n" % d.sec_channel_type
81
82         print "Trusted domains:"
83         for td in secrets.trusted_domains:
84                 for n in td.uni_name:
85                         print "\t--- %s ---" % n
86                 print "\tPassword: %s" % td.password
87                 print "\tModified: %lu" % td.mod_time
88                 print "\tSID: %s" % td.domain_sid
89
90 def print_samba3_regdb(regdb):
91         print_header("Registry")
92
93         for k in regdb.keys:
94                 print "%s\n" % k.name
95                 for v in regdb.values(k):
96                         print "\t%s: type %d, length %d" % (v.name, v.type, v.data.length)
97
98 def print_samba3_winsdb(samba3):
99         print_header("WINS Database")
100
101         for e in samba3.winsentries:
102                 print "%s, nb_flags: %x, type: %d, ttl: %lu, %d ips, fst: %s" % (e.name, e.nb_flags, e.type, e.ttl, e.ips.length, e.ips[0])
103
104 def print_samba3_groupmappings(groupdb):
105         print_header("Group Mappings")
106         
107         for g in groupdb.groupmappings:
108                 print "\t--- Group: %s ---" % g.nt_name
109                 print "\tComment: %s" % g.comment
110                 print "\tGID: %d" % g.gid
111                 print "\tSID Name Use: %d" % g.sid_name_use
112                 print "\tSID: %s\n" % g.sid
113
114 def print_samba3_aliases(groupdb):
115         for a in groupdb.aliases:
116                 print "\t--- Alias: %s ---" % a.sid
117                 for m in a.members:
118                         print "\t%s" % m
119
120 def print_samba3_idmapdb(idmapdb):
121         print_header("Winbindd SID<->GID/UID mappings")
122
123         print "User High Water Mark: %d" % idmapdb.user_hwm
124         print "Group High Water Mark: %d\n" % idmapdb.group_hwm
125
126         for e in idmapdb.mappings:
127                 if e.type == e.IDMAP_GROUP:
128                         print "%s -> GID %d" % (e.sid, e.unix_id)
129                 else:
130                         print "%s -> UID %d" % (e.sid, e.unix_id)
131
132 def print_samba3(samba3):
133         print_samba3_sam(samba3)
134         print_samba3_policy(samba3.get_policy_db())
135         print_samba3_shares(samba3)
136         print_samba3_winsdb(samba3.get_wins_db())
137         print_samba3_regdb(samba3.get_registry())
138         print_samba3_secrets(samba3.get_secrets_db())
139         print_samba3_groupmappings(samba3.get_groupmapping_db())
140         print_samba3_aliases(samba3)
141         print_samba3_idmapdb(samba3.get_idmap_db())
142
143 def print_samba3_summary(samba3):
144         print "WINS db entries: %d" % len(samba3.winsentries)
145         print "SAM Accounts: %d" % len(samba3.samaccounts)
146         print "Registry key count: %d" % len(samba3.registry.keys)
147         print "Shares (including [global]): %d" % len(samba3.shares)
148         print "Groupmap count: %d" % len(samba3.groupmappings)
149         print "Alias count: %d" % len(samba3.aliases)
150         print "Idmap count: %d" % len(samba3.idmapdb.mappings)
151
152 samba3 = samba.samba3.Samba3(args[0], args[1])
153
154 if opts.format == "summary":
155         print_samba3_summary(samba3)
156 elif opts.format == "full":
157         print_samba3(samba3)