summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hw/xwin/InitOutput.c2
-rw-r--r--hw/xwin/win.h3
-rw-r--r--hw/xwin/winauth.c103
-rw-r--r--hw/xwin/winclipboardthread.c19
-rw-r--r--hw/xwin/winmultiwindowwm.c19
5 files changed, 94 insertions, 52 deletions
diff --git a/hw/xwin/InitOutput.c b/hw/xwin/InitOutput.c
index 45dccce18..a33056d38 100644
--- a/hw/xwin/InitOutput.c
+++ b/hw/xwin/InitOutput.c
@@ -1022,11 +1022,9 @@ InitOutput (ScreenInfo *screenInfo, int argc, char *argv[])
#if defined(XWIN_CLIPBOARD) || defined(XWIN_MULTIWINDOW)
-#if defined(XCSECURITY)
/* Generate a cookie used by internal clients for authorization */
if (g_fXdmcpEnabled || g_fAuthEnabled)
winGenerateAuthorization ();
-#endif
/* Perform some one time initialization */
if (1 == serverGeneration)
diff --git a/hw/xwin/win.h b/hw/xwin/win.h
index 9009df29b..9ab8ed976 100644
--- a/hw/xwin/win.h
+++ b/hw/xwin/win.h
@@ -766,10 +766,9 @@ winAllocateCmapPrivates (ColormapPtr pCmap);
*/
#if defined(XWIN_CLIPBOARD) || defined(XWIN_MULTIWINDOW)
-# if defined(XCSECURITY)
Bool
winGenerateAuthorization (void);
-# endif
+void winSetAuthorization(void);
#endif
diff --git a/hw/xwin/winauth.c b/hw/xwin/winauth.c
index b57a35abf..fcd1872da 100644
--- a/hw/xwin/winauth.c
+++ b/hw/xwin/winauth.c
@@ -1,7 +1,3 @@
-#ifdef HAVE_XWIN_CONFIG_H
-#include <xwin-config.h>
-#endif
-#if defined(XCSECURITY)
/*
*Copyright (C) 2003-2004 Harold L Hunt II All Rights Reserved.
*
@@ -32,12 +28,14 @@
* Authors: Harold L Hunt II
*/
+#ifdef HAVE_XWIN_CONFIG_H
+#include <xwin-config.h>
+#endif
+
#include "win.h"
/* Includes for authorization */
-#include <X11/Xauth.h>
#include "securitysrv.h"
-#include <X11/extensions/securstr.h>
/*
@@ -48,13 +46,76 @@
/*
- * Globals
+ * Locals
+ */
+
+static XID g_authId = 0;
+static unsigned int g_uiAuthDataLen = 0;
+static char *g_pAuthData = NULL;
+
+/*
+ * Code to generate a MIT-MAGIC-COOKIE-1, copied from under XCSECURITY
*/
-XID g_authId = 0;
-unsigned int g_uiAuthDataLen = 0;
-char *g_pAuthData = NULL;
+#ifndef XCSECURITY
+static
+void
+GenerateRandomData (int len, char *buf)
+{
+ int fd;
+
+ fd = open("/dev/urandom", O_RDONLY);
+ read(fd, buf, len);
+ close(fd);
+}
+
+
+static char cookie[16]; /* 128 bits */
+
+XID
+static MitGenerateCookie (
+ unsigned data_length,
+ char *data,
+ XID id,
+ unsigned *data_length_return,
+ char **data_return)
+{
+ int i = 0;
+ int status;
+
+ while (data_length--)
+ {
+ cookie[i++] += *data++;
+ if (i >= sizeof (cookie)) i = 0;
+ }
+ GenerateRandomData(sizeof (cookie), cookie);
+ status = MitAddCookie(sizeof (cookie), cookie, id);
+ if (!status)
+ {
+ id = -1;
+ }
+ else
+ {
+ *data_return = cookie;
+ *data_length_return = sizeof (cookie);
+ }
+ return id;
+}
+static
+XID
+GenerateAuthorization(
+ unsigned name_length,
+ char *name,
+ unsigned data_length,
+ char *data,
+ unsigned *data_length_return,
+ char **data_return)
+{
+ return MitGenerateCookie(data_length, data,
+ FakeClientID(0), data_length_return, data_return);
+}
+#endif
/*
* Generate authorization cookie for internal server clients
@@ -78,15 +139,15 @@ winGenerateAuthorization ()
ErrorF ("winGenerateAuthorization - GenerateAuthorization failed\n");
goto auth_bailout;
}
-#if 0
+
else
{
- ErrorF ("winGenerateAuthorization - GenerateAuthorization success!\n"
+ winDebug("winGenerateAuthorization - GenerateAuthorization success!\n"
"AuthDataLen: %d AuthData: %s\n",
g_uiAuthDataLen, g_pAuthData);
}
-#endif
-
+
+#ifdef XCSECURITY
/* Allocate structure for additional auth information */
pAuth = (SecurityAuthorizationPtr)
xalloc (sizeof (SecurityAuthorizationRec));
@@ -119,7 +180,8 @@ winGenerateAuthorization ()
/* Don't free the auth data, since it is still used internally */
pAuth = NULL;
-
+#endif
+
return TRUE;
auth_bailout:
@@ -128,4 +190,13 @@ winGenerateAuthorization ()
return FALSE;
}
-#endif
+
+/* Use our generated cookie for authentication */
+void
+winSetAuthorization(void)
+{
+ XSetAuthorization (AUTH_NAME,
+ strlen (AUTH_NAME),
+ g_pAuthData,
+ g_uiAuthDataLen);
+}
diff --git a/hw/xwin/winclipboardthread.c b/hw/xwin/winclipboardthread.c
index 8eb825fa8..e5b2dc1e0 100644
--- a/hw/xwin/winclipboardthread.c
+++ b/hw/xwin/winclipboardthread.c
@@ -38,27 +38,15 @@
#ifdef __CYGWIN__
#include <errno.h>
#endif
-#include "X11/Xauth.h"
#include "misc.h"
/*
- * Constants
- */
-
-#define AUTH_NAME "MIT-MAGIC-COOKIE-1"
-
-
-/*
* References to external symbols
*/
extern Bool g_fUnicodeClipboard;
extern unsigned long serverGeneration;
-#if defined(XCSECURITY)
-extern unsigned int g_uiAuthDataLen;
-extern char *g_pAuthData;
-#endif
extern Bool g_fClipboardStarted;
extern HWND g_hwndClipboard;
extern void *g_pClipboardDisplay;
@@ -154,13 +142,8 @@ winClipboardProc (void *pvNotUsed)
pthread_exit (NULL);
}
-#if defined(XCSECURITY)
/* Use our generated cookie for authentication */
- XSetAuthorization (AUTH_NAME,
- strlen (AUTH_NAME),
- g_pAuthData,
- g_uiAuthDataLen);
-#endif
+ winSetAuthorization();
/* Set error handler */
XSetErrorHandler (winClipboardErrorHandler);
diff --git a/hw/xwin/winmultiwindowwm.c b/hw/xwin/winmultiwindowwm.c
index 7cdac0c10..27f5e3278 100644
--- a/hw/xwin/winmultiwindowwm.c
+++ b/hw/xwin/winmultiwindowwm.c
@@ -90,8 +90,6 @@ extern void winUpdateRgnMultiWindow(WindowPtr pWin);
#endif
#define WIN_JMP_OKAY 0
#define WIN_JMP_ERROR_IO 2
-#define AUTH_NAME "MIT-MAGIC-COOKIE-1"
-
/*
* Local structures
@@ -140,11 +138,6 @@ typedef struct _XMsgProcArgRec {
extern char *display;
extern void ErrorF (const char* /*f*/, ...);
-#if defined(XCSECURITY)
-extern unsigned int g_uiAuthDataLen;
-extern char *g_pAuthData;
-#endif
-
/*
* Prototypes for local functions
@@ -948,6 +941,9 @@ winMultiWindowXMsgProc (void *pArg)
/* Print the display connection string */
ErrorF ("winMultiWindowXMsgProc - DISPLAY=%s\n", pszDisplay);
+
+ /* Use our generated cookie for authentication */
+ winSetAuthorization();
/* Initialize retry count */
iRetries = 0;
@@ -1323,14 +1319,9 @@ winInitMultiWindowWM (WMInfoPtr pWMInfo, WMProcArgPtr pProcArg)
/* Print the display connection string */
ErrorF ("winInitMultiWindowWM - DISPLAY=%s\n", pszDisplay);
-#if defined(XCSECURITY)
/* Use our generated cookie for authentication */
- XSetAuthorization (AUTH_NAME,
- strlen (AUTH_NAME),
- g_pAuthData,
- g_uiAuthDataLen);
-#endif
-
+ winSetAuthorization();
+
/* Open the X display */
do
{