⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmd_reg.c

📁 samba-3.0.22.tar.gz 编译smb服务器的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	/* 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 + -