#include <xpc/xpc.h>
#include <TargetConditionals.h>
#include <configuration_profile.h>
+#include <os/variant_private.h>
#include <asl.h>
#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"
#define PATH_LIBRARY_LOGS "/Library/Logs/"
#define PATH_LIBRARY_LOGS_LEN 14
-#if !TARGET_IPHONE_SIMULATOR
+#if !TARGET_OS_SIMULATOR
#define _PATH_ASL_CONF_LOCAL_DIR "/usr/local/etc/asl"
#endif
status = mkdir(tmp, mode);
umask(mask);
-#if !TARGET_IPHONE_SIMULATOR
+#if !TARGET_OS_SIMULATOR
uid_t u = 0;
gid_t g = 80;
free(dst->ext);
free(dst->rotate_dir);
free(dst->fmt);
-#if !TARGET_IPHONE_SIMULATOR
+#if !TARGET_OS_SIMULATOR
free(dst->uid);
free(dst->gid);
#endif
int
asl_out_dst_set_access(int fd, asl_out_dst_data_t *dst)
{
-#if !TARGET_IPHONE_SIMULATOR
+#if !TARGET_OS_SIMULATOR
uid_t fuid = 0;
gid_t fgid = 80;
-#if !TARGET_OS_EMBEDDED
+#if !TARGET_OS_IPHONE
int status;
acl_t acl;
uuid_t uuid;
if (dst == NULL) return -1;
if (fd < 0) return -1;
-#if TARGET_IPHONE_SIMULATOR
+#if TARGET_OS_SIMULATOR
return fd;
#else
fchown(fd, fuid, fgid);
-#if TARGET_OS_EMBEDDED
+#if TARGET_OS_IPHONE
return fd;
#else
+ if (os_variant_is_basesystem("com.apple.syslog")) {
+ return fd;
+ }
acl = acl_init(1);
for (i = 0; i < dst->ngid; i++)
acl_free(acl);
return fd;
-#endif /* !TARGET_OS_EMBEDDED */
-#endif /* !TARGET_IPHONE_SIMULATOR */
+#endif /* !TARGET_OS_IPHONE */
+#endif /* !TARGET_OS_SIMULATOR */
}
/* create a file with acls */
return out;
}
-#if !TARGET_IPHONE_SIMULATOR
+#if !TARGET_OS_SIMULATOR
static void
_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;
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;
dst->gid[dst->ngid++] = gid;
}
-#endif /* !TARGET_IPHONE_SIMULATOR */
+#endif /* !TARGET_OS_SIMULATOR */
static char *
_dst_format_string(char *s)
char *t = path;
const char *log_root = "/var/log";
-#if TARGET_IPHONE_SIMULATOR
+#if TARGET_OS_SIMULATOR
log_root = getenv("SIMULATOR_LOG_ROOT");
if (log_root == NULL) log_root = "/tmp/log";
#endif
while (NULL != (p = next_word_from_string(&opts)))
{
if (KEYMATCH(p, "mode=")) dst->mode = strtol(p+5, NULL, 0);
-#if !TARGET_IPHONE_SIMULATOR
+#if !TARGET_OS_SIMULATOR
else if (KEYMATCH(p, "uid=")) _dst_add_uid(dst, p+4);
else if (KEYMATCH(p, "gid=")) _dst_add_gid(dst, p+4);
#endif
else if (KEYMATCH(p+9, "false")) dst->flags &= ~MODULE_FLAG_COALESCE;
}
else if (KEYMATCH(p, "compress")) dst->flags |= MODULE_FLAG_COMPRESS;
- else if (KEYMATCH(p, "activity")) dst->flags |= MODULE_FLAG_ACTIVITY;
else if (KEYMATCH(p, "extern")) dst->flags |= MODULE_FLAG_EXTERNAL;
else if (KEYMATCH(p, "truncate")) dst->flags |= MODULE_FLAG_TRUNCATE;
else if (KEYMATCH(p, "dir")) dst->flags |= MODULE_FLAG_TYPE_ASL_DIR;
dst->ttl[x] = asl_core_str_to_time(p+5, SECONDS_PER_DAY);
}
}
+ else if (KEYMATCH(p, "size_only"))
+ {
+ dst->flags |= MODULE_FLAG_SIZE_ONLY;
+ }
free(p);
p = NULL;
}
-#if TARGET_OS_EMBEDDED
+#if (TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR)
/* check for crashreporter files */
if ((KEYMATCH(dst->path, _PATH_CRASHREPORTER)) || (KEYMATCH(dst->path, _PATH_CRASHREPORTER_MOBILE_1)) || (KEYMATCH(dst->path, _PATH_CRASHREPORTER_MOBILE_2)))
{
/* set file_max to all_max if it is zero */
if (dst->file_max == 0) dst->file_max = dst->all_max;
+ /* size_only option requires non-zero file_max and all_max settings */
+ if ((dst->flags & MODULE_FLAG_SIZE_ONLY) && (dst->file_max == 0 || dst->all_max == 0))
+ {
+ dst->flags &= ~MODULE_FLAG_SIZE_ONLY;
+ }
+
+ /* size_only option cannot be used with crashlog option */
+ if ((dst->flags & MODULE_FLAG_SIZE_ONLY) && (dst->flags & MODULE_FLAG_CRASHLOG))
+ {
+ dst->flags &= ~MODULE_FLAG_SIZE_ONLY;
+ }
+
out->action = ACTION_OUT_DEST;
out->dst = dst;
out->dst->flags &= ~MODULE_FLAG_ROTATE;
}
-#if !TARGET_IPHONE_SIMULATOR
+#if !TARGET_OS_SIMULATOR
if (out->dst->nuid == 0) _dst_add_uid(out->dst, "0");
if (out->dst->ngid == 0) _dst_add_gid(out->dst, "80");
#endif
{
asl_out_module_t *out = NULL;
-#if TARGET_IPHONE_SIMULATOR
+#if TARGET_OS_SIMULATOR
char *sim_root_path, *sim_resources_path;
char *asl_conf, *asl_conf_dir, *asl_conf_local_dir;
if (_asl_out_module_find(out, ASL_MODULE_NAME) == NULL)
{
/* system just has old-style /etc/asl.conf */
-#if TARGET_IPHONE_SIMULATOR
+#if TARGET_OS_SIMULATOR
FILE *f = fopen(asl_conf, "r");
free(asl_conf);
#else
fprintf(f, "%cexternal", c);
c = ' ';
}
- if (o->flags & MODULE_FLAG_ACTIVITY)
- {
- fprintf(f, "%cactivity", c);
- c = ' ';
- }
if (o->flags & MODULE_FLAG_CRASHLOG)
{
fprintf(f, "%ccrashlog", c);
fprintf(f, "%casl_directory", c);
c = ' ';
}
+ if (o->flags & MODULE_FLAG_SIZE_ONLY)
+ {
+ fprintf(f, "%csize_only", c);
+ c = ' ';
+ }
fprintf(f, ")");
}
fprintf(f, "\n");
fprintf(f, " mode: 0%o\n", o->mode);
fprintf(f, " file_max: %lu\n", o->file_max);
fprintf(f, " all_max: %lu\n", o->all_max);
-#if !TARGET_IPHONE_SIMULATOR
+#if !TARGET_OS_SIMULATOR
fprintf(f, " uid:");
for (i = 0; i < o->nuid; i++) fprintf(f, " %d", o->uid[i]);
fprintf(f, "\n");