]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Backport "-T {ednsformerr,ednsnotimp,ednsrefused}"
authorMichał Kępień <michal@isc.org>
Fri, 31 May 2019 10:43:31 +0000 (12:43 +0200)
committerMichał Kępień <michal@isc.org>
Fri, 31 May 2019 10:43:31 +0000 (12:43 +0200)
Backport named command line switches implemented in commit
c81c9660f5050a064976276883399554c7e5e9df as they are needed by the
"legacy" system checks which are currently present in master and v9_14
branches, but missing in the v9_11 branch.

bin/named/client.c
bin/named/include/named/globals.h
bin/named/main.c

index 29fecadca8c50860c3363bb5f96e68283b70bffc..c54a70b68ef981d1813f1ed0a7dc4842f383ca21 100644 (file)
@@ -2696,6 +2696,31 @@ client_request(isc_task_t *task, isc_event_t *event) {
        client->ecs_scope = 0;
 
        if (opt != NULL) {
+               /*
+                * Are returning FORMERR to all EDNS queries?
+                * Simulate a STD13 compliant server.
+                */
+               if (ns_g_ednsformerr) {
+                       ns_client_error(client, DNS_R_FORMERR);
+                       return;
+               }
+
+               /*
+                * Are returning NOTIMP to all EDNS queries?
+                */
+               if (ns_g_ednsnotimp) {
+                       ns_client_error(client, DNS_R_NOTIMP);
+                       return;
+               }
+
+               /*
+                * Are returning REFUSED to all EDNS queries?
+                */
+               if (ns_g_ednsrefused) {
+                       ns_client_error(client, DNS_R_REFUSED);
+                       return;
+               }
+
                /*
                 * Are we dropping all EDNS queries?
                 */
@@ -2703,6 +2728,7 @@ client_request(isc_task_t *task, isc_event_t *event) {
                        ns_client_next(client, ISC_R_SUCCESS);
                        goto cleanup;
                }
+
                result = process_opt(client, opt);
                if (result != ISC_R_SUCCESS)
                        goto cleanup;
index 494e005f381ac26c496cbcc98858376934a7cc24..5b605a041c96ecec2a74db688efafeefe0385c63 100644 (file)
@@ -77,7 +77,7 @@ EXTERN in_port_t              lwresd_g_listenport     INIT(0);
 
 EXTERN ns_server_t *           ns_g_server             INIT(NULL);
 
-EXTERN bool            ns_g_lwresdonly         INIT(false);
+EXTERN bool                    ns_g_lwresdonly         INIT(false);
 
 /*
  * Logging.
@@ -105,9 +105,9 @@ EXTERN const char *         lwresd_g_conffile       INIT(NS_SYSCONFDIR
                                                             "/lwresd.conf");
 EXTERN const char *            lwresd_g_resolvconffile INIT("/etc"
                                                             "/resolv.conf");
-EXTERN bool            ns_g_conffileset        INIT(false);
-EXTERN bool            lwresd_g_useresolvconf  INIT(false);
-EXTERN uint16_t                ns_g_udpsize            INIT(4096);
+EXTERN bool                    ns_g_conffileset        INIT(false);
+EXTERN bool                    lwresd_g_useresolvconf  INIT(false);
+EXTERN uint16_t                        ns_g_udpsize            INIT(4096);
 EXTERN cfg_aclconfctx_t *      ns_g_aclconfctx         INIT(NULL);
 
 /*
@@ -121,11 +121,11 @@ EXTERN isc_resourcevalue_t        ns_g_initopenfiles      INIT(0);
 /*
  * Misc.
  */
-EXTERN bool            ns_g_coreok             INIT(true);
+EXTERN bool                    ns_g_coreok             INIT(true);
 EXTERN const char *            ns_g_chrootdir          INIT(NULL);
-EXTERN bool            ns_g_foreground         INIT(false);
-EXTERN bool            ns_g_logstderr          INIT(false);
-EXTERN bool            ns_g_nosyslog           INIT(false);
+EXTERN bool                    ns_g_foreground         INIT(false);
+EXTERN bool                    ns_g_logstderr          INIT(false);
+EXTERN bool                    ns_g_nosyslog           INIT(false);
 EXTERN const char *            ns_g_logfile            INIT(NULL);
 
 EXTERN const char *            ns_g_defaultsessionkeyfile
@@ -134,7 +134,7 @@ EXTERN const char *         ns_g_defaultsessionkeyfile
 EXTERN const char *            ns_g_defaultlockfile    INIT(NS_LOCALSTATEDIR
                                                             "/run/named/"
                                                             "named.lock");
-EXTERN bool            ns_g_forcelock          INIT(false);
+EXTERN bool                    ns_g_forcelock          INIT(false);
 
 #if NS_RUN_PID_DIR
 EXTERN const char *            ns_g_defaultpidfile     INIT(NS_LOCALSTATEDIR
@@ -169,21 +169,24 @@ EXTERN const char *               ns_g_engine             INIT(NULL);
 EXTERN int                     ns_g_listen             INIT(3);
 EXTERN isc_time_t              ns_g_boottime;
 EXTERN isc_time_t              ns_g_configtime;
-EXTERN bool            ns_g_memstatistics      INIT(false);
-EXTERN bool            ns_g_clienttest         INIT(false);
-EXTERN bool            ns_g_dropedns           INIT(false);
-EXTERN bool            ns_g_noedns             INIT(false);
-EXTERN bool            ns_g_nosoa              INIT(false);
-EXTERN bool            ns_g_noaa               INIT(false);
-EXTERN bool            ns_g_keepstderr         INIT(false);
+EXTERN bool                    ns_g_memstatistics      INIT(false);
+EXTERN bool                    ns_g_clienttest         INIT(false);
+EXTERN bool                    ns_g_dropedns           INIT(false);
+EXTERN bool                    ns_g_ednsformerr        INIT(false);
+EXTERN bool                    ns_g_ednsnotimp         INIT(false);
+EXTERN bool                    ns_g_ednsrefused        INIT(false);
+EXTERN bool                    ns_g_noedns             INIT(false);
+EXTERN bool                    ns_g_nosoa              INIT(false);
+EXTERN bool                    ns_g_noaa               INIT(false);
+EXTERN bool                    ns_g_keepstderr         INIT(false);
 EXTERN unsigned int            ns_g_delay              INIT(0);
-EXTERN bool            ns_g_nonearest          INIT(false);
-EXTERN bool            ns_g_notcp              INIT(false);
-EXTERN bool            ns_g_disable6           INIT(false);
-EXTERN bool            ns_g_disable4           INIT(false);
+EXTERN bool                    ns_g_nonearest          INIT(false);
+EXTERN bool                    ns_g_notcp              INIT(false);
+EXTERN bool                    ns_g_disable6           INIT(false);
+EXTERN bool                    ns_g_disable4           INIT(false);
 EXTERN unsigned int            ns_g_tat_interval       INIT(24*3600);
-EXTERN bool            ns_g_fixedlocal         INIT(false);
-EXTERN bool            ns_g_sigvalinsecs       INIT(false);
+EXTERN bool                    ns_g_fixedlocal         INIT(false);
+EXTERN bool                    ns_g_sigvalinsecs       INIT(false);
 
 #ifdef HAVE_GEOIP
 EXTERN dns_geoip_databases_t   *ns_g_geoip             INIT(NULL);
index 17f2daad91fd28b3cbd24e43333189e8a708f76f..108b8d62a2f0f28c113e55b2b4fc647cc55e2855 100644 (file)
@@ -479,6 +479,12 @@ parse_T_opt(char *option) {
                ns_g_dropedns = true;
        } else if (!strncmp(option, "dscp=", 5)) {
                isc_dscp_check_value = atoi(option + 5);
+       } else if (!strcmp(option, "ednsformerr")) {
+               ns_g_ednsformerr = true;
+       } else if (!strcmp(option, "ednsnotimp")) {
+               ns_g_ednsnotimp = true;
+       } else if (!strcmp(option, "ednsrefused")) {
+               ns_g_ednsrefused = true;
        } else if (!strcmp(option, "fixedlocal")) {
                ns_g_fixedlocal = true;
        } else if (!strcmp(option, "keepstderr")) {
@@ -538,7 +544,7 @@ parse_T_opt(char *option) {
        } else if (!strncmp(option, "tat=", 4)) {
                ns_g_tat_interval = atoi(option + 4);
        } else {
-               fprintf(stderr, "unknown -T flag '%s\n", option);
+               fprintf(stderr, "unknown -T flag '%s'\n", option);
        }
 }