* networkd: condition_test() can return a negative error, handle that If a condition check fails with an error we should not consider the check successful. Fix that. We should probably also improve logging in this case, but for now, let's just unbreak this breakage. Fixes: #3236 * condition: handle unrecognized architectures nicer When we encounter a check for an architecture we don't know we should not let the condition check fail with an error code, but instead simply return false. After all the architecture might just be newer than the ones we know, in which case it's certainly not our local one. Fixes: #3236
This commit is contained in:
committed by
GitHub
parent
f15461b2b2
commit
2cb623954f
@@ -102,16 +102,16 @@ bool net_match_config(const struct ether_addr *match_mac,
|
||||
const char *dev_type,
|
||||
const char *dev_name) {
|
||||
|
||||
if (match_host && !condition_test(match_host))
|
||||
if (match_host && condition_test(match_host) <= 0)
|
||||
return false;
|
||||
|
||||
if (match_virt && !condition_test(match_virt))
|
||||
if (match_virt && condition_test(match_virt) <= 0)
|
||||
return false;
|
||||
|
||||
if (match_kernel && !condition_test(match_kernel))
|
||||
if (match_kernel && condition_test(match_kernel) <= 0)
|
||||
return false;
|
||||
|
||||
if (match_arch && !condition_test(match_arch))
|
||||
if (match_arch && condition_test(match_arch) <= 0)
|
||||
return false;
|
||||
|
||||
if (match_mac && (!dev_mac || memcmp(match_mac, dev_mac, ETH_ALEN)))
|
||||
|
||||
@@ -182,10 +182,11 @@ static int condition_test_architecture(Condition *c) {
|
||||
|
||||
if (streq(c->parameter, "native"))
|
||||
b = native_architecture();
|
||||
else
|
||||
else {
|
||||
b = architecture_from_string(c->parameter);
|
||||
if (b < 0)
|
||||
return b;
|
||||
if (b < 0) /* unknown architecture? Then it's definitely not ours */
|
||||
return false;
|
||||
}
|
||||
|
||||
return a == b;
|
||||
}
|
||||
|
||||
@@ -159,15 +159,15 @@ static void test_condition_test_architecture(void) {
|
||||
assert_se(sa);
|
||||
|
||||
condition = condition_new(CONDITION_ARCHITECTURE, sa, false, false);
|
||||
assert_se(condition_test(condition));
|
||||
assert_se(condition_test(condition) > 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_ARCHITECTURE, "garbage value", false, false);
|
||||
assert_se(condition_test(condition) < 0);
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
|
||||
condition = condition_new(CONDITION_ARCHITECTURE, sa, false, true);
|
||||
assert_se(!condition_test(condition));
|
||||
assert_se(condition_test(condition) == 0);
|
||||
condition_free(condition);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user