]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
muxer/makedirs: fix mode (ulimit) - fixes #2969
authorJaroslav Kysela <perex@perex.cz>
Wed, 24 Jun 2015 17:42:09 +0000 (19:42 +0200)
committerJaroslav Kysela <perex@perex.cz>
Wed, 24 Jun 2015 17:42:26 +0000 (19:42 +0200)
src/muxer/muxer_libav.c
src/muxer/muxer_pass.c
src/muxer/tvh/mkmux.c
src/utils.c

index fcb94194007edc2c704b202f9083f255f98062fb..7f4cd63d8193cfd436a718ffdacdf2d58ca498e8 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <assert.h>
 #include <unistd.h>
+#include <sys/stat.h>
 #include <libavformat/avformat.h>
 #include <libavutil/mathematics.h>
 
@@ -354,16 +355,24 @@ lav_muxer_open_file(muxer_t *m, const char *filename)
 {
   AVFormatContext *oc;
   lav_muxer_t *lm = (lav_muxer_t*)m;
+  char buf[256];
+  int r;
 
   oc = lm->lm_oc;
   snprintf(oc->filename, sizeof(oc->filename), "%s", filename);
 
-  if(avio_open(&oc->pb, filename, AVIO_FLAG_WRITE) < 0) {
-    tvhlog(LOG_ERR, "libav",  "Could not open %s", filename);
+  if((r = avio_open(&oc->pb, filename, AVIO_FLAG_WRITE)) < 0) {
+    av_strerror(r, buf, sizeof(buf));
+    tvhlog(LOG_ERR, "libav",  "%s: Could not open -- %s", filename, buf);
     lm->m_errors++;
     return -1;
   }
 
+  /* bypass umask settings */
+  if (chmod(filename, lm->m_config.m_file_permissions))
+    tvhlog(LOG_ERR, "libav", "%s: Unable to change permissions -- %s",
+           filename, strerror(errno));
+
   return 0;
 }
 
index 4501c79adc8c035e798784e9081fde4390025bcb..eecacd8d38e3c287ca3eeebceb89ef70eca57c83 100644 (file)
@@ -20,6 +20,7 @@
 #include <unistd.h>
 #include <fcntl.h>
 #include <assert.h>
+#include <sys/stat.h>
 
 #include "tvheadend.h"
 #include "streaming.h"
@@ -451,6 +452,11 @@ pass_muxer_open_file(muxer_t *m, const char *filename)
     return -1;
   }
 
+  /* bypass umask settings */
+  if (fchmod(fd, pm->m_config.m_file_permissions))
+    tvhlog(LOG_ERR, "pass", "%s: Unable to change permissions -- %s",
+           filename, strerror(errno));
+
   pm->pm_off      = 0;
   pm->pm_seekable = 1;
   pm->pm_fd       = fd;
index 87c0800ce812986cc106e2e218e7c8b6ca7847f5..ebc44221a6e1742d61f0ad50b8105bda5c6766cb 100644 (file)
@@ -1128,6 +1128,12 @@ mk_mux_open_file(mk_mux_t *mkm, const char *filename, int permissions)
     return mkm->error;
   }
 
+  /* bypass umask settings */
+  if (fchmod(fd, permissions))
+    tvhlog(LOG_ERR, "mkv", "%s: Unable to change permissions -- %s",
+           filename, strerror(errno));
+                     
+
   mkm->filename = strdup(filename);
   mkm->fd = fd;
   mkm->cluster_maxsize = 2000000/4;
index 0e621c71f631d00de8ee962625dc11887824ded3..8bea6ff05b171d6c70655c55a66d79ac2318c685 100644 (file)
@@ -499,6 +499,8 @@ makedirs ( const char *inpath, int mode, gid_t gid, uid_t uid )
         err = mkdir(path, mode);
         if (!err && gid != -1 && uid != -1)
           err = chown(path, uid, gid);
+        if (!err)
+          err = chmod(path, mode); /* override umode */
         tvhtrace("settings", "Creating directory \"%s\" with octal permissions "
                              "\"%o\" gid %d uid %d", path, mode, gid, uid);
       } else {