File samba-4.22-spoolss-subst-fix.patch of Package samba
diff --git a/source3/auth/auth_ntlmssp.c b/source3/auth/auth_ntlmssp.c
index 9d5d87646c9..c485515c906 100644
--- a/source3/auth/auth_ntlmssp.c
+++ b/source3/auth/auth_ntlmssp.c
@@ -171,7 +171,8 @@ struct tevent_req *auth3_check_password_send(
/* The client has given us its machine name (which we only get over NBT transport).
We need to possibly reload smb.conf if smb.conf includes depend on the machine name. */
- set_remote_machine_name(user_info->workstation_name, True);
+ DEBUG(2, ("user_info->workstation_name %s\n", user_info->workstation_name));
+ set_remote_machine_name(user_info->workstation_name, False);
nt_status = make_user_info_map(talloc_tos(),
&mapped_user_info,
diff --git a/source3/lib/substitute.c b/source3/lib/substitute.c
index 40eb15aee04..5fc8cf0de3c 100644
--- a/source3/lib/substitute.c
+++ b/source3/lib/substitute.c
@@ -90,7 +90,9 @@ bool set_remote_machine_name(const char *remote_name, bool perm)
static bool already_perm = False;
char tmp[MACHINE_NAME_SIZE];
+ DEBUG(2, ("set_remote_machine_name/perm=%s: %s\n", perm ? "true" : "false", remote_name));
if (already_perm) {
+ DEBUG(2, ("set_remote_machine_name/already_perm=true: %s\n", remote_machine));
return true;
}
diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c
index 73ab36051d1..f7b727556fd 100644
--- a/source3/rpc_server/spoolss/srv_spoolss_nt.c
+++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c
@@ -66,6 +66,7 @@
#include "printing/nt_printing_migrate_internal.h"
#include "lib/util/string_wrappers.h"
#include "lib/global_contexts.h"
+#include "source3/lib/substitute.h"
/* macros stolen from s4 spoolss server */
#define SPOOLSS_BUFFER_UNION(fn,info,level) \
@@ -1683,11 +1684,14 @@ WERROR _spoolss_OpenPrinterEx(struct pipes_struct *p,
{
struct dcesrv_call_state *dce_call = p->dce_call;
struct dcesrv_connection *dcesrv_conn = dce_call->conn;
+ const struct tsocket_address *local_address =
+ dcesrv_connection_get_local_address(dcesrv_conn);
const struct tsocket_address *remote_address =
dcesrv_connection_get_remote_address(dcesrv_conn);
struct auth_session_info *session_info =
dcesrv_call_session_info(dce_call);
int snum;
+ char *laddr;
char *raddr;
char *rhost;
struct printer_handle *Printer=NULL;
@@ -1871,6 +1875,13 @@ WERROR _spoolss_OpenPrinterEx(struct pipes_struct *p,
}
/* check smb.conf parameters and the sec_desc */
+ laddr = tsocket_address_inet_addr_string(local_address,
+ p->mem_ctx);
+ if (laddr == NULL) {
+ return WERR_NOT_ENOUGH_MEMORY;
+ }
+
+ DEBUG(2, ("remote:laddr = %s\n", laddr));
raddr = tsocket_address_inet_addr_string(remote_address,
p->mem_ctx);
if (raddr == NULL) {
@@ -1883,6 +1894,8 @@ WERROR _spoolss_OpenPrinterEx(struct pipes_struct *p,
if (rc < 0) {
return WERR_NOT_ENOUGH_MEMORY;
}
+ DEBUG(2, ("remote:raddr = %s\n", raddr));
+ DEBUG(2, ("remote:rhost = %s\n", rhost));
if (strequal(rhost, "UNKNOWN")) {
rhost = raddr;
}
@@ -1927,6 +1940,7 @@ WERROR _spoolss_OpenPrinterEx(struct pipes_struct *p,
p->msg_ctx,
lp_const_servicename(snum));
+ sub_set_socket_ids(raddr, rhost, laddr);
break;
default: