]> code.delx.au - pulseaudio/blobdiff - src/util.c
esound protocol
[pulseaudio] / src / util.c
index 0383a0ad75ba498aa53927264625a97f5294e115..953504218bdb1465faf6c45bd160202f3301808c 100644 (file)
@@ -1,9 +1,12 @@
+#include <errno.h>
 #include <assert.h>
 #include <string.h>
 #include <stdio.h>
 #include <sys/un.h>
 #include <netinet/in.h>
 #include <fcntl.h>
+#include <unistd.h>
+#include <sys/types.h>
 
 #include "util.h"
 
@@ -60,3 +63,23 @@ void peer_to_string(char *c, size_t l, int fd) {
 
     snprintf(c, l, "Unknown client");
 }
+
+int make_secure_dir(const char* dir) {
+    struct stat st;
+
+    if (mkdir(dir, 0700) < 0) 
+        if (errno != EEXIST)
+            return -1;
+    
+    if (lstat(dir, &st) < 0) 
+        goto fail;
+    
+    if (!S_ISDIR(st.st_mode) || (st.st_uid != getuid()) || ((st.st_mode & 0777) != 0700))
+        goto fail;
+    
+    return 0;
+    
+fail:
+    rmdir(dir);
+    return -1;
+}