]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/cmd/ndb/dblookup.c
merge
[plan9front.git] / sys / src / cmd / ndb / dblookup.c
index b7bb9097e5149c4b56ef781c79ed28ce33c511fe..20d58502fc44a44d64952588cf846091e3f36dcd 100644 (file)
@@ -257,6 +257,7 @@ dblookup1(char *name, int type, int auth, int ttl)
        /*
         *  find a matching entry in the database
         */
+       t = nil;
        nstrcpy(dname, name, sizeof dname);
        for(x=0; x<4; x++){
                switch(x){
@@ -277,10 +278,23 @@ dblookup1(char *name, int type, int auth, int ttl)
                                continue;
                        break;
                }
-               t = nil;
-               free(ndbgetvalue(db, &s, "dom", dname, attr, &t));
-               if(t == nil && strchr(dname, '.') == nil)
-                       free(ndbgetvalue(db, &s, "sys", dname, attr, &t));
+               for(nt = ndbsearch(db, &s, "dom", dname); nt != nil; nt = ndbsnext(&s, "dom", dname)) {
+                       if(ndbfindattr(nt, s.t, attr) == nil) {
+                               ndbfree(nt);
+                               continue;
+                       }
+                       t = ndbconcatenate(t, ndbreorder(nt, s.t));
+               }
+               if(t == nil && strchr(dname, '.') == nil) {
+                       for(nt = ndbsearch(db, &s, "sys", dname); nt != nil; nt = ndbsnext(&s, "sys", dname)) {
+                               if(ndbfindattr(nt, s.t, attr) == nil) {
+                                       ndbfree(nt);
+                                       continue;
+                               }
+                               t = ndbconcatenate(t, ndbreorder(nt, s.t));
+                       }
+               }
+               s.t = t;
                if(t != nil)
                        break;
        }
@@ -290,6 +304,7 @@ dblookup1(char *name, int type, int auth, int ttl)
                return nil;
        }
 
+
        /* search whole entry for default domain name */
        for(nt = t; nt; nt = nt->entry)
                if(strcmp(nt->attr, "dom") == 0){