Ensure idmap backends are added in the correct order (DLIST_ADD puts
authorJeremy Allison <jra@samba.org>
Wed, 25 Jun 2003 19:01:17 +0000 (19:01 +0000)
committerJeremy Allison <jra@samba.org>
Wed, 25 Jun 2003 19:01:17 +0000 (19:01 +0000)
things at the *front* of the list). Add more debug. Still broken.. :-(.
Jeremy.
(This used to be commit dd9251e6f51f229ca1fab23d9b06f5bb68644fab)

source3/sam/idmap.c
source3/sam/idmap_tdb.c
source3/sam/idmap_winbind.c

index d2f68acf6069d57e02e1a294f32f76c4a674e334..7b4261169fc84c18838b8abc6fcd86198020c03f 100644 (file)
@@ -59,7 +59,7 @@ static struct idmap_methods *get_methods(const char *name)
 
 NTSTATUS smb_register_idmap(int version, const char *name, struct idmap_methods *methods)
 {
-       struct idmap_function_entry *entry;
+       struct idmap_function_entry *entry, *tmp;
 
        if ((version != SMB_IDMAP_INTERFACE_VERSION)) {
                DEBUG(0, ("Failed to register idmap module.\n"
@@ -84,7 +84,7 @@ NTSTATUS smb_register_idmap(int version, const char *name, struct idmap_methods
        entry->name = smb_xstrdup(name);
        entry->methods = methods;
 
-       DLIST_ADD(backends, entry);
+       DLIST_ADD_END(backends, entry, tmp);
        DEBUG(5, ("Successfully added idmap backend '%s'\n", name));
        return NT_STATUS_OK;
 }
index f7f9f02003b2e54f18c724cc874e97e24e9ab659..7fca658792e87e262fbf8b7124f60b12e813cfe3 100644 (file)
@@ -173,11 +173,15 @@ static NTSTATUS internal_get_id_from_sid(unid_t *id, int *id_type, const DOM_SID
        key.dptr = keystr;
        key.dsize = strlen(keystr) + 1;
 
-       DEBUG(10,("internal_get_id_from_sid: fetching record %s\n", keystr ));
+       DEBUG(10,("internal_get_id_from_sid: fetching record %s of type 0x%x\n", keystr, type ));
 
        data = tdb_fetch(idmap_tdb, key);
-       if (!data.dptr)
+       if (!data.dptr) {
+               DEBUG(10,("internal_get_id_from_sid: record %s not found\n", keystr ));
                return ret;
+       } else {
+               DEBUG(10,("internal_get_id_from_sid: record %s -> %s\n", keystr, data.dptr ));
+       }
 
        if (type == ID_EMPTY || type == ID_USERID) {
                fstring scanstr;
index d15d8f20a152bf54756ac0d2c1bd0d934fcf855d..6c0d80ab1c0b1b7606c469e2bfdc5e989a7e119f 100644 (file)
@@ -46,10 +46,14 @@ static NTSTATUS db_get_sid_from_id(DOM_SID *sid, unid_t id, int id_type)
                case ID_USERID:
                        request.data.uid = id.uid;
                        operation = WINBINDD_UID_TO_SID;
+                       DEBUG(10,("db_get_sid_from_id: asking winbindd uid %u -> sid\n",
+                               (unsigned int)id.uid ));
                        break;
                case ID_GROUPID:
                        request.data.gid = id.gid;
                        operation = WINBINDD_GID_TO_SID;
+                       DEBUG(10,("db_get_sid_from_id: asking winbindd gid %u -> sid\n",
+                               (unsigned int)id.gid ));
                        break;
                default:
                        return NT_STATUS_INVALID_PARAMETER;
@@ -58,6 +62,7 @@ static NTSTATUS db_get_sid_from_id(DOM_SID *sid, unid_t id, int id_type)
        /* Make The Request */
        result = winbindd_request(operation, &request, &response);
        if (result == NSS_STATUS_SUCCESS) {
+               DEBUG(10,("db_get_sid_from_id: winbindd replied ok (%s)\n", response.data.sid.sid ));
                if (!string_to_sid(sid, response.data.sid.sid)) {
                        return NT_STATUS_INVALID_SID;
                }
@@ -66,6 +71,8 @@ static NTSTATUS db_get_sid_from_id(DOM_SID *sid, unid_t id, int id_type)
                sid_copy(sid, &global_sid_NULL);
        }
 
+       DEBUG(10,("db_get_sid_from_id: winbindd lookup fail\n"));
+
        return NT_STATUS_UNSUCCESSFUL;
 }
 
@@ -86,32 +93,40 @@ static NTSTATUS db_get_id_from_sid(unid_t *id, int *id_type, const DOM_SID *sid)
        ZERO_STRUCT(request);
        ZERO_STRUCT(response);
 
+       sid_to_string(sid_str, sid);
+       fstrcpy(request.data.sid, sid_str);
+
        switch (*id_type & ID_TYPEMASK) {
                case ID_USERID:
                        operation = WINBINDD_SID_TO_UID;
+                       DEBUG(10,("db_get_id_from_sid: asking winbindd %s -> uid\n",
+                               sid_str ));
                        break;
                case ID_GROUPID:
                        operation = WINBINDD_SID_TO_GID;
+                       DEBUG(10,("db_get_id_from_sid: asking winbindd %s -> gid\n",
+                               sid_str ));
                        break;
                default:
                        return NT_STATUS_INVALID_PARAMETER;
        }
 
-       sid_to_string(sid_str, sid);
-       fstrcpy(request.data.sid, sid_str);
-
        /* Make The Request */
        result = winbindd_request(operation, &request, &response);
 
        if (result == NSS_STATUS_SUCCESS) {
                if (operation == WINBINDD_SID_TO_UID) {
                        (*id).uid = response.data.uid;
+                       DEBUG(10,("db_get_id_from_sid: winbindd replied ok (%u)\n", response.data.uid));
                } else {
                        (*id).gid = response.data.gid;
+                       DEBUG(10,("db_get_id_from_sid: winbindd replied ok (%u)\n", response.data.gid ));
                }
                return NT_STATUS_OK;
        }
 
+       DEBUG(10,("db_get_id_from_sid: winbindd lookup fail\n"));
+
        return NT_STATUS_UNSUCCESSFUL;
 }      
 
@@ -149,4 +164,3 @@ NTSTATUS idmap_winbind_init(void)
 {
        return smb_register_idmap(SMB_IDMAP_INTERFACE_VERSION, "winbind", &winbind_methods);
 }
-