1--- a/source3/rpc_server/rpc_ep_setup.c 2+++ b/source3/rpc_server/rpc_ep_setup.c 3@@ -1110,6 +1110,10 @@ bool dcesrv_ep_setup(struct tevent_conte 4 "rpc_server", 5 "spoolss", 6 "embedded"); 7+#ifndef PRINTER_SUPPORT 8+ if (1) { 9+ } else 10+#endif 11 if (StrCaseCmp(rpcsrv_type, "embedded") == 0) { 12 spoolss_cb.init = spoolss_init_cb; 13 spoolss_cb.shutdown = spoolss_shutdown_cb; 14--- a/source3/rpcclient/rpcclient.c 15+++ b/source3/rpcclient/rpcclient.c 16@@ -624,7 +624,9 @@ static struct cmd_set *rpcclient_command 17 lsarpc_commands, 18 ds_commands, 19 samr_commands, 20+#ifdef PRINTER_SUPPORT 21 spoolss_commands, 22+#endif 23 netlogon_commands, 24 srvsvc_commands, 25 dfs_commands, 26--- a/source3/printing/spoolssd.c 27+++ b/source3/printing/spoolssd.c 28@@ -165,6 +165,10 @@ void start_spoolssd(struct tevent_contex 29 NTSTATUS status; 30 int ret; 31 32+#ifndef PRINTER_SUPPORT 33+ return; 34+#endif 35+ 36 DEBUG(1, ("Forking SPOOLSS Daemon\n")); 37 38 pid = sys_fork(); 39--- a/source3/utils/net_rpc.c 40+++ b/source3/utils/net_rpc.c 41@@ -7841,6 +7841,10 @@ int net_rpc_printer(struct net_context * 42 {NULL, NULL, 0, NULL, NULL} 43 }; 44 45+#ifndef PRINTER_SUPPORT 46+ return 0; 47+#endif 48+ 49 if (argc == 0) { 50 if (c->display_usage) { 51 d_printf(_("Usage:\n")); 52--- a/source3/smbd/reply.c 53+++ b/source3/smbd/reply.c 54@@ -5208,7 +5208,11 @@ void reply_printopen(struct smb_request 55 return; 56 } 57 58- if (!CAN_PRINT(conn)) { 59+ 60+#ifdef PRINTER_SUPPORT 61+ if (!CAN_PRINT(conn)) 62+#endif 63+ { 64 reply_nterror(req, NT_STATUS_ACCESS_DENIED); 65 END_PROFILE(SMBsplopen); 66 return; 67@@ -5314,7 +5318,10 @@ void reply_printqueue(struct smb_request 68 is really quite gross and only worked when there was only 69 one printer - I think we should now only accept it if they 70 get it right (tridge) */ 71- if (!CAN_PRINT(conn)) { 72+#ifdef PRINTER_SUPPORT 73+ if (!CAN_PRINT(conn)) 74+#endif 75+ { 76 reply_nterror(req, NT_STATUS_ACCESS_DENIED); 77 END_PROFILE(SMBsplretq); 78 return; 79--- a/source3/smbd/lanman.c 80+++ b/source3/smbd/lanman.c 81@@ -784,6 +784,10 @@ static bool api_DosPrintQGetInfo(struct 82 union spoolss_JobInfo *job_info = NULL; 83 union spoolss_PrinterInfo printer_info; 84 85+#ifndef PRINTER_SUPPORT 86+ return False; 87+#endif 88+ 89 if (!str1 || !str2 || !p) { 90 return False; 91 } 92@@ -999,6 +1003,10 @@ static bool api_DosPrintQEnum(struct smb 93 union spoolss_DriverInfo *driver_info; 94 union spoolss_JobInfo **job_info; 95 96+#ifndef PRINTER_SUPPORT 97+ return False; 98+#endif 99+ 100 if (!param_format || !output_format1 || !p) { 101 return False; 102 } 103@@ -3105,6 +3113,10 @@ static bool api_RDosPrintJobDel(struct s 104 struct spoolss_DevmodeContainer devmode_ctr; 105 enum spoolss_JobControl command; 106 107+#ifndef PRINTER_SUPPORT 108+ return False; 109+#endif 110+ 111 if (!str1 || !str2 || !p) { 112 return False; 113 } 114@@ -3238,6 +3250,10 @@ static bool api_WPrintQueueCtrl(struct s 115 struct sec_desc_buf secdesc_ctr; 116 enum spoolss_PrinterControl command; 117 118+#ifndef PRINTER_SUPPORT 119+ return False; 120+#endif 121+ 122 if (!str1 || !str2 || !QueueName) { 123 return False; 124 } 125@@ -3404,6 +3420,10 @@ static bool api_PrintJobInfo(struct smbd 126 union spoolss_JobInfo info; 127 struct spoolss_SetJobInfo1 info1; 128 129+#ifndef PRINTER_SUPPORT 130+ return False; 131+#endif 132+ 133 if (!str1 || !str2 || !p) { 134 return False; 135 } 136@@ -4547,6 +4567,10 @@ static bool api_WPrintJobGetInfo(struct 137 struct spoolss_DevmodeContainer devmode_ctr; 138 union spoolss_JobInfo info; 139 140+#ifndef PRINTER_SUPPORT 141+ return False; 142+#endif 143+ 144 if (!str1 || !str2 || !p) { 145 return False; 146 } 147@@ -4685,6 +4709,10 @@ static bool api_WPrintJobEnumerate(struc 148 uint32_t count = 0; 149 union spoolss_JobInfo *info; 150 151+#ifndef PRINTER_SUPPORT 152+ return False; 153+#endif 154+ 155 if (!str1 || !str2 || !p) { 156 return False; 157 } 158@@ -4890,6 +4918,10 @@ static bool api_WPrintDestGetInfo(struct 159 struct spoolss_DevmodeContainer devmode_ctr; 160 union spoolss_PrinterInfo info; 161 162+#ifndef PRINTER_SUPPORT 163+ return False; 164+#endif 165+ 166 if (!str1 || !str2 || !p) { 167 return False; 168 } 169@@ -5026,6 +5058,10 @@ static bool api_WPrintDestEnum(struct sm 170 union spoolss_PrinterInfo *info; 171 uint32_t count; 172 173+#ifndef PRINTER_SUPPORT 174+ return False; 175+#endif 176+ 177 if (!str1 || !str2 || !p) { 178 return False; 179 } 180@@ -5129,6 +5165,10 @@ static bool api_WPrintDriverEnum(struct 181 int succnt; 182 struct pack_desc desc; 183 184+#ifndef PRINTER_SUPPORT 185+ return False; 186+#endif 187+ 188 if (!str1 || !str2 || !p) { 189 return False; 190 } 191@@ -5193,6 +5233,10 @@ static bool api_WPrintQProcEnum(struct s 192 int succnt; 193 struct pack_desc desc; 194 195+#ifndef PRINTER_SUPPORT 196+ return False; 197+#endif 198+ 199 if (!str1 || !str2 || !p) { 200 return False; 201 } 202@@ -5257,6 +5301,10 @@ static bool api_WPrintPortEnum(struct sm 203 int succnt; 204 struct pack_desc desc; 205 206+#ifndef PRINTER_SUPPORT 207+ return False; 208+#endif 209+ 210 if (!str1 || !str2 || !p) { 211 return False; 212 } 213--- a/source3/smbd/server_exit.c 214+++ b/source3/smbd/server_exit.c 215@@ -141,7 +141,9 @@ static void exit_server_common(enum serv 216 rpc_eventlog_shutdown(); 217 rpc_ntsvcs_shutdown(); 218 rpc_svcctl_shutdown(); 219+#ifdef PRINTER_SUPPORT 220 rpc_spoolss_shutdown(); 221+#endif 222 223 rpc_srvsvc_shutdown(); 224 rpc_winreg_shutdown(); 225--- a/source3/smbd/open.c 226+++ b/source3/smbd/open.c 227@@ -1608,6 +1608,9 @@ static NTSTATUS open_file_ntcreate(conne 228 * Most of the passed parameters are ignored. 229 */ 230 231+#ifndef PRINTER_SUPPORT 232+ return NT_STATUS_ACCESS_DENIED; 233+#endif 234 if (pinfo) { 235 *pinfo = FILE_WAS_CREATED; 236 } 237--- a/source3/smbd/close.c 238+++ b/source3/smbd/close.c 239@@ -643,6 +643,9 @@ static NTSTATUS close_normal_file(struct 240 status = ntstatus_keeperror(status, tmp); 241 242 if (fsp->print_file) { 243+#ifndef PRINTER_SUPPORT 244+ return NT_STATUS_OK; 245+#endif 246 /* FIXME: return spool errors */ 247 print_spool_end(fsp, close_type); 248 file_free(req, fsp); 249--- a/source3/smbd/fileio.c 250+++ b/source3/smbd/fileio.c 251@@ -298,6 +298,10 @@ ssize_t write_file(struct smb_request *r 252 uint32_t t; 253 int ret; 254 255+#ifndef PRINTER_SUPPORT 256+ return -1; 257+#endif 258+ 259 ret = print_spool_write(fsp, data, n, pos, &t); 260 if (ret) { 261 errno = ret; 262--- a/source3/smbd/smb2_create.c 263+++ b/source3/smbd/smb2_create.c 264@@ -486,7 +486,10 @@ static struct tevent_req *smbd_smb2_crea 265 info = FILE_WAS_OPENED; 266 } else if (CAN_PRINT(smb1req->conn)) { 267 status = file_new(smb1req, smb1req->conn, &result); 268- if(!NT_STATUS_IS_OK(status)) { 269+#ifdef PRINTER_SUPPORT 270+ if(!NT_STATUS_IS_OK(status)) 271+#endif 272+ { 273 tevent_req_nterror(req, status); 274 return tevent_req_post(req, ev); 275 } 276--- a/source3/rpc_server/svcctl/srv_svcctl_nt.c 277+++ b/source3/rpc_server/svcctl/srv_svcctl_nt.c 278@@ -85,9 +85,11 @@ bool init_service_op_table( void ) 279 280 /* add builtin services */ 281 282+#ifdef PRINTER_SUPPORT 283 svcctl_ops[i].name = talloc_strdup( svcctl_ops, "Spooler" ); 284 svcctl_ops[i].ops = &spoolss_svc_ops; 285 i++; 286+#endif 287 288 svcctl_ops[i].name = talloc_strdup( svcctl_ops, "NETLOGON" ); 289 svcctl_ops[i].ops = &netlogon_svc_ops; 290--- a/source3/librpc/rpc/rpc_common.c 291+++ b/source3/librpc/rpc/rpc_common.c 292@@ -113,9 +113,11 @@ static bool initialize_interfaces(void) 293 if (!smb_register_ndr_interface(&ndr_table_winreg)) { 294 return false; 295 } 296+#ifdef PRINTER_SUPPORT 297 if (!smb_register_ndr_interface(&ndr_table_spoolss)) { 298 return false; 299 } 300+#endif 301 if (!smb_register_ndr_interface(&ndr_table_netdfs)) { 302 return false; 303 } 304--- a/source3/smbd/process.c 305+++ b/source3/smbd/process.c 306@@ -2423,8 +2423,10 @@ static bool housekeeping_fn(const struct 307 308 change_to_root_user(); 309 310+#ifdef PRINTER_SUPPORT 311 /* update printer queue caches if necessary */ 312 update_monitored_printq_cache(sconn->msg_ctx); 313+#endif 314 315 /* check if we need to reload services */ 316 check_reload(sconn, time_mono(NULL)); 317--- a/source3/smbd/server.c 318+++ b/source3/smbd/server.c 319@@ -123,7 +123,9 @@ static void smb_pcap_updated(struct mess 320 { 321 struct tevent_context *ev_ctx = 322 talloc_get_type_abort(private_data, struct tevent_context); 323- 324+#ifndef PRINTER_SUPPORT 325+ return; 326+#endif 327 DEBUG(10,("Got message saying pcap was updated. Reloading.\n")); 328 change_to_root_user(); 329 reload_printers(ev_ctx, msg); 330@@ -1277,6 +1279,7 @@ extern void build_options(bool screen); 331 * The print backend init also migrates the printing tdb's, 332 * this requires a winreg pipe. 333 */ 334+#ifdef PRINTER_SUPPORT 335 if (!print_backend_init(smbd_messaging_context())) 336 exit(1); 337 338@@ -1315,7 +1318,7 @@ extern void build_options(bool screen); 339 smbd_messaging_context()); 340 } 341 } 342- 343+#endif 344 if (!is_daemon) { 345 /* inetd mode */ 346 TALLOC_FREE(frame); 347