Readonly-config: not supported by Solaris 10
authorJeremy Harris <jgh146exb@wizmail.org>
Mon, 28 Jun 2021 18:49:00 +0000 (19:49 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Mon, 28 Jun 2021 19:12:55 +0000 (20:12 +0100)
Broken-by: 753739fdef
doc/doc-txt/ChangeLog
src/OS/os.h-SunOS5
src/src/store.c

index 3311ae8f5cfa9272afafd8ec9cca79d011cf36cb..cc589c5678c0b3c5405f02a5cef392ec947dc3ba 100644 (file)
@@ -318,6 +318,7 @@ JH/55 TLS: as server, reject connections with ALPN indicating non-smtp use.
 
 JH/56 Make the majority of info read from config files readonly, for defence-in-
       depth against exploits.  Suggestion by Qualsy.
 
 JH/56 Make the majority of info read from config files readonly, for defence-in-
       depth against exploits.  Suggestion by Qualsy.
+      Not supported on Solaris 10.
 
 
 Exim version 4.94
 
 
 Exim version 4.94
index f5bc31668b66c78ff9c0b6ac0c54121e47adf8c1..1ceafa7018fa25d9b987dbd4c98a3ac41cbd3aa2 100644 (file)
@@ -38,6 +38,10 @@ it seems. */
 # define MISSING_UNSETENV_3
 #endif
 
 # define MISSING_UNSETENV_3
 #endif
 
+#if _POSIX_C_SOURCE < 200809L
+# define MISSING_POSIX_MEMALIGN
+#endif
+
 
 /* SunOS5 doesn't accept getcwd(NULL, 0) to auto-allocate
 a buffer */
 
 /* SunOS5 doesn't accept getcwd(NULL, 0) to auto-allocate
 a buffer */
index ad4da3c2e5faf4a794f33c7b6d2972f7be2b2745..e8819e3e3f4d10de13b6eeb1123c713dd09ab2c6 100644 (file)
@@ -255,14 +255,11 @@ log_write(0, LOG_MAIN|LOG_PANIC_DIE, "Taint mismatch, %s: %s %d\n",
 void
 store_writeprotect(int pool)
 {
 void
 store_writeprotect(int pool)
 {
+#if !defined(COMPILE_UTILITY) && !defined(MISSING_POSIX_MEMALIGN)
 for (storeblock * b = chainbase[pool]; b; b = b->next)
 for (storeblock * b = chainbase[pool]; b; b = b->next)
-  {
-#ifndef COMPILE_UTILITY
   if (mprotect(b, ALIGNED_SIZEOF_STOREBLOCK + b->length, PROT_READ) != 0)
   if (mprotect(b, ALIGNED_SIZEOF_STOREBLOCK + b->length, PROT_READ) != 0)
-    DEBUG(D_any) debug_printf("config block mprotect: (%d) %s\n", errno, strerror(errno))
+    DEBUG(D_any) debug_printf("config block mprotect: (%d) %s\n", errno, strerror(errno));
 #endif
 #endif
-    ;
-  }
 }
 
 /******************************************************************************/
 }
 
 /******************************************************************************/
@@ -346,12 +343,14 @@ if (size > yield_length[pool])
     if (++nblocks[pool] > maxblocks[pool])
       maxblocks[pool] = nblocks[pool];
 
     if (++nblocks[pool] > maxblocks[pool])
       maxblocks[pool] = nblocks[pool];
 
+#ifndef MISSING_POSIX_MEMALIGN
     if (pool == POOL_CONFIG)
       {
       long pgsize = sysconf(_SC_PAGESIZE);
       posix_memalign((void **)&newblock, pgsize, (mlength + pgsize - 1) & ~(pgsize - 1));
       }
     else
     if (pool == POOL_CONFIG)
       {
       long pgsize = sysconf(_SC_PAGESIZE);
       posix_memalign((void **)&newblock, pgsize, (mlength + pgsize - 1) & ~(pgsize - 1));
       }
     else
+#endif
       newblock = internal_store_malloc(mlength, func, linenumber);
     newblock->next = NULL;
     newblock->length = length;
       newblock = internal_store_malloc(mlength, func, linenumber);
     newblock->next = NULL;
     newblock->length = length;