Skip to content

Commit

Permalink
commands: rotate console log file
Browse files Browse the repository at this point in the history
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
  • Loading branch information
Christian Brauner committed Nov 17, 2017
1 parent cf68555 commit 966b9ec
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 2 deletions.
29 changes: 29 additions & 0 deletions src/lxc/commands.c
Expand Up @@ -1064,6 +1064,10 @@ static int lxc_cmd_console_log_callback(int fd, struct lxc_cmd_req *req,

rsp.ret = 0;
if (log->clear) {
int ret;
size_t len;
char *tmp;

/* clear the ringbuffer */
lxc_ringbuf_clear(buf);

Expand All @@ -1086,6 +1090,31 @@ static int lxc_cmd_console_log_callback(int fd, struct lxc_cmd_req *req,
goto out;
}
}

/* rotate the console log file */
if (!console->log_path || console->log_rotate == 0)
goto out;

/* be very certain things are kosher */
rsp.ret = -EBADF;
if (console->log_fd < 0)
goto out;

len = strlen(console->log_path) + sizeof(".1");
tmp = alloca(len);

rsp.ret = -EFBIG;
ret = snprintf(tmp, len, "%s.1", console->log_path);
if (ret < 0 || (size_t)ret >= len)
goto out;

close(console->log_fd);
console->log_fd = -1;
rsp.ret = lxc_unpriv(rename(console->log_path, tmp));
if (rsp.ret < 0)
goto out;

rsp.ret = lxc_console_create_log_file(console);
} else if (rsp.datalen > 0) {
lxc_ringbuf_move_read_addr(buf, rsp.datalen);
}
Expand Down
5 changes: 4 additions & 1 deletion src/lxc/confile.c
Expand Up @@ -1803,8 +1803,11 @@ static int set_config_console_rotate(const char *key, const char *value,
if (lxc_safe_uint(value, &lxc_conf->console.log_rotate) < 0)
return -1;

if (lxc_conf->console.log_rotate > 1)
if (lxc_conf->console.log_rotate > 1) {
ERROR("The \"lxc.console.rotate\" config key can only be set "
"to 0 or 1");
return -1;
}

return 0;
}
Expand Down
2 changes: 1 addition & 1 deletion src/lxc/console.c
Expand Up @@ -674,7 +674,7 @@ static int lxc_console_create_ringbuf(struct lxc_console *console)
* This is the console log file. Please note that the console log file is
* (implementation wise not content wise) independent of the console ringbuffer.
*/
static int lxc_console_create_log_file(struct lxc_console *console)
int lxc_console_create_log_file(struct lxc_console *console)
{
if (!console->log_path)
return 0;
Expand Down
1 change: 1 addition & 0 deletions src/lxc/console.h
Expand Up @@ -222,5 +222,6 @@ extern int lxc_console_cb_signal_fd(int fd, uint32_t events, void *cbdata,
extern void lxc_console_signal_fini(struct lxc_tty_state *ts);

extern int lxc_console_write_ringbuffer(struct lxc_console *console);
extern int lxc_console_create_log_file(struct lxc_console *console);

#endif

0 comments on commit 966b9ec

Please sign in to comment.