From: Rainer Jung <rainer.jung@kippdata.de>
Date: Thu, 8 Aug 2024 10:00:13 +0200
Subject: [PATCH] Improve shared memory handling on non-Windows.

---
 native/common/jk_shm.c            | 12 ++++++------
 xdocs/miscellaneous/changelog.xml |  3 +++
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/native/common/jk_shm.c b/native/common/jk_shm.c
index 58956dc..65d9f62 100644
--- a/native/common/jk_shm.c
+++ b/native/common/jk_shm.c
@@ -459,7 +459,7 @@ static int do_shm_open_lock(const char *fname, int attached, jk_logger_t *l)
 
     if (attached && jk_shmem.lockname) {
 #ifdef JK_SHM_LOCK_REOPEN
-        jk_shmem.fd_lock = open(jk_shmem.lockname, O_RDWR, 0666);
+        jk_shmem.fd_lock = open(jk_shmem.lockname, O_RDWR, 0600);
 #else
         errno = EINVAL;
 #endif
@@ -483,7 +483,7 @@ static int do_shm_open_lock(const char *fname, int attached, jk_logger_t *l)
         for (i = 0; i < 8; i++) {
             strcpy(flkname, "/tmp/jkshmlock.XXXXXX");
             if (mktemp(flkname)) {
-                jk_shmem.fd_lock = open(flkname, O_RDWR|O_CREAT|O_TRUNC, 0666);
+                jk_shmem.fd_lock = open(flkname, O_RDWR|O_CREAT|O_TRUNC, 0600);
                 if (jk_shmem.fd_lock >= 0)
                     break;
             }
@@ -495,10 +495,10 @@ static int do_shm_open_lock(const char *fname, int attached, jk_logger_t *l)
 #ifdef AS400_UTF8
         wptr = (char *)malloc(strlen(flkname) + 1);
         jk_ascii2ebcdic((char *)flkname, wptr);
-        jk_shmem.fd_lock = open(wptr, O_RDWR|O_CREAT|O_TRUNC, 0666);
+        jk_shmem.fd_lock = open(wptr, O_RDWR|O_CREAT|O_TRUNC, 0600);
         free(wptr);
 #else
-        jk_shmem.fd_lock = open(flkname, O_RDWR|O_CREAT|O_TRUNC, 0666);
+        jk_shmem.fd_lock = open(flkname, O_RDWR|O_CREAT|O_TRUNC, 0600);
 #endif
 #endif
         if (jk_shmem.fd_lock == -1) {
@@ -589,10 +589,10 @@ static int do_shm_open(const char *fname, int attached,
 #ifdef AS400_UTF8
         wptr = (char *)malloc(strlen(jk_shmem.filename) + 1);
         jk_ascii2ebcdic((char *)jk_shmem.filename, wptr);
-        fd = open(wptr, O_RDWR|O_CREAT|O_TRUNC, 0666);
+        fd = open(wptr, O_RDWR|O_CREAT|O_TRUNC, 0600);
         free(wptr);
 #else
-        fd = open(jk_shmem.filename, O_RDWR|O_CREAT|O_TRUNC, 0666);
+        fd = open(jk_shmem.filename, O_RDWR|O_CREAT|O_TRUNC, 0600);
 #endif
         if (fd == -1) {
             jk_shmem.size = 0;
diff --git a/xdocs/miscellaneous/changelog.xml b/xdocs/miscellaneous/changelog.xml
index bb5a8ac..224bb18 100644
--- a/xdocs/miscellaneous/changelog.xml
+++ b/xdocs/miscellaneous/changelog.xml
@@ -91,6 +91,9 @@
         socket_connect_timeout to be interpreted in units of seconds
         instead of milliseconds on platforms that provide poll(). (rjung)
       </fix>
+      <fix>
+        Improve shared memory handling on non-Windows. (rjung)
+      </fix>
     </changelog>
   </subsection>
 </section>
