From 0118f6b41757897dc087f79da53d3fe2f4f42e7e Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 25 Jun 2003 19:01:17 +0000 Subject: Ensure idmap backends are added in the correct order (DLIST_ADD puts things at the *front* of the list). Add more debug. Still broken.. :-(. Jeremy. (This used to be commit dd9251e6f51f229ca1fab23d9b06f5bb68644fab) --- source3/sam/idmap.c | 4 ++-- source3/sam/idmap_tdb.c | 8 ++++++-- source3/sam/idmap_winbind.c | 22 ++++++++++++++++++---- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/source3/sam/idmap.c b/source3/sam/idmap.c index d2f68acf60..7b4261169f 100644 --- a/source3/sam/idmap.c +++ b/source3/sam/idmap.c @@ -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; } diff --git a/source3/sam/idmap_tdb.c b/source3/sam/idmap_tdb.c index f7f9f02003..7fca658792 100644 --- a/source3/sam/idmap_tdb.c +++ b/source3/sam/idmap_tdb.c @@ -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; diff --git a/source3/sam/idmap_winbind.c b/source3/sam/idmap_winbind.c index d15d8f20a1..6c0d80ab1c 100644 --- a/source3/sam/idmap_winbind.c +++ b/source3/sam/idmap_winbind.c @@ -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); } - -- cgit