diff options
author | Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> | 2013-04-29 15:30:39 +0200 |
---|---|---|
committer | Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> | 2013-04-29 15:30:39 +0200 |
commit | eaa8dd5365dc22c21d8a5515712362f5934a296a (patch) | |
tree | d43c1ac9c49306443a4611ac69033e128f14ab46 | |
parent | aa6b4ce6943f6603930ae3dec97c8ffdf9561368 (diff) | |
download | pykolab-eaa8dd5365dc22c21d8a5515712362f5934a296a.tar.gz |
Handle objectSid binary blobs to be a unique_attribute attribute name
-rw-r--r-- | pykolab/utils.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/pykolab/utils.py b/pykolab/utils.py index 46b257e..b0de166 100644 --- a/pykolab/utils.py +++ b/pykolab/utils.py @@ -21,6 +21,7 @@ import getpass import grp import os import pwd +import struct import sys import pykolab @@ -300,16 +301,22 @@ def normalize(_object): if type(_object[key]) == list: if _object[key] == None: continue + if len(_object[key]) == 1: result[key.lower()] = ''.join(_object[key]) else: result[key.lower()] = _object[key] + else: if _object[key] == None: continue + # What the heck? result[key.lower()] = _object[key] + if result.has_key('objectsid') and not result['objectsid'][0] == "S": + result['objectsid'] = sid_to_string(result['objectsid']) + if result.has_key('sn'): result['surname'] = result['sn'].replace(' ', '') @@ -414,6 +421,24 @@ def pop_empty_from_list(_input_list): if not item == '': _output_list.append(item) +def sid_to_string(sid): + srl = ord(sid[0]) + number_sub_id = ord(sid[1]) + iav = struct.unpack('!Q', '\x00\x00' + sid[2:8])[0] + + sub_ids = [] + + for i in range(number_sub_id): + sub_ids.append(struct.unpack('<I',sid[8+4*i:12+4*i])[0]) + + result = 'S-%d-%d-%s' % ( + srl, + iav, + '-'.join([str(s) for s in sub_ids]), + ) + + return result + def standard_root_dn(domain): return 'dc=%s' % (',dc='.join(domain.split('.'))) |