dcesrv_spoolss.c

来自「samba最新软件」· C语言 代码 · 共 1,561 行 · 第 1/3 页

C
1,561
字号
*/static WERROR dcesrv_spoolss_ReplyOpenPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_ReplyOpenPrinter *r){	struct dcesrv_handle *handle;	handle = dcesrv_handle_new(dce_call->context, SPOOLSS_NOTIFY);	W_ERROR_HAVE_NO_MEMORY(handle);	/* For now, just return a handle */	*r->out.handle = handle->wire_handle;	return WERR_OK;}/*   spoolss_RouterReplyPrinter */static WERROR dcesrv_spoolss_RouterReplyPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_RouterReplyPrinter *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_ReplyClosePrinter */static WERROR dcesrv_spoolss_ReplyClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_ReplyClosePrinter *r){	struct dcesrv_handle *handle;		DCESRV_PULL_HANDLE_WERR(handle, r->in.handle, SPOOLSS_NOTIFY);	talloc_free(handle);	ZERO_STRUCTP(r->out.handle);	return WERR_OK;}/*   spoolss_AddPortEx */static WERROR dcesrv_spoolss_AddPortEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_AddPortEx *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_RouterFindFirstPrinterChangeNotification */static WERROR dcesrv_spoolss_RouterFindFirstPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_RouterFindFirstPrinterChangeNotification *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_SpoolerInit */static WERROR dcesrv_spoolss_SpoolerInit(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_SpoolerInit *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_ResetPrinterEx */static WERROR dcesrv_spoolss_ResetPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_ResetPrinterEx *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_RemoteFindFirstPrinterChangeNotifyEx */static WERROR dcesrv_spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_RemoteFindFirstPrinterChangeNotifyEx *r){	struct dcerpc_pipe *p;	struct dcerpc_binding *binding;	NTSTATUS status;	struct spoolss_ReplyOpenPrinter rop;	struct cli_credentials *creds;	struct policy_handle notify_handle;	DEBUG(2, ("Received RFFPCNex from %s\n", r->in.str));	/*	 * TODO: for now just open a connection to the client and drop it again	 *       to keep the w2k3 PrintServer 	 *       happy to allow to open the Add Printer GUI	 *       and the torture suite passing	 */	binding = talloc_zero(mem_ctx, struct dcerpc_binding);	binding->transport = NCACN_NP; 	if (strncmp(r->in.str, "\\\\", 2))		return WERR_INVALID_COMPUTERNAME;	binding->host = r->in.str+2;	creds = cli_credentials_init_anon(mem_ctx); /* FIXME: Use machine credentials instead ? */	status = dcerpc_pipe_connect_b(mem_ctx, &p, binding, &ndr_table_spoolss, 				       creds, dce_call->event_ctx,				       dce_call->conn->dce_ctx->lp_ctx);	if (NT_STATUS_IS_ERR(status)) {		DEBUG(0, ("unable to call back to %s\n", r->in.str));		return WERR_SERVER_UNAVAILABLE;	}	ZERO_STRUCT(rop);	rop.in.server_name = lp_netbios_name(dce_call->conn->dce_ctx->lp_ctx);	W_ERROR_HAVE_NO_MEMORY(rop.in.server_name);	rop.in.printer_local = 0;	rop.in.type = REG_NONE;	rop.in.unknown1 = 0;	rop.in.unknown2 = 0;	rop.out.handle = &notify_handle;	status = dcerpc_spoolss_ReplyOpenPrinter(p, mem_ctx, &rop);	if (NT_STATUS_IS_ERR(status)) {		DEBUG(0, ("unable to open remote printer %s\n", r->in.str));		return WERR_SERVER_UNAVAILABLE;	}	talloc_free(p);	return WERR_OK;}/*   spoolss_RouterRefreshPrinterChangeNotification */static WERROR dcesrv_spoolss_RouterRefreshPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_RouterRefreshPrinterChangeNotification *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_RemoteFindNextPrinterChangeNotifyEx */static WERROR dcesrv_spoolss_RemoteFindNextPrinterChangeNotifyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_RemoteFindNextPrinterChangeNotifyEx *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_44 */static WERROR dcesrv_spoolss_44(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_44 *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_OpenPrinterEx */static WERROR dcesrv_spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_OpenPrinterEx *r){	struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private, struct ntptr_context);	struct ntptr_GenericHandle *handle;	struct dcesrv_handle *h;	const char *server;	const char *object;	enum ntptr_HandleType type;	WERROR status;	ZERO_STRUCTP(r->out.handle);	status = dcesrv_spoolss_parse_printer_name(mem_ctx, r->in.printername, &server, &object, &type);	W_ERROR_NOT_OK_RETURN(status);	status = dcesrv_spoolss_check_server_name(dce_call, mem_ctx, server);	W_ERROR_NOT_OK_RETURN(status);	switch (type) {		case NTPTR_HANDLE_SERVER:			status = ntptr_OpenPrintServer(ntptr, mem_ctx, r, server, &handle);			W_ERROR_NOT_OK_RETURN(status);			break;		case NTPTR_HANDLE_PORT:			status = ntptr_OpenPort(ntptr, mem_ctx, r, object, &handle);			W_ERROR_NOT_OK_RETURN(status);			break;		case NTPTR_HANDLE_MONITOR:			status = ntptr_OpenMonitor(ntptr, mem_ctx, r, object, &handle);			W_ERROR_NOT_OK_RETURN(status);			break;		case NTPTR_HANDLE_PRINTER:			status = ntptr_OpenPrinter(ntptr, mem_ctx, r, object, &handle);			W_ERROR_NOT_OK_RETURN(status);			break;		default:			return WERR_FOOBAR;	}	h = dcesrv_handle_new(dce_call->context, handle->type);	W_ERROR_HAVE_NO_MEMORY(h);	h->data = talloc_steal(h, handle);	*r->out.handle	= h->wire_handle;	return WERR_OK;}/*   spoolss_AddPrinterEx */static WERROR dcesrv_spoolss_AddPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_AddPrinterEx *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_47 */static WERROR dcesrv_spoolss_47(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_47 *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_EnumPrinterData */static WERROR dcesrv_spoolss_EnumPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_EnumPrinterData *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_DeletePrinterData */static WERROR dcesrv_spoolss_DeletePrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_DeletePrinterData *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_4a */static WERROR dcesrv_spoolss_4a(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_4a *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_4b */static WERROR dcesrv_spoolss_4b(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_4b *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_4c */static WERROR dcesrv_spoolss_4c(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_4c *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_SetPrinterDataEx */static WERROR dcesrv_spoolss_SetPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_SetPrinterDataEx *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_GetPrinterDataEx */static WERROR dcesrv_spoolss_GetPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_GetPrinterDataEx *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_EnumPrinterDataEx */static WERROR dcesrv_spoolss_EnumPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_EnumPrinterDataEx *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_EnumPrinterKey */static WERROR dcesrv_spoolss_EnumPrinterKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_EnumPrinterKey *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_DeletePrinterDataEx */static WERROR dcesrv_spoolss_DeletePrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_DeletePrinterDataEx *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_DeletePrinterKey */static WERROR dcesrv_spoolss_DeletePrinterKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_DeletePrinterKey *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_53 */static WERROR dcesrv_spoolss_53(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_53 *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_DeletePrinterDriverEx */static WERROR dcesrv_spoolss_DeletePrinterDriverEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_DeletePrinterDriverEx *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_55 */static WERROR dcesrv_spoolss_55(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_55 *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_56 */static WERROR dcesrv_spoolss_56(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_56 *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_57 */static WERROR dcesrv_spoolss_57(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_57 *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_XcvData*/static WERROR dcesrv_spoolss_XcvData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_XcvData *r){	struct ntptr_GenericHandle *handle;	struct dcesrv_handle *h;	WERROR status;	DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY);	handle = talloc_get_type(h->data, struct ntptr_GenericHandle);	switch (handle->type) {		case NTPTR_HANDLE_SERVER:			status = ntptr_XcvDataPrintServer(handle, mem_ctx, r);			W_ERROR_NOT_OK_RETURN(status);			break;		case NTPTR_HANDLE_PRINTER:			status = ntptr_XcvDataPrinter(handle, mem_ctx, r);			W_ERROR_NOT_OK_RETURN(status);			break;		case NTPTR_HANDLE_PORT:			status = ntptr_XcvDataPort(handle, mem_ctx, r);			W_ERROR_NOT_OK_RETURN(status);			break;		case NTPTR_HANDLE_MONITOR:			status = ntptr_XcvDataMonitor(handle, mem_ctx, r);			W_ERROR_NOT_OK_RETURN(status);			break;		default:			return WERR_FOOBAR;	}	/* TODO: handle the buffer sizes here! */	return WERR_OK;}/*   spoolss_AddPrinterDriverEx */static WERROR dcesrv_spoolss_AddPrinterDriverEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_AddPrinterDriverEx *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_5a */static WERROR dcesrv_spoolss_5a(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_5a *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_5b */static WERROR dcesrv_spoolss_5b(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_5b *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_5c */static WERROR dcesrv_spoolss_5c(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_5c *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_5d */static WERROR dcesrv_spoolss_5d(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_5d *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_5e */static WERROR dcesrv_spoolss_5e(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_5e *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/*   spoolss_5f */static WERROR dcesrv_spoolss_5f(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,		       struct spoolss_5f *r){	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);}/* include the generated boilerplate */#include "librpc/gen_ndr/ndr_spoolss_s.c"

⌨️ 快捷键说明

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