Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include        "common.h"
#include        "smtp.h"
#include        <ndb.h>

int
rmtdns(char *net, char *path)
{
        int fd, n, nb, r;
        char *domain, *cp, buf[Maxdomain + 5];

        if(net == 0 || path == 0)
                return 0;

        domain = strdup(path);
        cp = strchr(domain, '!');
        if(cp){
                *cp = 0;
                n = cp-domain;
        } else
                n = strlen(domain);

        if(*domain == '[' && domain[n-1] == ']'){ /* accept [nnn.nnn.nnn.nnn] */
                domain[n-1] = 0;
                r = strcmp(ipattr(domain+1), "ip");
                domain[n-1] = ']';
        } else
                r = strcmp(ipattr(domain), "ip"); /* accept nnn.nnn.nnn.nnn */
        if(r == 0){
                free(domain);
                return 0;
        }

        snprint(buf, sizeof buf, "%s/dns", net);
        fd = open(buf, ORDWR);                  /* look up all others */
        if(fd < 0){                             /* dns screw up - can't check */
                free(domain);
                return 0;
        }

        n = snprint(buf, sizeof buf, "%s all", domain);
        free(domain);
        seek(fd, 0, 0);
        nb = write(fd, buf, n);
        close(fd);
        if(nb != n){
                rerrstr(buf, sizeof buf);
                if (strcmp(buf, "dns: name does not exist") == 0)
                        return -1;
        }
        return 0;
}

/*
void
main(int, char *argv[])
{
        print("return = %d\n", rmtdns("/net.alt", argv[1]));
        exits(0);
}
*/