X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnss-mymachines%2Fnss-mymachines.c;h=9476ad1694f2be8d52a6613e46692786c5541b6b;hb=32a568fb90bf0a22a3007fa670305403a5d0bb72;hp=985ebb7134b4fa43d32b2b6ed3ebe78869846e27;hpb=0dd25fb9f005d8ab7ac4bc10a609d00569f8c56a;p=elogind.git diff --git a/src/nss-mymachines/nss-mymachines.c b/src/nss-mymachines/nss-mymachines.c index 985ebb713..9476ad169 100644 --- a/src/nss-mymachines/nss-mymachines.c +++ b/src/nss-mymachines/nss-mymachines.c @@ -39,7 +39,7 @@ static int count_addresses(sd_bus_message *m, int af, unsigned *ret) { assert(m); assert(ret); - while ((r = sd_bus_message_enter_container(m, 'r', "yay")) > 0) { + while ((r = sd_bus_message_enter_container(m, 'r', "iay")) > 0) { int family; r = sd_bus_message_read(m, "i", &family); @@ -79,7 +79,7 @@ enum nss_status _nss_mymachines_gethostbyname4_r( struct gaih_addrtuple *r_tuple, *r_tuple_first = NULL; _cleanup_bus_message_unref_ sd_bus_message* reply = NULL; - _cleanup_bus_unref_ sd_bus *bus = NULL; + _cleanup_bus_close_unref_ sd_bus *bus = NULL; _cleanup_free_ int *ifindices = NULL; _cleanup_free_ char *class = NULL; size_t l, ms, idx; @@ -205,6 +205,11 @@ enum nss_status _nss_mymachines_gethostbyname4_r( if (ttlp) *ttlp = 0; + /* Explicitly reset all error variables */ + *errnop = 0; + *h_errnop = NETDB_SUCCESS; + h_errno = 0; + return NSS_STATUS_SUCCESS; fail: @@ -223,7 +228,7 @@ enum nss_status _nss_mymachines_gethostbyname3_r( char **canonp) { _cleanup_bus_message_unref_ sd_bus_message* reply = NULL; - _cleanup_bus_unref_ sd_bus *bus = NULL; + _cleanup_bus_close_unref_ sd_bus *bus = NULL; _cleanup_free_ char *class = NULL; unsigned c = 0, i = 0; char *r_name, *r_aliases, *r_addr, *r_addr_list; @@ -284,10 +289,7 @@ enum nss_status _nss_mymachines_gethostbyname3_r( alen = FAMILY_ADDRESS_SIZE(af); l = strlen(name); - ms = ALIGN(l+1) + - sizeof(char*) + - (c > 0 ? c : 1) * ALIGN(alen) + - (c > 0 ? c+1 : 2) * sizeof(char*); + ms = ALIGN(l+1) + c * ALIGN(alen) + (c+2) * sizeof(char*); if (buflen < ms) { *errnop = ENOMEM; @@ -365,6 +367,11 @@ enum nss_status _nss_mymachines_gethostbyname3_r( if (canonp) *canonp = r_name; + /* Explicitly reset all error variables */ + *errnop = 0; + *h_errnop = NETDB_SUCCESS; + h_errno = 0; + return NSS_STATUS_SUCCESS; fail: