diff options
author | Ulrich Drepper <drepper@redhat.com> | 2005-12-03 22:15:54 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2005-12-03 22:15:54 +0000 |
commit | 8e64faef03af02a8d4635d199a5b8e55ec68111e (patch) | |
tree | b9fc41a4185921aaf04c69fbf720a0fb410a4458 /nis/nss_nisplus/nisplus-ethers.c | |
parent | 636e689e6fb0da525b80620cdb64cdaf75aa3c6a (diff) | |
download | glibc-8e64faef03af02a8d4635d199a5b8e55ec68111e.zip glibc-8e64faef03af02a8d4635d199a5b8e55ec68111e.tar.gz glibc-8e64faef03af02a8d4635d199a5b8e55ec68111e.tar.bz2 |
* nis/nis_error.c (nis_sperror_r): Let snprintf determine whether
there is an overflow.
* nis/nss_nisplus/nisplus-netgrp.c (_nss_nisplus_setnetgrent):
Rewrite to use snprintf.
* nis/nss_nisplus/nisplus-publickey.c (_nss_nisplus_netname2user):
Likewise.
Diffstat (limited to 'nis/nss_nisplus/nisplus-ethers.c')
-rw-r--r-- | nis/nss_nisplus/nisplus-ethers.c | 88 |
1 files changed, 39 insertions, 49 deletions
diff --git a/nis/nss_nisplus/nisplus-ethers.c b/nis/nss_nisplus/nisplus-ethers.c index 528ae88..fcc550e 100644 --- a/nis/nss_nisplus/nisplus-ethers.c +++ b/nis/nss_nisplus/nisplus-ethers.c @@ -156,8 +156,6 @@ static enum nss_status internal_nisplus_getetherent_r (struct etherent *ether, char *buffer, size_t buflen, int *errnop) { - int parse_res; - if (tablename_val == NULL) { enum nss_status status = _nss_create_tablename (errnop); @@ -167,6 +165,7 @@ internal_nisplus_getetherent_r (struct etherent *ether, char *buffer, } /* Get the next entry until we found a correct one. */ + int parse_res; do { nis_result *saved_result; @@ -180,11 +179,8 @@ internal_nisplus_getetherent_r (struct etherent *ether, char *buffer, } else { - nis_result *res2; - - res2 = nis_next_entry(tablename_val, &result->cookie); saved_result = result; - result = res2; + result = nis_next_entry (tablename_val, &result->cookie); if (niserr2nss (result->status) != NSS_STATUS_SUCCESS) { nis_freeresult (saved_result); @@ -200,13 +196,12 @@ internal_nisplus_getetherent_r (struct etherent *ether, char *buffer, result = saved_result; return NSS_STATUS_TRYAGAIN; } - else - { - if (saved_result != NULL) - nis_freeresult (saved_result); - } - } while (!parse_res); + if (saved_result != NULL) + nis_freeresult (saved_result); + + } + while (!parse_res); return NSS_STATUS_SUCCESS; } @@ -230,8 +225,6 @@ enum nss_status _nss_nisplus_gethostton_r (const char *name, struct etherent *eth, char *buffer, size_t buflen, int *errnop) { - int parse_res; - if (tablename_val == NULL) { enum nss_status status = _nss_create_tablename (errnop); @@ -245,49 +238,47 @@ _nss_nisplus_gethostton_r (const char *name, struct etherent *eth, *errnop = EINVAL; return NSS_STATUS_UNAVAIL; } - else - { - nis_result *result; - char buf[strlen (name) + 40 + tablename_len]; - int olderr = errno; - sprintf (buf, "[name=%s],%s", name, tablename_val); + char buf[strlen (name) + 9 + tablename_len]; + int olderr = errno; - result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS, NULL, NULL); + snprintf (buf, sizeof (buf), "[name=%s],%s", name, tablename_val); - if (result == NULL) - { - *errnop = ENOMEM; - return NSS_STATUS_TRYAGAIN; - } - if (niserr2nss (result->status) != NSS_STATUS_SUCCESS) - { - enum nss_status status = niserr2nss (result->status); - nis_freeresult (result); - return status; - } + nis_result *result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS, NULL, NULL); - parse_res = _nss_nisplus_parse_etherent (result, eth, buffer, + if (result == NULL) + { + *errnop = ENOMEM; + return NSS_STATUS_TRYAGAIN; + } + + if (__builtin_expect (niserr2nss (result->status) != NSS_STATUS_SUCCESS, 0)) + { + enum nss_status status = niserr2nss (result->status); + nis_freeresult (result); + return status; + } + + int parse_res = _nss_nisplus_parse_etherent (result, eth, buffer, buflen, errnop); - if (parse_res < 1) - { - __set_errno (olderr); + if (__builtin_expect (parse_res < 1, 0)) + { + __set_errno (olderr); - if (parse_res == -1) - { - nis_freeresult (result); - return NSS_STATUS_TRYAGAIN; - } - else - return NSS_STATUS_NOTFOUND; + if (parse_res == -1) + { + nis_freeresult (result); + return NSS_STATUS_TRYAGAIN; } - return NSS_STATUS_SUCCESS; + else + return NSS_STATUS_NOTFOUND; } + + return NSS_STATUS_SUCCESS; } enum nss_status -_nss_nisplus_getntohost_r (const struct ether_addr *addr, - struct etherent *eth, +_nss_nisplus_getntohost_r (const struct ether_addr *addr, struct etherent *eth, char *buffer, size_t buflen, int *errnop) { if (tablename_val == NULL) @@ -308,7 +299,6 @@ _nss_nisplus_getntohost_r (const struct ether_addr *addr, return NSS_STATUS_UNAVAIL; } - int parse_res; char buf[26 + tablename_len]; snprintf (buf, sizeof (buf), @@ -334,8 +324,8 @@ _nss_nisplus_getntohost_r (const struct ether_addr *addr, return status; } - parse_res = _nss_nisplus_parse_etherent (result, eth, buffer, - buflen, errnop); + int parse_res = _nss_nisplus_parse_etherent (result, eth, buffer, + buflen, errnop); if (__builtin_expect (parse_res < 1, 0)) { if (parse_res == -1) |