xref: /openbsd-src/usr.sbin/lpd/logmsg.c (revision af27b3cce1070d60f0e791a83d790160efdc2be8)
1*af27b3ccSclaudio /*	$OpenBSD: logmsg.c,v 1.3 2024/11/21 13:34:51 claudio Exp $	*/
23b188dabSeric 
33b188dabSeric /*
43b188dabSeric  * Copyright (c) 2017 Eric Faurot <eric@openbsd.org>
53b188dabSeric  *
63b188dabSeric  * Permission to use, copy, modify, and distribute this software for any
73b188dabSeric  * purpose with or without fee is hereby granted, provided that the above
83b188dabSeric  * copyright notice and this permission notice appear in all copies.
93b188dabSeric  *
103b188dabSeric  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
113b188dabSeric  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
123b188dabSeric  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
133b188dabSeric  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
143b188dabSeric  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
153b188dabSeric  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
163b188dabSeric  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
173b188dabSeric  */
183b188dabSeric 
193b188dabSeric #include <sys/un.h>
203b188dabSeric 
213b188dabSeric #include <limits.h>
223b188dabSeric #include <stdio.h>
233b188dabSeric #include <string.h>
243b188dabSeric 
253b188dabSeric #include "lpd.h"
263b188dabSeric 
273b188dabSeric #include "io.h"
283b188dabSeric #include "log.h"
293b188dabSeric #include "proc.h"
303b188dabSeric 
313b188dabSeric const char *
323b188dabSeric log_fmt_proto(int p)
333b188dabSeric {
343b188dabSeric 	switch (p) {
353b188dabSeric 	case PROTO_LPR:
363b188dabSeric 		return "lpr";
373b188dabSeric 	default:
383b188dabSeric 		return NULL;
393b188dabSeric 	}
403b188dabSeric };
413b188dabSeric 
423b188dabSeric const char *
433b188dabSeric log_fmt_imsgtype(int type)
443b188dabSeric {
453b188dabSeric 	static char buf[16];
463b188dabSeric 
473b188dabSeric 	switch (type) {
483b188dabSeric 	case IMSG_NONE:
493b188dabSeric 		return "IMSG_NONE";
503b188dabSeric 	case IMSG_SOCK_ENGINE:
513b188dabSeric 		return "IMSG_SOCK_ENGINE";
523b188dabSeric 	case IMSG_SOCK_FRONTEND:
533b188dabSeric 		return "IMSG_SOCK_FRONTEND";
543b188dabSeric 	case IMSG_CONF_START:
553b188dabSeric 		return "IMSG_CONF_START";
563b188dabSeric 	case IMSG_CONF_LISTENER:
573b188dabSeric 		return "IMSG_CONF_LISTENER";
583b188dabSeric 	case IMSG_CONF_END:
593b188dabSeric 		return "IMSG_CONF_END";
60db7b06acSeric 	case IMSG_GETADDRINFO:
61db7b06acSeric 		return "IMSG_GETADDRINFO";
62db7b06acSeric 	case IMSG_GETADDRINFO_END:
63db7b06acSeric 		return "IMSG_GETADDRINFO_END";
64db7b06acSeric 	case IMSG_GETNAMEINFO:
65db7b06acSeric 		return "IMSG_GETNAMEINFO";
663b188dabSeric 	case IMSG_LPR_ALLOWEDHOST:
673b188dabSeric 		return "IMSG_LPR_ALLOWEDHOST";
683b188dabSeric 	case IMSG_LPR_DISPLAYQ:
693b188dabSeric 		return "IMSG_LPR_DISPLAYQ";
703b188dabSeric 	case IMSG_LPR_PRINTJOB:
713b188dabSeric 		return "IMSG_LPR_PRINTJOB";
723b188dabSeric 	case IMSG_LPR_RECVJOB:
733b188dabSeric 		return "IMSG_LPR_RECVJOB";
743b188dabSeric 	case IMSG_LPR_RECVJOB_CLEAR:
753b188dabSeric 		return "IMSG_LPR_RECVJOB_CLEAR";
763b188dabSeric 	case IMSG_LPR_RECVJOB_CF:
773b188dabSeric 		return "IMSG_LPR_RECVJOB_CF";
783b188dabSeric 	case IMSG_LPR_RECVJOB_DF:
793b188dabSeric 		return "IMSG_LPR_RECVJOB_DF";
803b188dabSeric 	case IMSG_LPR_RECVJOB_COMMIT:
813b188dabSeric 		return "IMSG_LPR_RECVJOB_COMMIT";
823b188dabSeric 	case IMSG_LPR_RECVJOB_ROLLBACK:
833b188dabSeric 		return "IMSG_LPR_RECVJOB_ROLLBACK";
843b188dabSeric 	case IMSG_LPR_RMJOB:
853b188dabSeric 		return "IMSG_LPR_RMJOB";
863b188dabSeric 	default:
873b188dabSeric 		snprintf(buf, sizeof(buf), "?%d", type);
883b188dabSeric 		return buf;
893b188dabSeric 	}
903b188dabSeric }
913b188dabSeric 
923b188dabSeric const char *
933b188dabSeric log_fmt_proctype(int proctype)
943b188dabSeric {
953b188dabSeric 	switch (proctype) {
963b188dabSeric 	case PROC_CLIENT:
973b188dabSeric 		return "client";
983b188dabSeric 	case PROC_CONTROL:
993b188dabSeric 		return "control";
1003b188dabSeric 	case PROC_ENGINE:
1013b188dabSeric 		return "engine";
1023b188dabSeric 	case PROC_FRONTEND:
1033b188dabSeric 		return "frontend";
1043b188dabSeric 	case PROC_PRINTER:
1053b188dabSeric 		return "printer";
1063b188dabSeric 	case PROC_PRIV:
1073b188dabSeric 		return "priv";
1083b188dabSeric 	default:
1093b188dabSeric 		return NULL;
1103b188dabSeric 	}
1113b188dabSeric };
1123b188dabSeric 
1133b188dabSeric const char *
1143b188dabSeric log_fmt_sockaddr(const struct sockaddr *sa)
1153b188dabSeric {
1163b188dabSeric 	static char buf[PATH_MAX];
1173b188dabSeric 	char host[NI_MAXHOST], serv[NI_MAXSERV];
1183b188dabSeric 
1193b188dabSeric 	switch (sa->sa_family) {
1203b188dabSeric 	case AF_LOCAL:
1213b188dabSeric 		(void)strlcpy(buf, ((const struct sockaddr_un*)sa)->sun_path,
1223b188dabSeric 		    sizeof(buf));
1233b188dabSeric 		return buf;
1243b188dabSeric 
1253b188dabSeric 	case AF_INET:
1263b188dabSeric 	case AF_INET6:
1273b188dabSeric 		if (getnameinfo(sa, sa->sa_len, host, sizeof(host),
1283b188dabSeric 		    serv, sizeof(serv), NI_NUMERICHOST | NI_NUMERICSERV)) {
1293b188dabSeric 			log_warnx("%s: getnameinfo", __func__);
1303b188dabSeric 			return NULL;
1313b188dabSeric 		}
1323b188dabSeric 		if (sa->sa_family == AF_INET6)
1333b188dabSeric 			snprintf(buf, sizeof(buf), "[%s]:%s", host, serv);
1343b188dabSeric 		else
1353b188dabSeric 			snprintf(buf, sizeof(buf), "%s:%s", host, serv);
1363b188dabSeric 		return buf;
1373b188dabSeric 
1383b188dabSeric 	default:
1393b188dabSeric 		return NULL;
1403b188dabSeric 	}
1413b188dabSeric }
1423b188dabSeric 
1433b188dabSeric void
1443b188dabSeric log_imsg(struct imsgproc *proc, struct imsg *imsg)
1453b188dabSeric {
1463b188dabSeric 	if (imsg == NULL)
1473b188dabSeric 		log_debug("imsg src=%s closed",
1483b188dabSeric 		    log_fmt_proctype(proc_gettype(proc)));
1493b188dabSeric 	else
150*af27b3ccSclaudio 		log_debug("imsg src=%s type=%s len=%d",
1513b188dabSeric 		    log_fmt_proctype(proc_gettype(proc)),
1523b188dabSeric 		    log_fmt_imsgtype(imsg->hdr.type),
153*af27b3ccSclaudio 		    imsg->hdr.len);
1543b188dabSeric }
1553b188dabSeric 
1563b188dabSeric void
1573b188dabSeric log_io(const char *name, struct io *io, int ev)
1583b188dabSeric {
1593b188dabSeric 	log_debug("io %s evt=%s io=%s", name, io_strevent(ev),
1603b188dabSeric 	    io_strio(io));
1613b188dabSeric }
162