• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src/router/samba-3.0.25b/examples/libmsrpc/test/
1/*some utility functions for the registry tests*/
2
3#include "libmsrpc.h"
4#include "test_util.h"
5
6
7void cactest_print_usage(char **argv) {
8   printf("Usage:\n");
9   printf("  %s server [-U username] [-W domain] [-P passwprd] [-N netbios_name]\n", argv[0]);
10}
11
12/*allocates memory for auth info and parses domain/user/server out of command line*/
13void cac_parse_cmd_line(int argc, char **argv, CacServerHandle *hnd) {
14   int i = 0;
15
16   ZERO_STRUCTP(hnd->username);
17   ZERO_STRUCTP(hnd->domain);
18   ZERO_STRUCTP(hnd->netbios_name);
19   ZERO_STRUCTP(hnd->password);
20
21   for(i = 1; i < argc; i++) {
22      if( strncmp(argv[i], "-U", sizeof(fstring)) == 0) {
23         strncpy(hnd->username, argv[i+1], sizeof(fstring));
24         i++;
25      }
26
27      else if(strncmp(argv[i], "-W", sizeof(fstring)) == 0) {
28         strncpy(hnd->domain, argv[i+1], sizeof(fstring));
29         i++;
30
31      }
32
33      else if(strncmp(argv[i], "-P", sizeof(fstring)) == 0) {
34         strncpy(hnd->password, argv[i+1], sizeof(fstring));
35         i++;
36
37      }
38
39      else if(strncmp(argv[i], "-N", sizeof(fstring)) == 0) {
40         strncpy(hnd->netbios_name, argv[i+1], sizeof(fstring));
41         i++;
42      }
43
44      else if(strncmp(argv[i], "-d", sizeof(fstring)) == 0) {
45         sscanf(argv[i+1], "%d", &hnd->debug);
46         i++;
47      }
48
49      else { /*assume this is the server name*/
50         strncpy(hnd->server, argv[i], sizeof(fstring));
51      }
52   }
53
54   if(!hnd->server) {
55      cactest_print_usage(argv);
56      cac_FreeHandle(hnd);
57      exit(-1);
58   }
59
60}
61
62void print_value(uint32 type, REG_VALUE_DATA *data) {
63   int i = 0;
64
65   switch(type) {
66      case REG_SZ:
67         printf(" Type: REG_SZ\n");
68         printf(" Value: %s\n", data->reg_sz);
69         break;
70      case REG_EXPAND_SZ:
71         printf(" Type: REG_EXPAND_SZ\n");
72         printf(" Value: %s\n", data->reg_expand_sz);
73         break;
74      case REG_MULTI_SZ:
75         printf(" Type: REG_MULTI_SZ\n");
76         printf(" Values: ");
77
78         for(i = 0; i < data->reg_multi_sz.num_strings; i++) {
79            printf("     %d: %s\n", i, data->reg_multi_sz.strings[i]);
80         }
81         break;
82      case REG_DWORD:
83         printf(" Type: REG_DWORD\n");
84         printf(" Value: %d\n", data->reg_dword);
85         break;
86      case REG_DWORD_BE:
87         printf(" Type: REG_DWORD_BE\n");
88         printf(" Value: 0x%x\n", data->reg_dword_be);
89         break;
90      case REG_BINARY:
91         printf(" Type: REG_BINARY\n");
92         break;
93      default:
94         printf(" Invalid type: %d\n", type);
95
96   }
97
98   printf("\n");
99
100}
101
102void cactest_readline(FILE *in, fstring line) {
103
104   int c;
105
106   c = fgetc(in);
107   if(c != '\n')
108      ungetc(c, in);
109
110   fgets(line, sizeof(fstring), in);
111
112   if(line[strlen(line) - 1] == '\n')
113      line[strlen(line) - 1] = '\0';
114
115}
116
117void cactest_GetAuthDataFn(const char * pServer,
118                 const char * pShare,
119                 char * pWorkgroup,
120                 int maxLenWorkgroup,
121                 char * pUsername,
122                 int maxLenUsername,
123                 char * pPassword,
124                 int maxLenPassword)
125
126{
127   char temp[sizeof(fstring)];
128
129   static char authUsername[sizeof(fstring)];
130   static char authWorkgroup[sizeof(fstring)];
131   static char authPassword[sizeof(fstring)];
132   static char authSet = 0;
133
134   char *pass = NULL;
135
136   if (authSet)
137   {
138      strncpy(pWorkgroup, authWorkgroup, maxLenWorkgroup - 1);
139      strncpy(pUsername, authUsername, maxLenUsername - 1);
140      strncpy(pPassword, authPassword, maxLenPassword - 1);
141   }
142   else
143   {
144      if(pWorkgroup[0] != '\0') {
145         strncpy(authWorkgroup, pWorkgroup, maxLenWorkgroup - 1);
146      }
147      else {
148         d_printf("Domain: [%s] ", pWorkgroup);
149         fscanf(stdin, "%s", temp);
150
151         if (temp[0] != '\0')
152         {
153            strncpy(pWorkgroup, temp, maxLenWorkgroup - 1);
154            strncpy(authWorkgroup, temp, maxLenWorkgroup - 1);
155         }
156      }
157
158
159      if(pUsername[0] != '\0') {
160         strncpy(authUsername, pUsername, maxLenUsername - 1);
161      }
162      else {
163         d_printf("Username: [%s] ", pUsername);
164         fscanf(stdin, "%s", temp);
165
166         if (temp[strlen(temp) - 1] == '\n') /* A new line? */
167         {
168            temp[strlen(temp) - 1] = '\0';
169         }
170
171         if (temp[0] != '\0')
172         {
173            strncpy(pUsername, temp, maxLenUsername - 1);
174            strncpy(authUsername, pUsername, maxLenUsername - 1);
175         }
176      }
177      if(pPassword[0] != '\0') {
178         strncpy(authPassword, pPassword, maxLenPassword - 1);
179      }
180      else {
181         pass = getpass("Password: ");
182         if (pass)
183            fstrcpy(temp, pass);
184         if (temp[strlen(temp) - 1] == '\n') /* A new line? */
185         {
186            temp[strlen(temp) - 1] = '\0';
187         }
188         if (temp[0] != '\0')
189         {
190            strncpy(pPassword, temp, maxLenPassword - 1);
191            strncpy(authPassword, pPassword, maxLenPassword - 1);
192         }
193      }
194      authSet = 1;
195   }
196}
197
198void cactest_reg_input_val(TALLOC_CTX *mem_ctx, int *type, char **name, REG_VALUE_DATA *data) {
199   fstring tmp;
200   int i;
201
202   printf("Enter value name: \n");
203   cactest_readline(stdin, tmp);
204   *name = talloc_strdup(mem_ctx, tmp);
205
206   do {
207      printf("Enter type. %d = REG_SZ, %d = REG_DWORD, %d = REG_MULTI_SZ: ", REG_SZ, REG_DWORD, REG_MULTI_SZ);
208      scanf("%d", type);
209   } while(*type != REG_SZ && *type != REG_DWORD && *type != REG_MULTI_SZ);
210
211   switch(*type) {
212      case REG_SZ:
213         printf("Enter string:\n");
214         cactest_readline(stdin, tmp);
215
216         data->reg_sz = talloc_strdup(mem_ctx, tmp);
217         break;
218
219      case REG_DWORD:
220         printf("Enter dword: ");
221         scanf("%d", &data->reg_dword);
222         break;
223
224      case REG_MULTI_SZ:
225         printf("Enter number of strings: ");
226         scanf("%d", &data->reg_multi_sz.num_strings);
227
228         data->reg_multi_sz.strings = talloc_array(mem_ctx, char *, data->reg_multi_sz.num_strings);
229
230         for(i = 0; i < data->reg_multi_sz.num_strings; i++) {
231            printf("String %d: ", i+1);
232            cactest_readline(stdin, tmp);
233
234            data->reg_multi_sz.strings[i] = talloc_strdup(mem_ctx, tmp);
235         }
236         break;
237   }
238}
239
240void print_cac_user_info(CacUserInfo *info) {
241   printf("	User Name    : %s\n", info->username);
242   printf("	Full Name    : %s\n", info->full_name);
243   printf("	Home Dir     : %s\n", info->home_dir);
244   printf("	Home Drive   : %s\n", info->home_drive);
245   printf("	Profile Path : %s\n", info->profile_path);
246   printf("	Logon Script : %s\n", info->logon_script);
247   printf("	Description  : %s\n", info->description);
248   printf("	Workstations : %s\n", info->workstations);
249   printf("	Remote Dial  : %s\n", info->dial);
250
251   printf("	Logon Time   : %s\n", http_timestring(info->logon_time));
252   printf("	Logoff Time  : %s\n", http_timestring(info->logoff_time));
253   printf("	Kickoff Time : %s\n", http_timestring(info->kickoff_time));
254   printf("	Pass last set: %s\n", http_timestring(info->pass_last_set_time));
255   printf("	Pass can set : %s\n", http_timestring(info->pass_can_change_time));
256   printf("	Pass must set: %s\n", http_timestring(info->pass_must_change_time));
257
258   printf("	User RID     : 0x%x\n", info->rid);
259   printf("	Group RID    : 0x%x\n", info->group_rid);
260   printf("	ACB Mask     : 0x%x\n", info->acb_mask);
261
262   printf("	Bad pwd count: %d\n", info->bad_passwd_count);
263   printf("	Logon Cuont  : %d\n", info->logon_count);
264
265   printf(" NT Password  : %s\n", info->nt_password);
266   printf(" LM Password  : %s\n", info->lm_password);
267
268}
269
270void edit_readline(fstring line) {
271   fgets(line, sizeof(fstring), stdin);
272
273   if(line[strlen(line)-1] == '\n')
274      line[strlen(line)-1] = '\0';
275}
276void edit_cac_user_info(TALLOC_CTX *mem_ctx, CacUserInfo *info) {
277   fstring tmp;
278
279   printf(" User Name [%s]: ", info->username);
280   edit_readline(tmp);
281
282   if(tmp[0] != '\0')
283      info->username = talloc_strdup(mem_ctx, tmp);
284
285   printf(" Full Name [%s]: ", info->full_name);
286
287   edit_readline(tmp);
288   if(tmp[0] != '\0')
289      info->full_name = talloc_strdup(mem_ctx, tmp);
290
291   printf(" Description [%s]: ", info->description);
292   edit_readline(tmp);
293   if(tmp[0] != '\0')
294      info->description = talloc_strdup(mem_ctx, tmp);
295
296   printf(" Remote Dial [%s]: ", info->dial);
297   edit_readline(tmp);
298   if(tmp[0] != '\0')
299      info->dial = talloc_strdup(mem_ctx, tmp);
300
301   printf(" ACB Mask [0x%x]: ", info->acb_mask);
302   edit_readline(tmp);
303   if(tmp[0] != '\0')
304      sscanf(tmp, "%x", &info->acb_mask);
305
306   printf(" Must change pass at next logon? [y/N]: ");
307   edit_readline(tmp);
308
309   if(tmp[0] == 'y' || tmp[0] == 'Y')
310      info->pass_must_change= True;
311
312}
313
314void print_cac_group_info(CacGroupInfo *info) {
315   printf(" Group Name  : %s\n", info->name);
316   printf(" Description : %s\n", info->description);
317   printf(" Num Members : %d\n", info->num_members);
318}
319
320void edit_cac_group_info(TALLOC_CTX *mem_ctx, CacGroupInfo *info) {
321   fstring tmp;
322
323   printf("Group Name [%s]: ", info->name);
324   edit_readline(tmp);
325   if(tmp[0] != '\0')
326      info->name = talloc_strdup(mem_ctx, tmp);
327
328   printf("Description [%s]: ", info->description);
329   edit_readline(tmp);
330   if(tmp[0] != '\0')
331      info->description = talloc_strdup(mem_ctx, tmp);
332}
333
334char *srv_role_str(uint32 role) {
335   switch(role) {
336      case ROLE_STANDALONE:
337         return "STANDALONE";
338         break;
339      case ROLE_DOMAIN_MEMBER:
340         return "DOMAIN_MEMBER";
341         break;
342      case ROLE_DOMAIN_BDC:
343         return "DOMAIN_BDC";
344         break;
345      case ROLE_DOMAIN_PDC:
346         return "DOMAIN_PDC";
347         break;
348   }
349
350   return "Invalid role!\n";
351}
352
353char *cactime_str(CacTime ctime, fstring tmp) {
354
355   snprintf(tmp, sizeof(fstring), "%u Days, %u Hours, %u Minutes, %u Seconds", ctime.days, ctime.hours, ctime.minutes, ctime.seconds);
356
357   return tmp;
358}
359
360void print_cac_domain_info(CacDomainInfo *info) {
361   fstring tmp;
362
363   printf("  Server Role      : %s\n", srv_role_str(info->server_role));
364   printf("  Num Users        : %d\n", info->num_users);
365   printf("  Num Domain Groups: %d\n", info->num_domain_groups);
366   printf("  Num Local Groups : %d\n", info->num_local_groups);
367   printf("  Comment          : %s\n", info->comment);
368   printf("  Domain Name      : %s\n", info->domain_name);
369   printf("  Server Name      : %s\n", info->server_name);
370   printf("  Min. Pass. Length: %d\n", info->min_pass_length);
371   printf("  Password History : %d\n", info->pass_history);
372   printf("\n");
373   printf("  Passwords Expire In    : %s\n", cactime_str(info->expire, tmp));
374   printf("  Passwords Can Change in: %s\n", cactime_str(info->min_pass_age, tmp));
375   printf("  Lockouts last          : %s\n", cactime_str(info->lockout_duration, tmp));
376   printf("  Allowed Bad Attempts   : %d\n", info->num_bad_attempts);
377}
378
379void print_cac_service(CacService svc) {
380   printf("\tService Name: %s\n", svc.service_name);
381   printf("\tDisplay Name: %s\n", svc.display_name);
382   print_service_status(svc.status);
383}
384
385void print_service_status(SERVICE_STATUS status) {
386   printf("\tStatus:\n");
387   printf("\t Type:          0x%x\n", status.type);
388   printf("\t State:         0x%x\n", status.state);
389   printf("\t Controls:      0x%x\n", status.controls_accepted);
390   printf("\t W32 Exit Code: 0x%x\n", status.win32_exit_code);
391   printf("\t SVC Exit Code: 0x%x\n", status.service_exit_code);
392   printf("\t Checkpoint:    0x%x\n", status.check_point);
393   printf("\t Wait Hint:     0x%x\n", status.wait_hint);
394   printf("\n");
395}
396
397void print_service_config(CacServiceConfig *config) {
398   printf("\tConfig:\n");
399   printf("\tType:             0x%x\n", config->type);
400   printf("\tStart Type:       0x%x\n", config->start_type);
401   printf("\tError config:     0x%x\n", config->error_control);
402   printf("\tExecutable Path:  %s\n", config->exe_path);
403   printf("\tLoad Order Group: %s\n", config->load_order_group);
404   printf("\tTag ID:           0x%x\n", config->tag_id);
405   printf("\tDependencies:     %s\n", config->dependencies);
406   printf("\tStart Name:       %s\n", config->start_name);
407   printf("\tDisplay Name:     %s\n", config->display_name);
408}
409