chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
replace tabs with spaces in some files
[elogind.git]
/
src
/
shared
/
conf-parser.c
diff --git
a/src/shared/conf-parser.c
b/src/shared/conf-parser.c
index 3d14c58d1386718b49fe2ebc8de2d99571452fe3..d5a639e874a3138bfe040977f1e7fa46a1da905c 100644
(file)
--- a/
src/shared/conf-parser.c
+++ b/
src/shared/conf-parser.c
@@
-24,6
+24,7
@@
#include <errno.h>
#include <assert.h>
#include <stdlib.h>
#include <errno.h>
#include <assert.h>
#include <stdlib.h>
+#include <netinet/ether.h>
#include "conf-parser.h"
#include "util.h"
#include "conf-parser.h"
#include "util.h"
@@
-70,7
+71,7
@@
int log_syntax_internal(const char *unit, int level,
"ERRNO=%d", error > 0 ? error : EINVAL,
"MESSAGE=[%s:%u] %s", config_file, config_line, msg,
NULL);
"ERRNO=%d", error > 0 ? error : EINVAL,
"MESSAGE=[%s:%u] %s", config_file, config_line, msg,
NULL);
- log_info("logged here: '%s': %d", msg, r);
+
return r;
}
return r;
}
@@
-155,6
+156,7
@@
static int next_assignment(const char *unit,
ConfigItemLookup lookup,
void *table,
const char *section,
ConfigItemLookup lookup,
void *table,
const char *section,
+ unsigned section_line,
const char *lvalue,
const char *rvalue,
bool relaxed,
const char *lvalue,
const char *rvalue,
bool relaxed,
@@
-177,8
+179,8
@@
static int next_assignment(const char *unit,
if (r > 0) {
if (func)
if (r > 0) {
if (func)
- return func(unit, filename, line, section,
lvalue, ltyp
e,
- rvalue, data, userdata);
+ return func(unit, filename, line, section,
section_lin
e,
+
lvalue, ltype,
rvalue, data, userdata);
return 0;
}
return 0;
}
@@
-199,7
+201,9
@@
static int parse_line(const char* unit,
ConfigItemLookup lookup,
void *table,
bool relaxed,
ConfigItemLookup lookup,
void *table,
bool relaxed,
+ bool allow_include,
char **section,
char **section,
+ unsigned *section_line,
char *l,
void *userdata) {
char *l,
void *userdata) {
@@
-219,13
+223,19
@@
static int parse_line(const char* unit,
return 0;
if (startswith(l, ".include ")) {
return 0;
if (startswith(l, ".include ")) {
- _cleanup_free_ char *fn;
+ _cleanup_free_ char *fn = NULL;
+
+ if (!allow_include) {
+ log_syntax(unit, LOG_ERR, filename, line, EBADMSG,
+ ".include not allowed here. Ignoring.");
+ return 0;
+ }
fn = file_in_same_dir(filename, strstrip(l+9));
if (!fn)
return -ENOMEM;
fn = file_in_same_dir(filename, strstrip(l+9));
if (!fn)
return -ENOMEM;
- return config_parse(unit, fn, NULL, sections, lookup, table, relaxed, userdata);
+ return config_parse(unit, fn, NULL, sections, lookup, table, relaxed,
false,
userdata);
}
if (*l == '[') {
}
if (*l == '[') {
@@
-252,10
+262,13
@@
static int parse_line(const char* unit,
"Unknown section '%s'. Ignoring.", n);
free(n);
"Unknown section '%s'. Ignoring.", n);
free(n);
+ free(*section);
*section = NULL;
*section = NULL;
+ *section_line = 0;
} else {
free(*section);
*section = n;
} else {
free(*section);
*section = n;
+ *section_line = line;
}
return 0;
}
return 0;
@@
-285,6
+298,7
@@
static int parse_line(const char* unit,
lookup,
table,
*section,
lookup,
table,
*section,
+ *section_line,
strstrip(l),
strstrip(e),
relaxed,
strstrip(l),
strstrip(e),
relaxed,
@@
-299,11
+313,12
@@
int config_parse(const char *unit,
ConfigItemLookup lookup,
void *table,
bool relaxed,
ConfigItemLookup lookup,
void *table,
bool relaxed,
+ bool allow_include,
void *userdata) {
void *userdata) {
- unsigned line = 0;
_cleanup_free_ char *section = NULL, *continuation = NULL;
_cleanup_fclose_ FILE *ours = NULL;
_cleanup_free_ char *section = NULL, *continuation = NULL;
_cleanup_fclose_ FILE *ours = NULL;
+ unsigned line = 0, section_line = 0;
int r;
assert(filename);
int r;
assert(filename);
@@
-317,6
+332,8
@@
int config_parse(const char *unit,
}
}
}
}
+ fd_warn_permissions(filename, fileno(f));
+
while (!feof(f)) {
char l[LINE_MAX], *p, *c = NULL, *e;
bool escaped = false;
while (!feof(f)) {
char l[LINE_MAX], *p, *c = NULL, *e;
bool escaped = false;
@@
-370,7
+387,9
@@
int config_parse(const char *unit,
lookup,
table,
relaxed,
lookup,
table,
relaxed,
+ allow_include,
§ion,
§ion,
+ §ion_line,
p,
userdata);
free(c);
p,
userdata);
free(c);
@@
-387,6
+406,7
@@
int config_parse(const char *unit,
const char *filename, \
unsigned line, \
const char *section, \
const char *filename, \
unsigned line, \
const char *section, \
+ unsigned section_line, \
const char *lvalue, \
int ltype, \
const char *rvalue, \
const char *lvalue, \
int ltype, \
const char *rvalue, \
@@
-423,6
+443,7
@@
int config_parse_bytes_size(const char* unit,
const char *filename,
unsigned line,
const char *section,
const char *filename,
unsigned line,
const char *section,
+ unsigned section_line,
const char *lvalue,
int ltype,
const char *rvalue,
const char *lvalue,
int ltype,
const char *rvalue,
@@
-454,6
+475,7
@@
int config_parse_bytes_off(const char* unit,
const char *filename,
unsigned line,
const char *section,
const char *filename,
unsigned line,
const char *section,
+ unsigned section_line,
const char *lvalue,
int ltype,
const char *rvalue,
const char *lvalue,
int ltype,
const char *rvalue,
@@
-482,6
+504,7
@@
int config_parse_bool(const char* unit,
const char *filename,
unsigned line,
const char *section,
const char *filename,
unsigned line,
const char *section,
+ unsigned section_line,
const char *lvalue,
int ltype,
const char *rvalue,
const char *lvalue,
int ltype,
const char *rvalue,
@@
-507,34
+530,32
@@
int config_parse_bool(const char* unit,
return 0;
}
return 0;
}
-int config_parse_tristate(const char *unit,
- const char *filename,
- unsigned line,
- const char *section,
- const char *lvalue,
- int ltype,
- const char *rvalue,
- void *data,
- void *userdata) {
+int config_parse_show_status(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 k;
int k;
-
int
*b = data;
+
ShowStatus
*b = data;
assert(filename);
assert(lvalue);
assert(rvalue);
assert(data);
assert(filename);
assert(lvalue);
assert(rvalue);
assert(data);
- /* Tristates are like booleans, but can also take the 'default' value, i.e. "-1" */
-
- k = parse_boolean(rvalue);
+ k = parse_show_status(rvalue, b);
if (k < 0) {
log_syntax(unit, LOG_ERR, filename, line, -k,
if (k < 0) {
log_syntax(unit, LOG_ERR, filename, line, -k,
- "Failed to parse
boolean value
, ignoring: %s", rvalue);
+ "Failed to parse
show status setting
, ignoring: %s", rvalue);
return 0;
}
return 0;
}
- *b = !!k;
return 0;
}
return 0;
}
@@
-542,6
+563,7
@@
int config_parse_string(const char *unit,
const char *filename,
unsigned line,
const char *section,
const char *filename,
unsigned line,
const char *section,
+ unsigned section_line,
const char *lvalue,
int ltype,
const char *rvalue,
const char *lvalue,
int ltype,
const char *rvalue,
@@
-582,6
+604,7
@@
int config_parse_path(const char *unit,
const char *filename,
unsigned line,
const char *section,
const char *filename,
unsigned line,
const char *section,
+ unsigned section_line,
const char *lvalue,
int ltype,
const char *rvalue,
const char *lvalue,
int ltype,
const char *rvalue,
@@
-590,6
+613,7
@@
int config_parse_path(const char *unit,
char **s = data;
char *n;
char **s = data;
char *n;
+ int offset;
assert(filename);
assert(lvalue);
assert(filename);
assert(lvalue);
@@
-602,7
+626,9
@@
int config_parse_path(const char *unit,
return 0;
}
return 0;
}
- if (!path_is_absolute(rvalue)) {
+ offset = rvalue[0] == '-' && (streq(lvalue, "InaccessibleDirectories") ||
+ streq(lvalue, "ReadOnlyDirectories"));
+ if (!path_is_absolute(rvalue + offset)) {
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
"Not an absolute path, ignoring: %s", rvalue);
return 0;
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
"Not an absolute path, ignoring: %s", rvalue);
return 0;
@@
-624,6
+650,7
@@
int config_parse_strv(const char *unit,
const char *filename,
unsigned line,
const char *section,
const char *filename,
unsigned line,
const char *section,
+ unsigned section_line,
const char *lvalue,
int ltype,
const char *rvalue,
const char *lvalue,
int ltype,
const char *rvalue,
@@
-680,6
+707,7
@@
int config_parse_path_strv(const char *unit,
const char *filename,
unsigned line,
const char *section,
const char *filename,
unsigned line,
const char *section,
+ unsigned section_line,
const char *lvalue,
int ltype,
const char *rvalue,
const char *lvalue,
int ltype,
const char *rvalue,
@@
-704,6
+732,7
@@
int config_parse_path_strv(const char *unit,
FOREACH_WORD_QUOTED(w, l, rvalue, state) {
_cleanup_free_ char *n;
FOREACH_WORD_QUOTED(w, l, rvalue, state) {
_cleanup_free_ char *n;
+ int offset;
n = strndup(w, l);
if (!n)
n = strndup(w, l);
if (!n)
@@
-715,7
+744,9
@@
int config_parse_path_strv(const char *unit,
continue;
}
continue;
}
- if (!path_is_absolute(n)) {
+ offset = n[0] == '-' && (streq(lvalue, "InaccessibleDirectories") ||
+ streq(lvalue, "ReadOnlyDirectories"));
+ if (!path_is_absolute(n + offset)) {
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
"Not an absolute path, ignoring: %s", rvalue);
continue;
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
"Not an absolute path, ignoring: %s", rvalue);
continue;
@@
-734,6
+765,7
@@
int config_parse_mode(const char *unit,
const char *filename,
unsigned line,
const char *section,
const char *filename,
unsigned line,
const char *section,
+ unsigned section_line,
const char *lvalue,
int ltype,
const char *rvalue,
const char *lvalue,
int ltype,
const char *rvalue,
@@
-771,6
+803,7
@@
int config_parse_facility(const char *unit,
const char *filename,
unsigned line,
const char *section,
const char *filename,
unsigned line,
const char *section,
+ unsigned section_line,
const char *lvalue,
int ltype,
const char *rvalue,
const char *lvalue,
int ltype,
const char *rvalue,
@@
-801,6
+834,7
@@
int config_parse_level(const char *unit,
const char *filename,
unsigned line,
const char *section,
const char *filename,
unsigned line,
const char *section,
+ unsigned section_line,
const char *lvalue,
int ltype,
const char *rvalue,
const char *lvalue,
int ltype,
const char *rvalue,
@@
-830,6
+864,7
@@
int config_parse_set_status(const char *unit,
const char *filename,
unsigned line,
const char *section,
const char *filename,
unsigned line,
const char *section,
+ unsigned section_line,
const char *lvalue,
int ltype,
const char *rvalue,
const char *lvalue,
int ltype,
const char *rvalue,