• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src/router/samba-3.5.8/source3/lib/netapi/examples/user/
1/*
2 *  Unix SMB/CIFS implementation.
3 *  NetUserGetInfo query
4 *  Copyright (C) Guenther Deschner 2008
5 *
6 *  This program is free software; you can redistribute it and/or modify
7 *  it under the terms of the GNU General Public License as published by
8 *  the Free Software Foundation; either version 3 of the License, or
9 *  (at your option) any later version.
10 *
11 *  This program is distributed in the hope that it will be useful,
12 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 *  GNU General Public License for more details.
15 *
16 *  You should have received a copy of the GNU General Public License
17 *  along with this program; if not, see <http://www.gnu.org/licenses/>.
18 */
19
20#include <sys/types.h>
21#include <inttypes.h>
22#include <stdio.h>
23#include <stdlib.h>
24#include <string.h>
25
26#include <netapi.h>
27
28#include "common.h"
29
30int main(int argc, const char **argv)
31{
32	NET_API_STATUS status;
33	struct libnetapi_ctx *ctx = NULL;
34	const char *hostname = NULL;
35	const char *username = NULL;
36	uint8_t *buffer = NULL;
37	uint32_t level = 0;
38	char *sid_str = NULL;
39	int i;
40
41	struct USER_INFO_0 *u0;
42	struct USER_INFO_1 *u1;
43	struct USER_INFO_2 *u2;
44	struct USER_INFO_3 *u3;
45	struct USER_INFO_4 *u4;
46	struct USER_INFO_10 *u10;
47	struct USER_INFO_11 *u11;
48	struct USER_INFO_20 *u20;
49	struct USER_INFO_23 *u23;
50
51	poptContext pc;
52	int opt;
53
54	struct poptOption long_options[] = {
55		POPT_AUTOHELP
56		POPT_COMMON_LIBNETAPI_EXAMPLES
57		POPT_TABLEEND
58	};
59
60	status = libnetapi_init(&ctx);
61	if (status != 0) {
62		return status;
63	}
64
65	pc = poptGetContext("user_getinfo", argc, argv, long_options, 0);
66
67	poptSetOtherOptionHelp(pc, "hostname username level");
68	while((opt = poptGetNextOpt(pc)) != -1) {
69	}
70
71	if (!poptPeekArg(pc)) {
72		poptPrintHelp(pc, stderr, 0);
73		goto out;
74	}
75	hostname = poptGetArg(pc);
76
77	if (!poptPeekArg(pc)) {
78		poptPrintHelp(pc, stderr, 0);
79		goto out;
80	}
81	username = poptGetArg(pc);
82
83	if (poptPeekArg(pc)) {
84		level = atoi(poptGetArg(pc));
85	}
86
87	/* NetUserGetInfo */
88
89	status = NetUserGetInfo(hostname,
90				username,
91				level,
92				&buffer);
93	if (status != 0) {
94		printf("NetUserGetInfo failed with: %s\n",
95			libnetapi_get_error_string(ctx, status));
96		goto out;
97	}
98
99	switch (level) {
100		case 0:
101			u0 = (struct USER_INFO_0 *)buffer;
102			printf("name: %s\n", u0->usri0_name);
103			break;
104		case 1:
105			u1 = (struct USER_INFO_1 *)buffer;
106			printf("name: %s\n", u1->usri1_name);
107			printf("password: %s\n", u1->usri1_password);
108			printf("password_age: %d\n", u1->usri1_password_age);
109			printf("priv: %d\n", u1->usri1_priv);
110			printf("homedir: %s\n", u1->usri1_home_dir);
111			printf("comment: %s\n", u1->usri1_comment);
112			printf("flags: 0x%08x\n", u1->usri1_flags);
113			printf("script: %s\n", u1->usri1_script_path);
114			break;
115		case 2:
116			u2 = (struct USER_INFO_2 *)buffer;
117			printf("name: %s\n", u2->usri2_name);
118			printf("password: %s\n", u2->usri2_password);
119			printf("password_age: %d\n", u2->usri2_password_age);
120			printf("priv: %d\n", u2->usri2_priv);
121			printf("homedir: %s\n", u2->usri2_home_dir);
122			printf("comment: %s\n", u2->usri2_comment);
123			printf("flags: 0x%08x\n", u2->usri2_flags);
124			printf("script: %s\n", u2->usri2_script_path);
125			printf("auth flags: 0x%08x\n", u2->usri2_auth_flags);
126			printf("full name: %s\n", u2->usri2_full_name);
127			printf("user comment: %s\n", u2->usri2_usr_comment);
128			printf("user parameters: %s\n", u2->usri2_parms);
129			printf("workstations: %s\n", u2->usri2_workstations);
130			printf("last logon (seconds since jan. 1, 1970 GMT): %d\n",
131				u2->usri2_last_logon);
132			printf("last logoff (seconds since jan. 1, 1970 GMT): %d\n",
133				u2->usri2_last_logoff);
134			printf("account expires (seconds since jan. 1, 1970 GMT): %d\n",
135				u2->usri2_acct_expires);
136			printf("max storage: %d\n", u2->usri2_max_storage);
137			printf("units per week: %d\n", u2->usri2_units_per_week);
138			printf("logon hours:");
139			for (i=0; i<21; i++) {
140				printf(" %x", (uint8_t)u2->usri2_logon_hours[i]);
141			}
142			printf("\n");
143			printf("bad password count: %d\n", u2->usri2_bad_pw_count);
144			printf("logon count: %d\n", u2->usri2_num_logons);
145			printf("logon server: %s\n", u2->usri2_logon_server);
146			printf("country code: %d\n", u2->usri2_country_code);
147			printf("code page: %d\n", u2->usri2_code_page);
148			break;
149		case 3:
150			u3 = (struct USER_INFO_3 *)buffer;
151			printf("name: %s\n", u3->usri3_name);
152			printf("password_age: %d\n", u3->usri3_password_age);
153			printf("priv: %d\n", u3->usri3_priv);
154			printf("homedir: %s\n", u3->usri3_home_dir);
155			printf("comment: %s\n", u3->usri3_comment);
156			printf("flags: 0x%08x\n", u3->usri3_flags);
157			printf("script: %s\n", u3->usri3_script_path);
158			printf("auth flags: 0x%08x\n", u3->usri3_auth_flags);
159			printf("full name: %s\n", u3->usri3_full_name);
160			printf("user comment: %s\n", u3->usri3_usr_comment);
161			printf("user parameters: %s\n", u3->usri3_parms);
162			printf("workstations: %s\n", u3->usri3_workstations);
163			printf("last logon (seconds since jan. 1, 1970 GMT): %d\n",
164				u3->usri3_last_logon);
165			printf("last logoff (seconds since jan. 1, 1970 GMT): %d\n",
166				u3->usri3_last_logoff);
167			printf("account expires (seconds since jan. 1, 1970 GMT): %d\n",
168				u3->usri3_acct_expires);
169			printf("max storage: %d\n", u3->usri3_max_storage);
170			printf("units per week: %d\n", u3->usri3_units_per_week);
171			printf("logon hours:");
172			for (i=0; i<21; i++) {
173				printf(" %x", (uint8_t)u3->usri3_logon_hours[i]);
174			}
175			printf("\n");
176			printf("bad password count: %d\n", u3->usri3_bad_pw_count);
177			printf("logon count: %d\n", u3->usri3_num_logons);
178			printf("logon server: %s\n", u3->usri3_logon_server);
179			printf("country code: %d\n", u3->usri3_country_code);
180			printf("code page: %d\n", u3->usri3_code_page);
181			printf("user id: %d\n", u3->usri3_user_id);
182			printf("primary group id: %d\n", u3->usri3_primary_group_id);
183			printf("profile: %s\n", u3->usri3_profile);
184			printf("home dir drive: %s\n", u3->usri3_home_dir_drive);
185			printf("password expired: %d\n", u3->usri3_password_expired);
186			break;
187		case 4:
188			u4 = (struct USER_INFO_4 *)buffer;
189			printf("name: %s\n", u4->usri4_name);
190			printf("password: %s\n", u4->usri4_password);
191			printf("password_age: %d\n", u4->usri4_password_age);
192			printf("priv: %d\n", u4->usri4_priv);
193			printf("homedir: %s\n", u4->usri4_home_dir);
194			printf("comment: %s\n", u4->usri4_comment);
195			printf("flags: 0x%08x\n", u4->usri4_flags);
196			printf("script: %s\n", u4->usri4_script_path);
197			printf("auth flags: 0x%08x\n", u4->usri4_auth_flags);
198			printf("full name: %s\n", u4->usri4_full_name);
199			printf("user comment: %s\n", u4->usri4_usr_comment);
200			printf("user parameters: %s\n", u4->usri4_parms);
201			printf("workstations: %s\n", u4->usri4_workstations);
202			printf("last logon (seconds since jan. 1, 1970 GMT): %d\n",
203				u4->usri4_last_logon);
204			printf("last logoff (seconds since jan. 1, 1970 GMT): %d\n",
205				u4->usri4_last_logoff);
206			printf("account expires (seconds since jan. 1, 1970 GMT): %d\n",
207				u4->usri4_acct_expires);
208			printf("max storage: %d\n", u4->usri4_max_storage);
209			printf("units per week: %d\n", u4->usri4_units_per_week);
210			printf("logon hours:");
211			for (i=0; i<21; i++) {
212				printf(" %x", (uint8_t)u4->usri4_logon_hours[i]);
213			}
214			printf("\n");
215			printf("bad password count: %d\n", u4->usri4_bad_pw_count);
216			printf("logon count: %d\n", u4->usri4_num_logons);
217			printf("logon server: %s\n", u4->usri4_logon_server);
218			printf("country code: %d\n", u4->usri4_country_code);
219			printf("code page: %d\n", u4->usri4_code_page);
220			if (ConvertSidToStringSid(u4->usri4_user_sid,
221						  &sid_str)) {
222				printf("user_sid: %s\n", sid_str);
223				free(sid_str);
224			}
225			printf("primary group id: %d\n", u4->usri4_primary_group_id);
226			printf("profile: %s\n", u4->usri4_profile);
227			printf("home dir drive: %s\n", u4->usri4_home_dir_drive);
228			printf("password expired: %d\n", u4->usri4_password_expired);
229			break;
230		case 10:
231			u10 = (struct USER_INFO_10 *)buffer;
232			printf("name: %s\n", u10->usri10_name);
233			printf("comment: %s\n", u10->usri10_comment);
234			printf("usr_comment: %s\n", u10->usri10_usr_comment);
235			printf("full_name: %s\n", u10->usri10_full_name);
236			break;
237		case 11:
238			u11 = (struct USER_INFO_11 *)buffer;
239			printf("name: %s\n", u11->usri11_name);
240			printf("comment: %s\n", u11->usri11_comment);
241			printf("user comment: %s\n", u11->usri11_usr_comment);
242			printf("full name: %s\n", u11->usri11_full_name);
243			printf("priv: %d\n", u11->usri11_priv);
244			printf("auth flags: 0x%08x\n", u11->usri11_auth_flags);
245			printf("password_age: %d\n", u11->usri11_password_age);
246			printf("homedir: %s\n", u11->usri11_home_dir);
247			printf("user parameters: %s\n", u11->usri11_parms);
248			printf("last logon (seconds since jan. 1, 1970 GMT): %d\n",
249				u11->usri11_last_logon);
250			printf("last logoff (seconds since jan. 1, 1970 GMT): %d\n",
251				u11->usri11_last_logoff);
252			printf("bad password count: %d\n", u11->usri11_bad_pw_count);
253			printf("logon count: %d\n", u11->usri11_num_logons);
254			printf("logon server: %s\n", u11->usri11_logon_server);
255			printf("country code: %d\n", u11->usri11_country_code);
256			printf("workstations: %s\n", u11->usri11_workstations);
257			printf("max storage: %d\n", u11->usri11_max_storage);
258			printf("units per week: %d\n", u11->usri11_units_per_week);
259			printf("logon hours:");
260			for (i=0; i<21; i++) {
261				printf(" %x", (uint8_t)u11->usri11_logon_hours[i]);
262			}
263			printf("\n");
264			printf("code page: %d\n", u11->usri11_code_page);
265			break;
266		case 20:
267			u20 = (struct USER_INFO_20 *)buffer;
268			printf("name: %s\n", u20->usri20_name);
269			printf("comment: %s\n", u20->usri20_comment);
270			printf("flags: 0x%08x\n", u20->usri20_flags);
271			printf("rid: %d\n", u20->usri20_user_id);
272			break;
273		case 23:
274			u23 = (struct USER_INFO_23 *)buffer;
275			printf("name: %s\n", u23->usri23_name);
276			printf("comment: %s\n", u23->usri23_comment);
277			printf("flags: 0x%08x\n", u23->usri23_flags);
278			if (ConvertSidToStringSid(u23->usri23_user_sid,
279						  &sid_str)) {
280				printf("user_sid: %s\n", sid_str);
281				free(sid_str);
282			}
283			break;
284		default:
285			break;
286	}
287
288 out:
289	libnetapi_free(ctx);
290	poptFreeContext(pc);
291
292	return status;
293}
294