1 #!/usr/bin/env python2.4
8 def get_ldap_connection():
9 ldap.set_option(ldap.OPT_X_TLS_CACERTFILE, '/etc/ssl/UCC-CA.crt')
10 ldap.set_option(ldap.OPT_X_TLS,1)
11 ldap.set_option(ldap.OPT_X_TLS_ALLOW,1)
12 #ldap.set_option(ldap.OPT_DEBUG_LEVEL,255)
13 conn = ldap.initialize('ldaps://mussel.ucc.gu.uwa.edu.au:636/')
15 # Anonymous bind - server ACLs should allow searching on uccDispenseMIFARE
20 ldapconn = get_ldap_connection()
22 basedn = 'ou=People,dc=ucc,dc=gu,dc=uwa,dc=edu,dc=au'
23 filter = ldap.filter.filter_format('(uccDispenseMIFARE=%s)', (card_id, ))
24 attrs = ('uidNumber',)
26 results = ldapconn.search_st(basedn, ldap.SCOPE_SUBTREE, filter, attrs, timeout=LDAP_TIMEOUT)
31 raise ValueError, "no UID found for card ID"
33 return results[0][1]['uidNumber'][0]
35 def set_card_id(uidNumber, card_id):
36 ldapconn = get_ldap_connection()
38 # fix uidNumber for three/four digit uids
39 uidNumber = str(int(uidNumber))
40 basedn = 'ou=People,dc=ucc,dc=gu,dc=uwa,dc=edu,dc=au'
41 filter = ldap.filter.filter_format('(uidNumber=%s)', (uidNumber, ))
42 attrs = ('objectClass', )
44 results = ldapconn.search_st(basedn, ldap.SCOPE_SUBTREE, filter, attrs, timeout=LDAP_TIMEOUT)
47 raise "ValueError", 'error in uidNumber'
49 user_dn = results[0][0]
53 # Does it have the correct object class?
54 if 'uccDispenseAccount' not in results[0][1]['objectClass']:
55 # Add uccDispenseAccount objectclass
56 mod_attrs.append((ldap.MOD_ADD, 'objectClass', 'uccDispenseAccount'))
59 mod_attrs.append((ldap.MOD_ADD, 'uccDispenseMIFARE', card_id))
61 # Use a double-try here to work around something that's fixed in Python 2.5
64 ldapconn.modify_s(user_dn, mod_attrs)
65 except ldap.TYPE_OR_VALUE_EXISTS, e:
70 if __name__ == '__main__':
71 #print get_uid('\x01\x02\x03\x04\x05\x06')
72 set_card_id('11251', '\x01\x02\x03\x04\x05\x06')