X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fconf-parser.c;fp=src%2Fshared%2Fconf-parser.c;h=40b6327a53875f2866b4c4636067a122254aa62e;hb=1a37e9a3f3cb37cc8cb3850592b8ee63729e6d4b;hp=4ce4707451715aa9df8fbead358caa3398971c76;hpb=8331cb6e143dc261fd22af9a2a679196822326a9;p=elogind.git diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c index 4ce470745..40b6327a5 100644 --- a/src/shared/conf-parser.c +++ b/src/shared/conf-parser.c @@ -430,15 +430,15 @@ 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) { \ + 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; \ @@ -882,4 +882,41 @@ int config_parse_personality( *personality = p; return 0; } + +int config_parse_ifname( + 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) { + + char **s = data; + int r; + + assert(filename); + assert(lvalue); + assert(rvalue); + assert(data); + + if (isempty(rvalue)) { + *s = mfree(*s); + return 0; + } + + if (!ifname_valid(rvalue)) { + log_syntax(unit, LOG_ERR, filename, line, 0, "Interface name is not valid or too long, ignoring assignment: %s", rvalue); + return 0; + } + + r = free_and_strdup(s, rvalue); + if (r < 0) + return log_oom(); + + return 0; +} #endif // 0