diff options
| author | glass <glass@NetBSD.org> | 1993-07-20 18:10:14 +0000 |
|---|---|---|
| committer | glass <glass@NetBSD.org> | 1993-07-20 18:10:14 +0000 |
| commit | f2a0b0fbdfaab79400df65d1d67a7907cd444fcd (patch) | |
| tree | 91d3b9b68c90ea6f29e5c35c89279b2a3155d66a /usr.sbin/sendmail/src/map.c | |
| parent | 9d232f6caedf55736719cf3417d56f907bf9c5ee (diff) | |
Upgraded sendmail from revision 8.1C to 8.3;
this version of sendmail tries to use sysconf() if the _SC_* macros
are defined in unistd.h. We have the macros but not
the function. A temporary "fix" has been made to avoid
the issue.
Diffstat (limited to 'usr.sbin/sendmail/src/map.c')
| -rw-r--r-- | usr.sbin/sendmail/src/map.c | 75 |
1 files changed, 59 insertions, 16 deletions
diff --git a/usr.sbin/sendmail/src/map.c b/usr.sbin/sendmail/src/map.c index ef53f2353e2..bfa2dc03c26 100644 --- a/usr.sbin/sendmail/src/map.c +++ b/usr.sbin/sendmail/src/map.c @@ -33,7 +33,7 @@ */ #ifndef lint -static char sccsid[] = "@(#)map.c 8.1 (Berkeley) 6/7/93"; +static char sccsid[] = "@(#)map.c 8.2 (Berkeley) 7/11/93"; #endif /* not lint */ #include "sendmail.h" @@ -109,6 +109,7 @@ map_parseargs(map, ap) { register char *p = ap; + map->map_mflags |= MF_TRY0NULL | MF_TRY1NULL; for (;;) { while (isascii(*p) && isspace(*p)) @@ -119,6 +120,11 @@ map_parseargs(map, ap) { case 'N': map->map_mflags |= MF_INCLNULL; + map->map_mflags &= ~MF_TRY0NULL; + break; + + case 'O': + map->map_mflags &= ~MF_TRY1NULL; break; case 'o': @@ -444,16 +450,28 @@ ndbm_map_lookup(map, name, av, statp) makelower(keybuf); key.dptr = keybuf; } - if (bitset(MF_INCLNULL, map->map_mflags)) - key.dsize++; (void) lockfile(dbm_dirfno((DBM *) map->map_db1), map->map_file, LOCK_SH); - val = dbm_fetch((DBM *) map->map_db1, key); + val.dptr = NULL; + if (bitset(MF_TRY0NULL, map->map_mflags)) + { + val = dbm_fetch((DBM *) map->map_db1, key); + if (val.dptr != NULL) + map->map_mflags &= ~MF_TRY1NULL; + } + if (val.dptr == NULL && bitset(MF_TRY1NULL, map->map_mflags)) + { + key.dsize++; + val = dbm_fetch((DBM *) map->map_db1, key); + if (val.dptr != NULL) + map->map_mflags &= ~MF_TRY0NULL; + } (void) lockfile(dbm_dirfno((DBM *) map->map_db1), map->map_file, LOCK_UN); if (val.dptr == NULL) return NULL; if (bitset(MF_MATCHONLY, map->map_mflags)) - av = NULL; - return map_rewrite(map, val.dptr, val.dsize, av); + return map_rewrite(map, name, strlen(name), NULL); + else + return map_rewrite(map, val.dptr, val.dsize, av); } @@ -693,12 +711,23 @@ db_map_lookup(map, name, av, statp) bcopy(name, keybuf, key.size + 1); if (!bitset(MF_NOFOLDCASE, map->map_mflags)) makelower(keybuf); - if (bitset(MF_INCLNULL, map->map_mflags)) - key.size++; #ifndef OLD_NEWDB (void) lockfile(db->fd(db), map->map_file, LOCK_SH); #endif - st = db->get(db, &key, &val, 0); + st = 1; + if (bitset(MF_TRY0NULL, map->map_mflags)) + { + st = db->get(db, &key, &val, 0); + if (st == 0) + map->map_mflags &= ~MF_TRY1NULL; + } + if (st != 0 && bitset(MF_TRY1NULL, map->map_mflags)) + { + key.size++; + st = db->get(db, &key, &val, 0); + if (st == 0) + map->map_mflags &= ~MF_TRY0NULL; + } saveerrno = errno; #ifndef OLD_NEWDB (void) lockfile(db->fd(db), map->map_file, LOCK_UN); @@ -711,8 +740,9 @@ db_map_lookup(map, name, av, statp) return NULL; } if (bitset(MF_MATCHONLY, map->map_mflags)) - av = NULL; - return map_rewrite(map, val.data, val.size, av); + return map_rewrite(map, name, strlen(name), NULL); + else + return map_rewrite(map, val.data, val.size, av); } @@ -868,10 +898,22 @@ nis_map_lookup(map, name, av, statp) bcopy(name, keybuf, buflen + 1); if (!bitset(MF_NOFOLDCASE, map->map_mflags)) makelower(keybuf); - if (bitset(MF_INCLNULL, map->map_mflags)) + yperr = YPERR_KEY; + if (bitset(MF_TRY0NULL, map->map_mflags)) + { + yperr = yp_match(map->map_domain, map->map_file, keybuf, buflen, + &vp, &vsize); + if (yperr == 0) + map->map_mflags &= ~MF_TRY1NULL; + } + if (yperr == YPERR_KEY && bitset(MF_TRY1NULL, map->map_mflags)) + { buflen++; - yperr = yp_match(map->map_domain, map->map_file, keybuf, buflen, - &vp, &vsize); + yperr = yp_match(map->map_domain, map->map_file, keybuf, buflen, + &vp, &vsize); + if (yperr == 0) + map->map_mflags &= ~MF_TRY0NULL; + } if (yperr != 0) { if (yperr != YPERR_KEY && yperr != YPERR_BUSY) @@ -879,8 +921,9 @@ nis_map_lookup(map, name, av, statp) return NULL; } if (bitset(MF_MATCHONLY, map->map_mflags)) - av = NULL; - return map_rewrite(map, vp, vsize, av); + return map_rewrite(map, name, strlen(name), NULL); + else + return map_rewrite(map, vp, vsize, av); } |
