[SCM] Samba Shared Repository - branch master updated -
d1f980444d22e41659af0d3681f81162b914aa61
Stefan Metzmacher
metze at samba.org
Wed Oct 29 12:55:51 GMT 2008
The branch, master has been updated
via d1f980444d22e41659af0d3681f81162b914aa61 (commit)
via 6aac05f5cec2ba2f695527d64a03d07d9b09e03a (commit)
from ecd2434d69407821d68a253bf9758533db3ad7c2 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit d1f980444d22e41659af0d3681f81162b914aa61
Author: Volker Lendecke <vl at samba.org>
Date: Wed Oct 22 11:21:31 2008 +0200
wbinfo --sid-to-fullname
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 6aac05f5cec2ba2f695527d64a03d07d9b09e03a
Author: Volker Lendecke <vl at samba.org>
Date: Tue Oct 21 17:11:29 2008 +0200
wbcGetDisplayName
Signed-off-by: Stefan Metzmacher <metze at samba.org>
-----------------------------------------------------------------------
Summary of changes:
source3/nsswitch/libwbclient/wbc_sid.c | 44 +++++++++++++++++++++++++++++++
source3/nsswitch/libwbclient/wbclient.h | 5 +++
source3/nsswitch/wbinfo.c | 42 ++++++++++++++++++++++++++++-
3 files changed, 90 insertions(+), 1 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/nsswitch/libwbclient/wbc_sid.c b/source3/nsswitch/libwbclient/wbc_sid.c
index 54f6e70..ac929b1 100644
--- a/source3/nsswitch/libwbclient/wbc_sid.c
+++ b/source3/nsswitch/libwbclient/wbc_sid.c
@@ -675,3 +675,47 @@ wbcErr wbcListGroups(const char *domain_name,
}
return wbc_status;
}
+
+wbcErr wbcGetDisplayName(const struct wbcDomainSid *sid,
+ char **pdomain,
+ char **pfullname,
+ enum wbcSidType *pname_type)
+{
+ wbcErr wbc_status;
+ char *domain = NULL;
+ char *name = NULL;
+ enum wbcSidType name_type;
+
+ wbc_status = wbcLookupSid(sid, &domain, &name, &name_type);
+ BAIL_ON_WBC_ERROR(wbc_status);
+
+ if (name_type == WBC_SID_NAME_USER) {
+ uid_t uid;
+ struct passwd *pwd;
+
+ wbc_status = wbcSidToUid(sid, &uid);
+ BAIL_ON_WBC_ERROR(wbc_status);
+
+ wbc_status = wbcGetpwuid(uid, &pwd);
+ BAIL_ON_WBC_ERROR(wbc_status);
+
+ wbcFreeMemory(name);
+
+ name = talloc_strdup(NULL, pwd->pw_gecos);
+ BAIL_ON_PTR_ERROR(name, wbc_status);
+ }
+
+ wbc_status = WBC_ERR_SUCCESS;
+
+ done:
+ if (WBC_ERROR_IS_OK(wbc_status)) {
+ *pdomain = domain;
+ *pfullname = name;
+ *pname_type = name_type;
+ } else {
+ wbcFreeMemory(domain);
+ wbcFreeMemory(name);
+ }
+
+ return wbc_status;
+}
diff --git a/source3/nsswitch/libwbclient/wbclient.h b/source3/nsswitch/libwbclient/wbclient.h
index 00a3c98..662e0cd 100644
--- a/source3/nsswitch/libwbclient/wbclient.h
+++ b/source3/nsswitch/libwbclient/wbclient.h
@@ -526,6 +526,11 @@ wbcErr wbcListGroups(const char *domain_name,
uint32_t *num_groups,
const char ***groups);
+wbcErr wbcGetDisplayName(const struct wbcDomainSid *sid,
+ char **pdomain,
+ char **pfullname,
+ enum wbcSidType *pname_type);
+
/*
* SID/uid/gid Mappings
*/
diff --git a/source3/nsswitch/wbinfo.c b/source3/nsswitch/wbinfo.c
index fc49be4..84f01e1 100644
--- a/source3/nsswitch/wbinfo.c
+++ b/source3/nsswitch/wbinfo.c
@@ -768,6 +768,36 @@ static bool wbinfo_lookupsid(const char *sid_str)
return true;
}
+/* Convert sid to fullname */
+
+static bool wbinfo_lookupsid_fullname(const char *sid_str)
+{
+ wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
+ struct wbcDomainSid sid;
+ char *domain;
+ char *name;
+ enum wbcSidType type;
+
+ /* Send off request */
+
+ wbc_status = wbcStringToSid(sid_str, &sid);
+ if (!WBC_ERROR_IS_OK(wbc_status)) {
+ return false;
+ }
+
+ wbc_status = wbcGetDisplayName(&sid, &domain, &name, &type);
+ if (!WBC_ERROR_IS_OK(wbc_status)) {
+ return false;
+ }
+
+ /* Display response */
+
+ d_printf("%s%c%s %d\n",
+ domain, winbind_separator(), name, type);
+
+ return true;
+}
+
/* Lookup a list of RIDs */
static bool wbinfo_lookuprids(const char *domain, const char *arg)
@@ -1391,7 +1421,8 @@ enum {
OPT_GROUP_INFO,
OPT_VERBOSE,
OPT_ONLINESTATUS,
- OPT_CHANGE_USER_PASSWORD
+ OPT_CHANGE_USER_PASSWORD,
+ OPT_SID_TO_FULLNAME
};
int main(int argc, char **argv, char **envp)
@@ -1417,6 +1448,8 @@ int main(int argc, char **argv, char **envp)
{ "WINS-by-ip", 'I', POPT_ARG_STRING, &string_arg, 'I', "Converts IP address to NetBIOS name", "IP" },
{ "name-to-sid", 'n', POPT_ARG_STRING, &string_arg, 'n', "Converts name to sid", "NAME" },
{ "sid-to-name", 's', POPT_ARG_STRING, &string_arg, 's', "Converts sid to name", "SID" },
+ { "sid-to-fullname", 0, POPT_ARG_STRING, &string_arg,
+ OPT_SID_TO_FULLNAME, "Converts sid to fullname", "SID" },
{ "lookup-rids", 'R', POPT_ARG_STRING, &string_arg, 'R', "Converts RIDs to names", "RIDs" },
{ "uid-to-sid", 'U', POPT_ARG_INT, &int_arg, 'U', "Converts uid to sid" , "UID" },
{ "gid-to-sid", 'G', POPT_ARG_INT, &int_arg, 'G', "Converts gid to sid", "GID" },
@@ -1524,6 +1557,13 @@ int main(int argc, char **argv, char **envp)
goto done;
}
break;
+ case OPT_SID_TO_FULLNAME:
+ if (!wbinfo_lookupsid_fullname(string_arg)) {
+ d_fprintf(stderr, "Could not lookup sid %s\n",
+ string_arg);
+ goto done;
+ }
+ break;
case 'R':
if (!wbinfo_lookuprids(opt_domain_name, string_arg)) {
d_fprintf(stderr, "Could not lookup RIDs %s\n", string_arg);
--
Samba Shared Repository
More information about the samba-cvs
mailing list