diff --git a/src/logger.c b/src/logger.c index bd19580..9b01a7d 100644 --- a/src/logger.c +++ b/src/logger.c @@ -205,9 +205,10 @@ int main(int argc, char *argv[]) int rotate = 0; off_t size = 200 * 1024; char *ident = NULL, *logfile = NULL; + char *sockpath = NULL; char buf[512] = ""; - while ((c = getopt(argc, argv, "?f:p:r:st:v")) != EOF) { + while ((c = getopt(argc, argv, "?f:p:r:st:u:v")) != EOF) { switch (c) { case 'f': logfile = optarg; @@ -230,6 +231,10 @@ int main(int argc, char *argv[]) ident = optarg; break; + case 'u': + sockpath = optarg; + break; + case 'v': /* version */ fprintf(stderr, "%s\n", version_info); return 0; @@ -267,6 +272,10 @@ int main(int argc, char *argv[]) } log.log_file = fileno(fp); + } else if (sockpath) { + if (access(sockpath, W_OK)) + err(1, "Socket path %s", sockpath); + log.log_sockpath = sockpath; } openlog_r(ident, log_opts, facility, &log); diff --git a/src/syslog.c b/src/syslog.c index 0ed0175..3af38a4 100644 --- a/src/syslog.c +++ b/src/syslog.c @@ -483,7 +483,7 @@ static void connectlog_r(struct syslog_data *data) { /* AF_UNIX address of local logger */ - static const struct sockaddr_un sun = { + static struct sockaddr_un sun = { .sun_family = AF_LOCAL, #ifdef HAVE_SA_LEN .sun_len = sizeof(sun), @@ -491,6 +491,9 @@ connectlog_r(struct syslog_data *data) .sun_path = _PATH_LOG, }; + if (data->log_sockpath && !access(data->log_sockpath, W_OK)) + strlcpy(sun.sun_path, data->log_sockpath, sizeof(sun.sun_path)); + if (data->log_file == -1 || fcntl(data->log_file, F_GETFL, 0) == -1) { data->log_file = socket(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC, 0); if (data->log_file == -1) diff --git a/src/syslog.h b/src/syslog.h index 1ff1404..b6ebbae 100644 --- a/src/syslog.h +++ b/src/syslog.h @@ -195,6 +195,7 @@ struct syslog_data { int log_opened; int log_stat; const char *log_tag; + const char *log_sockpath; /* Path to socket */ char log_hostname[256]; /* MAXHOSTNAMELEN */ int log_fac; int log_mask; @@ -207,6 +208,7 @@ struct syslog_data { .log_opened = 0, \ .log_stat = 0, \ .log_tag = 0, \ + .log_sockpath = NULL, \ .log_hostname = { '\0' }, \ .log_fac = LOG_USER, \ .log_mask = 0xff, \