summaryrefslogtreecommitdiff
path: root/usr.sbin/sendmail/src/map.c
diff options
context:
space:
mode:
authorglass <glass@NetBSD.org>1993-07-20 18:10:14 +0000
committerglass <glass@NetBSD.org>1993-07-20 18:10:14 +0000
commitf2a0b0fbdfaab79400df65d1d67a7907cd444fcd (patch)
tree91d3b9b68c90ea6f29e5c35c89279b2a3155d66a /usr.sbin/sendmail/src/map.c
parent9d232f6caedf55736719cf3417d56f907bf9c5ee (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.c75
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);
}