summaryrefslogtreecommitdiff
path: root/source3/rpc_client
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2018-08-31 17:36:19 +0200
committerJeremy Allison <jra@samba.org>2018-09-08 01:43:27 +0200
commita2aa7d6d65351a887b438d57ff509aaa05a28251 (patch)
treec3b34e8a332f1a3a604f058b16b0c9ac954d50b0 /source3/rpc_client
parent70169d4789fe8b2ee4efe5e88eeaa80e1a641b32 (diff)
downloadsamba-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.c29
-rw-r--r--source3/rpc_client/init_spoolss.c30
-rw-r--r--source3/rpc_client/init_spoolss.h3
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_ */