From: Zbigniew Jędrzejewski-Szmek Date: Sat, 3 Nov 2012 19:13:46 +0000 (+0100) Subject: journal: export valid_user_field and size defines X-Git-Tag: v212~145 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=d18d46ecea80a7f07415edb9264af6a254fd70bb journal: export valid_user_field and size defines In preparation for use elsewhere. --- diff --git a/src/journal/coredump.c b/src/journal/coredump.c index 733373b30..29342de68 100644 --- a/src/journal/coredump.c +++ b/src/journal/coredump.c @@ -36,12 +36,14 @@ #include "mkdir.h" #include "special.h" #include "cgroup-util.h" +#include "journald-native.h" /* Few programs have less than 3MiB resident */ #define COREDUMP_MIN_START (3*1024*1024) /* Make sure to not make this larger than the maximum journal entry * size. See ENTRY_SIZE_MAX in journald-native.c. */ #define COREDUMP_MAX (767*1024*1024) +assert_cc(COREDUMP_MAX <= ENTRY_SIZE_MAX); enum { ARG_PID = 1, diff --git a/src/journal/journald-native.c b/src/journal/journald-native.c index 0509c1eae..c54f6475d 100644 --- a/src/journal/journald-native.c +++ b/src/journal/journald-native.c @@ -33,12 +33,7 @@ #include "journald-syslog.h" #include "journald-wall.h" -/* Make sure not to make this smaller than the maximum coredump - * size. See COREDUMP_MAX in coredump.c */ -#define ENTRY_SIZE_MAX (1024*1024*768) -#define DATA_SIZE_MAX (1024*1024*768) - -static bool valid_user_field(const char *p, size_t l) { +bool valid_user_field(const char *p, size_t l, bool allow_protected) { const char *a; /* We kinda enforce POSIX syntax recommendations for @@ -56,7 +51,7 @@ static bool valid_user_field(const char *p, size_t l) { return false; /* Variables starting with an underscore are protected */ - if (p[0] == '_') + if (!allow_protected && p[0] == '_') return false; /* Don't allow digits as first character */ @@ -65,9 +60,9 @@ static bool valid_user_field(const char *p, size_t l) { /* Only allow A-Z0-9 and '_' */ for (a = p; a < p + l; a++) - if (!((*a >= 'A' && *a <= 'Z') || - (*a >= '0' && *a <= '9') || - *a == '_')) + if ((*a < 'A' || *a > 'Z') && + (*a < '0' || *a > '9') && + *a != '_') return false; return true; @@ -139,7 +134,7 @@ void server_process_native_message( q = memchr(p, '=', e - p); if (q) { - if (valid_user_field(p, q - p)) { + if (valid_user_field(p, q - p, false)) { size_t l; l = e - p; @@ -239,7 +234,7 @@ void server_process_native_message( k[e - p] = '='; memcpy(k + (e - p) + 1, e + 1 + sizeof(uint64_t), l); - if (valid_user_field(p, e - p)) { + if (valid_user_field(p, e - p, false)) { iovec[n].iov_base = k; iovec[n].iov_len = (e - p) + 1 + l; n++; diff --git a/src/journal/journald-native.h b/src/journal/journald-native.h index 16c09f523..bf02fee57 100644 --- a/src/journal/journald-native.h +++ b/src/journal/journald-native.h @@ -23,6 +23,13 @@ #include "journald-server.h" +/* Make sure not to make this smaller than the maximum coredump + * size. See COREDUMP_MAX in coredump.c */ +#define ENTRY_SIZE_MAX (1024*1024*768) +#define DATA_SIZE_MAX (1024*1024*768) + +bool valid_user_field(const char *p, size_t l, bool allow_protected); + void server_process_native_message(Server *s, const void *buffer, size_t buffer_size, struct ucred *ucred, struct timeval *tv, const char *label, size_t label_len); void server_process_native_file(Server *s, int fd, struct ucred *ucred, struct timeval *tv, const char *label, size_t label_len);