aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/os
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server/os')
-rw-r--r--xorg-server/os/io.c11
-rw-r--r--xorg-server/os/log.c2
-rw-r--r--xorg-server/os/utils.c27
-rw-r--r--xorg-server/os/xdmauth.c18
-rw-r--r--xorg-server/os/xdmcp.c28
5 files changed, 59 insertions, 27 deletions
diff --git a/xorg-server/os/io.c b/xorg-server/os/io.c
index cf5e8f933..8181a8639 100644
--- a/xorg-server/os/io.c
+++ b/xorg-server/os/io.c
@@ -102,12 +102,17 @@ typedef struct _connectionOutput {
static ConnectionInputPtr AllocateInputBuffer(void);
static ConnectionOutputPtr AllocateOutputBuffer(void);
-/* check for both EAGAIN and EWOULDBLOCK, because some supposedly POSIX
+/* If EAGAIN and EWOULDBLOCK are distinct errno values, then we check errno
+ * for both EAGAIN and EWOULDBLOCK, because some supposedly POSIX
* systems are broken and return EWOULDBLOCK when they should return EAGAIN
*/
#ifndef WIN32
-#define ETEST(err) (err == EAGAIN || err == EWOULDBLOCK)
-#else /* WIN32 The socket errorcodes differ from the normal errors */
+# if (EAGAIN != EWOULDBLOCK)
+# define ETEST(err) (err == EAGAIN || err == EWOULDBLOCK)
+# else
+# define ETEST(err) (err == EAGAIN)
+# endif
+#else /* WIN32 The socket errorcodes differ from the normal errors */
#define ETEST(err) (err == EAGAIN || err == WSAEWOULDBLOCK)
#endif
diff --git a/xorg-server/os/log.c b/xorg-server/os/log.c
index 792b79e93..8deb81040 100644
--- a/xorg-server/os/log.c
+++ b/xorg-server/os/log.c
@@ -195,6 +195,7 @@ LogInit(const char *fname, const char *backup)
char *logFileName = NULL;
if (fname && *fname) {
+#pragma GCC diagnostic ignored "-Wformat-nonliteral"
if (asprintf(&logFileName, fname, display) == -1)
FatalError("Cannot allocate space for the log file name\n");
@@ -205,6 +206,7 @@ LogInit(const char *fname, const char *backup)
char *suffix;
char *oldLog;
+#pragma GCC diagnostic ignored "-Wformat-nonliteral"
if ((asprintf(&suffix, backup, display) == -1) ||
(asprintf(&oldLog, "%s%s", logFileName, suffix) == -1))
FatalError("Cannot allocate space for the log file name\n");
diff --git a/xorg-server/os/utils.c b/xorg-server/os/utils.c
index 6f83a089b..dc18a67b1 100644
--- a/xorg-server/os/utils.c
+++ b/xorg-server/os/utils.c
@@ -600,6 +600,10 @@ UseMsg(void)
static int
VerifyDisplayName(const char *d)
{
+ int i;
+ int period_found = FALSE;
+ int after_period = 0;
+
if (d == (char *) 0)
return 0; /* null */
if (*d == '\0')
@@ -610,6 +614,29 @@ VerifyDisplayName(const char *d)
return 0; /* must not equal "." or ".." */
if (strchr(d, '/') != (char *) 0)
return 0; /* very important!!! */
+
+ /* Since we run atoi() on the display later, only allow
+ for digits, or exception of :0.0 and similar (two decimal points max)
+ */
+ for (i = 0; i < strlen(d); i++) {
+ if (!isdigit(d[i])) {
+ if (d[i] != '.' || period_found)
+ return 0;
+ period_found = TRUE;
+ } else if (period_found)
+ after_period++;
+
+ if (after_period > 2)
+ return 0;
+ }
+
+ /* don't allow for :0. */
+ if (period_found && after_period == 0)
+ return 0;
+
+ if (atol(d) > INT_MAX)
+ return 0;
+
return 1;
}
diff --git a/xorg-server/os/xdmauth.c b/xorg-server/os/xdmauth.c
index 28584d2e8..f11cbb997 100644
--- a/xorg-server/os/xdmauth.c
+++ b/xorg-server/os/xdmauth.c
@@ -62,7 +62,7 @@ static XdmAuthKeyRec privateKey;
static char XdmAuthenticationName[] = "XDM-AUTHENTICATION-1";
#define XdmAuthenticationNameLen (sizeof XdmAuthenticationName - 1)
-static XdmAuthKeyRec rho;
+static XdmAuthKeyRec global_rho;
static Bool
XdmAuthenticationValidator(ARRAY8Ptr privateData, ARRAY8Ptr incomingData,
@@ -77,7 +77,7 @@ XdmAuthenticationValidator(ARRAY8Ptr privateData, ARRAY8Ptr incomingData,
return FALSE;
incoming = (XdmAuthKeyPtr) incomingData->data;
XdmcpDecrementKey(incoming);
- return XdmcpCompareKeys(incoming, &rho);
+ return XdmcpCompareKeys(incoming, &global_rho);
}
return FALSE;
}
@@ -90,7 +90,7 @@ XdmAuthenticationGenerator(ARRAY8Ptr privateData, ARRAY8Ptr outgoingData,
outgoingData->data = 0;
if (packet_type == REQUEST) {
if (XdmcpAllocARRAY8(outgoingData, 8))
- XdmcpWrap((unsigned char *) &rho, (unsigned char *) &privateKey,
+ XdmcpWrap((unsigned char *) &global_rho, (unsigned char *) &privateKey,
outgoingData->data, 8);
}
return TRUE;
@@ -150,10 +150,10 @@ XdmAuthenticationInit(const char *cookie, int cookie_len)
cookie_len = 7;
memmove(privateKey.data + 1, cookie, cookie_len);
}
- XdmcpGenerateKey(&rho);
+ XdmcpGenerateKey(&global_rho);
XdmcpRegisterAuthentication(XdmAuthenticationName, XdmAuthenticationNameLen,
- (char *) &rho,
- sizeof(rho),
+ (char *) &global_rho,
+ sizeof(global_rho),
(ValidatorFunc) XdmAuthenticationValidator,
(GeneratorFunc) XdmAuthenticationGenerator,
(AddAuthorFunc) XdmAuthenticationAddAuth);
@@ -328,7 +328,7 @@ XdmAddCookie(unsigned short data_length, const char *data, XID id)
if (authFromXDMCP) {
/* R5 xdm sent bogus authorization data in the accept packet,
* but we can recover */
- rho_bits = rho.data;
+ rho_bits = global_rho.data;
key_bits = (unsigned char *) data;
key_bits[0] = '\0';
}
@@ -341,7 +341,7 @@ XdmAddCookie(unsigned short data_length, const char *data, XID id)
break;
#ifdef XDMCP
case 8: /* auth from XDMCP is 8 bytes long */
- rho_bits = rho.data;
+ rho_bits = global_rho.data;
key_bits = (unsigned char *) data;
break;
#endif
@@ -466,7 +466,7 @@ XdmRemoveCookie(unsigned short data_length, const char *data)
break;
#ifdef XDMCP
case 8:
- rho_bits = &rho;
+ rho_bits = &global_rho;
key_bits = (XdmAuthKeyPtr) data;
break;
#endif
diff --git a/xorg-server/os/xdmcp.c b/xorg-server/os/xdmcp.c
index fd8ae588a..99616d94b 100644
--- a/xorg-server/os/xdmcp.c
+++ b/xorg-server/os/xdmcp.c
@@ -641,15 +641,15 @@ XdmcpCloseDisplay(int sock)
XdmcpBlockHandler(void *data, /* unused */
struct timeval **wt, void *pReadmask)
{
- fd_set *LastSelectMask = (fd_set *) pReadmask;
+ fd_set *last_select_mask = (fd_set *) pReadmask;
CARD32 millisToGo;
if (state == XDM_OFF)
return;
- FD_SET(xdmcpSocket, LastSelectMask);
+ FD_SET(xdmcpSocket, last_select_mask);
#if defined(IPv6) && defined(AF_INET6)
if (xdmcpSocket6 >= 0)
- FD_SET(xdmcpSocket6, LastSelectMask);
+ FD_SET(xdmcpSocket6, last_select_mask);
#endif
if (timeOutTime == 0)
return;
@@ -669,23 +669,23 @@ XdmcpBlockHandler(void *data, /* unused */
XdmcpWakeupHandler(void *data, /* unused */
int i, void *pReadmask)
{
- fd_set *LastSelectMask = (fd_set *) pReadmask;
+ fd_set *last_select_mask = (fd_set *) pReadmask;
fd_set devicesReadable;
if (state == XDM_OFF)
return;
if (i > 0) {
- if (FD_ISSET(xdmcpSocket, LastSelectMask)) {
+ if (FD_ISSET(xdmcpSocket, last_select_mask)) {
receive_packet(xdmcpSocket);
- FD_CLR(xdmcpSocket, LastSelectMask);
+ FD_CLR(xdmcpSocket, last_select_mask);
}
#if defined(IPv6) && defined(AF_INET6)
- if (xdmcpSocket6 >= 0 && FD_ISSET(xdmcpSocket6, LastSelectMask)) {
+ if (xdmcpSocket6 >= 0 && FD_ISSET(xdmcpSocket6, last_select_mask)) {
receive_packet(xdmcpSocket6);
- FD_CLR(xdmcpSocket6, LastSelectMask);
+ FD_CLR(xdmcpSocket6, last_select_mask);
}
#endif
- XFD_ANDSET(&devicesReadable, LastSelectMask, &EnabledDevices);
+ XFD_ANDSET(&devicesReadable, last_select_mask, &EnabledDevices);
if (XFD_ANYSET(&devicesReadable)) {
if (state == XDM_AWAIT_USER_INPUT)
restart();
@@ -712,12 +712,12 @@ XdmcpWakeupHandler(void *data, /* unused */
static void
XdmcpSelectHost(const struct sockaddr *host_sockaddr,
- int host_len, ARRAY8Ptr AuthenticationName)
+ int host_len, ARRAY8Ptr auth_name)
{
state = XDM_START_CONNECTION;
memmove(&req_sockaddr, host_sockaddr, host_len);
req_socklen = host_len;
- XdmcpSetAuthentication(AuthenticationName);
+ XdmcpSetAuthentication(auth_name);
send_packet();
}
@@ -730,9 +730,9 @@ XdmcpSelectHost(const struct sockaddr *host_sockaddr,
/*ARGSUSED*/ static void
XdmcpAddHost(const struct sockaddr *from,
int fromlen,
- ARRAY8Ptr AuthenticationName, ARRAY8Ptr hostname, ARRAY8Ptr status)
+ ARRAY8Ptr auth_name, ARRAY8Ptr hostname, ARRAY8Ptr status)
{
- XdmcpSelectHost(from, fromlen, AuthenticationName);
+ XdmcpSelectHost(from, fromlen, auth_name);
}
/*
@@ -1058,8 +1058,6 @@ send_query_msg(void)
XdmcpWriteHeader(&buffer, &header);
XdmcpWriteARRAYofARRAY8(&buffer, &AuthenticationNames);
if (broadcast) {
- int i;
-
for (i = 0; i < NumBroadcastAddresses; i++)
XdmcpFlush(xdmcpSocket, &buffer,
(XdmcpNetaddr) &BroadcastAddresses[i],