Change command line option for log rotation, from -b/-c --> -R b:c

We want to use -b for binding to an address:port, like FreeBSD/NetBSD
supports using this option.  Unfortunately breaks existing setups in
the wild already.

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
Joachim Nilsson 2019-10-29 06:37:55 +01:00
parent b66090ce4f
commit 4f5124cb79
4 changed files with 47 additions and 63 deletions

View File

@ -11,12 +11,6 @@ sysklogd \- Linux system logging utilities.
.RB [ " \-a "
.I socket
]
.RB [ " \-b "
.I size
]
.RB [ " \-c "
.I count
]
.RB [ " \-d " ]
.RB [ " \-f "
.I config file
@ -32,6 +26,9 @@ sysklogd \- Linux system logging utilities.
.RB [ " \-p"
.IB socket
]
.RB [ " \-R "
.I size:count
]
.RB [ " \-r " ]
.RB [ " \-s "
.I domainlist
@ -111,32 +108,6 @@ within the syslogd.c source file. An example for a chroot() daemon is
described by the people from OpenBSD at
<http://www.guides.sk/psionic/dns/>.
.TP
.BI "\-b " "size"
This option controls the max size of files in the built-in log-rotation.
When present on the command line it activates log rotation of all files
with the given maximum size. It is also possible to control log rotate
per log file, see
.BR syslog.conf (5)
for details.
The size argument takes optional modifiers; k, M, G. E.g., 100M is
100MB, 42k is 42 kB, etc.
Default: disabled (0).
.TP
.BI "\-c " "count"
This option controls the max number of files kept by the built-in
log-rotation. To activate the built-in log rotation this option must be
combined with the
.BI "\-b"
option. The number of files kept include both gzipped files and the
first rotated (not zipped) file. It is also possible to control log
rotate per log file, see
.BR syslog.conf (5)
for details.
Default: 5.
.TP
.B "\-d"
Turns on debug mode. Using this the daemon will not proceed a
.BR fork (2)
@ -187,6 +158,23 @@ is started and controlled by
You can specify an alternative unix domain socket instead of
.IR /dev/log "."
.TP
.BI "\-R " "size[:count]"
This option controls the max size and number of backup files kept by the
built-in log-rotation. When present on the command line it activates
log rotation of all files with the given maximum size. It is also
possible to control log rotate per log file, see
.BR syslog.conf (5)
for details.
The size argument takes optional modifiers; k, M, G. E.g., 100M is
100MB, 42k is 42 kB, etc.
The optional number of files kept include both gzipped files and the
first rotated (not zipped) file. The default for this, when omitted,
is 5.
Default: disabled.
.TP
.B "\-r"
This option will enable the facility to receive message from the
network using an internet domain socket with the syslog service (see

View File

@ -100,4 +100,24 @@ static inline int strtobytes(char *arg)
return bytes;
}
static inline void parse_rotation(char *optarg, off_t *size, int *num)
{
char buf[100];
char *c;
int sz = 0, cnt = 0;
strlcpy(buf, optarg, sizeof(buf));
c = strchr(buf, ':');
if (c) {
*c++ = 0;
cnt = atoi(c);
}
sz = strtobytes(buf);
if (sz > 0)
*size = sz;
if (cnt)
*num = cnt;
}
#endif /* SYSKLOGD_COMPAT_H_ */

View File

@ -219,26 +219,6 @@ static int usage(int code)
return code;
}
static void parse_rotation(char *optarg, off_t *size, int *num)
{
char buf[100];
char *c;
int sz = 0, cnt = 0;
strlcpy(buf, optarg, sizeof(buf));
c = strchr(buf, ':');
if (c) {
*c++ = 0;
cnt = atoi(c);
}
sz = strtobytes(buf);
if (sz > 0)
*size = sz;
if (cnt)
*num = cnt;
}
int main(int argc, char *argv[])
{
int c, rc, num = 5;

View File

@ -353,8 +353,8 @@ int AcceptRemote = 0; /* receive messages that come via UDP */
char **StripDomains = NULL; /* these domains may be stripped before writing logs */
char **LocalHosts = NULL; /* these hosts are logged with their hostname */
int NoHops = 1; /* Can we bounce syslog messages through an intermediate host. */
int RotateSz = 0; /* Max file size (bytes) before rotating, disabled by default */
int RotateCnt = 5; /* Max number (count) of log files to keep, set with -c <NUM> */
static off_t RotateSz = 0; /* Max file size (bytes) before rotating, disabled by default */
static int RotateCnt = 5; /* Max number (count) of log files to keep, set with -c <NUM> */
extern int errno;
/* Function prototypes. */
@ -413,7 +413,7 @@ int main(int argc, char *argv[])
funix[i] = -1;
}
while ((ch = getopt(argc, argv, "46Aa:b:c:dhf:l:m:np:rs:v?")) != EOF) {
while ((ch = getopt(argc, argv, "46Aa:dhf:l:m:np:R:rs:v?")) != EOF) {
switch ((char)ch) {
case '4':
family = PF_INET;
@ -434,14 +434,6 @@ int main(int argc, char *argv[])
fprintf(stderr, "Out of descriptors, ignoring %s\n", optarg);
break;
case 'b': /* Max file size (bytes) before rotating log file. */
RotateSz = strtobytes(optarg);
break;
case 'c': /* Number (count) of log files to keep. */
RotateCnt = atoi(optarg);
break;
case 'd': /* debug */
Debug = 1;
break;
@ -475,6 +467,10 @@ int main(int argc, char *argv[])
funixn[0] = optarg;
break;
case 'R':
parse_rotation(optarg, &RotateSz, &RotateCnt);
break;
case 'r': /* accept remote messages */
AcceptRemote = 1;
break;