2 Unix SMB/CIFS implementation.
5 Copyright (C) Volker Lendecke 2005
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>.
22 #include "rpcclient.h"
24 static NTSTATUS cmd_unixinfo_uid2sid(struct rpc_pipe_client *cli,
26 int argc, const char **argv)
33 printf("Usage: %s uid\n", argv[0]);
34 return NT_STATUS_INVALID_PARAMETER;
38 result = rpccli_unixinfo_UidToSid(cli, mem_ctx, uid, &sid);
40 if (!NT_STATUS_IS_OK(result))
43 printf("%s\n", sid_string_static(&sid));
49 static NTSTATUS cmd_unixinfo_sid2uid(struct rpc_pipe_client *cli,
51 int argc, const char **argv)
58 printf("Usage: %s sid\n", argv[0]);
59 return NT_STATUS_INVALID_PARAMETER;
62 if (!string_to_sid(&sid, argv[1])) {
63 result = NT_STATUS_INVALID_SID;
67 result = rpccli_unixinfo_SidToUid(cli, mem_ctx, sid, &uid);
69 if (!NT_STATUS_IS_OK(result))
72 printf("%llu\n", (unsigned long long)uid);
78 static NTSTATUS cmd_unixinfo_gid2sid(struct rpc_pipe_client *cli,
80 int argc, const char **argv)
87 printf("Usage: %s gid\n", argv[0]);
88 return NT_STATUS_INVALID_PARAMETER;
93 result = rpccli_unixinfo_GidToSid(cli, mem_ctx, gid, &sid);
95 if (!NT_STATUS_IS_OK(result))
98 printf("%s\n", sid_string_static(&sid));
104 static NTSTATUS cmd_unixinfo_sid2gid(struct rpc_pipe_client *cli,
106 int argc, const char **argv)
113 printf("Usage: %s sid\n", argv[0]);
114 return NT_STATUS_INVALID_PARAMETER;
117 if (!string_to_sid(&sid, argv[1])) {
118 result = NT_STATUS_INVALID_SID;
122 result = rpccli_unixinfo_SidToGid(cli, mem_ctx, sid, &gid);
124 if (!NT_STATUS_IS_OK(result))
127 printf("%llu\n", (unsigned long long)gid);
133 static NTSTATUS cmd_unixinfo_getpwuid(struct rpc_pipe_client *cli,
135 int argc, const char **argv)
138 unsigned int i, num_uids;
139 struct unixinfo_GetPWUidInfo *info;
143 printf("Usage: %s uid [uid2 uid3 ...]\n", argv[0]);
144 return NT_STATUS_INVALID_PARAMETER;
148 uids = TALLOC_ARRAY(mem_ctx, uint64_t, num_uids);
151 return NT_STATUS_NO_MEMORY;
154 for (i=0; i<num_uids; i++) {
155 uids[i] = atoi(argv[i+1]);
158 info = TALLOC_ARRAY(mem_ctx, struct unixinfo_GetPWUidInfo, num_uids);
160 return NT_STATUS_NO_MEMORY;
164 result = rpccli_unixinfo_GetPWUid(cli, mem_ctx, &num_uids, uids,
167 if (!NT_STATUS_IS_OK(result)) {
171 for (i=0; i<num_uids; i++) {
172 if (NT_STATUS_IS_OK(info[i].status)) {
173 printf("%llu:%s:%s\n", (unsigned long long)uids[i],
174 info[i].homedir, info[i].shell);
176 printf("%llu:%s\n", (unsigned long long)uids[i],
177 nt_errstr(info[i].status));
184 /* List of commands exported by this module */
186 struct cmd_set unixinfo_commands[] = {
190 { "uid2sid", RPC_RTYPE_NTSTATUS, cmd_unixinfo_uid2sid, NULL,
191 PI_UNIXINFO, NULL, "Convert a uid to a sid", "" },
192 { "sid2uid", RPC_RTYPE_NTSTATUS, cmd_unixinfo_sid2uid, NULL,
193 PI_UNIXINFO, NULL, "Convert a sid to a uid", "" },
194 { "gid2sid", RPC_RTYPE_NTSTATUS, cmd_unixinfo_gid2sid, NULL,
195 PI_UNIXINFO, NULL, "Convert a gid to a sid", "" },
196 { "sid2gid", RPC_RTYPE_NTSTATUS, cmd_unixinfo_sid2gid, NULL,
197 PI_UNIXINFO, NULL, "Convert a sid to a gid", "" },
198 { "getpwuid", RPC_RTYPE_NTSTATUS, cmd_unixinfo_getpwuid, NULL,
199 PI_UNIXINFO, NULL, "Get passwd info", "" },