ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/ccs/admin/users.py
Revision: 687
Committed: 2010-07-18T03:39:30-07:00 (14 years, 11 months ago) by douglas
Content type: text/x-python
File size: 1493 byte(s)
Log Message:
Use optparse instead of argparse. Man pages!

File Contents

# User Rev Content
1 douglas 596 #!/usr/bin/env python
2     # CCS Computer Science
3     #
4     # Douglas Thrift
5     #
6     # $Id$
7    
8 douglas 602 import admin
9 douglas 598 import ldap
10 douglas 687 import os.path
11 douglas 596
12     try:
13     from _users import users
14     except ImportError:
15     users = set()
16    
17 douglas 598 def user(user):
18     if user in users:
19     return True
20    
21 douglas 681 connection = admin.ldap_connection(False)
22 douglas 598
23     try:
24 douglas 602 return bool(connection.search_s(admin.PEOPLE, ldap.SCOPE_ONELEVEL, '(uid=%s)' % user, ('uid',), 1))
25 douglas 598 finally:
26     connection.unbind_s()
27    
28 douglas 596 if __name__ == '__main__':
29 douglas 687 parser = admin.parser(usage = '%prog [options] [FILE...]')
30    
31     parser.add_option('-l', '--list', action = 'store_true', default = False, help = 'list the system users from all systems')
32     parser.add_option('-t', '--touch', help = 'touch the file TOUCH if successful')
33    
34     options, args = parser.parse_args()
35    
36     if options.list:
37     for user in sorted(users):
38     print user
39    
40     parser.exit()
41    
42     if not args:
43     parser.error('no files specified')
44    
45     _users = frozenset(users)
46    
47     format = '%%%us: %%s' % ((len(max(args, key = len)) + 1) / 2 * 2)
48    
49     for file in args:
50 douglas 596 with open(file, 'rb') as file:
51     for line in file:
52     if line.startswith('#'):
53     continue
54    
55 douglas 687 _user = line.split(':', 1)[0]
56 douglas 596
57 douglas 687 if not user(_user):
58     print format % (file.name, _user)
59 douglas 596
60 douglas 687 users.add(_user)
61 douglas 596
62 douglas 687 if users != _users:
63     with open(os.path.join(os.path.dirname(__file__), '_users.py'), 'wb') as file:
64     file.write('users = set((\n')
65    
66     for user in sorted(users):
67     file.write('\t%s,\n' % repr(user))
68    
69     file.write('))\n')
70    
71     if options.touch:
72     open(options.touch, 'ab')

Properties

Name Value
svn:executable *
svn:keywords Id