merge latest (4.3.99.16) from XFree86 (vendor) branch

This commit is contained in:
Kaleb Keithley
2003-11-26 22:49:07 +00:00
parent c57959ad6a
commit 0097b6fe2d
796 changed files with 58012 additions and 26524 deletions

View File

@@ -45,7 +45,7 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.
******************************************************************/
/* $XFree86: xc/programs/Xserver/os/connection.c,v 3.56 2002/05/31 18:46:05 dawes Exp $ */
/* $XFree86: xc/programs/Xserver/os/connection.c,v 3.65 2003/10/30 21:21:10 herrb Exp $ */
/*****************************************************************
* Stuff to create connections --- OS dependent
*
@@ -72,6 +72,7 @@ SOFTWARE.
#include <errno.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#ifndef WIN32
#if defined(Lynx)
@@ -123,6 +124,7 @@ extern __const__ int _nfiles;
# endif
# endif
# endif
# include <arpa/inet.h>
#endif
#ifdef AMTCPCONN
@@ -155,6 +157,7 @@ extern __const__ int _nfiles;
#include "colormapst.h"
#include "propertyst.h"
#include "lbxserve.h"
#include "osdep.h"
#endif
#ifdef X_NOT_POSIX
@@ -185,6 +188,9 @@ Bool RunFromSmartParent; /* send SIGUSR1 to parent process */
Bool PartialNetwork; /* continue even if unable to bind all addrs */
char *protNoListen; /* don't listen on this protocol */
static Pid_t ParentProcess;
#ifdef __UNIXOS2__
Pid_t GetPPID(Pid_t pid);
#endif
static Bool debug_conns = FALSE;
@@ -210,32 +216,18 @@ XtransConnInfo *ListenTransConns = NULL;
int *ListenTransFds = NULL;
int ListenTransCount;
static void ErrorConnMax(
#if NeedFunctionPrototypes
XtransConnInfo /* trans_conn */
#endif
);
static void ErrorConnMax(XtransConnInfo /* trans_conn */);
#ifndef LBX
static
#endif
void CloseDownFileDescriptor(
#if NeedFunctionPrototypes
#ifdef LBX
ClientPtr client
#else
register OsCommPtr /*oc*/
#endif
#endif
OsCommPtr /*oc*/
);
#endif
#ifdef LBX
extern int LbxFlushClient();
#endif /* LBX */
static XtransConnInfo
lookup_trans_conn (fd)
int fd;
lookup_trans_conn (int fd)
{
if (ListenTransFds)
{
@@ -251,7 +243,7 @@ lookup_trans_conn (fd)
/* Set MaxClients and lastfdesc, and allocate ConnectionTranslation */
void
InitConnectionLimits()
InitConnectionLimits(void)
{
lastfdesc = -1;
@@ -312,11 +304,12 @@ InitConnectionLimits()
*****************/
void
CreateWellKnownSockets()
CreateWellKnownSockets(void)
{
int i;
int partial;
char port[20];
OsSigHandlerPtr handler;
FD_ZERO(&AllSockets);
FD_ZERO(&AllClients);
@@ -392,9 +385,20 @@ CreateWellKnownSockets()
* useful
*/
#if !defined(WIN32)
if (OsSignal (SIGUSR1, SIG_IGN) == SIG_IGN)
handler = OsSignal (SIGUSR1, SIG_IGN);
if ( handler == SIG_IGN)
RunFromSmartParent = TRUE;
OsSignal(SIGUSR1, handler);
ParentProcess = getppid ();
#ifdef __UNIXOS2__
/*
* fg030505: under OS/2, xinit is not the parent process but
* the "grant parent" process of the server because execvpe()
* presents us an additional process number;
* GetPPID(pid) is part of libemxfix
*/
ParentProcess = GetPPID (ParentProcess);
#endif /* __UNIXOS2__ */
if (RunFromSmartParent) {
if (ParentProcess > 1) {
kill (ParentProcess, SIGUSR1);
@@ -407,7 +411,7 @@ CreateWellKnownSockets()
}
void
ResetWellKnownSockets ()
ResetWellKnownSockets (void)
{
int i;
@@ -468,7 +472,7 @@ ResetWellKnownSockets ()
}
void
CloseWellKnownConnections()
CloseWellKnownConnections(void)
{
int i;
@@ -477,14 +481,9 @@ CloseWellKnownConnections()
}
static void
AuthAudit (client, letin, saddr, len, proto_n, auth_proto, auth_id)
ClientPtr client;
Bool letin;
struct sockaddr *saddr;
int len;
unsigned short proto_n;
char *auth_proto;
int auth_id;
AuthAudit (ClientPtr client, Bool letin,
struct sockaddr *saddr, int len,
unsigned int proto_n, char *auth_proto, int auth_id)
{
char addr[128];
char *out = addr;
@@ -506,10 +505,18 @@ AuthAudit (client, letin, saddr, len, proto_n, auth_proto, auth_id)
break;
#if defined(TCPCONN) || defined(STREAMSCONN) || defined(MNX_TCPCONN)
case AF_INET:
sprintf(out, "IP %s port %d",
inet_ntoa(((struct sockaddr_in *) saddr)->sin_addr),
ntohs(((struct sockaddr_in *) saddr)->sin_port));
sprintf(out, "IP %s",
inet_ntoa(((struct sockaddr_in *) saddr)->sin_addr));
break;
#if defined(IPv6) && defined(AF_INET6)
case AF_INET6: {
char ipaddr[INET6_ADDRSTRLEN];
inet_ntop(AF_INET6, &((struct sockaddr_in6 *) saddr)->sin6_addr,
ipaddr, sizeof(ipaddr));
sprintf(out, "IP %s", ipaddr);
}
break;
#endif
#endif
#ifdef DNETCONN
case AF_DECnet:
@@ -530,17 +537,18 @@ AuthAudit (client, letin, saddr, len, proto_n, auth_proto, auth_id)
default:
strcpy(out, "unknown address");
}
if (letin)
AuditF("client %d connected from %s\n", client->index, addr);
else
AuditF("client %d rejected from %s\n", client->index, addr);
if (proto_n)
AuditF(" Auth name: %.*s ID: %d\n", proto_n, auth_proto, auth_id);
AuditF("client %d %s from %s\n Auth name: %.*s ID: %d\n",
client->index, letin ? "connected" : "rejected", addr,
(int)proto_n, auth_proto, auth_id);
else
AuditF("client %d %s from %s\n",
client->index, letin ? "connected" : "rejected", addr);
}
XID
AuthorizationIDOfClient(client)
ClientPtr client;
AuthorizationIDOfClient(ClientPtr client)
{
if (client->osPrivate)
return ((OsCommPtr)client->osPrivate)->auth_id;
@@ -569,12 +577,11 @@ AuthorizationIDOfClient(client)
*****************************************************************/
char *
ClientAuthorized(client, proto_n, auth_proto, string_n, auth_string)
ClientPtr client;
char *auth_proto, *auth_string;
unsigned int proto_n, string_n;
ClientAuthorized(ClientPtr client,
unsigned int proto_n, char *auth_proto,
unsigned int string_n, char *auth_string)
{
register OsCommPtr priv;
OsCommPtr priv;
Xtransaddr *from = NULL;
int family;
int fromlen;
@@ -729,17 +736,15 @@ ClientAuthorized(client, proto_n, auth_proto, string_n, auth_string)
static ClientPtr
#ifdef LBX
AllocNewConnection (trans_conn, fd, conn_time, Flush, Close, proxy)
AllocNewConnection (XtransConnInfo trans_conn, int fd, CARD32 conn_time,
int (*Flush)(
ClientPtr /*who*/, OsCommPtr /*oc*/,
char */*extraBuf*/, int /*extraCount*/),
void (*Close)(
ClientPtr /*client*/),
LbxProxyPtr proxy)
#else
AllocNewConnection (trans_conn, fd, conn_time)
#endif
XtransConnInfo trans_conn;
int fd;
CARD32 conn_time;
#ifdef LBX
int (*Flush)();
void (*Close)();
LbxProxyPtr proxy;
AllocNewConnection (XtransConnInfo trans_conn, int fd, CARD32 conn_time)
#endif
{
OsCommPtr oc;
@@ -804,8 +809,7 @@ AllocNewConnection (trans_conn, fd, conn_time)
#ifdef LBX
int
ClientConnectionNumber (client)
ClientPtr client;
ClientConnectionNumber (ClientPtr client)
{
OsCommPtr oc = (OsCommPtr) client->osPrivate;
@@ -813,9 +817,7 @@ ClientConnectionNumber (client)
}
ClientPtr
AllocLbxClientConnection (client, proxy)
ClientPtr client;
LbxProxyPtr proxy;
AllocLbxClientConnection (ClientPtr client, LbxProxyPtr proxy)
{
OsCommPtr oc = (OsCommPtr) client->osPrivate;
@@ -824,9 +826,7 @@ AllocLbxClientConnection (client, proxy)
}
void
LbxProxyConnection (client, proxy)
ClientPtr client;
LbxProxyPtr proxy;
LbxProxyConnection (ClientPtr client, LbxProxyPtr proxy)
{
OsCommPtr oc = (OsCommPtr) client->osPrivate;
@@ -848,9 +848,7 @@ LbxProxyConnection (client, proxy)
/*ARGSUSED*/
Bool
EstablishNewConnections(clientUnused, closure)
ClientPtr clientUnused;
pointer closure;
EstablishNewConnections(ClientPtr clientUnused, pointer closure)
{
fd_set readyconnections; /* set of listeners that are ready */
int curconn; /* fd of listener that's ready */
@@ -940,10 +938,9 @@ EstablishNewConnections(clientUnused, closure)
************/
static void
ErrorConnMax(trans_conn)
XtransConnInfo trans_conn;
ErrorConnMax(XtransConnInfo trans_conn)
{
register int fd = _XSERVTransGetConnectionNumber (trans_conn);
int fd = _XSERVTransGetConnectionNumber (trans_conn);
xConnSetupPrefix csp;
char pad[3];
struct iovec iov[3];
@@ -992,16 +989,14 @@ XtransConnInfo trans_conn;
#ifdef LBX
void
CloseDownFileDescriptor(client)
ClientPtr client;
CloseDownFileDescriptor(ClientPtr client)
#else
static void
CloseDownFileDescriptor(oc)
register OsCommPtr oc;
CloseDownFileDescriptor(OsCommPtr oc)
#endif
{
#ifdef LBX
register OsCommPtr oc = (OsCommPtr) client->osPrivate;
OsCommPtr oc = (OsCommPtr) client->osPrivate;
#endif
int connection = oc->fd;
@@ -1040,13 +1035,13 @@ CloseDownFileDescriptor(oc)
*****************/
void
CheckConnections()
CheckConnections(void)
{
#ifndef WIN32
fd_mask mask;
#endif
fd_set tmask;
register int curclient, curoff;
int curclient, curoff;
int i;
struct timeval notime;
int r;
@@ -1094,8 +1089,7 @@ CheckConnections()
*****************/
void
CloseDownConnection(client)
ClientPtr client;
CloseDownConnection(ClientPtr client)
{
OsCommPtr oc = (OsCommPtr)client->osPrivate;
@@ -1117,8 +1111,7 @@ CloseDownConnection(client)
}
void
AddEnabledDevice(fd)
int fd;
AddEnabledDevice(int fd)
{
FD_SET(fd, &EnabledDevices);
FD_SET(fd, &AllSockets);
@@ -1127,8 +1120,7 @@ AddEnabledDevice(fd)
}
void
RemoveEnabledDevice(fd)
int fd;
RemoveEnabledDevice(int fd)
{
FD_CLR(fd, &EnabledDevices);
FD_CLR(fd, &AllSockets);
@@ -1147,8 +1139,7 @@ RemoveEnabledDevice(fd)
*****************/
void
OnlyListenToOneClient(client)
ClientPtr client;
OnlyListenToOneClient(ClientPtr client)
{
OsCommPtr oc = (OsCommPtr)client->osPrivate;
int connection = oc->fd;
@@ -1180,7 +1171,7 @@ OnlyListenToOneClient(client)
****************/
void
ListenToAllClients()
ListenToAllClients(void)
{
if (GrabInProgress)
{
@@ -1198,8 +1189,7 @@ ListenToAllClients()
****************/
void
IgnoreClient (client)
ClientPtr client;
IgnoreClient (ClientPtr client)
{
OsCommPtr oc = (OsCommPtr)client->osPrivate;
int connection = oc->fd;
@@ -1243,8 +1233,7 @@ IgnoreClient (client)
****************/
void
AttendClient (client)
ClientPtr client;
AttendClient (ClientPtr client)
{
OsCommPtr oc = (OsCommPtr)client->osPrivate;
int connection = oc->fd;
@@ -1277,8 +1266,7 @@ AttendClient (client)
/* make client impervious to grabs; assume only executing client calls this */
void
MakeClientGrabImpervious(client)
ClientPtr client;
MakeClientGrabImpervious(ClientPtr client)
{
OsCommPtr oc = (OsCommPtr)client->osPrivate;
int connection = oc->fd;
@@ -1297,8 +1285,7 @@ MakeClientGrabImpervious(client)
/* make client pervious to grabs; assume only executing client calls this */
void
MakeClientGrabPervious(client)
ClientPtr client;
MakeClientGrabPervious(ClientPtr client)
{
OsCommPtr oc = (OsCommPtr)client->osPrivate;
int connection = oc->fd;
@@ -1325,61 +1312,3 @@ MakeClientGrabPervious(client)
}
}
#ifdef AIXV3
static fd_set pendingActiveClients;
static BOOL reallyGrabbed;
/****************
* DontListenToAnybody:
* Don't listen to requests from any clients. Continue to handle new
* connections, but don't take any protocol requests from anybody.
* We have to take care if there is already a grab in progress, though.
* Undone by PayAttentionToClientsAgain. We also have to be careful
* not to accept any more input from the currently dispatched client.
* we do this be telling dispatch it is time to yield.
* We call this when the server loses access to the glass
* (user hot-keys away). This looks like a grab by the
* server itself, but gets a little tricky if there is already
* a grab in progress.
******************/
void
DontListenToAnybody()
{
if (!GrabInProgress)
{
XFD_COPYSET(&ClientsWithInput, &SavedClientsWithInput);
XFD_COPYSET(&AllSockets, &SavedAllSockets);
XFD_COPYSET(&AllClients, &SavedAllClients);
GrabInProgress = TRUE;
reallyGrabbed = FALSE;
}
else
{
XFD_COPYSET(&AllClients, &pendingActiveClients);
reallyGrabbed = TRUE;
}
FD_ZERO(&ClientsWithInput);
XFD_UNSET(&AllSockets, &AllClients);
FD_ZERO(&AllClients);
isItTimeToYield = TRUE;
}
void
PayAttentionToClientsAgain()
{
if (reallyGrabbed)
{
XFD_ORSET(&AllSockets, &AllSockets, &pendingActiveClients);
XFD_ORSET(&AllClients, &AllClients, &pendingActiveClients);
}
else
{
ListenToAllClients();
}
reallyGrabbed = FALSE;
}
#endif