The branch, master has been updated via a45107abca61c2c7f097c807818bc11fc5910fd4 (commit) via e11fa4cc331d28d71db4ab95d52ae39922f2502f (commit) from 1bb22b55274c6d9661acb8c051f8489287a9a2cd (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit a45107abca61c2c7f097c807818bc11fc5910fd4 Author: Günther Deschner <g...@samba.org> Date: Fri Nov 14 23:32:14 2008 +0100 s3-spoolss server: add _spoolss_ server stubs. Guenther commit e11fa4cc331d28d71db4ab95d52ae39922f2502f Author: Günther Deschner <g...@samba.org> Date: Fri Nov 14 21:30:59 2008 +0100 s3-spoolss: prepare to use generated spoolss. Guenther ----------------------------------------------------------------------- Summary of changes: source3/Makefile.in | 9 +- source3/configure.in | 6 +- source3/include/proto.h | 5 +- source3/include/rpc_client.h | 1 + source3/include/smb.h | 1 + source3/rpc_server/srv_spoolss.c | 47 +- source3/rpc_server/srv_spoolss_nt.c | 1056 +++++++++++++++++++++++++++++++++++ 7 files changed, 1093 insertions(+), 32 deletions(-) Changeset truncated at 500 lines: diff --git a/source3/Makefile.in b/source3/Makefile.in index 8e8932b..b67cbab 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -308,7 +308,8 @@ LIBNDR_GEN_OBJ = ../librpc/gen_ndr/ndr_wkssvc.o \ ../librpc/gen_ndr/ndr_xattr.o \ ../librpc/gen_ndr/ndr_epmapper.o \ ../librpc/gen_ndr/ndr_named_pipe_auth.o \ - ../librpc/gen_ndr/ndr_ntsvcs.o + ../librpc/gen_ndr/ndr_ntsvcs.o \ + $(LIBNDR_GEN_OBJ2) RPC_PARSE_OBJ0 = rpc_parse/parse_prs.o rpc_parse/parse_misc.o @@ -481,6 +482,7 @@ LIBMSRPC_GEN_OBJ = ../librpc/gen_ndr/cli_lsa.o \ ../librpc/gen_ndr/cli_ntsvcs.o \ ../librpc/gen_ndr/cli_epmapper.o \ ../librpc/gen_ndr/cli_drsuapi.o \ + ../librpc/gen_ndr/cli_spoolss.o \ $(LIBNDR_GEN_OBJ) \ $(RPCCLIENT_NDR_OBJ) @@ -567,7 +569,8 @@ RPC_NTSVCS_OBJ = rpc_server/srv_ntsvcs_nt.o \ RPC_DFS_OBJ = ../librpc/gen_ndr/srv_dfs.o rpc_server/srv_dfs_nt.o -RPC_SPOOLSS_OBJ = rpc_server/srv_spoolss.o rpc_server/srv_spoolss_nt.o +RPC_SPOOLSS_OBJ = rpc_server/srv_spoolss.o rpc_server/srv_spoolss_nt.o \ + ../librpc/gen_ndr/srv_spoolss.o RPC_EVENTLOG_OBJ = rpc_server/srv_eventlog_nt.o \ $(LIB_EVENTLOG_OBJ) ../librpc/gen_ndr/srv_eventlog.o @@ -2253,7 +2256,7 @@ bin/librpc_dsset...@shlibext@: $(BINARY_PREREQS) $(RPC_DSSETUP_OBJ) @echo "Linking $@" @$(SHLD_MODULE) $(RPC_DSSETUP_OBJ) -bin/librpc_spool...@shlibext@: $(BINARY_PREREQS) $(RPC_SPOOLSS_OBJ) +bin/librpc_spools...@shlibext@: $(BINARY_PREREQS) $(RPC_SPOOLSS_OBJ) @echo "Linking $@" @$(SHLD_MODULE) $(RPC_SPOOLSS_OBJ) diff --git a/source3/configure.in b/source3/configure.in index 306566f..431d330 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -414,7 +414,7 @@ AC_SUBST(DYNEXP) dnl Add modules that have to be built by default here dnl These have to be built static: -default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsarpc rpc_samr rpc_winreg rpc_initshutdown rpc_dssetup rpc_wkssvc rpc_svcctl rpc_ntsvcs rpc_netlogon rpc_netdfs rpc_srvsvc rpc_spoolss rpc_eventlog auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin auth_netlogond vfs_default nss_info_template" +default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsarpc rpc_samr rpc_winreg rpc_initshutdown rpc_dssetup rpc_wkssvc rpc_svcctl rpc_ntsvcs rpc_netlogon rpc_netdfs rpc_srvsvc rpc_spoolss2 rpc_eventlog auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin auth_netlogond vfs_default nss_info_template" dnl These are preferably build shared, and static if dlopen() is not available default_shared_modules="vfs_recycle vfs_audit vfs_extd_audit vfs_full_audit vfs_netatalk vfs_fake_perms vfs_default_quota vfs_readonly vfs_cap vfs_expand_msdfs vfs_shadow_copy vfs_shadow_copy2 charset_CP850 charset_CP437 auth_script vfs_readahead vfs_xattr_tdb vfs_streams_xattr vfs_streams_depot vfs_acl_xattr vfs_acl_tdb vfs_smb_traffic_analyzer" @@ -6296,7 +6296,7 @@ do done dnl Always build these modules static -MODULE_rpc_spoolss=STATIC +MODULE_rpc_spoolss2=STATIC MODULE_rpc_srvsvc=STATIC MODULE_idmap_tdb=STATIC MODULE_idmap_passdb=STATIC @@ -6339,7 +6339,7 @@ SMB_MODULE(rpc_ntsvcs, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs.$SHLIBEXT", RPC) SMB_MODULE(rpc_netlogon, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC) SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC) SMB_MODULE(rpc_srvsvc, \$(RPC_SVC_OBJ), "bin/librpc_svcsvc.$SHLIBEXT", RPC) -SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC) +SMB_MODULE(rpc_spoolss2, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss2.$SHLIBEXT", RPC) SMB_MODULE(rpc_eventlog, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog.$SHLIBEXT", RPC) SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC) SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_rpcecho.$SHLIBEXT", RPC) diff --git a/source3/include/proto.h b/source3/include/proto.h index 267ee74..baf0a4a 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -2267,6 +2267,7 @@ ADS_STATUS gp_get_machine_token(ADS_STRUCT *ads, #include "librpc/gen_ndr/srv_svcctl.h" #include "librpc/gen_ndr/srv_winreg.h" #include "librpc/gen_ndr/srv_wkssvc.h" +#include "librpc/gen_ndr/srv_spoolss.h" #include "librpc/ndr/libndr.h" @@ -6277,8 +6278,8 @@ void copy_id25_to_sam_passwd(struct samu *to, /* The following definitions come from rpc_server/srv_spoolss.c */ -void spoolss_get_pipe_fns( struct api_struct **fns, int *n_fns ); -NTSTATUS rpc_spoolss_init(void); +void spoolss2_get_pipe_fns( struct api_struct **fns, int *n_fns ); +NTSTATUS rpc_spoolss2_init(void); /* The following definitions come from rpc_server/srv_spoolss_nt.c */ diff --git a/source3/include/rpc_client.h b/source3/include/rpc_client.h index 61b861c..afa1889 100644 --- a/source3/include/rpc_client.h +++ b/source3/include/rpc_client.h @@ -37,6 +37,7 @@ #include "librpc/gen_ndr/cli_ntsvcs.h" #include "librpc/gen_ndr/cli_epmapper.h" #include "librpc/gen_ndr/cli_drsuapi.h" +#include "librpc/gen_ndr/cli_spoolss.h" #define prs_init_empty( _ps_, _ctx_, _io_ ) (void) prs_init((_ps_), 0, (_ctx_), (_io_)) diff --git a/source3/include/smb.h b/source3/include/smb.h index b441b34..eaf09dd 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -257,6 +257,7 @@ struct id_map { #include "librpc/gen_ndr/nbt.h" #include "librpc/gen_ndr/drsuapi.h" #include "librpc/gen_ndr/drsblobs.h" +#include "librpc/gen_ndr/spoolss.h" struct lsa_dom_info { bool valid; diff --git a/source3/rpc_server/srv_spoolss.c b/source3/rpc_server/srv_spoolss.c index d304502..c34fd8f 100644 --- a/source3/rpc_server/srv_spoolss.c +++ b/source3/rpc_server/srv_spoolss.c @@ -27,6 +27,27 @@ #undef DBGC_CLASS #define DBGC_CLASS DBGC_RPC_SRV +/******************************************************************* + ********************************************************************/ + +static bool proxy_spoolss_call(pipes_struct *p, uint8_t opnum) +{ + struct api_struct *fns; + int n_fns; + + spoolss2_get_pipe_fns(&fns, &n_fns); + + if (opnum >= n_fns) { + return false; + } + + if (fns[opnum].opnum != opnum) { + smb_panic("SPOOLSS function table not sorted"); + } + + return fns[opnum].fn(p); +} + /******************************************************************** * api_spoolss_open_printer_ex (rarely seen - older call) ********************************************************************/ @@ -1624,35 +1645,13 @@ static bool api_spoolss_xcvdataport(pipes_struct *p) {"SPOOLSS_XCVDATAPORT", SPOOLSS_XCVDATAPORT, api_spoolss_xcvdataport }, }; -void spoolss_get_pipe_fns( struct api_struct **fns, int *n_fns ) +void spoolss2_get_pipe_fns( struct api_struct **fns, int *n_fns ) { *fns = api_spoolss_cmds; *n_fns = sizeof(api_spoolss_cmds) / sizeof(struct api_struct); } -static const char * const spoolss_endpoint_strings[] = { - "ncacn_np:[\\pipe\\spoolss]", -}; - -static const struct ndr_interface_string_array spoolss_endpoints = { - .count = 1, - .names = spoolss_endpoint_strings -}; - -const struct ndr_interface_table ndr_table_spoolss = { - .name = "spoolss", - .syntax_id = { - { 0x12345678, 0x1234, 0xabcd, { 0xef, 0x00 }, - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab } }, 0x01 - }, - .helpstring = "Spooler SubSystem", - .num_calls = 0x60, - .calls = NULL, /* unused in s3 so far */ - .endpoints = &spoolss_endpoints, - .authservices = NULL /* unused in s3 so far */ -}; - -NTSTATUS rpc_spoolss_init(void) +NTSTATUS rpc_spoolss2_init(void) { return rpc_srv_register( SMB_RPC_INTERFACE_VERSION, "spoolss", "spoolss", diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index e61d343..9836e4e 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -9941,3 +9941,1059 @@ WERROR _spoolss_xcvdataport(pipes_struct *p, SPOOL_Q_XCVDATAPORT *q_u, SPOOL_R_X return WERR_INVALID_PRINT_MONITOR; } +/**************************************************************** + _spoolss_EnumPrinters +****************************************************************/ + +WERROR _spoolss_EnumPrinters(pipes_struct *p, + struct spoolss_EnumPrinters *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_OpenPrinter +****************************************************************/ + +WERROR _spoolss_OpenPrinter(pipes_struct *p, + struct spoolss_OpenPrinter *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_SetJob +****************************************************************/ + +WERROR _spoolss_SetJob(pipes_struct *p, + struct spoolss_SetJob *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_GetJob +****************************************************************/ + +WERROR _spoolss_GetJob(pipes_struct *p, + struct spoolss_GetJob *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_EnumJobs +****************************************************************/ + +WERROR _spoolss_EnumJobs(pipes_struct *p, + struct spoolss_EnumJobs *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_AddPrinter +****************************************************************/ + +WERROR _spoolss_AddPrinter(pipes_struct *p, + struct spoolss_AddPrinter *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_DeletePrinter +****************************************************************/ + +WERROR _spoolss_DeletePrinter(pipes_struct *p, + struct spoolss_DeletePrinter *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_SetPrinter +****************************************************************/ + +WERROR _spoolss_SetPrinter(pipes_struct *p, + struct spoolss_SetPrinter *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_GetPrinter +****************************************************************/ + +WERROR _spoolss_GetPrinter(pipes_struct *p, + struct spoolss_GetPrinter *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_AddPrinterDriver +****************************************************************/ + +WERROR _spoolss_AddPrinterDriver(pipes_struct *p, + struct spoolss_AddPrinterDriver *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_EnumPrinterDrivers +****************************************************************/ + +WERROR _spoolss_EnumPrinterDrivers(pipes_struct *p, + struct spoolss_EnumPrinterDrivers *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_GetPrinterDriver +****************************************************************/ + +WERROR _spoolss_GetPrinterDriver(pipes_struct *p, + struct spoolss_GetPrinterDriver *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_GetPrinterDriverDirectory +****************************************************************/ + +WERROR _spoolss_GetPrinterDriverDirectory(pipes_struct *p, + struct spoolss_GetPrinterDriverDirectory *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_DeletePrinterDriver +****************************************************************/ + +WERROR _spoolss_DeletePrinterDriver(pipes_struct *p, + struct spoolss_DeletePrinterDriver *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_AddPrintProcessor +****************************************************************/ + +WERROR _spoolss_AddPrintProcessor(pipes_struct *p, + struct spoolss_AddPrintProcessor *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_EnumPrintProcessors +****************************************************************/ + +WERROR _spoolss_EnumPrintProcessors(pipes_struct *p, + struct spoolss_EnumPrintProcessors *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_GetPrintProcessorDirectory +****************************************************************/ + +WERROR _spoolss_GetPrintProcessorDirectory(pipes_struct *p, + struct spoolss_GetPrintProcessorDirectory *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_StartDocPrinter +****************************************************************/ + +WERROR _spoolss_StartDocPrinter(pipes_struct *p, + struct spoolss_StartDocPrinter *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_StartPagePrinter +****************************************************************/ + +WERROR _spoolss_StartPagePrinter(pipes_struct *p, + struct spoolss_StartPagePrinter *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_WritePrinter +****************************************************************/ + +WERROR _spoolss_WritePrinter(pipes_struct *p, + struct spoolss_WritePrinter *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_EndPagePrinter +****************************************************************/ + +WERROR _spoolss_EndPagePrinter(pipes_struct *p, + struct spoolss_EndPagePrinter *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_AbortPrinter +****************************************************************/ + +WERROR _spoolss_AbortPrinter(pipes_struct *p, + struct spoolss_AbortPrinter *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_ReadPrinter +****************************************************************/ + +WERROR _spoolss_ReadPrinter(pipes_struct *p, + struct spoolss_ReadPrinter *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_EndDocPrinter +****************************************************************/ + +WERROR _spoolss_EndDocPrinter(pipes_struct *p, + struct spoolss_EndDocPrinter *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_AddJob +****************************************************************/ + +WERROR _spoolss_AddJob(pipes_struct *p, + struct spoolss_AddJob *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_ScheduleJob +****************************************************************/ + +WERROR _spoolss_ScheduleJob(pipes_struct *p, + struct spoolss_ScheduleJob *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_GetPrinterData +****************************************************************/ + +WERROR _spoolss_GetPrinterData(pipes_struct *p, + struct spoolss_GetPrinterData *r) +{ + p->rng_fault_state = true; + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** + _spoolss_SetPrinterData +****************************************************************/ + +WERROR _spoolss_SetPrinterData(pipes_struct *p, + struct spoolss_SetPrinterData *r) -- Samba Shared Repository