Merge pull request #12274 from poettering/nss-fixlets

some nss module fixlets
This commit is contained in:
Lennart Poettering 2019-04-11 15:21:45 +02:00 committed by GitHub
commit a3a1f24f81
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 36 deletions

View file

@ -64,10 +64,8 @@ enum nss_status _nss_myhostname_gethostbyname4_r(
} else if (is_gateway_hostname(name)) {
n_addresses = local_gateways(NULL, 0, AF_UNSPEC, &addresses);
if (n_addresses <= 0) {
*h_errnop = HOST_NOT_FOUND;
return NSS_STATUS_NOTFOUND;
}
if (n_addresses <= 0)
goto not_found;
canonical = "_gateway";
@ -81,10 +79,8 @@ enum nss_status _nss_myhostname_gethostbyname4_r(
}
/* We respond to our local host name, our hostname suffixed with a single dot. */
if (!streq(name, hn) && !streq_ptr(startswith(name, hn), ".")) {
*h_errnop = HOST_NOT_FOUND;
return NSS_STATUS_NOTFOUND;
}
if (!streq(name, hn) && !streq_ptr(startswith(name, hn), "."))
goto not_found;
n_addresses = local_addresses(NULL, 0, AF_UNSPEC, &addresses);
if (n_addresses < 0)
@ -164,6 +160,10 @@ enum nss_status _nss_myhostname_gethostbyname4_r(
h_errno = 0;
return NSS_STATUS_SUCCESS;
not_found:
*h_errnop = HOST_NOT_FOUND;
return NSS_STATUS_NOTFOUND;
}
static enum nss_status fill_in_hostent(
@ -339,10 +339,8 @@ enum nss_status _nss_myhostname_gethostbyname3_r(
} else if (is_gateway_hostname(name)) {
n_addresses = local_gateways(NULL, 0, af, &addresses);
if (n_addresses <= 0) {
*h_errnop = HOST_NOT_FOUND;
return NSS_STATUS_NOTFOUND;
}
if (n_addresses <= 0)
goto not_found;
canonical = "_gateway";
@ -355,10 +353,8 @@ enum nss_status _nss_myhostname_gethostbyname3_r(
return NSS_STATUS_TRYAGAIN;
}
if (!streq(name, hn) && !streq_ptr(startswith(name, hn), ".")) {
*h_errnop = HOST_NOT_FOUND;
return NSS_STATUS_NOTFOUND;
}
if (!streq(name, hn) && !streq_ptr(startswith(name, hn), "."))
goto not_found;
n_addresses = local_addresses(NULL, 0, af, &addresses);
if (n_addresses < 0)
@ -381,6 +377,10 @@ enum nss_status _nss_myhostname_gethostbyname3_r(
errnop, h_errnop,
ttlp,
canonp);
not_found:
*h_errnop = HOST_NOT_FOUND;
return NSS_STATUS_NOTFOUND;
}
enum nss_status _nss_myhostname_gethostbyaddr2_r(

View file

@ -232,7 +232,7 @@ enum nss_status _nss_mymachines_gethostbyname4_r(
fail:
UNPROTECT_ERRNO;
*errnop = -r;
*h_errnop = NO_DATA;
*h_errnop = NO_RECOVERY;
return NSS_STATUS_UNAVAIL;
}
@ -403,7 +403,7 @@ enum nss_status _nss_mymachines_gethostbyname3_r(
fail:
UNPROTECT_ERRNO;
*errnop = -r;
*h_errnop = NO_DATA;
*h_errnop = NO_RECOVERY;
return NSS_STATUS_UNAVAIL;
}

View file

@ -26,7 +26,9 @@ static bool bus_error_shall_fallback(sd_bus_error *e) {
return sd_bus_error_has_name(e, SD_BUS_ERROR_SERVICE_UNKNOWN) ||
sd_bus_error_has_name(e, SD_BUS_ERROR_NAME_HAS_NO_OWNER) ||
sd_bus_error_has_name(e, SD_BUS_ERROR_NO_REPLY) ||
sd_bus_error_has_name(e, SD_BUS_ERROR_ACCESS_DENIED);
sd_bus_error_has_name(e, SD_BUS_ERROR_ACCESS_DENIED) ||
sd_bus_error_has_name(e, SD_BUS_ERROR_DISCONNECTED) ||
sd_bus_error_has_name(e, SD_BUS_ERROR_TIMEOUT);
}
static int count_addresses(sd_bus_message *m, int af, const char **canonical) {
@ -118,7 +120,6 @@ enum nss_status _nss_resolve_gethostbyname4_r(
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
struct gaih_addrtuple *r_tuple, *r_tuple_first = NULL;
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
enum nss_status ret = NSS_STATUS_UNAVAIL;
const char *canonical = NULL;
size_t l, ms, idx;
char *r_name;
@ -162,8 +163,7 @@ enum nss_status _nss_resolve_gethostbyname4_r(
r = sd_bus_call(bus, req, SD_RESOLVED_QUERY_TIMEOUT_USEC, &error, &reply);
if (r < 0) {
if (sd_bus_error_has_name(&error, _BUS_ERROR_DNS "NXDOMAIN") ||
!bus_error_shall_fallback(&error))
if (!bus_error_shall_fallback(&error))
goto not_found;
/* Return NSS_STATUS_UNAVAIL when communication with systemd-resolved fails,
@ -273,7 +273,7 @@ fail:
UNPROTECT_ERRNO;
*errnop = -r;
*h_errnop = NO_RECOVERY;
return ret;
return NSS_STATUS_UNAVAIL;
not_found:
*h_errnop = HOST_NOT_FOUND;
@ -293,7 +293,6 @@ enum nss_status _nss_resolve_gethostbyname3_r(
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
char *r_name, *r_aliases, *r_addr, *r_addr_list;
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
enum nss_status ret = NSS_STATUS_UNAVAIL;
size_t l, idx, ms, alen;
const char *canonical;
int c, r, i = 0;
@ -344,8 +343,7 @@ enum nss_status _nss_resolve_gethostbyname3_r(
r = sd_bus_call(bus, req, SD_RESOLVED_QUERY_TIMEOUT_USEC, &error, &reply);
if (r < 0) {
if (sd_bus_error_has_name(&error, _BUS_ERROR_DNS "NXDOMAIN") ||
!bus_error_shall_fallback(&error))
if (!bus_error_shall_fallback(&error))
goto not_found;
goto fail;
@ -463,7 +461,7 @@ fail:
UNPROTECT_ERRNO;
*errnop = -r;
*h_errnop = NO_RECOVERY;
return ret;
return NSS_STATUS_UNAVAIL;
not_found:
*h_errnop = HOST_NOT_FOUND;
@ -482,7 +480,6 @@ enum nss_status _nss_resolve_gethostbyaddr2_r(
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
char *r_name, *r_aliases, *r_addr, *r_addr_list;
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
enum nss_status ret = NSS_STATUS_UNAVAIL;
unsigned c = 0, i = 0;
size_t ms = 0, idx;
const char *n;
@ -505,10 +502,8 @@ enum nss_status _nss_resolve_gethostbyaddr2_r(
}
if (len != FAMILY_ADDRESS_SIZE(af)) {
UNPROTECT_ERRNO;
*errnop = EINVAL;
*h_errnop = NO_RECOVERY;
return NSS_STATUS_UNAVAIL;
r = -EINVAL;
goto fail;
}
if (avoid_deadlock()) {
@ -548,8 +543,7 @@ enum nss_status _nss_resolve_gethostbyaddr2_r(
r = sd_bus_call(bus, req, SD_RESOLVED_QUERY_TIMEOUT_USEC, &error, &reply);
if (r < 0) {
if (sd_bus_error_has_name(&error, _BUS_ERROR_DNS "NXDOMAIN") ||
!bus_error_shall_fallback(&error))
if (!bus_error_shall_fallback(&error))
goto not_found;
goto fail;
@ -574,7 +568,7 @@ enum nss_status _nss_resolve_gethostbyaddr2_r(
r = sd_bus_message_rewind(reply, false);
if (r < 0)
return r;
goto fail;
if (c <= 0)
goto not_found;
@ -648,7 +642,7 @@ fail:
UNPROTECT_ERRNO;
*errnop = -r;
*h_errnop = NO_RECOVERY;
return ret;
return NSS_STATUS_UNAVAIL;
not_found:
*h_errnop = HOST_NOT_FOUND;