diff options
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 | ||||
-rw-r--r-- | xorg-server/os/xdmcp.c | 28 |
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_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], |