Directly call backends from idmap_[ugs]_to_[ugs]id
authorVolker Lendecke <vl@samba.org>
Mon, 14 Jul 2008 10:32:18 +0000 (12:32 +0200)
committerVolker Lendecke <vl@samba.org>
Tue, 12 Aug 2008 09:28:28 +0000 (11:28 +0200)
(This used to be commit f955407042e6d2384acccc399d72ff65ba0e721c)

source3/winbindd/idmap.c
source3/winbindd/idmap_util.c

index 95ff923d0faff1f396bba5492fa0181f5f28fed8..f0d2c03e0b2d0ddb6c174b19b9ef73859e83aafa 100644 (file)
@@ -1282,6 +1282,45 @@ done:
        return ret;
 }
 
+NTSTATUS idmap_backends_unixid_to_sid(struct id_map *id)
+{
+       struct id_map *maps[2];
+       int i;
+
+       maps[0] = id;
+       maps[1] = NULL;
+
+       for (i = num_domains-1; i>=0; i--) {
+               struct idmap_domain *dom = idmap_domains[i];
+               NTSTATUS status;
+
+               DEBUG(10, ("Query sids from domain %s\n", dom->name));
+
+               status = dom->methods->unixids_to_sids(dom, maps);
+               if (NT_STATUS_IS_OK(status)) {
+                       return NT_STATUS_OK;
+               }
+       }
+
+       return NT_STATUS_NONE_MAPPED;
+}
+
+NTSTATUS idmap_backends_sid_to_unixid(struct id_map *id)
+{
+       struct idmap_domain *dom;
+       struct id_map *maps[2];
+
+       dom = find_idmap_domain_from_sid(id->sid);
+       if (dom == NULL) {
+               return NT_STATUS_NONE_MAPPED;
+       }
+
+       maps[0] = id;
+       maps[1] = NULL;
+
+       return dom->methods->sids_to_unixids(dom, maps);
+}
+
 /**************************************************************************
  idmap interface functions
 **************************************************************************/
index 0d24070dd6747d62ae86c7915e1ee351ef295ed5..31b9895224914ceb41fb7c7ce97e21903dc35bdd 100644 (file)
@@ -31,7 +31,6 @@ NTSTATUS idmap_uid_to_sid(DOM_SID *sid, uid_t uid)
 {
        NTSTATUS ret;
        struct id_map map;
-       struct id_map *maps[2];
 
        DEBUG(10,("uid = [%lu]\n", (unsigned long)uid));
 
@@ -39,10 +38,7 @@ NTSTATUS idmap_uid_to_sid(DOM_SID *sid, uid_t uid)
        map.xid.type = ID_TYPE_UID;
        map.xid.id = uid;
 
-       maps[0] = &map;
-       maps[1] = NULL;
-       
-       ret = idmap_unixids_to_sids(maps);
+       ret = idmap_backends_unixid_to_sid(&map);
        if ( ! NT_STATUS_IS_OK(ret)) {
                DEBUG(10, ("error mapping uid [%lu]\n", (unsigned long)uid));
                return ret;
@@ -65,7 +61,6 @@ NTSTATUS idmap_gid_to_sid(DOM_SID *sid, gid_t gid)
 {
        NTSTATUS ret;
        struct id_map map;
-       struct id_map *maps[2];
 
        DEBUG(10,("gid = [%lu]\n", (unsigned long)gid));
 
@@ -73,10 +68,7 @@ NTSTATUS idmap_gid_to_sid(DOM_SID *sid, gid_t gid)
        map.xid.type = ID_TYPE_GID;
        map.xid.id = gid;
 
-       maps[0] = &map;
-       maps[1] = NULL;
-       
-       ret = idmap_unixids_to_sids(maps);
+       ret = idmap_backends_unixid_to_sid(&map);
        if ( ! NT_STATUS_IS_OK(ret)) {
                DEBUG(10, ("error mapping gid [%lu]\n", (unsigned long)gid));
                return ret;
@@ -99,17 +91,13 @@ NTSTATUS idmap_sid_to_uid(DOM_SID *sid, uid_t *uid)
 {
        NTSTATUS ret;
        struct id_map map;
-       struct id_map *maps[2];
 
        DEBUG(10,("idmap_sid_to_uid: sid = [%s]\n", sid_string_dbg(sid)));
 
        map.sid = sid;
        map.xid.type = ID_TYPE_UID;     
-       
-       maps[0] = &map;
-       maps[1] = NULL;
-       
-       ret = idmap_sids_to_unixids(maps);
+
+       ret = idmap_backends_sid_to_unixid(&map);
        if ( ! NT_STATUS_IS_OK(ret)) {
                DEBUG(10, ("error mapping sid [%s] to uid\n", 
                           sid_string_dbg(sid)));
@@ -139,17 +127,13 @@ NTSTATUS idmap_sid_to_gid(DOM_SID *sid, gid_t *gid)
 {
        NTSTATUS ret;
        struct id_map map;
-       struct id_map *maps[2];
 
        DEBUG(10,("idmap_sid_to_gid: sid = [%s]\n", sid_string_dbg(sid)));
 
        map.sid = sid;
        map.xid.type = ID_TYPE_GID;
-       
-       maps[0] = &map;
-       maps[1] = NULL;
-       
-       ret = idmap_sids_to_unixids(maps);
+
+       ret = idmap_backends_sid_to_unixid(&map);
        if ( ! NT_STATUS_IS_OK(ret)) {
                DEBUG(10, ("error mapping sid [%s] to gid\n", 
                           sid_string_dbg(sid)));