From: Evan Hunt Date: Fri, 27 Apr 2007 22:48:00 +0000 (+0000) Subject: A new server config option "fqdn-reply" specifies whether the server X-Git-Tag: v4_0_0a1~33 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1ba87b376be00aa767e70da4e7932c8857c7db85;p=thirdparty%2Fdhcp.git A new server config option "fqdn-reply" specifies whether the server should send out option 81 (FQDN). Defaults to "on". If set to "off", the FQDN option is not sent, even if the client requested it. This is needed because some clients misbehave otherwise. [rt16624] --- diff --git a/RELNOTES b/RELNOTES index 25000f802..dd67d5b8e 100644 --- a/RELNOTES +++ b/RELNOTES @@ -27,6 +27,12 @@ the README file. Changes since 3.1.0b1 +- A new server config option "fqdn-reply" specifies whether the server + should send out option 81 (FQDN). Defaults to "on". If set to "off", + the FQDN option is not sent, even if the client requested it. This is + needed because some clients misbehave otherwise. Thanks to Christof Chen + at Allianz. + - Allow trace output files (-tf option) to be overwritten, rather than crashing dhcpd if the file already exists diff --git a/includes/dhcpd.h b/includes/dhcpd.h index 276e50d90..c52a91254 100644 --- a/includes/dhcpd.h +++ b/includes/dhcpd.h @@ -552,6 +552,7 @@ struct lease_state { #define SV_LEASEQUERY 49 #define SV_ADAPTIVE_LEASE_TIME_THRESHOLD 50 #define SV_DO_REVERSE_UPDATES 51 +#define SV_FQDN_REPLY 52 #if !defined (DEFAULT_PING_TIMEOUT) # define DEFAULT_PING_TIMEOUT 1 diff --git a/server/ddns.c b/server/ddns.c index 7ef4fecda..3e833d637 100644 --- a/server/ddns.c +++ b/server/ddns.c @@ -34,7 +34,7 @@ #ifndef lint static char copyright[] = -"$Id: ddns.c,v 1.25 2007/04/03 16:46:03 dhankins Exp $ Copyright (c) 2004-2007 Internet Systems Consortium. All rights reserved.\n"; +"$Id: ddns.c,v 1.26 2007/04/27 22:48:00 each Exp $ Copyright (c) 2004-2007 Internet Systems Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -597,6 +597,21 @@ int ddns_updates (struct packet *packet, } noerror: + /* + * If fqdn-reply option is disabled in dhcpd.conf, then don't + * send the client an FQDN option at all, even if one was requested. + * (WinXP clients allegedly misbehave if the option is present, + * refusing to handle PTR updates themselves). + */ + if ((oc = lookup_option (&server_universe, state->options, + SV_FQDN_REPLY)) && + !evaluate_boolean_option_cache (&ignorep, packet, lease, + (struct client_state *)0, + packet->options, + state->options, + &lease->scope, oc, MDL)) { + goto badfqdn; + /* If we're ignoring client updates, then we tell a sort of 'white * lie'. We've already updated the name the server wants (per the * config written by the server admin). Now let the client do as @@ -605,7 +620,7 @@ int ddns_updates (struct packet *packet, * We only form an FQDN option this way if the client supplied an * FQDN option that had FQDN_SERVER_UPDATE set false. */ - if (client_ignorep && + } else if (client_ignorep && (oc = lookup_option(&fqdn_universe, packet->options, FQDN_SERVER_UPDATE)) && !evaluate_boolean_option_cache(&ignorep, packet, lease, NULL, diff --git a/server/stables.c b/server/stables.c index 011a9351c..3d68e1803 100644 --- a/server/stables.c +++ b/server/stables.c @@ -34,7 +34,7 @@ #ifndef lint static char copyright[] = -"$Id: stables.c,v 1.36 2007/04/03 16:46:03 dhankins Exp $ Copyright (c) 2004-2007 Internet Systems Consortium. All rights reserved.\n"; +"$Id: stables.c,v 1.37 2007/04/27 22:48:00 each Exp $ Copyright (c) 2004-2007 Internet Systems Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -237,6 +237,7 @@ static struct option server_options[] = { { "leasequery", "f", &server_universe, 49, 1 }, { "adaptive-lease-time-threshold", "B", &server_universe, 50, 1 }, { "do-reverse-updates", "f", &server_universe, 51, 1 }, + { "fqdn-reply", "f", &server_universe, 52, 1 }, { NULL, NULL, NULL, 0, 0 } };