logging.debug("SSH Key has already been added for %s: %s" % (self, key))
return
+ # Prepare transaction
+ modlist = []
+
+ # Add object class if user is not in it, yet
+ if not "ldapPublicKey" in self.classes:
+ modlist.append((ldap.MOD_ADD, "objectClass", b"ldapPublicKey"))
+
+ # Add key
+ modlist.append((ldap.MOD_ADD, "sshPublicKey", key.encode()))
+
# Save key to LDAP
- self._add_string("sshPublicKey", key)
+ self._modify(modlist)
# Append to cache
self.ssh_keys.append(k)
return
# Delete key from LDAP
- self._delete_string("sshPublicKey", key)
+ if len(self.ssh_keys) > 1:
+ self._delete_string("sshPublicKey", key)
+ else:
+ self._modify([
+ (ldap.MOD_DELETE, "objectClass", b"ldapPublicKey"),
+ (ldap.MOD_DELETE, "sshPublicKey", key.encode()),
+ ])
if __name__ == "__main__":