aboutsummaryrefslogtreecommitdiff
path: root/syslogd.c
diff options
context:
space:
mode:
authorDavid Oberhollenzer <david.oberhollenzer@tele2.at>2018-10-29 15:15:31 +0100
committerDavid Oberhollenzer <david.oberhollenzer@tele2.at>2018-10-29 15:41:56 +0100
commita09f0bd8e0c526250aa80895175728fe025c9958 (patch)
treee324a491bb82642eb82802f2fc098008ee579656 /syslogd.c
parent5fcb1a06cb4b560fee6d1a9c676852bd8f67a9b2 (diff)
Store log files in /var/log/syslog, also create parent directories
Signed-off-by: David Oberhollenzer <david.oberhollenzer@tele2.at>
Diffstat (limited to 'syslogd.c')
-rw-r--r--syslogd.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/syslogd.c b/syslogd.c
index 4db7060..e85a054 100644
--- a/syslogd.c
+++ b/syslogd.c
@@ -175,10 +175,24 @@ fail:
static int chroot_setup(void)
{
- if (mkdir(SYSLOG_PATH, 0750)) {
- if (errno != EEXIST) {
- perror("mkdir " SYSLOG_PATH);
- return -1;
+ size_t i, len = strlen(SYSLOG_PATH);
+ char *buffer = alloca(len + 1);
+
+ memcpy(buffer, SYSLOG_PATH, len + 1);
+
+ for (i = 0; i < len; ++i) {
+ if (buffer[i] == '\0' || buffer[i] == '/') {
+ buffer[i] = '\0';
+
+ if (mkdir(buffer, 0755)) {
+ if (errno != EEXIST) {
+ perror(buffer);
+ return -1;
+ }
+ }
+
+ if (i < (len - 1))
+ buffer[i] = '/';
}
}