summaryrefslogtreecommitdiff
path: root/os/access.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2012-03-21 12:55:09 -0700
committerKeith Packard <keithp@keithp.com>2012-03-21 13:54:42 -0700
commit9838b7032ea9792bec21af424c53c07078636d21 (patch)
treeb72d0827dac50f0f3b8eab29b3b7639546d735d7 /os/access.c
parent75199129c603fc8567185ac31866c9518193cb78 (diff)
Introduce a consistent coding style
This is strictly the application of the script 'x-indent-all.sh' from util/modular. Compared to the patch that Daniel posted in January, I've added a few indent flags: -bap -psl -T PrivatePtr -T pmWait -T _XFUNCPROTOBEGIN -T _XFUNCPROTOEND -T _X_EXPORT The typedefs were needed to make the output of sdksyms.sh match the previous output, otherwise, the code is formatted badly enough that sdksyms.sh generates incorrect output. The generated code was compared with the previous version and found to be essentially identical -- "assert" line numbers and BUILD_TIME were the only differences found. The comparison was done with this script: dir1=$1 dir2=$2 for dir in $dir1 $dir2; do (cd $dir && find . -name '*.o' | while read file; do dir=`dirname $file` base=`basename $file .o` dump=$dir/$base.dump objdump -d $file > $dump done) done find $dir1 -name '*.dump' | while read dump; do otherdump=`echo $dump | sed "s;$dir1;$dir2;"` diff -u $dump $otherdump done Signed-off-by: Keith Packard <keithp@keithp.com> Acked-by: Daniel Stone <daniel@fooishbar.org> Acked-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Diffstat (limited to 'os/access.c')
-rw-r--r--os/access.c2000
1 files changed, 975 insertions, 1025 deletions
diff --git a/os/access.c b/os/access.c
index b609442de..550f2ed8c 100644
--- a/os/access.c
+++ b/os/access.c
@@ -102,28 +102,28 @@ SOFTWARE.
#include <sys/ioctl.h>
#include <ctype.h>
-#if defined(TCPCONN) || defined(STREAMSCONN)
+#if defined(TCPCONN) || defined(STREAMSCONN)
#include <netinet/in.h>
-#endif /* TCPCONN || STREAMSCONN */
+#endif /* TCPCONN || STREAMSCONN */
#ifdef HAVE_GETPEERUCRED
-# include <ucred.h>
-# ifdef sun
-# include <zone.h>
-# endif
+#include <ucred.h>
+#ifdef sun
+#include <zone.h>
+#endif
#endif
#if defined(SVR4) || (defined(SYSV) && defined(__i386__)) || defined(__GNU__)
-# include <sys/utsname.h>
+#include <sys/utsname.h>
#endif
#if defined(SYSV) && defined(__i386__)
-# include <sys/stream.h>
+#include <sys/stream.h>
#endif
#ifdef __GNU__
#undef SIOCGIFCONF
#include <netdb.h>
-#else /*!__GNU__*/
-# include <net/if.h>
+#else /*!__GNU__ */
+#include <net/if.h>
#endif /*__GNU__ */
#ifdef SVR4
@@ -163,8 +163,7 @@ SOFTWARE.
/* #endif */
#endif
-#endif /* WIN32 */
-
+#endif /* WIN32 */
#define X_INCLUDE_NETDB_H
#include <X11/Xos_r.h>
@@ -181,18 +180,18 @@ Bool defeatAccessControl = FALSE;
(length) == (host)->len &&\
!memcmp (address, (host)->addr, length))
-static int ConvertAddr(struct sockaddr * /*saddr*/,
- int * /*len*/,
- pointer * /*addr*/);
+static int ConvertAddr(struct sockaddr * /*saddr */ ,
+ int * /*len */ ,
+ pointer * /*addr */ );
-static int CheckAddr(int /*family*/,
- const void * /*pAddr*/,
- unsigned /*length*/);
+static int CheckAddr(int /*family */ ,
+ const void * /*pAddr */ ,
+ unsigned /*length */ );
-static Bool NewHost(int /*family*/,
- const void * /*addr*/,
- int /*len*/,
- int /* addingLocalHosts */);
+static Bool NewHost(int /*family */ ,
+ const void * /*addr */ ,
+ int /*len */ ,
+ int /* addingLocalHosts */ );
/* XFree86 bug #156: To keep track of which hosts were explicitly requested in
/etc/X<display>.hosts, we've added a requested field to the HOST struct,
@@ -202,11 +201,11 @@ static Bool NewHost(int /*family*/,
local host entries when stronger authentication is turned on. */
typedef struct _host {
- short family;
- short len;
- unsigned char *addr;
- struct _host *next;
- int requested;
+ short family;
+ short len;
+ unsigned char *addr;
+ struct _host *next;
+ int requested;
} HOST;
#define MakeHost(h,l) (h)=malloc(sizeof *(h)+(l));\
@@ -223,9 +222,9 @@ static int LocalHostRequested = FALSE;
static int UsingXdmcp = FALSE;
/* FamilyServerInterpreted implementation */
-static Bool siAddrMatch(int family, pointer addr, int len, HOST *host,
- ClientPtr client);
-static int siCheckAddr(const char *addrString, int length);
+static Bool siAddrMatch(int family, pointer addr, int len, HOST * host,
+ ClientPtr client);
+static int siCheckAddr(const char *addrString, int length);
static void siTypesInitialize(void);
/*
@@ -234,12 +233,11 @@ static void siTypesInitialize(void);
*/
void
-EnableLocalHost (void)
+EnableLocalHost(void)
{
- if (!UsingXdmcp)
- {
- LocalHostEnabled = TRUE;
- AddLocalHosts ();
+ if (!UsingXdmcp) {
+ LocalHostEnabled = TRUE;
+ AddLocalHosts();
}
}
@@ -247,15 +245,16 @@ EnableLocalHost (void)
* called when authorization is enabled to keep us secure
*/
void
-DisableLocalHost (void)
+DisableLocalHost(void)
{
HOST *self;
- if (!LocalHostRequested) /* Fix for XFree86 bug #156 */
- LocalHostEnabled = FALSE;
+ if (!LocalHostRequested) /* Fix for XFree86 bug #156 */
+ LocalHostEnabled = FALSE;
for (self = selfhosts; self; self = self->next) {
- if (!self->requested) /* Fix for XFree86 bug #156 */
- (void) RemoveHost ((ClientPtr)NULL, self->family, self->len, (pointer)self->addr);
+ if (!self->requested) /* Fix for XFree86 bug #156 */
+ (void) RemoveHost((ClientPtr) NULL, self->family, self->len,
+ (pointer) self->addr);
}
}
@@ -265,19 +264,18 @@ DisableLocalHost (void)
*/
void
-AccessUsingXdmcp (void)
+AccessUsingXdmcp(void)
{
UsingXdmcp = TRUE;
LocalHostEnabled = FALSE;
}
-
#if defined(SVR4) && !defined(sun) && defined(SIOCGIFCONF) && !defined(USE_SIOCGLIFCONF)
/* Deal with different SIOCGIFCONF ioctl semantics on these OSs */
static int
-ifioctl (int fd, int cmd, char *arg)
+ifioctl(int fd, int cmd, char *arg)
{
struct strioctl ioc;
int ret;
@@ -285,20 +283,18 @@ ifioctl (int fd, int cmd, char *arg)
memset((char *) &ioc, 0, sizeof(ioc));
ioc.ic_cmd = cmd;
ioc.ic_timout = 0;
- if (cmd == SIOCGIFCONF)
- {
- ioc.ic_len = ((struct ifconf *) arg)->ifc_len;
- ioc.ic_dp = ((struct ifconf *) arg)->ifc_buf;
+ if (cmd == SIOCGIFCONF) {
+ ioc.ic_len = ((struct ifconf *) arg)->ifc_len;
+ ioc.ic_dp = ((struct ifconf *) arg)->ifc_buf;
}
- else
- {
- ioc.ic_len = sizeof(struct ifreq);
- ioc.ic_dp = arg;
+ else {
+ ioc.ic_len = sizeof(struct ifreq);
+ ioc.ic_dp = arg;
}
ret = ioctl(fd, I_STR, (char *) &ioc);
if (ret >= 0 && cmd == SIOCGIFCONF)
#ifdef SVR4
- ((struct ifconf *) arg)->ifc_len = ioc.ic_len;
+ ((struct ifconf *) arg)->ifc_len = ioc.ic_len;
#endif
return ret;
}
@@ -313,40 +309,41 @@ ifioctl (int fd, int cmd, char *arg)
* for this fd and add them to the selfhosts list.
*/
-#if !defined(SIOCGIFCONF)
+#if !defined(SIOCGIFCONF)
void
-DefineSelf (int fd)
+DefineSelf(int fd)
{
#if !defined(TCPCONN) && !defined(STREAMSCONN) && !defined(UNIXCONN)
return;
#else
register int n;
- int len;
- caddr_t addr;
- int family;
- register HOST *host;
+ int len;
+ caddr_t addr;
+ int family;
+ register HOST *host;
#ifndef WIN32
struct utsname name;
#else
struct {
- char nodename[512];
+ char nodename[512];
} name;
#endif
- register struct hostent *hp;
+ register struct hostent *hp;
union {
- struct sockaddr sa;
- struct sockaddr_in in;
+ struct sockaddr sa;
+ struct sockaddr_in in;
#if defined(IPv6) && defined(AF_INET6)
- struct sockaddr_in6 in6;
+ struct sockaddr_in6 in6;
#endif
} saddr;
-
- struct sockaddr_in *inetaddr;
- struct sockaddr_in6 *inet6addr;
+
+ struct sockaddr_in *inetaddr;
+ struct sockaddr_in6 *inet6addr;
struct sockaddr_in broad_addr;
+
#ifdef XTHREADS_NEEDS_BYNAMEPARAMS
_Xgethostbynameparams hparams;
#endif
@@ -363,95 +360,86 @@ DefineSelf (int fd)
#endif
hp = _XGethostbyname(name.nodename, hparams);
- if (hp != NULL)
- {
- saddr.sa.sa_family = hp->h_addrtype;
- switch (hp->h_addrtype) {
- case AF_INET:
- inetaddr = (struct sockaddr_in *) (&(saddr.sa));
- memcpy ( &(inetaddr->sin_addr), hp->h_addr, hp->h_length);
- len = sizeof(saddr.sa);
- break;
+ if (hp != NULL) {
+ saddr.sa.sa_family = hp->h_addrtype;
+ switch (hp->h_addrtype) {
+ case AF_INET:
+ inetaddr = (struct sockaddr_in *) (&(saddr.sa));
+ memcpy(&(inetaddr->sin_addr), hp->h_addr, hp->h_length);
+ len = sizeof(saddr.sa);
+ break;
#if defined(IPv6) && defined(AF_INET6)
- case AF_INET6:
- inet6addr = (struct sockaddr_in6 *) (&(saddr.sa));
- memcpy ( &(inet6addr->sin6_addr), hp->h_addr, hp->h_length);
- len = sizeof(saddr.in6);
- break;
-#endif
- default:
- goto DefineLocalHost;
- }
- 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;
- memcpy ( host->addr, addr, len);
- host->next = selfhosts;
- selfhosts = host;
- }
+ case AF_INET6:
+ inet6addr = (struct sockaddr_in6 *) (&(saddr.sa));
+ memcpy(&(inet6addr->sin6_addr), hp->h_addr, hp->h_length);
+ len = sizeof(saddr.in6);
+ break;
+#endif
+ default:
+ goto DefineLocalHost;
+ }
+ 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;
+ memcpy(host->addr, addr, len);
+ host->next = selfhosts;
+ selfhosts = host;
+ }
#ifdef XDMCP
- /*
- * If this is an Internet Address, but not the localhost
- * address (127.0.0.1), nor the bogus address (0.0.0.0),
- * register it.
- */
- if (family == FamilyInternet &&
- !(len == 4 &&
- ((addr[0] == 127) ||
- (addr[0] == 0 && addr[1] == 0 &&
- addr[2] == 0 && addr[3] == 0)))
- )
- {
- 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);
- }
+ /*
+ * If this is an Internet Address, but not the localhost
+ * address (127.0.0.1), nor the bogus address (0.0.0.0),
+ * register it.
+ */
+ if (family == FamilyInternet &&
+ !(len == 4 &&
+ ((addr[0] == 127) ||
+ (addr[0] == 0 && addr[1] == 0 &&
+ addr[2] == 0 && addr[3] == 0)))
+ ) {
+ 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);
+ }
#if defined(IPv6) && defined(AF_INET6)
- else if (family == FamilyInternet6 &&
- !(IN6_IS_ADDR_LOOPBACK((struct in6_addr *)addr)))
- {
- XdmcpRegisterConnection (family, (char *)addr, len);
- }
+ else if (family == FamilyInternet6 &&
+ !(IN6_IS_ADDR_LOOPBACK((struct in6_addr *) addr))) {
+ XdmcpRegisterConnection(family, (char *) addr, len);
+ }
#endif
-#endif /* XDMCP */
- }
- }
+#endif /* XDMCP */
+ }
+ }
}
/*
* now add a host of family FamilyLocalHost...
*/
-DefineLocalHost:
+ DefineLocalHost:
for (host = selfhosts;
- host && !addrEqual(FamilyLocalHost, "", 0, host);
- host = host->next);
- if (!host)
- {
- MakeHost(host, 0);
- if (host)
- {
- host->family = FamilyLocalHost;
- host->len = 0;
- /* Nothing to store in host->addr */
- host->next = selfhosts;
- selfhosts = host;
- }
+ host && !addrEqual(FamilyLocalHost, "", 0, host); host = host->next);
+ if (!host) {
+ MakeHost(host, 0);
+ if (host) {
+ host->family = FamilyLocalHost;
+ host->len = 0;
+ /* Nothing to store in host->addr */
+ host->next = selfhosts;
+ selfhosts = host;
+ }
}
-#endif /* !TCPCONN && !STREAMSCONN && !UNIXCONN */
+#endif /* !TCPCONN && !STREAMSCONN && !UNIXCONN */
}
#else
@@ -481,58 +469,60 @@ static void
in6_fillscopeid(struct sockaddr_in6 *sin6)
{
#if defined(__KAME__)
- if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr)) {
- sin6->sin6_scope_id =
- ntohs(*(u_int16_t *)&sin6->sin6_addr.s6_addr[2]);
- sin6->sin6_addr.s6_addr[2] = sin6->sin6_addr.s6_addr[3] = 0;
- }
+ if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr)) {
+ sin6->sin6_scope_id =
+ ntohs(*(u_int16_t *) & sin6->sin6_addr.s6_addr[2]);
+ sin6->sin6_addr.s6_addr[2] = sin6->sin6_addr.s6_addr[3] = 0;
+ }
#endif
}
#endif
void
-DefineSelf (int fd)
+DefineSelf(int fd)
{
#ifndef HAVE_GETIFADDRS
- char *cp, *cplim;
-# ifdef USE_SIOCGLIFCONF
+ char *cp, *cplim;
+
+#ifdef USE_SIOCGLIFCONF
struct sockaddr_storage buf[16];
- struct lifconf ifc;
+ struct lifconf ifc;
register struct lifreq *ifr;
-# ifdef SIOCGLIFNUM
- struct lifnum ifn;
-# endif
-# else /* !USE_SIOCGLIFCONF */
- char buf[2048];
- struct ifconf ifc;
+
+#ifdef SIOCGLIFNUM
+ struct lifnum ifn;
+#endif
+#else /* !USE_SIOCGLIFCONF */
+ char buf[2048];
+ struct ifconf ifc;
register struct ifreq *ifr;
-# endif
- void * bufptr = buf;
-#else /* HAVE_GETIFADDRS */
- struct ifaddrs * ifap, *ifr;
-#endif
- int len;
- unsigned char * addr;
- int family;
- register HOST *host;
-
+#endif
+ void *bufptr = buf;
+#else /* HAVE_GETIFADDRS */
+ struct ifaddrs *ifap, *ifr;
+#endif
+ int len;
+ unsigned char *addr;
+ int family;
+ register HOST *host;
+
#ifndef HAVE_GETIFADDRS
len = sizeof(buf);
#ifdef USE_SIOCGLIFCONF
-
+
#ifdef SIOCGLIFNUM
ifn.lifn_family = AF_UNSPEC;
ifn.lifn_flags = 0;
- if (ioctl (fd, SIOCGLIFNUM, (char *) &ifn) < 0)
- ErrorF ("Getting interface count: %s\n", strerror(errno));
+ if (ioctl(fd, SIOCGLIFNUM, (char *) &ifn) < 0)
+ ErrorF("Getting interface count: %s\n", strerror(errno));
if (len < (ifn.lifn_count * sizeof(struct lifreq))) {
- len = ifn.lifn_count * sizeof(struct lifreq);
- bufptr = malloc(len);
+ len = ifn.lifn_count * sizeof(struct lifreq);
+ bufptr = malloc(len);
}
#endif
-
+
ifc.lifc_family = AF_UNSPEC;
ifc.lifc_flags = 0;
ifc.lifc_len = len;
@@ -544,7 +534,7 @@ DefineSelf (int fd)
#define IFR_IFR_ADDR ifr->lifr_addr
#define IFR_IFR_NAME ifr->lifr_name
-#else /* Use SIOCGIFCONF */
+#else /* Use SIOCGIFCONF */
ifc.ifc_len = len;
ifc.ifc_buf = bufptr;
@@ -555,248 +545,233 @@ DefineSelf (int fd)
#define IFR_IFR_NAME ifr->ifr_name
#endif
- if (ifioctl (fd, IFC_IOCTL_REQ, (pointer) &ifc) < 0)
- ErrorF ("Getting interface configuration (4): %s\n", strerror(errno));
+ if (ifioctl(fd, IFC_IOCTL_REQ, (pointer) &ifc) < 0)
+ ErrorF("Getting interface configuration (4): %s\n", strerror(errno));
cplim = (char *) IFC_IFC_REQ + IFC_IFC_LEN;
-
- for (cp = (char *) IFC_IFC_REQ; cp < cplim; cp += ifr_size (ifr))
- {
- ifr = (ifr_type *) cp;
- len = ifraddr_size (IFR_IFR_ADDR);
- family = ConvertAddr ((struct sockaddr *) &IFR_IFR_ADDR,
- &len, (pointer *)&addr);
+
+ for (cp = (char *) IFC_IFC_REQ; cp < cplim; cp += ifr_size(ifr)) {
+ ifr = (ifr_type *) cp;
+ len = ifraddr_size(IFR_IFR_ADDR);
+ family = ConvertAddr((struct sockaddr *) &IFR_IFR_ADDR,
+ &len, (pointer *) &addr);
if (family == -1 || family == FamilyLocal)
- continue;
+ continue;
#if defined(IPv6) && defined(AF_INET6)
- if (family == FamilyInternet6)
- in6_fillscopeid((struct sockaddr_in6 *)&IFR_IFR_ADDR);
+ if (family == FamilyInternet6)
+ in6_fillscopeid((struct sockaddr_in6 *) &IFR_IFR_ADDR);
#endif
for (host = selfhosts;
- host && !addrEqual (family, addr, len, host);
- host = host->next)
- ;
+ host && !addrEqual(family, addr, len, host); host = host->next);
if (host)
- continue;
- MakeHost(host,len)
- if (host)
- {
- host->family = family;
- host->len = len;
- memcpy(host->addr, addr, len);
- host->next = selfhosts;
- selfhosts = host;
- }
+ continue;
+ MakeHost(host, len)
+ if (host) {
+ host->family = family;
+ host->len = len;
+ memcpy(host->addr, addr, len);
+ host->next = selfhosts;
+ selfhosts = host;
+ }
#ifdef XDMCP
- {
+ {
#ifdef USE_SIOCGLIFCONF
- struct sockaddr_storage broad_addr;
+ struct sockaddr_storage broad_addr;
#else
- struct sockaddr broad_addr;
+ struct sockaddr broad_addr;
#endif
- /*
- * If this isn't an Internet Address, don't register it.
- */
- if (family != FamilyInternet
+ /*
+ * If this isn't an Internet Address, don't register it.
+ */
+ if (family != FamilyInternet
#if defined(IPv6) && defined(AF_INET6)
- && family != FamilyInternet6
-#endif
- )
- continue;
-
- /*
- * ignore 'localhost' entries as they're not useful
- * on the other end of the wire
- */
- if (family == FamilyInternet &&
- addr[0] == 127 && addr[1] == 0 &&
- addr[2] == 0 && addr[3] == 1)
- continue;
+ && family != FamilyInternet6
+#endif
+ )
+ continue;
+
+ /*
+ * ignore 'localhost' entries as they're not useful
+ * on the other end of the wire
+ */
+ if (family == FamilyInternet &&
+ addr[0] == 127 && addr[1] == 0 && addr[2] == 0 && addr[3] == 1)
+ continue;
#if defined(IPv6) && defined(AF_INET6)
- else if (family == FamilyInternet6 &&
- IN6_IS_ADDR_LOOPBACK((struct in6_addr *)addr))
- continue;
+ else if (family == FamilyInternet6 &&
+ IN6_IS_ADDR_LOOPBACK((struct in6_addr *) addr))
+ continue;
#endif
- /*
- * Ignore '0.0.0.0' entries as they are
- * returned by some OSes for unconfigured NICs but they are
- * not useful on the other end of the wire.
- */
- if (len == 4 &&
- addr[0] == 0 && addr[1] == 0 &&
- addr[2] == 0 && addr[3] == 0)
- continue;
+ /*
+ * Ignore '0.0.0.0' entries as they are
+ * returned by some OSes for unconfigured NICs but they are
+ * not useful on the other end of the wire.
+ */
+ if (len == 4 &&
+ addr[0] == 0 && addr[1] == 0 && addr[2] == 0 && addr[3] == 0)
+ continue;
- XdmcpRegisterConnection (family, (char *)addr, len);
+ XdmcpRegisterConnection(family, (char *) addr, len);
#if defined(IPv6) && defined(AF_INET6)
- /* IPv6 doesn't support broadcasting, so we drop out here */
- if (family == FamilyInternet6)
- continue;
+ /* IPv6 doesn't support broadcasting, so we drop out here */
+ if (family == FamilyInternet6)
+ continue;
#endif
- broad_addr = IFR_IFR_ADDR;
+ broad_addr = IFR_IFR_ADDR;
- ((struct sockaddr_in *) &broad_addr)->sin_addr.s_addr =
- htonl (INADDR_BROADCAST);
+ ((struct sockaddr_in *) &broad_addr)->sin_addr.s_addr =
+ htonl(INADDR_BROADCAST);
#if defined(USE_SIOCGLIFCONF) && defined(SIOCGLIFBRDADDR)
- {
- struct lifreq broad_req;
-
- broad_req = *ifr;
- if (ioctl (fd, SIOCGLIFFLAGS, (char *) &broad_req) != -1 &&
- (broad_req.lifr_flags & IFF_BROADCAST) &&
- (broad_req.lifr_flags & IFF_UP)
- )
- {
- broad_req = *ifr;
- if (ioctl (fd, SIOCGLIFBRDADDR, &broad_req) != -1)
- broad_addr = broad_req.lifr_broadaddr;
- else
- continue;
- }
- else
- continue;
- }
+ {
+ struct lifreq broad_req;
+
+ broad_req = *ifr;
+ if (ioctl(fd, SIOCGLIFFLAGS, (char *) &broad_req) != -1 &&
+ (broad_req.lifr_flags & IFF_BROADCAST) &&
+ (broad_req.lifr_flags & IFF_UP)
+ ) {
+ broad_req = *ifr;
+ if (ioctl(fd, SIOCGLIFBRDADDR, &broad_req) != -1)
+ broad_addr = broad_req.lifr_broadaddr;
+ else
+ continue;
+ }
+ else
+ continue;
+ }
#elif defined(SIOCGIFBRDADDR)
- {
- struct ifreq broad_req;
-
- broad_req = *ifr;
- if (ifioctl (fd, SIOCGIFFLAGS, (pointer) &broad_req) != -1 &&
- (broad_req.ifr_flags & IFF_BROADCAST) &&
- (broad_req.ifr_flags & IFF_UP)
- )
- {
- broad_req = *ifr;
- if (ifioctl (fd, SIOCGIFBRDADDR, (pointer) &broad_req) != -1)
- broad_addr = broad_req.ifr_addr;
- else
- continue;
- }
- else
- continue;
- }
-#endif /* SIOCGIFBRDADDR */
- XdmcpRegisterBroadcastAddress ((struct sockaddr_in *) &broad_addr);
- }
-#endif /* XDMCP */
+ {
+ struct ifreq broad_req;
+
+ broad_req = *ifr;
+ if (ifioctl(fd, SIOCGIFFLAGS, (pointer) &broad_req) != -1 &&
+ (broad_req.ifr_flags & IFF_BROADCAST) &&
+ (broad_req.ifr_flags & IFF_UP)
+ ) {
+ broad_req = *ifr;
+ if (ifioctl(fd, SIOCGIFBRDADDR, (pointer) &broad_req) != -1)
+ broad_addr = broad_req.ifr_addr;
+ else
+ continue;
+ }
+ else
+ continue;
+ }
+#endif /* SIOCGIFBRDADDR */
+ XdmcpRegisterBroadcastAddress((struct sockaddr_in *) &broad_addr);
+ }
+#endif /* XDMCP */
}
if (bufptr != buf)
- free(bufptr);
-#else /* HAVE_GETIFADDRS */
+ free(bufptr);
+#else /* HAVE_GETIFADDRS */
if (getifaddrs(&ifap) < 0) {
- ErrorF("Warning: getifaddrs returns %s\n", strerror(errno));
- return;
+ ErrorF("Warning: getifaddrs returns %s\n", strerror(errno));
+ return;
}
for (ifr = ifap; ifr != NULL; ifr = ifr->ifa_next) {
if (!ifr->ifa_addr)
continue;
- len = sizeof(*(ifr->ifa_addr));
- family = ConvertAddr((struct sockaddr *) ifr->ifa_addr, &len,
- (pointer *)&addr);
- if (family == -1 || family == FamilyLocal)
- continue;
+ len = sizeof(*(ifr->ifa_addr));
+ family = ConvertAddr((struct sockaddr *) ifr->ifa_addr, &len,
+ (pointer *) &addr);
+ if (family == -1 || family == FamilyLocal)
+ continue;
#if defined(IPv6) && defined(AF_INET6)
- if (family == FamilyInternet6)
- in6_fillscopeid((struct sockaddr_in6 *)ifr->ifa_addr);
-#endif
-
- for (host = selfhosts;
- host != NULL && !addrEqual(family, addr, len, host);
- host = host->next)
- ;
- if (host != NULL)
- continue;
- MakeHost(host, len);
- if (host != NULL) {
- host->family = family;
- host->len = len;
- memcpy(host->addr, addr, len);
- host->next = selfhosts;
- selfhosts = host;
- }
+ if (family == FamilyInternet6)
+ in6_fillscopeid((struct sockaddr_in6 *) ifr->ifa_addr);
+#endif
+
+ for (host = selfhosts;
+ host != NULL && !addrEqual(family, addr, len, host);
+ host = host->next);
+ if (host != NULL)
+ continue;
+ MakeHost(host, len);
+ if (host != NULL) {
+ host->family = family;
+ host->len = len;
+ memcpy(host->addr, addr, len);
+ host->next = selfhosts;
+ selfhosts = host;
+ }
#ifdef XDMCP
- {
- /*
- * If this isn't an Internet Address, don't register it.
- */
- if (family != FamilyInternet
+ {
+ /*
+ * If this isn't an Internet Address, don't register it.
+ */
+ if (family != FamilyInternet
#if defined(IPv6) && defined(AF_INET6)
- && family != FamilyInternet6
-#endif
- )
- continue;
-
- /*
- * ignore 'localhost' entries as they're not useful
- * on the other end of the wire
- */
- if (ifr->ifa_flags & IFF_LOOPBACK)
- continue;
-
- if (family == FamilyInternet &&
- addr[0] == 127 && addr[1] == 0 &&
- addr[2] == 0 && addr[3] == 1)
- continue;
-
- /*
- * Ignore '0.0.0.0' entries as they are
- * returned by some OSes for unconfigured NICs but they are
- * not useful on the other end of the wire.
- */
- if (len == 4 &&
- addr[0] == 0 && addr[1] == 0 &&
- addr[2] == 0 && addr[3] == 0)
- continue;
+ && family != FamilyInternet6
+#endif
+ )
+ continue;
+
+ /*
+ * ignore 'localhost' entries as they're not useful
+ * on the other end of the wire
+ */
+ if (ifr->ifa_flags & IFF_LOOPBACK)
+ continue;
+
+ if (family == FamilyInternet &&
+ addr[0] == 127 && addr[1] == 0 && addr[2] == 0 && addr[3] == 1)
+ continue;
+
+ /*
+ * Ignore '0.0.0.0' entries as they are
+ * returned by some OSes for unconfigured NICs but they are
+ * not useful on the other end of the wire.
+ */
+ if (len == 4 &&
+ addr[0] == 0 && addr[1] == 0 && addr[2] == 0 && addr[3] == 0)
+ continue;
#if defined(IPv6) && defined(AF_INET6)
- else if (family == FamilyInternet6 &&
- IN6_IS_ADDR_LOOPBACK((struct in6_addr *)addr))
- continue;
+ else if (family == FamilyInternet6 &&
+ IN6_IS_ADDR_LOOPBACK((struct in6_addr *) addr))
+ continue;
#endif
- XdmcpRegisterConnection(family, (char *)addr, len);
+ XdmcpRegisterConnection(family, (char *) addr, len);
#if defined(IPv6) && defined(AF_INET6)
- if (family == FamilyInternet6)
- /* IPv6 doesn't support broadcasting, so we drop out here */
- continue;
-#endif
- if ((ifr->ifa_flags & IFF_BROADCAST) &&
- (ifr->ifa_flags & IFF_UP) &&
- ifr->ifa_broadaddr)
- XdmcpRegisterBroadcastAddress(
- (struct sockaddr_in *) ifr->ifa_broadaddr);
- else
- continue;
- }
-#endif /* XDMCP */
-
- } /* for */
+ if (family == FamilyInternet6)
+ /* IPv6 doesn't support broadcasting, so we drop out here */
+ continue;
+#endif
+ if ((ifr->ifa_flags & IFF_BROADCAST) &&
+ (ifr->ifa_flags & IFF_UP) && ifr->ifa_broadaddr)
+ XdmcpRegisterBroadcastAddress((struct sockaddr_in *) ifr->
+ ifa_broadaddr);
+ else
+ continue;
+ }
+#endif /* XDMCP */
+
+ } /* for */
freeifaddrs(ifap);
-#endif /* HAVE_GETIFADDRS */
+#endif /* HAVE_GETIFADDRS */
/*
* 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;
- /* Nothing to store in host->addr */
- host->next = selfhosts;
- selfhosts = host;
- }
+ host && !addrEqual(FamilyLocalHost, "", 0, host); host = host->next);
+ if (!host) {
+ MakeHost(host, 0);
+ if (host) {
+ host->family = FamilyLocalHost;
+ host->len = 0;
+ /* Nothing to store in host->addr */
+ host->next = selfhosts;
+ selfhosts = host;
+ }
}
}
-#endif /* hpux && !HAVE_IFREQ */
+#endif /* hpux && !HAVE_IFREQ */
#ifdef XDMCP
void
@@ -806,17 +781,16 @@ AugmentSelf(pointer from, int len)
pointer addr;
register HOST *host;
- family = ConvertAddr(from, &len, (pointer *)&addr);
+ 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;
+ return;
+ for (host = selfhosts; host; host = host->next) {
+ if (addrEqual(family, addr, len, host))
+ return;
}
- MakeHost(host,len)
- if (!host)
- return;
+ MakeHost(host, len)
+ if (!host)
+ return;
host->family = family;
host->len = len;
memcpy(host->addr, addr, len);
@@ -826,50 +800,50 @@ AugmentSelf(pointer from, int len)
#endif
void
-AddLocalHosts (void)
+AddLocalHosts(void)
{
- HOST *self;
+ HOST *self;
for (self = selfhosts; self; self = self->next)
- /* Fix for XFree86 bug #156: pass addingLocal = TRUE to
- * NewHost to tell that we are adding the default local
- * host entries and not to flag the entries as being
- * explicitely requested */
- (void) NewHost (self->family, self->addr, self->len, TRUE);
+ /* Fix for XFree86 bug #156: pass addingLocal = TRUE to
+ * NewHost to tell that we are adding the default local
+ * host entries and not to flag the entries as being
+ * explicitely requested */
+ (void) NewHost(self->family, self->addr, self->len, TRUE);
}
/* Reset access control list to initial hosts */
void
-ResetHosts (char *display)
+ResetHosts(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;
+ 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;
+
#if (defined(TCPCONN) || defined(STREAMSCONN) ) && \
(!defined(IPv6) || !defined(AF_INET6))
union {
- struct sockaddr sa;
+ struct sockaddr sa;
#if defined(TCPCONN) || defined(STREAMSCONN)
- struct sockaddr_in in;
-#endif /* TCPCONN || STREAMSCONN */
- } saddr;
+ struct sockaddr_in in;
+#endif /* TCPCONN || STREAMSCONN */
+ } saddr;
#endif
- int family = 0;
- pointer addr;
- int len;
+ int family = 0;
+ pointer addr;
+ int len;
siTypesInitialize();
AccessEnabled = defeatAccessControl ? FALSE : DEFAULT_ACCESS_CONTROL;
LocalHostEnabled = FALSE;
- while ((host = validhosts) != 0)
- {
+ while ((host = validhosts) != 0) {
validhosts = host->next;
- FreeHost (host);
+ FreeHost(host);
}
#if defined WIN32 && defined __MINGW32__
@@ -879,130 +853,122 @@ ResetHosts (char *display)
#endif
#define ETC_HOST_SUFFIX ".hosts"
fnamelen = strlen(ETC_HOST_PREFIX) + strlen(ETC_HOST_SUFFIX) +
- strlen(display) + 1;
+ strlen(display) + 1;
if (fnamelen > sizeof(fname))
- FatalError("Display name `%s' is too long\n", display);
- snprintf(fname, sizeof(fname), ETC_HOST_PREFIX "%s" ETC_HOST_SUFFIX,
- display);
-
- if ((fd = fopen (fname, "r")) != 0)
- {
- while (fgets (ohostname, sizeof (ohostname), fd))
- {
- family = FamilyWild;
- if (*ohostname == '#')
- continue;
- if ((ptr = strchr(ohostname, '\n')) != 0)
- *ptr = 0;
- 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, FALSE);
- LocalHostRequested = TRUE; /* Fix for XFree86 bug #156 */
- }
+ FatalError("Display name `%s' is too long\n", display);
+ snprintf(fname, sizeof(fname), ETC_HOST_PREFIX "%s" ETC_HOST_SUFFIX,
+ display);
+
+ if ((fd = fopen(fname, "r")) != 0) {
+ while (fgets(ohostname, sizeof(ohostname), fd)) {
+ family = FamilyWild;
+ if (*ohostname == '#')
+ continue;
+ if ((ptr = strchr(ohostname, '\n')) != 0)
+ *ptr = 0;
+ 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, FALSE);
+ LocalHostRequested = TRUE; /* Fix for XFree86 bug #156 */
+ }
#if defined(TCPCONN) || defined(STREAMSCONN)
- else if (!strncmp("inet:", lhostname, 5))
- {
- family = FamilyInternet;
- hostname = ohostname + 5;
- }
+ else if (!strncmp("inet:", lhostname, 5)) {
+ family = FamilyInternet;
+ hostname = ohostname + 5;
+ }
#if defined(IPv6) && defined(AF_INET6)
- else if (!strncmp("inet6:", lhostname, 6))
- {
- family = FamilyInternet6;
- hostname = ohostname + 6;
- }
+ else if (!strncmp("inet6:", lhostname, 6)) {
+ family = FamilyInternet6;
+ hostname = ohostname + 6;
+ }
#endif
#endif
#ifdef SECURE_RPC
- else if (!strncmp("nis:", lhostname, 4))
- {
- family = FamilyNetname;
- hostname = ohostname + 4;
- }
-#endif
- else if (!strncmp("si:", lhostname, 3))
- {
- family = FamilyServerInterpreted;
- hostname = ohostname + 3;
- hostlen -= 3;
- }
-
-
- if (family == FamilyServerInterpreted)
- {
- len = siCheckAddr(hostname, hostlen);
- if (len >= 0) {
- NewHost(family, hostname, len, FALSE);
- }
- }
- else
+ else if (!strncmp("nis:", lhostname, 4)) {
+ family = FamilyNetname;
+ hostname = ohostname + 4;
+ }
+#endif
+ else if (!strncmp("si:", lhostname, 3)) {
+ family = FamilyServerInterpreted;
+ hostname = ohostname + 3;
+ hostlen -= 3;
+ }
+
+ if (family == FamilyServerInterpreted) {
+ len = siCheckAddr(hostname, hostlen);
+ if (len >= 0) {
+ NewHost(family, hostname, len, FALSE);
+ }
+ }
+ else
#ifdef SECURE_RPC
- if ((family == FamilyNetname) || (strchr(hostname, '@')))
- {
- SecureRPCInit ();
- (void) NewHost (FamilyNetname, hostname, strlen (hostname), FALSE);
- }
- else
-#endif /* SECURE_RPC */
+ if ((family == FamilyNetname) || (strchr(hostname, '@'))) {
+ SecureRPCInit();
+ (void) NewHost(FamilyNetname, hostname, strlen(hostname),
+ FALSE);
+ }
+ else
+#endif /* SECURE_RPC */
#if defined(TCPCONN) || defined(STREAMSCONN)
- {
-#if defined(IPv6) && defined(AF_INET6)
- if ( (family == FamilyInternet) || (family == FamilyInternet6) ||
- (family == FamilyWild) )
{
- struct addrinfo *addresses;
- struct addrinfo *a;
- int f;
-
- if (getaddrinfo(hostname, NULL, NULL, &addresses) == 0) {
- for (a = addresses ; a != NULL ; a = a->ai_next) {
- len = a->ai_addrlen;
- f = ConvertAddr(a->ai_addr,&len,(pointer *)&addr);
- if ( (family == f) ||
- ((family == FamilyWild) && (f != -1)) ) {
- NewHost(f, addr, len, FALSE);
- }
- }
- freeaddrinfo(addresses);
- }
- }
+#if defined(IPv6) && defined(AF_INET6)
+ if ((family == FamilyInternet) || (family == FamilyInternet6) ||
+ (family == FamilyWild)) {
+ struct addrinfo *addresses;
+ struct addrinfo *a;
+ int f;
+
+ if (getaddrinfo(hostname, NULL, NULL, &addresses) == 0) {
+ for (a = addresses; a != NULL; a = a->ai_next) {
+ len = a->ai_addrlen;
+ f = ConvertAddr(a->ai_addr, &len,
+ (pointer *) &addr);
+ if ((family == f) ||
+ ((family == FamilyWild) && (f != -1))) {
+ NewHost(f, addr, len, FALSE);
+ }
+ }
+ freeaddrinfo(addresses);
+ }
+ }
#else
#ifdef XTHREADS_NEEDS_BYNAMEPARAMS
- _Xgethostbynameparams hparams;
-#endif
- register struct hostent *hp;
-
- /* host name */
- if ((family == FamilyInternet &&
- ((hp = _XGethostbyname(hostname, hparams)) != 0)) ||
- ((hp = _XGethostbyname(hostname, hparams)) != 0))
- {
- saddr.sa.sa_family = hp->h_addrtype;
- len = sizeof(saddr.sa);
- if ((family = ConvertAddr (&saddr.sa, &len, (pointer *)&addr)) != -1)
- {
-#ifdef h_addr /* new 4.3bsd version of gethostent */
- char **list;
-
- /* iterate over the addresses */
- for (list = hp->h_addr_list; *list; list++)
- (void) NewHost (family, (pointer)*list, len, FALSE);
+ _Xgethostbynameparams hparams;
+#endif
+ register struct hostent *hp;
+
+ /* host name */
+ if ((family == FamilyInternet &&
+ ((hp = _XGethostbyname(hostname, hparams)) != 0)) ||
+ ((hp = _XGethostbyname(hostname, hparams)) != 0)) {
+ saddr.sa.sa_family = hp->h_addrtype;
+ len = sizeof(saddr.sa);
+ if ((family =
+ ConvertAddr(&saddr.sa, &len,
+ (pointer *) &addr)) != -1) {
+#ifdef h_addr /* new 4.3bsd version of gethostent */
+ char **list;
+
+ /* iterate over the addresses */
+ for (list = hp->h_addr_list; *list; list++)
+ (void) NewHost(family, (pointer) *list, len, FALSE);
#else
- (void) NewHost (family, (pointer)hp->h_addr, len, FALSE);
-#endif
- }
- }
-#endif /* IPv6 */
+ (void) NewHost(family, (pointer) hp->h_addr, len,
+ FALSE);
+#endif
+ }
+ }
+#endif /* IPv6 */
+ }
+#endif /* TCPCONN || STREAMSCONN */
+ family = FamilyWild;
}
-#endif /* TCPCONN || STREAMSCONN */
- family = FamilyWild;
- }
- fclose (fd);
+ fclose(fd);
}
}
@@ -1010,46 +976,43 @@ ResetHosts (char *display)
Bool
ComputeLocalClient(ClientPtr client)
{
- int alen, family, notused;
- Xtransaddr *from = NULL;
- pointer addr;
- register HOST *host;
- OsCommPtr oc = (OsCommPtr) client->osPrivate;
+ int alen, family, notused;
+ Xtransaddr *from = NULL;
+ pointer addr;
+ register HOST *host;
+ OsCommPtr oc = (OsCommPtr) client->osPrivate;
if (!oc->trans_conn)
return FALSE;
- if (!_XSERVTransGetPeerAddr (oc->trans_conn, &notused, &alen, &from))
- {
- family = ConvertAddr ((struct sockaddr *) from,
- &alen, (pointer *)&addr);
- if (family == -1)
- {
- free(from);
- return FALSE;
- }
- if (family == FamilyLocal)
- {
- free(from);
- return TRUE;
- }
- for (host = selfhosts; host; host = host->next)
- {
- if (addrEqual (family, addr, alen, host)) {
- free(from);
- return TRUE;
- }
- }
- free(from);
+ if (!_XSERVTransGetPeerAddr(oc->trans_conn, &notused, &alen, &from)) {
+ family = ConvertAddr((struct sockaddr *) from,
+ &alen, (pointer *) &addr);
+ if (family == -1) {
+ free(from);
+ return FALSE;
+ }
+ if (family == FamilyLocal) {
+ free(from);
+ return TRUE;
+ }
+ for (host = selfhosts; host; host = host->next) {
+ if (addrEqual(family, addr, alen, host)) {
+ free(from);
+ return TRUE;
+ }
+ }
+ free(from);
}
return FALSE;
}
-Bool LocalClient(ClientPtr client)
+Bool
+LocalClient(ClientPtr client)
{
if (!client->osPrivate)
return FALSE;
- return ((OsCommPtr)client->osPrivate)->local_client;
+ return ((OsCommPtr) client->osPrivate)->local_client;
}
/*
@@ -1064,17 +1027,17 @@ LocalClientCred(ClientPtr client, int *pUid, int *pGid)
int ret = GetLocalClientCreds(client, &lcc);
if (ret == 0) {
-#ifdef HAVE_GETZONEID /* only local if in the same zone */
- if ((lcc->fieldsSet & LCC_ZID_SET) && (lcc->zoneid != getzoneid())) {
- FreeLocalClientCreds(lcc);
- return -1;
- }
-#endif
- if ((lcc->fieldsSet & LCC_UID_SET) && (pUid != NULL))
- *pUid = lcc->euid;
- if ((lcc->fieldsSet & LCC_GID_SET) && (pGid != NULL))
- *pGid = lcc->egid;
- FreeLocalClientCreds(lcc);
+#ifdef HAVE_GETZONEID /* only local if in the same zone */
+ if ((lcc->fieldsSet & LCC_ZID_SET) && (lcc->zoneid != getzoneid())) {
+ FreeLocalClientCreds(lcc);
+ return -1;
+ }
+#endif
+ if ((lcc->fieldsSet & LCC_UID_SET) && (pUid != NULL))
+ *pUid = lcc->euid;
+ if ((lcc->fieldsSet & LCC_GID_SET) && (pGid != NULL))
+ *pGid = lcc->egid;
+ FreeLocalClientCreds(lcc);
}
return ret;
}
@@ -1087,12 +1050,13 @@ LocalClientCred(ClientPtr client, int *pUid, int *pGid)
* Used by AuthAudit to log who local connections came from
*/
int
-GetLocalClientCreds(ClientPtr client, LocalClientCredRec **lccp)
+GetLocalClientCreds(ClientPtr client, LocalClientCredRec ** lccp)
{
#if defined(HAVE_GETPEEREID) || defined(HAVE_GETPEERUCRED) || defined(SO_PEERCRED)
int fd;
XtransConnInfo ci;
LocalClientCredRec *lcc;
+
#ifdef HAVE_GETPEEREID
uid_t uid;
gid_t gid;
@@ -1105,28 +1069,28 @@ GetLocalClientCreds(ClientPtr client, LocalClientCredRec **lccp)
#endif
if (client == NULL)
- return -1;
- ci = ((OsCommPtr)client->osPrivate)->trans_conn;
+ return -1;
+ ci = ((OsCommPtr) client->osPrivate)->trans_conn;
#if !(defined(sun) && defined(HAVE_GETPEERUCRED))
/* Most implementations can only determine peer credentials for Unix
* domain sockets - Solaris getpeerucred can work with a bit more, so
* we just let it tell us if the connection type is supported or not
*/
if (!_XSERVTransIsLocal(ci)) {
- return -1;
+ return -1;
}
#endif
*lccp = calloc(1, sizeof(LocalClientCredRec));
if (*lccp == NULL)
- return -1;
+ return -1;
lcc = *lccp;
-
+
fd = _XSERVTransGetConnectionNumber(ci);
#ifdef HAVE_GETPEEREID
if (getpeereid(fd, &uid, &gid) == -1) {
- FreeLocalClientCreds(lcc);
- return -1;
+ FreeLocalClientCreds(lcc);
+ return -1;
}
lcc->euid = uid;
lcc->egid = gid;
@@ -1134,43 +1098,46 @@ GetLocalClientCreds(ClientPtr client, LocalClientCredRec **lccp)
return 0;
#elif defined(HAVE_GETPEERUCRED)
if (getpeerucred(fd, &peercred) < 0) {
- FreeLocalClientCreds(lcc);
- return -1;
+ FreeLocalClientCreds(lcc);
+ return -1;
}
lcc->euid = ucred_geteuid(peercred);
if (lcc->euid != -1)
- lcc->fieldsSet |= LCC_UID_SET;
+ lcc->fieldsSet |= LCC_UID_SET;
lcc->egid = ucred_getegid(peercred);
if (lcc->egid != -1)
- lcc->fieldsSet |= LCC_GID_SET;
+ lcc->fieldsSet |= LCC_GID_SET;
lcc->pid = ucred_getpid(peercred);
if (lcc->pid != -1)
- lcc->fieldsSet |= LCC_PID_SET;
+ lcc->fieldsSet |= LCC_PID_SET;
#ifdef HAVE_GETZONEID
lcc->zoneid = ucred_getzoneid(peercred);
if (lcc->zoneid != -1)
- lcc->fieldsSet |= LCC_ZID_SET;
+ lcc->fieldsSet |= LCC_ZID_SET;
#endif
lcc->nSuppGids = ucred_getgroups(peercred, &gids);
if (lcc->nSuppGids > 0) {
- lcc->pSuppGids = calloc(lcc->nSuppGids, sizeof(int));
- if (lcc->pSuppGids == NULL) {
- lcc->nSuppGids = 0;
- } else {
- int i;
- for (i = 0 ; i < lcc->nSuppGids; i++) {
- (lcc->pSuppGids)[i] = (int) gids[i];
- }
- }
- } else {
- lcc->nSuppGids = 0;
+ lcc->pSuppGids = calloc(lcc->nSuppGids, sizeof(int));
+ if (lcc->pSuppGids == NULL) {
+ lcc->nSuppGids = 0;
+ }
+ else {
+ int i;
+
+ for (i = 0; i < lcc->nSuppGids; i++) {
+ (lcc->pSuppGids)[i] = (int) gids[i];
+ }
+ }
+ }
+ else {
+ lcc->nSuppGids = 0;
}
ucred_free(peercred);
return 0;
#elif defined(SO_PEERCRED)
if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &peercred, &so_len) == -1) {
- FreeLocalClientCreds(lcc);
- return -1;
+ FreeLocalClientCreds(lcc);
+ return -1;
}
lcc->euid = peercred.uid;
lcc->egid = peercred.gid;
@@ -1186,13 +1153,13 @@ GetLocalClientCreds(ClientPtr client, LocalClientCredRec **lccp)
}
void
-FreeLocalClientCreds(LocalClientCredRec *lcc)
+FreeLocalClientCreds(LocalClientCredRec * lcc)
{
if (lcc != NULL) {
- if (lcc->nSuppGids > 0) {
- free(lcc->pSuppGids);
- }
- free(lcc);
+ if (lcc->nSuppGids > 0) {
+ free(lcc->pSuppGids);
+ }
+ free(lcc);
}
}
@@ -1202,12 +1169,12 @@ AuthorizedClient(ClientPtr client)
int rc;
if (!client || defeatAccessControl)
- return Success;
+ return Success;
/* untrusted clients can't change host access */
rc = XaceHook(XACE_SERVER_ACCESS, client, DixManageAccess);
if (rc != Success)
- return rc;
+ return rc;
return LocalClient(client) ? Success : BadAccess;
}
@@ -1216,26 +1183,24 @@ AuthorizedClient(ClientPtr client)
* called from the dispatcher */
int
-AddHost (ClientPtr client,
- int family,
- unsigned length, /* of bytes in pAddr */
- const void * pAddr)
+AddHost(ClientPtr client, int family, unsigned length, /* of bytes in pAddr */
+ const void *pAddr)
{
int rc, len;
rc = AuthorizedClient(client);
if (rc != Success)
- return rc;
+ return rc;
switch (family) {
case FamilyLocalHost:
- len = length;
- LocalHostEnabled = TRUE;
- break;
+ len = length;
+ LocalHostEnabled = TRUE;
+ break;
#ifdef SECURE_RPC
case FamilyNetname:
- len = length;
- SecureRPCInit ();
- break;
+ len = length;
+ SecureRPCInit();
+ break;
#endif
case FamilyInternet:
#if defined(IPv6) && defined(AF_INET6)
@@ -1244,64 +1209,57 @@ AddHost (ClientPtr client,
case FamilyDECnet:
case FamilyChaos:
case FamilyServerInterpreted:
- if ((len = CheckAddr (family, pAddr, length)) < 0)
- {
- client->errorValue = length;
- return BadValue;
- }
- break;
+ if ((len = CheckAddr(family, pAddr, length)) < 0) {
+ client->errorValue = length;
+ return BadValue;
+ }
+ break;
case FamilyLocal:
default:
- client->errorValue = family;
- return BadValue;
+ client->errorValue = family;
+ return BadValue;
}
- if (NewHost (family, pAddr, len, FALSE))
- return Success;
+ if (NewHost(family, pAddr, len, FALSE))
+ return Success;
return BadAlloc;
}
Bool
-ForEachHostInFamily (int family,
- Bool (*func)(
- unsigned char * /* addr */,
- short /* len */,
- pointer /* closure */),
- pointer closure)
+ForEachHostInFamily(int family, Bool (*func) (unsigned char * /* addr */ ,
+ short /* len */ ,
+ pointer /* closure */ ),
+ pointer closure)
{
- HOST *host;
+ HOST *host;
for (host = validhosts; host; host = host->next)
- if (family == host->family && func (host->addr, host->len, closure))
- return TRUE;
+ if (family == host->family && func(host->addr, host->len, closure))
+ return TRUE;
return FALSE;
}
/* Add a host to the access control list. This is the internal interface
* called when starting or resetting the server */
static Bool
-NewHost (int family,
- const void * addr,
- int len,
- int addingLocalHosts)
+NewHost(int family, const void *addr, int len, int addingLocalHosts)
{
register HOST *host;
- for (host = validhosts; host; host = host->next)
- {
- if (addrEqual (family, addr, len, host))
- return TRUE;
+ for (host = validhosts; host; host = host->next) {
+ if (addrEqual(family, addr, len, host))
+ return TRUE;
}
- if (!addingLocalHosts) { /* Fix for XFree86 bug #156 */
- for (host = selfhosts; host; host = host->next) {
- if (addrEqual (family, addr, len, host)) {
- host->requested = TRUE;
- break;
- }
- }
+ if (!addingLocalHosts) { /* Fix for XFree86 bug #156 */
+ for (host = selfhosts; host; host = host->next) {
+ if (addrEqual(family, addr, len, host)) {
+ host->requested = TRUE;
+ break;
+ }
+ }
}
- MakeHost(host,len)
- if (!host)
- return FALSE;
+ MakeHost(host, len)
+ if (!host)
+ return FALSE;
host->family = family;
host->len = len;
memcpy(host->addr, addr, len);
@@ -1313,27 +1271,24 @@ NewHost (int family,
/* Remove a host from the access control list */
int
-RemoveHost (
- ClientPtr client,
- int family,
- unsigned length, /* of bytes in pAddr */
- pointer pAddr)
+RemoveHost(ClientPtr client, int family, unsigned length, /* of bytes in pAddr */
+ pointer pAddr)
{
int rc, len;
- register HOST *host, **prev;
+ register HOST *host, **prev;
rc = AuthorizedClient(client);
if (rc != Success)
- return rc;
+ return rc;
switch (family) {
case FamilyLocalHost:
- len = length;
- LocalHostEnabled = FALSE;
- break;
+ len = length;
+ LocalHostEnabled = FALSE;
+ break;
#ifdef SECURE_RPC
case FamilyNetname:
- len = length;
- break;
+ len = length;
+ break;
#endif
case FamilyInternet:
#if defined(IPv6) && defined(AF_INET6)
@@ -1342,67 +1297,57 @@ RemoveHost (
case FamilyDECnet:
case FamilyChaos:
case FamilyServerInterpreted:
- if ((len = CheckAddr (family, pAddr, length)) < 0)
- {
- client->errorValue = length;
+ if ((len = CheckAddr(family, pAddr, length)) < 0) {
+ client->errorValue = length;
return BadValue;
- }
- break;
+ }
+ break;
case FamilyLocal:
default:
- client->errorValue = family;
+ client->errorValue = family;
return BadValue;
}
for (prev = &validhosts;
- (host = *prev) && (!addrEqual (family, pAddr, len, host));
- prev = &host->next)
- ;
- if (host)
- {
+ (host = *prev) && (!addrEqual(family, pAddr, len, host));
+ prev = &host->next);
+ if (host) {
*prev = host->next;
- FreeHost (host);
+ FreeHost(host);
}
return Success;
}
/* Get all hosts in the access control list */
int
-GetHosts (
- pointer *data,
- int *pnHosts,
- int *pLen,
- BOOL *pEnabled)
+GetHosts(pointer *data, int *pnHosts, int *pLen, BOOL * pEnabled)
{
- int len;
- register int n = 0;
+ int len;
+ register int n = 0;
register unsigned char *ptr;
- register HOST *host;
- int nHosts = 0;
+ register HOST *host;
+ int nHosts = 0;
*pEnabled = AccessEnabled ? EnableAccess : DisableAccess;
- for (host = validhosts; host; host = host->next)
- {
- nHosts++;
- n += pad_to_int32(host->len) + sizeof(xHostEntry);
+ for (host = validhosts; host; host = host->next) {
+ nHosts++;
+ n += pad_to_int32(host->len) + sizeof(xHostEntry);
}
- if (n)
- {
+ if (n) {
*data = ptr = malloc(n);
- if (!ptr)
- {
- return BadAlloc;
- }
- for (host = validhosts; host; host = host->next)
- {
- len = host->len;
- ((xHostEntry *)ptr)->family = host->family;
- ((xHostEntry *)ptr)->length = len;
- ptr += sizeof(xHostEntry);
- memcpy (ptr, host->addr, len);
- ptr += pad_to_int32(len);
+ if (!ptr) {
+ return BadAlloc;
+ }
+ for (host = validhosts; host; host = host->next) {
+ len = host->len;
+ ((xHostEntry *) ptr)->family = host->family;
+ ((xHostEntry *) ptr)->length = len;
+ ptr += sizeof(xHostEntry);
+ memcpy(ptr, host->addr, len);
+ ptr += pad_to_int32(len);
}
- } else {
- *data = NULL;
+ }
+ else {
+ *data = NULL;
}
*pnHosts = nHosts;
*pLen = n;
@@ -1411,37 +1356,32 @@ GetHosts (
/* Check for valid address family and length, and return address length. */
-/*ARGSUSED*/
-static int
-CheckAddr (
- int family,
- const void * pAddr,
- unsigned length)
+ /*ARGSUSED*/ static int
+CheckAddr(int family, const void *pAddr, unsigned length)
{
- int len;
+ int len;
- switch (family)
- {
+ switch (family) {
#if defined(TCPCONN) || defined(STREAMSCONN)
- case FamilyInternet:
- if (length == sizeof (struct in_addr))
- len = length;
- else
- len = -1;
+ case FamilyInternet:
+ if (length == sizeof(struct in_addr))
+ len = length;
+ else
+ len = -1;
break;
#if defined(IPv6) && defined(AF_INET6)
- case FamilyInternet6:
- if (length == sizeof (struct in6_addr))
- len = length;
- else
- len = -1;
+ case FamilyInternet6:
+ if (length == sizeof(struct in6_addr))
+ len = length;
+ else
+ len = -1;
break;
#endif
-#endif
- case FamilyServerInterpreted:
- len = siCheckAddr(pAddr, length);
- break;
- default:
+#endif
+ case FamilyServerInterpreted:
+ len = siCheckAddr(pAddr, length);
+ break;
+ default:
len = -1;
}
return len;
@@ -1451,65 +1391,55 @@ CheckAddr (
* Returns 1 if host is invalid, 0 if we've found it. */
int
-InvalidHost (
- register struct sockaddr *saddr,
- int len,
- ClientPtr client)
+InvalidHost(register struct sockaddr *saddr, int len, ClientPtr client)
{
- int family;
- pointer addr;
- register HOST *selfhost, *host;
+ int family;
+ pointer addr;
+ register HOST *selfhost, *host;
- if (!AccessEnabled) /* just let them in */
+ if (!AccessEnabled) /* just let them in */
return 0;
- family = ConvertAddr (saddr, &len, (pointer *)&addr);
+ family = ConvertAddr(saddr, &len, (pointer *) &addr);
if (family == -1)
return 1;
- if (family == FamilyLocal)
- {
- if (!LocalHostEnabled)
- {
- /*
- * check to see if any local address is enabled. This
- * implicitly enables local connections.
- */
- for (selfhost = selfhosts; selfhost; selfhost=selfhost->next)
- {
- for (host = validhosts; host; host=host->next)
- {
- if (addrEqual (selfhost->family, selfhost->addr,
- selfhost->len, host))
- return 0;
- }
- }
- } else
- return 0;
+ if (family == FamilyLocal) {
+ if (!LocalHostEnabled) {
+ /*
+ * check to see if any local address is enabled. This
+ * implicitly enables local connections.
+ */
+ for (selfhost = selfhosts; selfhost; selfhost = selfhost->next) {
+ for (host = validhosts; host; host = host->next) {
+ if (addrEqual(selfhost->family, selfhost->addr,
+ selfhost->len, host))
+ return 0;
+ }
+ }
+ }
+ else
+ return 0;
}
- for (host = validhosts; host; host = host->next)
- {
- if (host->family == FamilyServerInterpreted) {
- if (siAddrMatch (family, addr, len, host, client)) {
- return 0;
- }
- } else {
- if (addrEqual (family, addr, len, host))
- return 0;
- }
+ for (host = validhosts; host; host = host->next) {
+ if (host->family == FamilyServerInterpreted) {
+ if (siAddrMatch(family, addr, len, host, client)) {
+ return 0;
+ }
+ }
+ else {
+ if (addrEqual(family, addr, len, host))
+ return 0;
+ }
}
return 1;
}
static int
-ConvertAddr (
- register struct sockaddr *saddr,
- int *len,
- pointer *addr)
+ConvertAddr(register struct sockaddr *saddr, int *len, pointer *addr)
{
if (*len == 0)
return FamilyLocal;
- switch (saddr->sa_family)
- {
+ switch (saddr->sa_family) {
case AF_UNSPEC:
#if defined(UNIXCONN) || defined(LOCALCONN)
case AF_UNIX:
@@ -1518,25 +1448,27 @@ ConvertAddr (
#if defined(TCPCONN) || defined(STREAMSCONN)
case AF_INET:
#ifdef WIN32
- if (16777343 == *(long*)&((struct sockaddr_in *) saddr)->sin_addr)
+ if (16777343 == *(long *) &((struct sockaddr_in *) saddr)->sin_addr)
return FamilyLocal;
#endif
- *len = sizeof (struct in_addr);
+ *len = sizeof(struct in_addr);
*addr = (pointer) &(((struct sockaddr_in *) saddr)->sin_addr);
return FamilyInternet;
#if defined(IPv6) && defined(AF_INET6)
- case AF_INET6:
+ case AF_INET6:
{
- struct sockaddr_in6 *saddr6 = (struct sockaddr_in6 *) saddr;
- if (IN6_IS_ADDR_V4MAPPED(&(saddr6->sin6_addr))) {
- *len = sizeof (struct in_addr);
- *addr = (pointer) &(saddr6->sin6_addr.s6_addr[12]);
- return FamilyInternet;
- } else {
- *len = sizeof (struct in6_addr);
- *addr = (pointer) &(saddr6->sin6_addr);
- return FamilyInternet6;
- }
+ struct sockaddr_in6 *saddr6 = (struct sockaddr_in6 *) saddr;
+
+ if (IN6_IS_ADDR_V4MAPPED(&(saddr6->sin6_addr))) {
+ *len = sizeof(struct in_addr);
+ *addr = (pointer) &(saddr6->sin6_addr.s6_addr[12]);
+ return FamilyInternet;
+ }
+ else {
+ *len = sizeof(struct in6_addr);
+ *addr = (pointer) &(saddr6->sin6_addr);
+ return FamilyInternet6;
+ }
}
#endif
#endif
@@ -1546,13 +1478,12 @@ ConvertAddr (
}
int
-ChangeAccessControl(
- ClientPtr client,
- int fEnabled)
+ChangeAccessControl(ClientPtr client, int fEnabled)
{
int rc = AuthorizedClient(client);
+
if (rc != Success)
- return rc;
+ return rc;
AccessEnabled = fEnabled;
return Success;
}
@@ -1582,47 +1513,48 @@ GetAccessControl(void)
* future to enable loading additional host types, but that was not done for
* the initial implementation.
*/
-typedef Bool (*siAddrMatchFunc)(int family, pointer addr, int len,
- const char *siAddr, int siAddrlen, ClientPtr client, void *siTypePriv);
-typedef int (*siCheckAddrFunc)(const char *addrString, int length,
- void *siTypePriv);
+typedef Bool (*siAddrMatchFunc) (int family, pointer addr, int len,
+ const char *siAddr, int siAddrlen,
+ ClientPtr client, void *siTypePriv);
+typedef int (*siCheckAddrFunc) (const char *addrString, int length,
+ void *siTypePriv);
struct siType {
- struct siType * next;
- const char * typeName;
- siAddrMatchFunc addrMatch;
- siCheckAddrFunc checkAddr;
- void * typePriv; /* Private data for type routines */
+ struct siType *next;
+ const char *typeName;
+ siAddrMatchFunc addrMatch;
+ siCheckAddrFunc checkAddr;
+ void *typePriv; /* Private data for type routines */
};
static struct siType *siTypeList;
static int
siTypeAdd(const char *typeName, siAddrMatchFunc addrMatch,
- siCheckAddrFunc checkAddr, void *typePriv)
+ siCheckAddrFunc checkAddr, void *typePriv)
{
struct siType *s, *p;
if ((typeName == NULL) || (addrMatch == NULL) || (checkAddr == NULL))
- return BadValue;
-
- for (s = siTypeList, p = NULL; s != NULL ; p = s, s = s->next) {
- if (strcmp(typeName, s->typeName) == 0) {
- s->addrMatch = addrMatch;
- s->checkAddr = checkAddr;
- s->typePriv = typePriv;
- return Success;
- }
+ return BadValue;
+
+ for (s = siTypeList, p = NULL; s != NULL; p = s, s = s->next) {
+ if (strcmp(typeName, s->typeName) == 0) {
+ s->addrMatch = addrMatch;
+ s->checkAddr = checkAddr;
+ s->typePriv = typePriv;
+ return Success;
+ }
}
s = malloc(sizeof(struct siType));
if (s == NULL)
- return BadAlloc;
+ return BadAlloc;
if (p == NULL)
- siTypeList = s;
+ siTypeList = s;
else
- p->next = s;
+ p->next = s;
s->next = NULL;
s->typeName = typeName;
@@ -1633,8 +1565,8 @@ siTypeAdd(const char *typeName, siAddrMatchFunc addrMatch,
}
/* Checks to see if a host matches a server-interpreted host entry */
-static Bool
-siAddrMatch(int family, pointer addr, int len, HOST *host, ClientPtr client)
+static Bool
+siAddrMatch(int family, pointer addr, int len, HOST * host, ClientPtr client)
{
Bool matches = FALSE;
struct siType *s;
@@ -1643,19 +1575,19 @@ siAddrMatch(int family, pointer addr, int len, HOST *host, ClientPtr client)
valueString = (const char *) memchr(host->addr, '\0', host->len);
if (valueString != NULL) {
- for (s = siTypeList; s != NULL ; s = s->next) {
- if (strcmp((char *) host->addr, s->typeName) == 0) {
- addrlen = host->len - (strlen((char *)host->addr) + 1);
- matches = s->addrMatch(family, addr, len,
- valueString + 1, addrlen, client, s->typePriv);
- break;
- }
- }
+ for (s = siTypeList; s != NULL; s = s->next) {
+ if (strcmp((char *) host->addr, s->typeName) == 0) {
+ addrlen = host->len - (strlen((char *) host->addr) + 1);
+ matches = s->addrMatch(family, addr, len,
+ valueString + 1, addrlen, client,
+ s->typePriv);
+ break;
+ }
+ }
#ifdef FAMILY_SI_DEBUG
- ErrorF(
- "Xserver: siAddrMatch(): type = %s, value = %*.*s -- %s\n",
- host->addr, addrlen, addrlen, valueString + 1,
- (matches) ? "accepted" : "rejected");
+ ErrorF("Xserver: siAddrMatch(): type = %s, value = %*.*s -- %s\n",
+ host->addr, addrlen, addrlen, valueString + 1,
+ (matches) ? "accepted" : "rejected");
#endif
}
return matches;
@@ -1673,43 +1605,44 @@ siCheckAddr(const char *addrString, int length)
to separate the address type from the address value. */
valueString = (const char *) memchr(addrString, '\0', length);
if (valueString != NULL) {
- /* Make sure the first string is a recognized address type,
- * and the second string is a valid address of that type.
- */
- typelen = strlen(addrString) + 1;
- addrlen = length - typelen;
-
- for (s = siTypeList; s != NULL ; s = s->next) {
- if (strcmp(addrString, s->typeName) == 0) {
- len = s->checkAddr(valueString + 1, addrlen, s->typePriv);
- if (len >= 0) {
- len += typelen;
- }
- break;
- }
- }
+ /* Make sure the first string is a recognized address type,
+ * and the second string is a valid address of that type.
+ */
+ typelen = strlen(addrString) + 1;
+ addrlen = length - typelen;
+
+ for (s = siTypeList; s != NULL; s = s->next) {
+ if (strcmp(addrString, s->typeName) == 0) {
+ len = s->checkAddr(valueString + 1, addrlen, s->typePriv);
+ if (len >= 0) {
+ len += typelen;
+ }
+ break;
+ }
+ }
#ifdef FAMILY_SI_DEBUG
- {
- const char *resultMsg;
-
- if (s == NULL) {
- resultMsg = "type not registered";
- } else {
- if (len == -1)
- resultMsg = "rejected";
- else
- resultMsg = "accepted";
- }
-
- ErrorF("Xserver: siCheckAddr(): type = %s, value = %*.*s, len = %d -- %s\n",
- addrString, addrlen, addrlen, valueString + 1, len, resultMsg);
- }
+ {
+ const char *resultMsg;
+
+ if (s == NULL) {
+ resultMsg = "type not registered";
+ }
+ else {
+ if (len == -1)
+ resultMsg = "rejected";
+ else
+ resultMsg = "accepted";
+ }
+
+ ErrorF
+ ("Xserver: siCheckAddr(): type = %s, value = %*.*s, len = %d -- %s\n",
+ addrString, addrlen, addrlen, valueString + 1, len, resultMsg);
+ }
#endif
}
return len;
}
-
/***
* Hostname server-interpreted host type
*
@@ -1724,18 +1657,19 @@ siCheckAddr(const char *addrString, int length)
*/
#ifdef NI_MAXHOST
-# define SI_HOSTNAME_MAXLEN NI_MAXHOST
+#define SI_HOSTNAME_MAXLEN NI_MAXHOST
+#else
+#ifdef MAXHOSTNAMELEN
+#define SI_HOSTNAME_MAXLEN MAXHOSTNAMELEN
#else
-# ifdef MAXHOSTNAMELEN
-# define SI_HOSTNAME_MAXLEN MAXHOSTNAMELEN
-# else
-# define SI_HOSTNAME_MAXLEN 256
-# endif
+#define SI_HOSTNAME_MAXLEN 256
+#endif
#endif
-static Bool
+static Bool
siHostnameAddrMatch(int family, pointer addr, int len,
- const char *siAddr, int siAddrLen, ClientPtr client, void *typePriv)
+ const char *siAddr, int siAddrLen, ClientPtr client,
+ void *typePriv)
{
Bool res = FALSE;
@@ -1745,74 +1679,74 @@ siHostnameAddrMatch(int family, pointer addr, int len,
*/
#if defined(IPv6) && defined(AF_INET6)
if ((family == FamilyInternet) || (family == FamilyInternet6)) {
- char hostname[SI_HOSTNAME_MAXLEN];
- struct addrinfo *addresses;
- struct addrinfo *a;
- int f, hostaddrlen;
- pointer hostaddr;
-
- if (siAddrLen >= sizeof(hostname))
- return FALSE;
-
- strlcpy(hostname, siAddr, siAddrLen + 1);
-
- if (getaddrinfo(hostname, NULL, NULL, &addresses) == 0) {
- for (a = addresses ; a != NULL ; a = a->ai_next) {
- hostaddrlen = a->ai_addrlen;
- f = ConvertAddr(a->ai_addr,&hostaddrlen,&hostaddr);
- if ((f == family) && (len == hostaddrlen) &&
- (memcmp (addr, hostaddr, len) == 0) ) {
- res = TRUE;
- break;
- }
- }
- freeaddrinfo(addresses);
- }
+ char hostname[SI_HOSTNAME_MAXLEN];
+ struct addrinfo *addresses;
+ struct addrinfo *a;
+ int f, hostaddrlen;
+ pointer hostaddr;
+
+ if (siAddrLen >= sizeof(hostname))
+ return FALSE;
+
+ strlcpy(hostname, siAddr, siAddrLen + 1);
+
+ if (getaddrinfo(hostname, NULL, NULL, &addresses) == 0) {
+ for (a = addresses; a != NULL; a = a->ai_next) {
+ hostaddrlen = a->ai_addrlen;
+ f = ConvertAddr(a->ai_addr, &hostaddrlen, &hostaddr);
+ if ((f == family) && (len == hostaddrlen) &&
+ (memcmp(addr, hostaddr, len) == 0)) {
+ res = TRUE;
+ break;
+ }
+ }
+ freeaddrinfo(addresses);
+ }
}
-#else /* IPv6 not supported, use gethostbyname instead for IPv4 */
+#else /* IPv6 not supported, use gethostbyname instead for IPv4 */
if (family == FamilyInternet) {
- register struct hostent *hp;
+ register struct hostent *hp;
+
#ifdef XTHREADS_NEEDS_BYNAMEPARAMS
- _Xgethostbynameparams hparams;
+ _Xgethostbynameparams hparams;
#endif
- char hostname[SI_HOSTNAME_MAXLEN];
- int f, hostaddrlen;
- pointer hostaddr;
- const char **addrlist;
+ char hostname[SI_HOSTNAME_MAXLEN];
+ int f, hostaddrlen;
+ pointer hostaddr;
+ const char **addrlist;
- if (siAddrLen >= sizeof(hostname))
- return FALSE;
+ if (siAddrLen >= sizeof(hostname))
+ return FALSE;
- strlcpy(hostname, siAddr, siAddrLen + 1);
+ strlcpy(hostname, siAddr, siAddrLen + 1);
- if ((hp = _XGethostbyname(hostname, hparams)) != NULL) {
-#ifdef h_addr /* new 4.3bsd version of gethostent */
- /* iterate over the addresses */
- for (addrlist = hp->h_addr_list; *addrlist; addrlist++)
+ if ((hp = _XGethostbyname(hostname, hparams)) != NULL) {
+#ifdef h_addr /* new 4.3bsd version of gethostent */
+ /* iterate over the addresses */
+ for (addrlist = hp->h_addr_list; *addrlist; addrlist++)
#else
- addrlist = &hp->h_addr;
-#endif
- {
- struct sockaddr_in sin;
-
- sin.sin_family = hp->h_addrtype;
- memcpy ( &(sin.sin_addr), *addrlist, hp->h_length);
- hostaddrlen = sizeof(sin);
- f = ConvertAddr ((struct sockaddr *)&sin,
- &hostaddrlen, &hostaddr);
- if ((f == family) && (len == hostaddrlen) &&
- (memcmp (addr, hostaddr, len) == 0) ) {
- res = TRUE;
- break;
- }
- }
+ addrlist = &hp->h_addr;
+#endif
+ {
+ struct sockaddr_in sin;
+
+ sin.sin_family = hp->h_addrtype;
+ memcpy(&(sin.sin_addr), *addrlist, hp->h_length);
+ hostaddrlen = sizeof(sin);
+ f = ConvertAddr((struct sockaddr *) &sin,
+ &hostaddrlen, &hostaddr);
+ if ((f == family) && (len == hostaddrlen) &&
+ (memcmp(addr, hostaddr, len) == 0)) {
+ res = TRUE;
+ break;
+ }
+ }
}
}
#endif
return res;
}
-
static int
siHostnameCheckAddr(const char *valueString, int length, void *typePriv)
{
@@ -1824,38 +1758,44 @@ siHostnameCheckAddr(const char *valueString, int length, void *typePriv)
int i;
Bool dotAllowed = FALSE;
Bool dashAllowed = FALSE;
-
+
if ((length <= 0) || (length >= SI_HOSTNAME_MAXLEN)) {
- len = -1;
- } else {
- for (i = 0; i < length; i++) {
- char c = valueString[i];
-
- if (c == 0x2E) { /* '.' */
- if (dotAllowed == FALSE) {
- len = -1;
- break;
- } else {
- dotAllowed = FALSE;
- dashAllowed = FALSE;
- }
- } else if (c == 0x2D) { /* '-' */
- if (dashAllowed == FALSE) {
- len = -1;
- break;
- } else {
- dotAllowed = FALSE;
- }
- } else if (((c >= 0x30) && (c <= 0x3A)) /* 0-9 */ ||
- ((c >= 0x61) && (c <= 0x7A)) /* a-z */ ||
- ((c >= 0x41) && (c <= 0x5A)) /* A-Z */) {
- dotAllowed = TRUE;
- dashAllowed = TRUE;
- } else { /* Invalid character */
- len = -1;
- break;
- }
- }
+ len = -1;
+ }
+ else {
+ for (i = 0; i < length; i++) {
+ char c = valueString[i];
+
+ if (c == 0x2E) { /* '.' */
+ if (dotAllowed == FALSE) {
+ len = -1;
+ break;
+ }
+ else {
+ dotAllowed = FALSE;
+ dashAllowed = FALSE;
+ }
+ }
+ else if (c == 0x2D) { /* '-' */
+ if (dashAllowed == FALSE) {
+ len = -1;
+ break;
+ }
+ else {
+ dotAllowed = FALSE;
+ }
+ }
+ else if (((c >= 0x30) && (c <= 0x3A)) /* 0-9 */ ||
+ ((c >= 0x61) && (c <= 0x7A)) /* a-z */ ||
+ ((c >= 0x41) && (c <= 0x5A)) /* A-Z */ ) {
+ dotAllowed = TRUE;
+ dashAllowed = TRUE;
+ }
+ else { /* Invalid character */
+ len = -1;
+ break;
+ }
+ }
}
return len;
}
@@ -1875,28 +1815,30 @@ siHostnameCheckAddr(const char *valueString, int length, void *typePriv)
*/
#define SI_IPv6_MAXLEN INET6_ADDRSTRLEN
-static Bool
+static Bool
siIPv6AddrMatch(int family, pointer addr, int len,
- const char *siAddr, int siAddrlen, ClientPtr client, void *typePriv)
+ const char *siAddr, int siAddrlen, ClientPtr client,
+ void *typePriv)
{
struct in6_addr addr6;
char addrbuf[SI_IPv6_MAXLEN];
if ((family != FamilyInternet6) || (len != sizeof(addr6)))
- return FALSE;
+ return FALSE;
memcpy(addrbuf, siAddr, siAddrlen);
addrbuf[siAddrlen] = '\0';
if (inet_pton(AF_INET6, addrbuf, &addr6) != 1) {
- perror("inet_pton");
- return FALSE;
+ perror("inet_pton");
+ return FALSE;
}
if (memcmp(addr, &addr6, len) == 0) {
- return TRUE;
- } else {
- return FALSE;
+ return TRUE;
+ }
+ else {
+ return FALSE;
}
}
@@ -1907,29 +1849,32 @@ siIPv6CheckAddr(const char *addrString, int length, void *typePriv)
/* Minimum length is 3 (smallest legal address is "::1") */
if (length < 3) {
- /* Address is too short! */
- len = -1;
- } else if (length >= SI_IPv6_MAXLEN) {
- /* Address is too long! */
- len = -1;
- } else {
- /* Assume inet_pton is sufficient validation */
- struct in6_addr addr6;
- char addrbuf[SI_IPv6_MAXLEN];
-
- memcpy(addrbuf, addrString, length);
- addrbuf[length] = '\0';
-
- if (inet_pton(AF_INET6, addrbuf, &addr6) != 1) {
- perror("inet_pton");
- len = -1;
- } else {
- len = length;
- }
+ /* Address is too short! */
+ len = -1;
+ }
+ else if (length >= SI_IPv6_MAXLEN) {
+ /* Address is too long! */
+ len = -1;
+ }
+ else {
+ /* Assume inet_pton is sufficient validation */
+ struct in6_addr addr6;
+ char addrbuf[SI_IPv6_MAXLEN];
+
+ memcpy(addrbuf, addrString, length);
+ addrbuf[length] = '\0';
+
+ if (inet_pton(AF_INET6, addrbuf, &addr6) != 1) {
+ perror("inet_pton");
+ len = -1;
+ }
+ else {
+ len = length;
+ }
}
return len;
}
-#endif /* IPv6 */
+#endif /* IPv6 */
#if !defined(NO_LOCAL_CLIENT_CRED)
/***
@@ -1958,85 +1903,90 @@ siLocalCredGetId(const char *addr, int len, siLocalCredPrivPtr lcPriv, int *id)
char *addrbuf = malloc(len + 1);
if (addrbuf == NULL) {
- return FALSE;
+ return FALSE;
}
memcpy(addrbuf, addr, len);
addrbuf[len] = '\0';
- if (addr[0] == '#') { /* numeric id */
- char *cp;
- errno = 0;
- *id = strtol(addrbuf + 1, &cp, 0);
- if ((errno == 0) && (cp != (addrbuf+1))) {
- parsedOK = TRUE;
- }
- } else { /* non-numeric name */
- if (lcPriv->credType == LOCAL_USER) {
- struct passwd *pw = getpwnam(addrbuf);
-
- if (pw != NULL) {
- *id = (int) pw->pw_uid;
- parsedOK = TRUE;
- }
- } else { /* group */
- struct group *gr = getgrnam(addrbuf);
-
- if (gr != NULL) {
- *id = (int) gr->gr_gid;
- parsedOK = TRUE;
- }
- }
+ if (addr[0] == '#') { /* numeric id */
+ char *cp;
+
+ errno = 0;
+ *id = strtol(addrbuf + 1, &cp, 0);
+ if ((errno == 0) && (cp != (addrbuf + 1))) {
+ parsedOK = TRUE;
+ }
+ }
+ else { /* non-numeric name */
+ if (lcPriv->credType == LOCAL_USER) {
+ struct passwd *pw = getpwnam(addrbuf);
+
+ if (pw != NULL) {
+ *id = (int) pw->pw_uid;
+ parsedOK = TRUE;
+ }
+ }
+ else { /* group */
+ struct group *gr = getgrnam(addrbuf);
+
+ if (gr != NULL) {
+ *id = (int) gr->gr_gid;
+ parsedOK = TRUE;
+ }
+ }
}
free(addrbuf);
return parsedOK;
}
-static Bool
+static Bool
siLocalCredAddrMatch(int family, pointer addr, int len,
- const char *siAddr, int siAddrlen, ClientPtr client, void *typePriv)
+ const char *siAddr, int siAddrlen, ClientPtr client,
+ void *typePriv)
{
int siAddrId;
LocalClientCredRec *lcc;
siLocalCredPrivPtr lcPriv = (siLocalCredPrivPtr) typePriv;
if (GetLocalClientCreds(client, &lcc) == -1) {
- return FALSE;
+ return FALSE;
}
-#ifdef HAVE_GETZONEID /* Ensure process is in the same zone */
+#ifdef HAVE_GETZONEID /* Ensure process is in the same zone */
if ((lcc->fieldsSet & LCC_ZID_SET) && (lcc->zoneid != getzoneid())) {
- FreeLocalClientCreds(lcc);
- return FALSE;
+ FreeLocalClientCreds(lcc);
+ return FALSE;
}
#endif
if (siLocalCredGetId(siAddr, siAddrlen, lcPriv, &siAddrId) == FALSE) {
- FreeLocalClientCreds(lcc);
- return FALSE;
+ FreeLocalClientCreds(lcc);
+ return FALSE;
}
if (lcPriv->credType == LOCAL_USER) {
- if ((lcc->fieldsSet & LCC_UID_SET) && (lcc->euid == siAddrId)) {
- FreeLocalClientCreds(lcc);
- return TRUE;
- }
- } else {
- if ((lcc->fieldsSet & LCC_GID_SET) && (lcc->egid == siAddrId)) {
- FreeLocalClientCreds(lcc);
- return TRUE;
- }
- if (lcc->pSuppGids != NULL) {
- int i;
-
- for (i = 0 ; i < lcc->nSuppGids; i++) {
- if (lcc->pSuppGids[i] == siAddrId) {
- FreeLocalClientCreds(lcc);
- return TRUE;
- }
- }
- }
+ if ((lcc->fieldsSet & LCC_UID_SET) && (lcc->euid == siAddrId)) {
+ FreeLocalClientCreds(lcc);
+ return TRUE;
+ }
+ }
+ else {
+ if ((lcc->fieldsSet & LCC_GID_SET) && (lcc->egid == siAddrId)) {
+ FreeLocalClientCreds(lcc);
+ return TRUE;
+ }
+ if (lcc->pSuppGids != NULL) {
+ int i;
+
+ for (i = 0; i < lcc->nSuppGids; i++) {
+ if (lcc->pSuppGids[i] == siAddrId) {
+ FreeLocalClientCreds(lcc);
+ return TRUE;
+ }
+ }
+ }
}
FreeLocalClientCreds(lcc);
return FALSE;
@@ -2048,13 +1998,13 @@ siLocalCredCheckAddr(const char *addrString, int length, void *typePriv)
int len = length;
int id;
- if (siLocalCredGetId(addrString, length,
- (siLocalCredPrivPtr)typePriv, &id) == FALSE) {
- len = -1;
+ if (siLocalCredGetId(addrString, length,
+ (siLocalCredPrivPtr) typePriv, &id) == FALSE) {
+ len = -1;
}
return len;
}
-#endif /* localuser */
+#endif /* localuser */
static void
siTypesInitialize(void)
@@ -2064,9 +2014,9 @@ siTypesInitialize(void)
siTypeAdd("ipv6", siIPv6AddrMatch, siIPv6CheckAddr, NULL);
#endif
#if !defined(NO_LOCAL_CLIENT_CRED)
- siTypeAdd("localuser", siLocalCredAddrMatch, siLocalCredCheckAddr,
- &siLocalUserPriv);
- siTypeAdd("localgroup", siLocalCredAddrMatch, siLocalCredCheckAddr,
- &siLocalGroupPriv);
+ siTypeAdd("localuser", siLocalCredAddrMatch, siLocalCredCheckAddr,
+ &siLocalUserPriv);
+ siTypeAdd("localgroup", siLocalCredAddrMatch, siLocalCredCheckAddr,
+ &siLocalGroupPriv);
#endif
}