winbind: Use plural xids2sids in _wbint_UnixIDs2Sids
authorVolker Lendecke <vl@samba.org>
Fri, 4 Mar 2016 14:45:24 +0000 (15:45 +0100)
committerVolker Lendecke <vl@samba.org>
Wed, 30 Mar 2016 12:27:23 +0000 (14:27 +0200)
We've had plural xid2sid idmap backends for a while. Start using
them.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/winbindd/winbindd_dual_srv.c

index 7c415e68f83c773f7009ddb20b71de141741d92c..fb65e9d1c30bac50ad621a08352789d91fd12d17 100644 (file)
@@ -208,30 +208,32 @@ done:
 NTSTATUS _wbint_UnixIDs2Sids(struct pipes_struct *p,
                             struct wbint_UnixIDs2Sids *r)
 {
+       struct id_map **maps;
+       NTSTATUS status;
        uint32_t i;
 
+       maps = id_map_ptrs_init(talloc_tos(), r->in.num_ids);
+       if (maps == NULL) {
+               return NT_STATUS_NO_MEMORY;
+       }
+
        for (i=0; i<r->in.num_ids; i++) {
-               struct unixid *xid = &r->in.xids[i];
-               struct dom_sid *sid = &r->out.sids[i];
-               NTSTATUS status;
-
-               switch (xid->type) {
-                   case ID_TYPE_UID:
-                           status = idmap_uid_to_sid(sid, xid->id);
-                           break;
-                   case ID_TYPE_GID:
-                           status = idmap_gid_to_sid(sid, xid->id);
-                           break;
-                   default:
-                           status = NT_STATUS_NONE_MAPPED;
-                           break;
-               }
+               maps[i]->status = ID_UNKNOWN;
+               maps[i]->xid = r->in.xids[i];
+       }
 
-               if (!NT_STATUS_IS_OK(status)) {
-                       *sid = (struct dom_sid) {0};
-               }
+       status = idmap_backend_unixids_to_sids(maps, r->in.domain_name);
+       if (!NT_STATUS_IS_OK(status)) {
+               TALLOC_FREE(maps);
+               return status;
        }
 
+       for (i=0; i<r->in.num_ids; i++) {
+               sid_copy(&r->out.sids[i], maps[i]->sid);
+       }
+
+       TALLOC_FREE(maps);
+
        return NT_STATUS_OK;
 }