Skip to content

Commit be062d4

Browse files
committed
openrc: Add the correct path for logs as user
Signed-off-by: Anna (navi) Figueiredo Gomes <navi@vlhl.dev>
1 parent c7c2849 commit be062d4

File tree

1 file changed

+40
-13
lines changed

1 file changed

+40
-13
lines changed

src/openrc/rc-logger.c

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,9 @@
4646
#include "misc.h"
4747
#include "helpers.h"
4848

49-
#define TMPLOG RC_SVCDIR "/rc.log"
50-
#define DEFAULTLOG "/var/log/rc.log"
49+
#define LOGFILE "/rc.log"
50+
#define TMPLOG RC_SVCDIR LOGFILE
51+
#define DEFAULTLOG "/var/log/" LOGFILE
5152

5253
static int signal_pipe[2] = { -1, -1 };
5354
static int fd_stdout = -1;
@@ -147,6 +148,12 @@ rc_logger_open(const char *level)
147148
FILE *plog = NULL;
148149
const char *logfile;
149150
int log_error = 0;
151+
char *tmplog = TMPLOG;
152+
char *defaultlog = DEFAULTLOG;
153+
#ifdef RC_USER_SERVICES
154+
char *user_svcdir;
155+
char *user_datadir;
156+
#endif
150157

151158
if (!rc_conf_yesno("rc_logger"))
152159
return;
@@ -173,6 +180,18 @@ rc_logger_open(const char *level)
173180
if ((s = fcntl(slave_tty, F_GETFD, 0)) == 0)
174181
fcntl(slave_tty, F_SETFD, s | FD_CLOEXEC);
175182

183+
#ifdef RC_USER_SERVICES
184+
if (rc_is_user()) {
185+
user_svcdir = rc_user_svcdir();
186+
xasprintf(&tmplog, "%s/%s", user_svcdir, LOGFILE);
187+
free(user_svcdir);
188+
189+
user_datadir = rc_user_datadir();
190+
xasprintf(&defaultlog, "%s/%s", user_datadir, LOGFILE);
191+
free(user_datadir);
192+
}
193+
#endif
194+
176195
rc_logger_pid = fork();
177196
switch (rc_logger_pid) {
178197
case -1:
@@ -184,7 +203,7 @@ rc_logger_open(const char *level)
184203
signal_pipe[1] = -1;
185204

186205
runlevel = level;
187-
if ((log = fopen(TMPLOG, "ae")))
206+
if ((log = fopen(tmplog, "ae")))
188207
write_time(log, "started");
189208
else {
190209
free(logbuf);
@@ -234,7 +253,7 @@ rc_logger_open(const char *level)
234253
break;
235254
}
236255
if (logbuf) {
237-
if ((log = fopen(TMPLOG, "ae"))) {
256+
if ((log = fopen(tmplog, "ae"))) {
238257
write_time(log, "started");
239258
write_log(fileno(log), logbuf, logbuf_len);
240259
}
@@ -248,14 +267,14 @@ rc_logger_open(const char *level)
248267
/* Append the temporary log to the real log */
249268
logfile = rc_conf_value("rc_log_path");
250269
if (logfile == NULL)
251-
logfile = DEFAULTLOG;
252-
if (!strcmp(logfile, TMPLOG)) {
270+
logfile = defaultlog;
271+
if (!strcmp(logfile, tmplog)) {
253272
eerror("Cowardly refusing to concatenate a logfile into itself.");
254-
eerrorx("Please change rc_log_path to something other than %s to get rid of this message", TMPLOG);
273+
eerrorx("Please change rc_log_path to something other than %s to get rid of this message", tmplog);
255274
}
256275

257276
if ((plog = fopen(logfile, "ae"))) {
258-
if ((log = fopen(TMPLOG, "re"))) {
277+
if ((log = fopen(tmplog, "re"))) {
259278
while ((bytes = fread(buffer, sizeof(*buffer), BUFSIZ, log)) > 0) {
260279
if (fwrite(buffer, sizeof(*buffer), bytes, plog) < bytes) {
261280
log_error = 1;
@@ -266,7 +285,7 @@ rc_logger_open(const char *level)
266285
fclose(log);
267286
} else {
268287
log_error = 1;
269-
eerror("Error: fopen(%s) failed: %s", TMPLOG, strerror(errno));
288+
eerror("Error: fopen(%s) failed: %s", tmplog, strerror(errno));
270289
}
271290

272291
fclose(plog);
@@ -284,10 +303,10 @@ rc_logger_open(const char *level)
284303
/* Try to keep the temporary log in case of errors */
285304
if (!log_error) {
286305
if (errno != EROFS && ((strcmp(level, RC_LEVEL_SHUTDOWN) != 0) && (strcmp(level, RC_LEVEL_SYSINIT) != 0)))
287-
if (unlink(TMPLOG) == -1)
288-
eerror("Error: unlink(%s) failed: %s", TMPLOG, strerror(errno));
289-
} else if (exists(TMPLOG))
290-
eerrorx("Warning: temporary logfile left behind: %s", TMPLOG);
306+
if (unlink(tmplog) == -1)
307+
eerror("Error: unlink(%s) failed: %s", tmplog, strerror(errno));
308+
} else if (exists(tmplog))
309+
eerrorx("Warning: temporary logfile left behind: %s", tmplog);
291310

292311
exit(0);
293312
/* NOTREACHED */
@@ -311,4 +330,12 @@ rc_logger_open(const char *level)
311330
signal_pipe[0] = -1;
312331
break;
313332
}
333+
334+
#ifdef RC_USER_SERVICES
335+
if (rc_is_user()) {
336+
free(tmplog);
337+
free(defaultlog);
338+
}
339+
#endif
340+
314341
}

0 commit comments

Comments
 (0)