W3C home > Mailing lists > Public > ietf-http-wg@w3.org > October to December 1995

Re: Host: fqdn

From: Rich Salz <rsalz@osf.org>
Date: Wed, 4 Oct 1995 00:23:03 -0400
Message-Id: <9510040423.AA12488@sulphur.osf.org>
To: mshapiro@ncsa.uiuc.edu
Cc: http-wg%cuckoo.hpl.hp.com@hplb.hpl.hp.com
>Is it known how to convert a non-fqdn to a fqdn in exactly the
>same way that gethostbyname() does it when it looks up the IP address?

Sadly, my experience is that there is nothing portable.  I have a
library routine in my Usenet package and at times it just has to fall
back to a config file to get the domain.

Here's the current source, perhaps more useful for the commentary then
the code...
/*  $Revision: 1.8 $
**
*/
#include <stdio.h>
#include <sys/types.h>
#include <netdb.h>
#include "configdata.h"
#include "paths.h"
#include "clibrary.h"
#include "libinn.h"


/*
**  Get the fully-qualified domain name for this host.
*/
char *
GetFQDN()
{
    static char		buff[SMBUF];
    struct hostent	*hp;
    char		*p;
#if	0
    /* See comments below. */
    char		temp[SMBUF + 2];
#endif	/* 0 */

    /* Return any old results. */
    if (buff[0])
	return buff;

    /* Try gethostname. */
    if (gethostname(buff, (int)sizeof buff) < 0)
	return NULL;
    if (strchr(buff, '.') != NULL)
	return buff;

    /* See if DNS (or /etc/hosts) gives us a full domain name. */
    if ((hp = gethostbyname(buff)) == NULL)
	return NULL;
#if	0
    /* This code is a "feature" that allows multiple domains (NIS or
     * DNS, I'm not sure) to work with a single INN server.  However,
     * it turns out to cause more problems for people, and they have to
     * use hacks like __switch_gethostbyname, etc.  So if you need this,
     * turn it on, but don't complain to me. */
    if (strchr(hp->h_name, '.') == NULL) {
	/* Try to force DNS lookup if NIS/whatever gets in the way. */
	(void)strncpy(temp, buff, sizeof buff);
	(void)strcat(temp, ".");
	hp = gethostbyname(temp);
    }
#endif	/* 0 */
    if (hp != NULL && strchr(hp->h_name, '.') != NULL) {
	if (strlen(hp->h_name) < sizeof buff - 1)
	    return strcpy(buff, hp->h_name);
	/* Doesn't fit; make sure we don't return bad data next time. */
	buff[0] = '\0';
	return hp->h_name;
    }

    /* Get the domain name config parameter and append it. */
    if ((p = GetFileConfigValue(_CONF_DOMAIN)) == NULL || *p == '\0')
	return NULL;
    if (strlen(buff) + 1 + strlen(p) > sizeof buff - 1)
	/* Doesn't fit. */
	return NULL;
    (void)strcat(buff, ".");
    (void)strcat(buff, p);
    return buff;
}
Received on Tuesday, 3 October 1995 21:26:21 UTC

This archive was generated by hypermail 2.4.0 : Thursday, 2 February 2023 18:42:56 UTC