aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/os
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2014-01-26 20:19:23 +0100
committermarha <marha@users.sourceforge.net>2014-01-26 20:19:23 +0100
commit5f455179ae4b279a82d99a7a3dabe61f58c42ad6 (patch)
treefdecec022cf1b8b782b90a64c14e374fa6d400cb /xorg-server/os
parent78d84bd03c744b0ed420c450dd2807904ccaef21 (diff)
parent30af30b78075159fce477ae99cc72540133714d0 (diff)
downloadvcxsrv-5f455179ae4b279a82d99a7a3dabe61f58c42ad6.tar.gz
vcxsrv-5f455179ae4b279a82d99a7a3dabe61f58c42ad6.tar.bz2
vcxsrv-5f455179ae4b279a82d99a7a3dabe61f58c42ad6.zip
Merge remote-tracking branch 'origin/released'
* origin/released: xserver randrproto libxtrans fontconfig libxcb xcb-proto mesa git update 26 Jan 2014 Conflicts: X11/xtrans/Xtrans.c xorg-server/dix/dispatch.c xorg-server/os/xdmcp.c
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
-rwxr-xr-x[-rw-r--r--]xorg-server/os/xdmcp.c34
5 files changed, 62 insertions, 30 deletions
diff --git a/xorg-server/os/io.c b/xorg-server/os/io.c
index 1303f3ab1..ae3a9a786 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 b2fcae1b3..97b93632b 100644
--- a/xorg-server/os/log.c
+++ b/xorg-server/os/log.c
@@ -201,6 +201,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");
@@ -211,6 +212,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 aeb276fa4..d73ef1903 100644
--- a/xorg-server/os/utils.c
+++ b/xorg-server/os/utils.c
@@ -619,6 +619,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')
@@ -629,6 +633,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 3ce2b9f6b..bc7dcb3df 100644..100755
--- a/xorg-server/os/xdmcp.c
+++ b/xorg-server/os/xdmcp.c
@@ -674,15 +674,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;
@@ -702,23 +702,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();
@@ -735,12 +735,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();
}
@@ -784,7 +784,7 @@ void XdmcpHostSelected(int HostIdx)
/*ARGSUSED*/ static void
XdmcpAddHost(const struct sockaddr *from,
int fromlen,
- ARRAY8Ptr AuthenticationName, ARRAY8Ptr hostname, ARRAY8Ptr status)
+ ARRAY8Ptr auth_name, ARRAY8Ptr hostname, ARRAY8Ptr status)
{
#ifdef _MSC_VER
char szHostName[100];
@@ -809,11 +809,11 @@ XdmcpAddHost(const struct sockaddr *from,
g_Hosts[HostIdx].from=realloc(g_Hosts[HostIdx].from,g_Hosts[HostIdx].fromlen);
memcpy(g_Hosts[HostIdx].from,from,fromlen);
- g_Hosts[HostIdx].AuthenticationName.length=AuthenticationName->length;
- g_Hosts[HostIdx].AuthenticationName.data=realloc(g_Hosts[HostIdx].AuthenticationName.data,AuthenticationName->length);
- memcpy(g_Hosts[HostIdx].AuthenticationName.data,AuthenticationName->data,AuthenticationName->length);
+ g_Hosts[HostIdx].AuthenticationName.length=auth_name->length;
+ g_Hosts[HostIdx].AuthenticationName.data=realloc(g_Hosts[HostIdx].AuthenticationName.data,auth_name->length);
+ memcpy(g_Hosts[HostIdx].AuthenticationName.data,auth_name->data,auth_name->length);
#else
- XdmcpSelectHost(from, fromlen, AuthenticationName);
+ XdmcpSelectHost(from, fromlen, auth_name);
#endif
}
@@ -1148,8 +1148,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],