Parcourir la source

[3636] Trivial fixes to comply with the coding standards/guidelines.

Marcin Siodelski il y a 10 ans
Parent
commit
fe668b6de2

+ 16 - 10
src/bin/dhcp4/dhcp4_srv.cc

@@ -1,4 +1,4 @@
-// Copyright (C) 2011-2014 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2011-2015 Internet Systems Consortium, Inc. ("ISC")
 //
 // Permission to use, copy, modify, and/or distribute this software for any
 // purpose with or without fee is hereby granted, provided that the above
@@ -816,8 +816,12 @@ Dhcpv4Srv::processHostnameOption(const OptionStringPtr& opt_hostname,
     } else if (label_count == 2) {
         // If there are two labels, it means that the client has specified
         // the unqualified name. We have to concatenate the unqalified name
-        // with the domain name.
-        opt_hostname_resp->setValue(d2_mgr.qualifyName(hostname,false));
+        // with the domain name. The false value passed as a second argument
+        // indicates that the trailing dot should not be appended to the
+        // hostname. We don't want to append the trailing dot because
+        // we don't know whether the hostname is partial or not and some
+        // clients do not handle the hostnames with the trailing dot.
+        opt_hostname_resp->setValue(d2_mgr.qualifyName(hostname, false));
     }
 
     answer->addOption(opt_hostname_resp);
