Ejemplo n.º 1
0
int
addressEqual (XdmcpNetaddr a1, int len1, XdmcpNetaddr a2, int len2)
{
    int partlen1, partlen2;
    char *part1, *part2;

    if (len1 != len2)
    {
	return FALSE;
    }
    if (NetaddrFamily(a1) != NetaddrFamily(a2))
    {
	return FALSE;
    }
    part1 = NetaddrPort(a1, &partlen1);
    part2 = NetaddrPort(a2, &partlen2);
    if (partlen1 != partlen2 || memcmp(part1, part2, partlen1) != 0)
    {
	return FALSE;
    }
    part1 = NetaddrAddress(a1, &partlen1);
    part2 = NetaddrAddress(a2, &partlen2);
    if (partlen1 != partlen2 || memcmp(part1, part2, partlen1) != 0)
    {
	return FALSE;
    }
    return TRUE;
}
Ejemplo n.º 2
0
int ConvertAddr (XdmcpNetaddr saddr, int *len, char **addr)
{
    int retval;

    if (len == NULL)
        return -1;
    *addr = NetaddrAddress(saddr, len);
    switch (NetaddrFamily(saddr))
    {
#ifdef AF_UNSPEC
      case AF_UNSPEC:
	retval = FamilyLocal;
	break;
#endif
#ifdef AF_UNIX
#ifndef hpux
      case AF_UNIX:
        retval = FamilyLocal;
	break;
#endif
#endif
#ifdef TCPCONN
      case AF_INET:
        retval = FamilyInternet;
	break;
#endif
      default:
	retval = -1;
        break;
    }
    WDMDebug("ConvertAddr returning %d for family %d\n", retval,
	   NetaddrFamily(saddr));
    return retval;
}
Ejemplo n.º 3
0
char * NetaddrAddress(XdmcpNetaddr netaddrp, int *lenp)
{
# ifdef STREAMSCONN
    *lenp = 4;
    return netaddrp+4;
# else
    switch (NetaddrFamily(netaddrp)) {
#  ifdef UNIXCONN
    case AF_UNIX:
	*lenp = strlen(((struct sockaddr_un *)netaddrp)->sun_path);
        return (char *) (((struct sockaddr_un *)netaddrp)->sun_path);
#  endif
#  ifdef TCPCONN
    case AF_INET:
        *lenp = sizeof (struct in_addr);
        return (char *) &(((struct sockaddr_in *)netaddrp)->sin_addr);
    case AF_INET6:
    {
	struct in6_addr *a = &(((struct sockaddr_in6 *)netaddrp)->sin6_addr);
	if (IN6_IS_ADDR_V4MAPPED(a)) {
	    *lenp = sizeof (struct in_addr);
	    return ((char *) &(a->s6_addr))+12;
	} else {
	    *lenp = sizeof (struct in6_addr);
	    return (char *) &(a->s6_addr);
	}
    }
#  endif
    default:
	*lenp = 0;
	return NULL;
    }
# endif /* STREAMSCONN else */
}
Ejemplo n.º 4
0
int ConvertAddr (XdmcpNetaddr saddr, int *len, char **addr)
{
    int retval;

    if ((len == NULL) || (saddr == NULL))
        return -1;
    *addr = NetaddrAddress(saddr, len);
# ifdef STREAMSCONN
    /* kludge */
    if (NetaddrFamily(saddr) == 2)
	retval = FamilyInternet;
# else
    switch (NetaddrFamily(saddr))
    {
#  ifdef AF_UNSPEC
      case AF_UNSPEC:
	retval = FamilyLocal;
	break;
#  endif
#  ifdef AF_UNIX
      case AF_UNIX:
        retval = FamilyLocal;
	break;
#  endif
#  ifdef TCPCONN
      case AF_INET:
        retval = FamilyInternet;
	break;
      case AF_INET6:
	if (*len == sizeof(struct in_addr))
	    retval = FamilyInternet;
	else
	    retval = FamilyInternet6;
	break;
#  endif
      default:
	retval = -1;
        break;
    }
# endif /* STREAMSCONN else */
    Debug ("ConvertAddr returning %d for family %d\n", retval,
	   NetaddrFamily(saddr));
    return retval;
}
Ejemplo n.º 5
0
char * NetaddrPort(XdmcpNetaddr netaddrp, int *lenp)
{
    switch (NetaddrFamily(netaddrp))
    {
    case AF_INET:
	*lenp = 2;
	return (char *)&(((struct sockaddr_in *)netaddrp)->sin_port);
    default:
	*lenp = 0;
	return NULL;
    }
}
Ejemplo n.º 6
0
static
FormatChooserArgument (
    char    *buf,
    int     len)
{
    unsigned char   addr_buf[1024];
    int		    addr_len = sizeof (addr_buf);
    unsigned char   result_buf[1024];
    int		    result_len = 0;
    int		    netfamily;

    if (GetChooserAddr (addr_buf, &addr_len) == -1)
    {
	LogError ((unsigned char *)"Cannot get return address for chooser socket\n");
	Debug ("Cannot get chooser socket address\n");
	return 0;
    }
    netfamily = NetaddrFamily((XdmcpNetaddr)addr_buf);
    switch (netfamily) {
    case AF_INET:
	{
	    char *port;
	    int portlen;
	    ARRAY8Ptr localAddress, getLocalAddress ();

	    port = NetaddrPort((XdmcpNetaddr)addr_buf, &portlen);
	    result_buf[0] = netfamily >> 8;
	    result_buf[1] = netfamily & 0xFF;
	    result_buf[2] = port[0];
	    result_buf[3] = port[1];
	    localAddress = getLocalAddress ();
	    bcopy ((char *)localAddress->data, (char *)result_buf+4, 4);
	    result_len = 8;
	}
	break;
#ifdef AF_DECnet
    case AF_DECnet:
	break;
#endif
    default:
	Debug ("Chooser family %d isn't known\n", netfamily);
	return 0;
    }

    return FormatBytes (result_buf, result_len, buf, len);
}
Ejemplo n.º 7
0
char * NetaddrAddress(XdmcpNetaddr netaddrp, int *lenp)
{
    switch (NetaddrFamily(netaddrp)) {
#ifdef UNIXCONN
    case AF_UNIX:
	*lenp = strlen(((struct sockaddr_un *)netaddrp)->sun_path);
        return (char *) (((struct sockaddr_un *)netaddrp)->sun_path);
#endif
#ifdef TCPCONN
    case AF_INET:
        *lenp = sizeof (struct in_addr);
        return (char *) &(((struct sockaddr_in *)netaddrp)->sin_addr);
#endif
    default:
	*lenp = 0;
	return NULL;
    }
}
Ejemplo n.º 8
0
char * NetaddrPort(XdmcpNetaddr netaddrp, int *lenp)
{
# ifdef STREAMSCONN
    *lenp = 2;
    return netaddrp+2;
# else
    switch (NetaddrFamily(netaddrp))
    {
    case AF_INET:
	*lenp = 2;
	return (char *)&(((struct sockaddr_in *)netaddrp)->sin_port);
    case AF_INET6:
	*lenp = 2;
	return (char *)&(((struct sockaddr_in6 *)netaddrp)->sin6_port);
    default:
	*lenp = 0;
	return NULL;
    }
# endif
}