The branch, v3-2-test has been updated via 05f7f77135ab997b92b2454871f21543ecbde0ed (commit) via 2b236c7ace15b4408c31ed918b449d5a22e1769f (commit) via dc9a3f8db0af03b4e8223068857092fcaff404f2 (commit) via 364e146805bb74b46da4d3c187e9a684d4b99a01 (commit) from c4e1439eded7bb4df60b9d4b457e5b7898928c9e (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test - Log ----------------------------------------------------------------- commit 05f7f77135ab997b92b2454871f21543ecbde0ed Author: Stefan Metzmacher <[EMAIL PROTECTED]> Date: Fri Apr 11 15:16:51 2008 +0200 net: 'net' doesn't need wb_common.o anymore. metze commit 2b236c7ace15b4408c31ed918b449d5a22e1769f Author: Stefan Metzmacher <[EMAIL PROTECTED]> Date: Fri Apr 11 12:01:02 2008 +0200 nsswitch: remove unused nsswitch/wb_client.c metze commit dc9a3f8db0af03b4e8223068857092fcaff404f2 Author: Stefan Metzmacher <[EMAIL PROTECTED]> Date: Fri Apr 11 12:00:29 2008 +0200 net_idmap: use wbcSet[U|G]idMapping() and wbcSet[U|G]idHwm() functions metze commit 364e146805bb74b46da4d3c187e9a684d4b99a01 Author: Stefan Metzmacher <[EMAIL PROTECTED]> Date: Fri Apr 11 09:28:20 2008 +0200 libwbclient: add wbcSet[U|G]idMapping() and wbcSet[U|G]idHwm() functions metze ----------------------------------------------------------------------- Summary of changes: source/Makefile.in | 4 +- source/nsswitch/libwbclient/wbc_idmap.c | 149 +++++++++++++++++++++++++++++++ source/nsswitch/libwbclient/wbclient.h | 8 ++ source/nsswitch/wb_client.c | 96 -------------------- source/utils/net_idmap.c | 46 ++++++---- 5 files changed, 186 insertions(+), 117 deletions(-) delete mode 100644 source/nsswitch/wb_client.c Changeset truncated at 500 lines: diff --git a/source/Makefile.in b/source/Makefile.in index d89278c..408a2f4 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -862,7 +862,7 @@ NET_OBJ1 = utils/net.o utils/net_ads.o utils/net_help.o \ $(PASSWD_UTIL_OBJ) utils/net_dns.o utils/net_ads_gpo.o \ utils/net_conf.o \ utils/net_registry.o \ - auth/token_util.o utils/net_dom.o nsswitch/wb_client.o + auth/token_util.o utils/net_dom.o # these are not processed by make proto NET_OBJ2 = utils/net_registry_util.o @@ -879,7 +879,7 @@ NET_OBJ = $(NET_OBJ1) \ $(LDB_OBJ) $(LIBGPO_OBJ) @BUILD_INIPARSER@ $(DISPLAY_SEC_OBJ) \ $(REG_SMBCONF_OBJ) @LIBNETAPI_STATIC@ $(LIBNET_OBJ) \ $(LIBSMBCONF_OBJ) \ - $(WBCOMMON_OBJ) @LIBWBCLIENT_STATIC@ \ + @LIBWBCLIENT_STATIC@ \ $(PRIVILEGES_BASIC_OBJ) CUPS_OBJ = client/smbspool.o $(PARAM_OBJ) $(LIBSMB_OBJ) \ diff --git a/source/nsswitch/libwbclient/wbc_idmap.c b/source/nsswitch/libwbclient/wbc_idmap.c index 17f6fb8..e32d66c 100644 --- a/source/nsswitch/libwbclient/wbc_idmap.c +++ b/source/nsswitch/libwbclient/wbc_idmap.c @@ -272,3 +272,152 @@ wbcErr wbcAllocateGid(gid_t *pgid) return wbc_status; } +/* we can't include smb.h here... */ +#define _ID_TYPE_UID 1 +#define _ID_TYPE_GID 2 + +/** @brief Set an user id mapping + * + * @param uid Uid of the desired mapping. + * @param *sid Pointer to the sid of the diresired mapping. + * + * @return #wbcErr + **/ +wbcErr wbcSetUidMapping(uid_t uid, const struct wbcDomainSid *sid) +{ + struct winbindd_request request; + struct winbindd_response response; + wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE; + char *sid_string = NULL; + + if (!sid) { + return WBC_ERR_INVALID_PARAM; + } + + /* Initialise request */ + + ZERO_STRUCT(request); + ZERO_STRUCT(response); + + /* Make request */ + + request.data.dual_idmapset.id = uid; + request.data.dual_idmapset.type = _ID_TYPE_UID; + + wbc_status = wbcSidToString(sid, &sid_string); + BAIL_ON_WBC_ERROR(wbc_status); + + strncpy(request.data.dual_idmapset.sid, sid_string, + sizeof(request.data.dual_idmapset.sid)-1); + wbcFreeMemory(sid_string); + + wbc_status = wbcRequestResponse(WINBINDD_SET_MAPPING, + &request, &response); + BAIL_ON_WBC_ERROR(wbc_status); + + done: + return wbc_status; +} + +/** @brief Set a group id mapping + * + * @param gid Gid of the desired mapping. + * @param *sid Pointer to the sid of the diresired mapping. + * + * @return #wbcErr + **/ +wbcErr wbcSetGidMapping(gid_t gid, const struct wbcDomainSid *sid) +{ + struct winbindd_request request; + struct winbindd_response response; + wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE; + char *sid_string = NULL; + + if (!sid) { + return WBC_ERR_INVALID_PARAM; + } + + /* Initialise request */ + + ZERO_STRUCT(request); + ZERO_STRUCT(response); + + /* Make request */ + + request.data.dual_idmapset.id = gid; + request.data.dual_idmapset.type = _ID_TYPE_GID; + + wbc_status = wbcSidToString(sid, &sid_string); + BAIL_ON_WBC_ERROR(wbc_status); + + strncpy(request.data.dual_idmapset.sid, sid_string, + sizeof(request.data.dual_idmapset.sid)-1); + wbcFreeMemory(sid_string); + + wbc_status = wbcRequestResponse(WINBINDD_SET_MAPPING, + &request, &response); + BAIL_ON_WBC_ERROR(wbc_status); + + done: + return wbc_status; +} + +/** @brief Set the highwater mark for allocated uids. + * + * @param uid_hwm The new uid highwater mark value + * + * @return #wbcErr + **/ +wbcErr wbcSetUidHwm(uid_t uid_hwm) +{ + struct winbindd_request request; + struct winbindd_response response; + wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE; + + /* Initialise request */ + + ZERO_STRUCT(request); + ZERO_STRUCT(response); + + /* Make request */ + + request.data.dual_idmapset.id = uid_hwm; + request.data.dual_idmapset.type = _ID_TYPE_UID; + + wbc_status = wbcRequestResponse(WINBINDD_SET_HWM, + &request, &response); + BAIL_ON_WBC_ERROR(wbc_status); + + done: + return wbc_status; +} + +/** @brief Set the highwater mark for allocated gids. + * + * @param uid_hwm The new gid highwater mark value + * + * @return #wbcErr + **/ +wbcErr wbcSetGidHwm(gid_t gid_hwm) +{ + struct winbindd_request request; + struct winbindd_response response; + wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE; + + /* Initialise request */ + + ZERO_STRUCT(request); + ZERO_STRUCT(response); + + /* Make request */ + + request.data.dual_idmapset.id = gid_hwm; + request.data.dual_idmapset.type = _ID_TYPE_GID; + + wbc_status = wbcRequestResponse(WINBINDD_SET_HWM, + &request, &response); + BAIL_ON_WBC_ERROR(wbc_status); + + done: + return wbc_status; +} diff --git a/source/nsswitch/libwbclient/wbclient.h b/source/nsswitch/libwbclient/wbclient.h index 16b68c0..4e7e5af 100644 --- a/source/nsswitch/libwbclient/wbclient.h +++ b/source/nsswitch/libwbclient/wbclient.h @@ -346,6 +346,14 @@ wbcErr wbcAllocateUid(uid_t *puid); wbcErr wbcAllocateGid(gid_t *pgid); +wbcErr wbcSetUidMapping(uid_t uid, const struct wbcDomainSid *sid); + +wbcErr wbcSetGidMapping(gid_t gid, const struct wbcDomainSid *sid); + +wbcErr wbcSetUidHwm(uid_t uid_hwm); + +wbcErr wbcSetGidHwm(gid_t gid_hwm); + /* * NSS Lookup User/Group details */ diff --git a/source/nsswitch/wb_client.c b/source/nsswitch/wb_client.c deleted file mode 100644 index 5e1a5d8..0000000 --- a/source/nsswitch/wb_client.c +++ /dev/null @@ -1,96 +0,0 @@ -/* - Unix SMB/CIFS implementation. - - winbind client code - - Copyright (C) Tim Potter 2000 - Copyright (C) Andrew Tridgell 2000 - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 3 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. -*/ - -#include "includes.h" -#include "nsswitch/winbind_nss.h" -#include "libwbclient/wbclient.h" - -#undef DBGC_CLASS -#define DBGC_CLASS DBGC_WINBIND - -NSS_STATUS winbindd_request_response(int req_type, - struct winbindd_request *request, - struct winbindd_response *response); - -bool winbind_set_mapping(const struct id_map *map) -{ - struct winbindd_request request; - struct winbindd_response response; - int result; - - /* Initialise request */ - - ZERO_STRUCT(request); - ZERO_STRUCT(response); - - /* Make request */ - - 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); - - result = winbindd_request_response(WINBINDD_SET_MAPPING, &request, &response); - - return (result == NSS_STATUS_SUCCESS); -} - -bool winbind_set_uid_hwm(unsigned long id) -{ - struct winbindd_request request; - struct winbindd_response response; - int result; - - /* Initialise request */ - - ZERO_STRUCT(request); - ZERO_STRUCT(response); - - /* Make request */ - - request.data.dual_idmapset.id = id; - request.data.dual_idmapset.type = ID_TYPE_UID; - - result = winbindd_request_response(WINBINDD_SET_HWM, &request, &response); - - return (result == NSS_STATUS_SUCCESS); -} - -bool winbind_set_gid_hwm(unsigned long id) -{ - struct winbindd_request request; - struct winbindd_response response; - int result; - - /* Initialise request */ - - ZERO_STRUCT(request); - ZERO_STRUCT(response); - - /* Make request */ - - request.data.dual_idmapset.id = id; - request.data.dual_idmapset.type = ID_TYPE_GID; - - result = winbindd_request_response(WINBINDD_SET_HWM, &request, &response); - - return (result == NSS_STATUS_SUCCESS); -} diff --git a/source/utils/net_idmap.c b/source/utils/net_idmap.c index f0c3e56..b002489 100644 --- a/source/utils/net_idmap.c +++ b/source/utils/net_idmap.c @@ -101,9 +101,10 @@ static int net_idmap_restore(int argc, const char **argv) while (!feof(input)) { char line[128], sid_string[128]; int len; - DOM_SID sid; - struct id_map map; + struct wbcDomainSid sid; + enum id_type type = ID_TYPE_NOT_SPECIFIED; unsigned long idval; + wbcErr wbc_status; if (fgets(line, 127, input) == NULL) break; @@ -114,21 +115,23 @@ static int net_idmap_restore(int argc, const char **argv) line[len-1] = '\0'; if (sscanf(line, "GID %lu %128s", &idval, sid_string) == 2) { - map.xid.type = ID_TYPE_GID; - map.xid.id = idval; + type = ID_TYPE_GID; } else if (sscanf(line, "UID %lu %128s", &idval, sid_string) == 2) { - map.xid.type = ID_TYPE_UID; - map.xid.id = idval; + type = ID_TYPE_UID; } else if (sscanf(line, "USER HWM %lu", &idval) == 1) { /* set uid hwm */ - if (! winbind_set_uid_hwm(idval)) { - d_fprintf(stderr, "Could not set USER HWM\n"); + wbc_status = wbcSetUidHwm(idval); + if (!WBC_ERROR_IS_OK(wbc_status)) { + d_fprintf(stderr, "Could not set USER HWM: %s\n", + wbcErrorString(wbc_status)); } continue; } else if (sscanf(line, "GROUP HWM %lu", &idval) == 1) { /* set gid hwm */ - if (! winbind_set_gid_hwm(idval)) { - d_fprintf(stderr, "Could not set GROUP HWM\n"); + wbc_status = wbcSetGidHwm(idval); + if (!WBC_ERROR_IS_OK(wbc_status)) { + d_fprintf(stderr, "Could not set GROUP HWM: %s\n", + wbcErrorString(wbc_status)); } continue; } else { @@ -136,20 +139,25 @@ static int net_idmap_restore(int argc, const char **argv) continue; } - if (!string_to_sid(&sid, sid_string)) { - d_fprintf(stderr, "ignoring invalid sid [%s]\n", sid_string); + wbc_status = wbcStringToSid(sid_string, &sid); + if (!WBC_ERROR_IS_OK(wbc_status)) { + d_fprintf(stderr, "ignoring invalid sid [%s]: %s\n", + sid_string, wbcErrorString(wbc_status)); continue; } - map.sid = &sid; - if (!winbind_set_mapping(&map)) { - d_fprintf(stderr, "Could not set mapping of %s %lu to sid %s\n", - (map.xid.type == ID_TYPE_GID) ? "GID" : "UID", - (unsigned long)map.xid.id, - sid_string_tos(map.sid)); + if (type == ID_TYPE_UID) { + wbc_status = wbcSetUidMapping(idval, &sid); + } else { + wbc_status = wbcSetGidMapping(idval, &sid); + } + if (!WBC_ERROR_IS_OK(wbc_status)) { + d_fprintf(stderr, "Could not set mapping of %s %lu to sid %s: %s\n", + (type == ID_TYPE_GID) ? "GID" : "UID", + idval, sid_string, + wbcErrorString(wbc_status)); continue; } - } if (input != stdin) { -- Samba Shared Repository