chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
journal-file: protect against alloca(0)
[elogind.git]
/
src
/
journal
/
sd-journal.c
diff --git
a/src/journal/sd-journal.c
b/src/journal/sd-journal.c
index b55cf37e50d93c609b0726e065d5bab4d7a990c2..bb116df0474a568163303010ee06c63a4b2192e8 100644
(file)
--- a/
src/journal/sd-journal.c
+++ b/
src/journal/sd-journal.c
@@
-1466,7
+1466,7
@@
static int add_directory(sd_journal *j, const char *prefix, const char *dirname)
return 0;
}
return 0;
}
-static int add_root_directory(sd_journal *j, const char *p
, const char *prefix
) {
+static int add_root_directory(sd_journal *j, const char *p) {
_cleanup_closedir_ DIR *d = NULL;
Directory *m;
int r;
_cleanup_closedir_ DIR *d = NULL;
Directory *m;
int r;
@@
-1478,8
+1478,8
@@
static int add_root_directory(sd_journal *j, const char *p, const char *prefix)
!path_startswith(p, "/run"))
return -EINVAL;
!path_startswith(p, "/run"))
return -EINVAL;
- if (prefix)
- p = strappenda(prefix, p);
+ if (
j->
prefix)
+ p = strappenda(
j->
prefix, p);
d = opendir(p);
if (!d)
d = opendir(p);
if (!d)
@@
-1580,7
+1580,7
@@
static int remove_directory(sd_journal *j, Directory *d) {
return 0;
}
return 0;
}
-static int add_search_paths(sd_journal *j
, const char *prefix
) {
+static int add_search_paths(sd_journal *j) {
int r;
const char search_paths[] =
"/run/log/journal\0"
int r;
const char search_paths[] =
"/run/log/journal\0"
@@
-1593,7
+1593,7
@@
static int add_search_paths(sd_journal *j, const char *prefix) {
* what's actually accessible, and ignore the rest. */
NULSTR_FOREACH(p, search_paths) {
* what's actually accessible, and ignore the rest. */
NULSTR_FOREACH(p, search_paths) {
- r = add_root_directory(j, p
, prefix
);
+ r = add_root_directory(j, p);
if (r < 0 && r != -ENOENT) {
r = set_put_error(j, r);
if (r < 0)
if (r < 0 && r != -ENOENT) {
r = set_put_error(j, r);
if (r < 0)
@@
-1616,14
+1616,14
@@
static int add_current_paths(sd_journal *j) {
* treat them as fatal. */
HASHMAP_FOREACH(f, j->files, i) {
* treat them as fatal. */
HASHMAP_FOREACH(f, j->files, i) {
- int r;
_cleanup_free_ char *dir;
_cleanup_free_ char *dir;
+ int r;
dir = dirname_malloc(f->path);
if (!dir)
return -ENOMEM;
dir = dirname_malloc(f->path);
if (!dir)
return -ENOMEM;
- r = add_root_directory(j, dir
, NULL
);
+ r = add_root_directory(j, dir);
if (r < 0) {
set_put_error(j, r);
return r;
if (r < 0) {
set_put_error(j, r);
return r;
@@
-1694,7
+1694,7
@@
_public_ int sd_journal_open(sd_journal **ret, int flags) {
if (!j)
return -ENOMEM;
if (!j)
return -ENOMEM;
- r = add_search_paths(j
, NULL
);
+ r = add_search_paths(j);
if (r < 0)
goto fail;
if (r < 0)
goto fail;
@@
-1734,7
+1734,10
@@
_public_ int sd_journal_open_container(sd_journal **ret, const char *machine, in
if (!j)
return -ENOMEM;
if (!j)
return -ENOMEM;
- r = add_search_paths(j, root);
+ j->prefix = root;
+ root = NULL;
+
+ r = add_search_paths(j);
if (r < 0)
goto fail;
if (r < 0)
goto fail;
@@
-1758,7
+1761,7
@@
_public_ int sd_journal_open_directory(sd_journal **ret, const char *path, int f
if (!j)
return -ENOMEM;
if (!j)
return -ENOMEM;
- r = add_root_directory(j, path
, NULL
);
+ r = add_root_directory(j, path);
if (r < 0) {
set_put_error(j, r);
goto fail;
if (r < 0) {
set_put_error(j, r);
goto fail;
@@
-1836,6
+1839,7
@@
_public_ void sd_journal_close(sd_journal *j) {
}
free(j->path);
}
free(j->path);
+ free(j->prefix);
free(j->unique_field);
set_free(j->errors);
free(j);
free(j->unique_field);
set_free(j->errors);
free(j);
@@
-2121,9
+2125,9
@@
_public_ int sd_journal_get_fd(sd_journal *j) {
if (j->no_new_files)
r = add_current_paths(j);
else if (j->path)
if (j->no_new_files)
r = add_current_paths(j);
else if (j->path)
- r = add_root_directory(j, j->path
, NULL
);
+ r = add_root_directory(j, j->path);
else
else
- r = add_search_paths(j
, NULL
);
+ r = add_search_paths(j);
if (r < 0)
return r;
if (r < 0)
return r;