]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
fix double free issue
authorRalph Dolmans <ralph@nlnetlabs.nl>
Tue, 4 Jun 2019 10:38:44 +0000 (12:38 +0200)
committerRalph Dolmans <ralph@nlnetlabs.nl>
Tue, 4 Jun 2019 10:38:44 +0000 (12:38 +0200)
doc/example.conf.in
services/rpz.c
util/config_file.c

index c78156fe11819c6c138b64e9e28bc7c49bceec96..be1606fa139a805b8f62111c7422c198b961a5be 100644 (file)
@@ -991,3 +991,16 @@ remote-control:
 #     redis-server-port: 6379
 #     # timeout (in ms) for communication with the redis server
 #     redis-timeout: 100
+
+# Response Policy Zones
+# RPZ policies. Applied in order of configuration. QNAME trigger is the only
+# supported trigger. Supported actions are: NXDOMAIN, NODATA, PASSTHRU, DROP and
+# Local Data. Policy can be loaded from file or using zone transfer.
+# rpz:
+#     name: "rpz.example.com"
+#     zonefile: "rpz.example.com"
+#     rpz-action-override: cname
+#     rpz-cname-override: www.example.org
+#     rpz-log: yes
+#     rpz-log-name: "example policy"
+#     tags: "example"
index 1e3d39fab5554965fdba4612414d2b0e21135127..fdc10b8ddb3a203fc2ebab8f323ed557220d3a68 100644 (file)
@@ -258,6 +258,7 @@ void rpz_delete(struct rpz* r)
        local_zones_delete(r->local_zones);
        regional_destroy(r->region);
        free(r->taglist);
+       free(r->log_name);
        free(r);
 }
 
@@ -334,12 +335,10 @@ rpz_create(struct config_auth* p)
                free(r);
                return 0;
        }
-       r->taglist = p->rpz_taglist;
        r->taglistlen = p->rpz_taglistlen;
+       r->taglist = memdup(p->rpz_taglist, r->taglistlen);
        if(p->rpz_action_override) {
                r->action_override = rpz_config_to_action(p->rpz_action_override);
-               free(p->rpz_action_override);
-               p->rpz_action_override = NULL;
        }
        else
                r->action_override = RPZ_NO_OVERRIDE_ACTION;
@@ -358,12 +357,9 @@ rpz_create(struct config_auth* p)
                if(sldns_str2wire_dname_buf(p->rpz_cname, nm, &nmlen) != 0) {
                        log_err("cannot parse RPZ cname override: %s",
                                p->rpz_cname);
-                       free(p->rpz_cname);
                        free(r);
                        return 0;
                }
-               free(p->rpz_cname);
-               p->rpz_cname = NULL;
                r->cname_override = new_cname_override(r->region, nm, nmlen);
                if(!r->cname_override) {
                        free(r);
@@ -371,7 +367,7 @@ rpz_create(struct config_auth* p)
                }
        }
        r->log = p->rpz_log;
-       r->log_name = p->rpz_log_name;
+       r->log_name = strdup(p->rpz_log_name);
        return r;
 }
 
index c12dc88d87cccff96c554e2e61e6e5f8ed03134c..dbd5a7bad57f159c5acda595c746b17fa2c46ea8 100644 (file)
@@ -1268,8 +1268,10 @@ config_delauth(struct config_auth* p)
        config_delstrlist(p->urls);
        config_delstrlist(p->allow_notify);
        free(p->zonefile);
-       if(p->rpz_taglist)
-               free(p->rpz_taglist);
+       free(p->rpz_taglist);
+       free(p->rpz_action_override);
+       free(p->rpz_cname);
+       free(p->rpz_log_name);
        free(p);
 }