s3:idmap_ldap: re-implement allocate_id in idmap methods.
[amitay/samba.git] / source3 / winbindd / idmap_ldap.c
index 453d31aeca3fd6128f836bcb115e5f1c446d7b93..1a534af7f8344d1cc98d0c245257134553a2305f 100644 (file)
@@ -511,124 +511,6 @@ done:
        return ret;
 }
 
-/**********************************
- Set highest id.
-**********************************/
-
-static NTSTATUS idmap_ldap_set_hwm(struct unixid *xid)
-{
-       TALLOC_CTX *ctx;
-       NTSTATUS ret = NT_STATUS_UNSUCCESSFUL;
-       int rc = LDAP_SERVER_DOWN;
-       int count = 0;
-       LDAPMessage *result = NULL;
-       LDAPMessage *entry = NULL;
-       LDAPMod **mods = NULL;
-       char *new_id_str;
-       char *filter = NULL;
-       const char *dn = NULL;
-       const char **attr_list;
-       const char *type;
-
-       /* Only do query if we are online */
-       if (idmap_is_offline()) {
-               return NT_STATUS_FILE_IS_OFFLINE;
-       }
-
-       if ( ! idmap_alloc_ldap) {
-               return NT_STATUS_UNSUCCESSFUL;
-       }
-
-       ctx = talloc_new(idmap_alloc_ldap);
-       if ( ! ctx) {
-               DEBUG(0, ("Out of memory!\n"));
-               return NT_STATUS_NO_MEMORY;
-       }
-
-       /* get type */
-       switch (xid->type) {
-
-       case ID_TYPE_UID:
-               type = get_attr_key2string(idpool_attr_list,
-                                          LDAP_ATTR_UIDNUMBER);
-               break;
-
-       case ID_TYPE_GID:
-               type = get_attr_key2string(idpool_attr_list,
-                                          LDAP_ATTR_GIDNUMBER);
-               break;
-
-       default:
-               DEBUG(2, ("Invalid ID type (0x%x)\n", xid->type));
-               return NT_STATUS_INVALID_PARAMETER;
-       }
-
-       filter = talloc_asprintf(ctx, "(objectClass=%s)", LDAP_OBJ_IDPOOL);
-       CHECK_ALLOC_DONE(filter);
-
-       attr_list = get_attr_list(ctx, idpool_attr_list);
-       CHECK_ALLOC_DONE(attr_list);
-
-       rc = smbldap_search(idmap_alloc_ldap->smbldap_state,
-                               idmap_alloc_ldap->suffix,
-                              LDAP_SCOPE_SUBTREE, filter,
-                              attr_list, 0, &result);
-
-       if (rc != LDAP_SUCCESS) {
-               DEBUG(0,("%s object not found\n", LDAP_OBJ_IDPOOL));
-               goto done;
-       }
-
-       talloc_autofree_ldapmsg(ctx, result);
-
-       count = ldap_count_entries(idmap_alloc_ldap->smbldap_state->ldap_struct,
-                                  result);
-       if (count != 1) {
-               DEBUG(0,("Single %s object not found\n", LDAP_OBJ_IDPOOL));
-               goto done;
-       }
-
-       entry = ldap_first_entry(idmap_alloc_ldap->smbldap_state->ldap_struct,
-                                result);
-
-       dn = smbldap_talloc_dn(ctx,
-                               idmap_alloc_ldap->smbldap_state->ldap_struct,
-                               entry);
-       if ( ! dn) {
-               goto done;
-       }
-
-       new_id_str = talloc_asprintf(ctx, "%lu", (unsigned long)xid->id);
-       if ( ! new_id_str) {
-               DEBUG(0,("Out of memory\n"));
-               ret = NT_STATUS_NO_MEMORY;
-               goto done;
-       }
-
-       smbldap_set_mod(&mods, LDAP_MOD_REPLACE, type, new_id_str);
-
-       if (mods == NULL) {
-               DEBUG(0,("smbldap_set_mod() failed.\n"));
-               goto done;
-       }
-
-       rc = smbldap_modify(idmap_alloc_ldap->smbldap_state, dn, mods);
-
-       ldap_mods_free(mods, True);
-
-       if (rc != LDAP_SUCCESS) {
-               DEBUG(1,("Failed to allocate new %s. "
-                        "smbldap_modify() failed.\n", type));
-               goto done;
-       }
-
-       ret = NT_STATUS_OK;
-
-done:
-       talloc_free(ctx);
-       return ret;
-}
-
 /**********************************
  Close idmap ldap alloc
 **********************************/
@@ -1412,35 +1294,13 @@ static struct idmap_methods idmap_ldap_methods = {
        .init = idmap_ldap_db_init,
        .unixids_to_sids = idmap_ldap_unixids_to_sids,
        .sids_to_unixids = idmap_ldap_sids_to_unixids,
-       .set_mapping = idmap_ldap_set_mapping,
+       .allocate_id = idmap_ldap_get_new_id,
        .close_fn = idmap_ldap_close
 };
 
-static struct idmap_alloc_methods idmap_ldap_alloc_methods = {
-
-       .init = idmap_ldap_alloc_init,
-       .allocate_id = idmap_ldap_allocate_id,
-       .set_id_hwm = idmap_ldap_set_hwm,
-       .close_fn = idmap_ldap_alloc_close,
-};
-
-static NTSTATUS idmap_alloc_ldap_init(void)
-{
-       return smb_register_idmap_alloc(SMB_IDMAP_INTERFACE_VERSION, "ldap",
-                                       &idmap_ldap_alloc_methods);
-}
-
 NTSTATUS idmap_ldap_init(void);
 NTSTATUS idmap_ldap_init(void)
 {
-       NTSTATUS ret;
-
-       /* FIXME: bad hack to actually register also the alloc_ldap module
-        * without changining configure.in */
-       ret = idmap_alloc_ldap_init();
-       if (! NT_STATUS_IS_OK(ret)) {
-               return ret;
-       }
        return smb_register_idmap(SMB_IDMAP_INTERFACE_VERSION, "ldap",
                                  &idmap_ldap_methods);
 }