]> git.saurik.com Git - apple/syslog.git/commitdiff
syslog-323.40.3.tar.gz os-x-10114 v323.40.3
authorApple <opensource@apple.com>
Wed, 3 Feb 2016 00:39:42 +0000 (00:39 +0000)
committerApple <opensource@apple.com>
Wed, 3 Feb 2016 00:39:42 +0000 (00:39 +0000)
aslcommon/asl_common.c
syslogd.tproj/daemon.c
syslogd.tproj/syslogd.c

index ebe75c4da92ca9d903ecebec78809cf32f04f6b9..a5c1b897c1c170386a8c472bdea11ecc4845b5a8 100644 (file)
@@ -41,6 +41,7 @@
 #include <asl_core.h>
 #include <asl_msg.h>
 #include "asl_common.h"
+#include <pwd.h>
 
 #define _PATH_ASL_CONF "/etc/asl.conf"
 #define _PATH_ASL_CONF_DIR "/etc/asl"
@@ -1215,6 +1216,17 @@ _dst_add_uid(asl_out_dst_data_t *dst, char *s)
 
        uid = atoi(s);
 
+#if TARGET_OS_IPHONE
+       if (uid == 501)
+       {
+               struct passwd * pw = getpwnam("mobile");
+               if (pw)
+               {
+                       uid = pw->pw_uid;
+               }
+       }
+#endif
+
        for (i = 0 ; i < dst->nuid; i++)
        {
                if (dst->uid[i] == uid) return;
@@ -1241,6 +1253,17 @@ _dst_add_gid(asl_out_dst_data_t *dst, char *s)
 
        gid = atoi(s);
 
+#if TARGET_OS_IPHONE
+       if (gid == 501)
+       {
+               struct passwd * pw = getpwnam("mobile");
+               if (pw)
+               {
+                       gid = pw->pw_gid;
+               }
+       }
+#endif
+
        for (i = 0 ; i < dst->ngid; i++)
        {
                if (dst->gid[i] == gid) return;
index 5c87c222771d61fa765b42e5b39c722123f54c16..8a3022283bcbabbc8921895bfb66934505d3a6a8 100644 (file)
@@ -927,6 +927,7 @@ void
 process_message(asl_msg_t *msg, uint32_t source)
 {
        int64_t msize = 0;
+       static bool wq_draining = false;
        bool is_control = false;
        asl_msg_t *x;
 
@@ -934,6 +935,21 @@ process_message(asl_msg_t *msg, uint32_t source)
 
        is_control = asl_check_option(msg, ASL_OPT_CONTROL) != 0;
 
+       if ((!is_control) && wq_draining)
+       {
+               if (global.memory_size >= (global.memory_max / 2))
+               {
+                       asldebug("Work queue draining: dropped message.\n");
+                       asl_msg_release(msg);
+                       return;
+               }
+               else
+               {
+                       asldebug("Work queue re-enabled at 1/2 max.  size %lld  max %lld\n", global.memory_size, global.memory_max);
+                       wq_draining = false;
+               }
+       }
+
        __block vproc_transaction_t vt = vproc_transaction_begin(NULL);
 
        for (x = msg; x != NULL; x = x->next) msize += x->mem_size;
@@ -941,12 +957,13 @@ process_message(asl_msg_t *msg, uint32_t source)
        if ((global.memory_size + msize) >= global.memory_max)
        {
                char str[256];
+
+               wq_draining = true;
                asl_msg_release(msg);
 
-               asldebug("Work queue memory limit - dropped message.  msize %lld  size %lld  max %lld\n", msize, global.memory_size + msize, global.memory_max);
-               snprintf(str, sizeof(str), "[Sender syslogd] [Level 2] [PID %u] [Message Received message size %lld overflows work queue limit %lld - dropping message] [UID 0] [UID 0] [Facility syslog]", global.pid, msize, global.memory_max);
+               asldebug("Work queue disabled.  msize %lld  size %lld  max %lld\n", msize, global.memory_size + msize, global.memory_max);
+               snprintf(str, sizeof(str), "[Sender syslogd] [Level 2] [PID %u] [Message Internal memory size limit %lld exceeded - dropping messages] [UID 0] [UID 0] [Facility syslog]", global.pid, global.memory_max);
                msg = asl_msg_from_string(str);
-               for (x = msg; x != NULL; x = x->next) msize += x->mem_size;
        }
 
        OSAtomicAdd64(msize, &global.memory_size);
index f5c3f54b5fbcae13141aed8987df5811e536590c..e929e9d5c4b890faf7e8af853d0984465a985306 100644 (file)
@@ -50,6 +50,8 @@
 #include <utmpx.h>
 #include <vproc_priv.h>
 #include <asl_private.h>
+#include <pwd.h>
+
 #if !TARGET_OS_IPHONE
 #include <quarantine.h>
 #endif
@@ -490,9 +492,18 @@ main(int argc, const char *argv[])
         * guilty of this in the past, creating them with owner root.
         */
 
-       asl_secure_chown_chmod_dir("/private/var/mobile/Library/Logs", 501, 501, 0755);
-       asl_secure_chown_chmod_dir("/private/var/mobile/Library/Logs/CrashReporter", 501, 501, 0755);
-       asl_secure_chown_chmod_dir("/private/var/mobile/Library/Logs/CrashReporter/DiagnosticLogs", 501, 501, 0755);
+       uid_t __mUserUID = 501;
+       gid_t __mUserGID = 501;
+       struct passwd * pw = getpwnam("mobile");
+
+       if (pw) {
+               __mUserUID = pw->pw_uid;
+               __mUserGID = pw->pw_gid;
+       }
+
+       asl_secure_chown_chmod_dir("/private/var/mobile/Library/Logs", __mUserUID, __mUserGID, 0755);
+       asl_secure_chown_chmod_dir("/private/var/mobile/Library/Logs/CrashReporter", __mUserUID, __mUserGID, 0755);
+       asl_secure_chown_chmod_dir("/private/var/mobile/Library/Logs/CrashReporter/DiagnosticLogs", __mUserUID, __mUserGID, 0755);
 #endif
 
        /* Set I/O policy */