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 = ¬ify_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 + -
显示快捷键?