]> git.ipfire.org Git - ipfire.org.git/commitdiff
accounts: Actually delete users from LDAP
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 28 Jun 2023 12:05:50 +0000 (12:05 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 28 Jun 2023 12:05:50 +0000 (12:05 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/backend/accounts.py

index 9834c219b45329a0c1c5a7fbd26d0a9b96bc7db3..74dea723f0a18b7fc4bf240dc84c6075fbfe084b 100644 (file)
@@ -164,6 +164,15 @@ class LDAPObject(Object):
        def _delete_string(self, key, value):
                return self._delete_strings(key, [value,])
 
+       def _delete_dn(self, dn):
+               logging.debug("Deleting %s" % dn)
+
+               # Authenticate before performing any delete operations
+               self.accounts._authenticate()
+
+               # Run delete operation
+               self.ldap.delete_s(dn)
+
        @property
        def objectclasses(self):
                return self._get_strings("objectClass")
@@ -699,6 +708,10 @@ class Account(LDAPObject):
                # Delete cached attributes
                self.memcache.delete("accounts:%s:attrs" % self.dn)
 
+       @property
+       def kerberos_principal_dn(self):
+               return "krbPrincipalName=%s@IPFIRE.ORG,cn=IPFIRE.ORG,cn=krb5,dc=ipfire,dc=org" % self.uid
+
        @lazy_property
        def kerberos_attributes(self):
                res = self.backend.accounts._query(
@@ -874,6 +887,8 @@ class Account(LDAPObject):
                if not self.can_be_deleted_by(user):
                        raise RuntimeError("Cannot delete user %s" % self)
 
+               logging.info("Deleting user %s" % self)
+
                async with asyncio.TaskGroup() as tasks:
                        t = datetime.datetime.now()
 
@@ -884,7 +899,8 @@ class Account(LDAPObject):
 
                        # XXX Delete on Discourse
 
-               # XXX Delete on LDAP
+               # Delete on LDAP
+               self._delete()
 
        def can_be_deleted_by(self, user):
                """
@@ -901,6 +917,16 @@ class Account(LDAPObject):
                # Looks okay
                return True
 
+       def _delete(self):
+               """
+                       Deletes this object from LDAP
+               """
+               # Delete the Kerberos Principal
+               self._delete_dn(self.kerberos_principal_dn)
+
+               # Delete this object
+               self._delete_dn(self.dn)
+
        # Nickname
 
        def get_nickname(self):