Description: affile: fixed bogus permission bits on logfiles on platforms where mode_t is 16 bits only
 syslog-ng is creating files with bogus permissions on platforms where mode_t
 is 16 bits only. Such a beast is kFreeBSD.
 .
 Credits to the Debian folks for noticing & tracking down the issue.
 The original reporter is in the "Reported-By" line, but also thanks for
 gcs@debian.org, algernon@debian.org and peter.czanik@balabit.hu for
 taking care of the issue.
 .
 Reported-By: Steven Chamberlain <steven@pyro.eu.org>
Author: Balazs Scheidler <bazsi@balabit.hu>
Bug-Debian: http://bugs.debian.org/608491
Origin: http://git.balabit.hu/?p=bazsi/syslog-ng-3.1.git;a=commit;h=cbcea8c95c3f07ed9eaa4d12f124db8f8ca2f74b

--- syslog-ng-3.1.3.orig/src/misc.c
+++ syslog-ng-3.1.3/src/misc.c
@@ -399,7 +399,7 @@ create_containing_directory(gchar *name,
         }
       else if (errno == ENOENT) 
         {
-          if (mkdir(name, (mode_t) dir_mode) == -1)
+          if (mkdir(name, dir_mode < 0 ? 0700 : (mode_t) dir_mode) == -1)
             return FALSE;
           if (dir_uid >= 0)
             chown(name, (uid_t) dir_uid, -1);
--- syslog-ng-3.1.3.orig/src/afunix.h
+++ syslog-ng-3.1.3/src/afunix.h
@@ -40,7 +40,7 @@ typedef struct _AFUnixSourceDriver
 
 void afunix_sd_set_uid(LogDriver *self, gchar *owner);
 void afunix_sd_set_gid(LogDriver *self, gchar *group);
-void afunix_sd_set_perm(LogDriver *self, mode_t perm);
+void afunix_sd_set_perm(LogDriver *self, gint perm);
 
 LogDriver *afunix_sd_new(gchar *filename, guint32 flags);
 
--- syslog-ng-3.1.3.orig/src/affile.c
+++ syslog-ng-3.1.3/src/affile.c
@@ -606,7 +606,7 @@ affile_dd_set_file_gid(LogDriver *s, con
 }
 
 void 
-affile_dd_set_file_perm(LogDriver *s, mode_t file_perm)
+affile_dd_set_file_perm(LogDriver *s, gint file_perm)
 {
   AFFileDestDriver *self = (AFFileDestDriver *) s;
   
@@ -642,7 +642,7 @@ affile_dd_set_dir_gid(LogDriver *s, cons
 }
 
 void 
-affile_dd_set_dir_perm(LogDriver *s, mode_t dir_perm)
+affile_dd_set_dir_perm(LogDriver *s, gint dir_perm)
 {
   AFFileDestDriver *self = (AFFileDestDriver *) s;
   
@@ -972,9 +972,9 @@ affile_dd_new(gchar *filename, guint32 f
   self->filename_template = log_template_new(NULL, filename);
   self->flags = flags;
   self->file_uid = self->file_gid = -1;
-  self->file_perm = (mode_t) -1;
+  self->file_perm = -1;
   self->dir_uid = self->dir_gid = -1;
-  self->dir_perm = (mode_t) -1;
+  self->dir_perm = -1;
   log_writer_options_defaults(&self->writer_options);
   if (strchr(filename, '$') == NULL)
     {
--- syslog-ng-3.1.3.orig/src/affile.h
+++ syslog-ng-3.1.3/src/affile.h
@@ -82,10 +82,10 @@ void affile_dd_set_compress(LogDriver *s
 void affile_dd_set_encrypt(LogDriver *s, gboolean enable);
 void affile_dd_set_file_uid(LogDriver *s, const gchar *file_uid);
 void affile_dd_set_file_gid(LogDriver *s, const gchar *file_gid);
-void affile_dd_set_file_perm(LogDriver *s, mode_t file_perm);
+void affile_dd_set_file_perm(LogDriver *s, gint file_perm);
 void affile_dd_set_dir_uid(LogDriver *s, const gchar *dir_uid);
 void affile_dd_set_dir_gid(LogDriver *s, const gchar *dir_gid);
-void affile_dd_set_dir_perm(LogDriver *s, mode_t dir_perm);
+void affile_dd_set_dir_perm(LogDriver *s, gint dir_perm);
 void affile_dd_set_create_dirs(LogDriver *s, gboolean create_dirs);
 void affile_dd_set_fsync(LogDriver *s, gboolean enable);
 void affile_dd_set_overwrite_if_older(LogDriver *s, gint overwrite_if_older);
--- syslog-ng-3.1.3.orig/src/afunix.c
+++ syslog-ng-3.1.3/src/afunix.c
@@ -54,7 +54,7 @@ afunix_sd_set_gid(LogDriver *s, gchar *g
 }
 
 void 
-afunix_sd_set_perm(LogDriver *s, mode_t perm)
+afunix_sd_set_perm(LogDriver *s, gint perm)
 {
   AFUnixSourceDriver *self = (AFUnixSourceDriver *) s;
 
