diff options
author | marha <marha@users.sourceforge.net> | 2014-01-26 20:19:23 +0100 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2014-01-26 20:19:23 +0100 |
commit | 5f455179ae4b279a82d99a7a3dabe61f58c42ad6 (patch) | |
tree | fdecec022cf1b8b782b90a64c14e374fa6d400cb /xorg-server/os | |
parent | 78d84bd03c744b0ed420c450dd2807904ccaef21 (diff) | |
parent | 30af30b78075159fce477ae99cc72540133714d0 (diff) | |
download | vcxsrv-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.c | 11 | ||||
-rw-r--r-- | xorg-server/os/log.c | 2 | ||||
-rw-r--r-- | xorg-server/os/utils.c | 27 | ||||
-rw-r--r-- | xorg-server/os/xdmauth.c | 18 | ||||
-rwxr-xr-x[-rw-r--r--] | xorg-server/os/xdmcp.c | 34 |
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_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], |