tmpfiles: don't warn if two identical lines are configured

https://bugzilla.redhat.com/show_bug.cgi?id=690253
This commit is contained in:
Lennart Poettering 2011-04-08 04:49:43 +02:00
parent 2dcd4d2406
commit bfe95f35bf
2 changed files with 43 additions and 9 deletions

2
TODO
View File

@ -21,8 +21,6 @@ F15:
* 0595f9a1c182a84581749823ef47c5f292e545f9 is borked, freezes shutdown
(path: after installing inotify watches, recheck file again to fix race)
* active_enter timestamps borked?
Features:
* fix alsa mixer restore to not print error when no config is stored

View File

@ -623,9 +623,39 @@ static void item_free(Item *i) {
free(i);
}
static bool item_equal(Item *a, Item *b) {
assert(a);
assert(b);
if (!streq_ptr(a->path, b->path))
return false;
if (a->type != b->type)
return false;
if (a->uid_set != b->uid_set ||
(a->uid_set && a->uid != b->uid))
return false;
if (a->gid_set != b->gid_set ||
(a->gid_set && a->gid != b->gid))
return false;
if (a->mode_set != b->mode_set ||
(a->mode_set && a->mode != b->mode))
return false;
if (a->age_set != b->age_set ||
(a->age_set && a->age != b->age))
return false;
return true;
}
static int parse_line(const char *fname, unsigned line, const char *buffer) {
Item *i;
Item *i, *existing;
char *mode = NULL, *user = NULL, *group = NULL, *age = NULL;
Hashmap *h;
int r;
assert(fname);
@ -742,13 +772,19 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
i->age_set = true;
}
if ((r = hashmap_put(needs_glob(i->type) ? globs : items, i->path, i)) < 0) {
if (r == -EEXIST) {
log_warning("Two or more conflicting lines for %s configured, ignoring.", i->path);
r = 0;
goto finish;
}
h = needs_glob(i->type) ? globs : items;
if ((existing = hashmap_get(h, i->path))) {
/* Two identical items are fine */
if (!item_equal(existing, i))
log_warning("Two or more conflicting lines for %s configured, ignoring.", i->path);
r = 0;
goto finish;
}
if ((r = hashmap_put(h, i->path, i)) < 0) {
log_error("Failed to insert item %s: %s", i->path, strerror(-r));
goto finish;
}