From: Marcin Siodelski Date: Fri, 16 Jan 2015 15:48:13 +0000 (+0100) Subject: [3636] Trivial fixes to comply with the coding standards/guidelines. X-Git-Tag: trac3712_base~68^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fe668b6de2e1992b3c93cfcab08f90699c3690f0;p=thirdparty%2Fkea.git [3636] Trivial fixes to comply with the coding standards/guidelines. --- diff --git a/src/bin/dhcp4/dhcp4_srv.cc b/src/bin/dhcp4/dhcp4_srv.cc index 9debfef197..5ace4b728b 100644 --- a/src/bin/dhcp4/dhcp4_srv.cc +++ b/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(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. diff --git a/src/bin/dhcp6/dhcp6_srv.cc b/src/bin/dhcp6/dhcp6_srv.cc index f60ca513b6..4c3fa8d068 100644 --- a/src/bin/dhcp6/dhcp6_srv.cc +++ b/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 diff --git a/src/lib/dhcpsrv/d2_client_mgr.cc b/src/lib/dhcpsrv/d2_client_mgr.cc index 0a79a5f67c..3da14ab27e 100644 --- a/src/lib/dhcpsrv/d2_client_mgr.cc +++ b/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()) { diff --git a/src/lib/dhcpsrv/d2_client_mgr.h b/src/lib/dhcpsrv/d2_client_mgr.h index a82d205204..1a589d9eb4 100644 --- a/src/lib/dhcpsrv/d2_client_mgr.h +++ b/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: /// /// .. - /// 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 ///