+
+ def generate_login(self, record):
+ """Generate login for adding a new user in LDAP Directory
+ (four characters minimum length)
+ Record contains first name and last name.
+
+ """
+ #Remove all special characters from first_name/last name
+ lower_first_name = record['first_name'].replace('-','')\
+ .replace('_','').replace('[','')\
+ .replace(']','').replace(' ','')\
+ .lower()
+ lower_last_name = record['last_name'].replace('-','')\
+ .replace('_','').replace('[','')\
+ .replace(']','').replace(' ','')\
+ .lower()
+ length_last_name = len(lower_last_name)
+ login_max_length = 8
+
+ #Try generating a unique login based on first name and last name
+ getAttrs = ['uid']
+ if length_last_name >= login_max_length :
+ login = lower_last_name[0:login_max_length]
+ index = 0;
+ logger.debug("login : %s index : %s" %login %index);
+ elif length_last_name >= 4 :
+ login = lower_last_name
+ index = 0
+ logger.debug("login : %s index : %s" %login %index);
+ elif length_last_name == 3 :
+ login = lower_first_name[0:1] + lower_last_name
+ index = 1
+ logger.debug("login : %s index : %s" %login %index);
+ elif length_last_name == 2:
+ if len ( lower_first_name) >=2:
+ login = lower_first_name[0:2] + lower_last_name
+ index = 2
+ logger.debug("login : %s index : %s" %login %index);
+ else:
+ logger.error("LoginException : \
+ Generation login error with \
+ minimum four characters")
+
+
+ else :
+ logger.error("LDAP generate_login failed : \
+ impossible to generate unique login for %s %s" \
+ %lower_first_name %lower_last_name)
+
+ filter = '(uid='+ login+ ')'
+ try :
+ #Check if login already in use
+ while (self.ldapSearch(filter, getAttrs) is not [] ):
+
+ index += 1
+ if index >= 9:
+ logger.error("LoginException : Generation login error \
+ with minimum four characters")
+ else:
+ try:
+ login = lower_first_name[0,index] + \
+ lower_last_name[0,login_max_length-index]
+ filter = '(uid='+ login+ ')'
+ except KeyError:
+ print "lower_first_name - lower_last_name too short"
+ return login
+
+ except ldap.LDAPError,e :
+ logger.log_exc("LDAP generate_login Error %s" %e)
+ #print >>sys.stderr, "ERROR LDAP %s" %(e)
+
+
+ def find_max_uidNumber(self):
+
+ """Find the LDAP max uidNumber (POSIX uid attribute) .
+ Used when adding a new user in LDAP Directory
+ returns integer max uidNumber + 1
+
+ """
+ #Get all the users in the LDAP
+ ldapUserUidNumberMin = 2000
+
+ getAttrs = "(uidNumber=*)"
+ filter = ['uidNumber']
+
+ result_data = self.ldapSearch(getAttrs, filter)
+ #First LDAP user
+ if result_data == []:
+ max_uidnumber = ldapUserUidNumberMin
+ #Get the highest uidNumber
+ else:
+ uidNumberList = [r[1]['uidNumber'] for r in result_data ]
+ max_uidnumber = max(uidNumberList) + 1
+
+ return max_uidnumber
+
+
+ def make_ldap_attributes_from_record(self, record):