📄 access.c
字号:
{ 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 + -