mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-06 13:17:44 +03:00
Merge pull request #1426 from poettering/log-syntax
logging fixes and more
This commit is contained in:
commit
47c67a5042
@ -780,6 +780,8 @@ libbasic_la_SOURCES = \
|
||||
src/basic/refcnt.h \
|
||||
src/basic/util.c \
|
||||
src/basic/util.h \
|
||||
src/basic/cpu-set-util.c \
|
||||
src/basic/cpu-set-util.h \
|
||||
src/basic/lockfile-util.c \
|
||||
src/basic/lockfile-util.h \
|
||||
src/basic/path-util.c \
|
||||
|
105
src/basic/cpu-set-util.c
Normal file
105
src/basic/cpu-set-util.c
Normal file
@ -0,0 +1,105 @@
|
||||
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
||||
|
||||
/***
|
||||
This file is part of systemd.
|
||||
|
||||
Copyright 2010-2015 Lennart Poettering
|
||||
Copyright 2015 Filipe Brandenburger
|
||||
|
||||
systemd is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
systemd is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include "util.h"
|
||||
#include "cpu-set-util.h"
|
||||
|
||||
cpu_set_t* cpu_set_malloc(unsigned *ncpus) {
|
||||
cpu_set_t *c;
|
||||
unsigned n = 1024;
|
||||
|
||||
/* Allocates the cpuset in the right size */
|
||||
|
||||
for (;;) {
|
||||
c = CPU_ALLOC(n);
|
||||
if (!c)
|
||||
return NULL;
|
||||
|
||||
if (sched_getaffinity(0, CPU_ALLOC_SIZE(n), c) >= 0) {
|
||||
CPU_ZERO_S(CPU_ALLOC_SIZE(n), c);
|
||||
|
||||
if (ncpus)
|
||||
*ncpus = n;
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
CPU_FREE(c);
|
||||
|
||||
if (errno != EINVAL)
|
||||
return NULL;
|
||||
|
||||
n *= 2;
|
||||
}
|
||||
}
|
||||
|
||||
int parse_cpu_set_and_warn(
|
||||
const char *rvalue,
|
||||
cpu_set_t **cpu_set,
|
||||
const char *unit,
|
||||
const char *filename,
|
||||
unsigned line,
|
||||
const char *lvalue) {
|
||||
|
||||
const char *whole_rvalue = rvalue;
|
||||
_cleanup_cpu_free_ cpu_set_t *c = NULL;
|
||||
unsigned ncpus = 0;
|
||||
|
||||
assert(lvalue);
|
||||
assert(rvalue);
|
||||
|
||||
for (;;) {
|
||||
_cleanup_free_ char *word = NULL;
|
||||
unsigned cpu;
|
||||
int r;
|
||||
|
||||
r = extract_first_word(&rvalue, &word, WHITESPACE, EXTRACT_QUOTES);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Invalid value for %s: %s", lvalue, whole_rvalue);
|
||||
return r;
|
||||
}
|
||||
if (r == 0)
|
||||
break;
|
||||
|
||||
if (!c) {
|
||||
c = cpu_set_malloc(&ncpus);
|
||||
if (!c)
|
||||
return log_oom();
|
||||
}
|
||||
|
||||
r = safe_atou(word, &cpu);
|
||||
if (r < 0 || cpu >= ncpus) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse CPU affinity '%s'", rvalue);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
CPU_SET_S(cpu, CPU_ALLOC_SIZE(ncpus), c);
|
||||
}
|
||||
|
||||
/* On success, sets *cpu_set and returns ncpus for the system. */
|
||||
if (c) {
|
||||
*cpu_set = c;
|
||||
c = NULL;
|
||||
}
|
||||
|
||||
return (int) ncpus;
|
||||
}
|
34
src/basic/cpu-set-util.h
Normal file
34
src/basic/cpu-set-util.h
Normal file
@ -0,0 +1,34 @@
|
||||
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/***
|
||||
This file is part of systemd.
|
||||
|
||||
Copyright 2010-2015 Lennart Poettering
|
||||
Copyright 2015 Filipe Brandenburger
|
||||
|
||||
systemd is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
systemd is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include <sched.h>
|
||||
|
||||
#include "macro.h"
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(cpu_set_t*, CPU_FREE);
|
||||
#define _cleanup_cpu_free_ _cleanup_(CPU_FREEp)
|
||||
|
||||
cpu_set_t* cpu_set_malloc(unsigned *ncpus);
|
||||
|
||||
int parse_cpu_set_and_warn(const char *rvalue, cpu_set_t **cpu_set, const char *unit, const char *filename, unsigned line, const char *lvalue);
|
@ -227,3 +227,15 @@ int log_syntax_internal(
|
||||
? log_syntax_internal(unit, _level, config_file, config_line, _e, __FILE__, __LINE__, __func__, __VA_ARGS__) \
|
||||
: -abs(_e); \
|
||||
})
|
||||
|
||||
#define log_syntax_invalid_utf8(unit, level, config_file, config_line, rvalue) \
|
||||
({ \
|
||||
int _level = (level); \
|
||||
if (log_get_max_level() >= LOG_PRI(_level)) { \
|
||||
_cleanup_free_ char *_p = NULL; \
|
||||
_p = utf8_escape_invalid(rvalue); \
|
||||
log_syntax_internal(unit, _level, config_file, config_line, 0, __FILE__, __LINE__, __func__, \
|
||||
"String is not UTF-8 clean, ignoring assignment: %s", strna(_p)); \
|
||||
} \
|
||||
-EINVAL; \
|
||||
})
|
||||
|
@ -146,11 +146,8 @@ int make_socket_fd(int log_level, const char* address, int flags) {
|
||||
int fd, r;
|
||||
|
||||
r = socket_address_parse(&a, address);
|
||||
if (r < 0) {
|
||||
log_error("Failed to parse socket address \"%s\": %s",
|
||||
address, strerror(-r));
|
||||
return r;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse socket address \"%s\": %m", address);
|
||||
|
||||
fd = socket_address_listen(&a, flags, SOMAXCONN, SOCKET_ADDRESS_DEFAULT,
|
||||
NULL, false, false, false, 0755, 0644, NULL);
|
||||
|
103
src/basic/util.c
103
src/basic/util.c
@ -2551,90 +2551,6 @@ int fchmod_and_fchown(int fd, mode_t mode, uid_t uid, gid_t gid) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
cpu_set_t* cpu_set_malloc(unsigned *ncpus) {
|
||||
cpu_set_t *r;
|
||||
unsigned n = 1024;
|
||||
|
||||
/* Allocates the cpuset in the right size */
|
||||
|
||||
for (;;) {
|
||||
if (!(r = CPU_ALLOC(n)))
|
||||
return NULL;
|
||||
|
||||
if (sched_getaffinity(0, CPU_ALLOC_SIZE(n), r) >= 0) {
|
||||
CPU_ZERO_S(CPU_ALLOC_SIZE(n), r);
|
||||
|
||||
if (ncpus)
|
||||
*ncpus = n;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
CPU_FREE(r);
|
||||
|
||||
if (errno != EINVAL)
|
||||
return NULL;
|
||||
|
||||
n *= 2;
|
||||
}
|
||||
}
|
||||
|
||||
int parse_cpu_set(
|
||||
const char *rvalue,
|
||||
cpu_set_t **cpu_set,
|
||||
const char *unit,
|
||||
const char *filename,
|
||||
unsigned line,
|
||||
const char *lvalue) {
|
||||
|
||||
const char *whole_rvalue = rvalue;
|
||||
_cleanup_cpu_free_ cpu_set_t *c = NULL;
|
||||
unsigned ncpus = 0;
|
||||
|
||||
assert(filename);
|
||||
assert(lvalue);
|
||||
assert(rvalue);
|
||||
|
||||
for (;;) {
|
||||
_cleanup_free_ char *word = NULL;
|
||||
unsigned cpu;
|
||||
int r;
|
||||
|
||||
r = extract_first_word(&rvalue, &word, WHITESPACE, EXTRACT_QUOTES);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r,
|
||||
"Invalid value for %s: %s", lvalue, whole_rvalue);
|
||||
return r;
|
||||
}
|
||||
if (r == 0)
|
||||
break;
|
||||
|
||||
r = safe_atou(word, &cpu);
|
||||
|
||||
if (!c)
|
||||
if (!(c = cpu_set_malloc(&ncpus)))
|
||||
return log_oom();
|
||||
|
||||
if (r < 0 || cpu >= ncpus) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, -r,
|
||||
"Failed to parse CPU affinity '%s'", rvalue);
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
CPU_SET_S(cpu, CPU_ALLOC_SIZE(ncpus), c);
|
||||
}
|
||||
if (!isempty(rvalue))
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Trailing garbage, ignoring.");
|
||||
|
||||
/* On success, sets *cpu_set and returns ncpus for the system. */
|
||||
if (c) {
|
||||
*cpu_set = c;
|
||||
c = NULL;
|
||||
}
|
||||
return (int) ncpus;
|
||||
}
|
||||
|
||||
int files_same(const char *filea, const char *fileb) {
|
||||
struct stat a, b;
|
||||
|
||||
@ -5428,15 +5344,13 @@ int update_reboot_param_file(const char *param) {
|
||||
int r = 0;
|
||||
|
||||
if (param) {
|
||||
|
||||
r = write_string_file(REBOOT_PARAM_FILE, param, WRITE_STRING_FILE_CREATE);
|
||||
if (r < 0)
|
||||
log_error("Failed to write reboot param to "
|
||||
REBOOT_PARAM_FILE": %s", strerror(-r));
|
||||
return log_error_errno(r, "Failed to write reboot param to "REBOOT_PARAM_FILE": %m");
|
||||
} else
|
||||
unlink(REBOOT_PARAM_FILE);
|
||||
(void) unlink(REBOOT_PARAM_FILE);
|
||||
|
||||
return r;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int umount_recursive(const char *prefix, int flags) {
|
||||
@ -6070,6 +5984,7 @@ int extract_first_word_and_warn(
|
||||
const char *filename,
|
||||
unsigned line,
|
||||
const char *rvalue) {
|
||||
|
||||
/* Try to unquote it, if it fails, warn about it and try again but this
|
||||
* time using EXTRACT_CUNESCAPE_RELAX to keep the backslashes verbatim
|
||||
* in invalid escape sequences. */
|
||||
@ -6078,17 +5993,17 @@ int extract_first_word_and_warn(
|
||||
|
||||
save = *p;
|
||||
r = extract_first_word(p, ret, separators, flags);
|
||||
if (r < 0 && !(flags&EXTRACT_CUNESCAPE_RELAX)) {
|
||||
if (r < 0 && !(flags & EXTRACT_CUNESCAPE_RELAX)) {
|
||||
|
||||
/* Retry it with EXTRACT_CUNESCAPE_RELAX. */
|
||||
*p = save;
|
||||
r = extract_first_word(p, ret, separators, flags|EXTRACT_CUNESCAPE_RELAX);
|
||||
if (r < 0)
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Unbalanced quoting in command line, ignoring: \"%s\"", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Unbalanced quoting in command line, ignoring: \"%s\"", rvalue);
|
||||
else
|
||||
log_syntax(unit, LOG_WARNING, filename, line, EINVAL,
|
||||
"Invalid escape sequences in command line: \"%s\"", rvalue);
|
||||
log_syntax(unit, LOG_WARNING, filename, line, 0, "Invalid escape sequences in command line: \"%s\"", rvalue);
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
@ -28,7 +28,6 @@
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
#include <mntent.h>
|
||||
#include <sched.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
@ -371,12 +370,6 @@ int fd_is_temporary_fs(int fd);
|
||||
|
||||
int pipe_eof(int fd);
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(cpu_set_t*, CPU_FREE);
|
||||
#define _cleanup_cpu_free_ _cleanup_(CPU_FREEp)
|
||||
|
||||
cpu_set_t* cpu_set_malloc(unsigned *ncpus);
|
||||
int parse_cpu_set(const char *rvalue, cpu_set_t **cpu_set, const char *unit, const char *filename, unsigned line, const char *lvalue);
|
||||
|
||||
#define xsprintf(buf, fmt, ...) \
|
||||
assert_message_se((size_t) snprintf(buf, ELEMENTSOF(buf), fmt, __VA_ARGS__) < ELEMENTSOF(buf), \
|
||||
"xsprintf: " #buf "[] must be big enough")
|
||||
|
@ -81,10 +81,21 @@ static int property_get_virtualization(
|
||||
void *userdata,
|
||||
sd_bus_error *error) {
|
||||
|
||||
int v;
|
||||
|
||||
assert(bus);
|
||||
assert(reply);
|
||||
|
||||
return sd_bus_message_append(reply, "s", virtualization_to_string(detect_virtualization()));
|
||||
v = detect_virtualization();
|
||||
|
||||
/* Make sure to return the empty string when we detect no virtualization, as that is the API.
|
||||
*
|
||||
* https://github.com/systemd/systemd/issues/1423
|
||||
*/
|
||||
|
||||
return sd_bus_message_append(
|
||||
reply, "s",
|
||||
v == VIRTUALIZATION_NONE ? "" : virtualization_to_string(v));
|
||||
}
|
||||
|
||||
static int property_get_architecture(
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -19,24 +19,25 @@
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <sched.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <sys/mount.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "systemd/sd-id128.h"
|
||||
#include "sd-id128.h"
|
||||
|
||||
#include "machine-id-setup.h"
|
||||
#include "macro.h"
|
||||
#include "util.h"
|
||||
#include "mkdir.h"
|
||||
#include "log.h"
|
||||
#include "virt.h"
|
||||
#include "fileio.h"
|
||||
#include "log.h"
|
||||
#include "macro.h"
|
||||
#include "mkdir.h"
|
||||
#include "path-util.h"
|
||||
#include "process-util.h"
|
||||
#include "util.h"
|
||||
#include "virt.h"
|
||||
#include "machine-id-setup.h"
|
||||
|
||||
static int shorten_uuid(char destination[34], const char source[36]) {
|
||||
unsigned i, j;
|
||||
|
@ -47,6 +47,7 @@
|
||||
#include "capability.h"
|
||||
#include "clock-util.h"
|
||||
#include "conf-parser.h"
|
||||
#include "cpu-set-util.h"
|
||||
#include "dbus-manager.h"
|
||||
#include "def.h"
|
||||
#include "env-util.h"
|
||||
@ -464,8 +465,7 @@ static int config_parse_cpu_affinity2(
|
||||
_cleanup_cpu_free_ cpu_set_t *c = NULL;
|
||||
int ncpus;
|
||||
|
||||
ncpus = parse_cpu_set(rvalue, &c, unit, filename, line, lvalue);
|
||||
|
||||
ncpus = parse_cpu_set_and_warn(rvalue, &c, unit, filename, line, lvalue);
|
||||
if (ncpus < 0)
|
||||
return ncpus;
|
||||
|
||||
@ -497,8 +497,7 @@ static int config_parse_show_status(
|
||||
|
||||
k = parse_show_status(rvalue, b);
|
||||
if (k < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, -k,
|
||||
"Failed to parse show status setting, ignoring: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, k, "Failed to parse show status setting, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -629,8 +628,7 @@ static int config_parse_join_controllers(const char *unit,
|
||||
}
|
||||
}
|
||||
if (!isempty(rvalue))
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Trailing garbage, ignoring.");
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Trailing garbage, ignoring.");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -215,16 +215,14 @@ int mac_smack_setup(bool *loaded_policy) {
|
||||
log_info("Successfully loaded Smack policies.");
|
||||
break;
|
||||
default:
|
||||
log_warning("Failed to load Smack access rules: %s, ignoring.",
|
||||
strerror(abs(r)));
|
||||
log_warning_errno(r, "Failed to load Smack access rules, ignoring: %m");
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef SMACK_RUN_LABEL
|
||||
r = write_string_file("/proc/self/attr/current", SMACK_RUN_LABEL, 0);
|
||||
if (r)
|
||||
log_warning("Failed to set SMACK label \"%s\" on self: %s",
|
||||
SMACK_RUN_LABEL, strerror(-r));
|
||||
log_warning_errno("Failed to set SMACK label \"%s\" on self: %m", SMACK_RUN_LABEL);
|
||||
#endif
|
||||
|
||||
r = write_cipso2_rules("/etc/smack/cipso.d/");
|
||||
@ -239,8 +237,7 @@ int mac_smack_setup(bool *loaded_policy) {
|
||||
log_info("Successfully loaded Smack/CIPSO policies.");
|
||||
break;
|
||||
default:
|
||||
log_warning("Failed to load Smack/CIPSO access rules: %s, ignoring.",
|
||||
strerror(abs(r)));
|
||||
log_warning_errno(r, "Failed to load Smack/CIPSO access rules, ignoring: %m");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -643,7 +643,8 @@ static void socket_dump(Unit *u, FILE *f, const char *prefix) {
|
||||
int r;
|
||||
char *k = NULL;
|
||||
|
||||
if ((r = socket_address_print(&p->address, &k)) < 0)
|
||||
r = socket_address_print(&p->address, &k);
|
||||
if (r < 0)
|
||||
t = strerror(-r);
|
||||
else
|
||||
t = k;
|
||||
|
@ -19,14 +19,15 @@
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include <sched.h>
|
||||
#include <sys/prctl.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "util.h"
|
||||
#include "btrfs-util.h"
|
||||
#include "capability.h"
|
||||
#include "signal-util.h"
|
||||
#include "util.h"
|
||||
#include "import-common.h"
|
||||
|
||||
int import_make_read_only_fd(int fd) {
|
||||
|
@ -419,8 +419,7 @@ int catalog_update(const char* database, const char* root, const char* const* di
|
||||
log_debug("Reading file '%s'", *f);
|
||||
r = catalog_import_file(h, sb, *f);
|
||||
if (r < 0) {
|
||||
log_error("Failed to import file '%s': %s.",
|
||||
*f, strerror(-r));
|
||||
log_error_errno(r, "Failed to import file '%s': %m", *f);
|
||||
goto finish;
|
||||
}
|
||||
}
|
||||
@ -676,8 +675,7 @@ int catalog_list_items(FILE *f, const char *database, bool oneline, char **items
|
||||
|
||||
k = sd_id128_from_string(*item, &id);
|
||||
if (k < 0) {
|
||||
log_error_errno(k, "Failed to parse id128 '%s': %m",
|
||||
*item);
|
||||
log_error_errno(k, "Failed to parse id128 '%s': %m", *item);
|
||||
if (r == 0)
|
||||
r = k;
|
||||
continue;
|
||||
@ -685,9 +683,8 @@ int catalog_list_items(FILE *f, const char *database, bool oneline, char **items
|
||||
|
||||
k = catalog_get(database, id, &msg);
|
||||
if (k < 0) {
|
||||
log_full(k == -ENOENT ? LOG_NOTICE : LOG_ERR,
|
||||
"Failed to retrieve catalog entry for '%s': %s",
|
||||
*item, strerror(-k));
|
||||
log_full_errno(k == -ENOENT ? LOG_NOTICE : LOG_ERR, k,
|
||||
"Failed to retrieve catalog entry for '%s': %m", *item);
|
||||
if (r == 0)
|
||||
r = k;
|
||||
continue;
|
||||
|
@ -1585,7 +1585,7 @@ static int verify(sd_journal *j) {
|
||||
/* If the key was invalid give up right-away. */
|
||||
return k;
|
||||
} else if (k < 0) {
|
||||
log_warning("FAIL: %s (%s)", f->path, strerror(-k));
|
||||
log_warning_errno(k, "FAIL: %s (%m)", f->path);
|
||||
r = k;
|
||||
} else {
|
||||
char a[FORMAT_TIMESTAMP_MAX], b[FORMAT_TIMESTAMP_MAX], c[FORMAT_TIMESPAN_MAX];
|
||||
|
@ -1434,8 +1434,7 @@ static int server_open_hostname(Server *s) {
|
||||
/* kernels prior to 3.2 don't support polling this file. Ignore
|
||||
* the failure. */
|
||||
if (r == -EPERM) {
|
||||
log_warning("Failed to register hostname fd in event loop: %s. Ignoring.",
|
||||
strerror(-r));
|
||||
log_warning_errno(r, "Failed to register hostname fd in event loop, ignoring: %m");
|
||||
s->hostname_fd = safe_close(s->hostname_fd);
|
||||
return 0;
|
||||
}
|
||||
|
@ -38,19 +38,19 @@ int lldp_port_start(lldp_port *p) {
|
||||
r = sd_event_add_io(p->event, &p->lldp_port_rx,
|
||||
p->rawfd, EPOLLIN, lldp_receive_packet, p);
|
||||
if (r < 0) {
|
||||
log_debug("Failed to allocate event source: %s", strerror(-r));
|
||||
return r;
|
||||
log_debug_errno(r, "Failed to allocate event source: %m");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
r = sd_event_source_set_priority(p->lldp_port_rx, p->event_priority);
|
||||
if (r < 0) {
|
||||
log_debug("Failed to set event priority: %s", strerror(-r));
|
||||
log_debug_errno(r, "Failed to set event priority: %m");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
r = sd_event_source_set_description(p->lldp_port_rx, "lldp-port-rx");
|
||||
if (r < 0) {
|
||||
log_debug("Failed to set event name: %s", strerror(-r));
|
||||
log_debug_errno(r, "Failed to set event name: %m");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
|
@ -196,8 +196,7 @@ int config_parse_ifname(const char *unit,
|
||||
return log_oom();
|
||||
|
||||
if (!ascii_is_valid(n) || strlen(n) >= IFNAMSIZ) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Interface name is not ASCII clean or is too long, ignoring assignment: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Interface name is not ASCII clean or is too long, ignoring assignment: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -240,8 +239,7 @@ int config_parse_ifnames(const char *unit,
|
||||
return log_oom();
|
||||
|
||||
if (!ascii_is_valid(n) || strlen(n) >= IFNAMSIZ) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Interface name is not ASCII clean or is too long, ignoring assignment: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Interface name is not ASCII clean or is too long, ignoring assignment: %s", rvalue);
|
||||
free(n);
|
||||
return 0;
|
||||
}
|
||||
@ -278,8 +276,7 @@ int config_parse_ifalias(const char *unit,
|
||||
return log_oom();
|
||||
|
||||
if (!ascii_is_valid(n) || strlen(n) >= IFALIASZ) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Interface alias is not ASCII clean or is too long, ignoring assignment: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Interface alias is not ASCII clean or is too long, ignoring assignment: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -324,8 +321,7 @@ int config_parse_hwaddr(const char *unit,
|
||||
&n->ether_addr_octet[4],
|
||||
&n->ether_addr_octet[5]);
|
||||
if (r != 6) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Not a valid MAC address, ignoring assignment: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Not a valid MAC address, ignoring assignment: %s", rvalue);
|
||||
free(n);
|
||||
return 0;
|
||||
}
|
||||
|
@ -19,19 +19,20 @@
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <linux/veth.h>
|
||||
#include <net/if.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sched.h>
|
||||
|
||||
#include "util.h"
|
||||
#include "sd-event.h"
|
||||
#include "event-util.h"
|
||||
#include "sd-netlink.h"
|
||||
#include "sd-pppoe.h"
|
||||
|
||||
#include "event-util.h"
|
||||
#include "process-util.h"
|
||||
#include "util.h"
|
||||
|
||||
static void pppoe_handler(sd_pppoe *ppp, int event, void *userdata) {
|
||||
static int pppoe_state = -1;
|
||||
|
@ -812,10 +812,8 @@ static int enumerator_scan_devices_all(sd_device_enumerator *enumerator) {
|
||||
if (access("/sys/subsystem", F_OK) >= 0) {
|
||||
/* we have /subsystem/, forget all the old stuff */
|
||||
r = enumerator_scan_dir(enumerator, "subsystem", "devices", NULL);
|
||||
if (r < 0) {
|
||||
log_debug("device-enumerator: failed to scan /sys/subsystem: %s", strerror(-r));
|
||||
return r;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_debug_errno(r, "device-enumerator: failed to scan /sys/subsystem: %m");
|
||||
} else {
|
||||
int k;
|
||||
|
||||
|
@ -200,10 +200,8 @@ static int device_read_db(sd_device *device) {
|
||||
if (r < 0) {
|
||||
if (r == -ENOENT)
|
||||
return 0;
|
||||
else {
|
||||
log_debug("sd-device: failed to read db '%s': %s", path, strerror(-r));
|
||||
return r;
|
||||
}
|
||||
else
|
||||
return log_debug_errno(r, "sd-device: failed to read db '%s': %m", path);
|
||||
}
|
||||
|
||||
/* devices with a database entry are initialized */
|
||||
@ -247,7 +245,7 @@ static int device_read_db(sd_device *device) {
|
||||
db[i] = '\0';
|
||||
r = handle_db_line(device, key, value);
|
||||
if (r < 0)
|
||||
log_debug("sd-device: failed to handle db entry '%c:%s': %s", key, value, strerror(-r));
|
||||
log_debug_errno(r, "sd-device: failed to handle db entry '%c:%s': %m", key, value);
|
||||
|
||||
state = PRE_KEY;
|
||||
}
|
||||
|
@ -169,11 +169,10 @@ int device_set_syspath(sd_device *device, const char *_syspath, bool verify) {
|
||||
/* the device does not exist (any more?) */
|
||||
return -ENODEV;
|
||||
|
||||
log_debug("sd-device: could not canonicalize '%s': %m", _syspath);
|
||||
return -errno;
|
||||
return log_debug_errno(errno, "sd-device: could not canonicalize '%s': %m", _syspath);
|
||||
}
|
||||
} else if (r < 0) {
|
||||
log_debug("sd-device: could not get target of '%s': %s", _syspath, strerror(-r));
|
||||
log_debug_errno("sd-device: could not get target of '%s': %m", _syspath);
|
||||
return r;
|
||||
}
|
||||
|
||||
@ -516,7 +515,7 @@ int device_read_uevent_file(sd_device *device) {
|
||||
/* some devices may not have uevent files, see set_syspath() */
|
||||
return 0;
|
||||
else if (r < 0) {
|
||||
log_debug("sd-device: failed to read uevent file '%s': %s", path, strerror(-r));
|
||||
log_debug_errno(r, "sd-device: failed to read uevent file '%s': %m", path);
|
||||
return r;
|
||||
}
|
||||
|
||||
@ -555,7 +554,7 @@ int device_read_uevent_file(sd_device *device) {
|
||||
|
||||
r = handle_uevent_line(device, key, value, &major, &minor);
|
||||
if (r < 0)
|
||||
log_debug("sd-device: failed to handle uevent entry '%s=%s': %s", key, value, strerror(-r));
|
||||
log_debug_errno(r, "sd-device: failed to handle uevent entry '%s=%s': %s", key, value);
|
||||
|
||||
state = PRE_KEY;
|
||||
}
|
||||
@ -569,7 +568,7 @@ int device_read_uevent_file(sd_device *device) {
|
||||
if (major) {
|
||||
r = device_set_devnum(device, major, minor);
|
||||
if (r < 0)
|
||||
log_debug("sd-device: could not set 'MAJOR=%s' or 'MINOR=%s' from '%s': %s", major, minor, path, strerror(-r));
|
||||
log_debug_errno("sd-device: could not set 'MAJOR=%s' or 'MINOR=%s' from '%s': %m", major, minor, path);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -1271,10 +1270,8 @@ int device_read_db_aux(sd_device *device, bool force) {
|
||||
if (r < 0) {
|
||||
if (r == -ENOENT)
|
||||
return 0;
|
||||
else {
|
||||
log_debug("sd-device: failed to read db '%s': %s", path, strerror(-r));
|
||||
return r;
|
||||
}
|
||||
else
|
||||
return log_debug_errno(r, "sd-device: failed to read db '%s': %m", path);
|
||||
}
|
||||
|
||||
/* devices with a database entry are initialized */
|
||||
@ -1318,7 +1315,7 @@ int device_read_db_aux(sd_device *device, bool force) {
|
||||
db[i] = '\0';
|
||||
r = handle_db_line(device, key, value);
|
||||
if (r < 0)
|
||||
log_debug("sd-device: failed to handle db entry '%c:%s': %s", key, value, strerror(-r));
|
||||
log_debug_errno(r, "sd-device: failed to handle db entry '%c:%s': %s", key, value);
|
||||
|
||||
state = PRE_KEY;
|
||||
}
|
||||
|
@ -868,12 +868,12 @@ int config_parse_tmpfs_size(
|
||||
errno = 0;
|
||||
ul = strtoul(rvalue, &f, 10);
|
||||
if (errno != 0 || f != e) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, errno ? errno : EINVAL, "Failed to parse percentage value, ignoring: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, errno, "Failed to parse percentage value, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ul <= 0 || ul >= 100) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, errno ? errno : EINVAL, "Percentage value out of range, ignoring: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Percentage value out of range, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -883,7 +883,7 @@ int config_parse_tmpfs_size(
|
||||
|
||||
r = parse_size(rvalue, 1024, &k);
|
||||
if (r < 0 || (uint64_t) (size_t) k != k) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r < 0 ? r : ERANGE, "Failed to parse size value, ignoring: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse size value, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -430,15 +430,13 @@ int config_parse_broadcast(
|
||||
return r;
|
||||
|
||||
if (n->family == AF_INET6) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Broadcast is not valid for IPv6 addresses, ignoring assignment: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Broadcast is not valid for IPv6 addresses, ignoring assignment: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = in_addr_from_string(AF_INET, rvalue, (union in_addr_union*) &n->broadcast);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Broadcast is invalid, ignoring assignment: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Broadcast is invalid, ignoring assignment: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -487,10 +485,10 @@ int config_parse_address(const char *unit,
|
||||
e = strchr(rvalue, '/');
|
||||
if (e) {
|
||||
unsigned i;
|
||||
|
||||
r = safe_atou(e + 1, &i);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Prefix length is invalid, ignoring assignment: %s", e + 1);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Prefix length is invalid, ignoring assignment: %s", e + 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -502,23 +500,20 @@ int config_parse_address(const char *unit,
|
||||
|
||||
r = in_addr_from_string_auto(address, &f, &buffer);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Address is invalid, ignoring assignment: %s", address);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Address is invalid, ignoring assignment: %s", address);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!e && f == AF_INET) {
|
||||
r = in_addr_default_prefixlen(&buffer.in, &n->prefixlen);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Prefix length not specified, and a default one can not be deduced for '%s', ignoring assignment", address);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Prefix length not specified, and a default one can not be deduced for '%s', ignoring assignment", address);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (n->family != AF_UNSPEC && f != n->family) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Address is incompatible, ignoring assignment: %s", address);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Address is incompatible, ignoring assignment: %s", address);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -567,9 +562,7 @@ int config_parse_label(const char *unit,
|
||||
return log_oom();
|
||||
|
||||
if (!ascii_is_valid(label) || strlen(label) >= IFNAMSIZ) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Interface label is not ASCII clean or is too"
|
||||
" long, ignoring assignment: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Interface label is not ASCII clean or is too long, ignoring assignment: %s", rvalue);
|
||||
free(label);
|
||||
return 0;
|
||||
}
|
||||
|
@ -53,8 +53,7 @@ static int dhcp6_address_handler(sd_netlink *rtnl, sd_netlink_message *m,
|
||||
return 1;
|
||||
}
|
||||
|
||||
log_link_error(link, "Could not set DHCPv6 address: %s",
|
||||
strerror(-r));
|
||||
log_link_error_errno(link, r, "Could not set DHCPv6 address: %m");
|
||||
|
||||
link_enter_failed(link);
|
||||
|
||||
@ -115,8 +114,7 @@ static int dhcp6_lease_address_acquired(sd_dhcp6_client *client, Link *link) {
|
||||
r = sd_icmp6_ra_get_prefixlen(link->icmp6_router_discovery,
|
||||
&ip6_addr, &prefixlen);
|
||||
if (r < 0 && r != -EADDRNOTAVAIL) {
|
||||
log_link_warning(link, "Could not get prefix information: %s",
|
||||
strerror(-r));
|
||||
log_link_warning_errno(link, r, "Could not get prefix information: %m");
|
||||
return r;
|
||||
}
|
||||
|
||||
@ -172,11 +170,9 @@ static void dhcp6_handler(sd_dhcp6_client *client, int event, void *userdata) {
|
||||
|
||||
default:
|
||||
if (event < 0)
|
||||
log_link_warning(link, "DHCPv6 error: %s",
|
||||
strerror(-event));
|
||||
log_link_warning_errno(link, event, "DHCPv6 error: %m");
|
||||
else
|
||||
log_link_warning(link, "DHCPv6 unknown event: %d",
|
||||
event);
|
||||
log_link_warning(link, "DHCPv6 unknown event: %d", event);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -198,24 +194,21 @@ static int dhcp6_configure(Link *link, int event) {
|
||||
r = sd_dhcp6_client_get_information_request(link->dhcp6_client,
|
||||
&information_request);
|
||||
if (r < 0) {
|
||||
log_link_warning(link, "Could not get DHCPv6 Information request setting: %s",
|
||||
strerror(-r));
|
||||
log_link_warning_errno(link, r, "Could not get DHCPv6 Information request setting: %m");
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (information_request && event != SD_ICMP6_ND_EVENT_ROUTER_ADVERTISMENT_OTHER) {
|
||||
r = sd_dhcp6_client_stop(link->dhcp6_client);
|
||||
if (r < 0) {
|
||||
log_link_warning(link, "Could not stop DHCPv6 while setting Managed mode %s",
|
||||
strerror(-r));
|
||||
log_link_warning_errno(link, r, "Could not stop DHCPv6 while setting Managed mode: %m");
|
||||
goto error;
|
||||
}
|
||||
|
||||
r = sd_dhcp6_client_set_information_request(link->dhcp6_client,
|
||||
false);
|
||||
if (r < 0) {
|
||||
log_link_warning(link, "Could not unset DHCPv6 Information request: %s",
|
||||
strerror(-r));
|
||||
log_link_warning_errno(link, r, "Could not unset DHCPv6 Information request: %m");
|
||||
goto error;
|
||||
}
|
||||
|
||||
@ -223,8 +216,7 @@ static int dhcp6_configure(Link *link, int event) {
|
||||
|
||||
r = sd_dhcp6_client_start(link->dhcp6_client);
|
||||
if (r < 0 && r != -EALREADY) {
|
||||
log_link_warning(link, "Could not restart DHCPv6: %s",
|
||||
strerror(-r));
|
||||
log_link_warning_errno(link, r, "Could not restart DHCPv6: %m");
|
||||
goto error;
|
||||
}
|
||||
|
||||
@ -343,11 +335,9 @@ static void icmp6_router_handler(sd_icmp6_nd *nd, int event, void *userdata) {
|
||||
|
||||
default:
|
||||
if (event < 0)
|
||||
log_link_warning(link, "ICMPv6 error: %s",
|
||||
strerror(-event));
|
||||
log_link_warning_errno(link, event, "ICMPv6 error: %m");
|
||||
else
|
||||
log_link_warning(link, "ICMPv6 unknown event: %d",
|
||||
event);
|
||||
log_link_warning(link, "ICMPv6 unknown event: %d", event);
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -197,7 +197,7 @@ int config_parse_fdb_hwaddr(
|
||||
&fdb_entry->mac_addr->ether_addr_octet[5]);
|
||||
|
||||
if (ETHER_ADDR_LEN != r) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Not a valid MAC address, ignoring assignment: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Not a valid MAC address, ignoring assignment: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -44,7 +44,7 @@ static int ipv4ll_address_lost(Link *link) {
|
||||
|
||||
r = address_new_dynamic(&address);
|
||||
if (r < 0) {
|
||||
log_link_error(link, "Could not allocate address: %s", strerror(-r));
|
||||
log_link_error_errno(link, r, "Could not allocate address: %m");
|
||||
return r;
|
||||
}
|
||||
|
||||
@ -57,8 +57,7 @@ static int ipv4ll_address_lost(Link *link) {
|
||||
|
||||
r = route_new_dynamic(&route, RTPROT_UNSPEC);
|
||||
if (r < 0) {
|
||||
log_link_error(link, "Could not allocate route: %s",
|
||||
strerror(-r));
|
||||
log_link_error_errno(link, r, "Could not allocate route: %m");
|
||||
return r;
|
||||
}
|
||||
|
||||
@ -82,7 +81,7 @@ static int ipv4ll_route_handler(sd_netlink *rtnl, sd_netlink_message *m, void *u
|
||||
|
||||
r = sd_netlink_message_get_errno(m);
|
||||
if (r < 0 && r != -EEXIST) {
|
||||
log_link_error(link, "could not set ipv4ll route: %s", strerror(-r));
|
||||
log_link_error_errno(link, r, "could not set ipv4ll route: %m");
|
||||
link_enter_failed(link);
|
||||
}
|
||||
|
||||
@ -103,7 +102,7 @@ static int ipv4ll_address_handler(sd_netlink *rtnl, sd_netlink_message *m, void
|
||||
|
||||
r = sd_netlink_message_get_errno(m);
|
||||
if (r < 0 && r != -EEXIST) {
|
||||
log_link_error(link, "could not set ipv4ll address: %s", strerror(-r));
|
||||
log_link_error_errno(link, r, "could not set ipv4ll address: %m");
|
||||
link_enter_failed(link);
|
||||
} else if (r >= 0)
|
||||
link_rtnl_process_address(rtnl, m, link->manager);
|
||||
|
@ -357,12 +357,12 @@ int config_parse_arp_ip_target_address(const char *unit,
|
||||
|
||||
r = in_addr_from_string_auto(n, &f, &buffer->ip);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Bond ARP ip target address is invalid, ignoring assignment: %s", n);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Bond ARP ip target address is invalid, ignoring assignment: %s", n);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (f != AF_INET) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Bond ARP ip target address is invalid, ignoring assignment: %s", n);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Bond ARP ip target address is invalid, ignoring assignment: %s", n);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -373,7 +373,7 @@ int config_parse_arp_ip_target_address(const char *unit,
|
||||
}
|
||||
|
||||
if (b->n_arp_ip_targets > NETDEV_BOND_ARP_TARGETS_MAX)
|
||||
log_syntax(unit, LOG_WARNING, filename, line, EINVAL, "More than the maximum number of kernel-supported ARP ip targets specified: %d > %d", b->n_arp_ip_targets, NETDEV_BOND_ARP_TARGETS_MAX);
|
||||
log_syntax(unit, LOG_WARNING, filename, line, 0, "More than the maximum number of kernel-supported ARP ip targets specified: %d > %d", b->n_arp_ip_targets, NETDEV_BOND_ARP_TARGETS_MAX);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -395,12 +395,12 @@ int config_parse_tunnel_address(const char *unit,
|
||||
|
||||
r = in_addr_from_string_auto(rvalue, &f, &buffer);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Tunnel address is invalid, ignoring assignment: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Tunnel address is invalid, ignoring assignment: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (t->family != AF_UNSPEC && t->family != f) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Tunnel addresses incompatible, ignoring assignment: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Tunnel addresses incompatible, ignoring assignment: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -435,13 +435,14 @@ int config_parse_ipv6_flowlabel(const char* unit,
|
||||
t->flags |= IP6_TNL_F_USE_ORIG_FLOWLABEL;
|
||||
} else {
|
||||
r = config_parse_int(unit, filename, line, section, section_line, lvalue, ltype, rvalue, &k, userdata);
|
||||
if (r >= 0) {
|
||||
if (k > 0xFFFFF)
|
||||
log_syntax(unit, LOG_ERR, filename, line, k, "Failed to parse IPv6 flowlabel option, ignoring: %s", rvalue);
|
||||
else {
|
||||
*ipv6_flowlabel = htonl(k) & IP6_FLOWINFO_FLOWLABEL;
|
||||
t->flags &= ~IP6_TNL_F_USE_ORIG_FLOWLABEL;
|
||||
}
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (k > 0xFFFFF)
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse IPv6 flowlabel option, ignoring: %s", rvalue);
|
||||
else {
|
||||
*ipv6_flowlabel = htonl(k) & IP6_FLOWINFO_FLOWLABEL;
|
||||
t->flags &= ~IP6_TNL_F_USE_ORIG_FLOWLABEL;
|
||||
}
|
||||
}
|
||||
|
||||
@ -471,13 +472,12 @@ int config_parse_encap_limit(const char* unit,
|
||||
else {
|
||||
r = safe_atoi(rvalue, &k);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r,
|
||||
"Failed to parse Tunnel Encapsulation Limit option, ignoring: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse Tunnel Encapsulation Limit option, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (k > 255 || k < 0)
|
||||
log_syntax(unit, LOG_ERR, filename, line, k, "Invalid Tunnel Encapsulation value, ignoring: %d", k);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Invalid Tunnel Encapsulation value, ignoring: %d", k);
|
||||
else {
|
||||
t->encap_limit = k;
|
||||
t->flags &= ~IP6_TNL_F_IGN_ENCAP_LIMIT;
|
||||
|
@ -131,14 +131,12 @@ int config_parse_vxlan_group_address(const char *unit,
|
||||
|
||||
r = in_addr_from_string_auto(rvalue, &f, &buffer);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"vxlan multicast group address is invalid, ignoring assignment: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "vxlan multicast group address is invalid, ignoring assignment: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(v->family != AF_UNSPEC && v->family != f) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"vxlan multicast group incompatible, ignoring assignment: %s", rvalue);
|
||||
if (v->family != AF_UNSPEC && v->family != f) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "vxlan multicast group incompatible, ignoring assignment: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -409,21 +409,18 @@ int config_parse_netdev(const char *unit,
|
||||
|
||||
kind = netdev_kind_from_string(kind_string);
|
||||
if (kind == _NETDEV_KIND_INVALID) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Invalid NetDev kind: %s", lvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Invalid NetDev kind: %s", lvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = netdev_get(network->manager, rvalue, &netdev);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"%s could not be found, ignoring assignment: %s", lvalue, rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "%s could not be found, ignoring assignment: %s", lvalue, rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (netdev->kind != kind) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"NetDev is not a %s, ignoring assignment: %s", lvalue, rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "NetDev is not a %s, ignoring assignment: %s", lvalue, rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -443,9 +440,7 @@ int config_parse_netdev(const char *unit,
|
||||
case NETDEV_KIND_VXLAN:
|
||||
r = hashmap_put(network->stacked_netdevs, netdev->ifname, netdev);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Can not add VLAN '%s' to network: %m",
|
||||
rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Can not add VLAN '%s' to network: %m", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -484,7 +479,7 @@ int config_parse_domains(const char *unit,
|
||||
|
||||
STRV_FOREACH(domain, *domains) {
|
||||
if (is_localhost(*domain))
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL, "'localhost' domain names may not be configured, ignoring assignment: %s", *domain);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "'localhost' domain names may not be configured, ignoring assignment: %s", *domain);
|
||||
else {
|
||||
r = dns_name_is_valid(*domain);
|
||||
if (r <= 0 && !streq(*domain, "*")) {
|
||||
@ -540,7 +535,7 @@ int config_parse_tunnel(const char *unit,
|
||||
netdev->kind != NETDEV_KIND_VTI6 &&
|
||||
netdev->kind != NETDEV_KIND_IP6TNL
|
||||
) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0,
|
||||
"NetDev is not a tunnel, ignoring assignment: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
@ -625,7 +620,7 @@ int config_parse_dhcp(
|
||||
else if (streq(rvalue, "both"))
|
||||
s = ADDRESS_FAMILY_YES;
|
||||
else {
|
||||
log_syntax(unit, LOG_ERR, filename, line, s, "Failed to parse DHCP option, ignoring: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse DHCP option, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -670,13 +665,13 @@ int config_parse_ipv6token(
|
||||
}
|
||||
|
||||
r = in_addr_is_null(AF_INET6, &buffer);
|
||||
if (r < 0) {
|
||||
if (r != 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "IPv6 token can not be the ANY address, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((buffer.in6.s6_addr32[0] | buffer.in6.s6_addr32[1]) != 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL, "IPv6 token can not be longer than 64 bits, ignoring: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "IPv6 token can not be longer than 64 bits, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -730,7 +725,7 @@ int config_parse_ipv6_privacy_extensions(
|
||||
if (streq(rvalue, "kernel"))
|
||||
s = _IPV6_PRIVACY_EXTENSIONS_INVALID;
|
||||
else {
|
||||
log_syntax(unit, LOG_ERR, filename, line, s, "Failed to parse IPv6 privacy extensions option, ignoring: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse IPv6 privacy extensions option, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -765,7 +760,7 @@ int config_parse_hostname(
|
||||
return r;
|
||||
|
||||
if (!hostname_is_valid(hn, false)) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Hostname is not valid, ignoring assignment: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Hostname is not valid, ignoring assignment: %s", rvalue);
|
||||
free(hn);
|
||||
return 0;
|
||||
}
|
||||
@ -799,7 +794,7 @@ int config_parse_timezone(
|
||||
return r;
|
||||
|
||||
if (!timezone_is_valid(tz)) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Timezone is not valid, ignoring assignment: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Timezone is not valid, ignoring assignment: %s", rvalue);
|
||||
free(tz);
|
||||
return 0;
|
||||
}
|
||||
@ -844,7 +839,7 @@ int config_parse_dhcp_server_dns(
|
||||
return 0;
|
||||
|
||||
if (inet_pton(AF_INET, w, &a) <= 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse DNS server address, ignoring: %s", w);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse DNS server address, ignoring: %s", w);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -883,7 +878,7 @@ int config_parse_dhcp_server_ntp(
|
||||
|
||||
r = extract_first_word(&p, &w, NULL, 0);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, r, line, "Failed to extract word, ignoring: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to extract word, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -891,7 +886,7 @@ int config_parse_dhcp_server_ntp(
|
||||
return 0;
|
||||
|
||||
if (inet_pton(AF_INET, w, &a) <= 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, r, line, "Failed to parse NTP server address, ignoring: %s", w);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse NTP server address, ignoring: %s", w);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -294,8 +294,7 @@ int config_parse_gateway(const char *unit,
|
||||
|
||||
r = in_addr_from_string_auto(rvalue, &f, &buffer);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Route is invalid, ignoring assignment: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Route is invalid, ignoring assignment: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -345,14 +344,12 @@ int config_parse_destination(const char *unit,
|
||||
|
||||
r = in_addr_from_string_auto(address, &f, &buffer);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Destination is invalid, ignoring assignment: %s", address);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Destination is invalid, ignoring assignment: %s", address);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (f != AF_INET && f != AF_INET6) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Unknown address family, ignoring assignment: %s", address);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Unknown address family, ignoring assignment: %s", address);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -360,8 +357,7 @@ int config_parse_destination(const char *unit,
|
||||
if (e) {
|
||||
r = safe_atou8(e + 1, &prefixlen);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Route destination prefix length is invalid, ignoring assignment: %s", e + 1);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Route destination prefix length is invalid, ignoring assignment: %s", e + 1);
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
@ -456,8 +452,7 @@ int config_parse_route_scope(const char *unit,
|
||||
else if (streq(rvalue, "global"))
|
||||
n->scope = RT_SCOPE_UNIVERSE;
|
||||
else {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Unknown route scope: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Unknown route scope: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -82,7 +82,7 @@ int config_parse_address_family_boolean_with_kernel(
|
||||
if (streq(rvalue, "kernel"))
|
||||
s = _ADDRESS_FAMILY_BOOLEAN_INVALID;
|
||||
else {
|
||||
log_syntax(unit, LOG_ERR, filename, line, s, "Failed to parse IPForwarding= option, ignoring: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse IPForwarding= option, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -133,7 +133,7 @@ int config_parse_resolve(
|
||||
|
||||
s = resolve_support_from_string(rvalue);
|
||||
if (s < 0){
|
||||
log_syntax(unit, LOG_ERR, filename, line, -s, "Failed to parse %s= option, ignoring: %s", lvalue, rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse %s= option, ignoring: %s", lvalue, rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -152,7 +152,7 @@ int config_parse_capability(
|
||||
|
||||
cap = capability_from_name(word);
|
||||
if (cap < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, cap, "Failed to parse capability, ignoring: %s", word);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse capability, ignoring: %s", word);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -95,7 +95,7 @@ int config_parse_dnsv(
|
||||
/* Otherwise add to the list */
|
||||
r = manager_parse_dns_server(m, ltype, rvalue);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, -r, "Failed to parse DNS server string '%s'. Ignoring.", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse DNS server string '%s'. Ignoring.", rvalue);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -131,7 +131,7 @@ int config_parse_support(
|
||||
if (support < 0) {
|
||||
r = parse_boolean(rvalue);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, -r, "Failed to parse support level '%s'. Ignoring.", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse support level '%s'. Ignoring.", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -147,8 +147,7 @@ static int next_assignment(const char *unit,
|
||||
|
||||
/* Warn about unknown non-extension fields. */
|
||||
if (!relaxed && !startswith(lvalue, "X-"))
|
||||
log_syntax(unit, LOG_WARNING, filename, line, EINVAL,
|
||||
"Unknown lvalue '%s' in section '%s'", lvalue, section);
|
||||
log_syntax(unit, LOG_WARNING, filename, line, 0, "Unknown lvalue '%s' in section '%s'", lvalue, section);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -196,8 +195,7 @@ static int parse_line(const char* unit,
|
||||
* Support for them should be eventually removed. */
|
||||
|
||||
if (!allow_include) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EBADMSG,
|
||||
".include not allowed here. Ignoring.");
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, ".include not allowed here. Ignoring.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -216,8 +214,7 @@ static int parse_line(const char* unit,
|
||||
assert(k > 0);
|
||||
|
||||
if (l[k-1] != ']') {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EBADMSG,
|
||||
"Invalid section header '%s'", l);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Invalid section header '%s'", l);
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
@ -228,8 +225,7 @@ static int parse_line(const char* unit,
|
||||
if (sections && !nulstr_contains(sections, n)) {
|
||||
|
||||
if (!relaxed && !startswith(n, "X-"))
|
||||
log_syntax(unit, LOG_WARNING, filename, line, EINVAL,
|
||||
"Unknown section '%s'. Ignoring.", n);
|
||||
log_syntax(unit, LOG_WARNING, filename, line, 0, "Unknown section '%s'. Ignoring.", n);
|
||||
|
||||
free(n);
|
||||
*section = mfree(*section);
|
||||
@ -248,16 +244,15 @@ static int parse_line(const char* unit,
|
||||
if (sections && !*section) {
|
||||
|
||||
if (!relaxed && !*section_ignored)
|
||||
log_syntax(unit, LOG_WARNING, filename, line, EINVAL,
|
||||
"Assignment outside of section. Ignoring.");
|
||||
log_syntax(unit, LOG_WARNING, filename, line, 0, "Assignment outside of section. Ignoring.");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
e = strchr(l, '=');
|
||||
if (!e) {
|
||||
log_syntax(unit, LOG_WARNING, filename, line, EINVAL, "Missing '='.");
|
||||
return -EBADMSG;
|
||||
log_syntax(unit, LOG_WARNING, filename, line, 0, "Missing '='.");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
*e = 0;
|
||||
@ -420,16 +415,17 @@ int config_parse_many(const char *conf_file,
|
||||
}
|
||||
|
||||
#define DEFINE_PARSER(type, vartype, conv_func) \
|
||||
int config_parse_##type(const char *unit, \
|
||||
const char *filename, \
|
||||
unsigned line, \
|
||||
const char *section, \
|
||||
unsigned section_line, \
|
||||
const char *lvalue, \
|
||||
int ltype, \
|
||||
const char *rvalue, \
|
||||
void *data, \
|
||||
void *userdata) { \
|
||||
int config_parse_##type( \
|
||||
const char *unit, \
|
||||
const char *filename, \
|
||||
unsigned line, \
|
||||
const char *section, \
|
||||
unsigned section_line, \
|
||||
const char *lvalue, \
|
||||
int ltype, \
|
||||
const char *rvalue, \
|
||||
void *data, \
|
||||
void *userdata) { \
|
||||
\
|
||||
vartype *i = data; \
|
||||
int r; \
|
||||
@ -441,21 +437,23 @@ int config_parse_many(const char *conf_file,
|
||||
\
|
||||
r = conv_func(rvalue, i); \
|
||||
if (r < 0) \
|
||||
log_syntax(unit, LOG_ERR, filename, line, -r, \
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, \
|
||||
"Failed to parse %s value, ignoring: %s", \
|
||||
#type, rvalue); \
|
||||
\
|
||||
return 0; \
|
||||
}
|
||||
} \
|
||||
struct __useless_struct_to_allow_trailing_semicolon__
|
||||
|
||||
DEFINE_PARSER(int, int, safe_atoi)
|
||||
DEFINE_PARSER(long, long, safe_atoli)
|
||||
DEFINE_PARSER(uint32, uint32_t, safe_atou32)
|
||||
DEFINE_PARSER(uint64, uint64_t, safe_atou64)
|
||||
DEFINE_PARSER(unsigned, unsigned, safe_atou)
|
||||
DEFINE_PARSER(double, double, safe_atod)
|
||||
DEFINE_PARSER(nsec, nsec_t, parse_nsec)
|
||||
DEFINE_PARSER(sec, usec_t, parse_sec)
|
||||
DEFINE_PARSER(int, int, safe_atoi);
|
||||
DEFINE_PARSER(long, long, safe_atoli);
|
||||
DEFINE_PARSER(uint32, uint32_t, safe_atou32);
|
||||
DEFINE_PARSER(uint64, uint64_t, safe_atou64);
|
||||
DEFINE_PARSER(unsigned, unsigned, safe_atou);
|
||||
DEFINE_PARSER(double, double, safe_atod);
|
||||
DEFINE_PARSER(nsec, nsec_t, parse_nsec);
|
||||
DEFINE_PARSER(sec, usec_t, parse_sec);
|
||||
DEFINE_PARSER(mode, mode_t, parse_mode);
|
||||
|
||||
int config_parse_iec_size(const char* unit,
|
||||
const char *filename,
|
||||
@ -479,7 +477,7 @@ int config_parse_iec_size(const char* unit,
|
||||
|
||||
r = parse_size(rvalue, 1024, &v);
|
||||
if (r < 0 || (uint64_t) (size_t) v != v) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r < 0 ? r : ERANGE, "Failed to parse size value, ignoring: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse size value, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -509,7 +507,7 @@ int config_parse_si_size(const char* unit,
|
||||
|
||||
r = parse_size(rvalue, 1000, &v);
|
||||
if (r < 0 || (uint64_t) (size_t) v != v) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r < 0 ? r : ERANGE, "Failed to parse size value, ignoring: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse size value, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -564,8 +562,7 @@ int config_parse_bool(const char* unit,
|
||||
|
||||
k = parse_boolean(rvalue);
|
||||
if (k < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, -k,
|
||||
"Failed to parse boolean value, ignoring: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, k, "Failed to parse boolean value, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -626,7 +623,7 @@ int config_parse_string(
|
||||
assert(data);
|
||||
|
||||
if (!utf8_is_valid(rvalue)) {
|
||||
log_invalid_utf8(unit, LOG_ERR, filename, line, EINVAL, rvalue);
|
||||
log_syntax_invalid_utf8(unit, LOG_ERR, filename, line, rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -664,12 +661,12 @@ int config_parse_path(
|
||||
assert(data);
|
||||
|
||||
if (!utf8_is_valid(rvalue)) {
|
||||
log_invalid_utf8(unit, LOG_ERR, filename, line, EINVAL, rvalue);
|
||||
log_syntax_invalid_utf8(unit, LOG_ERR, filename, line, rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!path_is_absolute(rvalue)) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Not an absolute path, ignoring: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Not an absolute path, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -730,7 +727,7 @@ int config_parse_strv(const char *unit,
|
||||
return log_oom();
|
||||
|
||||
if (!utf8_is_valid(n)) {
|
||||
log_invalid_utf8(unit, LOG_ERR, filename, line, EINVAL, rvalue);
|
||||
log_syntax_invalid_utf8(unit, LOG_ERR, filename, line, rvalue);
|
||||
free(n);
|
||||
continue;
|
||||
}
|
||||
@ -740,35 +737,7 @@ int config_parse_strv(const char *unit,
|
||||
return log_oom();
|
||||
}
|
||||
if (!isempty(state))
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Trailing garbage, ignoring.");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int config_parse_mode(
|
||||
const char *unit,
|
||||
const char *filename,
|
||||
unsigned line,
|
||||
const char *section,
|
||||
unsigned section_line,
|
||||
const char *lvalue,
|
||||
int ltype,
|
||||
const char *rvalue,
|
||||
void *data,
|
||||
void *userdata) {
|
||||
|
||||
mode_t *m = data;
|
||||
|
||||
assert(filename);
|
||||
assert(lvalue);
|
||||
assert(rvalue);
|
||||
assert(data);
|
||||
|
||||
if (parse_mode(rvalue, m) < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, errno, "Failed to parse mode value, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Trailing garbage, ignoring.");
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -795,7 +764,7 @@ int config_parse_log_facility(
|
||||
|
||||
x = log_facility_unshifted_from_string(rvalue);
|
||||
if (x < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Failed to parse log facility, ignoring: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse log facility, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -826,7 +795,7 @@ int config_parse_log_level(
|
||||
|
||||
x = log_level_from_string(rvalue);
|
||||
if (x < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Failed to parse log level, ignoring: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse log level, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -855,7 +824,7 @@ int config_parse_signal(
|
||||
|
||||
r = signal_from_string_try_harder(rvalue);
|
||||
if (r <= 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Failed to parse signal name, ignoring: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse signal name, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -884,7 +853,7 @@ int config_parse_personality(
|
||||
|
||||
p = personality_from_string(rvalue);
|
||||
if (p == PERSONALITY_INVALID) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Failed to parse personality, ignoring: %s", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse personality, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -123,13 +123,6 @@ int config_parse_log_level(const char *unit, const char *filename, unsigned line
|
||||
int config_parse_signal(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_personality(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
#define log_invalid_utf8(unit, level, config_file, config_line, error, rvalue) \
|
||||
do { \
|
||||
_cleanup_free_ char *_p = utf8_escape_invalid(rvalue); \
|
||||
log_syntax(unit, level, config_file, config_line, error, \
|
||||
"String is not UTF-8 clean, ignoring assignment: %s", strna(_p)); \
|
||||
} while(false)
|
||||
|
||||
#define DEFINE_CONFIG_PARSE_ENUM(function,name,type,msg) \
|
||||
int function(const char *unit, \
|
||||
const char *filename, \
|
||||
|
@ -949,8 +949,7 @@ static int config_parse_also(
|
||||
return r;
|
||||
}
|
||||
if (!isempty(state))
|
||||
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
|
||||
"Trailing garbage, ignoring.");
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Trailing garbage, ignoring.");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -20,25 +20,26 @@
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <locale.h>
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <math.h>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
#include <sys/wait.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "util.h"
|
||||
#include "mkdir.h"
|
||||
#include "rm-rf.h"
|
||||
#include "strv.h"
|
||||
#include "conf-parser.h"
|
||||
#include "cpu-set-util.h"
|
||||
#include "def.h"
|
||||
#include "fileio.h"
|
||||
#include "conf-parser.h"
|
||||
#include "virt.h"
|
||||
#include "mkdir.h"
|
||||
#include "process-util.h"
|
||||
#include "rm-rf.h"
|
||||
#include "signal-util.h"
|
||||
#include "strv.h"
|
||||
#include "util.h"
|
||||
#include "virt.h"
|
||||
|
||||
static void test_streq_ptr(void) {
|
||||
assert_se(streq_ptr(NULL, NULL));
|
||||
@ -966,7 +967,7 @@ static void test_parse_cpu_set(void) {
|
||||
int cpu;
|
||||
|
||||
/* Simple range (from CPUAffinity example) */
|
||||
ncpus = parse_cpu_set("1 2", &c, NULL, "fake", 1, "CPUAffinity");
|
||||
ncpus = parse_cpu_set_and_warn("1 2", &c, NULL, "fake", 1, "CPUAffinity");
|
||||
assert_se(ncpus >= 1024);
|
||||
assert_se(CPU_ISSET_S(1, CPU_ALLOC_SIZE(ncpus), c));
|
||||
assert_se(CPU_ISSET_S(2, CPU_ALLOC_SIZE(ncpus), c));
|
||||
@ -974,7 +975,7 @@ static void test_parse_cpu_set(void) {
|
||||
c = mfree(c);
|
||||
|
||||
/* A more interesting range */
|
||||
ncpus = parse_cpu_set("0 1 2 3 8 9 10 11", &c, NULL, "fake", 1, "CPUAffinity");
|
||||
ncpus = parse_cpu_set_and_warn("0 1 2 3 8 9 10 11", &c, NULL, "fake", 1, "CPUAffinity");
|
||||
assert_se(ncpus >= 1024);
|
||||
assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus), c) == 8);
|
||||
for (cpu = 0; cpu < 4; cpu++)
|
||||
@ -984,7 +985,7 @@ static void test_parse_cpu_set(void) {
|
||||
c = mfree(c);
|
||||
|
||||
/* Quoted strings */
|
||||
ncpus = parse_cpu_set("8 '9' 10 \"11\"", &c, NULL, "fake", 1, "CPUAffinity");
|
||||
ncpus = parse_cpu_set_and_warn("8 '9' 10 \"11\"", &c, NULL, "fake", 1, "CPUAffinity");
|
||||
assert_se(ncpus >= 1024);
|
||||
assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus), c) == 4);
|
||||
for (cpu = 8; cpu < 12; cpu++)
|
||||
@ -992,28 +993,28 @@ static void test_parse_cpu_set(void) {
|
||||
c = mfree(c);
|
||||
|
||||
/* Use commas as separators */
|
||||
ncpus = parse_cpu_set("0,1,2,3 8,9,10,11", &c, NULL, "fake", 1, "CPUAffinity");
|
||||
ncpus = parse_cpu_set_and_warn("0,1,2,3 8,9,10,11", &c, NULL, "fake", 1, "CPUAffinity");
|
||||
assert_se(ncpus < 0);
|
||||
assert_se(!c);
|
||||
|
||||
/* Ranges */
|
||||
ncpus = parse_cpu_set("0-3,8-11", &c, NULL, "fake", 1, "CPUAffinity");
|
||||
ncpus = parse_cpu_set_and_warn("0-3,8-11", &c, NULL, "fake", 1, "CPUAffinity");
|
||||
assert_se(ncpus < 0);
|
||||
assert_se(!c);
|
||||
|
||||
/* Garbage */
|
||||
ncpus = parse_cpu_set("0 1 2 3 garbage", &c, NULL, "fake", 1, "CPUAffinity");
|
||||
ncpus = parse_cpu_set_and_warn("0 1 2 3 garbage", &c, NULL, "fake", 1, "CPUAffinity");
|
||||
assert_se(ncpus < 0);
|
||||
assert_se(!c);
|
||||
|
||||
/* Empty string */
|
||||
c = NULL;
|
||||
ncpus = parse_cpu_set("", &c, NULL, "fake", 1, "CPUAffinity");
|
||||
ncpus = parse_cpu_set_and_warn("", &c, NULL, "fake", 1, "CPUAffinity");
|
||||
assert_se(ncpus == 0); /* empty string returns 0 */
|
||||
assert_se(!c);
|
||||
|
||||
/* Runnaway quoted string */
|
||||
ncpus = parse_cpu_set("0 1 2 3 \"4 5 6 7 ", &c, NULL, "fake", 1, "CPUAffinity");
|
||||
ncpus = parse_cpu_set_and_warn("0 1 2 3 \"4 5 6 7 ", &c, NULL, "fake", 1, "CPUAffinity");
|
||||
assert_se(ncpus < 0);
|
||||
assert_se(!c);
|
||||
}
|
||||
|
@ -85,7 +85,7 @@ int config_parse_servers(
|
||||
else {
|
||||
r = manager_parse_server_string(m, ltype, rvalue);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, -r, "Failed to parse NTP server string '%s'. Ignoring.", rvalue);
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse NTP server string '%s'. Ignoring.", rvalue);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@ -2514,7 +2514,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules,
|
||||
rules_str(rules, rule->rule.filename_off), rule->rule.filename_line);
|
||||
r = sysctl_write(filename, value);
|
||||
if (r < 0)
|
||||
log_error("error writing SYSCTL{%s}='%s': %s", filename, value, strerror(-r));
|
||||
log_error_errno(r, "error writing SYSCTL{%s}='%s': %s", filename, value);
|
||||
break;
|
||||
}
|
||||
case TK_A_RUN_BUILTIN:
|
||||
|
@ -65,10 +65,9 @@ static int adm_settle(struct udev *udev, int argc, char *argv[]) {
|
||||
|
||||
r = safe_atou(optarg, &timeout);
|
||||
if (r < 0) {
|
||||
fprintf(stderr, "Invalid timeout value '%s': %s\n",
|
||||
optarg, strerror(-r));
|
||||
exit(EXIT_FAILURE);
|
||||
};
|
||||
log_error_errno(r, "Invalid timeout value '%s': %m", optarg);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -18,44 +18,45 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <stddef.h>
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <getopt.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/prctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/signalfd.h>
|
||||
#include <signal.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/epoll.h>
|
||||
#include <sys/mount.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/inotify.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/mount.h>
|
||||
#include <sys/prctl.h>
|
||||
#include <sys/signalfd.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/wait.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "sd-daemon.h"
|
||||
#include "sd-event.h"
|
||||
|
||||
#include "terminal-util.h"
|
||||
#include "signal-util.h"
|
||||
#include "event-util.h"
|
||||
#include "netlink-util.h"
|
||||
#include "cgroup-util.h"
|
||||
#include "process-util.h"
|
||||
#include "cpu-set-util.h"
|
||||
#include "dev-setup.h"
|
||||
#include "event-util.h"
|
||||
#include "fileio.h"
|
||||
#include "selinux-util.h"
|
||||
#include "udev.h"
|
||||
#include "udev-util.h"
|
||||
#include "formats-util.h"
|
||||
#include "hashmap.h"
|
||||
#include "netlink-util.h"
|
||||
#include "process-util.h"
|
||||
#include "selinux-util.h"
|
||||
#include "signal-util.h"
|
||||
#include "terminal-util.h"
|
||||
#include "udev-util.h"
|
||||
#include "udev.h"
|
||||
|
||||
static bool arg_debug = false;
|
||||
static int arg_daemonize = false;
|
||||
|
Loading…
Reference in New Issue
Block a user