Use IPv4 format for IPv4-mapped addresses

For instance, use "127.0.0.1" for IPv4 loopback instead of
"::ffff:127.0.0.1".

Simplifies use of econfig key privip: plain dotted decimal now just
works regardless of IPv6 use, no need to add the IPv4-mapped form.

Also affects how addresses are logged and shown to players, and nation
selector ip.  Nicer that way.
This commit is contained in:
Markus Armbruster 2013-04-08 19:34:37 +02:00
parent 2d3bac803c
commit 372cdb136c
3 changed files with 16 additions and 6 deletions

View file

@ -41,7 +41,7 @@ char *privname = "Deity forgot to edit econfig";
/* E-mail of the deity */ /* E-mail of the deity */
char *privlog = "careless@invalid"; char *privlog = "careless@invalid";
/* Divine hosts and networks */ /* Divine hosts and networks */
char *privip = "127.0.0.1 ::1 ::ffff:127.0.0.1"; char *privip = "127.0.0.1 ::1";
char *post_crash_dump_hook = ""; char *post_crash_dump_hook = "";

View file

@ -234,12 +234,21 @@ sockaddr_ntop(struct sockaddr *sap, char *buf, size_t bufsz)
{ {
#ifdef HAVE_GETADDRINFO #ifdef HAVE_GETADDRINFO
/* Assumes that if you got getaddrinfo(), you got inet_ntop() too */ /* Assumes that if you got getaddrinfo(), you got inet_ntop() too */
void *inaddr; sa_family_t af = sap->sa_family;
void *addr;
struct sockaddr_in6 *sap6;
inaddr = sap->sa_family == AF_INET if (af == AF_INET)
? (void *)&((struct sockaddr_in *)sap)->sin_addr addr = &((struct sockaddr_in *)sap)->sin_addr;
: (void *)&((struct sockaddr_in6 *)sap)->sin6_addr; else {
return inet_ntop(sap->sa_family, inaddr, buf, bufsz); sap6 = (struct sockaddr_in6 *)sap;
addr = &sap6->sin6_addr;
if (IN6_IS_ADDR_V4MAPPED(&sap6->sin6_addr)) {
af = AF_INET;
addr = sap6->sin6_addr.s6_addr + 12;
}
}
return inet_ntop(af, addr, buf, bufsz);
#else #else
const char *p; const char *p;

View file

@ -36,6 +36,7 @@
#include <winsock2.h> #include <winsock2.h>
#undef NS_ALL #undef NS_ALL
typedef unsigned short sa_family_t;
typedef int socklen_t; typedef int socklen_t;
#define accept(fd, addr, addrlen) \ #define accept(fd, addr, addrlen) \