From 4b347a1b17549a3807d9448866fa37dcb293c4e7 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Fri, 18 Mar 2011 12:07:43 -0700 Subject: s3: Add "print notify backchannel" parameter to prevent us doing the reverse print notify connection. Autobuild-User: Jeremy Allison Autobuild-Date: Fri Mar 18 21:34:30 CET 2011 on sn-devel-104 --- .../smbdotconf/printing/printnotifybackchannel.xml | 18 ++++++++++++++++++ source3/include/proto.h | 1 + source3/param/loadparm.c | 12 ++++++++++++ source3/rpc_server/spoolss/srv_spoolss_nt.c | 6 ++++++ 4 files changed, 37 insertions(+) create mode 100644 docs-xml/smbdotconf/printing/printnotifybackchannel.xml diff --git a/docs-xml/smbdotconf/printing/printnotifybackchannel.xml b/docs-xml/smbdotconf/printing/printnotifybackchannel.xml new file mode 100644 index 0000000000..f895f9c70c --- /dev/null +++ b/docs-xml/smbdotconf/printing/printnotifybackchannel.xml @@ -0,0 +1,18 @@ + + +Windows print clients can update print queue status by expecting + the server to open a backchannel SMB connection to them. Due to + client firewall settings this can cause considerable timeouts + and will often fail, as there is no guarantee the client is even + running an SMB server. By setting this parameter to no + the Samba print server will not try to connect back to clients + and treat corresponding requests as if the connection back to + the client failed. The default setting of yes + causes smbd to attempt this connection. + +yes + diff --git a/source3/include/proto.h b/source3/include/proto.h index f944b2a58d..9edbfc5902 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -3199,6 +3199,7 @@ bool lp_guest_ok(int ); bool lp_guest_only(int ); bool lp_administrative_share(int ); bool lp_print_ok(int ); +bool lp_print_notify_backchannel(int ); bool lp_map_hidden(int ); bool lp_map_archive(int ); bool lp_store_dos_attributes(int ); diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 3314ad26ca..f9b8f70670 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -474,6 +474,7 @@ struct service { bool bAdministrative_share; bool bGuest_ok; bool bPrint_ok; + bool bPrintNotifyBackchannel; bool bMap_system; bool bMap_hidden; bool bMap_archive; @@ -618,6 +619,7 @@ static struct service sDefault = { False, /* bAdministrative_share */ False, /* bGuest_ok */ False, /* bPrint_ok */ + True, /* bPrintNotifyBackchannel */ False, /* bMap_system */ False, /* bMap_hidden */ True, /* bMap_archive */ @@ -2712,6 +2714,15 @@ static struct parm_struct parm_table[] = { .enum_list = NULL, .flags = FLAG_ADVANCED | FLAG_PRINT, }, + { + .label = "print notify backchannel", + .type = P_BOOL, + .p_class = P_LOCAL, + .ptr = &sDefault.bPrintNotifyBackchannel, + .special = NULL, + .enum_list = NULL, + .flags = FLAG_ADVANCED, + }, { .label = "print ok", .type = P_BOOL, @@ -5918,6 +5929,7 @@ FN_LOCAL_BOOL(lp_guest_ok, bGuest_ok) FN_LOCAL_BOOL(lp_guest_only, bGuest_only) FN_LOCAL_BOOL(lp_administrative_share, bAdministrative_share) FN_LOCAL_BOOL(lp_print_ok, bPrint_ok) +FN_LOCAL_BOOL(lp_print_notify_backchannel, bPrintNotifyBackchannel) FN_LOCAL_BOOL(lp_map_hidden, bMap_hidden) FN_LOCAL_BOOL(lp_map_archive, bMap_archive) FN_LOCAL_BOOL(lp_store_dos_attributes, bStoreDosAttributes) diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c index 3026a889e6..030324c085 100644 --- a/source3/rpc_server/spoolss/srv_spoolss_nt.c +++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c @@ -2736,6 +2736,12 @@ WERROR _spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct pipes_struct *p, DEBUG(10,("_spoolss_RemoteFindFirstPrinterChangeNotifyEx: " "client_address is %s\n", p->client_id->addr)); + if (!lp_print_notify_backchannel(snum)) { + DEBUG(10, ("_spoolss_RemoteFindFirstPrinterChangeNotifyEx: " + "backchannel disabled\n")); + return WERR_SERVER_UNAVAILABLE; + } + if (!interpret_string_addr(&client_ss, p->client_id->addr, AI_NUMERICHOST)) { return WERR_SERVER_UNAVAILABLE; -- cgit