tmpfiles: don't warn if two identical lines are configured
https://bugzilla.redhat.com/show_bug.cgi?id=690253
This commit is contained in:
parent
2dcd4d2406
commit
bfe95f35bf
2
TODO
2
TODO
|
@ -21,8 +21,6 @@ F15:
|
||||||
* 0595f9a1c182a84581749823ef47c5f292e545f9 is borked, freezes shutdown
|
* 0595f9a1c182a84581749823ef47c5f292e545f9 is borked, freezes shutdown
|
||||||
(path: after installing inotify watches, recheck file again to fix race)
|
(path: after installing inotify watches, recheck file again to fix race)
|
||||||
|
|
||||||
* active_enter timestamps borked?
|
|
||||||
|
|
||||||
Features:
|
Features:
|
||||||
|
|
||||||
* fix alsa mixer restore to not print error when no config is stored
|
* fix alsa mixer restore to not print error when no config is stored
|
||||||
|
|
|
@ -623,9 +623,39 @@ static void item_free(Item *i) {
|
||||||
free(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) {
|
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;
|
char *mode = NULL, *user = NULL, *group = NULL, *age = NULL;
|
||||||
|
Hashmap *h;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(fname);
|
assert(fname);
|
||||||
|
@ -742,13 +772,19 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
|
||||||
i->age_set = true;
|
i->age_set = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((r = hashmap_put(needs_glob(i->type) ? globs : items, i->path, i)) < 0) {
|
h = needs_glob(i->type) ? globs : items;
|
||||||
if (r == -EEXIST) {
|
|
||||||
log_warning("Two or more conflicting lines for %s configured, ignoring.", i->path);
|
|
||||||
r = 0;
|
|
||||||
goto finish;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
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));
|
log_error("Failed to insert item %s: %s", i->path, strerror(-r));
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue