diff options
Diffstat (limited to 'nss/nss_db/db-netgrp.c')
-rw-r--r-- | nss/nss_db/db-netgrp.c | 62 |
1 files changed, 10 insertions, 52 deletions
diff --git a/nss/nss_db/db-netgrp.c b/nss/nss_db/db-netgrp.c index 722281d116..9538d2785f 100644 --- a/nss/nss_db/db-netgrp.c +++ b/nss/nss_db/db-netgrp.c @@ -1,5 +1,5 @@ /* Netgroup file parser in nss_db modules. - Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1999, 2000 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -18,14 +18,16 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <db.h> +#include <dlfcn.h> #include <errno.h> #include <fcntl.h> +#include <netgroup.h> #include <string.h> #include <bits/libc-lock.h> #include <paths.h> + #include "nsswitch.h" -#include "netgroup.h" +#include "nss_db.h" #define DBFILE _PATH_VARDB "netgroup.db" @@ -35,58 +37,18 @@ __libc_lock_define_initialized (static, lock) /* Maintenance of the shared handle open on the database. */ -static DB *db; +static NSS_DB *db; static char *entry; static char *cursor; enum nss_status _nss_db_setnetgrent (const char *group) { - enum nss_status status = NSS_STATUS_SUCCESS; - int err; + enum nss_status status; __libc_lock_lock (lock); - /* Make sure the data base file is open. */ - if (db == NULL) - { - err = __nss_db_open (DBFILE, DB_BTREE, O_RDONLY, 0, NULL, NULL, &db); - - if (err != 0) - { - __set_errno (err); - status = err == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL; - } - else - { - /* We have to make sure the file is `closed on exec'. */ - int fd; - int result; - - err = db->fd (db, &fd); - if (err != 0) - { - __set_errno (err); - result = -1; - } - else - { - result = fcntl (fd, F_GETFD, 0); - - if (result >= 0) - result = fcntl (fd, F_SETFD, result | FD_CLOEXEC); - } - - if (result < 0) - { - /* Something went wrong. Close the stream and return a - failure. */ - db->close (db, 0); - db = NULL; - status = NSS_STATUS_UNAVAIL; - } - } - } + status = internal_setent (DBFILE, &db); if (status == NSS_STATUS_SUCCESS) { @@ -94,7 +56,7 @@ _nss_db_setnetgrent (const char *group) DBT value; value.flags = 0; - if (db->get (db, NULL, &key, &value, 0) != 0) + if (DL_CALL_FCT (db->get, (db->db, NULL, &key, &value, 0)) != 0) status = NSS_STATUS_NOTFOUND; else cursor = entry = value.data; @@ -112,11 +74,7 @@ _nss_db_endnetgrent (void) { __libc_lock_lock (lock); - if (db != NULL) - { - db->close (db, 0); - db = NULL; - } + internal_endent (&db); __libc_lock_unlock (lock); |