diff options
author | wpaul <wpaul@FreeBSD.org> | 1998-02-11 19:15:32 +0000 |
---|---|---|
committer | wpaul <wpaul@FreeBSD.org> | 1998-02-11 19:15:32 +0000 |
commit | 02d038fd998585a7608df56138da13e4055bdfd9 (patch) | |
tree | 5ae4bf5154055f173471b14854e0c97cf969c450 /usr.sbin/ypserv/yp_server.c | |
parent | 2f8caa4fd654ed1b60b4125cc7de07882455bddb (diff) | |
download | FreeBSD-src-02d038fd998585a7608df56138da13e4055bdfd9.zip FreeBSD-src-02d038fd998585a7608df56138da13e4055bdfd9.tar.gz |
Fix a bug in the database handle caching. This has to do with the way the
underlying database code works. When dealing with first/next queries, you
have the notion of a database 'cursor,' which is essentially a file pointer
for the database. To select the first entry, you do a fetch with the
R_FIRST flag set, then you can use the R_NEXT flag to enumerate the other
entries in the database. Unfortunately, doing a direct fetch with no flag
does _not_ set the 'cursor,' so you can't do a direct fetch and then
enumerate the table from there.
The bug is that cached handles generated as the result of a YPPROC_MATCH
were being treated as though they were the same as handles generated by
a YPPROC_FIRST, which is not the case. The manifestation is that if you
do a 'ypmatch first-key-in-map map' followed by a yp_first()/yp_next()
pair, the yp_first() and yp_next() both return the first key in the
table, which makes the entry appear to be duplicated.
A couple smaller things since I'm here:
- yp_main.c and yp_error.c both have a global 'int debug' in them.
For some reason, our cc/ld doesn't flag this as a multiply defined
symbol even though it should. Removed the declaration from yp_main.c;
we want the one in yp_error.c.
- The Makefile wasn't installing ypinit in the right place.
Diffstat (limited to 'usr.sbin/ypserv/yp_server.c')
-rw-r--r-- | usr.sbin/ypserv/yp_server.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/usr.sbin/ypserv/yp_server.c b/usr.sbin/ypserv/yp_server.c index 9927f6b..3b645a8 100644 --- a/usr.sbin/ypserv/yp_server.c +++ b/usr.sbin/ypserv/yp_server.c @@ -33,7 +33,7 @@ #ifndef lint static const char rcsid[] = - "$Id$"; + "$Id: yp_server.c,v 1.1 1997/11/09 20:54:38 wpaul Exp wpaul $"; #endif /* not lint */ #include "yp.h" @@ -143,7 +143,7 @@ ypproc_match_2_svc(ypreq_key *argp, struct svc_req *rqstp) return (&result); } - if (yp_select_map(argp->map, argp->domain, &argp->key, 1) != YP_TRUE) { + if (yp_select_map(argp->map, argp->domain, NULL, 1) != YP_TRUE) { result.stat = yp_errno; return(&result); } @@ -204,7 +204,7 @@ ypproc_first_2_svc(ypreq_nokey *argp, struct svc_req *rqstp) return (&result); } - if (yp_select_map(argp->map, argp->domain, &result.key, 0) != YP_TRUE) { + if (yp_select_map(argp->map, argp->domain, NULL, 0) != YP_TRUE) { result.stat = yp_errno; return(&result); } |