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