⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 access.c

📁 远程桌面连接工具
💻 C
📖 第 1 页 / 共 3 页
字号:
    {	MakeHost(host, 0);	if (host)	{	    host->family = FamilyLocalHost;	    host->len = 0;	    acopy("", host->addr, 0);	    host->next = selfhosts;	    selfhosts = host;	}    }}#else /* WINTCP */#if !defined(SIOCGIFCONF) || (defined (hpux) && ! defined (HAS_IFREQ))voidDefineSelf (fd)    int fd;{#if !defined(TCPCONN) && !defined(STREAMSCONN) && !defined(UNIXCONN) && !defined(MNX_TCPCONN)    return;#else    register int n;    int	len;    caddr_t	addr;    int		family;    register HOST	*host;    struct utsname name;    register struct hostent  *hp;    union {	struct  sockaddr   sa;	struct  sockaddr_in  in;    } saddr;	    struct	sockaddr_in	*inetaddr;    struct sockaddr_in broad_addr;    /* Why not use gethostname()?  Well, at least on my system, I've had to     * make an ugly kernel patch to get a name longer than 8 characters, and     * uname() lets me access to the whole string (it smashes release, you     * see), whereas gethostname() kindly truncates it for me.     */    uname(&name);    hp = gethostbyname (name.nodename);    if (hp != NULL)    {	saddr.sa.sa_family = hp->h_addrtype;	inetaddr = (struct sockaddr_in *) (&(saddr.sa));	acopy ( hp->h_addr, &(inetaddr->sin_addr), hp->h_length);	len = sizeof(saddr.sa);	family = ConvertAddr ( &(saddr.sa), &len, (pointer *)&addr);	if ( family != -1 && family != FamilyLocal )	{	    for (host = selfhosts;		 host && !addrEqual (family, addr, len, host);		 host = host->next) ;	    if (!host)	    {		/* add this host to the host list.	*/		MakeHost(host,len)		if (host)		{		    host->family = family;		    host->len = len;		    acopy ( addr, host->addr, len);		    host->next = selfhosts;		    selfhosts = host;		}#ifdef XDMCP		/*		 *  If this is an Internet Address, but not the localhost		 *  address (127.0.0.1), register it.		 */		if (family == FamilyInternet &&		    !(len == 4 && addr[0] == 127 && addr[1] == 0 &&		      addr[2] == 0 && addr[3] == 1)		   )		{		    XdmcpRegisterConnection (family, (char *)addr, len);		    broad_addr = *inetaddr;		    ((struct sockaddr_in *) &broad_addr)->sin_addr.s_addr =			htonl (INADDR_BROADCAST);		    XdmcpRegisterBroadcastAddress ((struct sockaddr_in *)						   &broad_addr);		}#endif /* XDMCP */	    }	}    }    /*     * now add a host of family FamilyLocalHost...     */    for (host = selfhosts;	 host && !addrEqual(FamilyLocalHost, "", 0, host);	 host = host->next);    if (!host)    {	MakeHost(host, 0);	if (host)	{	    host->family = FamilyLocalHost;	    host->len = 0;	    acopy("", host->addr, 0);	    host->next = selfhosts;	    selfhosts = host;	}    }#endif /* !TCPCONN && !STREAMSCONN && !UNIXCONN && !MNX_TCPCONN */}#else#ifdef VARIABLE_IFREQ#define ifr_size(p) (sizeof (struct ifreq) + \		     (p->ifr_addr.sa_len > sizeof (p->ifr_addr) ? \		      p->ifr_addr.sa_len - sizeof (p->ifr_addr) : 0))#define ifraddr_size(a) (a.sa_len)#else#define ifr_size(p) (sizeof (struct ifreq))#define ifraddr_size(a) (sizeof (a))#endifvoidDefineSelf (fd)    int fd;{    char		buf[2048], *cp, *cplim;    struct ifconf	ifc;    register int	n;    int 		len;    unsigned char *	addr;    int 		family;    register HOST 	*host;    register struct ifreq *ifr;    #ifdef DNETCONN    struct dn_naddr *dnaddr = getnodeadd();    /*     * AF_DECnet may not be listed in the interface list.  Instead use     * the supported library call to find out the local address (if any).     */    if (dnaddr)    {    	addr = (unsigned char *) dnaddr;	len = dnaddr->a_len + sizeof(dnaddr->a_len);	family = FamilyDECnet;	for (host = selfhosts;	     host && !addrEqual (family, addr, len, host);	     host = host->next)	    ;        if (!host)	{	    MakeHost(host,len)	    if (host)	    {		host->family = family;		host->len = len;		acopy(addr, host->addr, len);		host->next = selfhosts;		selfhosts = host;	    }	}    }#endif    ifc.ifc_len = sizeof (buf);    ifc.ifc_buf = buf;    if (ifioctl (fd, (int) SIOCGIFCONF, (pointer) &ifc) < 0)        Error ("Getting interface configuration (4)");#ifdef ISC#define IFC_IFC_REQ (struct ifreq *) ifc.ifc_buf#else#define IFC_IFC_REQ ifc.ifc_req#endif    cplim = (char *) IFC_IFC_REQ + ifc.ifc_len;        for (cp = (char *) IFC_IFC_REQ; cp < cplim; cp += ifr_size (ifr))    {	ifr = (struct ifreq *) cp;	len = ifraddr_size (ifr->ifr_addr);#ifdef DNETCONN	/*	 * DECnet was handled up above.	 */	if (ifr->ifr_addr.sa_family == AF_DECnet)	    continue;#endif /* DNETCONN */	family = ConvertAddr (&ifr->ifr_addr, &len, (pointer *)&addr);        if (family == -1 || family == FamilyLocal)	    continue;#ifdef DEF_SELF_DEBUG	if (family == FamilyInternet) 	    ErrorF("Xserver: DefineSelf(): ifname = %s, addr = %d.%d.%d.%d\n",		   ifr->ifr_name, addr[0], addr[1], addr[2], addr[3]);#endif        for (host = selfhosts; 	     host && !addrEqual (family, addr, len, host);	     host = host->next)	    ;        if (host)	    continue;	MakeHost(host,len)	if (host)	{	    host->family = family;	    host->len = len;	    acopy(addr, host->addr, len);	    host->next = selfhosts;	    selfhosts = host;	}#ifdef XDMCP	{	    struct sockaddr broad_addr;	    /*	     * If this isn't an Internet Address, don't register it.	     */	    if (family != FamilyInternet)		continue;	    /* 	     * ignore 'localhost' entries as they're not useful	     * on the other end of the wire	     */	    if (len == 4 &&		addr[0] == 127 && addr[1] == 0 &&		addr[2] == 0 && addr[3] == 1)		continue;	    XdmcpRegisterConnection (family, (char *)addr, len);	    broad_addr = ifr->ifr_addr;	    ((struct sockaddr_in *) &broad_addr)->sin_addr.s_addr =		htonl (INADDR_BROADCAST);#ifdef SIOCGIFBRDADDR	    {	    	struct ifreq    broad_req;    	    	broad_req = *ifr;		if (ifioctl (fd, SIOCGIFFLAGS, (char *) &broad_req) != -1 &&		    (broad_req.ifr_flags & IFF_BROADCAST) &&		    (broad_req.ifr_flags & IFF_UP)		    )		{		    broad_req = *ifr;		    if (ifioctl (fd, SIOCGIFBRDADDR, &broad_req) != -1)			broad_addr = broad_req.ifr_addr;		    else			continue;		}		else		    continue;	    }#endif#ifdef DEF_SELF_DEBUG	    ErrorF("Xserver: DefineSelf(): ifname = %s, baddr = %s\n",		   ifr->ifr_name,	           inet_ntoa(((struct sockaddr_in *) &broad_addr)->sin_addr));#endif	    XdmcpRegisterBroadcastAddress ((struct sockaddr_in *) &broad_addr);	}#endif    }    /*     * add something of FamilyLocalHost     */    for (host = selfhosts;	 host && !addrEqual(FamilyLocalHost, "", 0, host);	 host = host->next);    if (!host)    {	MakeHost(host, 0);	if (host)	{	    host->family = FamilyLocalHost;	    host->len = 0;	    acopy("", host->addr, 0);	    host->next = selfhosts;	    selfhosts = host;	}    }}#endif /* hpux && !HAS_IFREQ */#endif /* WINTCP */#ifdef XDMCPvoidAugmentSelf(from, len)    pointer from;    int	    len;{    int family;    pointer addr;    register HOST *host;    family = ConvertAddr(from, &len, (pointer *)&addr);    if (family == -1 || family == FamilyLocal)	return;    for (host = selfhosts; host; host = host->next)    {	if (addrEqual(family, addr, len, host))	    return;    }    MakeHost(host,len)    if (!host)	return;    host->family = family;    host->len = len;    acopy(addr, host->addr, len);    host->next = selfhosts;    selfhosts = host;}#endifvoidAddLocalHosts (){    HOST    *self;    for (self = selfhosts; self; self = self->next)	(void) NewHost (self->family, self->addr, self->len);}/* Reset access control list to initial hosts */voidResetHosts (display)    char *display;{    register HOST	*host;    char                lhostname[120], ohostname[120];    char 		*hostname = ohostname;    char		fname[PATH_MAX + 1];    int			fnamelen;    FILE		*fd;    char		*ptr;    int                 i, hostlen;#ifndef AMOEBA    union {        struct sockaddr	sa;#if defined(TCPCONN) || defined(STREAMSCONN) || defined(MNX_TCPCONN)        struct sockaddr_in in;#endif /* TCPCONN || STREAMSCONN */#ifdef DNETCONN        struct sockaddr_dn dn;#endif    } 			saddr;#endif /* AMOEBA */#ifdef DNETCONN    struct nodeent 	*np;    struct dn_naddr 	dnaddr, *dnaddrp, *dnet_addr();#endif#ifdef K5AUTH    krb5_principal      princ;    krb5_data		kbuf;#endif    int			family;    pointer		addr;    int 		len;    register struct hostent *hp;    AccessEnabled = defeatAccessControl ? FALSE : DEFAULT_ACCESS_CONTROL;    LocalHostEnabled = FALSE;    while (host = validhosts)    {        validhosts = host->next;        FreeHost (host);    }#ifndef __EMX__#define ETC_HOST_PREFIX "/etc/X"#define ETC_HOST_SUFFIX ".hosts"#else#define ETC_HOST_PREFIX "/XFree86/lib/X11/X"#define ETC_HOST_SUFFIX ".hosts"#endif /* __EMX__ */    fnamelen = strlen(ETC_HOST_PREFIX) + strlen(ETC_HOST_SUFFIX) +		strlen(display) + 1;    if (fnamelen > sizeof(fname))	FatalError("Display name `%s' is too long\n");    sprintf(fname, ETC_HOST_PREFIX "%s" ETC_HOST_SUFFIX, display);#ifdef __EMX__    strcpy(fname, (char*)__XOS2RedirRoot(fname));#endif /* __EMX__ */    if (fd = fopen (fname, "r"))     {        while (fgets (ohostname, sizeof (ohostname), fd))	{	if (*ohostname == '#')	    continue;    	if (ptr = strchr(ohostname, '\n'))    	    *ptr = 0;#ifdef __EMX__    	if (ptr = strchr(ohostname, '\r'))    	    *ptr = 0;#endif        hostlen = strlen(ohostname) + 1;        for (i = 0; i < hostlen; i++)	    lhostname[i] = tolower(ohostname[i]);	hostname = ohostname;	if (!strncmp("local:", lhostname, 6))	{	    family = FamilyLocalHost;	    NewHost(family, "", 0);	}#if defined(TCPCONN) || defined(STREAMSCONN) || defined(MNX_TCPCONN)	else if (!strncmp("inet:", lhostname, 5))	{	    family = FamilyInternet;	    hostname = ohostname + 5;	}#endif#ifdef DNETCONN	else if (!strncmp("dnet:", lhostname, 5))	{	    family = FamilyDECnet;	    hostname = ohostname + 5;	}#endif#ifdef SECURE_RPC	else if (!strncmp("nis:", lhostname, 4))	{	    family = FamilyNetname;	    hostname = ohostname + 4;	}#endif#ifdef K5AUTH	else if (!strncmp("krb:", lhostname, 4))	{	    family = FamilyKrb5Principal;	    hostname = ohostname + 4;	}#endif#ifdef DNETCONN    	if ((family == FamilyDECnet) ||	    (ptr = strchr(hostname, ':')) && (*(ptr + 1) == ':') &&	    !(*ptr = '\0'))	/* bash trailing colons if necessary */	{    	    /* node name (DECnet names end in "::") */	    dnaddrp = dnet_addr(hostname);    	    if (!dnaddrp && (np = getnodebyname (hostname)))	    {		/* node was specified by name */		saddr.sa.sa_family = np->n_addrtype;		len = sizeof(saddr.sa);		if (ConvertAddr (&saddr.sa, &len, (pointer *)&addr) == FamilyDECnet)		{		    bzero ((char *) &dnaddr, sizeof (dnaddr));		    dnaddr.a_len = np->n_length;		    acopy (np->n_addr, dnaddr.a_addr, np->n_length);		    dnaddrp = &dnaddr;		}    	    }	    if (dnaddrp)		(void) NewHost(FamilyDECnet, (pointer)dnaddrp,			(int)(dnaddrp->a_len + sizeof(dnaddrp->a_len)));    	}	else#endif /* DNETCONN */#ifdef K5AUTH	if (family == FamilyKrb5Principal)	{            krb5_parse_name(hostname, &princ);	    XauKrb5Encode(princ, &kbuf);	    (void) NewHost(FamilyKrb5Principal, kbuf.data, kbuf.length);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -