diff options
author | Ulrich Drepper <drepper@redhat.com> | 1997-08-05 23:36:21 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1997-08-05 23:36:21 +0000 |
commit | 044b16f4e9ae773187f4fee8a9a0a54f9a51f13f (patch) | |
tree | 58bc41e16535e0d0f61d51e6af15ce4128864fc9 /nss | |
parent | c59a94711c6a9d38811b828863076f39000831b4 (diff) |
update for 2.0.5pre1
Diffstat (limited to 'nss')
-rw-r--r-- | nss/digits_dots.c | 5 | ||||
-rw-r--r-- | nss/getXXbyYY_r.c | 2 | ||||
-rw-r--r-- | nss/nss_db/db-XXX.c | 24 | ||||
-rw-r--r-- | nss/nss_db/db-alias.c | 24 | ||||
-rw-r--r-- | nss/nss_db/db-netgrp.c | 20 | ||||
-rw-r--r-- | nss/nss_files/files-XXX.c | 23 | ||||
-rw-r--r-- | nss/nss_files/files-alias.c | 25 | ||||
-rw-r--r-- | nss/nss_files/files-hosts.c | 30 | ||||
-rw-r--r-- | nss/nss_files/files-netgrp.c | 5 |
9 files changed, 126 insertions, 32 deletions
diff --git a/nss/digits_dots.c b/nss/digits_dots.c index c953fc6ec6..e1baafa843 100644 --- a/nss/digits_dots.c +++ b/nss/digits_dots.c @@ -159,7 +159,8 @@ } } - if (isxdigit (name[0]) || name[0] == ':') + if ((isxdigit (name[0]) && strchr (name, ':') != NULL) + || name[0] == ':') { const char *cp; char *hostname; @@ -238,8 +239,6 @@ { if (*--cp == '.') break; - if (!strchr (name, ':')) - break; /* All-IPv6-legal, no dot at the end. Fake up a hostent as if we'd actually done a lookup. */ diff --git a/nss/getXXbyYY_r.c b/nss/getXXbyYY_r.c index 371b2e36f5..988f46c88e 100644 --- a/nss/getXXbyYY_r.c +++ b/nss/getXXbyYY_r.c @@ -140,5 +140,5 @@ done: return status == NSS_STATUS_SUCCESS ? 0 : -1; } -#define do_weak_alias(n1, n2) weak_alias ((n1), (n2)) +#define do_weak_alias(n1, n2) weak_alias (n1, (n2)) do_weak_alias (INTERNAL (REENTRANT_NAME), REENTRANT_NAME) diff --git a/nss/nss_db/db-XXX.c b/nss/nss_db/db-XXX.c index 1596be560a..22a24aae5b 100644 --- a/nss/nss_db/db-XXX.c +++ b/nss/nss_db/db-XXX.c @@ -1,5 +1,5 @@ /* Common code for DB-based databases in nss_db module. - Copyright (C) 1996 Free Software Foundation, Inc. + Copyright (C) 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -66,7 +66,27 @@ internal_setent (int stayopen) db = dbopen (DBFILE, O_RDONLY, 0, DB_BTREE, NULL); if (db == NULL) - status = NSS_STATUS_UNAVAIL; + status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL; + else + { + /* We have to make sure the file is `closed on exec'. */ + int result, flags; + + result = flags = fcntl ((*db->fd) (db), F_GETFD, 0); + if (result >= 0) + { + flags |= FD_CLOEXEC; + result = fcntl ((*db->fd) (db), F_SETFD, flags); + } + if (result < 0) + { + /* Something went wrong. Close the stream and return a + failure. */ + (*db->close) (db); + db = NULL; + status = NSS_STATUS_UNAVAIL; + } + } } /* Remember STAYOPEN flag. */ diff --git a/nss/nss_db/db-alias.c b/nss/nss_db/db-alias.c index 2c44f4df79..349ce9cfb2 100644 --- a/nss/nss_db/db-alias.c +++ b/nss/nss_db/db-alias.c @@ -1,5 +1,5 @@ /* Mail alias file parser in nss_db module. - Copyright (C) 1996 Free Software Foundation, Inc. + Copyright (C) 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -50,7 +50,27 @@ internal_setent (int stayopen) db = dbopen (_PATH_VARDB "aliases.db", O_RDONLY, 0, DB_BTREE, NULL); if (db == NULL) - status = NSS_STATUS_UNAVAIL; + status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL; + else + { + /* We have to make sure the file is `closed on exec'. */ + int result, flags; + + result = flags = fcntl ((*db->fd) (db), F_GETFD, 0); + if (result >= 0) + { + flags |= FD_CLOEXEC; + result = fcntl ((*db->fd) (db), F_SETFD, flags); + } + if (result < 0) + { + /* Something went wrong. Close the stream and return a + failure. */ + (*db->close) (db); + db = NULL; + status = NSS_STATUS_UNAVAIL; + } + } } /* Remember STAYOPEN flag. */ diff --git a/nss/nss_db/db-netgrp.c b/nss/nss_db/db-netgrp.c index b7c172ddb0..985b844572 100644 --- a/nss/nss_db/db-netgrp.c +++ b/nss/nss_db/db-netgrp.c @@ -53,6 +53,26 @@ _nss_db_setnetgrent (const char *group) if (db == NULL) status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL; + else + { + /* We have to make sure the file is `closed on exec'. */ + int result, flags; + + result = flags = fcntl ((*db->fd) (db), F_GETFD, 0); + if (result >= 0) + { + flags |= FD_CLOEXEC; + result = fcntl ((*db->fd) (db), F_SETFD, flags); + } + if (result < 0) + { + /* Something went wrong. Close the stream and return a + failure. */ + (*db->close) (db); + db = NULL; + status = NSS_STATUS_UNAVAIL; + } + } } if (status == NSS_STATUS_SUCCESS) diff --git a/nss/nss_files/files-XXX.c b/nss/nss_files/files-XXX.c index 7472496a10..ac6b5fa94a 100644 --- a/nss/nss_files/files-XXX.c +++ b/nss/nss_files/files-XXX.c @@ -19,6 +19,7 @@ #include <stdio.h> #include <ctype.h> +#include <fcntl.h> #include <assert.h> #include <errno.h> #include <libc-lock.h> @@ -71,7 +72,27 @@ internal_setent (int stayopen) stream = fopen (DATAFILE, "r"); if (stream == NULL) - status = NSS_STATUS_UNAVAIL; + status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL; + else + { + /* We have to make sure the file is `closed on exec'. */ + int result, flags; + + result = flags = fcntl (fileno (stream), F_GETFD, 0); + if (result >= 0) + { + flags |= FD_CLOEXEC; + result = fcntl (fileno (stream), F_SETFD, flags); + } + if (result < 0) + { + /* Something went wrong. Close the stream and return a + failure. */ + fclose (stream); + stream = NULL; + status = NSS_STATUS_UNAVAIL; + } + } } else rewind (stream); diff --git a/nss/nss_files/files-alias.c b/nss/nss_files/files-alias.c index 341e9d4d68..aca89ed73c 100644 --- a/nss/nss_files/files-alias.c +++ b/nss/nss_files/files-alias.c @@ -1,5 +1,5 @@ /* Mail alias file parser in nss_files module. - Copyright (C) 1996 Free Software Foundation, Inc. + Copyright (C) 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -21,6 +21,7 @@ #include <aliases.h> #include <ctype.h> #include <errno.h> +#include <fcntl.h> #include <libc-lock.h> #include <stdlib.h> #include <stdio.h> @@ -48,7 +49,27 @@ internal_setent (void) stream = fopen ("/etc/aliases", "r"); if (stream == NULL) - status = NSS_STATUS_UNAVAIL; + status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL; + else + { + /* We have to make sure the file is `closed on exec'. */ + int result, flags; + + result = flags = fcntl (fileno (stream), F_GETFD, 0); + if (result >= 0) + { + flags |= FD_CLOEXEC; + result = fcntl (fileno (stream), F_SETFD, flags); + } + if (result < 0) + { + /* Something went wrong. Close the stream and return a + failure. */ + fclose (stream); + stream = NULL; + status = NSS_STATUS_UNAVAIL; + } + } } else rewind (stream); diff --git a/nss/nss_files/files-hosts.c b/nss/nss_files/files-hosts.c index d6dd6daea7..d6c4152507 100644 --- a/nss/nss_files/files-hosts.c +++ b/nss/nss_files/files-hosts.c @@ -26,7 +26,6 @@ /* Get implementation for some internal functions. */ #include "../resolv/mapv4v6addr.h" -#include "../resolv/mapv4v6hostent.h" #define ENTNAME hostent @@ -51,13 +50,7 @@ LINE_PARSER STRING_FIELD (addr, isspace, 1); /* Parse address. */ - if ((_res.options & RES_USE_INET6) - && inet_pton (AF_INET6, addr, entdata->host_addr) > 0) - { - result->h_addrtype = AF_INET6; - result->h_length = IN6ADDRSZ; - } - else if (inet_pton (AF_INET, addr, entdata->host_addr) > 0) + if (inet_pton (AF_INET, addr, entdata->host_addr) > 0) { if (_res.options & RES_USE_INET6) { @@ -72,6 +65,11 @@ LINE_PARSER result->h_length = INADDRSZ; } } + else if (inet_pton (AF_INET6, addr, entdata->host_addr) > 0) + { + result->h_addrtype = AF_INET6; + result->h_length = IN6ADDRSZ; + } else /* Illegal address: ignore line. */ return 0; @@ -81,22 +79,18 @@ LINE_PARSER entdata->h_addr_ptrs[1] = NULL; result->h_addr_list = entdata->h_addr_ptrs; - /* If we need the host entry in IPv6 form change it now. */ - if (_res.options & RES_USE_INET6) - { - char *bufptr = data->linebuffer; - int buflen = (char *) data + datalen - bufptr; - map_v4v6_hostent (result, &bufptr, &buflen); - } - STRING_FIELD (result->h_name, isspace, 1); }) #include "files-XXX.c" DB_LOOKUP (hostbyname, ,, - LOOKUP_NAME (h_name, h_aliases), - const char *name) + { + if (result->h_addrtype != ((_res.options & RES_USE_INET6) + ? AF_INET6 : AF_INET)) + continue; + LOOKUP_NAME (h_name, h_aliases) + }, const char *name) DB_LOOKUP (hostbyname2, ,, { diff --git a/nss/nss_files/files-netgrp.c b/nss/nss_files/files-netgrp.c index d9dbf94a19..7552d4c3b1 100644 --- a/nss/nss_files/files-netgrp.c +++ b/nss/nss_files/files-netgrp.c @@ -1,5 +1,5 @@ /* Netgroup file parser in nss_files modules. - Copyright (C) 1996 Free Software Foundation, Inc. + Copyright (C) 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -170,8 +170,7 @@ _nss_netgroup_parseline (char **cursor, struct __netgrent *result, /* Some sanity checks. */ if (cp == NULL) - /* User bug. setnetgrent() wasn't called before. */ - abort (); + return NSS_STATUS_NOTFOUND; /* First skip leading spaces. */ while (isspace (*cp)) |