summaryrefslogtreecommitdiffstats
path: root/src/ck-event-logger.c
diff options
context:
space:
mode:
authorWilliam Jon McCann <jmccann@redhat.com>2008-02-25 19:19:31 -0500
committerWilliam Jon McCann <jmccann@redhat.com>2008-02-25 19:19:31 -0500
commit9e78825cef3db4e13cffbfd024bda365403aa6ba (patch)
tree53ea184b8e5accd21d353d1d3a55eb156501663a /src/ck-event-logger.c
parent414f7cc1e62474da69058884c5b683dc20e3a8f6 (diff)
always create the directories we need
Diffstat (limited to 'src/ck-event-logger.c')
-rw-r--r--src/ck-event-logger.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/ck-event-logger.c b/src/ck-event-logger.c
index b821df9..2fded87 100644
--- a/src/ck-event-logger.c
+++ b/src/ck-event-logger.c
@@ -97,8 +97,10 @@ ck_event_logger_queue_event (CkEventLogger *event_logger,
static gboolean
open_log_file (CkEventLogger *event_logger)
{
- int flags;
- int fd;
+ int flags;
+ int fd;
+ int res;
+ char *dirname;
/*
* Likely errors on rotate: ENFILE, ENOMEM, ENOSPC
@@ -108,6 +110,20 @@ open_log_file (CkEventLogger *event_logger)
flags |= O_NOFOLLOW;
#endif
+ dirname = g_path_get_dirname (event_logger->priv->log_filename);
+ /* always make sure we have a directory */
+ errno = 0;
+ res = g_mkdir_with_parents (dirname,
+ S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
+ if (res < 0) {
+ g_warning ("Unable to create directory %s (%s)",
+ dirname,
+ g_strerror (errno));
+ g_free (dirname);
+ return FALSE;
+ }
+ g_free (dirname);
+
retry:
errno = 0;
fd = g_open (event_logger->priv->log_filename, flags, 0600);
@@ -115,7 +131,7 @@ retry:
if (errno == ENOENT) {
fd = g_open (event_logger->priv->log_filename,
O_CREAT | O_EXCL | O_APPEND,
- S_IRUSR | S_IWUSR | S_IRGRP | S_IRGRP | S_IROTH);
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
if (fd < 0) {
g_warning ("Couldn't create log file %s (%s)",
event_logger->priv->log_filename,