@@ -1071,13 +1075,15 @@ Dhcpv4Srv::assignLease(const Pkt4Ptr& question, Pkt4Ptr& answer) {
         // hostname is empty, it means that server is responsible for
         // generating the entire hostname for the client. The example of the
         // client's name, generated from the IP address is: host-192-0-2-3.
-	if ((fqdn || opt_hostname) && lease->hostname_.empty()) {
-		if(fqdn) {
-			lease->hostname_ = CfgMgr::instance().getD2ClientMgr().generateFqdn(lease->addr_,true);
-		}
-		if(opt_hostname) {
-			lease->hostname_ = CfgMgr::instance().getD2ClientMgr().generateFqdn(lease->addr_,false);
-		}
+        if ((fqdn || opt_hostname) && lease->hostname_.empty()) {
+            // Note that if we have received the hostname option, rather than
+            // Client FQDN the trailing dot is not appended to the generated
+            // hostname because some clients don't handle the trailing dot in
+            // the hostname. Whether the trailing dot is appended or not is
+            // controlled by the second argument to the generateFqdn().
+            lease->hostname_ = CfgMgr::instance().getD2ClientMgr()
+                .generateFqdn(lease->addr_, static_cast<bool>(fqdn));
+
             // The operations below are rather safe, but we want to catch
             // any potential exceptions (e.g. invalid lease database backend
             // implementation) and log an error.

+ 2 - 2
src/bin/dhcp6/dhcp6_srv.cc

@@ -1,4 +1,4 @@
-// Copyright (C) 2011-2014 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2011-2015 Internet Systems Consortium, Inc. ("ISC")
 //
 // Permission to use, copy, modify, and/or distribute this software for any
 // purpose with or without fee is hereby granted, provided that the above
@@ -2609,7 +2609,7 @@ Dhcpv6Srv::generateFqdn(const Pkt6Ptr& answer) {
     // Get the IPv6 address acquired by the client.
     IOAddress addr = iaaddr->getAddress();
     std::string generated_name =
-        CfgMgr::instance().getD2ClientMgr().generateFqdn(addr,true);
+        CfgMgr::instance().getD2ClientMgr().generateFqdn(addr);
     try {
         // The lease has been acquired but the FQDN for this lease hasn't
         // been updated in the lease database. We now have new FQDN

+ 20 - 16
src/lib/dhcpsrv/d2_client_mgr.cc

@@ -1,4 +1,4 @@
-// Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC")
 //
 // Permission to use, copy, modify, and/or distribute this software for any
 // purpose with or without fee is hereby granted, provided that the above
@@ -171,43 +171,47 @@ D2ClientMgr::analyzeFqdn(const bool client_s, const bool client_n,
 }
 
 std::string
-D2ClientMgr::generateFqdn(const asiolink::IOAddress& address, bool appendDot) const {
+D2ClientMgr::generateFqdn(const asiolink::IOAddress& address,
+                          const bool trailing_dot) const {
     std::string hostname = address.toText();
     std::replace(hostname.begin(), hostname.end(),
                  (address.isV4() ? '.' : ':'), '-');
 
     std::ostringstream gen_name;
     gen_name << d2_client_config_->getGeneratedPrefix() << "-" << hostname;
-    return (qualifyName(gen_name.str(),appendDot));
+    return (qualifyName(gen_name.str(), trailing_dot));
 }
 
 
 std::string
-D2ClientMgr::qualifyName(const std::string& partial_name, bool appendDot) const {
+D2ClientMgr::qualifyName(const std::string& partial_name,
+                         const bool trailing_dot) const {
     std::ostringstream gen_name;
 
     gen_name << partial_name << "." << d2_client_config_->getQualifyingSuffix();
 
     std::string str = gen_name.str();
     size_t len = str.length();
-    //unless it's forced, will append trailing dot
-    if(appendDot) {
-	    // Tack on a trailing dot in case suffix doesn't have one.
-	    if ((len > 0) && (str[len - 1] != '.')) {
-		    gen_name << ".";
-	    }
+
+    if(trailing_dot) {
+        // If trailing dot should be added but there is no trailing dot,
+        // append it.
+        if ((len > 0) && (str[len - 1] != '.')) {
+            gen_name << ".";
+        }
+
     } else {
-	    //if a call with appendDot is false, remove the dot if exists
-	    if ((len > 0) && (str[len - 1] == '.')) {
-		    gen_name.str(str.substr(0,len-1));
-	    }
+        // If the trailing dot should not be appended but it is present,
+        // remove it.
+        if ((len > 0) && (str[len - 1] == '.')) {
+            gen_name.str(str.substr(0,len-1));
+        }
+
     }
 
     return (gen_name.str());
 }
 
-
-
 void
 D2ClientMgr::startSender(D2ClientErrorHandler error_handler) {
     if (amSending()) {

+ 8 - 6
src/lib/dhcpsrv/d2_client_mgr.h

@@ -172,10 +172,12 @@ public:
     /// ('.' for IPv4 or ':' for IPv6) replaced with a hyphen, '-'.
     ///
     /// @param address IP address from which to derive the name (IPv4 or IPv6)
-    /// @param appendDot wether if a trailing dot should be appended or not
+    /// @param trailing_dot A boolean value which indicates whether trailing
+    /// dot should be appended (if true) or not (false).
     ///
     /// @return std::string containing the generated name.
-    std::string generateFqdn(const asiolink::IOAddress& address, bool appendDot) const;
+    std::string generateFqdn(const asiolink::IOAddress& address,
+                             const bool trailing_dot = true) const;
 
     /// @brief Adds a qualifying suffix to a given domain name
     ///
@@ -183,14 +185,14 @@ public:
     /// a partial domain name as follows:
     ///
     ///     <partial_name>.<qualifying-suffix>.
-    /// Note it will add a trailing '.' should qualifying-suffix not end with
-    /// one.
     ///
     /// @param partial_name domain name to qualify
-    /// @param appendDot wether if a trailing dot should be appended or not
+    /// @param trailing_dot A boolean value which indicates whether trailing
+    /// dot should be appended (if true) or not (false).
     ///
     /// @return std::string containing the qualified name.
-    std::string qualifyName(const std::string& partial_name, bool appendDot) const;
+    std::string qualifyName(const std::string& partial_name,
+                            const bool trailing_dot) const;
 
     /// @brief Set server FQDN flags based on configuration and a given FQDN
     ///