Commit 717c285b311db5d809356597b2df5270360f1751
Fix access rights checking to work with IPv6.
Eero Häkkinen committed on 9/27/2015, 7:14:00 PMParent: 4cbaf447b5a634f703bc571bf0e12f3ae1514d8a
Files changed
common.c | changed |
common.c | ||
---|---|---|
@@ -470,27 +470,30 @@ | ||
470 | 470 | */ |
471 | 471 | int check_access_rights(int in_socket, const char* service) |
472 | 472 | { |
473 | 473 | |
474 | - struct sockaddr peeraddr; | |
475 | - socklen_t size = sizeof(peeraddr); | |
474 | + union { | |
475 | + struct sockaddr saddr; | |
476 | + struct sockaddr_storage ss; | |
477 | + } peer; | |
478 | + socklen_t size = sizeof(peer); | |
476 | 479 | char addr_str[NI_MAXHOST], host[NI_MAXHOST]; |
477 | 480 | int res; |
478 | 481 | |
479 | - res = getpeername(in_socket, &peeraddr, &size); | |
482 | + res = getpeername(in_socket, &peer.saddr, &size); | |
480 | 483 | CHECK_RES_RETURN(res, "getpeername"); |
481 | 484 | |
482 | 485 | /* extract peer address */ |
483 | - res = getnameinfo(&peeraddr, size, addr_str, sizeof(addr_str), NULL, 0, NI_NUMERICHOST); | |
486 | + res = getnameinfo(&peer.saddr, size, addr_str, sizeof(addr_str), NULL, 0, NI_NUMERICHOST); | |
484 | 487 | if (res) { |
485 | 488 | if (verbose) |
486 | 489 | fprintf(stderr, "getnameinfo(NI_NUMERICHOST):%s\n", gai_strerror(res)); |
487 | 490 | strcpy(addr_str, STRING_UNKNOWN); |
488 | 491 | } |
489 | 492 | /* extract peer name */ |
490 | 493 | strcpy(host, STRING_UNKNOWN); |
491 | 494 | if (!numeric) { |
492 | - res = getnameinfo(&peeraddr, size, host, sizeof(host), NULL, 0, NI_NAMEREQD); | |
495 | + res = getnameinfo(&peer.saddr, size, host, sizeof(host), NULL, 0, NI_NAMEREQD); | |
493 | 496 | if (res) { |
494 | 497 | if (verbose) |
495 | 498 | fprintf(stderr, "getnameinfo(NI_NAMEREQD):%s\n", gai_strerror(res)); |
496 | 499 | } |
Built with git-ssb-web