diff options
author | Steven Danneman <steven.danneman@isilon.com> | 2008-10-27 23:37:55 -0700 |
---|---|---|
committer | Steven Danneman <steven.danneman@isilon.com> | 2008-11-18 16:04:04 -0800 |
commit | 00c6271d5cbbfe808b81906d5be2b328e4f25b30 (patch) | |
tree | c6ce249e7596290249e8efd3577cd28c12d0d9be /source3/winbindd/winbindd_sid.c | |
parent | 041c5cf3b5a2fba6ad49e049601b626d5b04ac3e (diff) | |
download | samba-00c6271d5cbbfe808b81906d5be2b328e4f25b30.tar.gz samba-00c6271d5cbbfe808b81906d5be2b328e4f25b30.tar.bz2 samba-00c6271d5cbbfe808b81906d5be2b328e4f25b30.zip |
Added ability to remove id mappings in wbinfo and libwbclient.
The idmap_tdb backend already provides an interface to remove existing id
mappings. This commit plumbs that ability up through, winbindd, libwbclient,
and wbinfo.
Added new winbindd command:
WINBINDD_REMOVE_MAPPING
Added new libwbclient interfaces:
wbcRemoveUidMapping() and wbcRemoveGidMapping()
Added new wbinfo options:
--remove-uid-mapping
--remove-gid-mapping
Increased libwbclient version to 0.2
Increased winbind interface version to 20
Diffstat (limited to 'source3/winbindd/winbindd_sid.c')
-rw-r--r-- | source3/winbindd/winbindd_sid.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/source3/winbindd/winbindd_sid.c b/source3/winbindd/winbindd_sid.c index 274786fa63..d8bd863037 100644 --- a/source3/winbindd/winbindd_sid.c +++ b/source3/winbindd/winbindd_sid.c @@ -415,6 +415,48 @@ void winbindd_set_mapping(struct winbindd_cli_state *state) set_mapping_recv, state); } +static void remove_mapping_recv(void *private_data, bool success) +{ + struct winbindd_cli_state *state = + talloc_get_type_abort(private_data, struct winbindd_cli_state); + + if (!success) { + DEBUG(5, ("Could not remove sid mapping\n")); + request_error(state); + return; + } + + request_ok(state); +} + +void winbindd_remove_mapping(struct winbindd_cli_state *state) +{ + struct id_map map; + DOM_SID sid; + + DEBUG(3, ("[%5lu]: remove id map\n", (unsigned long)state->pid)); + + if ( ! state->privileged) { + DEBUG(0, ("Only root is allowed to remove mappings!\n")); + request_error(state); + return; + } + + if (!string_to_sid(&sid, state->request.data.dual_idmapset.sid)) { + DEBUG(1, ("Could not get convert sid %s from string\n", + state->request.data.sid)); + request_error(state); + return; + } + + map.sid = &sid; + map.xid.id = state->request.data.dual_idmapset.id; + map.xid.type = state->request.data.dual_idmapset.type; + + winbindd_remove_mapping_async(state->mem_ctx, &map, + remove_mapping_recv, state); +} + static void set_hwm_recv(void *private_data, bool success) { struct winbindd_cli_state *state = |