Add support for logger -u /tmp/foo
to log to alternate socket
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
parent
08aa942ffb
commit
ec9c92987f
11
src/logger.c
11
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);
|
||||
|
@ -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)
|
||||
|
@ -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, \
|
||||
|
Loading…
Reference in New Issue
Block a user