X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=sbr%2Fmts.c;h=de7518c017387ee36448416d90fdbbe5c72789c7;hb=86048c14a070e3382577dd22519319bce77c70b9;hp=551fd1fed97277d6dcac1681bbc29bb6b2725443;hpb=dee387b53ab0d42922f857b60d6f980c9e79d16f;p=mmh diff --git a/sbr/mts.c b/sbr/mts.c index 551fd1f..de7518c 100644 --- a/sbr/mts.c +++ b/sbr/mts.c @@ -3,10 +3,15 @@ * mts.c -- definitions for the mail transport system * * $Id$ + * + * This code is Copyright (c) 2002, by the authors of nmh. See the + * COPYRIGHT file in the root directory of the nmh distribution for + * complete copyright information. */ #include /* for snprintf() */ #include +#include #define nmhetcdir(file) NMHETCDIR#file @@ -23,12 +28,10 @@ #define NOTOK (-1) #define OK 0 -extern int errno; - /* * static prototypes */ -static char *tailor_value (char *); +static char *tailor_value (unsigned char *); static void getuserinfo (void); /* @@ -169,7 +172,8 @@ static struct bind binds[] = { void mts_init (char *name) { - char *bp, *cp, buffer[BUFSIZ]; + unsigned char *bp; + char *cp, buffer[BUFSIZ]; struct bind *b; FILE *fp; static int inited = 0; @@ -230,7 +234,7 @@ mts_init (char *name) */ static char * -tailor_value (char *s) +tailor_value (unsigned char *s) { int i, r; char *bp; @@ -269,8 +273,8 @@ tailor_value (char *s) *bp = 0; len = strlen (buffer) + 1; - if ((bp = malloc (len))) - memcpy (bp, buffer, len); + bp = mh_xmalloc (len); + memcpy (bp, buffer, len); return bp; } @@ -283,8 +287,7 @@ char * LocalName (void) { static char buffer[BUFSIZ] = ""; - struct hostent *hp; - + struct addrinfo hints, *res; #ifdef HAVE_UNAME struct utsname name; #endif @@ -299,20 +302,24 @@ LocalName (void) if (*localname) { strncpy (buffer, localname, sizeof(buffer)); } else { + memset(buffer, 0, sizeof(buffer)); #ifdef HAVE_UNAME /* first get our local name */ uname (&name); - strncpy (buffer, name.nodename, sizeof(buffer)); + strncpy (buffer, name.nodename, sizeof(buffer) - 1); #else /* first get our local name */ - gethostname (buffer, sizeof(buffer)); + gethostname (buffer, sizeof(buffer) - 1); #endif -#ifdef HAVE_SETHOSTENT - sethostent (1); -#endif /* now fully qualify our name */ - if ((hp = gethostbyname (buffer))) - strncpy (buffer, hp->h_name, sizeof(buffer)); + + memset(&hints, 0, sizeof(hints)); + hints.ai_flags = AI_CANONNAME; + hints.ai_family = PF_UNSPEC; + if (getaddrinfo(buffer, NULL, &hints, &res) == 0) { + strncpy(buffer, res->ai_canonname, sizeof(buffer) - 1); + freeaddrinfo(res); + } } /* @@ -403,7 +410,8 @@ getfullname (void) static void getuserinfo (void) { - register char *cp, *np; + register unsigned char *cp; + register char *np; register struct passwd *pw; #ifdef KPOP