From 238f1bf138d8f1c25bae468f2f5bdd275516fac3 Mon Sep 17 00:00:00 2001 From: Marek Vavrusa <marek.vavrusa@nic.cz> Date: Tue, 7 Feb 2012 13:03:50 +0100 Subject: [PATCH] Implemented both text and hexstring based NSID identifier. refs #1547 --- samples/knot.full.conf | 2 ++ src/knot/conf/cf-parse.y | 3 ++- src/knot/conf/conf.h | 1 + src/knot/server/zones.c | 2 +- src/libknot/nameserver/name-server.c | 4 ++-- src/libknot/nameserver/name-server.h | 3 ++- 6 files changed, 10 insertions(+), 5 deletions(-) diff --git a/samples/knot.full.conf b/samples/knot.full.conf index 7ef63e2a40..55084bdc3c 100644 --- a/samples/knot.full.conf +++ b/samples/knot.full.conf @@ -21,6 +21,8 @@ system { version "0.1"; # Server identifier + # Use string format "text" + # Or hexstring 0x01ab00 nsid "myserver0"; # Working directory of the server diff --git a/src/knot/conf/cf-parse.y b/src/knot/conf/cf-parse.y index 6f227ef119..d7eb5635af 100644 --- a/src/knot/conf/cf-parse.y +++ b/src/knot/conf/cf-parse.y @@ -286,7 +286,8 @@ system: SYSTEM '{' | system VERSION TEXT ';' { new_config->version = $3.t; } | system IDENTITY TEXT ';' { new_config->identity = $3.t; } - | system NSID TEXT ';' { new_config->nsid = $3.t; } + | system NSID HEXSTR ';' { new_config->nsid = $3.t; new_config->nsid_len = $3.l; } + | system NSID TEXT ';' { new_config->nsid = $3.t; new_config->nsid_len = strlen(new_config->nsid); } | system STORAGE TEXT ';' { new_config->storage = $3.t; } | system KEY TSIG_ALGO_NAME TEXT ';' { fprintf(stderr, "warning: Config option 'system.key' is deprecated " diff --git a/src/knot/conf/conf.h b/src/knot/conf/conf.h index 0f89dee5ce..80c07de174 100644 --- a/src/knot/conf/conf.h +++ b/src/knot/conf/conf.h @@ -156,6 +156,7 @@ typedef struct conf_t { char *storage; /*!< Persistent storage path for databases and such. */ char *pidfile; /*!< PID file path. */ char *nsid; /*!< Server's NSID. */ + size_t nsid_len;/*!< Server's NSID length. */ int workers; /*!< Number of workers per interface. */ int uid; /*!< Specified user id. */ int gid; /*!< Specified group id. */ diff --git a/src/knot/server/zones.c b/src/knot/server/zones.c index de56f0ad0b..45abd1ba7d 100644 --- a/src/knot/server/zones.c +++ b/src/knot/server/zones.c @@ -2356,7 +2356,7 @@ int zones_ns_conf_hook(const struct conf_t *conf, void *data) dbg_zones_verb("zones: reconfiguring name server.\n"); /* Set NSID. */ - knot_ns_set_nsid(ns, conf->nsid); + knot_ns_set_nsid(ns, conf->nsid, conf->nsid_len); knot_zonedb_t *old_db = 0; diff --git a/src/libknot/nameserver/name-server.c b/src/libknot/nameserver/name-server.c index 69838cd0ac..f473793828 100644 --- a/src/libknot/nameserver/name-server.c +++ b/src/libknot/nameserver/name-server.c @@ -2631,7 +2631,7 @@ knot_nameserver_t *knot_ns_create() /*----------------------------------------------------------------------------*/ -void knot_ns_set_nsid(knot_nameserver_t *nameserver, const char *nsid) +void knot_ns_set_nsid(knot_nameserver_t *nameserver, const char *nsid, size_t len) { if (nameserver == NULL) { dbg_ns("NS: set_nsid: nameserver=NULL.\n"); @@ -2644,7 +2644,7 @@ void knot_ns_set_nsid(knot_nameserver_t *nameserver, const char *nsid) } int ret = knot_edns_add_option(nameserver->opt_rr, EDNS_OPTION_NSID, - strlen(nsid), (const uint8_t *)nsid); + len, (const uint8_t *)nsid); if (ret != KNOT_EOK) { dbg_ns("NS: set_nsid: could not add EDNS option.\n"); return; diff --git a/src/libknot/nameserver/name-server.h b/src/libknot/nameserver/name-server.h index ca6a0d759c..5c05a5c49a 100644 --- a/src/libknot/nameserver/name-server.h +++ b/src/libknot/nameserver/name-server.h @@ -177,7 +177,8 @@ typedef enum knot_ns_xfr_type_t { */ knot_nameserver_t *knot_ns_create(); -void knot_ns_set_nsid(knot_nameserver_t *nameserver, const char *nsid); +/*! \todo Document me. */ +void knot_ns_set_nsid(knot_nameserver_t *nameserver, const char *nsid, size_t len); /*! * \brief Parses the given query into the response structure and recognizes -- GitLab