This makes nspawn refuse hostnames which are invalid DNS domain names.
}
}
-int config_parse_hostname(
- 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 **hostname = data;
- int r;
-
- assert(filename);
- assert(lvalue);
- assert(rvalue);
- assert(data);
-
- if (isempty(rvalue)) {
- *hostname = mfree(*hostname);
- return 0;
- }
-
- if (!hostname_is_valid(rvalue, 0)) {
- log_syntax(unit, LOG_WARNING, filename, line, 0,
- "Hostname is not valid, ignoring assignment: %s", rvalue);
- return 0;
- }
-
- r = dns_name_is_valid(rvalue);
- if (r < 0) {
- log_syntax(unit, LOG_WARNING, filename, line, r,
- "Failed to check validity of hostname '%s', ignoring assignment: %m", rvalue);
- return 0;
- }
- if (r == 0) {
- log_syntax(unit, LOG_WARNING, filename, line, 0,
- "Hostname is not a valid DNS domain name, ignoring assignment: %s", rvalue);
- return 0;
- }
-
- return free_and_strdup_warn(hostname, rvalue);
-}
-
int config_parse_timezone(
const char *unit,
const char *filename,
CONFIG_PARSER_PROTOTYPE(config_parse_tunnel);
CONFIG_PARSER_PROTOTYPE(config_parse_domains);
CONFIG_PARSER_PROTOTYPE(config_parse_dns);
-CONFIG_PARSER_PROTOTYPE(config_parse_hostname);
CONFIG_PARSER_PROTOTYPE(config_parse_timezone);
CONFIG_PARSER_PROTOTYPE(config_parse_dnssec_negative_trust_anchors);
CONFIG_PARSER_PROTOTYPE(config_parse_ntp);
}
}
-int config_parse_hostname(
- 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;
-
- assert(rvalue);
- assert(s);
-
- if (!hostname_is_valid(rvalue, 0)) {
- log_syntax(unit, LOG_WARNING, filename, line, 0, "Invalid hostname, ignoring: %s", rvalue);
- return 0;
- }
-
- return free_and_strdup_warn(s, empty_to_null(rvalue));
-}
-
int config_parse_oom_score_adjust(
const char *unit,
const char *filename,
CONFIG_PARSER_PROTOTYPE(config_parse_pid2);
CONFIG_PARSER_PROTOTYPE(config_parse_private_users);
CONFIG_PARSER_PROTOTYPE(config_parse_syscall_filter);
-CONFIG_PARSER_PROTOTYPE(config_parse_hostname);
CONFIG_PARSER_PROTOTYPE(config_parse_oom_score_adjust);
CONFIG_PARSER_PROTOTYPE(config_parse_cpu_affinity);
CONFIG_PARSER_PROTOTYPE(config_parse_resolv_conf);
#include "conf-files.h"
#include "conf-parser.h"
#include "def.h"
+#include "dns-domain.h"
#include "escape.h"
#include "ether-addr-util.h"
#include "extract-word.h"
#include "fd-util.h"
#include "fileio.h"
#include "fs-util.h"
+#include "hostname-util.h"
#include "in-addr-util.h"
#include "log.h"
#include "macro.h"
return free_and_strdup_warn(s, empty_to_null(rvalue));
}
+int config_parse_dns_name(
+ 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 **hostname = ASSERT_PTR(data);
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+
+ if (isempty(rvalue)) {
+ *hostname = mfree(*hostname);
+ return 0;
+ }
+
+ r = dns_name_is_valid(rvalue);
+ if (r < 0) {
+ log_syntax(unit, LOG_WARNING, filename, line, r,
+ "Failed to check validity of DNS domain name '%s', ignoring assignment: %m", rvalue);
+ return 0;
+ }
+ if (r == 0) {
+ log_syntax(unit, LOG_WARNING, filename, line, 0,
+ "Specified invalid DNS domain name, ignoring assignment: %s", rvalue);
+ return 0;
+ }
+
+ return free_and_strdup_warn(hostname, rvalue);
+}
+
+int config_parse_hostname(
+ 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 **hostname = ASSERT_PTR(data);
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+
+ if (isempty(rvalue)) {
+ *hostname = mfree(*hostname);
+ return 0;
+ }
+
+ if (!hostname_is_valid(rvalue, 0)) {
+ log_syntax(unit, LOG_WARNING, filename, line, 0,
+ "Specified invalid hostname, ignoring assignment: %s", rvalue);
+ return 0;
+ }
+
+ return config_parse_dns_name(unit, filename, line, section, section_line,
+ lvalue, ltype, rvalue, data, userdata);
+}
+
int config_parse_path(
const char *unit,
const char *filename,
CONFIG_PARSER_PROTOTYPE(config_parse_id128);
CONFIG_PARSER_PROTOTYPE(config_parse_tristate);
CONFIG_PARSER_PROTOTYPE(config_parse_string);
+CONFIG_PARSER_PROTOTYPE(config_parse_dns_name);
+CONFIG_PARSER_PROTOTYPE(config_parse_hostname);
CONFIG_PARSER_PROTOTYPE(config_parse_path);
CONFIG_PARSER_PROTOTYPE(config_parse_strv);
CONFIG_PARSER_PROTOTYPE(config_parse_sec);