mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-05 16:10:55 +00:00
syslogd: support multiple -b options.
It's now possible to bind multiple sockets to different IP addresses. PR: 159305 Submitted by: Kurt Lidl <lidl pix.net> Sponsored by: Pi-Coral, Inc.
This commit is contained in:
parent
d667f11204
commit
38076b4ba5
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=284474
|
@ -28,7 +28,7 @@
|
|||
.\" @(#)syslogd.8 8.1 (Berkeley) 6/6/93
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd March 3, 2015
|
||||
.Dd June 16, 2015
|
||||
.Dt SYSLOGD 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
|
@ -194,6 +194,8 @@ The default
|
|||
.Ar service
|
||||
is
|
||||
.Ql syslog .
|
||||
This option can be specified multiple times to bind to
|
||||
multiple addresses and/or ports.
|
||||
.It Fl C
|
||||
Create log files that do not exist (permission is set to
|
||||
.Li 0600 ) .
|
||||
|
|
|
@ -123,6 +123,15 @@ const char ctty[] = _PATH_CONSOLE;
|
|||
|
||||
#define MAXUNAMES 20 /* maximum number of user names */
|
||||
|
||||
/*
|
||||
* List of hosts for binding.
|
||||
*/
|
||||
static STAILQ_HEAD(, host) hqueue;
|
||||
struct host {
|
||||
char *name;
|
||||
STAILQ_ENTRY(host) next;
|
||||
};
|
||||
|
||||
/*
|
||||
* Unix sockets.
|
||||
* We have two default sockets, one with 666 permissions,
|
||||
|
@ -275,7 +284,7 @@ static int Foreground = 0; /* Run in foreground, instead of daemonizing */
|
|||
static int resolve = 1; /* resolve hostname */
|
||||
static char LocalHostName[MAXHOSTNAMELEN]; /* our hostname */
|
||||
static const char *LocalDomain; /* our local domain name */
|
||||
static int *finet; /* Internet datagram socket */
|
||||
static int *finet; /* Internet datagram sockets */
|
||||
static int fklog = -1; /* /dev/klog */
|
||||
static int Initialized; /* set when we have initialized ourselves */
|
||||
static int MarkInterval = 20 * 60; /* interval between marks in seconds */
|
||||
|
@ -348,10 +357,10 @@ main(int argc, char *argv[])
|
|||
struct sockaddr_storage frominet;
|
||||
fd_set *fdsr = NULL;
|
||||
char line[MAXLINE + 1];
|
||||
char *bindhostname;
|
||||
const char *hname;
|
||||
struct timeval tv, *tvp;
|
||||
struct sigaction sact;
|
||||
struct host *host;
|
||||
struct funix *fx, *fx1;
|
||||
sigset_t mask;
|
||||
pid_t ppid = 1, spid;
|
||||
|
@ -360,7 +369,8 @@ main(int argc, char *argv[])
|
|||
if (madvise(NULL, 0, MADV_PROTECT) != 0)
|
||||
dprintf("madvise() failed: %s\n", strerror(errno));
|
||||
|
||||
bindhostname = NULL;
|
||||
STAILQ_INIT(&hqueue);
|
||||
|
||||
while ((ch = getopt(argc, argv, "468Aa:b:cCdf:Fkl:m:nNop:P:sS:Tuv"))
|
||||
!= -1)
|
||||
switch (ch) {
|
||||
|
@ -383,8 +393,13 @@ main(int argc, char *argv[])
|
|||
usage();
|
||||
break;
|
||||
case 'b':
|
||||
bindhostname = optarg;
|
||||
{
|
||||
if ((host = malloc(sizeof(struct host))) == NULL)
|
||||
err(1, "malloc failed");
|
||||
host->name = optarg;
|
||||
STAILQ_INSERT_TAIL(&hqueue, host, next);
|
||||
break;
|
||||
}
|
||||
case 'c':
|
||||
no_compress++;
|
||||
break;
|
||||
|
@ -433,7 +448,7 @@ main(int argc, char *argv[])
|
|||
if (strlen(name) >= sizeof(sunx.sun_path))
|
||||
errx(1, "%s path too long, exiting", name);
|
||||
if ((fx = malloc(sizeof(struct funix))) == NULL)
|
||||
errx(1, "malloc failed");
|
||||
err(1, "malloc failed");
|
||||
fx->s = -1;
|
||||
fx->name = name;
|
||||
fx->mode = mode;
|
||||
|
@ -555,8 +570,26 @@ main(int argc, char *argv[])
|
|||
}
|
||||
increase_rcvbuf(fx->s);
|
||||
}
|
||||
if (SecureMode <= 1)
|
||||
finet = socksetup(family, bindhostname);
|
||||
if (SecureMode <= 1) {
|
||||
if (STAILQ_EMPTY(&hqueue))
|
||||
finet = socksetup(family, NULL);
|
||||
STAILQ_FOREACH(host, &hqueue, next) {
|
||||
int *finet0, total;
|
||||
finet0 = socksetup(family, host->name);
|
||||
if (finet0 && !finet) {
|
||||
finet = finet0;
|
||||
} else if (finet0 && finet) {
|
||||
total = *finet0 + *finet + 1;
|
||||
finet = realloc(finet, total * sizeof(int));
|
||||
if (finet == NULL)
|
||||
err(1, "realloc failed");
|
||||
for (i = 1; i <= *finet0; i++) {
|
||||
finet[(*finet)+i] = finet0[i];
|
||||
}
|
||||
*finet = total - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (finet) {
|
||||
if (SecureMode) {
|
||||
|
@ -2730,6 +2763,7 @@ socksetup(int af, char *bindhostname)
|
|||
}
|
||||
|
||||
(*socks)++;
|
||||
dprintf("socksetup: new socket fd is %d\n", *s);
|
||||
s++;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue