From f301ea59773b174da9009dfd482a56d7e72a76dd Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Fri, 14 May 2010 16:18:16 +0200 Subject: s3:idmap: don't call idmap_new_mapping idmap_sid_to_unixid. The setting of a new mapping is moved into the backend code to achieve atomicity and greater flexibility. Michael --- source3/winbindd/idmap_util.c | 40 +++++++++++++++------------------------- 1 file changed, 15 insertions(+), 25 deletions(-) (limited to 'source3/winbindd') diff --git a/source3/winbindd/idmap_util.c b/source3/winbindd/idmap_util.c index a8974a9024..68b3250e8d 100644 --- a/source3/winbindd/idmap_util.c +++ b/source3/winbindd/idmap_util.c @@ -178,45 +178,35 @@ backend: ret = idmap_backends_sid_to_unixid(dom_name, &map); - if (NT_STATUS_IS_OK(ret) && (map.status == ID_MAPPED)) { - if (map.xid.type != ID_TYPE_UID) { - DEBUG(10, ("sid [%s] not mapped to a uid " - "[%u,%u,%u]\n", - sid_string_dbg(sid), - map.status, - map.xid.type, - map.xid.id)); - if (winbindd_use_idmap_cache()) { - idmap_cache_set_sid2uid(sid, -1); - } - return NT_STATUS_NONE_MAPPED; + if (!NT_STATUS_IS_OK(ret)) { + DEBUG(10, ("idmap_backends_sid_to_unixid failed: %s\n", + nt_errstr(ret))); + if (winbindd_use_idmap_cache()) { + idmap_cache_set_sid2uid(sid, -1); } - goto done; + return ret; } - if (dom_name[0] != '\0') { - /* - * We had the task to go to a specific domain which - * could not answer our request. Fail. - */ + if (map.status != ID_MAPPED) { if (winbindd_use_idmap_cache()) { idmap_cache_set_sid2uid(sid, -1); } return NT_STATUS_NONE_MAPPED; } - ret = idmap_new_mapping(sid, ID_TYPE_UID, &map.xid); - - if (!NT_STATUS_IS_OK(ret)) { - DEBUG(10, ("idmap_new_mapping failed: %s\n", - nt_errstr(ret))); + if (map.xid.type != ID_TYPE_UID) { + DEBUG(10, ("sid [%s] not mapped to a uid " + "[%u,%u,%u]\n", + sid_string_dbg(sid), + map.status, + map.xid.type, + map.xid.id)); if (winbindd_use_idmap_cache()) { idmap_cache_set_sid2uid(sid, -1); } - return ret; + return NT_STATUS_NONE_MAPPED; } -done: *uid = (uid_t)map.xid.id; if (winbindd_use_idmap_cache()) { idmap_cache_set_sid2uid(sid, *uid); -- cgit