summaryrefslogtreecommitdiff
path: root/src/nss-myhostname/nss-myhostname.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nss-myhostname/nss-myhostname.c')
-rw-r--r--src/nss-myhostname/nss-myhostname.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/nss-myhostname/nss-myhostname.c b/src/nss-myhostname/nss-myhostname.c
index 5abc0c91bf..baeb6f952d 100644
--- a/src/nss-myhostname/nss-myhostname.c
+++ b/src/nss-myhostname/nss-myhostname.c
@@ -74,7 +74,7 @@ enum nss_status _nss_myhostname_gethostbyname4_r(
} else {
hn = gethostname_malloc();
if (!hn) {
- *errnop = ENOMEM;
+ *errnop = DISARM_PROTECT_ERRNO(ENOMEM);
*h_errnop = NO_RECOVERY;
return NSS_STATUS_TRYAGAIN;
}
@@ -96,7 +96,7 @@ enum nss_status _nss_myhostname_gethostbyname4_r(
l = strlen(canonical);
ms = ALIGN(l+1) + ALIGN(sizeof(struct gaih_addrtuple)) * (n_addresses > 0 ? n_addresses : 2);
if (buflen < ms) {
- *errnop = ERANGE;
+ *errnop = DISARM_PROTECT_ERRNO(ERANGE);
*h_errnop = NETDB_INTERNAL;
return NSS_STATUS_TRYAGAIN;
}
@@ -171,7 +171,7 @@ static enum nss_status fill_in_hostent(
uint32_t local_address_ipv4,
struct hostent *result,
char *buffer, size_t buflen,
- int *errnop, int *h_errnop,
+ int *errnop, int *h_errnop, int* _saved_errno_p,
int32_t *ttlp,
char **canonp) {
@@ -185,6 +185,7 @@ static enum nss_status fill_in_hostent(
assert(buffer);
assert(errnop);
assert(h_errnop);
+ assert(_saved_errno_p);
alen = FAMILY_ADDRESS_SIZE(af);
@@ -202,7 +203,7 @@ static enum nss_status fill_in_hostent(
(c > 0 ? c+1 : 2) * sizeof(char*);
if (buflen < ms) {
- *errnop = ERANGE;
+ *errnop = DISARM_PROTECT_ERRNO_INNER(ERANGE);
*h_errnop = NETDB_INTERNAL;
return NSS_STATUS_TRYAGAIN;
}
@@ -321,7 +322,7 @@ enum nss_status _nss_myhostname_gethostbyname3_r(
af = AF_INET;
if (!IN_SET(af, AF_INET, AF_INET6)) {
- *errnop = EAFNOSUPPORT;
+ *errnop = DISARM_PROTECT_ERRNO(EAFNOSUPPORT);
*h_errnop = NO_DATA;
return NSS_STATUS_UNAVAIL;
}
@@ -343,7 +344,7 @@ enum nss_status _nss_myhostname_gethostbyname3_r(
} else {
hn = gethostname_malloc();
if (!hn) {
- *errnop = ENOMEM;
+ *errnop = DISARM_PROTECT_ERRNO(ENOMEM);
*h_errnop = NO_RECOVERY;
return NSS_STATUS_TRYAGAIN;
}
@@ -369,7 +370,7 @@ enum nss_status _nss_myhostname_gethostbyname3_r(
local_address_ipv4,
host,
buffer, buflen,
- errnop, h_errnop,
+ errnop, h_errnop, &_saved_errno_,
ttlp,
canonp);
}
@@ -401,13 +402,13 @@ enum nss_status _nss_myhostname_gethostbyaddr2_r(
assert(h_errnop);
if (!IN_SET(af, AF_INET, AF_INET6)) {
- *errnop = EAFNOSUPPORT;
+ *errnop = DISARM_PROTECT_ERRNO(EAFNOSUPPORT);
*h_errnop = NO_DATA;
return NSS_STATUS_UNAVAIL;
}
if (len != FAMILY_ADDRESS_SIZE(af)) {
- *errnop = EINVAL;
+ *errnop = DISARM_PROTECT_ERRNO(EINVAL);
*h_errnop = NO_RECOVERY;
return NSS_STATUS_UNAVAIL;
}
@@ -461,7 +462,7 @@ found:
if (!canonical || additional_from_hostname) {
hn = gethostname_malloc();
if (!hn) {
- *errnop = ENOMEM;
+ *errnop = DISARM_PROTECT_ERRNO(ENOMEM);
*h_errnop = NO_RECOVERY;
return NSS_STATUS_TRYAGAIN;
}
@@ -479,7 +480,7 @@ found:
local_address_ipv4,
host,
buffer, buflen,
- errnop, h_errnop,
+ errnop, h_errnop, &_saved_errno_,
ttlp,
NULL);
}