chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
activate: port to use new getpeername_pretty()/getsockname_pretty() calls
[elogind.git]
/
src
/
sysctl
/
sysctl.c
diff --git
a/src/sysctl/sysctl.c
b/src/sysctl/sysctl.c
index a8cbb5a326d137df647fb290c794e0246f745b5e..67c787225c3180861b8f7389b978dc825e86ec19 100644
(file)
--- a/
src/sysctl/sysctl.c
+++ b/
src/sysctl/sysctl.c
@@
-34,6
+34,8
@@
#include "hashmap.h"
#include "path-util.h"
#include "conf-files.h"
#include "hashmap.h"
#include "path-util.h"
#include "conf-files.h"
+#include "fileio.h"
+#include "build.h"
static char **arg_prefixes = NULL;
static char **arg_prefixes = NULL;
@@
-87,7
+89,7
@@
static int apply_sysctl(const char *property, const char *value) {
}
}
}
}
- k = write_
one_line
_file(p, value);
+ k = write_
string
_file(p, value);
if (k < 0) {
log_full(k == -ENOENT ? LOG_DEBUG : LOG_WARNING,
"Failed to write '%s' to '%s': %s", value, p, strerror(-k));
if (k < 0) {
log_full(k == -ENOENT ? LOG_DEBUG : LOG_WARNING,
"Failed to write '%s' to '%s': %s", value, p, strerror(-k));
@@
-124,7
+126,7
@@
static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno
r = search_and_fopen_nulstr(path, "re", conf_file_dirs, &f);
if (r < 0) {
r = search_and_fopen_nulstr(path, "re", conf_file_dirs, &f);
if (r < 0) {
- if (ignore_enoent &&
errno
== -ENOENT)
+ if (ignore_enoent &&
r
== -ENOENT)
return 0;
log_error("Failed to open file '%s', ignoring: %s", path, strerror(-r));
return 0;
log_error("Failed to open file '%s', ignoring: %s", path, strerror(-r));
@@
-134,6
+136,7
@@
static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno
log_debug("parse: %s\n", path);
while (!feof(f)) {
char l[LINE_MAX], *p, *value, *new_value, *property, *existing;
log_debug("parse: %s\n", path);
while (!feof(f)) {
char l[LINE_MAX], *p, *value, *new_value, *property, *existing;
+ void *v;
int k;
if (!fgets(l, sizeof(l), f)) {
int k;
if (!fgets(l, sizeof(l), f)) {
@@
-148,7
+151,7
@@
static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno
if (!*p)
continue;
if (!*p)
continue;
- if (strchr(COMMENTS, *p))
+ if (strchr(COMMENTS
"\n"
, *p))
continue;
value = strchr(p, '=');
continue;
value = strchr(p, '=');
@@
-166,13
+169,14
@@
static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno
p = normalize_sysctl(strstrip(p));
value = strstrip(value);
p = normalize_sysctl(strstrip(p));
value = strstrip(value);
- existing = hashmap_get
(sysctl_options, p
);
+ existing = hashmap_get
2(sysctl_options, p, &v
);
if (existing) {
if (existing) {
- if (!streq(value, existing))
- log_warning("Duplicate assignment of %s in file '%s', ignoring.",
- p, path);
+ if (streq(value, existing))
+ continue;
- continue;
+ log_info("Overwriting earlier assignment of %s in file '%s'.", p, path);
+ free(hashmap_remove(sysctl_options, p));
+ free(v);
}
property = strdup(p);
}
property = strdup(p);
@@
-187,7
+191,7
@@
static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno
k = hashmap_put(sysctl_options, property, new_value);
if (k < 0) {
k = hashmap_put(sysctl_options, property, new_value);
if (k < 0) {
- log_error("Failed to add sysctl variable %s to hashmap: %s", property, strerror(-
r
));
+ log_error("Failed to add sysctl variable %s to hashmap: %s", property, strerror(-
k
));
free(property);
free(new_value);
return k;
free(property);
free(new_value);
return k;
@@
-202,6
+206,7
@@
static int help(void) {
printf("%s [OPTIONS...] [CONFIGURATION FILE...]\n\n"
"Applies kernel sysctl settings.\n\n"
" -h --help Show this help\n"
printf("%s [OPTIONS...] [CONFIGURATION FILE...]\n\n"
"Applies kernel sysctl settings.\n\n"
" -h --help Show this help\n"
+ " --version Show package version\n"
" --prefix=PATH Only apply rules that apply to paths with the specified prefix\n",
program_invocation_short_name);
" --prefix=PATH Only apply rules that apply to paths with the specified prefix\n",
program_invocation_short_name);
@@
-211,13
+216,15
@@
static int help(void) {
static int parse_argv(int argc, char *argv[]) {
enum {
static int parse_argv(int argc, char *argv[]) {
enum {
+ ARG_VERSION = 0x100,
ARG_PREFIX
};
static const struct option options[] = {
{ "help", no_argument, NULL, 'h' },
ARG_PREFIX
};
static const struct option options[] = {
{ "help", no_argument, NULL, 'h' },
+ { "version", no_argument, NULL, ARG_VERSION },
{ "prefix", required_argument, NULL, ARG_PREFIX },
{ "prefix", required_argument, NULL, ARG_PREFIX },
- {
NULL, 0, NULL, 0
}
+ {}
};
int c;
};
int c;
@@
-230,7
+237,11
@@
static int parse_argv(int argc, char *argv[]) {
switch (c) {
case 'h':
switch (c) {
case 'h':
- help();
+ return help();
+
+ case ARG_VERSION:
+ puts(PACKAGE_STRING);
+ puts(SYSTEMD_FEATURES);
return 0;
case ARG_PREFIX: {
return 0;
case ARG_PREFIX: {
@@
-255,8
+266,7
@@
static int parse_argv(int argc, char *argv[]) {
return -EINVAL;
default:
return -EINVAL;
default:
- log_error("Unknown option code %c", c);
- return -EINVAL;
+ assert_not_reached("Unhandled option");
}
}
}
}
@@
-303,8
+313,6
@@
int main(int argc, char *argv[]) {
goto finish;
}
goto finish;
}
- r = parse_file(sysctl_options, "/etc/sysctl.conf", true);
-
STRV_FOREACH(f, files) {
k = parse_file(sysctl_options, *f, true);
if (k < 0 && r == 0)
STRV_FOREACH(f, files) {
k = parse_file(sysctl_options, *f, true);
if (k < 0 && r == 0)