summaryrefslogtreecommitdiff
path: root/examples/libmsrpc/test/test_util.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/libmsrpc/test/test_util.c')
-rw-r--r--examples/libmsrpc/test/test_util.c408
1 files changed, 408 insertions, 0 deletions
diff --git a/examples/libmsrpc/test/test_util.c b/examples/libmsrpc/test/test_util.c
new file mode 100644
index 0000000000..81a9c9203d
--- /dev/null
+++ b/examples/libmsrpc/test/test_util.c
@@ -0,0 +1,408 @@
+/*some utility functions for the registry tests*/
+
+#include "libmsrpc.h"
+#include "test_util.h"
+
+
+void cactest_print_usage(char **argv) {
+ printf("Usage:\n");
+ printf(" %s server [-U username] [-W domain] [-P passwprd] [-N netbios_name]\n", argv[0]);
+}
+
+/*allocates memory for auth info and parses domain/user/server out of command line*/
+void cac_parse_cmd_line(int argc, char **argv, CacServerHandle *hnd) {
+ int i = 0;
+
+ ZERO_STRUCTP(hnd->username);
+ ZERO_STRUCTP(hnd->domain);
+ ZERO_STRUCTP(hnd->netbios_name);
+ ZERO_STRUCTP(hnd->password);
+
+ for(i = 1; i < argc; i++) {
+ if( strncmp(argv[i], "-U", sizeof(fstring)) == 0) {
+ strncpy(hnd->username, argv[i+1], sizeof(fstring));
+ i++;
+ }
+
+ else if(strncmp(argv[i], "-W", sizeof(fstring)) == 0) {
+ strncpy(hnd->domain, argv[i+1], sizeof(fstring));
+ i++;
+
+ }
+
+ else if(strncmp(argv[i], "-P", sizeof(fstring)) == 0) {
+ strncpy(hnd->password, argv[i+1], sizeof(fstring));
+ i++;
+
+ }
+
+ else if(strncmp(argv[i], "-N", sizeof(fstring)) == 0) {
+ strncpy(hnd->netbios_name, argv[i+1], sizeof(fstring));
+ i++;
+ }
+
+ else if(strncmp(argv[i], "-d", sizeof(fstring)) == 0) {
+ sscanf(argv[i+1], "%d", &hnd->debug);
+ i++;
+ }
+
+ else { /*assume this is the server name*/
+ strncpy(hnd->server, argv[i], sizeof(fstring));
+ }
+ }
+
+ if(!hnd->server) {
+ cactest_print_usage(argv);
+ cac_FreeHandle(hnd);
+ exit(-1);
+ }
+
+}
+
+void print_value(uint32 type, REG_VALUE_DATA *data) {
+ int i = 0;
+
+ switch(type) {
+ case REG_SZ:
+ printf(" Type: REG_SZ\n");
+ printf(" Value: %s\n", data->reg_sz);
+ break;
+ case REG_EXPAND_SZ:
+ printf(" Type: REG_EXPAND_SZ\n");
+ printf(" Value: %s\n", data->reg_expand_sz);
+ break;
+ case REG_MULTI_SZ:
+ printf(" Type: REG_MULTI_SZ\n");
+ printf(" Values: ");
+
+ for(i = 0; i < data->reg_multi_sz.num_strings; i++) {
+ printf(" %d: %s\n", i, data->reg_multi_sz.strings[i]);
+ }
+ break;
+ case REG_DWORD:
+ printf(" Type: REG_DWORD\n");
+ printf(" Value: %d\n", data->reg_dword);
+ break;
+ case REG_DWORD_BE:
+ printf(" Type: REG_DWORD_BE\n");
+ printf(" Value: 0x%x\n", data->reg_dword_be);
+ break;
+ case REG_BINARY:
+ printf(" Type: REG_BINARY\n");
+ break;
+ default:
+ printf(" Invalid type: %d\n", type);
+
+ }
+
+ printf("\n");
+
+}
+
+void cactest_readline(FILE *in, fstring line) {
+
+ int c;
+
+ c = fgetc(in);
+ if(c != '\n')
+ ungetc(c, in);
+
+ fgets(line, sizeof(fstring), in);
+
+ if(line[strlen(line) - 1] == '\n')
+ line[strlen(line) - 1] = '\0';
+
+}
+
+void cactest_GetAuthDataFn(const char * pServer,
+ const char * pShare,
+ char * pWorkgroup,
+ int maxLenWorkgroup,
+ char * pUsername,
+ int maxLenUsername,
+ char * pPassword,
+ int maxLenPassword)
+
+{
+ char temp[sizeof(fstring)];
+
+ static char authUsername[sizeof(fstring)];
+ static char authWorkgroup[sizeof(fstring)];
+ static char authPassword[sizeof(fstring)];
+ static char authSet = 0;
+
+ char *pass = NULL;
+
+ if (authSet)
+ {
+ strncpy(pWorkgroup, authWorkgroup, maxLenWorkgroup - 1);
+ strncpy(pUsername, authUsername, maxLenUsername - 1);
+ strncpy(pPassword, authPassword, maxLenPassword - 1);
+ }
+ else
+ {
+ if(pWorkgroup[0] != '\0') {
+ strncpy(authWorkgroup, pWorkgroup, maxLenWorkgroup - 1);
+ }
+ else {
+ d_printf("Domain: [%s] ", pWorkgroup);
+ fscanf(stdin, "%s", temp);
+
+ if (temp[0] != '\0')
+ {
+ strncpy(pWorkgroup, temp, maxLenWorkgroup - 1);
+ strncpy(authWorkgroup, temp, maxLenWorkgroup - 1);
+ }
+ }
+
+
+ if(pUsername[0] != '\0') {
+ strncpy(authUsername, pUsername, maxLenUsername - 1);
+ }
+ else {
+ d_printf("Username: [%s] ", pUsername);
+ fscanf(stdin, "%s", temp);
+
+ if (temp[strlen(temp) - 1] == '\n') /* A new line? */
+ {
+ temp[strlen(temp) - 1] = '\0';
+ }
+
+ if (temp[0] != '\0')
+ {
+ strncpy(pUsername, temp, maxLenUsername - 1);
+ strncpy(authUsername, pUsername, maxLenUsername - 1);
+ }
+ }
+ if(pPassword[0] != '\0') {
+ strncpy(authPassword, pPassword, maxLenPassword - 1);
+ }
+ else {
+ pass = getpass("Password: ");
+ if (pass)
+ fstrcpy(temp, pass);
+ if (temp[strlen(temp) - 1] == '\n') /* A new line? */
+ {
+ temp[strlen(temp) - 1] = '\0';
+ }
+ if (temp[0] != '\0')
+ {
+ strncpy(pPassword, temp, maxLenPassword - 1);
+ strncpy(authPassword, pPassword, maxLenPassword - 1);
+ }
+ }
+ authSet = 1;
+ }
+}
+
+void cactest_reg_input_val(TALLOC_CTX *mem_ctx, int *type, char **name, REG_VALUE_DATA *data) {
+ fstring tmp;
+ int i;
+
+ printf("Enter value name: \n");
+ cactest_readline(stdin, tmp);
+ *name = talloc_strdup(mem_ctx, tmp);
+
+ do {
+ printf("Enter type. %d = REG_SZ, %d = REG_DWORD, %d = REG_MULTI_SZ: ", REG_SZ, REG_DWORD, REG_MULTI_SZ);
+ scanf("%d", type);
+ } while(*type != REG_SZ && *type != REG_DWORD && *type != REG_MULTI_SZ);
+
+ switch(*type) {
+ case REG_SZ:
+ printf("Enter string:\n");
+ cactest_readline(stdin, tmp);
+
+ data->reg_sz = talloc_strdup(mem_ctx, tmp);
+ break;
+
+ case REG_DWORD:
+ printf("Enter dword: ");
+ scanf("%d", &data->reg_dword);
+ break;
+
+ case REG_MULTI_SZ:
+ printf("Enter number of strings: ");
+ scanf("%d", &data->reg_multi_sz.num_strings);
+
+ data->reg_multi_sz.strings = talloc_array(mem_ctx, char *, data->reg_multi_sz.num_strings);
+
+ for(i = 0; i < data->reg_multi_sz.num_strings; i++) {
+ printf("String %d: ", i+1);
+ cactest_readline(stdin, tmp);
+
+ data->reg_multi_sz.strings[i] = talloc_strdup(mem_ctx, tmp);
+ }
+ break;
+ }
+}
+
+void print_cac_user_info(CacUserInfo *info) {
+ printf(" User Name : %s\n", info->username);
+ printf(" Full Name : %s\n", info->full_name);
+ printf(" Home Dir : %s\n", info->home_dir);
+ printf(" Home Drive : %s\n", info->home_drive);
+ printf(" Profile Path : %s\n", info->profile_path);
+ printf(" Logon Script : %s\n", info->logon_script);
+ printf(" Description : %s\n", info->description);
+ printf(" Workstations : %s\n", info->workstations);
+ printf(" Remote Dial : %s\n", info->dial);
+
+ printf(" Logon Time : %s\n", http_timestring(info->logon_time));
+ printf(" Logoff Time : %s\n", http_timestring(info->logoff_time));
+ printf(" Kickoff Time : %s\n", http_timestring(info->kickoff_time));
+ printf(" Pass last set: %s\n", http_timestring(info->pass_last_set_time));
+ printf(" Pass can set : %s\n", http_timestring(info->pass_can_change_time));
+ printf(" Pass must set: %s\n", http_timestring(info->pass_must_change_time));
+
+ printf(" User RID : 0x%x\n", info->rid);
+ printf(" Group RID : 0x%x\n", info->group_rid);
+ printf(" ACB Mask : 0x%x\n", info->acb_mask);
+
+ printf(" Bad pwd count: %d\n", info->bad_passwd_count);
+ printf(" Logon Cuont : %d\n", info->logon_count);
+
+ printf(" NT Password : %s\n", info->nt_password);
+ printf(" LM Password : %s\n", info->lm_password);
+
+}
+
+void edit_readline(fstring line) {
+ fgets(line, sizeof(fstring), stdin);
+
+ if(line[strlen(line)-1] == '\n')
+ line[strlen(line)-1] = '\0';
+}
+void edit_cac_user_info(TALLOC_CTX *mem_ctx, CacUserInfo *info) {
+ fstring tmp;
+
+ printf(" User Name [%s]: ", info->username);
+ edit_readline(tmp);
+
+ if(tmp[0] != '\0')
+ info->username = talloc_strdup(mem_ctx, tmp);
+
+ printf(" Full Name [%s]: ", info->full_name);
+
+ edit_readline(tmp);
+ if(tmp[0] != '\0')
+ info->full_name = talloc_strdup(mem_ctx, tmp);
+
+ printf(" Description [%s]: ", info->description);
+ edit_readline(tmp);
+ if(tmp[0] != '\0')
+ info->description = talloc_strdup(mem_ctx, tmp);
+
+ printf(" Remote Dial [%s]: ", info->dial);
+ edit_readline(tmp);
+ if(tmp[0] != '\0')
+ info->dial = talloc_strdup(mem_ctx, tmp);
+
+ printf(" ACB Mask [0x%x]: ", info->acb_mask);
+ edit_readline(tmp);
+ if(tmp[0] != '\0')
+ sscanf(tmp, "%x", &info->acb_mask);
+
+ printf(" Must change pass at next logon? [y/N]: ");
+ edit_readline(tmp);
+
+ if(tmp[0] == 'y' || tmp[0] == 'Y')
+ info->pass_must_change= True;
+
+}
+
+void print_cac_group_info(CacGroupInfo *info) {
+ printf(" Group Name : %s\n", info->name);
+ printf(" Description : %s\n", info->description);
+ printf(" Num Members : %d\n", info->num_members);
+}
+
+void edit_cac_group_info(TALLOC_CTX *mem_ctx, CacGroupInfo *info) {
+ fstring tmp;
+
+ printf("Group Name [%s]: ", info->name);
+ edit_readline(tmp);
+ if(tmp[0] != '\0')
+ info->name = talloc_strdup(mem_ctx, tmp);
+
+ printf("Description [%s]: ", info->description);
+ edit_readline(tmp);
+ if(tmp[0] != '\0')
+ info->description = talloc_strdup(mem_ctx, tmp);
+}
+
+char *srv_role_str(uint32 role) {
+ switch(role) {
+ case ROLE_STANDALONE:
+ return "STANDALONE";
+ break;
+ case ROLE_DOMAIN_MEMBER:
+ return "DOMAIN_MEMBER";
+ break;
+ case ROLE_DOMAIN_BDC:
+ return "DOMAIN_BDC";
+ break;
+ case ROLE_DOMAIN_PDC:
+ return "DOMAIN_PDC";
+ break;
+ }
+
+ return "Invalid role!\n";
+}
+
+char *cactime_str(CacTime ctime, fstring tmp) {
+
+ snprintf(tmp, sizeof(fstring), "%u Days, %u Hours, %u Minutes, %u Seconds", ctime.days, ctime.hours, ctime.minutes, ctime.seconds);
+
+ return tmp;
+}
+
+void print_cac_domain_info(CacDomainInfo *info) {
+ fstring tmp;
+
+ printf(" Server Role : %s\n", srv_role_str(info->server_role));
+ printf(" Num Users : %d\n", info->num_users);
+ printf(" Num Domain Groups: %d\n", info->num_domain_groups);
+ printf(" Num Local Groups : %d\n", info->num_local_groups);
+ printf(" Comment : %s\n", info->comment);
+ printf(" Domain Name : %s\n", info->domain_name);
+ printf(" Server Name : %s\n", info->server_name);
+ printf(" Min. Pass. Length: %d\n", info->min_pass_length);
+ printf(" Password History : %d\n", info->pass_history);
+ printf("\n");
+ printf(" Passwords Expire In : %s\n", cactime_str(info->expire, tmp));
+ printf(" Passwords Can Change in: %s\n", cactime_str(info->min_pass_age, tmp));
+ printf(" Lockouts last : %s\n", cactime_str(info->lockout_duration, tmp));
+ printf(" Allowed Bad Attempts : %d\n", info->num_bad_attempts);
+}
+
+void print_cac_service(CacService svc) {
+ printf("\tService Name: %s\n", svc.service_name);
+ printf("\tDisplay Name: %s\n", svc.display_name);
+ print_service_status(svc.status);
+}
+
+void print_service_status(SERVICE_STATUS status) {
+ printf("\tStatus:\n");
+ printf("\t Type: 0x%x\n", status.type);
+ printf("\t State: 0x%x\n", status.state);
+ printf("\t Controls: 0x%x\n", status.controls_accepted);
+ printf("\t W32 Exit Code: 0x%x\n", status.win32_exit_code);
+ printf("\t SVC Exit Code: 0x%x\n", status.service_exit_code);
+ printf("\t Checkpoint: 0x%x\n", status.check_point);
+ printf("\t Wait Hint: 0x%x\n", status.wait_hint);
+ printf("\n");
+}
+
+void print_service_config(CacServiceConfig *config) {
+ printf("\tConfig:\n");
+ printf("\tType: 0x%x\n", config->type);
+ printf("\tStart Type: 0x%x\n", config->start_type);
+ printf("\tError config: 0x%x\n", config->error_control);
+ printf("\tExecutable Path: %s\n", config->exe_path);
+ printf("\tLoad Order Group: %s\n", config->load_order_group);
+ printf("\tTag ID: 0x%x\n", config->tag_id);
+ printf("\tDependencies: %s\n", config->dependencies);
+ printf("\tStart Name: %s\n", config->start_name);
+ printf("\tDisplay Name: %s\n", config->display_name);
+}