Message-ID: content-type: text/plain; charset="utf-8" Date: Tue, 2 Apr 2019 20:34:00 +0000 From: "Greg Rabil" X-Original-To: dhcp-confidential@bugs.isc.org From www@isc.org Tue Apr 2 20:34:03 2019 Subject: DHCP 4.4.1 - Dynamic DNS updates are done via TCP instead of UDP Delivered-To: dhcp-confidential@bugs.isc.org To: dhcp-bugs@isc.org X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on mx.pao1.isc.org X-Mailer: PHPMailer 5.2.22 (https://github.com/PHPMailer/PHPMailer) MIME-Version: 1.0 X-Spam-Status: No, score=0.0 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, UNPARSEABLE_RELAY autolearn=disabled version=3.4.1 Return-Path: Received: from mx.pao1.isc.org (mx.pao1.isc.org [149.20.64.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mx.pao1.isc.org", Issuer "COMODO RSA Organization Validation Secure Server CA" (not verified)) by bugs.isc.org (Postfix) with ESMTPS id 15F81D7882F for ; Tue, 2 Apr 2019 20:34:03 +0000 (UTC) Received: from iscwebprod.isc.org (iscwebprod.isc.org [IPv6:2001:4f8:1:d::16]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx.pao1.isc.org (Postfix) with ESMTPS id 1AA4A3AB001 for ; Tue, 2 Apr 2019 20:34:01 +0000 (UTC) Received: from www (uid 80) (envelope-from www@iscwebprod.isc.org) id 7b7d19 by iscwebprod.isc.org (DragonFly Mail Agent v0.11); Tue, 02 Apr 2019 20:34:00 +0000 X-PHP-Originating-Script: 20001:class-phpmailer.php X-RT-Incoming-Encryption: Not encrypted X-RT-Original-Encoding: utf-8 X-RT-Interface: Email Content-Length: 1788 Bug Report from www.isc.org: Name: Greg Rabil Email: greg.rabil@bt.com Software Version: DHCP 4.4.1 OS: Linux Subject:Dynamic DNS updates are done via TCP instead of UDP Bug Detail =========== In DHCP 4.3, all dynamic DNS updates are performed using UDP. In DHCP 4.4, that behavior has changed to use TCP. As far as I can tell, this change was not intentional, and instead is a bug caused by changes in the BIND library. In both DHCP 4.3 and 4.4, the common/dns.c source file contains a macro that maps ddns_update to dns_client_startupdate. When the ddns_modify_fwd function calls ddns_update (dns_client_startupdate), it passes DNS_CLIENTRESOPT_ALLOWRUN as the eight argument. The bind/include/dns/client.h file defines DNS_CLIENTRESOPT_ALLOWRUN as 0x02. The problem stems from the change in the implementation of the dns_client_startupdate function between the bind-9.9.11 package in DHCP 4.3 and the bind-9.11.2-p1 package in DHCP 4.4. Specifically, in bind-9.9.11, the implementation of dns_client_startupdate in lib/dns/client.c references the eight parameter (options) only in this line: UNUSED(options); However, in bind-9.11-2-p1, the implementation includes the line above, as well as this line: want_tcp = ISC_TF((options & DNS_CLIENTUPDOPT_TCP) != 0); Note that lib/dns/include/dns/client.h defines DNS_CLIENTUPDOPT_TCP as 0x02, which then sets the 'want_tcp' boolean to true. Since the caller (client.c in DHCP source code) is intending to set DNS_CLIENTRESOPT_ALLOWRUN flag via the options parameter, but not the DNS_CLIENTUPDOPT_TCP flag, this is the source of the problem, and a change in behavior with respect to the DDNS updates using UDP in DHCP 4.3 but TCP in DHCP 4.4. --- This email was received through isc.org Bug Submission Form