/*
* find a matching entry in the database
*/
+ t = nil;
nstrcpy(dname, name, sizeof dname);
for(x=0; x<4; x++){
switch(x){
case 1: /* try unicode */
- if(idn2utf(name, dname, sizeof dname) == nil){
+ if(idn2utf(name, dname, sizeof dname) < 0){
nstrcpy(dname, name, sizeof dname);
continue;
}
continue;
break;
case 3: /* try ascii (lower case) */
- if(utf2idn(name, dname, sizeof dname) == nil)
+ if(utf2idn(name, dname, sizeof dname) < 0)
continue;
case 2:
mklowcase(dname);
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;
}
return nil;
}
+
/* search whole entry for default domain name */
for(nt = t; nt; nt = nt->entry)
if(strcmp(nt->attr, "dom") == 0){
qunlock(&ipifclock);
qunlock(&dblock);
- return t;
+ return ndbdedup(t);
}
/*