s4 dns: Allow to specify static grant entries to be added to the dynamicaly generated...
authorMatthieu Patou <mat@matws.net>
Fri, 23 Apr 2010 13:27:05 +0000 (17:27 +0400)
committerStefan Metzmacher <metze@samba.org>
Sat, 24 Apr 2010 12:09:10 +0000 (14:09 +0200)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
source4/dsdb/dns/dns_update.c

index 0e8f141f3e8ab7a83a689e4daabc8ebd88af7a96..1420bb7f4b0f616dd296d7b919780caf3e630a97 100644 (file)
@@ -93,8 +93,10 @@ static void dnsupdate_rndc_done(struct tevent_req *subreq)
 static void dnsupdate_rebuild(struct dnsupdate_service *service)
 {
        int ret;
 static void dnsupdate_rebuild(struct dnsupdate_service *service)
 {
        int ret;
+       size_t size;
        struct ldb_result *res;
        struct ldb_result *res;
-       const char *tmp_path, *path;
+       const char *tmp_path, *path, *path_static;
+       char *static_policies;
        int fd;
        unsigned int i;
        const char *attrs[] = { "sAMAccountName", NULL };
        int fd;
        unsigned int i;
        const char *attrs[] = { "sAMAccountName", NULL };
@@ -119,13 +121,20 @@ static void dnsupdate_rebuild(struct dnsupdate_service *service)
                path = private_path(tmp_ctx, service->task->lp_ctx, "named.conf.update");
        }
 
                path = private_path(tmp_ctx, service->task->lp_ctx, "named.conf.update");
        }
 
+       path_static = lp_parm_string(service->task->lp_ctx, NULL, "dnsupdate", "extra_static_grant_rules");
+       if (path_static == NULL) {
+               path_static = private_path(tmp_ctx, service->task->lp_ctx, "named.conf.update.static");
+       }
+
        tmp_path = talloc_asprintf(tmp_ctx, "%s.tmp", path);
        tmp_path = talloc_asprintf(tmp_ctx, "%s.tmp", path);
-       if (path == NULL || tmp_path == NULL) {
-               DEBUG(0,(__location__ ": Unable to get paths"));
+       if (path == NULL || tmp_path == NULL || path_static == NULL ) {
+               DEBUG(0,(__location__ ": Unable to get paths\n"));
                talloc_free(tmp_ctx);
                return;
        }
 
                talloc_free(tmp_ctx);
                return;
        }
 
+       static_policies = file_load(path_static, &size, 0, tmp_ctx);
+
        unlink(tmp_path);
        fd = open(tmp_path, O_CREAT|O_TRUNC|O_WRONLY, 0444);
        if (fd == -1) {
        unlink(tmp_path);
        fd = open(tmp_path, O_CREAT|O_TRUNC|O_WRONLY, 0444);
        if (fd == -1) {
@@ -136,6 +145,11 @@ static void dnsupdate_rebuild(struct dnsupdate_service *service)
 
        dprintf(fd, "/* this file is auto-generated - do not edit */\n");
        dprintf(fd, "update-policy {\n");
 
        dprintf(fd, "/* this file is auto-generated - do not edit */\n");
        dprintf(fd, "update-policy {\n");
+       if( static_policies != NULL ) {
+               dprintf(fd, "/* Start of static entries */\n");
+               dprintf(fd, "%s\n",static_policies);
+               dprintf(fd, "/* End of static entries */\n");
+       }
        dprintf(fd, "\tgrant %s ms-self * A AAAA;\n", realm);
        dprintf(fd, "\tgrant administrator@%s wildcard * A AAAA SRV CNAME TXT;\n", realm);
 
        dprintf(fd, "\tgrant %s ms-self * A AAAA;\n", realm);
        dprintf(fd, "\tgrant administrator@%s wildcard * A AAAA SRV CNAME TXT;\n", realm);