From bbe804325ec04ac0a4255944afd3c8897125f678 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 6 Mar 2019 11:38:28 +0100 Subject: [PATCH 1/7] catalog: don't make catalog_entry_lang() clobber output params on failure A minor fix to bring this in-line with our coding style --- src/journal/catalog.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/journal/catalog.c b/src/journal/catalog.c index 4062f12c2d..abf725115c 100644 --- a/src/journal/catalog.c +++ b/src/journal/catalog.c @@ -209,9 +209,15 @@ int catalog_file_lang(const char* filename, char **lang) { return 1; } -static int catalog_entry_lang(const char* filename, int line, - const char* t, const char* deflang, char **lang) { +static int catalog_entry_lang( + const char* filename, + unsigned line, + const char* t, + const char* deflang, + char **ret) { + size_t c; + char *z; c = strlen(t); if (c < 2) @@ -233,10 +239,11 @@ static int catalog_entry_lang(const char* filename, int line, filename, line); } - *lang = strdup(t); - if (!*lang) - return -ENOMEM; + z = strdup(t); + if (!z) + return -ENOMEM; + *ret = z; return 0; } From 0640d48afbb2db5f07aba98d795c89e450b16e28 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 6 Mar 2019 11:39:11 +0100 Subject: [PATCH 2/7] catalog: be a bit less aggressive with line breaking. After all 109ch is what we going for --- src/journal/catalog.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/journal/catalog.c b/src/journal/catalog.c index abf725115c..5176b6013d 100644 --- a/src/journal/catalog.c +++ b/src/journal/catalog.c @@ -222,21 +222,18 @@ static int catalog_entry_lang( c = strlen(t); if (c < 2) return log_error_errno(SYNTHETIC_ERRNO(EINVAL), - "[%s:%u] Language too short.", - filename, line); + "[%s:%u] Language too short.", filename, line); if (c > 31) return log_error_errno(SYNTHETIC_ERRNO(EINVAL), - "[%s:%u] language too long.", filename, - line); + "[%s:%u] language too long.", filename, line); if (deflang) { if (streq(t, deflang)) { - log_warning("[%s:%u] language specified unnecessarily", - filename, line); + log_warning("[%s:%u] language specified unnecessarily", filename, line); return 0; - } else - log_warning("[%s:%u] language differs from default for file", - filename, line); + } + + log_warning("[%s:%u] language differs from default for file", filename, line); } z = strdup(t); From 3f1e2714a44d77493cf5d0d961d150ef6d3c2323 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 6 Mar 2019 11:40:31 +0100 Subject: [PATCH 3/7] catalog: let's use mkdir_parents() and use same mode as tmpfiles.d for this dir let's use mkdir_parents() (because its shorter), and 0755 as access mode, so that things have the access mode tmpfiles.d also suggests. Prompted by: #11903 --- src/journal/catalog.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/journal/catalog.c b/src/journal/catalog.c index 5176b6013d..efe86bdef4 100644 --- a/src/journal/catalog.c +++ b/src/journal/catalog.c @@ -371,21 +371,21 @@ int catalog_import_file(Hashmap *h, const char *path) { return 0; } -static int64_t write_catalog(const char *database, struct strbuf *sb, - CatalogItem *items, size_t n) { - CatalogHeader header; +static int64_t write_catalog( + const char *database, + struct strbuf *sb, + CatalogItem *items, + size_t n) { + _cleanup_fclose_ FILE *w = NULL; - int r; - _cleanup_free_ char *d, *p = NULL; + _cleanup_free_ char *p = NULL; + CatalogHeader header; size_t k; + int r; - d = dirname_malloc(database); - if (!d) - return log_oom(); - - r = mkdir_p(d, 0775); + r = mkdir_parents(database, 0755); if (r < 0) - return log_error_errno(r, "Recursive mkdir %s: %m", d); + return log_error_errno(r, "Failed to create parent directories of %s: %m", database); r = fopen_temporary(database, &w, &p); if (r < 0) From 5432d8a187fb0ffab0eb3095b9f898270dab82ef Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 6 Mar 2019 11:41:59 +0100 Subject: [PATCH 4/7] catalog: use structured initialization more --- src/journal/catalog.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/journal/catalog.c b/src/journal/catalog.c index efe86bdef4..af9e9191b1 100644 --- a/src/journal/catalog.c +++ b/src/journal/catalog.c @@ -33,7 +33,7 @@ const char * const catalog_file_dirs[] = { NULL }; -#define CATALOG_SIGNATURE (uint8_t[]) { 'R', 'H', 'H', 'H', 'K', 'S', 'L', 'P' } +#define CATALOG_SIGNATURE { 'R', 'H', 'H', 'H', 'K', 'S', 'L', 'P' } typedef struct CatalogHeader { uint8_t signature[8]; /* "RHHHKSLP" */ @@ -392,11 +392,12 @@ static int64_t write_catalog( return log_error_errno(r, "Failed to open database for writing: %s: %m", database); - zero(header); - memcpy(header.signature, CATALOG_SIGNATURE, sizeof(header.signature)); - header.header_size = htole64(ALIGN_TO(sizeof(CatalogHeader), 8)); - header.catalog_item_size = htole64(sizeof(CatalogItem)); - header.n_items = htole64(n); + header = (CatalogHeader) { + .signature = CATALOG_SIGNATURE, + .header_size = htole64(ALIGN_TO(sizeof(CatalogHeader), 8)), + .catalog_item_size = htole64(sizeof(CatalogItem)), + .n_items = htole64(n), + }; r = -EIO; @@ -537,7 +538,7 @@ static int open_mmap(const char *database, int *_fd, struct stat *_st, void **_p } h = p; - if (memcmp(h->signature, CATALOG_SIGNATURE, sizeof(h->signature)) != 0 || + if (memcmp(h->signature, (const uint8_t[]) CATALOG_SIGNATURE, sizeof(h->signature)) != 0 || le64toh(h->header_size) < sizeof(CatalogHeader) || le64toh(h->catalog_item_size) < sizeof(CatalogItem) || h->incompatible_flags != 0 || From 3d477d6101fa047b146607b4f0996a30bd810386 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 6 Mar 2019 11:42:12 +0100 Subject: [PATCH 5/7] catalog: (void)ify all things --- src/journal/catalog.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/journal/catalog.c b/src/journal/catalog.c index af9e9191b1..0106538772 100644 --- a/src/journal/catalog.c +++ b/src/journal/catalog.c @@ -425,7 +425,7 @@ static int64_t write_catalog( goto error; } - fchmod(fileno(w), 0644); + (void) fchmod(fileno(w), 0644); if (rename(p, database) < 0) { r = log_error_errno(errno, "rename (%s -> %s) failed: %m", p, database); From 0c0e87fcd5cb02173290a1554073d51879374ff9 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 6 Mar 2019 11:42:35 +0100 Subject: [PATCH 6/7] catalog: _cleanup_close_ is your friend --- src/journal/catalog.c | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/journal/catalog.c b/src/journal/catalog.c index 0106538772..ccee950d1d 100644 --- a/src/journal/catalog.c +++ b/src/journal/catalog.c @@ -508,10 +508,10 @@ int catalog_update(const char* database, const char* root, const char* const* di } static int open_mmap(const char *database, int *_fd, struct stat *_st, void **_p) { + _cleanup_close_ int fd = -1; const CatalogHeader *h; - int fd; - void *p; struct stat st; + void *p; assert(_fd); assert(_st); @@ -521,21 +521,15 @@ static int open_mmap(const char *database, int *_fd, struct stat *_st, void **_p if (fd < 0) return -errno; - if (fstat(fd, &st) < 0) { - safe_close(fd); + if (fstat(fd, &st) < 0) return -errno; - } - if (st.st_size < (off_t) sizeof(CatalogHeader)) { - safe_close(fd); + if (st.st_size < (off_t) sizeof(CatalogHeader)) return -EINVAL; - } p = mmap(NULL, PAGE_ALIGN(st.st_size), PROT_READ, MAP_SHARED, fd, 0); - if (p == MAP_FAILED) { - safe_close(fd); + if (p == MAP_FAILED) return -errno; - } h = p; if (memcmp(h->signature, (const uint8_t[]) CATALOG_SIGNATURE, sizeof(h->signature)) != 0 || @@ -544,12 +538,11 @@ static int open_mmap(const char *database, int *_fd, struct stat *_st, void **_p h->incompatible_flags != 0 || le64toh(h->n_items) <= 0 || st.st_size < (off_t) (le64toh(h->header_size) + le64toh(h->catalog_item_size) * le64toh(h->n_items))) { - safe_close(fd); munmap(p, st.st_size); return -EBADMSG; } - *_fd = fd; + *_fd = TAKE_FD(fd); *_st = st; *_p = p; From 5468d9af7740e7e748bfa1892fdbcb915c601bc1 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 7 Mar 2019 15:06:37 +0100 Subject: [PATCH 7/7] random-seed: don't use "label" version of mkdir_parents() We don't load the selinux label database anyway, hence this is not going to do anything at all. Let's simplify this hence and drop the explicit request. Also note that today SELinux can take the filename into account when automatically deducing the label for a new file, hence even if this code actually would have done something it is redundant today. --- src/random-seed/random-seed.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/random-seed/random-seed.c b/src/random-seed/random-seed.c index 0c5f329756..71c2dba431 100644 --- a/src/random-seed/random-seed.c +++ b/src/random-seed/random-seed.c @@ -51,7 +51,7 @@ static int run(int argc, char *argv[]) { if (buf_size < POOL_SIZE_MIN) buf_size = POOL_SIZE_MIN; - r = mkdir_parents_label(RANDOM_SEED, 0755); + r = mkdir_parents(RANDOM_SEED, 0755); if (r < 0) return log_error_errno(r, "Failed to create directory " RANDOM_SEED_DIR ": %m");