]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[2383] Check origin is provided when needed
authorMichal 'vorner' Vaner <michal.vaner@nic.cz>
Tue, 30 Oct 2012 11:28:13 +0000 (12:28 +0100)
committerMichal 'vorner' Vaner <michal.vaner@nic.cz>
Tue, 30 Oct 2012 11:28:13 +0000 (12:28 +0100)
When the name passed in the string is relative, we need to have the
origin to complete the name with.

src/lib/dns/name.cc

index 733b52bb593818371757ebcdba1d32358a6bd83e..6e6a704d0cfbbf1f1efa5671901c2a2cb95d2d12 100644 (file)
@@ -321,12 +321,22 @@ Name::Name(const std::string &namestring, bool downcase) {
     offsets_.assign(offsets.begin(), offsets.end());
 }
 
-Name::Name(const char* namedata, size_t data_len, const Name*, bool downcase) {
+Name::Name(const char* namedata, size_t data_len, const Name* origin,
+           bool downcase)
+{
     // Check validity of data
     if (namedata == NULL || data_len == 0) {
         isc_throw(isc::InvalidParameter,
                   "No data provided to Name constructor");
     }
+    // If the last character is not a dot, it is a relative to origin.
+    // It is safe to check now, we know there's at least one character.
+    const bool absolute = (namedata[data_len - 1] == '.');
+    // If we are not absolute, we need the origin to complete the name.
+    if (!absolute && origin == NULL) {
+        isc_throw(MissingNameOrigin,
+                  "No origin available and name is relative");
+    }
     // Prepare inputs for the parser
     const char* end = namedata + data_len;