def update(self, newpasswd=""): try: ldif = conns.LDAP.search_s("uid=%s,ou=users,%s" % (self.name,self.rootdn), ldap.SCOPE_SUBTREE, "(objectClass=*)", None) except ldap.NO_SUCH_OBJECT: raise Exception("This user does not exist") self.first_name = str(self.first_name) self.last_name = str(self.last_name) self.domain = str(self.domain) ldif = ldif[0][1] attrs = { "givenName": self.first_name, "sn": self.last_name, "displayName": "%s %s" % (self.first_name, self.last_name), "cn": "%s %s" % (self.first_name, self.last_name), "mail": self.mail } if newpasswd: attrs["userPassword"] = hashpw(newpasswd, "crypt") signals.emit("users", "pre_update", self) nldif = ldap.modlist.modifyModlist(ldif, attrs, ignore_oldexistent=1) conns.LDAP.modify_ext_s("uid=%s,ou=users,%s" % (self.name,self.rootdn), nldif) self.update_adminsudo() signals.emit("users", "post_update", self)
def add(self, passwd): try: ldif = conns.LDAP.search_s("uid=%s,ou=users,%s" % (self.name,self.rootdn), ldap.SCOPE_SUBTREE, "(objectClass=*)", None) raise Exception("A user with this name already exists") except ldap.NO_SUCH_OBJECT: pass # Create LDAP user with proper metadata ldif = { "objectClass": ["mailAccount", "inetOrgPerson", "posixAccount"], "givenName": self.first_name, "sn": self.last_name or "NONE", "displayName": self.first_name+" "+self.last_name, "cn": self.first_name+" "+self.last_name, "uid": self.name, "mail": [self.name+"@"+self.domain], "maildrop": self.name, "userPassword": hashpw(passwd, "crypt"), "gidNumber": "100", "uidNumber": str(self.uid), "homeDirectory": "/home/%s" % self.name, "loginShell": "/usr/bin/bash" } ldif = ldap.modlist.addModlist(ldif) signals.emit("users", "pre_add", self) conns.LDAP.add_s("uid=%s,ou=users,%s" % (self.name,self.rootdn), ldif) self.update_adminsudo() signals.emit("users", "post_add", self)