home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / kerberosIV / krb / get_phost.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-06-25  |  1.6 KB  |  56 lines

  1. /*
  2.  * $Source: /usr/src/kerberosIV/krb/RCS/get_phost.c,v $
  3.  * $Author: kfall $
  4.  *
  5.  * Copyright 1988 by the Massachusetts Institute of Technology.
  6.  *
  7.  * For copying and distribution information, please see the file
  8.  * <mit-copyright.h>.
  9.  */
  10.  
  11. #ifndef lint
  12. static char *rcsid_phost_c =
  13. "$Header: /usr/src/kerberosIV/krb/RCS/get_phost.c,v 4.7 90/06/25 20:57:57 kfall Exp $";
  14. #endif /* lint */
  15.  
  16. #include <mit-copyright.h>
  17. #include <stdio.h>
  18. #include <ctype.h>
  19. #include <netdb.h>
  20.  
  21. char *index();
  22.  
  23. /*
  24.  * This routine takes an alias for a host name and returns the first
  25.  * field, lower case, of its domain name.  For example, if "menel" is
  26.  * an alias for host officially named "menelaus" (in /etc/hosts), for
  27.  * the host whose official name is "MENELAUS.MIT.EDU", the name "menelaus"
  28.  * is returned.
  29.  *
  30.  * This is done for historical Athena reasons: the Kerberos name of
  31.  * rcmd servers (rlogin, rsh, rcp) is of the form "rcmd.host@realm"
  32.  * where "host"is the lowercase for of the host name ("menelaus").
  33.  * This should go away: the instance should be the domain name
  34.  * (MENELAUS.MIT.EDU).  But for now we need this routine...
  35.  *
  36.  * A pointer to the name is returned, if found, otherwise a pointer
  37.  * to the original "alias" argument is returned.
  38.  */
  39.  
  40. char * krb_get_phost(alias)
  41.     char *alias;
  42. {
  43.     struct hostent *h;
  44.     char *phost = alias;
  45.     if ((h=gethostbyname(alias)) != (struct hostent *)NULL ) {
  46.         char *p = index( h->h_name, '.' );
  47.         if (p)
  48.             *p = NULL;
  49.         p = phost = h->h_name;
  50.         do {
  51.             if (isupper(*p)) *p=tolower(*p);
  52.         } while (*p++);
  53.     }
  54.     return(phost);
  55. }
  56.