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

📄 cmd_spoolss.c

📁 samba-3.0.22.tar.gz 编译smb服务器的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	}	slprintf(servername, sizeof(servername)-1, "\\\\%s", cli->cli->desthost);	strupper_m(servername);	slprintf(printername, sizeof(servername)-1, "%s\\%s", servername, argv[1]);	fstrcpy(user, cli->user_name);	/* get a printer handle */	result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, "", 				PRINTER_ALL_ACCESS, servername,				user, &pol);					if (!W_ERROR_IS_OK(result))		goto done;	opened_hnd = True;	/* Get printer info */        result = rpccli_spoolss_getprinter(cli, mem_ctx, &pol, info_level, &ctr);        if (!W_ERROR_IS_OK(result))                goto done;	/* Modify the comment. */	init_unistr(&ctr.printers_2->comment, comment);	ctr.printers_2->devmode = NULL;	ctr.printers_2->secdesc = NULL;	result = rpccli_spoolss_setprinter(cli, mem_ctx, &pol, info_level, &ctr, 0);	if (W_ERROR_IS_OK(result))		printf("Success in setting comment.\n"); done:	if (opened_hnd)		rpccli_spoolss_close_printer(cli, mem_ctx, &pol);	return result;}/********************************************************************************************************************************************************/static WERROR cmd_spoolss_setprintername(struct rpc_pipe_client *cli,                                       TALLOC_CTX *mem_ctx,                                       int argc, const char **argv){	POLICY_HND 	pol;	WERROR		result;	uint32 		info_level = 2;	BOOL 		opened_hnd = False;	PRINTER_INFO_CTR ctr;	fstring 	printername,			servername,			user,			new_printername;	if (argc == 1 || argc > 3) {		printf("Usage: %s printername new_printername\n", argv[0]);		return WERR_OK;	}	/* Open a printer handle */	if (argc == 3) {		fstrcpy(new_printername, argv[2]);	}	slprintf(servername, sizeof(servername)-1, "\\\\%s", cli->cli->desthost);	strupper_m(servername);	slprintf(printername, sizeof(printername)-1, "%s\\%s", servername, argv[1]);	fstrcpy(user, cli->user_name);	/* get a printer handle */	result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, "", 				PRINTER_ALL_ACCESS, servername,				user, &pol);					if (!W_ERROR_IS_OK(result))		goto done;	opened_hnd = True;	/* Get printer info */        result = rpccli_spoolss_getprinter(cli, mem_ctx, &pol, info_level, &ctr);        if (!W_ERROR_IS_OK(result))                goto done;	/* Modify the printername. */	init_unistr(&ctr.printers_2->printername, new_printername);	ctr.printers_2->devmode = NULL;	ctr.printers_2->secdesc = NULL;	result = rpccli_spoolss_setprinter(cli, mem_ctx, &pol, info_level, &ctr, 0);	if (W_ERROR_IS_OK(result))		printf("Success in setting printername.\n"); done:	if (opened_hnd)		rpccli_spoolss_close_printer(cli, mem_ctx, &pol);	return result;}/********************************************************************************************************************************************************/static WERROR cmd_spoolss_getprinter(struct rpc_pipe_client *cli,                                       TALLOC_CTX *mem_ctx,                                       int argc, const char **argv){	POLICY_HND 	pol;	WERROR          result;	uint32 		info_level = 1;	BOOL 		opened_hnd = False;	PRINTER_INFO_CTR ctr;	fstring 	printername,			servername,			user;	if (argc == 1 || argc > 3) {		printf("Usage: %s <printername> [level]\n", argv[0]);		return WERR_OK;	}	/* Open a printer handle */	if (argc == 3) {		info_level = atoi(argv[2]);	}	slprintf(servername, sizeof(servername)-1, "\\\\%s", cli->cli->desthost);	strupper_m(servername);	slprintf(printername, sizeof(printername)-1, "%s\\%s", servername, argv[1]);	fstrcpy(user, cli->user_name);		/* get a printer handle */	result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, 					     "", MAXIMUM_ALLOWED_ACCESS, 					     servername, user, &pol);	if (!W_ERROR_IS_OK(result))		goto done; 	opened_hnd = True;	/* Get printer info */	result = rpccli_spoolss_getprinter(cli, mem_ctx, &pol, info_level, &ctr);	if (!W_ERROR_IS_OK(result))		goto done;	/* Display printer info */	switch (info_level) {	case 0: 		display_print_info_0(ctr.printers_0);		break;	case 1:		display_print_info_1(ctr.printers_1);		break;	case 2:		display_print_info_2(ctr.printers_2);		break;	case 3:		display_print_info_3(ctr.printers_3);		break;	case 7:		display_print_info_7(ctr.printers_7);		break;	default:		printf("unknown info level %d\n", info_level);		break;	} done: 	if (opened_hnd) 		rpccli_spoolss_close_printer(cli, mem_ctx, &pol);	return result;}/********************************************************************************************************************************************************/static void display_reg_value(REGISTRY_VALUE value){	pstring text;	switch(value.type) {	case REG_DWORD:		printf("%s: REG_DWORD: 0x%08x\n", value.valuename, 		       *((uint32 *) value.data_p));		break;	case REG_SZ:		rpcstr_pull(text, value.data_p, sizeof(text), value.size,			    STR_TERMINATE);		printf("%s: REG_SZ: %s\n", value.valuename, text);		break;	case REG_BINARY: {		char *hex = hex_encode(NULL, value.data_p, value.size);		size_t i, len;		printf("%s: REG_BINARY:", value.valuename);		len = strlen(hex);		for (i=0; i<len; i++) {			if (hex[i] == '\0') {				break;			}			if (i%40 == 0) {				putchar('\n');			}			putchar(hex[i]);		}		talloc_free(hex);		putchar('\n');		break;	}	case REG_MULTI_SZ: {		uint16 *curstr = (uint16 *) value.data_p;		uint8 *start = value.data_p;		printf("%s: REG_MULTI_SZ:\n", value.valuename);		while (((uint8 *) curstr < start + value.size)) {			rpcstr_pull(text, curstr, sizeof(text), -1, 				    STR_TERMINATE);			printf("  %s\n", *text != 0 ? text : "NULL");			curstr += strlen(text) + 1;		}	}	break;	default:		printf("%s: unknown type %d\n", value.valuename, value.type);	}	}/********************************************************************************************************************************************************/static WERROR cmd_spoolss_getprinterdata(struct rpc_pipe_client *cli,					   TALLOC_CTX *mem_ctx,					   int argc, const char **argv){	POLICY_HND 	pol;	WERROR          result;	BOOL 		opened_hnd = False;	fstring 	printername,			servername,			user;	const char *valuename;	REGISTRY_VALUE value;	if (argc != 3) {		printf("Usage: %s <printername> <valuename>\n", argv[0]);		printf("<printername> of . queries print server\n");		return WERR_OK;	}	valuename = argv[2];	/* Open a printer handle */	slprintf(servername, sizeof(servername)-1, "\\\\%s", cli->cli->desthost);	strupper_m(servername);	if (strncmp(argv[1], ".", sizeof(".")) == 0)		fstrcpy(printername, servername);	else		slprintf(printername, sizeof(servername)-1, "%s\\%s", 			  servername, argv[1]);	fstrcpy(user, cli->user_name);		/* get a printer handle */	result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, 					     "", MAXIMUM_ALLOWED_ACCESS, 					     servername, user, &pol);	if (!W_ERROR_IS_OK(result))		goto done; 	opened_hnd = True;	/* Get printer info */	result = rpccli_spoolss_getprinterdata(cli, mem_ctx, &pol, valuename, &value);	if (!W_ERROR_IS_OK(result))		goto done;	/* Display printer data */	fstrcpy(value.valuename, valuename);	display_reg_value(value);	 done: 	if (opened_hnd) 		rpccli_spoolss_close_printer(cli, mem_ctx, &pol);	return result;}/********************************************************************************************************************************************************/static WERROR cmd_spoolss_getprinterdataex(struct rpc_pipe_client *cli,					     TALLOC_CTX *mem_ctx,					     int argc, const char **argv){	POLICY_HND 	pol;	WERROR          result;	BOOL 		opened_hnd = False;	fstring 	printername,			servername,			user;	const char *valuename, *keyname;	REGISTRY_VALUE value;	if (argc != 4) {		printf("Usage: %s <printername> <keyname> <valuename>\n", 		       argv[0]);		printf("<printername> of . queries print server\n");		return WERR_OK;	}	valuename = argv[3];	keyname = argv[2];	/* Open a printer handle */	slprintf(servername, sizeof(servername)-1, "\\\\%s", cli->cli->desthost);	strupper_m(servername);	if (strncmp(argv[1], ".", sizeof(".")) == 0)		fstrcpy(printername, servername);	else		slprintf(printername, sizeof(printername)-1, "%s\\%s", 			  servername, argv[1]);	fstrcpy(user, cli->user_name);		/* get a printer handle */	result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, 					     "", MAXIMUM_ALLOWED_ACCESS, 					     servername, user, &pol);	if (!W_ERROR_IS_OK(result))		goto done; 	opened_hnd = True;	/* Get printer info */	result = rpccli_spoolss_getprinterdataex(cli, mem_ctx, &pol, keyname, 		valuename, &value);	if (!W_ERROR_IS_OK(result))		goto done;	/* Display printer data */	fstrcpy(value.valuename, valuename);	display_reg_value(value);	 done: 	if (opened_hnd) 		rpccli_spoolss_close_printer(cli, mem_ctx, &pol);	return result;}/********************************************************************************************************************************************************/static void display_print_driver_1(DRIVER_INFO_1 *i1){	fstring name;	if (i1 == NULL)		return;	rpcstr_pull(name, i1->name.buffer, sizeof(name), -1, STR_TERMINATE);	printf ("Printer Driver Info 1:\n");	printf ("\tDriver Name: [%s]\n\n", name);		return;}/********************************************************************************************************************************************************/static void display_print_driver_2(DRIVER_INFO_2 *i1){	fstring name;	fstring architecture;	fstring driverpath;	fstring datafile;	fstring configfile;	if (i1 == NULL)		return;	rpcstr_pull(name, i1->name.buffer, sizeof(name), -1, STR_TERMINATE);	rpcstr_pull(architecture, i1->architecture.buffer, sizeof(architecture), -1, STR_TERMINATE);	rpcstr_pull(driverpath, i1->driverpath.buffer, sizeof(driverpath), -1, STR_TERMINATE);	rpcstr_pull(datafile, i1->datafile.buffer, sizeof(datafile), -1, STR_TERMINATE);	rpcstr_pull(configfile, i1->configfile.buffer, sizeof(configfile), -1, STR_TERMINATE);	printf ("Printer Driver Info 2:\n");	printf ("\tVersion: [%x]\n", i1->version);	printf ("\tDriver Name: [%s]\n", name);	printf ("\tArchitecture: [%s]\n", architecture);	printf ("\tDriver Path: [%s]\n", driverpath);	printf ("\tDatafile: [%s]\n", datafile);	printf ("\tConfigfile: [%s]\n\n", configfile);	return;}/********************************************************************************************************************************************************/static void display_print_driver_3(DRIVER_INFO_3 *i1){	fstring name = "";	fstring architecture = "";	fstring driverpath = "";	fstring datafile = "";	fstring configfile = "";	fstring helpfile = "";	fstring dependentfiles = "";	fstring monitorname = "";	fstring defaultdatatype = "";		int length=0;	BOOL valid = True;		if (i1 == NULL)		return;	rpcstr_pull(name, i1->name.buffer, sizeof(name), -1, STR_TERMINATE);	rpcstr_pull(architecture, i1->architecture.buffer, sizeof(architecture), -1, STR_TERMINATE);	rpcstr_pull(driverpath, i1->driverpath.buffer, sizeof(driverpath), -1, STR_TERMINATE);	rpcstr_pull(datafile, i1->datafile.buffer, sizeof(datafile), -1, STR_TERMINATE);	rpcstr_pull(configfile, i1->configfile.buffer, sizeof(configfile), -1, STR_TERMINATE);	rpcstr_pull(helpfile, i1->helpfile.buffer, sizeof(helpfile), -1, STR_TERMINATE);	rpcstr_pull(monitorname, i1->monitorname.buffer, sizeof(monitorname), -1, STR_TERMINATE);	rpcstr_pull(defaultdatatype, i1->defaultdatatype.buffer, sizeof(defaultdatatype), -1, STR_TERMINATE);	printf ("Printer Driver Info 3:\n");	printf ("\tVersion: [%x]\n", i1->version);	printf ("\tDriver Name: [%s]\n",name);	printf ("\tArchitecture: [%s]\n", architecture);	printf ("\tDriver Path: [%s]\n", driverpath);	printf ("\tDatafile: [%s]\n", datafile);	printf ("\tConfigfile: [%s]\n", configfile);	printf ("\tHelpfile: [%s]\n\n", helpfile);	while (valid)	{		rpcstr_pull(dependentfiles, i1->dependentfiles+length, sizeof(dependentfiles), -1, STR_TERMINATE);				length+=strlen(dependentfiles)+1;				if (strlen(dependentfiles) > 0)		{			printf ("\tDependentfiles: [%s]\n", dependentfiles);		}		else		{			valid = False;		}	}		printf ("\n");	printf ("\tMonitorname: [%s]\n", monitorname);	printf ("\tDefaultdatatype: [%s]\n\n", defaultdatatype);	return;	}/********************************************************************************************************************************************************/static WERROR cmd_spoolss_getdriver(struct rpc_pipe_client *cli,                                       TALLOC_CTX *mem_ctx,                                      int argc, const char **argv){	POLICY_HND 	pol;	WERROR          werror;	uint32		info_level = 3;	BOOL 		opened_hnd = False;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -