xref: /openbsd/usr.sbin/lpd/lpd.h (revision db7b06ac)
1 /*	$OpenBSD: lpd.h,v 1.2 2018/09/05 17:32:56 eric Exp $	*/
2 
3 /*
4  * Copyright (c) 2017 Eric Faurot <eric@openbsd.org>
5  *
6  * Permission to use, copy, modify, and distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 #include <sys/types.h>
20 #include <sys/queue.h>
21 #include <sys/tree.h>
22 #include <sys/uio.h>
23 #include <sys/socket.h>
24 
25 #include <event.h>
26 #include <imsg.h>
27 #include <limits.h>
28 #include <netdb.h>
29 
30 #define	PORT_LPR	515
31 
32 #define	LPD_CONFIG	"/etc/lpd.conf"
33 #define	LPD_USER	"daemon"
34 #define	LPD_SOCKET	"/var/run/lpd.sock"
35 
36 #define	LPR_DEFPRINTER	"lp"
37 #define	LPR_MAXCMDLEN	BUFSIZ
38 #define	LPR_MAXFILESIZE	104857600
39 
40 #define	LOGLEVEL_CONN	2
41 #define	LOGLEVEL_IMSG	3
42 #define	LOGLEVEL_IO	4
43 
44 enum {
45 	IMSG_NONE,
46 
47 	IMSG_SOCK_ENGINE,
48 	IMSG_SOCK_FRONTEND,
49 
50 	IMSG_CONF_START,
51 	IMSG_CONF_LISTENER,
52 	IMSG_CONF_END,
53 
54 	IMSG_GETADDRINFO,
55 	IMSG_GETADDRINFO_END,
56 	IMSG_GETNAMEINFO,
57 
58 	IMSG_LPR_ALLOWEDHOST,
59 	IMSG_LPR_DISPLAYQ,
60 	IMSG_LPR_PRINTJOB,
61 	IMSG_LPR_RECVJOB,
62 	IMSG_LPR_RECVJOB_CLEAR,
63 	IMSG_LPR_RECVJOB_CF,
64 	IMSG_LPR_RECVJOB_DF,
65 	IMSG_LPR_RECVJOB_COMMIT,
66 	IMSG_LPR_RECVJOB_ROLLBACK,
67 	IMSG_LPR_RMJOB
68 };
69 
70 enum {
71 	PROC_CLIENT,
72 	PROC_CONTROL,
73 	PROC_ENGINE,
74 	PROC_FRONTEND,
75 	PROC_PRINTER,
76 	PROC_PRIV
77 };
78 
79 enum {
80 	PROTO_NONE = 0,
81 	PROTO_LPR
82 };
83 
84 struct listener {
85 	TAILQ_ENTRY(listener)	 entry;
86 	int			 sock;
87 	int			 proto;
88 	struct sockaddr_storage	 ss;
89 	struct timeval		 timeout;
90 	struct event		 ev;
91 	int			 pause;
92 };
93 
94 struct lpd_conf {
95 	TAILQ_HEAD(, listener)	 listeners;
96 };
97 
98 struct io;
99 struct imsgproc;
100 
101 extern struct lpd_conf *env;
102 extern struct imsgproc *p_control;
103 extern struct imsgproc *p_engine;
104 extern struct imsgproc *p_frontend;
105 extern struct imsgproc *p_priv;
106 
107 /* control.c */
108 void control(int, int);
109 
110 /* engine.c */
111 void engine(int, int);
112 
113 /* frontend.c */
114 void frontend(int, int);
115 void frontend_conn_closed(uint32_t);
116 
117 /* logmsg.c */
118 const char *log_fmt_proto(int);
119 const char *log_fmt_imsgtype(int);
120 const char *log_fmt_proctype(int);
121 const char *log_fmt_sockaddr(const struct sockaddr *);
122 void log_imsg(struct imsgproc *, struct imsg *);
123 void log_io(const char *, struct io *, int);
124 
125 /* engine_lpr.c */
126 void lpr_shutdown(void);
127 void lpr_dispatch_frontend(struct imsgproc *, struct imsg *);
128 void lpr_printjob(const char *);
129 
130 /* frontend_lpr.c */
131 void lpr_init(void);
132 void lpr_dispatch_engine(struct imsgproc *, struct imsg *);
133 void lpr_conn(uint32_t, struct listener *, int, const struct sockaddr *);
134 
135 /* parse.y */
136 struct lpd_conf *parse_config(const char *, int);
137 int cmdline_symset(char *);
138 
139 /* printer.c */
140 void printer(int, int, const char *);
141 
142 /* resolver.c */
143 void resolver_getaddrinfo(const char *, const char *, const struct addrinfo *,
144     void(*)(void *, int, struct addrinfo*), void *);
145 void resolver_getnameinfo(const struct sockaddr *, int,
146     void(*)(void *, int, const char *, const char *), void *);
147 void resolver_dispatch_request(struct imsgproc *, struct imsg *);
148 void resolver_dispatch_result(struct imsgproc *, struct imsg *);
149