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

📄 cmd_spoolss.c

📁 samba-3.0.22.tar.gz 编译smb服务器的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	if (!W_ERROR_IS_OK(result)) {		printf("SetPrinter call failed!\n");		goto done;;	}	printf("Succesfully set %s to driver %s.\n", argv[1], argv[2]);done:	/* Cleanup */	if (opened_hnd)		rpccli_spoolss_close_printer(cli, mem_ctx, &pol);	return result;}/********************************************************************************************************************************************************/static WERROR cmd_spoolss_deletedriverex(struct rpc_pipe_client *cli,                                          TALLOC_CTX *mem_ctx,                                         int argc, const char **argv){	WERROR result, ret = WERR_UNKNOWN_PRINTER_DRIVER; 	int   i;	int vers = -1; 	const char *arch = NULL; 	/* parse the command arguements */	if (argc < 2 || argc > 4) {		printf ("Usage: %s <driver> [arch] [version]\n", argv[0]);		return WERR_OK;	}	if (argc >= 3)		arch = argv[2];	if (argc == 4)		vers = atoi (argv[3]);  	/* delete the driver for all architectures */	for (i=0; archi_table[i].long_archi; i++) {		if (arch &&  !strequal( archi_table[i].long_archi, arch)) 			continue;		if (vers >= 0 && archi_table[i].version != vers)			continue;		/* make the call to remove the driver */		result = rpccli_spoolss_deleteprinterdriverex(			cli, mem_ctx, archi_table[i].long_archi, argv[1], archi_table[i].version); 		if ( !W_ERROR_IS_OK(result) ) 		{			if ( !W_ERROR_EQUAL(result, WERR_UNKNOWN_PRINTER_DRIVER) ) {				printf ("Failed to remove driver %s for arch [%s] (version: %d): %s\n", 					argv[1], archi_table[i].long_archi, archi_table[i].version, dos_errstr(result));			}		} 		else 		{			printf ("Driver %s and files removed for arch [%s] (version: %d).\n", argv[1], 			archi_table[i].long_archi, archi_table[i].version);			ret = WERR_OK;		}	}  	return ret;}/********************************************************************************************************************************************************/static WERROR cmd_spoolss_deletedriver(struct rpc_pipe_client *cli,                                          TALLOC_CTX *mem_ctx,                                         int argc, const char **argv){	WERROR result = WERR_OK;	fstring			servername;	int			i;		/* parse the command arguements */	if (argc != 2) {		printf ("Usage: %s <driver>\n", argv[0]);		return WERR_OK;        }	slprintf(servername, sizeof(servername)-1, "\\\\%s", cli->cli->desthost);	strupper_m(servername);	/* delete the driver for all architectures */	for (i=0; archi_table[i].long_archi; i++) {		/* make the call to remove the driver */		result = rpccli_spoolss_deleteprinterdriver(			cli, mem_ctx, archi_table[i].long_archi, argv[1]);		if ( !W_ERROR_IS_OK(result) ) {			if ( !W_ERROR_EQUAL(result, WERR_UNKNOWN_PRINTER_DRIVER) ) {				printf ("Failed to remove driver %s for arch [%s] - error 0x%x!\n", 					argv[1], archi_table[i].long_archi, 					W_ERROR_V(result));			}		} else {			printf ("Driver %s removed for arch [%s].\n", argv[1], 				archi_table[i].long_archi);		}	}			return result;}/********************************************************************************************************************************************************/static WERROR cmd_spoolss_getprintprocdir(struct rpc_pipe_client *cli, 					    TALLOC_CTX *mem_ctx,					    int argc, const char **argv){	WERROR result;	char *servername = NULL, *environment = NULL;	fstring procdir;		/* parse the command arguements */	if (argc > 2) {		printf ("Usage: %s [environment]\n", argv[0]);		return WERR_OK;        }	if (asprintf(&servername, "\\\\%s", cli->cli->desthost) < 0)		return WERR_NOMEM;	strupper_m(servername);	if (asprintf(&environment, "%s", (argc == 2) ? argv[1] : 		     PRINTER_DRIVER_ARCHITECTURE) < 0) {		SAFE_FREE(servername);		return WERR_NOMEM;	}	result = rpccli_spoolss_getprintprocessordirectory(		cli, mem_ctx, servername, environment, procdir);	if (W_ERROR_IS_OK(result))		printf("%s\n", procdir);	SAFE_FREE(servername);	SAFE_FREE(environment);	return result;}/********************************************************************************************************************************************************/static WERROR cmd_spoolss_addform(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,				    int argc, const char **argv){	POLICY_HND handle;	WERROR werror;	char *servername = NULL, *printername = NULL;	FORM form;	BOOL got_handle = False;		/* Parse the command arguements */	if (argc != 3) {		printf ("Usage: %s <printer> <formname>\n", argv[0]);		return WERR_OK;        }		/* Get a printer handle */	asprintf(&servername, "\\\\%s", cli->cli->desthost);	strupper_m(servername);	asprintf(&printername, "%s\\%s", servername, argv[1]);	werror = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, "", 					     PRINTER_ALL_ACCESS, 					     servername, cli->user_name, &handle);	if (!W_ERROR_IS_OK(werror))		goto done;	got_handle = True;	/* Dummy up some values for the form data */	form.flags = FORM_USER;	form.size_x = form.size_y = 100;	form.left = 0;	form.top = 10;	form.right = 20;	form.bottom = 30;	init_unistr2(&form.name, argv[2], UNI_STR_TERMINATE);	/* Add the form */	werror = rpccli_spoolss_addform(cli, mem_ctx, &handle, 1, &form); done:	if (got_handle)		rpccli_spoolss_close_printer(cli, mem_ctx, &handle);	SAFE_FREE(servername);	SAFE_FREE(printername);	return werror;}/********************************************************************************************************************************************************/static WERROR cmd_spoolss_setform(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,				    int argc, const char **argv){	POLICY_HND handle;	WERROR werror;	char *servername = NULL, *printername = NULL;	FORM form;	BOOL got_handle = False;		/* Parse the command arguements */	if (argc != 3) {		printf ("Usage: %s <printer> <formname>\n", argv[0]);		return WERR_OK;        }		/* Get a printer handle */	asprintf(&servername, "\\\\%s", cli->cli->desthost);	strupper_m(servername);	asprintf(&printername, "%s\\%s", servername, argv[1]);	werror = rpccli_spoolss_open_printer_ex(		cli, mem_ctx, printername, "", MAXIMUM_ALLOWED_ACCESS, 		servername, cli->user_name, &handle);	if (!W_ERROR_IS_OK(werror))		goto done;	got_handle = True;	/* Dummy up some values for the form data */	form.flags = FORM_PRINTER;	form.size_x = form.size_y = 100;	form.left = 0;	form.top = 1000;	form.right = 2000;	form.bottom = 3000;	init_unistr2(&form.name, argv[2], UNI_STR_TERMINATE);	/* Set the form */	werror = rpccli_spoolss_setform(cli, mem_ctx, &handle, 1, argv[2], &form); done:	if (got_handle)		rpccli_spoolss_close_printer(cli, mem_ctx, &handle);	SAFE_FREE(servername);	SAFE_FREE(printername);	return werror;}/********************************************************************************************************************************************************/static const char *get_form_flag(int form_flag){	switch (form_flag) {	case FORM_USER:		return "FORM_USER";	case FORM_BUILTIN:		return "FORM_BUILTIN";	case FORM_PRINTER:		return "FORM_PRINTER";	default:		return "unknown";	}}/********************************************************************************************************************************************************/static void display_form(FORM_1 *form){	fstring form_name = "";	if (form->name.buffer)		rpcstr_pull(form_name, form->name.buffer,			    sizeof(form_name), -1, STR_TERMINATE);	printf("%s\n" \		"\tflag: %s (%d)\n" \		"\twidth: %d, length: %d\n" \		"\tleft: %d, right: %d, top: %d, bottom: %d\n\n", 		form_name, get_form_flag(form->flag), form->flag,		form->width, form->length, 		form->left, form->right, 		form->top, form->bottom);}/********************************************************************************************************************************************************/static WERROR cmd_spoolss_getform(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,				    int argc, const char **argv){	POLICY_HND handle;	WERROR werror;	char *servername = NULL, *printername = NULL;	FORM_1 form;	BOOL got_handle = False;		/* Parse the command arguements */	if (argc != 3) {		printf ("Usage: %s <printer> <formname>\n", argv[0]);		return WERR_OK;        }		/* Get a printer handle */	asprintf(&servername, "\\\\%s", cli->cli->desthost);	strupper_m(servername);	asprintf(&printername, "%s\\%s", servername, argv[1]);	werror = rpccli_spoolss_open_printer_ex(		cli, mem_ctx, printername, "", MAXIMUM_ALLOWED_ACCESS, 		servername, cli->user_name, &handle);	if (!W_ERROR_IS_OK(werror))		goto done;	got_handle = True;	/* Get the form */	werror = rpccli_spoolss_getform(cli, mem_ctx, &handle, argv[2], 1, &form);	if (!W_ERROR_IS_OK(werror))		goto done;	display_form(&form); done:	if (got_handle)		rpccli_spoolss_close_printer(cli, mem_ctx, &handle);	SAFE_FREE(servername);	SAFE_FREE(printername);	return werror;}/********************************************************************************************************************************************************/static WERROR cmd_spoolss_deleteform(struct rpc_pipe_client *cli, 				       TALLOC_CTX *mem_ctx, int argc, 				       const char **argv){	POLICY_HND handle;	WERROR werror;	char *servername = NULL, *printername = NULL;	BOOL got_handle = False;		/* Parse the command arguements */	if (argc != 3) {		printf ("Usage: %s <printer> <formname>\n", argv[0]);		return WERR_OK;        }		/* Get a printer handle */	asprintf(&servername, "\\\\%s", cli->cli->desthost);	strupper_m(servername);	asprintf(&printername, "%s\\%s", servername, argv[1]);	werror = rpccli_spoolss_open_printer_ex(		cli, mem_ctx, printername, "", MAXIMUM_ALLOWED_ACCESS, 		servername, cli->user_name, &handle);	if (!W_ERROR_IS_OK(werror))		goto done;	got_handle = True;	/* Delete the form */	werror = rpccli_spoolss_deleteform(cli, mem_ctx, &handle, argv[2]); done:	if (got_handle)		rpccli_spoolss_close_printer(cli, mem_ctx, &handle);	SAFE_FREE(servername);	SAFE_FREE(printername);	return werror;}/********************************************************************************************************************************************************/static WERROR cmd_spoolss_enum_forms(struct rpc_pipe_client *cli, 				       TALLOC_CTX *mem_ctx, int argc, 				       const char **argv){	POLICY_HND handle;	WERROR werror;	char *servername = NULL, *printername = NULL;	BOOL got_handle = False;	uint32 needed, offered, num_forms, level = 1, i;	FORM_1 *forms;		/* Parse the command arguements */	if (argc != 2) {		printf ("Usage: %s <printer>\n", argv[0]);		return WERR_OK;        }		/* Get a printer handle */	asprintf(&servername, "\\\\%s", cli->cli->desthost);	strupper_m(servername);	asprintf(&printername, "%s\\%s", servername, argv[1]);	werror = rpccli_spoolss_open_printer_ex(		cli, mem_ctx, printername, "", MAXIMUM_ALLOWED_ACCESS, 		servername, cli->user_name, &handle);	if (!W_ERROR_IS_OK(werror))		goto done;	got_handle = True;	/* Enumerate forms */	offered = needed = 0;	werror = rpccli_spoolss_enumforms(cli, mem_ctx, &handle, level, &num_forms, &forms);	if (!W_ERROR_IS_OK(werror))		goto done;	/* Display output */	for (i = 0; i < num_forms; i++) {		display_form(&forms[i]);	} done:	if (got_handle)		rpccli_spoolss_close_printer(cli, mem_ctx, &handle);	SAFE_FREE(servername);	SAFE_FREE(printername);	return werror;}/********************************************************************************************************************************************************/static WERROR cmd_spoolss_setprinterdata(struct rpc_pipe_client *cli,					    TALLOC_CTX *mem_ctx,					    int argc, const char **argv){	WERROR result;	fstring servername, printername, user;	POLICY_HND pol;	BOOL opened_hnd = False;	PRINTER_INFO_CTR ctr;	PRINTER_INFO_0 info;	REGISTRY_VALUE value;	/* parse the command arguements */

⌨️ 快捷键说明

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