diff options
Diffstat (limited to 'crypto/kerberosIV/lib/krb/name2name.c')
-rw-r--r-- | crypto/kerberosIV/lib/krb/name2name.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/crypto/kerberosIV/lib/krb/name2name.c b/crypto/kerberosIV/lib/krb/name2name.c index fa95b89..2e2e9e6 100644 --- a/crypto/kerberosIV/lib/krb/name2name.c +++ b/crypto/kerberosIV/lib/krb/name2name.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 1996, 1997 Kungliga Tekniska Högskolan + * Copyright (c) 1995, 1996, 1997, 1998, 1999 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -38,7 +38,7 @@ #include "krb_locl.h" -RCSID("$Id: name2name.c,v 1.15 1997/04/30 04:30:36 assar Exp $"); +RCSID("$Id: name2name.c,v 1.20 1999/03/13 21:26:02 assar Exp $"); /* convert host to a more fully qualified domain name, returns 0 if * phost is the same as host, 1 otherwise. phost should be @@ -53,15 +53,25 @@ krb_name_to_name(const char *host, char *phost, size_t phost_size) const char *tmp; adr.s_addr = inet_addr(host); - hp = gethostbyname(host); - if (hp == NULL && adr.s_addr != INADDR_NONE) + if (adr.s_addr != INADDR_NONE) hp = gethostbyaddr((char *)&adr, sizeof(adr), AF_INET); + else + hp = gethostbyname(host); if (hp == NULL) tmp = host; - else + else { tmp = hp->h_name; - strncpy (phost, tmp, phost_size); - phost[phost_size - 1] = '\0'; + /* + * Broken SunOS 5.4 sometimes keeps the official name as the + * 1:st alias. + */ + if (strchr(tmp, '.') == NULL + && hp->h_aliases != NULL + && hp->h_aliases[0] != NULL + && strchr (hp->h_aliases[0], '.') != NULL) + tmp = hp->h_aliases[0]; + } + strcpy_truncate (phost, tmp, phost_size); if (strcmp(phost, host) == 0) return 0; @@ -74,7 +84,8 @@ krb_name_to_name(const char *host, char *phost, size_t phost_size) void k_ricercar(char *name) { - char *p = name; + unsigned char *p = (unsigned char *)name; + while(*p && *p != '.'){ if(isupper(*p)) *p = tolower(*p); @@ -94,7 +105,7 @@ k_ricercar(char *name) char * krb_get_phost(const char *alias) { - static char phost[MaxHostNameLen+1]; + static char phost[MaxHostNameLen]; krb_name_to_name(alias, phost, sizeof(phost)); k_ricercar(phost); |