X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fjournal%2Fjournald-server.c;h=53e38301108b140bc286e342c195eab3a97e0837;hb=c4aa09b06f835c91cea9e021df4c3605cff2318d;hp=28ce69dccd6b764e989d3bcf5579b86238e42ab3;hpb=0a20e3c10761378869af7bbef2733e3ae879d0f1;p=elogind.git diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c index 28ce69dcc..53e383011 100644 --- a/src/journal/journald-server.c +++ b/src/journal/journald-server.c @@ -535,14 +535,21 @@ static void dispatch_message_real( const char *label, size_t label_len, const char *unit_id) { - char _cleanup_free_ *pid = NULL, *uid = NULL, *gid = NULL, - *source_time = NULL, *boot_id = NULL, *machine_id = NULL, - *comm = NULL, *cmdline = NULL, *hostname = NULL, - *audit_session = NULL, *audit_loginuid = NULL, + char pid[sizeof("_PID=") + DECIMAL_STR_MAX(ucred->pid)], + uid[sizeof("_UID=") + DECIMAL_STR_MAX(ucred->uid)], + gid[sizeof("_GID=") + DECIMAL_STR_MAX(ucred->gid)], + source_time[sizeof("_SOURCE_REALTIME_TIMESTAMP=" + DECIMAL_STR_MAX(usec_t))], + boot_id[sizeof("_BOOT_ID=") + 32] = "_BOOT_ID=", + machine_id[sizeof("_MACHINE_ID=") + 32] = "_MACHINE_ID="; + + char _cleanup_free_ *comm = NULL, *cmdline = NULL, *hostname = NULL, *exe = NULL, *cgroup = NULL, *session = NULL, *owner_uid = NULL, *unit = NULL, *selinux_context = NULL; - char idbuf[33]; +#ifdef HAVE_AUDIT + char _cleanup_free_ *audit_session = NULL, *audit_loginuid = NULL; +#endif + sd_id128_t id; int r; char *t; @@ -562,14 +569,17 @@ static void dispatch_message_real( realuid = ucred->uid; - if (asprintf(&pid, "_PID=%lu", (unsigned long) ucred->pid) >= 0) - IOVEC_SET_STRING(iovec[n++], pid); + snprintf(pid, sizeof(pid) - 1, "_PID=%lu", (unsigned long) ucred->pid); + char_array_0(pid); + IOVEC_SET_STRING(iovec[n++], pid); - if (asprintf(&uid, "_UID=%lu", (unsigned long) ucred->uid) >= 0) - IOVEC_SET_STRING(iovec[n++], uid); + snprintf(uid, sizeof(uid) - 1, "_UID=%lu", (unsigned long) ucred->uid); + char_array_0(uid); + IOVEC_SET_STRING(iovec[n++], uid); - if (asprintf(&gid, "_GID=%lu", (unsigned long) ucred->gid) >= 0) - IOVEC_SET_STRING(iovec[n++], gid); + snprintf(gid, sizeof(gid) - 1, "_GID=%lu", (unsigned long) ucred->gid); + char_array_0(gid); + IOVEC_SET_STRING(iovec[n++], gid); r = get_process_comm(ucred->pid, &t); if (r >= 0) { @@ -672,23 +682,26 @@ static void dispatch_message_real( } if (tv) { - if (asprintf(&source_time, "_SOURCE_REALTIME_TIMESTAMP=%llu", - (unsigned long long) timeval_load(tv)) >= 0) - IOVEC_SET_STRING(iovec[n++], source_time); + snprintf(source_time, sizeof(source_time) - 1, "_SOURCE_REALTIME_TIMESTAMP=%llu", + (unsigned long long) timeval_load(tv)); + char_array_0(source_time); + IOVEC_SET_STRING(iovec[n++], source_time); } /* Note that strictly speaking storing the boot id here is * redundant since the entry includes this in-line * anyway. However, we need this indexed, too. */ r = sd_id128_get_boot(&id); - if (r >= 0) - if (asprintf(&boot_id, "_BOOT_ID=%s", sd_id128_to_string(id, idbuf)) >= 0) - IOVEC_SET_STRING(iovec[n++], boot_id); + if (r >= 0) { + sd_id128_to_string(id, boot_id + sizeof("_BOOT_ID=") - 1); + IOVEC_SET_STRING(iovec[n++], boot_id); + } r = sd_id128_get_machine(&id); - if (r >= 0) - if (asprintf(&machine_id, "_MACHINE_ID=%s", sd_id128_to_string(id, idbuf)) >= 0) - IOVEC_SET_STRING(iovec[n++], machine_id); + if (r >= 0) { + sd_id128_to_string(id, machine_id + sizeof("_MACHINE_ID") - 1); + IOVEC_SET_STRING(iovec[n++], machine_id); + } t = gethostname_malloc(); if (t) {