Fix a bunch of compiler warnings about wrong format types.
[ira/wip.git] / source3 / winbindd / winbindd_idmap.c
index d8c67dc21c7cff49f29cc90c14bf29aa23a99916..9f5d17ec7cfba0c8537c4b6a79c8ce2c18453331 100644 (file)
@@ -111,6 +111,65 @@ enum winbindd_result winbindd_dual_set_mapping(struct winbindd_domain *domain,
        return NT_STATUS_IS_OK(result) ? WINBINDD_OK : WINBINDD_ERROR;
 }
 
+static void winbindd_remove_mapping_recv(TALLOC_CTX *mem_ctx, bool success,
+                                  struct winbindd_response *response,
+                                  void *c, void *private_data)
+{
+       void (*cont)(void *priv, bool succ) = (void (*)(void *, bool))c;
+
+       if (!success) {
+               DEBUG(5, ("Could not trigger idmap_remove_mapping\n"));
+               cont(private_data, False);
+               return;
+       }
+
+       if (response->result != WINBINDD_OK) {
+               DEBUG(5, ("idmap_remove_mapping returned an error\n"));
+               cont(private_data, False);
+               return;
+       }
+
+       cont(private_data, True);
+}
+
+void winbindd_remove_mapping_async(TALLOC_CTX *mem_ctx,
+                            const struct id_map *map,
+                            void (*cont)(void *private_data, bool success),
+                            void *private_data)
+{
+       struct winbindd_request request;
+       ZERO_STRUCT(request);
+       request.cmd = WINBINDD_DUAL_REMOVE_MAPPING;
+       request.data.dual_idmapset.id = map->xid.id;
+       request.data.dual_idmapset.type = map->xid.type;
+       sid_to_fstring(request.data.dual_idmapset.sid, map->sid);
+
+       do_async(mem_ctx, idmap_child(), &request, winbindd_remove_mapping_recv,
+                (void *)cont, private_data);
+}
+
+enum winbindd_result winbindd_dual_remove_mapping(
+                                           struct winbindd_domain *domain,
+                                           struct winbindd_cli_state *state)
+{
+       struct id_map map;
+       DOM_SID sid;
+       NTSTATUS result;
+
+       DEBUG(3, ("[%5lu]: dual_idmapremove\n", (unsigned long)state->pid));
+
+       if (!string_to_sid(&sid, state->request.data.dual_idmapset.sid))
+               return WINBINDD_ERROR;
+
+       map.sid = &sid;
+       map.xid.id = state->request.data.dual_idmapset.id;
+       map.xid.type = state->request.data.dual_idmapset.type;
+       map.status = ID_MAPPED;
+
+       result = idmap_remove_mapping(&map);
+       return NT_STATUS_IS_OK(result) ? WINBINDD_OK : WINBINDD_ERROR;
+}
+
 static void winbindd_set_hwm_recv(TALLOC_CTX *mem_ctx, bool success,
                                   struct winbindd_response *response,
                                   void *c, void *private_data)
@@ -244,7 +303,7 @@ enum winbindd_result winbindd_dual_sid2uid(struct winbindd_domain *domain,
 
        DEBUG(10, ("winbindd_dual_sid2uid: 0x%08x - %s - %u\n",
                   NT_STATUS_V(result), sid_string_dbg(&sid),
-                  state->response.data.uid));
+                  (unsigned int)state->response.data.uid));
 
        return NT_STATUS_IS_OK(result) ? WINBINDD_OK : WINBINDD_ERROR;
 }
@@ -317,7 +376,7 @@ enum winbindd_result winbindd_dual_sid2gid(struct winbindd_domain *domain,
 
        DEBUG(10, ("winbindd_dual_sid2gid: 0x%08x - %s - %u\n",
                   NT_STATUS_V(result), sid_string_dbg(&sid),
-                  state->response.data.gid));
+                  (unsigned int)state->response.data.gid));
 
        return NT_STATUS_IS_OK(result) ? WINBINDD_OK : WINBINDD_ERROR;
 }
@@ -485,6 +544,10 @@ static const struct winbindd_child_dispatch_table idmap_dispatch_table[] = {
                .name           = "DUAL_SET_MAPPING",
                .struct_cmd     = WINBINDD_DUAL_SET_MAPPING,
                .struct_fn      = winbindd_dual_set_mapping,
+       },{
+               .name           = "DUAL_REMOVE_MAPPING",
+               .struct_cmd     = WINBINDD_DUAL_REMOVE_MAPPING,
+               .struct_fn      = winbindd_dual_remove_mapping,
        },{
                .name           = "DUAL_SET_HWMS",
                .struct_cmd     = WINBINDD_DUAL_SET_HWM,