📄 cmd_reg.c
字号:
/* open registry receive a policy handle */ res = res ? do_reg_connect(smb_cli, keyname, parent_name, &info->dom.reg_pol_connect) : False; if ((*val_name) != 0) { /* open an entry */ res3 = res ? do_reg_open_entry(smb_cli, &info->dom.reg_pol_connect, parent_name, 0x02000000, &parent_pol) : False; } else { memcpy(&parent_pol, &info->dom.reg_pol_connect, sizeof(parent_pol)); } /* delete an entry */ res4 = res3 ? do_reg_delete_val(smb_cli, &parent_pol, val_name) : False; /* flush the modified key */ res4 = res4 ? do_reg_flush_key(smb_cli, &parent_pol) : False; /* close the key handle */ res3 = res3 ? do_reg_close(smb_cli, &parent_pol) : False; /* close the registry handles */ res = res ? do_reg_close(smb_cli, &info->dom.reg_pol_connect) : False; /* close the session */ cli_nt_session_close(smb_cli); if (res && res3 && res4) { DEBUG(5,("cmd_reg_delete_val: query succeeded\n")); fprintf(out_hnd,"OK\n"); } else { DEBUG(5,("cmd_reg_delete_val: query failed\n")); }}/****************************************************************************nt registry delete key****************************************************************************/static void cmd_reg_delete_key(struct client_info *info){ BOOL res = True; BOOL res3 = True; BOOL res4 = True; POLICY_HND parent_pol; fstring 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_nr(NULL, full_keyname, NULL, sizeof(full_keyname))) { fprintf(out_hnd, "regdeletekey <key_name>\n"); return; } reg_get_subkey(full_keyname, parent_name, subkey_name); if (parent_name[0] == 0 || subkey_name[0] == 0) { fprintf(out_hnd, "invalid key name\n"); return; } /* open WINREG session. */ res = res ? cli_nt_session_open(smb_cli, PI_WINREG) : False; /* open registry receive a policy handle */ res = res ? do_reg_connect(smb_cli, parent_name, key_name, &info->dom.reg_pol_connect) : False; if ((*key_name) != 0) { /* open an entry */ res3 = res ? do_reg_open_entry(smb_cli, &info->dom.reg_pol_connect, key_name, 0x02000000, &parent_pol) : False; } else { memcpy(&parent_pol, &info->dom.reg_pol_connect, sizeof(parent_pol)); } /* create an entry */ res4 = res3 ? do_reg_delete_key(smb_cli, &parent_pol, subkey_name) : False; /* flush the modified key */ res4 = res4 ? do_reg_flush_key(smb_cli, &parent_pol) : False; /* close the key handle */ if ((*key_name) != 0) { res3 = res3 ? do_reg_close(smb_cli, &parent_pol) : False; } /* close the registry handles */ res = res ? do_reg_close(smb_cli, &info->dom.reg_pol_connect) : False; /* close the session */ cli_nt_session_close(smb_cli); if (res && res3 && res4) { DEBUG(5,("cmd_reg_delete_key: query succeeded\n")); fprintf(out_hnd,"OK\n"); } else { DEBUG(5,("cmd_reg_delete_key: query failed\n")); }}/****************************************************************************nt registry create key****************************************************************************/static void cmd_reg_create_key(struct client_info *info){ BOOL res = True; BOOL res3 = True; BOOL res4 = True; POLICY_HND parent_pol; POLICY_HND key_pol; fstring full_keyname; fstring parent_key; fstring parent_name; fstring key_name; fstring key_class; SEC_ACCESS sam_access; DEBUG(5, ("cmd_reg_create_key: smb_cli->fd:%d\n", smb_cli->fd)); if (!next_token_nr(NULL, full_keyname, NULL, sizeof(full_keyname))) { fprintf(out_hnd, "regcreate <key_name> [key_class]\n"); return; } reg_get_subkey(full_keyname, parent_key, key_name); if (parent_key[0] == 0 || key_name[0] == 0) { fprintf(out_hnd, "invalid key name\n"); return; } if (!next_token_nr(NULL, key_class, NULL, sizeof(key_class))) { memset(key_class, 0, sizeof(key_class)); } /* set access permissions */ sam_access.mask = SEC_RIGHTS_READ; /* open WINREG session. */ res = res ? cli_nt_session_open(smb_cli, PI_WINREG) : False; /* open registry receive a policy handle */ res = res ? do_reg_connect(smb_cli, parent_key, parent_name, &info->dom.reg_pol_connect) : False; if ((*parent_name) != 0) { /* open an entry */ res3 = res ? do_reg_open_entry(smb_cli, &info->dom.reg_pol_connect, parent_name, 0x02000000, &parent_pol) : False; } else { memcpy(&parent_pol, &info->dom.reg_pol_connect, sizeof(parent_pol)); } /* create an entry */ res4 = res3 ? do_reg_create_key(smb_cli, &parent_pol, key_name, key_class, &sam_access, &key_pol) : False; /* flush the modified key */ res4 = res4 ? do_reg_flush_key(smb_cli, &parent_pol) : False; /* close the key handle */ res4 = res4 ? do_reg_close(smb_cli, &key_pol) : False; /* close the key handle */ if ((*parent_name) != 0) { res3 = res3 ? do_reg_close(smb_cli, &parent_pol) : False; } /* close the registry handles */ res = res ? do_reg_close(smb_cli, &info->dom.reg_pol_connect) : False; /* close the session */ cli_nt_session_close(smb_cli); if (res && res3 && res4) { DEBUG(5,("cmd_reg_create_key: query succeeded\n")); fprintf(out_hnd,"OK\n"); } else { DEBUG(5,("cmd_reg_create_key: query failed\n")); }}/****************************************************************************nt registry security info****************************************************************************/static void cmd_reg_test_key_sec(struct client_info *info){ BOOL res = True; BOOL res3 = True; BOOL res4 = True; POLICY_HND key_pol; fstring full_keyname; fstring key_name; /* * security info */ uint32 sec_buf_size; SEC_DESC_BUF *psdb; DEBUG(5, ("cmd_reg_get_key_sec: smb_cli->fd:%d\n", smb_cli->fd)); if (!next_token_nr(NULL, full_keyname, NULL, sizeof(full_keyname))) { fprintf(out_hnd, "reggetsec <key_name>\n"); return; } /* open WINREG session. */ res = res ? cli_nt_session_open(smb_cli, PI_WINREG) : False; /* open registry receive a policy handle */ res = res ? do_reg_connect(smb_cli, full_keyname, key_name, &info->dom.reg_pol_connect) : False; if ((*key_name) != 0) { /* open an entry */ res3 = res ? do_reg_open_entry(smb_cli, &info->dom.reg_pol_connect, key_name, 0x02000000, &key_pol) : False; } else { memcpy(&key_pol, &info->dom.reg_pol_connect, sizeof(key_pol)); } /* open an entry */ res3 = res ? do_reg_open_entry(smb_cli, &info->dom.reg_pol_connect, key_name, 0x02000000, &key_pol) : False; /* query key sec info. first call sets sec_buf_size. */ sec_buf_size = 0; res4 = res3 ? do_reg_get_key_sec(smb_cli, &key_pol, &sec_buf_size, &psdb) : False; free_sec_desc_buf(&psdb); res4 = res4 ? do_reg_get_key_sec(smb_cli, &key_pol, &sec_buf_size, &psdb) : False; if (res4 && psdb->len > 0 && psdb->sec != NULL) { display_sec_desc(out_hnd, ACTION_HEADER , psdb->sec); display_sec_desc(out_hnd, ACTION_ENUMERATE, psdb->sec); display_sec_desc(out_hnd, ACTION_FOOTER , psdb->sec); res4 = res4 ? do_reg_set_key_sec(smb_cli, &key_pol, psdb) : False; } free_sec_desc_buf(&psdb); /* close the key handle */ if ((*key_name) != 0) { res3 = res3 ? do_reg_close(smb_cli, &key_pol) : False; } /* close the registry handles */ res = res ? do_reg_close(smb_cli, &info->dom.reg_pol_connect) : False; /* close the session */ cli_nt_session_close(smb_cli); if (res && res3 && res4) { DEBUG(5,("cmd_reg_test2: query succeeded\n")); fprintf(out_hnd,"Registry Test2\n"); } else { DEBUG(5,("cmd_reg_test2: query failed\n")); }}/****************************************************************************nt registry security info****************************************************************************/static void cmd_reg_get_key_sec(struct client_info *info){ BOOL res = True; BOOL res3 = True; BOOL res4 = True; POLICY_HND key_pol; fstring full_keyname; fstring key_name; /* * security info */ uint32 sec_buf_size; SEC_DESC_BUF *psdb; DEBUG(5, ("cmd_reg_get_key_sec: smb_cli->fd:%d\n", smb_cli->fd)); if (!next_token_nr(NULL, full_keyname, NULL, sizeof(full_keyname))) { fprintf(out_hnd, "reggetsec <key_name>\n"); return; } /* open WINREG session. */ res = res ? cli_nt_session_open(smb_cli, PI_WINREG) : False; /* open registry receive a policy handle */ res = res ? do_reg_connect(smb_cli, full_keyname, key_name, &info->dom.reg_pol_connect) : False; if ((*key_name) != 0) { /* open an entry */ res3 = res ? do_reg_open_entry(smb_cli, &info->dom.reg_pol_connect, key_name, 0x02000000, &key_pol) : False; } else { memcpy(&key_pol, &info->dom.reg_pol_connect, sizeof(key_pol)); } /* open an entry */ res3 = res ? do_reg_open_entry(smb_cli, &info->dom.reg_pol_connect, key_name, 0x02000000, &key_pol) : False; /* Get the size. */ sec_buf_size = 0; res4 = res3 ? do_reg_get_key_sec(smb_cli, &key_pol, &sec_buf_size, &psdb) : False; free_sec_desc_buf(&psdb); res4 = res4 ? do_reg_get_key_sec(smb_cli, &key_pol, &sec_buf_size, &psdb) : False; if (res4 && psdb->len > 0 && psdb->sec != NULL) { display_sec_desc(out_hnd, ACTION_HEADER , psdb->sec); display_sec_desc(out_hnd, ACTION_ENUMERATE, psdb->sec); display_sec_desc(out_hnd, ACTION_FOOTER , psdb->sec); } free_sec_desc_buf(&psdb); /* close the key handle */ if ((*key_name) != 0) { res3 = res3 ? do_reg_close(smb_cli, &key_pol) : False; } /* close the registry handles */ res = res ? do_reg_close(smb_cli, &info->dom.reg_pol_connect) : False; /* close the session */ cli_nt_session_close(smb_cli); if (res && res3 && res4) { DEBUG(5,("cmd_reg_get_key_sec: query succeeded\n")); } else { DEBUG(5,("cmd_reg_get_key_sec: query failed\n")); }}/****************************************************************************nt registry shutdown****************************************************************************/static NTSTATUS cmd_reg_shutdown(struct cli_state *cli, TALLOC_CTX *mem_ctx, int argc, const char **argv){ NTSTATUS result = NT_STATUS_UNSUCCESSFUL; fstring msg; uint32 timeout = 20; BOOL force = False; BOOL reboot = False; int opt; *msg = 0; optind = 0; /* TODO: test if this hack works on other systems too --simo */ while ((opt = getopt(argc, argv, "m:t:rf")) != EOF) { /*fprintf (stderr, "[%s]\n", argv[argc-1]);*/ switch (opt) { case 'm': fstrcpy(msg, optarg); /*fprintf (stderr, "[%s|%s]\n", optarg, msg);*/ break; case 't': timeout = atoi(optarg); /*fprintf (stderr, "[%s|%d]\n", optarg, timeout);*/ break; case 'r': reboot = True; break; case 'f': force = True; break; } } /* create an entry */ result = werror_to_ntstatus(cli_reg_shutdown(cli, mem_ctx, msg, timeout, reboot, force)); if (NT_STATUS_IS_OK(result)) DEBUG(5,("cmd_reg_shutdown: query succeeded\n")); else DEBUG(5,("cmd_reg_shutdown: query failed\n")); return result;}/****************************************************************************abort a shutdown****************************************************************************/static NTSTATUS cmd_reg_abort_shutdown(struct cli_state *cli, TALLOC_CTX *mem_ctx, int argc, const char **argv){ NTSTATUS result = NT_STATUS_UNSUCCESSFUL; result = werror_to_ntstatus(cli_reg_abort_shutdown(cli, mem_ctx)); if (NT_STATUS_IS_OK(result)) DEBUG(5,("cmd_reg_abort_shutdown: query succeeded\n")); else DEBUG(5,("cmd_reg_abort_shutdown: query failed\n")); return result;}#endif /* This whole file need to be rewritten for the cirrent rpcclient interface *//* List of commands exported by this module */struct cmd_set reg_commands[] = { { "REG" },#if 0 { "shutdown", RPC_RTYPE_NTSTATUS, cmd_reg_shutdown, NULL, PI_WINREG, "Remote Shutdown", "syntax: shutdown [-m message] [-t timeout] [-r] [-h] [-f] (-r == reboot, -h == halt, -f == force)" }, { "abortshutdown", RPC_RTYPE_NTSTATUS, cmd_reg_abort_shutdown, NULL, PI_WINREG, "Abort Shutdown", "syntax: abortshutdown" }, { "regenum", cmd_reg_enum, "Registry Enumeration", "<keyname>" }, { "regdeletekey", cmd_reg_delete_key, "Registry Key Delete", "<keyname>" }, { "regcreatekey", cmd_reg_create_key, "Registry Key Create", "<keyname> [keyclass]" }, { "regqueryval", cmd_reg_query_info, "Registry Value Query", "<valname>" }, { "regquerykey", cmd_reg_query_key, "Registry Key Query", "<keyname>" }, { "regdeleteval", cmd_reg_delete_val, "Registry Value Delete", "<valname>" }, { "regsetval", cmd_reg_set_val, "Registry Key Create", "<valname> <valtype> <value>" }, { "reggetsec", cmd_reg_get_key_sec, "Registry Key Security", "<keyname>" }, { "regtestsec", cmd_reg_test_key_sec, "Test Registry Key Security", "<keyname>" },#endif { NULL }};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -