summaryrefslogtreecommitdiff
path: root/source3/nsswitch/wbinfo.c
diff options
context:
space:
mode:
authorKai Blin <kai@samba.org>2007-08-12 17:36:42 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:29:32 -0500
commit0bb638a7987fe499bc31354e2c846161d4cef294 (patch)
tree6005e0a6fa8c99b2812bd4c7ae07713102fd902e /source3/nsswitch/wbinfo.c
parent5d39acf2f8cdee9e70a470a638909db7ceb219b2 (diff)
downloadsamba-0bb638a7987fe499bc31354e2c846161d4cef294.tar.gz
samba-0bb638a7987fe499bc31354e2c846161d4cef294.tar.bz2
samba-0bb638a7987fe499bc31354e2c846161d4cef294.zip
r24353: Add a getpwuid lookup to wbinfo.
Merged from my Samba4 GSoC branch. Volker, can you check if that's done the way you thought? (This used to be commit f8560ea66ce522ff11d16f0e36e10853fe2639d7)
Diffstat (limited to 'source3/nsswitch/wbinfo.c')
-rw-r--r--source3/nsswitch/wbinfo.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/source3/nsswitch/wbinfo.c b/source3/nsswitch/wbinfo.c
index 0f218f70f4..e0bda948ed 100644
--- a/source3/nsswitch/wbinfo.c
+++ b/source3/nsswitch/wbinfo.c
@@ -150,6 +150,35 @@ static BOOL wbinfo_get_userinfo(char *user)
return True;
}
+/* pull pwent info for a given uid */
+static BOOL wbinfo_get_uidinfo(int uid)
+{
+ struct winbindd_request request;
+ struct winbindd_response response;
+ NSS_STATUS result;
+
+ ZERO_STRUCT(request);
+ ZERO_STRUCT(response);
+
+ request.data.uid = uid;
+
+ result = winbindd_request_response(WINBINDD_GETPWUID, &request, &response);
+
+ if (result != NSS_STATUS_SUCCESS)
+ return False;
+
+ d_printf( "%s:%s:%d:%d:%s:%s:%s\n",
+ response.data.pw.pw_name,
+ response.data.pw.pw_passwd,
+ response.data.pw.pw_uid,
+ response.data.pw.pw_gid,
+ response.data.pw.pw_gecos,
+ response.data.pw.pw_dir,
+ response.data.pw.pw_shell );
+
+ return True;
+}
+
/* pull grent for a given group */
static BOOL wbinfo_get_groupinfo(char *group)
{
@@ -1196,6 +1225,7 @@ enum {
OPT_SEPARATOR,
OPT_LIST_ALL_DOMAINS,
OPT_LIST_OWN_DOMAIN,
+ OPT_UID_INFO,
OPT_GROUP_INFO,
};
@@ -1237,6 +1267,7 @@ int main(int argc, char **argv, char **envp)
{ "sequence", 0, POPT_ARG_NONE, 0, OPT_SEQUENCE, "Show sequence numbers of all domains" },
{ "domain-info", 'D', POPT_ARG_STRING, &string_arg, 'D', "Show most of the info we have about the domain" },
{ "user-info", 'i', POPT_ARG_STRING, &string_arg, 'i', "Get user info", "USER" },
+ { "uid-info", 0, POPT_ARG_INT, &int_arg, OPT_UID_INFO, "Get user info from uid", "UID" },
{ "group-info", 0, POPT_ARG_STRING, &string_arg, OPT_GROUP_INFO, "Get group info", "GROUP" },
{ "user-groups", 'r', POPT_ARG_STRING, &string_arg, 'r', "Get user groups", "USER" },
{ "user-domgroups", 0, POPT_ARG_STRING, &string_arg,
@@ -1410,6 +1441,13 @@ int main(int argc, char **argv, char **envp)
goto done;
}
break;
+ case OPT_UID_INFO:
+ if ( !wbinfo_get_uidinfo(int_arg)) {
+ d_fprintf(stderr, "Could not get info for uid "
+ "%d\n", int_arg);
+ goto done;
+ }
+ break;
case OPT_GROUP_INFO:
if ( !wbinfo_get_groupinfo(string_arg)) {
d_fprintf(stderr, "Could not get info for "