1 /***************************************************************************
2  * LPRng - An Extended Print Spooler System
3  *
4  * Copyright 1988-2003, Patrick Powell, San Diego, CA
5  *     papowell@lprng.com
6  * See LICENSE for conditions of use.
7  ***************************************************************************/
8 
9 
10 
11 #ifndef _LP_H_
12 #define _LP_H_ 1
13 #ifndef EXTERN
14 #define EXTERN extern
15 #define DEFINE(X)
16 #endif
17 
18 /*****************************************************************
19  * get the portability information and configuration
20  *****************************************************************/
21 #include "portable.h"
22 
23 /*****************************************************************
24  * Global variables and routines that will be common to all programs
25  *****************************************************************/
26 
27 /*****************************************************************
28  * BUFFER SIZES
29  *
30  * A common size is 1024 bytes;
31  * However,  it appears that this is overkill for most purposes.
32  * 180 bytes appears to be satisfactory for a line,
33  * 512 for a small buffer, 1024 for a large buffer
34  *
35  *****************************************************************/
36 
37 #define LINEBUFFER 180
38 #define SMALLBUFFER 512
39 #define LARGEBUFFER 10240
40 
41 /*****************************************************************
42  * Include files that are so common they should be included anyways
43  *****************************************************************/
44 
45 /* declare structures for forward references */
46 struct host_information;
47 struct line_list;
48 
49 #include "linelist.h"
50 #include "utilities.h"
51 #include "debug.h"
52 #include "errormsg.h"
53 #include "plp_snprintf.h"
54 
55 /*****************************************************************
56  * General variables use in the common routines;
57  * while in principle we could segragate these, it is not worth it
58  * as the number is relatively small
59  *****************************************************************/
60 EXTERN int Optind;			/* next argv to process */
61 EXTERN int Opterr DEFINE(=1); /* Zero disables errors msgs */
62 EXTERN char *Optarg;		/* Pointer to option argument */
63 EXTERN const char *Name;	/* Name of program */
64 
65 
66 extern const char *Copyright[];	/* Copyright info */
67 #define Version	Copyright[0]
68 EXTERN int Is_server;		/* LPD sets to non-zero */
69 EXTERN pid_t Server_pid;		/* PID of server */
70 EXTERN int Is_lpr;			/* LPR sets to non-zero */
71 EXTERN int Logger_fd;		/* for logger */
72 EXTERN int Mail_fd;			/* for mail */
73 EXTERN int Lpd_request;		/* pipe to server */
74 EXTERN int Doing_cleanup;	/* process exiting */
75 EXTERN int Verbose;		/* LPD sets to non-zero */
76 EXTERN int Warnings;		/* set for warnings and not fatal - used with checkcp */
77 EXTERN int Errorcode;		/* Exit code for an error */
78 EXTERN int Status_fd;		/* Status file descriptor for spool queue */
79 EXTERN char *Outbuf, *Inbuf;	/* buffer */
80 EXTERN int Outlen, Outmax, Inlen, Inmax;	/* max and current len of buffer */
81 EXTERN uid_t OriginalEUID, OriginalRUID;   /* original EUID, RUID values */
82 EXTERN uid_t OriginalEGID, OriginalRGID;   /* original EGID, RGID values */
83 EXTERN uid_t DaemonUID;    /* Daemon UID */
84 EXTERN uid_t UID_root;     /* UID is root */
85 EXTERN gid_t DaemonGID;    /* Daemon GID */
86 EXTERN int Max_fd DEFINE(=4);	   /* Maximum FD opened */
87 
88 extern void Max_open(int fd);
89 
90 
91 #if 0
92 typepdef void (*WorkerProc)( struct line_list *args );
93 struct call_list{
94 	const char *id;
95 	void (*p)( struct line_list *args );
96 };
97 extern struct call_list Calls[];
98 #endif
99 
100 
101 void send_to_logger( int sfd, int mfd, struct job *job, const char *header, char *msg );
102 
103 /***************************************************************************
104  * ACKs from the remote host on job transfers
105  ***************************************************************************/
106 #define ACK_SUCCESS 0   /* succeeded; delete remote copy */
107 #define ACK_STOP_Q  1   /* failed; no spooling to the remote queue */
108 #define ACK_RETRY   2   /* failed; retry later */
109 #define ACK_FAIL    3   /* failed; bad job */
110 
111 /*
112  * macros for the names and maximum lengths for the various fields
113  */
114 
115 #define M_DEFAULT		131				/* default limit on line length */
116 /* IDENTIFIER 		'A'	 LPRng - unique job ID */
117 #define M_IDENTIFIER	131				/* default limit on line length */
118 /* CLASSNAME 		'C'	 RFC: 31 char limit */
119 #define M_DATE			31
120 /* DATE      		'D'	 LPRng - date job started */
121 #define M_CLASSNAME		1024
122 /* FROMHOST  		'H'	 RFC: 31 char limit */
123 #define M_FROMHOST		31
124 /* INDENT    		'I'	 RFC: number */
125 #define M_INDENT		31
126 /* JOBNAME   		'J'	 RFC: 99 char limit */
127 #define M_JOBNAME		99
128 /* BNRNAME   		'L'	 RFC: ?? char limit */
129 #define M_BNRNAME		31
130 /* FILENAME  		'N'	 RFC: 131 char limit */
131 #define M_FILENAME		131
132 /* MAILNAME  		'M'	 RFC: ?? char limit */
133 #define M_MAILNAME		131
134 /* FILENAME			'N'	 RFC: 131 char limit on 'N' entries */
135 #define M_NAME			131
136 /* LOGNAME   		'P'	 RFC: 31 char limit */
137 #define M_LOGNAME		31
138 /* QUEUENAME 		'Q'	 PLP: 131 char limit */
139 #define M_QUEUENAME		131
140 /* ACCNTNAME 		'R'	 PLP: info for accounting: 131 */
141 #define M_ACCNTNAME		131
142 /* SLINKDATA 		'S'	 RFC: number " " number */
143 #define M_SLINKDATA		131
144 /* PRTITLE   		'T'	 RFC: 79 char limit */
145 #define M_PRTITLE		79
146 /* UNLNKFILE 		'U'	 RFC: flag */
147 #define M_UNLNKFILE		131
148 /* PWIDTH    		'W'	 RFC: number */
149 #define M_PWIDTH		31
150 /* ZOPTS     		'Z'	 PLP */
151 #define M_ZOPTS			1024
152 /* FONT1     		'1'	 RFC: ?? char limit */
153 /* FONT2     		'2'	 RFC: ?? char limit */
154 /* FONT3     		'3'	 RFC: ?? char limit */
155 /* FONT4     		'4'	 RFC: ?? char limit */
156 #define M_FONT		131
157 
158 /*****************************************************************
159  * Command file option checking:
160  *  We specify the allowed order of options in the control file.
161  *  Note that '*' is a wild card
162  *   Berkeley-            HPJCLIMWT1234
163  *   PLP-                 HPJCLIMWT1234*
164  *****************************************************************/
165 /* error codes for return values */
166 
167 #define LINK_OPEN_FAIL		-1		/* open or connect */
168 #define LINK_TRANSFER_FAIL	-2		/* transfer failed */
169 #define LINK_ACK_FAIL		-3		/* non-zero ACK on operation */
170 #define LINK_FILE_READ_FAIL	-4		/* read from a file failed */
171 #define LINK_LONG_LINE_FAIL	-5		/* a line was too long to read */
172 #define LINK_BIND_FAIL		-6		/* cannot bind to port */
173 #define LINK_PERM_FAIL		-7		/* permission failure, remove job */
174 #define LINK_ECONNREFUSED	-8		/* connection refused */
175 #define LINK_ETIMEDOUT     	-9		/* connection timedout */
176 
177 /*****************************************************************
178  * LPD Protocol Information
179  *****************************************************************/
180 /*****************************************************************
181  * Request types
182  * A request sent to the LPD daemon has the format:
183  * \Xprinter [options],  where \X is a single character or byte value.
184  * The following are the values and commands
185  *****************************************************************/
186 
187 #define REQ_START   1   /* start printer */
188 #define REQ_RECV    2   /* transfer a printer job */
189 #define REQ_DSHORT  3   /* print short form of queue status */
190 #define REQ_DLONG   4   /* print long form of queue status */
191 #define REQ_REMOVE  5   /* remove jobs */
192 #define REQ_CONTROL 6   /* do control operation */
193 #define REQ_BLOCK   7   /* transfer a block format print job */
194 #define REQ_SECURE  8   /* secure command transfer */
195 #define REQ_VERBOSE 9   /* verbose status information */
196 #define REQ_LPSTAT  10  /* LPSTAT format */
197 #define REQ_K4AUTH  'k' /* krb4 authentication */
198 
199 #define KLPR_SERVICE "rcmd"
200 
201 #define ABORT_XFER   1       /* \1\n - abort transfer */
202 #define CONTROL_FILE 2       /* \2<count> <cfname>\n */
203 #define DATA_FILE    3       /* \3<count> <dfname>\n */
204 
205 #define safestrncat( s1, s2 ) mystrncat(s1,s2,sizeof(s1))
206 #define safestrncpy( s1, s2 ) mystrncpy(s1,s2,sizeof(s1));
207 
208 #define STR(X) #X
209 #ifdef ISNULL
210 # error - you have already defined ISNULL
211 xxx error - you have already defined ISNULL
212 #endif
213 #define ISNULL(X) ((X)==0||(*X)==0)
214 
215 /* some handy definitions */
216 
217 #define CTRL_A '\001'
218 
219 /*
220  * global variables with definitions done at run time
221  */
222 
223 EXTERN char *ShortHost_FQDN;		/* Short hostname for logging */
224 EXTERN char *FQDNHost_FQDN;		/* FQDN hostname */
225 EXTERN char* FQDNRemote_FQDN;    /* FQDN of Remote host */
226 EXTERN char* ShortRemote_FQDN;   /* Short form of Remote host */
227 /* EXTERN char* Auth_client_id_DYN;	/ * client sent/received authentication info */
228 
229 EXTERN int Drop_root_DYN;				/* drop root permissions */
230 
231 EXTERN int Accounting_check_DYN; /* check accounting at start */
232 EXTERN char* Accounting_end_DYN;/* accounting at start (see also af, la, ar) */
233 EXTERN char* Accounting_file_DYN; /* name of accounting file (see also la, ar) */
234 EXTERN char* Accounting_namefixup_DYN; /* fix up accounting name */
235 EXTERN int Accounting_remote_DYN; /* write remote transfer accounting (if af is set) */
236 EXTERN char* Accounting_start_DYN;/* accounting at start (see also af, la, ar) */
237 EXTERN char* Allow_user_setting_DYN;	/* allow users to set job submitter */
238 EXTERN int Allow_getenv_DYN;
239 EXTERN int Allow_user_logging_DYN; /* allow users to get log info */
240 EXTERN int Always_banner_DYN; /* always print banner, ignore lpr -h option */
241 EXTERN char* Append_Z_DYN; /* append -Z options on outgoing or filter*/
242 EXTERN char* Architecture_DYN;
243 EXTERN char* Auth_DYN;			/* authentication to use to send to server */
244 EXTERN char* Auth_forward_DYN;	/* server use authentication when forwarding */
245 EXTERN int Auto_hold_DYN;	 /* automatically hold all jobs */
246 EXTERN char* BK_filter_options_DYN;	/* backwards compatible filter options */
247 EXTERN char* BK_of_filter_options_DYN;	/* backwards compatible OF filter options */
248 EXTERN int Backwards_compatible_DYN; /* backwards-compatible: job file format */
249 EXTERN int Backwards_compatible_filter_DYN; /* backwards-compatible: filter parameters */
250 EXTERN char* Banner_end_DYN;	 /* end banner printing program overrides bp */
251 EXTERN int Banner_last_DYN; /* print banner after job instead of before */
252 EXTERN char* Banner_line_DYN;	 /* short banner line sent to banner printer */
253 EXTERN char* Banner_printer_DYN; /* banner printing program (see ep) */
254 EXTERN char* Banner_start_DYN;	 /* start banner printing program overrides bp */
255 EXTERN int Baud_rate_DYN; /* if lp is a tty, set the baud rate (see ty) */
256 EXTERN char* Bounce_queue_format_DYN; /* destination for bounce queue files */
257 EXTERN int Break_classname_priority_link_DYN; /* do not set priority from class name */
258 EXTERN int Check_for_nonprintable_DYN;	/* lpr check for nonprintable file */
259 EXTERN int Check_for_protocol_violations_DYN;	/* check for RFC1179 protocol violations */
260 EXTERN char* Chooser_DYN;	/* choose the destination for a load balance queue */
261 EXTERN int Chooser_interval_DYN;	/* interval between tests for load balance destination */
262 EXTERN int Chooser_scan_queue_DYN;	/* scan the queue */
263 EXTERN char* Chooser_routine_DYN;	/* choose the destination for a load balance queue */
264 EXTERN int Class_in_status_DYN;	/* Show class in status information */
265 EXTERN char* Comment_tag_DYN; /* comment identifying printer (LPQ) */
266 EXTERN char* Config_file_DYN;
267 EXTERN int Connect_grace_DYN; /* grace period for reconnections */
268 EXTERN int Connect_interval_DYN;
269 EXTERN int Connect_timeout_DYN;
270 EXTERN char* Control_filter_DYN; /* Control filter */
271 EXTERN char* Control_file_line_order_DYN; /* Control file line order */
272 EXTERN int Create_files_DYN;		/* allow spool dir files to be created */
273 EXTERN char* Current_date_DYN; /* Current Date */
274 EXTERN char* Daemon_group_DYN;
275 EXTERN char* Daemon_user_DYN;
276 EXTERN char* Default_format_DYN;	/* default format */
277 EXTERN char* Default_permission_DYN;	/* default permission */
278 EXTERN char* Default_printer_DYN;	/* default printer */
279 EXTERN char* Default_priority_DYN;	/* default priority */
280 EXTERN char* Default_remote_host_DYN;
281 EXTERN char* Default_tmp_dir_DYN;	/* default temporary file directory */
282 EXTERN char* Destinations_DYN; /* printers that a route filter may return and we should query */
283 EXTERN int   Discard_large_jobs_DYN;  /* discard jobs that exceed max job size */
284 EXTERN int   Done_jobs_DYN;        /* keep the last NN done jobs */
285 EXTERN int   Done_jobs_max_age_DYN; /* keep the done jobs for at least max age seconds */
286 EXTERN int Direct_DYN;		/* allow LPR to send jobs to a socket */
287 EXTERN int Discard_zero_length_jobs_DYN;		/* discard zero length jobs */
288 EXTERN int Exit_linger_timeout_DYN;	/* we set this timeout on all of the sockets */
289 EXTERN int FF_on_close_DYN; /* print a form feed when device is closed */
290 EXTERN int FF_on_open_DYN; /* print a form feed when device is opened */
291 EXTERN int Fifo_DYN; /* FIFO (first in first out) order enforced */
292 EXTERN char* Fifo_lock_file_DYN; /* lock file for FIFO */
293 
294 EXTERN char* Filter_DYN; /* default filter */
295 EXTERN int   Filter_stderr_to_status_file_DYN; /* filter errors sent to :ps file */
296 EXTERN char* Filter_ld_path_DYN;
297 EXTERN char* Filter_options_DYN;
298 EXTERN char* Filter_path_DYN;
299 EXTERN int Fake_large_file_DYN; 	/* fake large file size if you cannot use 0 */
300 EXTERN int Filter_poll_interval_DYN; /* intervals at which to check filter */
301 EXTERN int Force_FQDN_hostname_DYN; /* force FQDN Host name in control file */
302 EXTERN int Force_IPADDR_hostname_DYN; /* force IPADDR for Host name in control file */
303 EXTERN int Force_localhost_DYN;	/* force localhost for client job transfer */
304 EXTERN char* Force_lpq_status_DYN;	/* force lpq status format */
305 EXTERN int Force_poll_DYN; /* force polling job queues */
306 EXTERN char* Force_queuename_DYN; /* force the use of this queue name */
307 EXTERN char* Form_feed_DYN; /* string to send for a form feed */
308 EXTERN char* Formats_allowed_DYN; /* valid output filter formats */
309 EXTERN int Full_time_DYN; /* full or complete time format in messages */
310 EXTERN int Half_close_DYN; /* do shutdown on socket when sending job */
311 EXTERN int Generate_banner_DYN; /* generate a banner when not a bounce queue */
312 EXTERN char* IF_Filter_DYN; /* filter command, run on a per-file basis */
313 EXTERN int IPV6Protocol_DYN;	/* IPV4 or IPV6 protocol */
314 EXTERN int Ignore_requested_user_priority_DYN;	 /* ignore requested user priority */
315 EXTERN char* Incoming_control_filter_DYN; /* incoming control file filter */
316 EXTERN int Keepalive_DYN;	/* TCP keepalive enabled */
317 EXTERN char* Kerberos_keytab_DYN;	/* kerberos keytab file */
318 EXTERN char* Kerberos_dest_id_DYN;	/* kerberos destination principle */
319 EXTERN char* Kerberos_life_DYN;	/* kerberos lifetime */
320 EXTERN char* Kerberos_renew_DYN;	/* kerberos newal time */
321 EXTERN char* Kerberos_forward_principal_DYN;	/* kerberos server principle */
322 EXTERN char* Kerberos_server_principal_DYN;	/* kerberos server principle */
323 EXTERN char* Kerberos_service_DYN;	/* kerberos service */
324 EXTERN int LPR_bsd_DYN;		/* use BSD -m mail option */
325 EXTERN char* Leader_on_open_DYN; /* leader string printed on printer open */
326 EXTERN int Local_accounting_DYN; /* write local printer accounting (if af is set) */
327 EXTERN int Lock_it_DYN; /* lock the IO device */
328 EXTERN char* Lockfile_DYN;
329 EXTERN char* Log_file_DYN; /* status log file */
330 EXTERN char* Logger_destination_DYN; /* logger host and port */
331 EXTERN int Logger_max_size_DYN; /* log record size */
332 EXTERN char* Logger_path_DYN; /* path to status log file */
333 EXTERN int Logger_timeout_DYN; /* logger timeout size */
334 EXTERN char* Logname_DYN;		/* Username for logging */
335 EXTERN int Long_number_DYN; /* long job number (6 digits) */
336 EXTERN char* Lp_device_DYN; /* device name or lp-pipe command to send output to */
337 EXTERN int Lpd_bounce_DYN; /* force LPD to do bounce queue filtering */
338 EXTERN char* Lpd_listen_port_DYN; /* lpd listens on this port, "off" does not open port */
339 #ifdef IPP_STUBS
340 EXTERN char* Ipp_listen_port_DYN; /* lpd listens on this port, "off" does not open port */
341 EXTERN char* Ipp_port_DYN; /* ipp protocol port */
342 #endif /* not IPP_STUBS */
343 EXTERN char* Lpd_path_DYN; /* LPD path for server use */
344 EXTERN char* Lpd_port_DYN;	/* client/lpd connect to remote (non-local) lpd servers on this port */
345 EXTERN char* Lpd_printcap_path_DYN;
346 EXTERN int Lpr_bounce_DYN; /* allow LPR to do bounce queue filtering */
347 EXTERN char* Lpq_status_file_DYN; /* cached lpq status */
348 EXTERN int   Lpq_status_cached_DYN;  /* how many to cache */
349 EXTERN int   Lpq_status_interval_DYN;  /* interval between updates */
350 EXTERN int   Lpq_status_stale_DYN;  /* cached lpq status is stale after this */
351 EXTERN char* Lpr_opts_DYN;		/* addional options for LPR */
352 EXTERN int Lpr_send_try_DYN; /* number of times for lpr to try sending job */
353 EXTERN char* Mail_from_DYN;
354 EXTERN char* Mail_operator_on_error_DYN;
355 
356 EXTERN int Max_accounting_file_size_DYN;	/* maximum accounting file size */
357 EXTERN int Max_connect_interval_DYN;	/* maximum connect interval */
358 EXTERN int Max_copies_DYN; /* maximum copies allowed */
359 EXTERN int Max_datafiles_DYN; /* maximum datafiles */
360 EXTERN int Max_job_size_DYN; /* maximum job size (1Kb blocks, 0 = unlimited) */
361 EXTERN int Max_log_file_size_DYN;	/* maximum log file size */
362 EXTERN int Max_move_count_DYN;	/* maximum number of moves or forwards */
363 EXTERN int Max_servers_active_DYN;	/* maximum number of servers active */
364 EXTERN int Max_status_line_DYN; /* maximum status line size */
365 EXTERN int Max_status_size_DYN;
366 EXTERN int Min_accounting_file_size_DYN;	/* minimum accounting file size */
367 EXTERN int Min_log_file_size_DYN;	/* minimum log file size */
368 EXTERN int Min_printable_count_DYN; /* minimum printable characters for printable check */
369 EXTERN int Min_status_size_DYN;
370 EXTERN int Minfree_DYN; /* minimum space (Kb) to be left in spool filesystem */
371 EXTERN int Minfree_DYN; /**/
372 
373 EXTERN int Ms_time_resolution_DYN;
374 EXTERN int Network_connect_grace_DYN; /* grace period for reconnections */
375 EXTERN char* New_debug_DYN; /* debug level set for queue handler */
376 EXTERN int Nline_after_file_DYN;	/* Put Nxxx after fcfA... line in control file */
377 EXTERN int No_FF_separator_DYN; /* no interfile FF separator */
378 EXTERN int FF_separator_DYN; /* no interfile FF separator */
379 EXTERN int Nonblocking_open_DYN; /* nonblocking open on io device */
380 EXTERN char* OF_Filter_DYN; /* output filter, run once for all output */
381 EXTERN char* OF_filter_options_DYN;
382 EXTERN char* Originate_port_DYN;
383 EXTERN int Order_routine_DYN; /* use user specified order routine */
384 EXTERN int Page_length_DYN; /* page length (in lines) */
385 EXTERN int Page_width_DYN; /* page width (in characters) */
386 EXTERN int Page_x_DYN; /* page width in pixels (horizontal) */
387 EXTERN int Page_y_DYN; /* page length in pixels (vertical) */
388 EXTERN char* Pc_entries_required_DYN;	/* make sure these entries are in PRINTCAP_ENTRY */
389 EXTERN char* Pass_env_DYN;	/* pass these environment variables */
390 EXTERN char *Plugin_path_DYN; /* plugin path */
391 EXTERN int Poll_time_DYN; /* force polling job queues */
392 EXTERN int Poll_start_interval_DYN; /* interval between trying to start servers */
393 EXTERN int Poll_servers_started_DYN; /* maximum servers to start at one time */
394 EXTERN char* Ppd_file_DYN;	/* ppd file */
395 EXTERN char* Pr_program_DYN; /* pr program for p format */
396 EXTERN char* Prefix_Z_DYN; /* prefix -Z options on outgoing or filter*/
397 EXTERN char* Prefix_option_to_option_DYN; /* prefix option to option, ie, "z,o" */
398 EXTERN char* Printcap_path_DYN;
399 EXTERN char* Printer_DYN;		/* Printe r name for logging */
400 EXTERN char* Printer_DYN;	/* printer name */
401 EXTERN char* Printer_perms_path_DYN;
402 EXTERN char* Queue_name_DYN;	/* Queue name used for spooling */
403 EXTERN char* Queue_control_file_DYN; /* Queue control file name */
404 EXTERN char* Queue_lock_file_DYN; /* Queue lock file name */
405 EXTERN char* Queue_status_file_DYN; /* Queue status file name */
406 EXTERN char* Queue_unspooler_file_DYN; /* Unspooler PID status file name */
407 EXTERN int Read_write_DYN; /* open the printer for reading and writing */
408 EXTERN char* RemoteHost_DYN; /* remote-queue machine (hostname) (with rm) */
409 EXTERN char* RemotePrinter_DYN; /* remote-queue printer name (with rp) */
410 EXTERN char* Remote_support_DYN; /* Operations allowed to remote system */
411 EXTERN char* Remove_Z_DYN; /* remove -Z options on outgoing or filter*/
412 EXTERN char* Report_server_as_DYN; /* report server name as this value */
413 EXTERN int Require_configfiles_DYN; /* require lpd.conf, printcap, lpd.perms files */
414 EXTERN int Require_explicit_Q_DYN; /* require default queue to be explicitly defined */
415 EXTERN char* RestrictToGroupMembers_DYN;	/* restrict to group members */
416 EXTERN int Retry_ECONNREFUSED_DYN; /* retry on ECONNREFUSED  */
417 EXTERN int Retry_NOLINK_DYN; /* retry on link connection failure */
418 EXTERN char* Return_short_status_DYN;	/* return short status */
419 EXTERN int Reuse_addr_DYN; /* set SO_REUSEADDR on outgoing ports */
420 EXTERN int Reverse_priority_order_DYN; /* priority z-aZ-A order */
421 EXTERN char* Reverse_lpq_status_DYN;	/* change lpq format when from host */
422 EXTERN char* Routing_filter_DYN; /* filter to determine routing of jobs */
423 EXTERN char* Safe_chars_DYN; /* safe characters in control file */
424 EXTERN int Save_on_error_DYN; /* save this job when an error */
425 EXTERN int Save_when_done_DYN; /* save this job when done */
426 EXTERN int Send_block_format_DYN; /* send block of data */
427 EXTERN int Send_data_first_DYN; /* send data files first */
428 EXTERN char* Send_failure_action_DYN;
429 EXTERN int Send_job_rw_timeout_DYN;
430 EXTERN int Send_query_rw_timeout_DYN;
431 EXTERN int Send_try_DYN;
432 EXTERN int Sendmail_to_user_DYN;
433 EXTERN char* Sendmail_DYN;
434 EXTERN char* Server_names_DYN; /* names of servers for queue (with ss) */
435 EXTERN char* Server_queue_name_DYN; /* name of queue that server serves (with sv) */
436 EXTERN char* Server_tmp_dir_DYN;	/* default temporary file directory */
437 EXTERN char* Shell_DYN;
438 EXTERN int Short_banner_DYN; /* short banner (one line only) */
439 EXTERN int Short_status_length_DYN;	/* short status length */
440 EXTERN int Socket_linger_DYN;	/* set SO_linger for connections to remote hosts */
441 EXTERN char* Spool_dir_DYN; /* spool directory (only ONE printer per directory!) */
442 EXTERN int Spool_dir_perms_DYN;
443 EXTERN int Spool_file_perms_DYN;
444 EXTERN char *Ssl_ca_file_DYN;	/* ssl cert file */
445 EXTERN char *Ssl_ca_path_DYN;	/* ssl cert directory (path) */
446 EXTERN char *Ssl_crl_file_DYN;	/* ssl crl cert directory (path) */
447 EXTERN char *Ssl_crl_path_DYN;	/* ssl crl cert directory (path) */
448 EXTERN char *Ssl_server_cert_DYN;	/* ssl server cert file */
449 EXTERN char *Ssl_server_password_file_DYN;	/* ssl server password file */
450 EXTERN int Stalled_time_DYN; /* amount of time before reporing stalled job */
451 EXTERN char* Status_file_DYN; /* printer status file name */
452 EXTERN int Stop_on_abort_DYN; /* stop when job aborts */
453 EXTERN char* Stty_command_DYN; /* stty commands to set output line characteristics */
454 EXTERN int Suppress_header_DYN; /* suppress headers and/or banner page */
455 EXTERN int Suspend_OF_filter_DYN; /* suspend OF filter */
456 EXTERN char* Syslog_device_DYN;	/* default syslog() facility */
457 EXTERN char* Trailer_on_close_DYN; /* trailer string to print when queue empties */
458 EXTERN char* Unix_socket_path_DYN;	/* UNIX socket pathname */
459 EXTERN int Use_info_cache_DYN;
460 EXTERN int Use_queuename_DYN;	/* put queuename in control file */
461 EXTERN int Use_queuename_flag_DYN;	/* Specified with the -Q option */
462 EXTERN int Use_shorthost_DYN;	/* Use short hostname in control file information */
463 EXTERN char* User_printcap_DYN;	/* Allow a ${HOME}/.printcap file - name of file*/
464 EXTERN int User_is_authuser_DYN;	/* set user to be authentication user value */
465 EXTERN char* Xlate_incoming_format_DYN;	/* translate format ids on incoming jobs */
466 EXTERN char* Xlate_format_DYN;	/* translate format ids on outgoing jobs */
467 
468 #if defined(DMALLOC)
469 #  include <dmalloc.h>
470 extern int dmalloc_outfile;
471 #endif
472 
473 #define ok_read read
474 
475 #endif
476