diff options
author | Günther Deschner <gd@samba.org> | 2018-08-31 17:36:19 +0200 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2018-09-08 01:43:27 +0200 |
commit | a2aa7d6d65351a887b438d57ff509aaa05a28251 (patch) | |
tree | c3b34e8a332f1a3a604f058b16b0c9ac954d50b0 /source3/rpc_client | |
parent | 70169d4789fe8b2ee4efe5e88eeaa80e1a641b32 (diff) | |
download | samba-a2aa7d6d65351a887b438d57ff509aaa05a28251.tar.gz |
s3-spoolss: Make spoolss client os_major,os_minor and os_build configurable.
Similar to spoolss server options, make the client advertised OS version
values configurable to allow overriding the defaults provided to the print server.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13597
Signed-off-by: Guenther Deschner <gd@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'source3/rpc_client')
-rw-r--r-- | source3/rpc_client/cli_spoolss.c | 29 | ||||
-rw-r--r-- | source3/rpc_client/init_spoolss.c | 30 | ||||
-rw-r--r-- | source3/rpc_client/init_spoolss.h | 3 |
3 files changed, 46 insertions, 16 deletions
diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c index 7f6ed8e3c91..36ca806f531 100644 --- a/source3/rpc_client/cli_spoolss.c +++ b/source3/rpc_client/cli_spoolss.c @@ -28,6 +28,7 @@ #include "rpc_client/cli_spoolss.h" #include "auth/gensec/gensec.h" #include "auth/credentials/credentials.h" +#include "rpc_client/init_spoolss.h" /********************************************************************** convencience wrapper around rpccli_spoolss_OpenPrinterEx @@ -49,14 +50,12 @@ WERROR rpccli_spoolss_openprinter_ex(struct rpc_pipe_client *cli, ZERO_STRUCT(devmode_ctr); - level1.size = 28; - level1.client = talloc_asprintf(mem_ctx, "\\\\%s", lp_netbios_name()); - W_ERROR_HAVE_NO_MEMORY(level1.client); - level1.user = cli_credentials_get_username(creds); - level1.build = 1381; - level1.major = 2; - level1.minor = 0; - level1.processor = 0; + werror = spoolss_init_spoolss_UserLevel1(mem_ctx, + cli_credentials_get_username(creds), + &level1); + if (!W_ERROR_IS_OK(werror)) { + return werror; + } userlevel_ctr.level = 1; userlevel_ctr.user_info.level1 = &level1; @@ -229,14 +228,12 @@ WERROR rpccli_spoolss_addprinterex(struct rpc_pipe_client *cli, ZERO_STRUCT(devmode_ctr); ZERO_STRUCT(secdesc_ctr); - level1.size = 28; - level1.build = 1381; - level1.major = 2; - level1.minor = 0; - level1.processor = 0; - level1.client = talloc_asprintf(mem_ctx, "\\\\%s", lp_netbios_name()); - W_ERROR_HAVE_NO_MEMORY(level1.client); - level1.user = cli_credentials_get_username(creds); + result = spoolss_init_spoolss_UserLevel1(mem_ctx, + cli_credentials_get_username(creds), + &level1); + if (!W_ERROR_IS_OK(result)) { + return result; + } userlevel_ctr.level = 1; userlevel_ctr.user_info.level1 = &level1; diff --git a/source3/rpc_client/init_spoolss.c b/source3/rpc_client/init_spoolss.c index 9a4dab6d417..1996465ee9f 100644 --- a/source3/rpc_client/init_spoolss.c +++ b/source3/rpc_client/init_spoolss.c @@ -446,3 +446,33 @@ const char *spoolss_get_short_filesys_environment(const char *environment) return NULL; } } + +#define GLOBAL_SPOOLSS_CLIENT_OS_MAJOR_DEFAULT 2 +#define GLOBAL_SPOOLSS_CLIENT_OS_MINOR_DEFAULT 0 +#define GLOBAL_SPOOLSS_CLIENT_OS_BUILD_DEFAULT 1381 + +WERROR spoolss_init_spoolss_UserLevel1(TALLOC_CTX *mem_ctx, + const char *username, + struct spoolss_UserLevel1 *r) +{ + ZERO_STRUCTP(r); + + r->size = 28; + r->client = talloc_asprintf(mem_ctx, "\\\\%s", lp_netbios_name()); + W_ERROR_HAVE_NO_MEMORY(r->client); + r->user = talloc_strdup(mem_ctx, username); + W_ERROR_HAVE_NO_MEMORY(r->user); + r->processor = 0; + + r->major = lp_parm_int(GLOBAL_SECTION_SNUM, + "spoolss_client", "os_major", + GLOBAL_SPOOLSS_CLIENT_OS_MAJOR_DEFAULT); + r->minor = lp_parm_int(GLOBAL_SECTION_SNUM, + "spoolss_client", "os_minor", + GLOBAL_SPOOLSS_CLIENT_OS_MINOR_DEFAULT); + r->build = lp_parm_int(GLOBAL_SECTION_SNUM, + "spoolss_client", "os_build", + GLOBAL_SPOOLSS_CLIENT_OS_BUILD_DEFAULT); + + return WERR_OK; +} diff --git a/source3/rpc_client/init_spoolss.h b/source3/rpc_client/init_spoolss.h index 376eaefe914..062e37b97e4 100644 --- a/source3/rpc_client/init_spoolss.h +++ b/source3/rpc_client/init_spoolss.h @@ -48,5 +48,8 @@ WERROR spoolss_create_default_devmode(TALLOC_CTX *mem_ctx, WERROR spoolss_create_default_secdesc(TALLOC_CTX *mem_ctx, struct spoolss_security_descriptor **secdesc); const char *spoolss_get_short_filesys_environment(const char *environment); +WERROR spoolss_init_spoolss_UserLevel1(TALLOC_CTX *mem_ctx, + const char *username, + struct spoolss_UserLevel1 *r); #endif /* _RPC_CLIENT_INIT_SPOOLSS_H_ */ |