Merge pull request #5958 from keszybz/explicit-log-errno

Use explicit errno in log calls
This commit is contained in:
Lennart Poettering 2017-05-22 10:12:18 +02:00 committed by GitHub
commit 401a38e770
20 changed files with 172 additions and 69 deletions

View file

@ -50,7 +50,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(context_t, context_free);
static int cached_use = -1;
static struct selabel_handle *label_hnd = NULL;
#define log_enforcing(...) log_full(security_getenforce() == 1 ? LOG_ERR : LOG_DEBUG, __VA_ARGS__)
#define log_enforcing(...) log_full_errno(security_getenforce() == 1 ? LOG_ERR : LOG_DEBUG, errno, __VA_ARGS__)
#endif
bool mac_selinux_use(void) {

View file

@ -555,15 +555,29 @@ void dual_timestamp_serialize(FILE *f, const char *name, dual_timestamp *t) {
int dual_timestamp_deserialize(const char *value, dual_timestamp *t) {
uint64_t a, b;
int r, pos;
assert(value);
assert(t);
if (sscanf(value, "%" PRIu64 "%" PRIu64, &a, &b) != 2) {
log_debug("Failed to parse dual timestamp value \"%s\": %m", value);
pos = strspn(value, WHITESPACE);
if (value[pos] == '-')
return -EINVAL;
pos += strspn(value + pos, DIGITS);
pos += strspn(value + pos, WHITESPACE);
if (value[pos] == '-')
return -EINVAL;
r = sscanf(value, "%" PRIu64 "%" PRIu64 "%n", &a, &b, &pos);
if (r != 2) {
log_debug("Failed to parse dual timestamp value \"%s\".", value);
return -EINVAL;
}
if (value[pos] != '\0')
/* trailing garbage */
return -EINVAL;
t->realtime = a;
t->monotonic = b;

View file

@ -398,8 +398,7 @@ static int whitelist_major(const char *path, const char *name, char type, const
return 0;
fail:
log_warning_errno(errno, "Failed to read /proc/devices: %m");
return -errno;
return log_warning_errno(errno, "Failed to read /proc/devices: %m");
}
static bool cgroup_context_has_cpu_weight(CGroupContext *c) {

View file

@ -536,7 +536,7 @@ static int config_parse_cpu_affinity2(
return ncpus;
if (sched_setaffinity(0, CPU_ALLOC_SIZE(ncpus), c) < 0)
log_warning("Failed to set CPU affinity: %m");
log_warning_errno(errno, "Failed to set CPU affinity: %m");
return 0;
}

View file

@ -355,7 +355,7 @@ static int raw_import_process(RawImport *i) {
}
if (l == 0) {
if (i->compress.type == IMPORT_COMPRESS_UNKNOWN) {
log_error("Premature end of file: %m");
log_error("Premature end of file.");
r = -EIO;
goto finish;
}
@ -369,7 +369,7 @@ static int raw_import_process(RawImport *i) {
if (i->compress.type == IMPORT_COMPRESS_UNKNOWN) {
r = import_uncompress_detect(&i->compress, i->buffer, i->buffer_size);
if (r < 0) {
log_error("Failed to detect file compression: %m");
log_error_errno(r, "Failed to detect file compression: %m");
goto finish;
}
if (r == 0) /* Need more data */

View file

@ -284,7 +284,7 @@ static int tar_import_process(TarImport *i) {
}
if (l == 0) {
if (i->compress.type == IMPORT_COMPRESS_UNKNOWN) {
log_error("Premature end of file: %m");
log_error("Premature end of file.");
r = -EIO;
goto finish;
}
@ -298,7 +298,7 @@ static int tar_import_process(TarImport *i) {
if (i->compress.type == IMPORT_COMPRESS_UNKNOWN) {
r = import_uncompress_detect(&i->compress, i->buffer, i->buffer_size);
if (r < 0) {
log_error("Failed to detect file compression: %m");
log_error_errno(r, "Failed to detect file compression: %m");
goto finish;
}
if (r == 0) /* Need more data */

View file

@ -1655,7 +1655,8 @@ static int client_receive_message_udp(
if (errno == EAGAIN || errno == EINTR)
return 0;
return log_dhcp_client_errno(client, errno, "Could not receive message from UDP socket: %m");
return log_dhcp_client_errno(client, errno,
"Could not receive message from UDP socket: %m");
}
if ((size_t) len < sizeof(DHCPMessage)) {
log_dhcp_client(client, "Too small to be a DHCP message: ignoring");
@ -1748,9 +1749,8 @@ static int client_receive_message_raw(
if (errno == EAGAIN || errno == EINTR)
return 0;
log_dhcp_client(client, "Could not receive message from raw socket: %m");
return -errno;
return log_dhcp_client_errno(client, errno,
"Could not receive message from raw socket: %m");
} else if ((size_t)len < sizeof(DHCPPacket))
return 0;

View file

@ -525,8 +525,6 @@ int main(int argc, char *argv[]) {
void *p;
int r, q;
zero(c);
c.automatic_integer_property = 4711;
assert_se(c.automatic_string_property = strdup("dudeldu"));

View file

@ -631,10 +631,8 @@ static int enumerator_scan_devices_tag(sd_device_enumerator *enumerator, const c
if (!dir) {
if (errno == ENOENT)
return 0;
else {
log_error("sd-device-enumerator: could not open tags directory %s: %m", path);
return -errno;
}
else
return log_error_errno(errno, "sd-device-enumerator: could not open tags directory %s: %m", path);
}
/* TODO: filter away subsystems? */
@ -758,10 +756,8 @@ static int parent_crawl_children(sd_device_enumerator *enumerator, const char *p
int r = 0;
dir = opendir(path);
if (!dir) {
log_debug("sd-device-enumerate: could not open parent directory %s: %m", path);
return -errno;
}
if (!dir)
return log_debug_errno(errno, "sd-device-enumerate: could not open parent directory %s: %m", path);
FOREACH_DIRENT_ALL(dent, dir, return -errno) {
_cleanup_free_ char *child = NULL;

View file

@ -195,8 +195,7 @@ int device_set_syspath(sd_device *device, const char *_syspath, bool verify) {
/* this is not a valid device */
return -ENODEV;
log_debug("sd-device: %s does not have an uevent file: %m", syspath);
return -errno;
return log_debug_errno(errno, "sd-device: %s does not have an uevent file: %m", syspath);
}
} else {
/* everything else just needs to be a directory */

View file

@ -681,7 +681,7 @@ retry:
udev_device = udev_device_new_from_nulstr(udev_monitor->udev, &buf.raw[bufpos], buflen - bufpos);
if (!udev_device) {
log_debug("could not create device: %m");
log_debug_errno(errno, "could not create device: %m");
return NULL;
}

View file

@ -2029,7 +2029,7 @@ static int determine_names(void) {
if (r < 0)
return log_error_errno(r, "Failed to find image for machine '%s': %m", arg_machine);
if (r == 0) {
log_error("No image for machine '%s': %m", arg_machine);
log_error("No image for machine '%s'.", arg_machine);
return -ENOENT;
}

View file

@ -3045,7 +3045,7 @@ int unit_file_get_list(
if (errno == ENOENT)
continue;
if (IN_SET(errno, ENOTDIR, EACCES)) {
log_debug("Failed to open \"%s\": %m", *i);
log_debug_errno(errno, "Failed to open \"%s\": %m", *i);
continue;
}

View file

@ -115,7 +115,7 @@ int main(int argc, char *argv[]) {
in_fd = SD_LISTEN_FDS_START;
out_fd = SD_LISTEN_FDS_START;
} else {
log_error("Illegal number of file descriptors passed\n");
log_error("Illegal number of file descriptors passed.");
goto finish;
}
@ -190,7 +190,7 @@ int main(int argc, char *argv[]) {
}
for (;;) {
_cleanup_(sd_bus_message_unrefp)sd_bus_message *m = NULL;
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
int events_a, events_b, fd;
uint64_t timeout_a, timeout_b, t;
struct timespec _ts, *ts;
@ -292,7 +292,7 @@ int main(int argc, char *argv[]) {
r = ppoll(p, ELEMENTSOF(p), ts, NULL);
}
if (r < 0) {
log_error("ppoll() failed: %m");
log_error_errno(errno, "ppoll() failed: %m");
goto finish;
}
}

View file

@ -31,7 +31,7 @@ int main(int argc, char* argv[]) {
r = loopback_setup();
if (r < 0)
log_error("loopback: %m");
log_error_errno(r, "loopback: %m");
return r >= 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}

View file

@ -105,7 +105,7 @@ static int print_gaih_addrtuples(const struct gaih_addrtuple *tuples) {
goto numerical_index;
if (if_indextoname(it->scopeid, ifname) == NULL) {
log_warning("if_indextoname(%d) failed: %m", it->scopeid);
log_warning_errno(errno, "if_indextoname(%d) failed: %m", it->scopeid);
numerical_index:
xsprintf(ifname, "%i", it->scopeid);
};

View file

@ -395,6 +395,9 @@ static void test_safe_atou16(void) {
r = safe_atou16("junk", &l);
assert_se(r == -EINVAL);
r = safe_atou16("123x", &l);
assert_se(r == -EINVAL);
}
static void test_safe_atoi16(void) {
@ -425,6 +428,70 @@ static void test_safe_atoi16(void) {
r = safe_atoi16("junk", &l);
assert_se(r == -EINVAL);
r = safe_atoi16("123x", &l);
assert_se(r == -EINVAL);
}
static void test_safe_atou64(void) {
int r;
uint64_t l;
r = safe_atou64("12345", &l);
assert_se(r == 0);
assert_se(l == 12345);
r = safe_atou64(" 12345", &l);
assert_se(r == 0);
assert_se(l == 12345);
r = safe_atou64("18446744073709551617", &l);
assert_se(r == -ERANGE);
r = safe_atou64("-1", &l);
assert_se(r == -ERANGE);
r = safe_atou64(" -1", &l);
assert_se(r == -ERANGE);
r = safe_atou64("junk", &l);
assert_se(r == -EINVAL);
r = safe_atou64("123x", &l);
assert_se(r == -EINVAL);
}
static void test_safe_atoi64(void) {
int r;
int64_t l;
r = safe_atoi64("-12345", &l);
assert_se(r == 0);
assert_se(l == -12345);
r = safe_atoi64(" -12345", &l);
assert_se(r == 0);
assert_se(l == -12345);
r = safe_atoi64("32767", &l);
assert_se(r == 0);
assert_se(l == 32767);
r = safe_atoi64(" 32767", &l);
assert_se(r == 0);
assert_se(l == 32767);
r = safe_atoi64("9223372036854775813", &l);
assert_se(r == -ERANGE);
r = safe_atoi64("-9223372036854775813", &l);
assert_se(r == -ERANGE);
r = safe_atoi64("junk", &l);
assert_se(r == -EINVAL);
r = safe_atoi64("123x", &l);
assert_se(r == -EINVAL);
}
static void test_safe_atod(void) {
@ -538,6 +605,8 @@ int main(int argc, char *argv[]) {
test_safe_atolli();
test_safe_atou16();
test_safe_atoi16();
test_safe_atou64();
test_safe_atoi64();
test_safe_atod();
test_parse_percent();
test_parse_percent_unbounded();

View file

@ -273,6 +273,43 @@ static void test_format_timestamp_utc(void) {
test_format_timestamp_utc_one(USEC_INFINITY, NULL);
}
static void test_dual_timestamp_deserialize(void) {
int r;
dual_timestamp t;
r = dual_timestamp_deserialize("1234 5678", &t);
assert_se(r == 0);
assert_se(t.realtime == 1234);
assert_se(t.monotonic == 5678);
r = dual_timestamp_deserialize("1234x 5678", &t);
assert_se(r == -EINVAL);
r = dual_timestamp_deserialize("1234 5678y", &t);
assert_se(r == -EINVAL);
r = dual_timestamp_deserialize("-1234 5678", &t);
assert_se(r == -EINVAL);
r = dual_timestamp_deserialize("1234 -5678", &t);
assert_se(r == -EINVAL);
/* Check that output wasn't modified. */
assert_se(t.realtime == 1234);
assert_se(t.monotonic == 5678);
r = dual_timestamp_deserialize("+123 567", &t);
assert_se(r == 0);
assert_se(t.realtime == 123);
assert_se(t.monotonic == 567);
/* Check that we get "infinity" on overflow. */
r = dual_timestamp_deserialize("18446744073709551617 0", &t);
assert_se(r == 0);
assert_se(t.realtime == USEC_INFINITY);
assert_se(t.monotonic == 0);
}
int main(int argc, char *argv[]) {
uintmax_t x;
@ -288,6 +325,7 @@ int main(int argc, char *argv[]) {
test_usec_sub();
test_format_timestamp();
test_format_timestamp_utc();
test_dual_timestamp_deserialize();
/* Ensure time_t is signed */
assert_cc((time_t) -1 < (time_t) 1);

View file

@ -724,10 +724,9 @@ static int path_set_xattrs(Item *i, const char *path) {
n = strlen(*value);
log_debug("Setting extended attribute '%s=%s' on %s.", *name, *value, path);
if (lsetxattr(path, *name, *value, n, 0) < 0) {
log_error("Setting extended attribute %s=%s on %s failed: %m", *name, *value, path);
return -errno;
}
if (lsetxattr(path, *name, *value, n, 0) < 0)
return log_error_errno(errno, "Setting extended attribute %s=%s on %s failed: %m",
*name, *value, path);
}
return 0;
}

View file

@ -474,6 +474,13 @@ static int add_token(struct udev_rules *rules, struct token *token) {
return 0;
}
static void log_unknown_owner(int error, const char *entity, const char *owner) {
if (IN_SET(abs(error), ENOENT, ESRCH))
log_error("Specified %s '%s' unknown", entity, owner);
else
log_error_errno(error, "Error resolving %s '%s': %m", entity, owner);
}
static uid_t add_uid(struct udev_rules *rules, const char *owner) {
unsigned int i;
uid_t uid = 0;
@ -489,12 +496,8 @@ static uid_t add_uid(struct udev_rules *rules, const char *owner) {
}
}
r = get_user_creds(&owner, &uid, NULL, NULL, NULL);
if (r < 0) {
if (r == -ENOENT || r == -ESRCH)
log_error("specified user '%s' unknown", owner);
else
log_error_errno(r, "error resolving user '%s': %m", owner);
}
if (r < 0)
log_unknown_owner(r, "user", owner);
/* grow buffer if needed */
if (rules->uids_cur+1 >= rules->uids_max) {
@ -536,12 +539,8 @@ static gid_t add_gid(struct udev_rules *rules, const char *group) {
}
}
r = get_group_creds(&group, &gid);
if (r < 0) {
if (r == -ENOENT || r == -ESRCH)
log_error("specified group '%s' unknown", group);
else
log_error_errno(r, "error resolving group '%s': %m", group);
}
if (r < 0)
log_unknown_owner(r, "group", group);
/* grow buffer if needed */
if (rules->gids_cur+1 >= rules->gids_max) {
@ -814,7 +813,7 @@ static const char *get_key_attribute(struct udev *udev, char *str) {
attr++;
pos = strchr(attr, '}');
if (pos == NULL) {
log_error("missing closing brace for format");
log_error("Missing closing brace for format");
return NULL;
}
pos[0] = '\0';
@ -2119,11 +2118,7 @@ void udev_rules_apply_to_event(struct udev_rules *rules,
event->owner_set = true;
r = get_user_creds(&ow, &event->uid, NULL, NULL, NULL);
if (r < 0) {
if (r == -ENOENT || r == -ESRCH)
log_error("specified user '%s' unknown", owner);
else
log_error_errno(r, "error resolving user '%s': %m", owner);
log_unknown_owner(r, "user", owner);
event->uid = 0;
}
log_debug("OWNER %u %s:%u",
@ -2145,11 +2140,7 @@ void udev_rules_apply_to_event(struct udev_rules *rules,
event->group_set = true;
r = get_group_creds(&gr, &event->gid);
if (r < 0) {
if (r == -ENOENT || r == -ESRCH)
log_error("specified group '%s' unknown", group);
else
log_error_errno(r, "error resolving group '%s': %m", group);
log_unknown_owner(r, "group", group);
event->gid = 0;
}
log_debug("GROUP %u %s:%u",
@ -2536,19 +2527,19 @@ int udev_rules_apply_static_dev_perms(struct udev_rules *rules) {
}
if (mode != (stats.st_mode & 01777)) {
r = chmod(device_node, mode);
if (r < 0) {
log_error("failed to chmod '%s' %#o", device_node, mode);
return -errno;
} else
if (r < 0)
return log_error_errno(errno, "Failed to chmod '%s' %#o: %m",
device_node, mode);
else
log_debug("chmod '%s' %#o", device_node, mode);
}
if ((uid != 0 && uid != stats.st_uid) || (gid != 0 && gid != stats.st_gid)) {
r = chown(device_node, uid, gid);
if (r < 0) {
log_error("failed to chown '%s' %u %u ", device_node, uid, gid);
return -errno;
} else
if (r < 0)
return log_error_errno(errno, "Failed to chown '%s' %u %u: %m",
device_node, uid, gid);
else
log_debug("chown '%s' %u %u", device_node, uid, gid);
}