|
@@ -48,6 +48,7 @@
|
|
|
#include <sys/socket.h>
|
|
#include <sys/socket.h>
|
|
|
#include <sys/mman.h>
|
|
#include <sys/mman.h>
|
|
|
#include <sys/uio.h>
|
|
#include <sys/uio.h>
|
|
|
|
|
+#include <sys/stat.h>
|
|
|
#include <errno.h>
|
|
#include <errno.h>
|
|
|
#include <limits.h>
|
|
#include <limits.h>
|
|
|
|
|
|
|
@@ -68,6 +69,11 @@
|
|
|
#define MAP_ANONYMOUS MAP_ANON
|
|
#define MAP_ANONYMOUS MAP_ANON
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
|
|
+/*
|
|
|
|
|
+ * ZCB files have following umask (umask is same as used in libqb)
|
|
|
|
|
+ */
|
|
|
|
|
+#define CPG_MEMORY_MAP_UMASK 077
|
|
|
|
|
+
|
|
|
struct cpg_inst {
|
|
struct cpg_inst {
|
|
|
qb_ipcc_connection_t *c;
|
|
qb_ipcc_connection_t *c;
|
|
|
int finalize;
|
|
int finalize;
|
|
@@ -737,13 +743,18 @@ memory_map (char *path, const char *file, void **buf, size_t bytes)
|
|
|
size_t written;
|
|
size_t written;
|
|
|
size_t page_size;
|
|
size_t page_size;
|
|
|
long int sysconf_page_size;
|
|
long int sysconf_page_size;
|
|
|
|
|
+ mode_t old_umask;
|
|
|
|
|
|
|
|
snprintf (path, PATH_MAX, "/dev/shm/%s", file);
|
|
snprintf (path, PATH_MAX, "/dev/shm/%s", file);
|
|
|
|
|
|
|
|
|
|
+ old_umask = umask(CPG_MEMORY_MAP_UMASK);
|
|
|
fd = mkstemp (path);
|
|
fd = mkstemp (path);
|
|
|
|
|
+ (void)umask(old_umask);
|
|
|
if (fd == -1) {
|
|
if (fd == -1) {
|
|
|
snprintf (path, PATH_MAX, LOCALSTATEDIR "/run/%s", file);
|
|
snprintf (path, PATH_MAX, LOCALSTATEDIR "/run/%s", file);
|
|
|
|
|
+ old_umask = umask(CPG_MEMORY_MAP_UMASK);
|
|
|
fd = mkstemp (path);
|
|
fd = mkstemp (path);
|
|
|
|
|
+ (void)umask(old_umask);
|
|
|
if (fd == -1) {
|
|
if (fd == -1) {
|
|
|
return (-1);
|
|
return (-1);
|
|
|
}
|
|
}
|