diff options
-rw-r--r-- | source3/rpcclient/cmd_reg.c | 149 | ||||
-rw-r--r-- | source3/rpcclient/rpcclient.c | 2 |
2 files changed, 91 insertions, 60 deletions
diff --git a/source3/rpcclient/cmd_reg.c b/source3/rpcclient/cmd_reg.c index 305440c3c5..962772fb8e 100644 --- a/source3/rpcclient/cmd_reg.c +++ b/source3/rpcclient/cmd_reg.c @@ -288,14 +288,16 @@ nt registry enum ****************************************************************************/ void cmd_reg_enum(struct client_info *info, int argc, char *argv[]) { - fstring full_keyname; + char *full_keyname; - if (!next_token(NULL, full_keyname, NULL, sizeof(full_keyname))) + if (argc < 2) { report(out_hnd, "regenum <key_name>\n"); return; } + full_keyname = argv[1]; + if (msrpc_reg_enum_key(smb_cli, full_keyname, reg_display_key, reg_display_key_info, @@ -316,7 +318,7 @@ void cmd_reg_query_info(struct client_info *info, int argc, char *argv[]) POLICY_HND key_pol; POLICY_HND pol_con; - fstring full_keyname; + char *full_keyname; fstring key_name; fstring keyname; fstring val_name; @@ -330,12 +332,14 @@ void cmd_reg_query_info(struct client_info *info, int argc, char *argv[]) DEBUG(5, ("cmd_reg_enum: smb_cli->fd:%d\n", smb_cli->fd)); - if (!next_token(NULL, full_keyname, NULL, sizeof(full_keyname))) + if (argc < 2) { report(out_hnd, "regvalinfo value_name\n"); return; } + full_keyname = argv[1]; + reg_get_subkey(full_keyname, keyname, val_name); if (keyname[0] == 0 || val_name[0] == 0) @@ -402,7 +406,7 @@ void cmd_reg_query_key(struct client_info *info, int argc, char *argv[]) POLICY_HND key_pol; POLICY_HND pol_con; - fstring full_keyname; + char *full_keyname; fstring key_name; /* @@ -422,12 +426,14 @@ void cmd_reg_query_key(struct client_info *info, int argc, char *argv[]) DEBUG(5, ("cmd_reg_enum: smb_cli->fd:%d\n", smb_cli->fd)); - if (!next_token(NULL, full_keyname, NULL, sizeof(full_keyname))) + if (argc < 2) { report(out_hnd, "regquery key_name\n"); return; } + full_keyname = argv[1]; + /* open WINREG session. */ res = res ? cli_nt_session_open(smb_cli, PIPE_WINREG, &fnum) : False; @@ -505,11 +511,10 @@ void cmd_reg_create_val(struct client_info *info, int argc, char *argv[]) POLICY_HND parent_pol; POLICY_HND pol_con; - fstring full_keyname; + char *full_keyname; fstring keyname; fstring parent_name; fstring val_name; - fstring tmp; uint32 val_type; BUFFER3 value; @@ -523,12 +528,18 @@ void cmd_reg_create_val(struct client_info *info, int argc, char *argv[]) DEBUG(5, ("cmd_reg_create_val: smb_cli->fd:%d\n", smb_cli->fd)); - if (!next_token(NULL, full_keyname, NULL, sizeof(full_keyname))) + if (argc < 4) { - report(out_hnd, "regcreate <val_name> <val_type> <val>\n"); + report(out_hnd, "regcreate <val_name> <val_type (1|3|4)> <val>\n"); + report(out_hnd, "(val_type 1=UNISTR, 3=BYTES, 4=DWORD supported\n"); return; } + argc--; + argv++; + + full_keyname = argv[0]; + reg_get_subkey(full_keyname, keyname, val_name); if (keyname[0] == 0 || val_name[0] == 0) @@ -537,13 +548,15 @@ void cmd_reg_create_val(struct client_info *info, int argc, char *argv[]) return; } - if (!next_token(NULL, tmp, NULL, sizeof(tmp))) + if (argc < 2) { - report(out_hnd, "regcreate <val_name> <val_type (1|4)> <val>\n"); return; } - val_type = atoi(tmp); + argc--; + argv++; + + val_type = atoi(argv[0]); if (val_type != 1 && val_type != 3 && val_type != 4) { @@ -551,36 +564,24 @@ void cmd_reg_create_val(struct client_info *info, int argc, char *argv[]) return; } - if (!next_token(NULL, tmp, NULL, sizeof(tmp))) - { - report(out_hnd, "regcreate <val_name> <val_type (1|4)> <val>\n"); - return; - } + argc--; + argv++; switch (val_type) { case 0x01: /* UNISTR */ { - make_buffer3_str(&value, tmp, strlen(tmp)+1); + make_buffer3_str(&value, argv[0], strlen(argv[0])+1); break; } case 0x03: /* BYTES */ { - make_buffer3_hex(&value, tmp); + make_buffer3_hex(&value, argv[0]); break; } case 0x04: /* DWORD */ { - uint32 tmp_val; - if (strnequal(tmp, "0x", 2)) - { - tmp_val = strtol(tmp, (char**)NULL, 16); - } - else - { - tmp_val = strtol(tmp, (char**)NULL, 10); - } - make_buffer3_uint32(&value, tmp_val); + make_buffer3_uint32(&value, get_number(argv[0])); break; } default: @@ -653,19 +654,21 @@ void cmd_reg_delete_val(struct client_info *info, int argc, char *argv[]) POLICY_HND parent_pol; POLICY_HND pol_con; - fstring full_keyname; + char *full_keyname; fstring keyname; fstring parent_name; fstring val_name; DEBUG(5, ("cmd_reg_delete_val: smb_cli->fd:%d\n", smb_cli->fd)); - if (!next_token(NULL, full_keyname, NULL, sizeof(full_keyname))) + if (argc < 2) { report(out_hnd, "regdelete <val_name>\n"); return; } + full_keyname = argv[1]; + reg_get_subkey(full_keyname, keyname, val_name); if (keyname[0] == 0 || val_name[0] == 0) @@ -730,19 +733,21 @@ void cmd_reg_delete_key(struct client_info *info, int argc, char *argv[]) POLICY_HND parent_pol; POLICY_HND pol_con; - fstring full_keyname; + char *full_keyname; fstring parent_name; fstring key_name; fstring subkey_name; DEBUG(5, ("cmd_reg_delete_key: smb_cli->fd:%d\n", smb_cli->fd)); - if (!next_token(NULL, full_keyname, NULL, sizeof(full_keyname))) + if (argc < 2) { report(out_hnd, "regdeletekey <key_name>\n"); return; } + full_keyname = argv[1]; + reg_get_subkey(full_keyname, parent_name, subkey_name); if (parent_name[0] == 0 || subkey_name[0] == 0) @@ -811,7 +816,7 @@ void cmd_reg_create_key(struct client_info *info, int argc, char *argv[]) POLICY_HND parent_pol; POLICY_HND key_pol; POLICY_HND pol_con; - fstring full_keyname; + char *full_keyname; fstring parent_key; fstring parent_name; fstring key_name; @@ -820,12 +825,14 @@ void cmd_reg_create_key(struct client_info *info, int argc, char *argv[]) DEBUG(5, ("cmd_reg_create_key: smb_cli->fd:%d\n", smb_cli->fd)); - if (!next_token(NULL, full_keyname, NULL, sizeof(full_keyname))) + if (argc < 2) { report(out_hnd, "regcreate <key_name> [key_class]\n"); return; } + full_keyname = argv[1]; + reg_get_subkey(full_keyname, parent_key, key_name); if (parent_key[0] == 0 || key_name[0] == 0) @@ -834,7 +841,11 @@ void cmd_reg_create_key(struct client_info *info, int argc, char *argv[]) return; } - if (!next_token(NULL, key_class, NULL, sizeof(key_class))) + if (argc < 3) + { + fstrcpy(key_class, argv[2]); + } + else { memset(key_class, 0, sizeof(key_class)); } @@ -905,7 +916,7 @@ void cmd_reg_test_key_sec(struct client_info *info, int argc, char *argv[]) POLICY_HND key_pol; POLICY_HND pol_con; - fstring full_keyname; + char *full_keyname; fstring key_name; /* @@ -917,12 +928,14 @@ void cmd_reg_test_key_sec(struct client_info *info, int argc, char *argv[]) DEBUG(5, ("cmd_reg_get_key_sec: smb_cli->fd:%d\n", smb_cli->fd)); - if (!next_token(NULL, full_keyname, NULL, sizeof(full_keyname))) + if (argc < 2) { report(out_hnd, "reggetsec <key_name>\n"); return; } + full_keyname = argv[1]; + /* open WINREG session. */ res = res ? cli_nt_session_open(smb_cli, PIPE_WINREG, &fnum) : False; @@ -1007,7 +1020,7 @@ void cmd_reg_get_key_sec(struct client_info *info, int argc, char *argv[]) POLICY_HND key_pol; POLICY_HND pol_con; - fstring full_keyname; + char *full_keyname; fstring key_name; /* @@ -1019,12 +1032,14 @@ void cmd_reg_get_key_sec(struct client_info *info, int argc, char *argv[]) DEBUG(5, ("cmd_reg_get_key_sec: smb_cli->fd:%d\n", smb_cli->fd)); - if (!next_token(NULL, full_keyname, NULL, sizeof(full_keyname))) + if (argc < 2) { report(out_hnd, "reggetsec <key_name>\n"); return; } + full_keyname = argv[1]; + /* open WINREG session. */ res = res ? cli_nt_session_open(smb_cli, PIPE_WINREG, &fnum) : False; @@ -1102,35 +1117,52 @@ void cmd_reg_shutdown(struct client_info *info, int argc, char *argv[]) BOOL res = True; fstring msg; - fstring tmp; uint32 timeout = 20; uint16 flgs = 0; + int opt; DEBUG(5, ("cmd_reg_shutdown: smb_cli->fd:%d\n", smb_cli->fd)); - while (next_token(NULL, tmp, NULL, sizeof(tmp))) + argc--; + argv++; + + while ((opt = getopt(argc, argv,"fim:t:r-")) != EOF) { - if (strequal(tmp, "-m")) + switch (opt) { - if (next_token(NULL, msg, NULL, sizeof(msg))) + case 'm': { - continue; + safe_strcpy(msg, optarg, sizeof(msg)-1); + break; } - } - else if (strequal(tmp, "-t")) - { - if (next_token(NULL, tmp, NULL, sizeof(tmp))) + case 't': { - timeout = atoi(tmp); - continue; + timeout = atoi(optarg); + break; + } + case 'r': + { + flgs |= 0x100; + break; + } + case 'f': + { + flgs |= 0x100; + break; + } + case '-': + { + if (strequal(optarg, "-reboot")) + { + flgs |= 0x100; + } + if (strequal(optarg, "-force-close")) + { + flgs |= 0x001; + } + break; } } - else if (strequal(tmp, "-r") || strequal(tmp, "--reboot")) - { - flgs = 0x100; - continue; - } - report(out_hnd,"shutdown [-m msg] [-t timeout] [-r or --reboot]\n"); } /* open WINREG session. */ @@ -1153,4 +1185,3 @@ void cmd_reg_shutdown(struct client_info *info, int argc, char *argv[]) report(out_hnd,"Failed\n"); } } - diff --git a/source3/rpcclient/rpcclient.c b/source3/rpcclient/rpcclient.c index 4888e720b1..33890749ea 100644 --- a/source3/rpcclient/rpcclient.c +++ b/source3/rpcclient/rpcclient.c @@ -200,7 +200,7 @@ commands[] = { "shutdown", cmd_reg_shutdown, - "[-m message] [-t timeout] [-r or --reboot] Server Shutdown", + "[-m message] [-t timeout] [-r or --reboot] [-f or --force-close] Remote Shutdown", {COMPL_NONE, COMPL_NONE} }, { |