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