+++ /dev/null
-#!/usr/bin/env python2.4
-
-import ldap
-import ldap.filter
-
-LDAP_TIMEOUT = 10
-
-def get_ldap_connection():
- ldap.set_option(ldap.OPT_X_TLS_CACERTFILE, '/etc/ssl/UCC-CA.crt')
- ldap.set_option(ldap.OPT_X_TLS,1)
- ldap.set_option(ldap.OPT_X_TLS_ALLOW,1)
- #ldap.set_option(ldap.OPT_DEBUG_LEVEL,255)
- conn = ldap.initialize('ldaps://mussel.ucc.gu.uwa.edu.au/')
-
- binddn = 'cn=mifareagent,ou=profile,dc=ucc,dc=gu,dc=uwa,dc=edu,dc=au'
- passfile = open('/etc/dispense2/ldap.passwd')
- password = passfile.readline().strip()
- passfile.close()
-
- conn.simple_bind_s(binddn, password)
- return conn
-
-def get_uid(card_id):
- ldapconn = get_ldap_connection()
-
- basedn = 'ou=People,dc=ucc,dc=gu,dc=uwa,dc=edu,dc=au'
- filter = ldap.filter.filter_format('(uccDispenseMIFARE=%s)', (card_id, ))
- attrs = ('uidNumber',)
-
- results = ldapconn.search_st(basedn, ldap.SCOPE_SUBTREE, filter, attrs, timeout=LDAP_TIMEOUT)
-
- ldapconn.unbind()
-
- if len(results) != 1:
- raise ValueError, "no UID found for card ID"
-
- return results[0][1]['uidNumber'][0]
-
-def get_uname(uid):
- ldapconn = get_ldap_connection()
-
- basedn = 'ou=People,dc=ucc,dc=gu,dc=uwa,dc=edu,dc=au'
- filter = ldap.filter.filter_format('(uidNumber=%s)', (uid, ))
- attrs = ('uid',)
-
- results = ldapconn.search_st(basedn, ldap.SCOPE_SUBTREE, filter, attrs, timeout=LDAP_TIMEOUT)
-
- ldapconn.unbind()
-
- if len(results) != 1:
- raise ValueError, "no username found for user id"
-
- return results[0][1]['uid'][0]
-
-def set_card_id(uidNumber, card_id):
- ldapconn = get_ldap_connection()
-
- # fix uidNumber for three/four digit uids
- uidNumber = str(int(uidNumber))
- basedn = 'ou=People,dc=ucc,dc=gu,dc=uwa,dc=edu,dc=au'
- filter = ldap.filter.filter_format('(uidNumber=%s)', (uidNumber, ))
- attrs = ('objectClass', )
-
- results = ldapconn.search_st(basedn, ldap.SCOPE_SUBTREE, filter, attrs, timeout=LDAP_TIMEOUT)
-
- if len(results) != 1:
- raise "ValueError", 'error in uidNumber'
-
- user_dn = results[0][0]
-
- mod_attrs = []
-
- # Does it have the correct object class?
- if 'uccDispenseAccount' not in results[0][1]['objectClass']:
- # Add uccDispenseAccount objectclass
- mod_attrs.append((ldap.MOD_ADD, 'objectClass', 'uccDispenseAccount'))
-
- # Add MIFARE Card ID
- mod_attrs.append((ldap.MOD_ADD, 'uccDispenseMIFARE', card_id))
-
- # Use a double-try here to work around something that's fixed in Python 2.5
- try:
- try:
- ldapconn.modify_s(user_dn, mod_attrs)
- except ldap.TYPE_OR_VALUE_EXISTS, e:
- pass
- finally:
- ldapconn.unbind()
-
-if __name__ == '__main__':
- set_card_id('11126', '\x01\x02\x03\x04\x05\x06')
- print get_uid('\x01\x02\x03\x04\x05\x06')