Ticket #25586: torsocks-h_addrtype.patch

File torsocks-h_addrtype.patch, 2.0 KB (added by exarkun, 3 years ago)

unit tests and bug fix

  • src/lib/gethostbyname.c

    diff --git a/src/lib/gethostbyname.c b/src/lib/gethostbyname.c
    index e43ed4a..296099e 100644
    a b LIBC_GETHOSTBYADDR_R_RET_TYPE tsocks_gethostbyaddr_r(LIBC_GETHOSTBYADDR_R_SIG) 
    301301
    302302        he->h_aliases = NULL;
    303303        he->h_length = strlen(he->h_name);
     304        he->h_addrtype = type;
    304305        /* Assign the address list within the data of the given buffer. */
    305306        data->addr_list[0] = (char *) addr;
    306307        data->addr_list[1] = NULL;
  • tests/test_dns.c

    diff --git a/tests/test_dns.c b/tests/test_dns.c
    index 2d87744..0c1eacf 100644
    a b  
    2626#include <tap/tap.h>
    2727#include "helpers.h"
    2828
    29 #define NUM_TESTS 4
     29#define NUM_TESTS 5
    3030
    3131struct test_host {
    3232        const char *name;
    static void test_gethostbyname(const struct test_host *host) 
    7676        return;
    7777}
    7878
     79static void test_gethostbyaddr_r(const struct test_host *host) {
     80  int result;
     81  in_addr_t addr;
     82  struct hostent ret;
     83  char buf[1024];
     84  int buflen = sizeof buf;
     85  struct hostent *result_entp;
     86  int h_errno;
     87
     88  assert(host);
     89  diag("gethostbyaddr_r test");
     90
     91  addr = inet_addr(host->ip);
     92  result = gethostbyaddr_r(
     93                       (const void *)&addr,
     94                       INET_ADDRSTRLEN,
     95                       AF_INET,
     96                       &ret,
     97                       buf,
     98                       buflen,
     99                       &result_entp,
     100                       &h_errno
     101                       );
     102  if (result) {
     103    fail("Resolving address %s: %d", host->ip, result);
     104  }
     105
     106  if (strcmp(host->name, result_entp->h_name) != 0) {
     107    fail("Wrong resolved name: %s", result_entp->h_name);
     108  }
     109
     110  if (result_entp->h_addrtype != AF_INET) {
     111    fail("Wrong resolved address family: %d", result_entp->h_addrtype);
     112  }
     113
     114  ok(1, "Resolved address");
     115}
     116
    79117static void test_gethostbyaddr(const struct test_host *host)
    80118{
    81119        struct hostent *he;
    int main(int argc, char **argv) 
    148186        test_getaddrinfo(&tor_check);
    149187        test_gethostbyname(&tor_dir_auth1);
    150188        test_gethostbyaddr(&tor_dir_auth2);
     189        test_gethostbyaddr_r(&tor_dir_auth2);
    151190        test_getaddrinfo(&tor_localhost);
    152191
    153192end: