Index: xc/config/cf/Imake.tmpl diff -u xc/config/cf/Imake.tmpl:3.139 xc/config/cf/Imake.tmpl:3.139.2.1 --- xc/config/cf/Imake.tmpl:3.139 Tue Jan 28 17:06:08 2003 +++ xc/config/cf/Imake.tmpl Sun Feb 8 20:58:52 2004 @@ -5,7 +5,7 @@ XCOMM XCOMM XCOMM -XCOMM $XFree86: xc/config/cf/Imake.tmpl,v 3.139 2003/01/28 22:06:08 alanh Exp $ +XCOMM $XFree86: xc/config/cf/Imake.tmpl,v 3.139.2.1 2004/02/09 01:58:52 dawes Exp $ XCOMM ---------------------------------------------------------------------- /* @@ -450,6 +450,9 @@ #ifndef NoStrstr #define NoStrstr NO #endif +#ifndef HasShadowPasswd +#define HasShadowPasswd NO +#endif /* byte-order defaults */ #ifndef ByteOrder #if defined(VaxArchitecture) Index: xc/config/cf/NetBSD.cf diff -u xc/config/cf/NetBSD.cf:3.108 xc/config/cf/NetBSD.cf:3.108.2.2 --- xc/config/cf/NetBSD.cf:3.108 Sat Dec 14 17:36:03 2002 +++ xc/config/cf/NetBSD.cf Sat Jan 3 15:42:30 2004 @@ -2,7 +2,7 @@ -XCOMM platform: $XFree86: xc/config/cf/NetBSD.cf,v 3.108 2002/12/14 22:36:03 dawes Exp $ +XCOMM platform: $XFree86: xc/config/cf/NetBSD.cf,v 3.108.2.2 2004/01/03 20:42:30 herrb Exp $ #ifndef OSName @@ -648,3 +648,11 @@ #ifndef UseSeparateConfDir #define UseSeparateConfDir NO /* We don't want appdefs in "/etc/X11". */ #endif + +#if defined(NetBSDArchitecture) && \ + ((OSMajorVersion > 1) || \ + (OSMajorVersion == 1 && OSMinorVersion > 3)) +#define HasDevRandom YES +#define RandomDeviceFile /dev/urandom +#endif + Index: xc/config/cf/OpenBSD.cf diff -u xc/config/cf/OpenBSD.cf:3.79 xc/config/cf/OpenBSD.cf:3.79.2.1 --- xc/config/cf/OpenBSD.cf:3.79 Sun Jan 12 12:03:23 2003 +++ xc/config/cf/OpenBSD.cf Wed Sep 17 01:58:15 2003 @@ -1,4 +1,4 @@ -XCOMM platform: $XFree86: xc/config/cf/OpenBSD.cf,v 3.79 2003/01/12 17:03:23 herrb Exp $ +XCOMM platform: $XFree86: xc/config/cf/OpenBSD.cf,v 3.79.2.1 2003/09/17 05:58:15 herrb Exp $ XCOMM #ifndef OSName @@ -58,6 +58,8 @@ #define HasUsableFileMmap YES #define HasShadowPasswd NO +#define HasArc4Random YES + #define HasNCurses YES #define NCursesLibName -lcurses #if defined(TermcapLibrary) Index: xc/config/cf/X11.tmpl diff -u xc/config/cf/X11.tmpl:1.196.2.1 xc/config/cf/X11.tmpl:1.196.2.3 --- xc/config/cf/X11.tmpl:1.196.2.1 Thu Mar 27 06:43:07 2003 +++ xc/config/cf/X11.tmpl Wed Oct 8 13:56:30 2003 @@ -5,7 +5,7 @@ XCOMM XCOMM XCOMM -XCOMM $XFree86: xc/config/cf/X11.tmpl,v 1.196.2.1 2003/03/27 11:43:07 alanh Exp $ +XCOMM $XFree86: xc/config/cf/X11.tmpl,v 1.196.2.3 2003/10/08 17:56:30 eich Exp $ /*************************************************************************** * * @@ -72,9 +72,11 @@ /* * X-specific things */ -#if CrossCompiling -# if defined UseInstalled && !defined UseInstalledOnCrossCompile +#if CrossCompiling && !defined(UseInstalledOnCrossCompile) +# if defined(UseInstalled) # define UseInstalledOnCrossCompile YES +# else +# define UseInstalledOnCrossCompile NO # endif #endif @@ -1143,6 +1145,34 @@ # endif #endif +#ifndef HasDevRandom +#define HasDevRandom NO +#endif + +#ifndef HasArc4Random +#define HasArc4Random NO +#endif + +#ifndef RandomDefines +# if HasDevRandom +# ifndef RandomDeviceFile +# define RandomDeviceFile /dev/random +# endif +# ifndef ExtraRandomDefines +# ifdef PollDevRandom /* Set if can poll() /dev/random to avoid blocking */ +# define ExtraRandomDefines -DPOLL_DEV_RANDOM +# else +# define ExtraRandomDefines /**/ +# endif +# endif +# define RandomDefines -DDEV_RANDOM=\"RandomDeviceFile\" ExtraRandomDefines +# elif HasArc4Random +# define RandomDefines -DARC4_RANDOM +# else +# define RandomDefines /**/ +# endif +#endif + #ifndef ServerXdmcpDefines #define ServerXdmcpDefines -DXDMCP #endif Index: xc/config/cf/darwin.cf diff -u xc/config/cf/darwin.cf:1.34 xc/config/cf/darwin.cf:1.34.2.1 --- xc/config/cf/darwin.cf:1.34 Tue Dec 3 23:40:15 2002 +++ xc/config/cf/darwin.cf Wed Sep 17 01:58:15 2003 @@ -1,4 +1,4 @@ -XCOMM platform: $XFree86: xc/config/cf/darwin.cf,v 1.34 2002/12/04 04:40:15 torrey Exp $ +XCOMM platform: $XFree86: xc/config/cf/darwin.cf,v 1.34.2.1 2003/09/17 05:58:15 herrb Exp $ /* Darwin / Mac OS X configuration by John Carmack */ @@ -31,6 +31,7 @@ #define HasShadowPasswd NO #define HasUsableFileMmap YES #define HasZlib YES +#define HasArc4Random YES #ifndef HasShm # define HasShm YES #endif Index: xc/config/cf/sun.cf diff -u xc/config/cf/sun.cf:3.67 xc/config/cf/sun.cf:3.67.2.1 --- xc/config/cf/sun.cf:3.67 Fri Nov 22 17:55:56 2002 +++ xc/config/cf/sun.cf Wed Sep 17 01:58:15 2003 @@ -3,7 +3,7 @@ -XCOMM platform: $XFree86: xc/config/cf/sun.cf,v 3.67 2002/11/22 22:55:56 tsi Exp $ +XCOMM platform: $XFree86: xc/config/cf/sun.cf,v 3.67.2.1 2003/09/17 05:58:15 herrb Exp $ #ifndef OSName # define OSName DefaultOSName @@ -302,6 +302,10 @@ #define HasSecureRPC YES #define SetTtyGroup YES #define HasPutenv YES +#if (OSMajorVersion > 5) || ((OSMajorVersion == 5) && (OSMinorVersion >= 8)) +#define HasDevRandom YES /* /dev/random is in Solaris 8 patches */ +#define PollDevRandom YES /* /dev/random is poll()able on Solaris */ +#endif #if (OSMajorVersion > 5) || ((OSMajorVersion == 5) && (OSMinorVersion >= 9)) # define HasIssetugid YES #endif @@ -406,7 +410,7 @@ # endif # else /* OSMajorVersion >= 5*/ # ifndef DefaultCCOptions -# define DefaultCCOptions -Xa +# define DefaultCCOptions -Xa -v # endif # endif # endif Index: xc/include/extensions/Imakefile diff -u xc/include/extensions/Imakefile:3.53 xc/include/extensions/Imakefile:3.53.2.1 --- xc/include/extensions/Imakefile:3.53 Mon Dec 16 11:18:49 2002 +++ xc/include/extensions/Imakefile Sat May 24 18:22:03 2003 @@ -3,7 +3,7 @@ -XCOMM $XFree86: xc/include/extensions/Imakefile,v 3.53 2002/12/16 16:18:49 dawes Exp $ +XCOMM $XFree86: xc/include/extensions/Imakefile,v 3.53.2.1 2003/05/24 22:22:03 sven Exp $ #if BuildScreenSaverExt || BuildScreenSaverLibrary SCREENSAVERHEADERS = saver.h saverproto.h scrnsaver.h @@ -100,6 +100,8 @@ InstallDriverSDKNonExecFile(xf86dgastr.h,$(DRIVERSDKINCLUDEDIR)/extensions) InstallDriverSDKNonExecFile(xf86rush.h,$(DRIVERSDKINCLUDEDIR)) InstallDriverSDKNonExecFile(xf86rushstr.h,$(DRIVERSDKINCLUDEDIR)) +InstallDriverSDKNonExecFile(renderproto.h,$(DRIVERSDKINCLUDEDIR)) +InstallDriverSDKNonExecFile(XvMC.h,$(DRIVERSDKINCLUDEDIR)) InstallDriverSDKNonExecFile(Xv.h,$(DRIVERSDKINCLUDEDIR)/extensions) InstallDriverSDKNonExecFile(Xvlib.h,$(DRIVERSDKINCLUDEDIR)/extensions) InstallDriverSDKNonExecFile(Xv.h,$(DRIVERSDKINCLUDEDIR)/X11/extensions) Index: xc/lib/FS/FSFontInfo.c diff -u xc/lib/FS/FSFontInfo.c:1.2 xc/lib/FS/FSFontInfo.c:1.2.4.2 --- xc/lib/FS/FSFontInfo.c:1.2 Fri Dec 14 14:53:32 2001 +++ xc/lib/FS/FSFontInfo.c Mon Sep 1 17:05:35 2003 @@ -65,7 +65,7 @@ long nbytes; int i, j; - int size = 0; + size_t size = 0; FSXFontInfoHeader **fhdr = (FSXFontInfoHeader **) 0; FSPropInfo **pi = (FSPropInfo **) 0; FSPropOffset **po = (FSPropOffset **) 0; @@ -123,8 +123,14 @@ if (reply.nameLength == 0) /* got last reply in version 1 */ break; if ((i + reply.nReplies) >= size) { + + if (reply.nReplies > SIZE_MAX - i - 1) + goto badmem; size = i + reply.nReplies + 1; + if (size > SIZE_MAX / sizeof(char *)) + goto badmem; + if (fhdr) { FSXFontInfoHeader **tmp_fhdr = (FSXFontInfoHeader **) FSrealloc((char *) fhdr, @@ -237,6 +243,9 @@ pi[i]->num_offsets = local_pi.num_offsets; pi[i]->data_len = local_pi.data_len; + if (pi[i]->num_offsets > SIZE_MAX / sizeof(FSPropOffset)) + goto badmem; + po[i] = (FSPropOffset *) FSmalloc(pi[i]->num_offsets * sizeof(FSPropOffset)); if (!po[i]) { @@ -282,6 +291,10 @@ nbytes = pi[i]->data_len + reply.nameLength; _FSEatData(svr, (unsigned long) (((nbytes+3)&~3) - nbytes)); } + /* avoid integer overflow */ + if (i > INT_MAX - 1) { + goto badmem; + } } *info = fhdr; *count = i; Index: xc/lib/FS/FSFtNames.c diff -u xc/lib/FS/FSFtNames.c:1.2 xc/lib/FS/FSFtNames.c:1.2.4.3 --- xc/lib/FS/FSFtNames.c:1.2 Fri Dec 14 14:53:32 2001 +++ xc/lib/FS/FSFtNames.c Thu Sep 25 16:58:39 2003 @@ -78,7 +78,8 @@ (SIZEOF(fsListFontsReply) - SIZEOF(fsGenericReply)) >> 2, fsFalse)) return (char **) 0; - if (rep.nFonts) { + if (rep.nFonts && rep.nFonts <= SIZE_MAX / sizeof(char *) + && rep.length <= (SIZE_MAX >> 2)) { flist = (char **) FSmalloc((unsigned) rep.nFonts * sizeof(char *)); rlen = (rep.length << 2) - SIZEOF(fsListFontsReply); c = (char *) FSmalloc((unsigned) (rlen + 1)); Index: xc/lib/FS/FSGetCats.c diff -u xc/lib/FS/FSGetCats.c:1.2 xc/lib/FS/FSGetCats.c:1.2.4.3 --- xc/lib/FS/FSGetCats.c:1.2 Fri Dec 14 14:53:32 2001 +++ xc/lib/FS/FSGetCats.c Thu Sep 25 16:58:39 2003 @@ -72,9 +72,10 @@ SyncHandle(); return (char **) NULL; } - if (rep.num_catalogues) { + if (rep.num_catalogues && rep.num_catalogues <= SIZE_MAX/sizeof(char *) + && rep.length <= (SIZE_MAX >> 2)) { list = (char **) - FSmalloc((unsigned) (rep.num_catalogues * sizeof(char *))); + FSmalloc((unsigned) (rep.num_catalogues * sizeof(char *))); rlen = (rep.length << 2) - SIZEOF(fsGetCataloguesReply); c = (char *) FSmalloc((unsigned) rlen + 1); if ((!list) || (!c)) { Index: xc/lib/FS/FSListCats.c diff -u xc/lib/FS/FSListCats.c:1.2 xc/lib/FS/FSListCats.c:1.2.4.3 --- xc/lib/FS/FSListCats.c:1.2 Fri Dec 14 14:53:32 2001 +++ xc/lib/FS/FSListCats.c Thu Sep 25 16:58:39 2003 @@ -78,7 +78,8 @@ (SIZEOF(fsListCataloguesReply) - SIZEOF(fsGenericReply)) >> 2, fsFalse)) return (char **) 0; - if (rep.num_catalogues) { + if (rep.num_catalogues && rep.num_catalogues <= SIZE_MAX/sizeof(char *) + && rep.length <= (SIZE_MAX>>2)) { clist = (char **) FSmalloc((unsigned) rep.num_catalogues * sizeof(char *)); rlen = (rep.length << 2) - SIZEOF(fsListCataloguesReply); Index: xc/lib/FS/FSListExt.c diff -u xc/lib/FS/FSListExt.c:1.2 xc/lib/FS/FSListExt.c:1.2.4.3 --- xc/lib/FS/FSListExt.c:1.2 Fri Dec 14 14:53:32 2001 +++ xc/lib/FS/FSListExt.c Thu Sep 25 16:58:39 2003 @@ -72,7 +72,8 @@ SyncHandle(); return (char **) NULL; } - if (rep.nExtensions) { + if (rep.nExtensions && rep.nExtensions <= SIZE_MAX / sizeof(char *) + && rep.length <= (SIZE_MAX>>2)) { list = (char **) FSmalloc((unsigned)(rep.nExtensions * sizeof(char *))); rlen = (rep.length << 2) - SIZEOF(fsListExtensionsReply); c = (char *) FSmalloc((unsigned) rlen + 1); Index: xc/lib/FS/FSOpenServ.c diff -u xc/lib/FS/FSOpenServ.c:1.6 xc/lib/FS/FSOpenServ.c:1.6.4.2 --- xc/lib/FS/FSOpenServ.c:1.6 Fri Dec 14 14:53:33 2001 +++ xc/lib/FS/FSOpenServ.c Mon Sep 1 17:05:36 2003 @@ -24,7 +24,7 @@ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ -/* $XFree86: xc/lib/FS/FSOpenServ.c,v 1.6 2001/12/14 19:53:33 dawes Exp $ */ +/* $XFree86: xc/lib/FS/FSOpenServ.c,v 1.6.4.2 2003/09/01 21:05:36 herrb Exp $ */ /* @@ -118,7 +118,7 @@ AlternateServer *alts; int altlen; char *vendor_string; - long setuplength; + unsigned long setuplength; if (server == NULL || *server == '\0') { if ((server = getenv("FONTSERVER")) == NULL) { @@ -153,7 +153,8 @@ _FSRead(svr, (char *) &prefix, (long) SIZEOF(fsConnSetup)); setuplength = prefix.alternate_len << 2; - if ((alt_data = (char *) + if (setuplength > (SIZE_MAX>>2) + || (alt_data = (char *) (setup = FSmalloc((unsigned) setuplength))) == NULL) { errno = ENOMEM; FSfree((char *) svr); @@ -162,6 +163,10 @@ _FSRead(svr, (char *) alt_data, setuplength); ad = alt_data; + if (prefix.num_alternates > SIZE_MAX / sizeof(AlternateServer)) { + errno = ENOMEM; + return (FSServer *) 0; + } alts = (AlternateServer *) FSmalloc(sizeof(AlternateServer) * prefix.num_alternates); if (!alts) { @@ -193,7 +198,8 @@ svr->num_alternates = prefix.num_alternates; setuplength = prefix.auth_len << 2; - if ((auth_data = (char *) + if (prefix.auth_len > (SIZE_MAX>>2) + || (auth_data = (char *) (setup = FSmalloc((unsigned) setuplength))) == NULL) { errno = ENOMEM; FSfree((char *) svr); Index: xc/lib/FS/FSQGlyphs.c diff -u xc/lib/FS/FSQGlyphs.c:1.2 xc/lib/FS/FSQGlyphs.c:1.2.4.2 --- xc/lib/FS/FSQGlyphs.c:1.2 Fri Dec 14 14:53:33 2001 +++ xc/lib/FS/FSQGlyphs.c Mon Sep 1 17:05:36 2003 @@ -85,12 +85,20 @@ (SIZEOF(fsQueryXBitmaps8Reply) - SIZEOF(fsGenericReply)) >> 2, fsFalse)) return FSBadAlloc; + if (reply.num_chars > SIZE_MAX / sizeof(FSOffset)) + return FSBadAlloc; + offs = (FSOffset *) FSmalloc(sizeof(FSOffset) * reply.num_chars); *offsets = offs; if (!offs) return FSBadAlloc; left = (reply.length << 2) - SIZEOF(fsQueryXBitmaps8Reply) - (SIZEOF(fsOffset32) * reply.num_chars); + /* XXX This thest is incomplete */ + if (reply.length > (SIZE_MAX >> 2)) { + FSfree((char *) offs); + return FSBadAlloc; + } gd = (unsigned char *) FSmalloc(left); *glyphdata = gd; if (!gd) { @@ -141,6 +149,8 @@ int i; fsChar2b_version1 *swapped_str; + if (str_len > SIZE_MAX/SIZEOF(fsChar2b_version1)) + return FSBadAlloc; swapped_str = (fsChar2b_version1 *) FSmalloc(SIZEOF(fsChar2b_version1) * str_len); if (!swapped_str) @@ -160,12 +170,19 @@ fsFalse)) return FSBadAlloc; + if(reply.num_chars > SIZE_MAX/sizeof(FSOffset)) + return FSBadAlloc; offs = (FSOffset *) FSmalloc(sizeof(FSOffset) * reply.num_chars); *offsets = offs; if (!offs) return FSBadAlloc; left = (reply.length << 2) - SIZEOF(fsQueryXBitmaps16Reply) - (SIZEOF(fsOffset32) * reply.num_chars); + /* XXX - this test is incomplete */ + if (reply.length > (SIZE_MAX>>2)) { + FSfree((char *) offs); + return FSBadAlloc; + } gd = (unsigned char *) FSmalloc(left); *glyphdata = gd; if (!gd) { Index: xc/lib/FS/FSQXExt.c diff -u xc/lib/FS/FSQXExt.c:1.5 xc/lib/FS/FSQXExt.c:1.5.4.2 --- xc/lib/FS/FSQXExt.c:1.5 Fri Dec 14 14:53:33 2001 +++ xc/lib/FS/FSQXExt.c Mon Sep 1 17:05:36 2003 @@ -24,7 +24,7 @@ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ -/* $XFree86: xc/lib/FS/FSQXExt.c,v 1.5 2001/12/14 19:53:33 dawes Exp $ */ +/* $XFree86: xc/lib/FS/FSQXExt.c,v 1.5.4.2 2003/09/01 21:05:36 herrb Exp $ */ /* @@ -92,6 +92,9 @@ (SIZEOF(fsQueryXExtents8Reply) - SIZEOF(fsGenericReply)) >> 2, fsFalse)) return FSBadAlloc; + + if (reply.num_extents > SIZE_MAX / sizeof(FSXCharInfo)) + return FSBadAlloc; ext = (FSXCharInfo *) FSmalloc(sizeof(FSXCharInfo) * reply.num_extents); *extents = ext; @@ -149,6 +152,9 @@ fsFalse)) return FSBadAlloc; + if (reply.num_extents > SIZE_MAX/sizeof(FSXCharInfo)) + return FSBadAlloc; + ext = (FSXCharInfo *) FSmalloc(sizeof(FSXCharInfo) * reply.num_extents); *extents = ext; if (!ext) Index: xc/lib/FS/FSQXInfo.c diff -u xc/lib/FS/FSQXInfo.c:1.2 xc/lib/FS/FSQXInfo.c:1.2.4.2 --- xc/lib/FS/FSQXInfo.c:1.2 Fri Dec 14 14:53:33 2001 +++ xc/lib/FS/FSQXInfo.c Mon Sep 1 17:05:36 2003 @@ -91,6 +91,9 @@ props->num_offsets = local_pi.num_offsets; props->data_len = local_pi.data_len; + if (props->num_offsets > SIZE_MAX / sizeof(FSPropOffset)) + return FSBadAlloc; + /* prepare for prop data */ offset_data = (FSPropOffset *) FSmalloc(props->num_offsets * sizeof(FSPropOffset)); Index: xc/lib/FS/FSlibint.h diff -u xc/lib/FS/FSlibint.h:3.7 xc/lib/FS/FSlibint.h:3.7.4.2 --- xc/lib/FS/FSlibint.h:3.7 Fri Dec 14 14:53:33 2001 +++ xc/lib/FS/FSlibint.h Mon Sep 1 17:05:36 2003 @@ -50,7 +50,7 @@ in this Software without prior written authorization from The Open Group. */ -/* $XFree86: xc/lib/FS/FSlibint.h,v 3.7 2001/12/14 19:53:33 dawes Exp $ */ +/* $XFree86: xc/lib/FS/FSlibint.h,v 3.7.4.2 2003/09/01 21:05:36 herrb Exp $ */ /* * FSlib internal decls Index: xc/lib/FS/FSlibos.h diff -u xc/lib/FS/FSlibos.h:3.9 xc/lib/FS/FSlibos.h:3.9.2.1 --- xc/lib/FS/FSlibos.h:3.9 Fri May 31 14:45:39 2002 +++ xc/lib/FS/FSlibos.h Mon Sep 1 17:05:36 2003 @@ -50,7 +50,7 @@ in this Software without prior written authorization from The Open Group. */ -/* $XFree86: xc/lib/FS/FSlibos.h,v 3.9 2002/05/31 18:45:39 dawes Exp $ */ +/* $XFree86: xc/lib/FS/FSlibos.h,v 3.9.2.1 2003/09/01 21:05:36 herrb Exp $ */ /* * FSlib networking & os include file @@ -76,6 +76,13 @@ #undef _POSIX_SOURCE #endif #endif +#ifndef SIZE_MAX +# ifdef ULONG_MAX +# define SIZE_MAX ULONG_MAX +# else +# define SIZE_MAX UINT_MAX +# endif +#endif #ifndef OPEN_MAX #ifdef SVR4 #define OPEN_MAX 256 Index: xc/lib/GL/mesa/src/drv/i830/Imakefile diff -u xc/lib/GL/mesa/src/drv/i830/Imakefile:1.7 xc/lib/GL/mesa/src/drv/i830/Imakefile:1.7.2.1 --- xc/lib/GL/mesa/src/drv/i830/Imakefile:1.7 Mon Nov 25 09:04:51 2002 +++ xc/lib/GL/mesa/src/drv/i830/Imakefile Sat May 24 18:22:04 2003 @@ -1,4 +1,4 @@ -XCOMM $XFree86: xc/lib/GL/mesa/src/drv/i830/Imakefile,v 1.7 2002/11/25 14:04:51 eich Exp $ +XCOMM $XFree86: xc/lib/GL/mesa/src/drv/i830/Imakefile,v 1.7.2.1 2003/05/24 22:22:04 sven Exp $ #include @@ -75,3 +75,15 @@ DependTarget() +InstallDriverSDKNonExecFile(Imakefile,$(DRIVERSDKDIR)/lib/GL/mesa/src/drv/i830) +InstallDriverSDKNonExecFile(i830_3d_reg.h,$(DRIVERSDKDIR)/lib/GL/mesa/src/drv/i830) +InstallDriverSDKNonExecFile(i830_context.h,$(DRIVERSDKDIR)/lib/GL/mesa/src/drv/i830) +InstallDriverSDKNonExecFile(i830_debug.h,$(DRIVERSDKDIR)/lib/GL/mesa/src/drv/i830) +InstallDriverSDKNonExecFile(i830_ioctl.h,$(DRIVERSDKDIR)/lib/GL/mesa/src/drv/i830) +InstallDriverSDKNonExecFile(i830_screen.h,$(DRIVERSDKDIR)/lib/GL/mesa/src/drv/i830) +InstallDriverSDKNonExecFile(i830_span.h,$(DRIVERSDKDIR)/lib/GL/mesa/src/drv/i830) +InstallDriverSDKNonExecFile(i830_state.h,$(DRIVERSDKDIR)/lib/GL/mesa/src/drv/i830) +InstallDriverSDKNonExecFile(i830_tex.h,$(DRIVERSDKDIR)/lib/GL/mesa/src/drv/i830) +InstallDriverSDKNonExecFile(i830_tris.h,$(DRIVERSDKDIR)/lib/GL/mesa/src/drv/i830) +InstallDriverSDKNonExecFile(i830_vb.h,$(DRIVERSDKDIR)/lib/GL/mesa/src/drv/i830) + Index: xc/lib/X11/imDefIm.c diff -u xc/lib/X11/imDefIm.c:1.11 xc/lib/X11/imDefIm.c:1.11.2.2 --- xc/lib/X11/imDefIm.c:1.11 Fri Dec 13 20:53:56 2002 +++ xc/lib/X11/imDefIm.c Wed Oct 8 13:56:31 2003 @@ -31,7 +31,7 @@ makoto@sm.sony.co.jp ******************************************************************/ -/* $XFree86: xc/lib/X11/imDefIm.c,v 1.11 2002/12/14 01:53:56 dawes Exp $ */ +/* $XFree86: xc/lib/X11/imDefIm.c,v 1.11.2.2 2003/10/08 17:56:31 eich Exp $ */ #include #define NEED_EVENTS @@ -2081,6 +2081,7 @@ _XimRegisterServerFilter(im); return True; } + _XimShutdown(im); #ifdef XIM_CONNECTABLE } else if (IS_DELAYBINDABLE(im)) { if (_XimDelayModeSetAttr(im)) Index: xc/lib/font/FreeType/fttools.c diff -u xc/lib/font/FreeType/fttools.c:1.4 xc/lib/font/FreeType/fttools.c:1.4.2.1 --- xc/lib/font/FreeType/fttools.c:1.4 Tue Feb 25 16:36:54 2003 +++ xc/lib/font/FreeType/fttools.c Sun Jun 8 14:38:55 2003 @@ -21,7 +21,7 @@ THE SOFTWARE. */ -/* $XFree86: xc/lib/font/FreeType/fttools.c,v 1.4 2003/02/25 21:36:54 dawes Exp $ */ +/* $XFree86: xc/lib/font/FreeType/fttools.c,v 1.4.2.1 2003/06/08 18:38:55 herrb Exp $ */ #include "fontmisc.h" #ifndef FONTMODULE @@ -51,7 +51,9 @@ { if(rc == 0x40) return AllocError; - else return BadFontFormat; + /* Anything else stops the font matching mechanism */ + else return BadFontName; + } /* Convert slen bytes from UCS-2 to ISO 8859-1. Byte specifies the @@ -132,7 +134,7 @@ len = name.string_len; if(len > name_len) len = name_len; - memcpy(name_return, name.string, name_len); + memcpy(name_return, name.string, len); return len; } Index: xc/lib/font/fc/fsconvert.c diff -u xc/lib/font/fc/fsconvert.c:1.11 xc/lib/font/fc/fsconvert.c:1.11.2.3 --- xc/lib/font/fc/fsconvert.c:1.11 Tue Sep 10 12:14:35 2002 +++ xc/lib/font/fc/fsconvert.c Mon Sep 1 17:05:37 2003 @@ -22,7 +22,7 @@ * * Author: Dave Lemke, Network Computing Devices, Inc */ -/* $XFree86: xc/lib/font/fc/fsconvert.c,v 1.11 2002/09/10 16:14:35 tsi Exp $ */ +/* $XFree86: xc/lib/font/fc/fsconvert.c,v 1.11.2.3 2003/09/01 21:05:37 herrb Exp $ */ /* * FS data conversion */ @@ -36,6 +36,7 @@ #include "fontstruct.h" #include "fservestr.h" #include "fontutil.h" +#include "fslibos.h" extern char _fs_glyph_undefined; extern char _fs_glyph_requested; @@ -102,6 +103,10 @@ nprops = pfi->nprops = pi->num_offsets; + if (nprops < 0 + || nprops > SIZE_MAX/(sizeof(FontPropRec) + sizeof(char))) + return -1; + dprop = (FontPropPtr) xalloc(sizeof(FontPropRec) * nprops + sizeof (char) * nprops); if (!dprop) Index: xc/lib/font/fc/fserve.c diff -u xc/lib/font/fc/fserve.c:3.22 xc/lib/font/fc/fserve.c:3.22.2.1 --- xc/lib/font/fc/fserve.c:3.22 Fri May 31 14:45:49 2002 +++ xc/lib/font/fc/fserve.c Fri Aug 29 14:05:09 2003 @@ -24,7 +24,7 @@ in this Software without prior written authorization from The Open Group. */ -/* $XFree86: xc/lib/font/fc/fserve.c,v 3.22 2002/05/31 18:45:49 dawes Exp $ */ +/* $XFree86: xc/lib/font/fc/fserve.c,v 3.22.2.1 2003/08/29 18:05:09 herrb Exp $ */ /* * Copyright 1990 Network Computing Devices @@ -1507,8 +1507,8 @@ if (conn->blockState & FS_GIVE_UP) return BadFontName; - - if (namelen > sizeof (buf) - 1) + + if (namelen <= 0 || namelen > sizeof (buf) - 1) return BadFontName; /* Index: xc/lib/font/fc/fslibos.h diff -u xc/lib/font/fc/fslibos.h:3.7 xc/lib/font/fc/fslibos.h:3.7.2.2 --- xc/lib/font/fc/fslibos.h:3.7 Fri May 31 14:45:49 2002 +++ xc/lib/font/fc/fslibos.h Mon Sep 1 17:05:37 2003 @@ -31,7 +31,7 @@ from The Open Group. */ -/* $XFree86: xc/lib/font/fc/fslibos.h,v 3.7 2002/05/31 18:45:49 dawes Exp $ */ +/* $XFree86: xc/lib/font/fc/fslibos.h,v 3.7.2.2 2003/09/01 21:05:37 herrb Exp $ */ /* * FSlib networking & os include file @@ -48,13 +48,20 @@ #ifndef FONT_OPEN_MAX #ifndef X_NOT_POSIX -#ifdef _POSIX_SOURCE -#include -#else -#define _POSIX_SOURCE -#include -#undef _POSIX_SOURCE -#endif +# ifdef _POSIX_SOURCE +# include +# else +# define _POSIX_SOURCE +# include +# undef _POSIX_SOURCE +# endif +#endif +#ifndef SIZE_MAX +# ifdef ULONG_MAX +# define SIZE_MAX ULONG_MAX +# else +# define SIZE_MAX UINT_MAX +# endif #endif #ifndef OPEN_MAX #if defined(SVR4) || defined(__UNIXOS2__) Index: xc/lib/font/fontfile/dirfile.c diff -u xc/lib/font/fontfile/dirfile.c:3.15 xc/lib/font/fontfile/dirfile.c:3.15.2.2 --- xc/lib/font/fontfile/dirfile.c:3.15 Fri May 31 14:45:50 2002 +++ xc/lib/font/fontfile/dirfile.c Wed Feb 11 22:21:49 2004 @@ -25,7 +25,7 @@ in this Software without prior written authorization from The Open Group. */ -/* $XFree86: xc/lib/font/fontfile/dirfile.c,v 3.15 2002/05/31 18:45:50 dawes Exp $ */ +/* $XFree86: xc/lib/font/fontfile/dirfile.c,v 3.15.2.2 2004/02/12 03:21:49 dawes Exp $ */ /* * Author: Keith Packard, MIT X Consortium @@ -68,6 +68,9 @@ FontDirectoryPtr dir = NullFontDirectory; + if (strlen(directory) + 1 + sizeof(FontDirFile) > sizeof(dir_file)) + return BadFontPath; + #ifdef FONTDIRATTRIB /* Check for font directory attributes */ #ifndef __UNIXOS2__ @@ -154,6 +157,9 @@ char dir_file[MAXFONTFILENAMELEN]; struct stat statb; + if (strlen(dir->directory) + sizeof(FontDirFile) > sizeof(dir_file)) + return FALSE; + strcpy (dir_file, dir->directory); strcat (dir_file, FontDirFile); if (stat (dir_file, &statb) == -1) @@ -202,6 +208,8 @@ continue; len = strlen (fileName) - renderer->fileSuffixLen; + if (len >= sizeof(copy)) + continue; CopyISOLatin1Lowered (copy, fileName, len); copy[len] = '\0'; name.name = copy; @@ -251,9 +259,13 @@ int status = Successful; struct stat statb; + if (strlen(directory) >= sizeof(alias_file)) + return BadFontPath; dir = *pdir; strcpy(alias_file, directory); if (!isFile) { + if (strlen(directory) + 1 + sizeof(FontAliasFile) > sizeof(alias_file)) + return BadFontPath; if (directory[strlen(directory) - 1] != '/') strcat(alias_file, "/"); strcat(alias_file, FontAliasFile); @@ -286,6 +298,10 @@ status = AllocError; break; case NAME: + if (strlen(lexToken) >= sizeof(alias)) { + status = BadFontPath; + break; + } strcpy(alias, lexToken); token = lexAlias(file, &lexToken); switch (token) { @@ -302,6 +318,10 @@ status = AllocError; break; case NAME: + if (strlen(lexToken) >= sizeof(font_name)) { + status = BadFontPath; + break; + } CopyISOLatin1Lowered(alias, alias, strlen(alias)); CopyISOLatin1Lowered(font_name, lexToken, strlen(lexToken)); if (!FontFileAddFontAlias (dir, alias, font_name)) Index: xc/lib/font/fontfile/encparse.c diff -u xc/lib/font/fontfile/encparse.c:1.18 xc/lib/font/fontfile/encparse.c:1.18.6.1 --- xc/lib/font/fontfile/encparse.c:1.18 Thu Nov 1 22:06:40 2001 +++ xc/lib/font/fontfile/encparse.c Wed Feb 11 22:21:49 2004 @@ -20,7 +20,7 @@ THE SOFTWARE. */ -/* $XFree86: xc/lib/font/fontfile/encparse.c,v 1.18 2001/11/02 03:06:40 dawes Exp $ */ +/* $XFree86: xc/lib/font/fontfile/encparse.c,v 1.18.6.1 2004/02/12 03:21:49 dawes Exp $ */ /* Parser for encoding files */ @@ -833,6 +833,7 @@ char file_name[MAXFONTFILENAMELEN], encoding_name[MAXFONTNAMELEN], buf[MAXFONTFILENAMELEN]; int count, n; + static char format[24] = ""; /* As we don't really expect to open encodings that often, we don't take the trouble of caching encodings directories. */ @@ -848,8 +849,12 @@ } encoding = NULL; + if (!format[0]) { + sprintf(format, "%%%ds %%%d[^\n]\n", sizeof(encoding_name) - 1, + sizeof(file_name) - 1); + } for(;;) { - count = fscanf(file, "%s %[^\n]\n", encoding_name, file_name); + count = fscanf(file, format, encoding_name, file_name); if(count == EOF) break; if(count != 2) Index: xc/lib/font/fontfile/fontdir.c diff -u xc/lib/font/fontfile/fontdir.c:3.19 xc/lib/font/fontfile/fontdir.c:3.19.2.1 --- xc/lib/font/fontfile/fontdir.c:3.19 Fri May 31 14:45:50 2002 +++ xc/lib/font/fontfile/fontdir.c Sun Jun 8 14:38:55 2003 @@ -25,7 +25,7 @@ in this Software without prior written authorization from The Open Group. */ -/* $XFree86: xc/lib/font/fontfile/fontdir.c,v 3.19 2002/05/31 18:45:50 dawes Exp $ */ +/* $XFree86: xc/lib/font/fontfile/fontdir.c,v 3.19.2.1 2003/06/08 18:38:55 herrb Exp $ */ /* * Author: Keith Packard, MIT X Consortium @@ -728,10 +728,13 @@ if (!(existing->u.scalable.fileName = FontFileSaveString (fileName))) return FALSE; } - FontFileCompleteXLFD(&vals, &vals); - FontFileAddScaledInstance (existing, &vals, NullFont, - bitmap->name.name); - return TRUE; + if(bitmap) + { + FontFileCompleteXLFD(&vals, &vals); + FontFileAddScaledInstance (existing, &vals, NullFont, + bitmap->name.name); + return TRUE; + } } } if (!(entry.u.scalable.fileName = FontFileSaveString (fileName))) @@ -795,9 +798,12 @@ } if (vals.values_supplied & SIZE_SPECIFY_MASK) { - FontFileCompleteXLFD(&vals, &vals); - FontFileAddScaledInstance (scalable, &vals, NullFont, - bitmap->name.name); + if(bitmap) + { + FontFileCompleteXLFD(&vals, &vals); + FontFileAddScaledInstance (scalable, &vals, NullFont, + bitmap->name.name); + } } } } Index: xc/lib/font/fontfile/fontfile.c diff -u xc/lib/font/fontfile/fontfile.c:3.16 xc/lib/font/fontfile/fontfile.c:3.16.2.1 --- xc/lib/font/fontfile/fontfile.c:3.16 Fri May 31 14:45:50 2002 +++ xc/lib/font/fontfile/fontfile.c Wed Feb 11 22:21:49 2004 @@ -25,7 +25,7 @@ in this Software without prior written authorization from The Open Group. */ -/* $XFree86: xc/lib/font/fontfile/fontfile.c,v 3.16 2002/05/31 18:45:50 dawes Exp $ */ +/* $XFree86: xc/lib/font/fontfile/fontfile.c,v 3.16.2.1 2004/02/12 03:21:49 dawes Exp $ */ /* * Author: Keith Packard, MIT X Consortium @@ -424,11 +424,16 @@ vals.ranges = ranges; vals.nranges = nranges; - strcpy (fileName, dir->directory); - strcat (fileName, scalable->fileName); - ret = (*scalable->renderer->OpenScalable) (fpe, pFont, + if (strlen(dir->directory) + strlen(scalable->fileName) >= + sizeof(fileName)) { + ret = BadFontName; + } else { + strcpy (fileName, dir->directory); + strcat (fileName, scalable->fileName); + ret = (*scalable->renderer->OpenScalable) (fpe, pFont, flags, entry, fileName, &vals, format, fmask, non_cachable_font); + } /* In case rasterizer does something bad because of charset subsetting... */ @@ -497,6 +502,8 @@ dir = (FontDirectoryPtr) fpe->private; bitmap = &entry->u.bitmap; + if (strlen(dir->directory) + strlen(bitmap->fileName) >= sizeof(fileName)) + return BadFontName; strcpy (fileName, dir->directory); strcat (fileName, bitmap->fileName); ret = (*bitmap->renderer->OpenBitmap) @@ -530,6 +537,8 @@ dir = (FontDirectoryPtr) fpe->private; bitmap = &entry->u.bitmap; + if (strlen(dir->directory) + strlen(bitmap->fileName) >= sizeof(fileName)) + return BadFontName; strcpy (fileName, dir->directory); strcat (fileName, bitmap->fileName); ret = (*bitmap->renderer->GetInfoBitmap) (fpe, pFontInfo, entry, fileName); @@ -891,10 +900,15 @@ vals.ranges = FontParseRanges(origName, &vals.nranges); ranges = vals.ranges; /* Make a new scaled instance */ - strcpy (fileName, dir->directory); - strcat (fileName, scalable->fileName); - ret = (*scalable->renderer->GetInfoScalable) - (fpe, *pFontInfo, entry, &tmpName, fileName, &vals); + if (strlen(dir->directory) + strlen(scalable->fileName) >= + sizeof(fileName)) { + ret = BadFontName; + } else { + strcpy (fileName, dir->directory); + strcat (fileName, scalable->fileName); + ret = (*scalable->renderer->GetInfoScalable) + (fpe, *pFontInfo, entry, &tmpName, fileName, &vals); + } if (ranges) xfree(ranges); } } @@ -931,10 +945,15 @@ bc = &entry->u.bc; entry = bc->entry; /* Make a new scaled instance */ - strcpy (fileName, dir->directory); - strcat (fileName, scalable->fileName); - ret = (*scalable->renderer->GetInfoScalable) + if (strlen(dir->directory) + strlen(scalable->fileName) >= + sizeof(fileName)) { + ret = BadFontName; + } else { + strcpy (fileName, dir->directory); + strcat (fileName, scalable->fileName); + ret = (*scalable->renderer->GetInfoScalable) (fpe, *pFontInfo, entry, tmpName, fileName, &bc->vals); + } break; #endif default: Index: xc/programs/Xserver/Xext/Imakefile diff -u xc/programs/Xserver/Xext/Imakefile:3.42 xc/programs/Xserver/Xext/Imakefile:3.42.2.1 --- xc/programs/Xserver/Xext/Imakefile:3.42 Wed Mar 6 16:12:32 2002 +++ xc/programs/Xserver/Xext/Imakefile Sat May 24 18:22:05 2003 @@ -3,7 +3,7 @@ -XCOMM $XFree86: xc/programs/Xserver/Xext/Imakefile,v 3.42 2002/03/06 21:12:32 mvojkovi Exp $ +XCOMM $XFree86: xc/programs/Xserver/Xext/Imakefile,v 3.42.2.1 2003/05/24 22:22:05 sven Exp $ #include @@ -170,3 +170,4 @@ InstallDriverSDKNonExecFile(dgaproc.h,$(DRIVERSDKINCLUDEDIR)) InstallDriverSDKNonExecFile(xvdix.h,$(DRIVERSDKINCLUDEDIR)) +InstallDriverSDKNonExecFile(xvmcext.h,$(DRIVERSDKINCLUDEDIR)) Index: xc/programs/Xserver/hw/darwin/quartz/fullscreen.c diff -u xc/programs/Xserver/hw/darwin/quartz/fullscreen.c:1.3 xc/programs/Xserver/hw/darwin/quartz/fullscreen.c:1.3.2.1 --- xc/programs/Xserver/hw/darwin/quartz/fullscreen.c:1.3 Mon Dec 9 19:00:39 2002 +++ xc/programs/Xserver/hw/darwin/quartz/fullscreen.c Wed Aug 13 15:45:28 2003 @@ -26,7 +26,7 @@ * dealings in this Software without prior written authorization from * Torrey T. Lyons. */ -/* $XFree86: xc/programs/Xserver/hw/darwin/quartz/fullscreen.c,v 1.3 2002/12/10 00:00:39 torrey Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/darwin/quartz/fullscreen.c,v 1.3.2.1 2003/08/13 19:45:28 torrey Exp $ */ #include "quartzCommon.h" #include "darwin.h" @@ -349,8 +349,7 @@ fsDisplayInfo->framebuffer = CGDisplayBaseAddress(cgID); // allocate shadow framebuffer - fsDisplayInfo->shadowPtr = shadowAlloc(dfb->width, dfb->height, - dfb->bitsPerPixel); + fsDisplayInfo->shadowPtr = xalloc(dfb->pitch * dfb->height); dfb->framebuffer = fsDisplayInfo->shadowPtr; return TRUE; Index: xc/programs/Xserver/hw/xfree86/CHANGELOG diff -u xc/programs/Xserver/hw/xfree86/CHANGELOG:3.2588.2.13 xc/programs/Xserver/hw/xfree86/CHANGELOG:3.2588.2.37 --- xc/programs/Xserver/hw/xfree86/CHANGELOG:3.2588.2.13 Fri May 9 21:12:56 2003 +++ xc/programs/Xserver/hw/xfree86/CHANGELOG Sat Feb 28 20:14:28 2004 @@ -1,4 +1,69 @@ -XFree86 4.3.0.2 (xx May 2003) +XFree86 4.3.0.3 (XX Xxxxxx 200X) + +XFree86 4.3.0.2 (29 February 2004) +1013. Some more font path checks. +1012. Fix font alias overrun. +1011. Build fix for the i810 driver when XF86DRI isn't defined (#6006, + Matthias Scheler). +1010. Include backwards compatibility API for renamed stream functions in + Freetype2 library (Torrey T. Lyons). +1009. Fix DRM_CAS on ia64 as used by the DRI (Bugzilla #778, John Dennis). +1008. Fix some i830+ VT switch/exit crashes (David Dawes, Egbert Eich). +1007. Fixed definititon of UseInstalledOnCrossCompile so that it never is + undefined (Harlod L. Hunt II). +1006. Fixing crash on ia64 because of wrong setjmp buffer alignment (Bugzilla + #596, John Dennis). +1005. Close freetype fontfile filehandle in mkfontscale, this prevents problems + from limitation of simultaniously open files (Bugzilla #676, + Jun-ichiro itojun Hagino). +1004. Fixed erronous freeing of DisplayModeRec in xf86DeleteMode() when + deleting the modePool in xf86PruneDriverModes() the 'prev' member has + a different meaning for modePool modes than for ScrnInfoPtr->modes modes + where it creates a doubly linked list (Bugzilla #678, Juergen Keil). +1003. Backport xdm code from -current, including following changes: + - use better pseudo-random generators to generate magic cookies, + including EGD-like prng daemons support. + - add support for LISTEN keyworkd in Xaccess + - deal with small memory leaks + - use SIOCGLIFCONF to query network interfaces where available + - fix XDMCP bug that could cause localhost entries in /etc/X0.hosts + to be lost + - add xdm /dev/random handling for Solaris + - fix XDMCP queries on systems using getifaddrs(). + (Alan Coopersmith, Marc La France, Oswald Buddenhagen, Matthieu Herrb, + Nicolas JOLY, Jason L. Wright, Joel Ray Holveck). +1002. Fixes for potential integer overflows in font libraries. (blexim, + Matthieu Herrb). +1001. Don't call FBIOPAN_DISPLAY ioctl with arguments that will cause a + confusing if harmless error (Michel Dänzer) +1000. Fixed a crash when _XIMProtoOpenIM(), hich is called through XOpenIM() + API when protocol IM is being set up, fails (Bugzilla #618, + Hisashi MIYASHITA). + 999. Fix an XAA pixmap cache server crash that can happen in some cases + when the off-screen memory is heavily fragmented (David Dawes, based + on #5752, Koike Kazuhiko, Chisato Yamauchi). + 998. Fixed XDarwin fullscreen crash in some screen sizes (Torrey T. Lyons). + 997. Fix calculation of CRTC2 frame offset with page flipping in radeon driver + (Michel Daenzer) + 996. Pull twm fixes (signal handler, empty windows menu) from -current. + 995. Fix for a crash if a scalable font has a bitmap entry in + fonts.dir (#5687, Bugzilla #332, Juliusz Chroboczek). + 994. Fix for xfs crashes in Freetype backend (Bugzilla #242, + Juliusz Chroboczek). + 993. Fix repeated image problem when using a vesa video mode before starting + the Xserver on the S3 Trio3D cards (Alan Hourihane). + 992. Fix XDMCP queries in xdm on systems using getifaddrs(). + (Bugzilla #277, Joel Ray Holveck). + 991. Fixed Imakefiles so the driver SDK builds again (Sven Luther). + 990. i810/815 depth buffer needs to be a multiple of the tile size. This + fixes 3D corruption near the bottom of the screen at 800x600@16bpp + (Bugzilla #283, Dave Airlie). + 989. Typo fix in radeon driver cursor code, fixes the primary head switching + off when the cursor moves to the secondary head on dualhead cards + (Michel Dänzer) + 988. Fix a problem with savage driver when UseBIOS is off, such that the + performance drops dramatically. Now the performance matches or + exceeds that of the option UseBIOS (Alan Hourihane). XFree86 4.3.0.1 (9 May 2003) 987. Fix a FreeBSD/alpha build problem (#5679, Fred Clift). @@ -16580,7 +16645,7 @@ XFree86 3.0 (26 April 1994) -$XFree86: xc/programs/Xserver/hw/xfree86/CHANGELOG,v 3.2588.2.13 2003/05/10 01:12:56 dawes Exp $ +$XFree86: xc/programs/Xserver/hw/xfree86/CHANGELOG,v 3.2588.2.37 2004/02/29 01:14:28 dawes Exp $ Index: xc/programs/Xserver/hw/xfree86/xf86Date.h diff -u xc/programs/Xserver/hw/xfree86/xf86Date.h:1.3.2.3 xc/programs/Xserver/hw/xfree86/xf86Date.h:1.3.2.5 --- xc/programs/Xserver/hw/xfree86/xf86Date.h:1.3.2.3 Fri May 9 21:10:10 2003 +++ xc/programs/Xserver/hw/xfree86/xf86Date.h Sat Feb 28 20:14:38 2004 @@ -1,7 +1,7 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/xf86Date.h,v 1.3.2.3 2003/05/10 01:10:10 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/xf86Date.h,v 1.3.2.5 2004/02/29 01:14:38 dawes Exp $ */ #ifndef XF86_DATE -#define XF86_DATE "9 May 2003" +#define XF86_DATE "29 February 2004" #endif Index: xc/programs/Xserver/hw/xfree86/xf86Version.h diff -u xc/programs/Xserver/hw/xfree86/xf86Version.h:3.543.2.1 xc/programs/Xserver/hw/xfree86/xf86Version.h:3.543.2.2 --- xc/programs/Xserver/hw/xfree86/xf86Version.h:3.543.2.1 Fri May 9 21:10:10 2003 +++ xc/programs/Xserver/hw/xfree86/xf86Version.h Sat Feb 28 20:14:39 2004 @@ -1,11 +1,11 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/xf86Version.h,v 3.543.2.1 2003/05/10 01:10:10 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/xf86Version.h,v 3.543.2.2 2004/02/29 01:14:39 dawes Exp $ */ #ifndef XF86_VERSION_CURRENT #define XF86_VERSION_MAJOR 4 #define XF86_VERSION_MINOR 3 #define XF86_VERSION_PATCH 0 -#define XF86_VERSION_SNAP 1 +#define XF86_VERSION_SNAP 2 /* This has five arguments for compatibilty reasons */ #define XF86_VERSION_NUMERIC(major,minor,patch,snap,dummy) \ Index: xc/programs/Xserver/hw/xfree86/common/Imakefile diff -u xc/programs/Xserver/hw/xfree86/common/Imakefile:3.148 xc/programs/Xserver/hw/xfree86/common/Imakefile:3.148.2.1 --- xc/programs/Xserver/hw/xfree86/common/Imakefile:3.148 Mon Feb 17 12:06:41 2003 +++ xc/programs/Xserver/hw/xfree86/common/Imakefile Sat May 24 18:22:09 2003 @@ -4,7 +4,7 @@ -XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/common/Imakefile,v 3.148 2003/02/17 17:06:41 dawes Exp $ +XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/common/Imakefile,v 3.148.2.1 2003/05/24 22:22:09 sven Exp $ @@ -288,3 +288,5 @@ InstallDriverSDKNonExecFile(xf86str.h,$(DRIVERSDKINCLUDEDIR)) InstallDriverSDKNonExecFile(xf86xv.h,$(DRIVERSDKINCLUDEDIR)) InstallDriverSDKNonExecFile(xf86xvmc.h,$(DRIVERSDKINCLUDEDIR)) +InstallDriverSDKNonExecFile(xf86Bus.h,$(DRIVERSDKINCLUDEDIR)) +InstallDriverSDKNonExecFile(xf86pciBus.h,$(DRIVERSDKINCLUDEDIR)) Index: xc/programs/Xserver/hw/xfree86/common/xf86Mode.c diff -u xc/programs/Xserver/hw/xfree86/common/xf86Mode.c:1.63.2.1 xc/programs/Xserver/hw/xfree86/common/xf86Mode.c:1.63.2.2 --- xc/programs/Xserver/hw/xfree86/common/xf86Mode.c:1.63.2.1 Tue Apr 8 16:51:27 2003 +++ xc/programs/Xserver/hw/xfree86/common/xf86Mode.c Wed Oct 8 13:56:34 2003 @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86Mode.c,v 1.63.2.1 2003/04/08 20:51:27 tsi Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86Mode.c,v 1.63.2.2 2003/10/08 17:56:34 eich Exp $ */ /* * Copyright (c) 1997,1998 by The XFree86 Project, Inc. @@ -1833,8 +1833,16 @@ } while (p != NULL && p != first); /* modePool is no longer needed, turf it */ - while (scrp->modePool) + while (scrp->modePool) { + /* + * A modePool mode's prev field is used to hold a pointer to the + * member of the scrp->modes list for which a match was considered. + * Clear that pointer first, otherwise xf86DeleteMode might get + * confused + */ + scrp->modePool->prev = NULL; xf86DeleteMode(&scrp->modePool, scrp->modePool); + } } Index: xc/programs/Xserver/hw/xfree86/doc/LICENSE diff -u xc/programs/Xserver/hw/xfree86/doc/LICENSE:1.17 xc/programs/Xserver/hw/xfree86/doc/LICENSE:1.17.2.1 --- xc/programs/Xserver/hw/xfree86/doc/LICENSE:1.17 Sun Feb 23 23:03:20 2003 +++ xc/programs/Xserver/hw/xfree86/doc/LICENSE Fri Oct 17 17:39:24 2003 @@ -161,6 +161,62 @@ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +2.2.3 Theodore Ts'o. + +Copyright Theodore Ts'o, 1994, 1995, 1996, 1997, 1998, 1999. All rights +reserved. + +Redistribution and use in source and binary forms, with or without modifica- +tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + and the entire permission notice in its entirety, including the dis- + claimer of warranties. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. he name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE, ALL OF WHICH ARE HEREBY DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- +CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH- +ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF NOT +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +2.2.4 Theo de Raadt and Damien Miller + +Copyright (c) 1995,1999 Theo de Raadt. All rights reserved. Copyright (c) +2001-2002 Damien Miller. All rights reserved. + +Redistribution and use in source and binary forms, with or without modifica- +tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER- +CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- +CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH- +ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + 2.3 NVIDIA Corp Copyright (c) 1996 NVIDIA, Corp. All rights reserved. @@ -618,7 +674,7 @@ info@urwpp.de or design@bigelowandholmes.com - Generated from XFree86: xc/programs/Xserver/hw/xfree86/doc/sgml/LICENSE.sgml,v 1.12 2003/02/24 03:41:16 dawes Exp $ + Generated from XFree86: xc/programs/Xserver/hw/xfree86/doc/sgml/LICENSE.sgml,v 1.12.2.1 2003/10/17 21:37:44 herrb Exp $ -$XFree86: xc/programs/Xserver/hw/xfree86/doc/LICENSE,v 1.17 2003/02/24 04:03:20 dawes Exp $ +$XFree86: xc/programs/Xserver/hw/xfree86/doc/LICENSE,v 1.17.2.1 2003/10/17 21:39:24 herrb Exp $ Index: xc/programs/Xserver/hw/xfree86/doc/sgml/LICENSE.sgml diff -u xc/programs/Xserver/hw/xfree86/doc/sgml/LICENSE.sgml:1.12 xc/programs/Xserver/hw/xfree86/doc/sgml/LICENSE.sgml:1.12.2.1 --- xc/programs/Xserver/hw/xfree86/doc/sgml/LICENSE.sgml:1.12 Sun Feb 23 22:41:16 2003 +++ xc/programs/Xserver/hw/xfree86/doc/sgml/LICENSE.sgml Fri Oct 17 17:37:44 2003 @@ -8,7 +8,7 @@ February 2003 -$XFree86: xc/programs/Xserver/hw/xfree86/doc/sgml/LICENSE.sgml,v 1.12 2003/02/24 03:41:16 dawes Exp $ +$XFree86: xc/programs/Xserver/hw/xfree86/doc/sgml/LICENSE.sgml,v 1.12.2.1 2003/10/17 21:37:44 herrb Exp $ XFree86 License @@ -177,6 +177,66 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Theodore Ts'o. +

+Copyright Theodore Ts'o, 1994, 1995, 1996, 1997, 1998, 1999. All +rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +Redistributions of source code must retain the above copyright + notice, and the entire permission notice in its entirety, + including the disclaimer of warranties. +Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +he name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF +WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +Theo de Raadt and Damien Miller +

+Copyright (c) 1995,1999 Theo de Raadt. All rights reserved. +Copyright (c) 2001-2002 Damien Miller. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + NVIDIA Corp

Copyright (c) 1996 NVIDIA, Corp. All rights reserved. Index: xc/programs/Xserver/hw/xfree86/drivers/ati/Imakefile diff -u xc/programs/Xserver/hw/xfree86/drivers/ati/Imakefile:1.45 xc/programs/Xserver/hw/xfree86/drivers/ati/Imakefile:1.45.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/ati/Imakefile:1.45 Mon Feb 17 12:06:41 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/ati/Imakefile Sat May 24 18:22:10 2003 @@ -1,4 +1,4 @@ -XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/Imakefile,v 1.45 2003/02/17 17:06:41 dawes Exp $ +XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/Imakefile,v 1.45.2.1 2003/05/24 22:22:10 sven Exp $ XCOMM XCOMM Copyright 1997 through 2003 by Marc Aurele La France (TSI @ UQV), tsi@xfree86.org XCOMM @@ -207,6 +207,7 @@ InstallObjectModule(r128,$(MODULEDIR),drivers) InstallObjectModule(radeon,$(MODULEDIR),drivers) +#if !defined(XF86DriverSDK) #if 0 InstallModuleManPage(ati) #endif @@ -214,6 +215,7 @@ InstallModuleManPage(r128) InstallModuleManPage(radeon) +#endif DependTarget() @@ -332,6 +334,7 @@ InstallDriverSDKNonExecFile(radeon_version.h,$(DRIVERSDKDIR)/drivers/ati) InstallDriverSDKNonExecFile(radeon_video.c,$(DRIVERSDKDIR)/drivers/ati) InstallDriverSDKNonExecFile(radeon_common.h,$(DRIVERSDKDIR)/drivers/ati) +InstallDriverSDKNonExecFile(radeon_accelfuncs.c,$(DRIVERSDKDIR)/drivers/ati) InstallDriverSDKObjectModule(ati,$(DRIVERSDKMODULEDIR),drivers) InstallDriverSDKObjectModule(atimisc,$(DRIVERSDKMODULEDIR),drivers) Index: xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_cursor.c diff -u xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_cursor.c:1.23 xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_cursor.c:1.23.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_cursor.c:1.23 Mon Feb 24 15:34:55 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_cursor.c Tue May 20 19:21:27 2003 @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_cursor.c,v 1.23 2003/02/24 20:34:55 tsi Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_cursor.c,v 1.23.2.1 2003/05/20 23:21:27 daenzer Exp $ */ /* * Copyright 2000 ATI Technologies Inc., Markham, Ontario, and * VA Linux Systems Inc., Fremont, California. @@ -370,7 +370,7 @@ } if (info->IsSecondary || info->Clone) { - save2 = INREG(RADEON_CRTC_GEN_CNTL) & ~(CARD32) (3 << 20); + save2 = INREG(RADEON_CRTC2_GEN_CNTL) & ~(CARD32) (3 << 20); save2 |= (CARD32) (2 << 20); OUTREG(RADEON_CRTC2_GEN_CNTL, save2 & (CARD32)~RADEON_CRTC2_CUR_EN); } Index: xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c diff -u xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c:1.91 xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c:1.91.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c:1.91 Mon Feb 24 22:50:15 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c Mon Jul 14 19:57:07 2003 @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c,v 1.91 2003/02/25 03:50:15 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c,v 1.91.2.1 2003/07/14 23:57:07 daenzer Exp $ */ /* * Copyright 2000 ATI Technologies Inc., Markham, Ontario, and * VA Linux Systems Inc., Fremont, California. @@ -5691,13 +5691,13 @@ pSAREAPriv = DRIGetSAREAPrivate(pScrn->pScreen); - if (pSAREAPriv->pfCurrentPage == 1) { - Base += info->backOffset; - } - if (clone || info->IsSecondary) { pSAREAPriv->crtc2_base = Base; } + + if (pSAREAPriv->pfCurrentPage == 1) { + Base += info->backOffset; + } } #endif Index: xc/programs/Xserver/hw/xfree86/drivers/cyrix/Imakefile diff -u xc/programs/Xserver/hw/xfree86/drivers/cyrix/Imakefile:1.8 xc/programs/Xserver/hw/xfree86/drivers/cyrix/Imakefile:1.8.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/cyrix/Imakefile:1.8 Mon Feb 17 12:06:42 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/cyrix/Imakefile Sat May 24 18:22:11 2003 @@ -1,4 +1,4 @@ -XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/cyrix/Imakefile,v 1.8 2003/02/17 17:06:42 dawes Exp $ +XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/cyrix/Imakefile,v 1.8.2.1 2003/05/24 22:22:11 sven Exp $ XCOMM XCOMM This is an Imakefile for the CYRIX driver. XCOMM @@ -43,6 +43,7 @@ InstallDriverSDKNonExecFile(cyrix_bank.c,$(DRIVERSDKDIR)/drivers/cyrix) InstallDriverSDKNonExecFile(cyrix_driver.c,$(DRIVERSDKDIR)/drivers/cyrix) InstallDriverSDKNonExecFile(cyrix_helper.c,$(DRIVERSDKDIR)/drivers/cyrix) +InstallDriverSDKNonExecFile(cyrix_shadow.c,$(DRIVERSDKDIR)/drivers/cyrix) InstallDriverSDKObjectModule(cyrix,$(DRIVERSDKMODULEDIR),drivers) Index: xc/programs/Xserver/hw/xfree86/drivers/i740/Imakefile diff -u xc/programs/Xserver/hw/xfree86/drivers/i740/Imakefile:1.10 xc/programs/Xserver/hw/xfree86/drivers/i740/Imakefile:1.10.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/i740/Imakefile:1.10 Mon Feb 17 12:06:42 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/i740/Imakefile Sat May 24 18:22:11 2003 @@ -1,4 +1,4 @@ -XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i740/Imakefile,v 1.10 2003/02/17 17:06:42 dawes Exp $ +XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i740/Imakefile,v 1.10.2.1 2003/05/24 22:22:11 sven Exp $ XCOMM XCOMM This is the Imakefile for the i740 driver. XCOMM @@ -47,6 +47,10 @@ InstallDriverSDKNonExecFile(i740_io.c,$(DRIVERSDKDIR)/drivers/i740) InstallDriverSDKNonExecFile(i740_macros.h,$(DRIVERSDKDIR)/drivers/i740) InstallDriverSDKNonExecFile(i740_reg.h,$(DRIVERSDKDIR)/drivers/i740) +InstallDriverSDKNonExecFile(i740_dga.h,$(DRIVERSDKDIR)/drivers/i740) +InstallDriverSDKNonExecFile(i740_dga.c,$(DRIVERSDKDIR)/drivers/i740) +InstallDriverSDKNonExecFile(i740_i2c.c,$(DRIVERSDKDIR)/drivers/i740) +InstallDriverSDKNonExecFile(i740_video.c,$(DRIVERSDKDIR)/drivers/i740) InstallDriverSDKObjectModule(i740,$(DRIVERSDKMODULEDIR),drivers) Index: xc/programs/Xserver/hw/xfree86/drivers/i810/common.h diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/common.h:1.6 xc/programs/Xserver/hw/xfree86/drivers/i810/common.h:1.6.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/i810/common.h:1.6 Wed Feb 5 23:18:04 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/i810/common.h Mon Oct 20 22:22:37 2003 @@ -27,12 +27,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. **************************************************************************/ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/common.h,v 1.6 2003/02/06 04:18:04 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/common.h,v 1.6.2.1 2003/10/21 02:22:37 dawes Exp $ */ /* * Authors: * Keith Whitwell - * David Dawes + * David Dawes * */ Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i810.h diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i810.h:1.38 xc/programs/Xserver/hw/xfree86/drivers/i810/i810.h:1.38.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/i810/i810.h:1.38 Tue Feb 25 23:19:36 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/i810/i810.h Mon Oct 20 22:22:37 2003 @@ -27,12 +27,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. **************************************************************************/ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i810.h,v 1.38 2003/02/26 04:19:36 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i810.h,v 1.38.2.1 2003/10/21 02:22:37 dawes Exp $ */ /* * Authors: * Keith Whitwell - * David Dawes + * David Dawes * */ Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i810.man diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i810.man:1.3 xc/programs/Xserver/hw/xfree86/drivers/i810/i810.man:1.3.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/i810/i810.man:1.3 Mon Feb 17 14:19:02 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/i810/i810.man Mon Oct 20 22:22:37 2003 @@ -1,4 +1,4 @@ -.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i810.man,v 1.3 2003/02/17 19:19:02 dawes Exp $ +.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i810.man,v 1.3.2.1 2003/10/21 02:22:37 dawes Exp $ .\" shorthand for double quote that works everywhere. .ds q \N'34' .TH I810 __drivermansuffix__ __vendorversion__ @@ -16,9 +16,12 @@ .B i810 is an XFree86 driver for Intel integrated graphics chipsets. The driver supports depths 8, 15, 16 and 24. All visual types are -supported in depth 8, other depths only support TrueColor. The driver -supports hardware accelerated 3D via the Direct Rendering Infrastructure (DRI), -but only in depth 16 for the i810/i815 and depths 16 and 24 for later chipsets. +supported in depth 8. For the i810/i815 other depths support the +TrueColor and DirectColor visuals. For the 830M and later, only the +TrueColor visual is supported for depths greater than 8. The driver +supports hardware accelerated 3D via the Direct Rendering Infrastructure +(DRI), but only in depth 16 for the i810/i815 and depths 16 and 24 for +the 830M and later. .SH SUPPORTED HARDWARE .B i810 supports the i810, i810-DC100, i810e, i815, 830M, 845G, 852GM, 855GM, @@ -30,7 +33,16 @@ driver. .PP The Intel 8xx family of integrated graphics chipsets has a unified memory -architecture and uses system memory for video ram. By default 8 Megabytes +architecture and uses system memory for video ram. For the i810 and +i815 familiy of chipset, operating system support for allocating system +memory for video use is required in order to use this driver. For the +830M and later, this is required in order for the driver to use more +video ram than has been pre-allocated at boot time by the BIOS. This +is usually achieved with an "agpgart" or "agp" kernel driver. Linux, +and recent versions of FreeBSD, OpenBSD and NetBSD have such kernel +drivers available. +.PP +By default 8 Megabytes of system memory are used for graphics. For the 830M and later, the default is 8 Megabytes when DRI is not enabled and 32 Megabytes with DRI is enabled. This amount may be changed with the @@ -38,8 +50,18 @@ entry in the config file .B "Device" section. It may be set to any reasonable value up to 64MB for older -chipsets or 128MB for newer chipets. Note that increasing this value -will reduce the amount of system memory available for other applications. +chipsets or 128MB for newer chipets. It is advisable to check the XFree86 +log file to check if any features have been disabled because of insufficient +video memory. In particular, DRI support or tiling mode may be disabled +with insufficient video memory. Either of these being disabled will +reduce performance for 3D applications. Note however, that increasing +this value too much will reduce the amount of system memory available +for other applications. +.PP +The driver makes use of the video BIOS to program video modes for the 830M +and later. This limits the video modes that can be used to those provided +by the video BIOS, and to those that will fit into the amount of video memory +that the video BIOS is aware of. .PP The following driver .B Options @@ -50,7 +72,8 @@ .TP .BI "Option \*qSWCursor\*q \*q" boolean \*q Disable or enable software cursor. Default: software cursor is disable -and a hardware cursor is used. +and a hardware cursor is used for configurations where the hardware cursor +is available. .TP .BI "Option \*qColorKey\*q \*q" integer \*q This sets the default pixel value for the YUV video overlay key. @@ -61,8 +84,47 @@ 2D acceleration and video. Decreasing this amount leaves more for 3D textures. Increasing it can improve 2D performance at the expense of 3D performance. -Default: 256 to 768 depending on the resolution and depth. +Default: depends on the resolution, depth, and available video memory. The +driver attempts to allocate at least enough to hold two DVD-sized YUV buffers +by default. The default used for a specific configuration can be found +by examining the XFree86 log file. +.TP +.BI "Option \*qDRI\*q \*q" boolean \*q +Disable or enable DRI support. +Default: DRI is enabled for configurations where it is supported. +.PP +The following driver +.B Options +are supported for the i810 and i815 chipsets: +.TP +.BI "Option \*qDDC\*q \*q" boolean \*q +Disable or enable DDC support. +Default: enabled. +.TP +.BI "Option \*qDac6Bit\*q \*q" boolean \*q +Enable or disable 6-bits per RGB for 8-bit modes. +Default: 8-bits per RGB for 8-bit modes. +.TP +.BI "Option \*qXvMCSurfaces\*q \*q" integer \*q +This option enables XvMC. The integer parameter specifies the number of +surfaces to use. Valid values are 6 and 7. +Default: XvMC is disabled. + +.PP +The following driver +.B Options +are supported for the 830M and later chipsets: +.TP +.BI "Option \*qVideoKey\*q \*q" integer \*q +This is the same as the +.B \*qColorKey\*q +option described above. It is provided for compatibility with most +other drivers. +.TP +.BI "Option \*qXVideo\*q \*q" boolean \*q +Disable or enable XVideo support. +Default: XVideo is enabled for configurations where it is supported. .SH "SEE ALSO" Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i810_dri.c diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i810_dri.c:1.33 xc/programs/Xserver/hw/xfree86/drivers/i810/i810_dri.c:1.33.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/i810/i810_dri.c:1.33 Mon Dec 9 20:27:04 2002 +++ xc/programs/Xserver/hw/xfree86/drivers/i810/i810_dri.c Thu May 22 13:58:55 2003 @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i810_dri.c,v 1.33 2002/12/10 01:27:04 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i810_dri.c,v 1.33.2.1 2003/05/22 17:58:55 dawes Exp $ */ /* * Reformatted with GNU indent (2.2.8), using the following options: * @@ -490,7 +490,11 @@ DRICloseScreen(pScreen); return FALSE; } else { - back_size = i810_pitches[pitch_idx] * (pScrn->virtualY + 4); + /* for tiled memory to work, the buffer needs to have the + * number of lines as a multiple of 16 (the tile size), + * - airlied */ + int lines = (pScrn->virtualY + 15) / 16 * 16; + back_size = i810_pitches[pitch_idx] * lines; back_size = ((back_size + 4096 - 1) / 4096) * 4096; } Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i830.h diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i830.h:1.7 xc/programs/Xserver/hw/xfree86/drivers/i810/i830.h:1.7.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/i810/i830.h:1.7 Tue Jan 28 17:47:09 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/i810/i830.h Mon Oct 20 22:22:38 2003 @@ -27,12 +27,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. **************************************************************************/ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830.h,v 1.7 2003/01/28 22:47:09 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830.h,v 1.7.2.1 2003/10/21 02:22:38 dawes Exp $ */ /* * Authors: * Keith Whitwell - * David Dawes + * David Dawes * */ Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_cursor.c diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i830_cursor.c:1.6 xc/programs/Xserver/hw/xfree86/drivers/i810/i830_cursor.c:1.6.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/i810/i830_cursor.c:1.6 Wed Dec 18 10:49:01 2002 +++ xc/programs/Xserver/hw/xfree86/drivers/i810/i830_cursor.c Mon Oct 20 22:22:38 2003 @@ -26,7 +26,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. **************************************************************************/ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_cursor.c,v 1.6 2002/12/18 15:49:01 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_cursor.c,v 1.6.2.1 2003/10/21 02:22:38 dawes Exp $ */ /* * Reformatted with GNU indent (2.2.8), using the following options: @@ -44,7 +44,7 @@ /* * Authors: * Keith Whitwell - * David Dawes + * David Dawes * */ Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_dri.c diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i830_dri.c:1.12 xc/programs/Xserver/hw/xfree86/drivers/i810/i830_dri.c:1.12.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/i810/i830_dri.c:1.12 Sat Feb 8 16:26:57 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/i810/i830_dri.c Mon Oct 20 22:22:38 2003 @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_dri.c,v 1.12 2003/02/08 21:26:57 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_dri.c,v 1.12.2.1 2003/10/21 02:22:38 dawes Exp $ */ /************************************************************************** Copyright 2001 VA Linux Systems Inc., Fremont, California. @@ -42,7 +42,7 @@ /* * Authors: Jeff Hartmann - * David Dawes + * David Dawes * Keith Whitwell */ @@ -823,6 +823,9 @@ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; I830Ptr pI830 = I830PTR(pScrn); + if (!pScrn->vtSema) + return; + if (syncType == DRI_3D_SYNC && oldContextType == DRI_2D_CONTEXT && newContextType == DRI_2D_CONTEXT) { ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_dri.h diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i830_dri.h:1.5 xc/programs/Xserver/hw/xfree86/drivers/i810/i830_dri.h:1.5.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/i810/i830_dri.h:1.5 Mon Dec 9 20:27:05 2002 +++ xc/programs/Xserver/hw/xfree86/drivers/i810/i830_dri.h Mon Oct 20 22:22:38 2003 @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_dri.h,v 1.5 2002/12/10 01:27:05 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_dri.h,v 1.5.2.1 2003/10/21 02:22:38 dawes Exp $ */ #ifndef _I830_DRI_H #define _I830_DRI_H @@ -131,7 +131,7 @@ unsigned int TexState3[I830_TEX_SETUP_SIZE]; unsigned int TexBlendState3[I830_TEXBLEND_SIZE]; unsigned int TexBlendStateWordsUsed3; - + unsigned int StippleState[I830_STP_SETUP_SIZE]; } I830SAREARec, *I830SAREAPtr; Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c:1.27 xc/programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c:1.27.2.3 --- xc/programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c:1.27 Fri Feb 14 12:12:42 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c Fri Dec 19 18:41:32 2003 @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c,v 1.27 2003/02/14 17:12:42 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c,v 1.27.2.3 2003/12/19 23:41:32 dawes Exp $ */ /************************************************************************** Copyright 2001 VA Linux Systems Inc., Fremont, California. @@ -43,7 +43,7 @@ /* * Authors: Jeff Hartmann * Abraham van der Merwe - * David Dawes + * David Dawes */ /* @@ -1562,7 +1562,7 @@ "VideoRam reduced to %d kByte (limited to aperture size)\n", pScrn->videoRam); } - + if (mem > 0) { /* * If the reserved (BIOS accessible) memory is less than the desired @@ -1589,13 +1589,11 @@ else pI830->newBIOSMemSize = KB(ROUND_DOWN_TO(pScrn->videoRam - reserve, 64)); - if (pI830->vbeInfo->TotalMemory * 64 < pI830->newBIOSMemSize / 1024) { xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Will attempt to tell the BIOS that there is " "%d kB VideoRAM\n", pI830->newBIOSMemSize / 1024); - if (SaveBIOSMemSize(pScrn)) { pI830->overrideBIOSMemSize = TRUE; SetBIOSMemSize(pScrn, pI830->newBIOSMemSize); @@ -1677,8 +1675,8 @@ else pI830->CursorNeedsPhysical = FALSE; - /* Force ring buffer to be in low memory for the 845G. */ - if (IS_845G(pI830)) + /* Force ring buffer to be in low memory for the 845G and later. */ + if (IS_845G(pI830) || IS_I85X(pI830) || IS_I865G(pI830)) pI830->NeedRingBufferLow = TRUE; /* @@ -2238,16 +2236,17 @@ #endif pVesa = pI830->vesa; - /* This save/restore method doesn't work for 845G BIOS */ /* - * XXX If it's fixed in production versions, this could be removed. - * + * This save/restore method doesn't work for 845G BIOS, or for some + * other platforms. Enable it in all cases. + */ + /* * KW: This may have been because of the behaviour I've found on my * board: The 'save' command actually modifies the interrupt * registers, turning off the irq & breaking the kernel module * behaviour. */ - if (!I845G_VBE_WORKAROUND || !IS_845G(pI830)) { + if (!I845G_VBE_WORKAROUND) { CARD16 imr = INREG16(IMR); CARD16 ier = INREG16(IER); CARD16 hwstam = INREG16(HWSTAM); @@ -3234,9 +3233,7 @@ I830BIOSLeaveVT(int scrnIndex, int flags) { ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; -#ifdef XF86DRI I830Ptr pI830 = I830PTR(pScrn); -#endif DPRINTF(PFX, "Leave VT\n"); @@ -3257,6 +3254,8 @@ RestoreHWState(pScrn); RestoreBIOSMemSize(pScrn); I830UnbindGARTMemory(pScrn); + if (pI830->AccelInfoRec) + pI830->AccelInfoRec->NeedToSync = FALSE; } /* @@ -3386,35 +3385,36 @@ DPRINTF(PFX, "I830BIOSSaveScreen: %d, on is %s\n", mode, BOOLTOSTRING(on)); - for (i = 0; i < MAX_DISPLAY_PIPES; i++) { - if (i == 0) { - ctrl = DSPACNTR; - base = DSPABASE; - } else { - ctrl = DSPBCNTR; - base = DSPBADDR; + if (pScrn->vtSema) { + for (i = 0; i < MAX_DISPLAY_PIPES; i++) { + if (i == 0) { + ctrl = DSPACNTR; + base = DSPABASE; + } else { + ctrl = DSPBCNTR; + base = DSPBADDR; + } + if (pI830->planeEnabled[i]) { + temp = INREG(ctrl); + if (on) + temp |= DISPLAY_PLANE_ENABLE; + else + temp &= ~DISPLAY_PLANE_ENABLE; + OUTREG(ctrl, temp); + /* Flush changes */ + temp = INREG(base); + OUTREG(base, temp); + } } - if (pI830->planeEnabled[i]) { - temp = INREG(ctrl); + + if (pI830->CursorInfoRec && !pI830->SWCursor && pI830->cursorOn) { if (on) - temp |= DISPLAY_PLANE_ENABLE; + pI830->CursorInfoRec->ShowCursor(pScrn); else - temp &= ~DISPLAY_PLANE_ENABLE; - OUTREG(ctrl, temp); - /* Flush changes */ - temp = INREG(base); - OUTREG(base, temp); + pI830->CursorInfoRec->HideCursor(pScrn); + pI830->cursorOn = TRUE; } } - - if (pI830->CursorInfoRec && !pI830->SWCursor && pI830->cursorOn) { - if (on) - pI830->CursorInfoRec->ShowCursor(pScrn); - else - pI830->CursorInfoRec->HideCursor(pScrn); - pI830->cursorOn = TRUE; - } - return TRUE; } @@ -3584,3 +3584,5 @@ pScrn->ValidMode = I830ValidMode; pScrn->PMEvent = I830PMEvent; } + + Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_memory.c diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i830_memory.c:1.6 xc/programs/Xserver/hw/xfree86/drivers/i810/i830_memory.c:1.6.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/i810/i830_memory.c:1.6 Fri Feb 7 21:26:56 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/i810/i830_memory.c Mon Oct 20 22:22:39 2003 @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_memory.c,v 1.6 2003/02/08 02:26:56 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_memory.c,v 1.6.2.1 2003/10/21 02:22:39 dawes Exp $ */ /************************************************************************** Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. @@ -44,7 +44,7 @@ /* * Authors: * Keith Whitwell - * David Dawes + * David Dawes * */ @@ -1298,7 +1298,7 @@ "MakeTiles failed for the back buffer.\n"); } } - + } #endif /* XF86DRI */ Index: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_video.c diff -u xc/programs/Xserver/hw/xfree86/drivers/i810/i830_video.c:1.6 xc/programs/Xserver/hw/xfree86/drivers/i810/i830_video.c:1.6.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/i810/i830_video.c:1.6 Wed Feb 5 23:18:05 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/i810/i830_video.c Mon Oct 20 22:22:39 2003 @@ -1,6 +1,6 @@ #define VIDEO_DEBUG 0 /*************************************************************************** - + Copyright 2000 Intel Corporation. All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a @@ -24,7 +24,7 @@ THE USE OR OTHER DEALINGS IN THE SOFTWARE. **************************************************************************/ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_video.c,v 1.6 2003/02/06 04:18:05 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_video.c,v 1.6.2.1 2003/10/21 02:22:39 dawes Exp $ */ /* * Reformatted with GNU indent (2.2.8), using the following options: @@ -46,7 +46,7 @@ * * Authors: * Alan Hourihane - * David Dawes + * David Dawes * * Derived from i810 Xv driver: * @@ -1013,7 +1013,7 @@ SetCoeffRegs(&coeffs[i][tap2Fix], mantSize + 2, pCoeff, pos); else SetCoeffRegs(&coeffs[i][tap2Fix], mantSize, pCoeff, pos); - + sum = 0.0; for (j = 0; j < taps; j++) sum += coeffs[i][j]; @@ -1175,7 +1175,7 @@ scaleChanged = TRUE; overlay->YRGBSCALE = newval; } - + newval = (xscaleIntUV << 16) | ((xscaleFractUV & 0xFFF) << 3) | ((yscaleFractUV & 0xFFF) << 20); if (newval != overlay->UVSCALE) { @@ -1190,14 +1190,14 @@ } /* Recalculate coefficients if the scaling changed. */ - + /* * Only Horizontal coefficients so far. */ if (scaleChanged) { double fCutoffY; double fCutoffUV; - + fCutoffY = xscaleFract / 4096.0; fCutoffUV = xscaleFractUV / 4096.0; Index: xc/programs/Xserver/hw/xfree86/drivers/mga/Imakefile diff -u xc/programs/Xserver/hw/xfree86/drivers/mga/Imakefile:1.46 xc/programs/Xserver/hw/xfree86/drivers/mga/Imakefile:1.46.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/mga/Imakefile:1.46 Mon Feb 17 12:06:42 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/mga/Imakefile Sat May 24 18:22:11 2003 @@ -1,4 +1,4 @@ -XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/mga/Imakefile,v 1.46 2003/02/17 17:06:42 dawes Exp $ +XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/mga/Imakefile,v 1.46.2.1 2003/05/24 22:22:11 sven Exp $ XCOMM XCOMM This is an Imakefile for the MGA driver. XCOMM @@ -68,7 +68,7 @@ OBJS = $(MGAOBJS) $(MGAHALOBJS) #if defined(XF86DriverSDK) -INCLUDES = -I. -I../../include +INCLUDES = -I. -I../../include $(MGAHALINCLUDES) #else INCLUDES = -I. $(MGAHALINCLUDES) -I$(XF86COMSRC) -I$(XF86OSSRC) \ -I$(SERVERSRC)/fb \ @@ -133,6 +133,20 @@ InstallDriverSDKNonExecFile(mga_video.c,$(DRIVERSDKDIR)/drivers/mga) InstallDriverSDKNonExecFile(mga_halmod.c,$(DRIVERSDKDIR)/drivers/mga) InstallDriverSDKNonExecFile(mga_common.h,$(DRIVERSDKDIR)/drivers/mga) +InstallDriverSDKNonExecFile(mga_dripriv.h,$(DRIVERSDKDIR)/drivers/mga) +InstallDriverSDKNonExecFile(mga_dri.h,$(DRIVERSDKDIR)/drivers/mga) +InstallDriverSDKNonExecFile(mga_merge.h,$(DRIVERSDKDIR)/drivers/mga) +InstallDriverSDKNonExecFile(mga_merge.c,$(DRIVERSDKDIR)/drivers/mga) +InstallDriverSDKNonExecFile(mga_g450pll.c,$(DRIVERSDKDIR)/drivers/mga) +InstallDriverSDKNonExecFile(mga_dh.c,$(DRIVERSDKDIR)/drivers/mga) +InstallDriverSDKNonExecFile(mga_esc.c,$(DRIVERSDKDIR)/drivers/mga) +InstallDriverSDKNonExecFile(mga_dri.c,$(DRIVERSDKDIR)/drivers/mga) +InstallDriverSDKNonExecFile(mgareg_flags.h,$(DRIVERSDKDIR)/drivers/mga) +InstallDriverSDKNonExecFile(mga_sarea.h,$(DRIVERSDKDIR)/drivers/mga) +InstallDriverSDKNonExecFile(mga_ucode.h,$(DRIVERSDKDIR)/drivers/mga) +InstallDriverSDKNonExecFile(client.h,$(DRIVERSDKDIR)/drivers/mga) +InstallDriverSDKNonExecFile(clientlx.c,$(DRIVERSDKDIR)/drivers/mga) +InstallDriverSDKNonExecFile(HALlib/binding.h,$(DRIVERSDKDIR)/drivers/mga/HALlib) InstallDriverSDKObjectModule(mga,$(DRIVERSDKMODULEDIR),drivers) #if BuildMatroxHal Index: xc/programs/Xserver/hw/xfree86/drivers/neomagic/Imakefile diff -u xc/programs/Xserver/hw/xfree86/drivers/neomagic/Imakefile:1.13 xc/programs/Xserver/hw/xfree86/drivers/neomagic/Imakefile:1.13.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/neomagic/Imakefile:1.13 Mon Feb 17 12:06:43 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/neomagic/Imakefile Sat May 24 18:22:12 2003 @@ -1,4 +1,4 @@ -XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/neomagic/Imakefile,v 1.13 2003/02/17 17:06:43 dawes Exp $ +XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/neomagic/Imakefile,v 1.13.2.1 2003/05/24 22:22:12 sven Exp $ #define IHaveModules #include @@ -56,5 +56,7 @@ InstallDriverSDKNonExecFile(neo_shadow.c,$(DRIVERSDKDIR)/drivers/neomagic) InstallDriverSDKNonExecFile(neo_macros.h,$(DRIVERSDKDIR)/drivers/neomagic) InstallDriverSDKNonExecFile(neo_reg.h,$(DRIVERSDKDIR)/drivers/neomagic) +InstallDriverSDKNonExecFile(neo_video.c,$(DRIVERSDKDIR)/drivers/neomagic) +InstallDriverSDKNonExecFile(neo_video.h,$(DRIVERSDKDIR)/drivers/neomagic) InstallDriverSDKObjectModule(neomagic,$(DRIVERSDKMODULEDIR),drivers) Index: xc/programs/Xserver/hw/xfree86/drivers/newport/Imakefile diff -u xc/programs/Xserver/hw/xfree86/drivers/newport/Imakefile:1.5 xc/programs/Xserver/hw/xfree86/drivers/newport/Imakefile:1.5.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/newport/Imakefile:1.5 Mon Dec 9 23:03:00 2002 +++ xc/programs/Xserver/hw/xfree86/drivers/newport/Imakefile Sat May 24 18:22:12 2003 @@ -1,4 +1,4 @@ -XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/newport/Imakefile,v 1.5 2002/12/10 04:03:00 dawes Exp $ +XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/newport/Imakefile,v 1.5.2.1 2003/05/24 22:22:12 sven Exp $ #define IHaveModules #include @@ -30,9 +30,9 @@ ObjectModuleTarget(newport,$(OBJS)) InstallObjectModule(newport,$(MODULEDIR),drivers) -InstallNamedNonExec($(XF86CONFIG),$(XF86CONFIG),$(LIBDIR)) #if !defined(XF86DriverSDK) +InstallNamedNonExec($(XF86CONFIG),$(XF86CONFIG),$(LIBDIR)) InstallModuleManPage(newport) #endif @@ -43,6 +43,7 @@ InstallDriverSDKNonExecFile(newport_regs.c,$(DRIVERSDKDIR)/drivers/newport) InstallDriverSDKNonExecFile(newport_cmap.c,$(DRIVERSDKDIR)/drivers/newport) InstallDriverSDKNonExecFile(newport_shadow.c,$(DRIVERSDKDIR)/drivers/newport) +InstallDriverSDKNonExecFile(newport_cursor.c,$(DRIVERSDKDIR)/drivers/newport) InstallDriverSDKNonExecFile(newport_regs.h,$(DRIVERSDKDIR)/drivers/newport) InstallDriverSDKNonExecFile(newport.h,$(DRIVERSDKDIR)/drivers/newport) Index: xc/programs/Xserver/hw/xfree86/drivers/nsc/Imakefile diff -u xc/programs/Xserver/hw/xfree86/drivers/nsc/Imakefile:1.6 xc/programs/Xserver/hw/xfree86/drivers/nsc/Imakefile:1.6.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/nsc/Imakefile:1.6 Wed Feb 19 05:10:49 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/nsc/Imakefile Sat May 24 18:22:13 2003 @@ -1,4 +1,4 @@ -XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nsc/Imakefile,v 1.6 2003/02/19 10:10:49 alanh Exp $ +XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nsc/Imakefile,v 1.6.2.1 2003/05/24 22:22:13 sven Exp $ XCOMM Imakefile for the National Semiconductor display driver XCOMM that is based on the durango code. XCOMM @@ -61,7 +61,7 @@ nsc_gx2_shadow.o $(I86OBJ) $(STBOBJS) $(DURANGOOBJS) #if defined(XF86DriverSDK) -INCLUDES = -I. -I../../include +INCLUDES = -I. -I../../include $(EXTINCLUDES) #else INCLUDES = -I. -I$(XF86COMSRC) -I$(XF86OSSRC) -I$(SERVERSRC)/Xext \ -I$(SERVERSRC)/mfb -I$(SERVERSRC)/mi \ @@ -138,6 +138,7 @@ InstallDriverSDKNonExecFile(gfx/gfx_rndr.c,$(DRIVERSDKDIR)/drivers/nsc/gfx) InstallDriverSDKNonExecFile(gfx/gfx_rtns.h,$(DRIVERSDKDIR)/drivers/nsc/gfx) InstallDriverSDKNonExecFile(gfx/gfx_tv.c,$(DRIVERSDKDIR)/drivers/nsc/gfx) +InstallDriverSDKNonExecFile(gfx/gfx_tv.h,$(DRIVERSDKDIR)/drivers/nsc/gfx) InstallDriverSDKNonExecFile(gfx/gfx_type.h,$(DRIVERSDKDIR)/drivers/nsc/gfx) InstallDriverSDKNonExecFile(gfx/gfx_vga.c,$(DRIVERSDKDIR)/drivers/nsc/gfx) InstallDriverSDKNonExecFile(gfx/gfx_vid.c,$(DRIVERSDKDIR)/drivers/nsc/gfx) @@ -155,11 +156,15 @@ InstallDriverSDKNonExecFile(gfx/tv_1200.c,$(DRIVERSDKDIR)/drivers/nsc/gfx) InstallDriverSDKNonExecFile(gfx/tv_fs450.c,$(DRIVERSDKDIR)/drivers/nsc/gfx) InstallDriverSDKNonExecFile(gfx/tv_fs450.h,$(DRIVERSDKDIR)/drivers/nsc/gfx) +InstallDriverSDKNonExecFile(gfx/tv_fs451.c,$(DRIVERSDKDIR)/drivers/nsc/gfx) +InstallDriverSDKNonExecFile(gfx/tv_geode.c,$(DRIVERSDKDIR)/drivers/nsc/gfx) InstallDriverSDKNonExecFile(gfx/vga_gu1.c,$(DRIVERSDKDIR)/drivers/nsc/gfx) InstallDriverSDKNonExecFile(gfx/vid_1200.c,$(DRIVERSDKDIR)/drivers/nsc/gfx) +InstallDriverSDKNonExecFile(gfx/vid_1400.c,$(DRIVERSDKDIR)/drivers/nsc/gfx) InstallDriverSDKNonExecFile(gfx/vid_5530.c,$(DRIVERSDKDIR)/drivers/nsc/gfx) InstallDriverSDKNonExecFile(gfx/vid_rdcl.c,$(DRIVERSDKDIR)/drivers/nsc/gfx) InstallDriverSDKNonExecFile(gfx/vip_1200.c,$(DRIVERSDKDIR)/drivers/nsc/gfx) +InstallDriverSDKNonExecFile(gfx/vip_1400.c,$(DRIVERSDKDIR)/drivers/nsc/gfx) InstallDriverSDKNonExecFile(panel/92xx.h,$(DRIVERSDKDIR)/drivers/nsc/panel) InstallDriverSDKNonExecFile(panel/cen9211.c,$(DRIVERSDKDIR)/drivers/nsc/panel) InstallDriverSDKNonExecFile(panel/cen9211.h,$(DRIVERSDKDIR)/drivers/nsc/panel) @@ -167,6 +172,8 @@ InstallDriverSDKNonExecFile(panel/dora9211.h,$(DRIVERSDKDIR)/drivers/nsc/panel) InstallDriverSDKNonExecFile(panel/drac9210.c,$(DRIVERSDKDIR)/drivers/nsc/panel) InstallDriverSDKNonExecFile(panel/drac9210.h,$(DRIVERSDKDIR)/drivers/nsc/panel) +InstallDriverSDKNonExecFile(panel/gx2_9211.c,$(DRIVERSDKDIR)/drivers/nsc/panel) +InstallDriverSDKNonExecFile(panel/gx2_9211.h,$(DRIVERSDKDIR)/drivers/nsc/panel) InstallDriverSDKNonExecFile(panel/panel.c,$(DRIVERSDKDIR)/drivers/nsc/panel) InstallDriverSDKNonExecFile(panel/panel.h,$(DRIVERSDKDIR)/drivers/nsc/panel) InstallDriverSDKNonExecFile(panel/platform.c,$(DRIVERSDKDIR)/drivers/nsc/panel) Index: xc/programs/Xserver/hw/xfree86/drivers/s3/Imakefile diff -u xc/programs/Xserver/hw/xfree86/drivers/s3/Imakefile:1.10 xc/programs/Xserver/hw/xfree86/drivers/s3/Imakefile:1.10.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/s3/Imakefile:1.10 Mon Feb 17 12:06:43 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/s3/Imakefile Sat May 24 18:22:13 2003 @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/s3/Imakefile,v 1.10 2003/02/17 17:06:43 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/s3/Imakefile,v 1.10.2.1 2003/05/24 22:22:13 sven Exp $ */ #define IHaveModules #include @@ -46,6 +46,7 @@ SpecialCObjectRule(s3_video,$(_NOOP_), -DS3_NEWMMIO) InstallDriverSDKNonExecFile(Imakefile,$(DRIVERSDKDIR)/drivers/s3) +InstallDriverSDKNonExecFile(newmmio.h,$(DRIVERSDKDIR)/drivers/s3) InstallDriverSDKNonExecFile(s3.h,$(DRIVERSDKDIR)/drivers/s3) InstallDriverSDKNonExecFile(s3_reg.h,$(DRIVERSDKDIR)/drivers/s3) InstallDriverSDKNonExecFile(s3_driver.c,$(DRIVERSDKDIR)/drivers/s3) @@ -57,4 +58,3 @@ InstallDriverSDKNonExecFile(s3_Trio64DAC.c,$(DRIVERSDKDIR)/drivers/s3) InstallDriverSDKNonExecFile(s3_IBMRGB.c,$(DRIVERSDKDIR)/drivers/s3) InstallDriverSDKNonExecFile(s3_Ti.c,$(DRIVERSDKDIR)/drivers/s3) - Index: xc/programs/Xserver/hw/xfree86/drivers/s3virge/Imakefile diff -u xc/programs/Xserver/hw/xfree86/drivers/s3virge/Imakefile:1.21 xc/programs/Xserver/hw/xfree86/drivers/s3virge/Imakefile:1.21.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/s3virge/Imakefile:1.21 Mon Feb 17 12:06:43 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/s3virge/Imakefile Sat May 24 18:22:14 2003 @@ -1,4 +1,4 @@ -XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/s3virge/Imakefile,v 1.21 2003/02/17 17:06:43 dawes Exp $ +XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/s3virge/Imakefile,v 1.21.2.1 2003/05/24 22:22:14 sven Exp $ /* * * Copyright 1995-1998 The XFree86 Project, Inc. @@ -63,5 +63,6 @@ InstallDriverSDKNonExecFile(s3v_macros.h,$(DRIVERSDKDIR)/drivers/s3virge) InstallDriverSDKNonExecFile(s3v_rop.h,$(DRIVERSDKDIR)/drivers/s3virge) InstallDriverSDKNonExecFile(s3v_shadow.c,$(DRIVERSDKDIR)/drivers/s3virge) +InstallDriverSDKNonExecFile(s3v_xv.c,$(DRIVERSDKDIR)/drivers/s3virge) InstallDriverSDKObjectModule(s3virge,$(DRIVERSDKMODULEDIR),drivers) Index: xc/programs/Xserver/hw/xfree86/drivers/s3virge/s3v_driver.c diff -u xc/programs/Xserver/hw/xfree86/drivers/s3virge/s3v_driver.c:1.86 xc/programs/Xserver/hw/xfree86/drivers/s3virge/s3v_driver.c:1.86.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/s3virge/s3v_driver.c:1.86 Mon Feb 3 21:20:50 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/s3virge/s3v_driver.c Sun Jun 1 18:13:00 2003 @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/s3virge/s3v_driver.c,v 1.86 2003/02/04 02:20:50 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/s3virge/s3v_driver.c,v 1.86.2.1 2003/06/01 22:13:00 alanh Exp $ */ /* Copyright (C) 1994-1999 The XFree86 Project, Inc. All Rights Reserved. @@ -1781,8 +1781,8 @@ VGAOUT8(vgaCRIndex, 0x93); save->CR93 = VGAIN8(vgaCRReg); } - if (ps3v->Chipset == S3_ViRGE_DXGX || S3_ViRGE_GX2_SERIES(ps3v->Chipset) || - S3_ViRGE_MX_SERIES(ps3v->Chipset)) { + if (ps3v->Chipset == S3_ViRGE_DXGX || S3_ViRGE_GX2_SERIES(ps3v->Chipset) || + S3_ViRGE_MX_SERIES(ps3v->Chipset) || S3_TRIO_3D_SERIES(ps3v->Chipset)) { VGAOUT8(vgaCRIndex, 0x90); save->CR90 = VGAIN8(vgaCRReg); VGAOUT8(vgaCRIndex, 0x91); @@ -2109,7 +2109,7 @@ VGAOUT8(vgaCRReg, restore->CR93); } if (ps3v->Chipset == S3_ViRGE_DXGX || S3_ViRGE_GX2_SERIES(ps3v->Chipset) || - S3_ViRGE_MX_SERIES(ps3v->Chipset)) { + S3_ViRGE_MX_SERIES(ps3v->Chipset) || S3_TRIO_3D_SERIES(ps3v->Chipset)) { VGAOUT8(vgaCRIndex, 0x90); VGAOUT8(vgaCRReg, restore->CR90); VGAOUT8(vgaCRIndex, 0x91); @@ -2268,7 +2268,6 @@ else VGAOUT8(vgaCRReg, cr3a); - if (xf86GetVerbosity() > 1) { xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, VERBLEV, "ViRGE driver: done restoring mode, dumping CR registers:\n"); Index: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.c diff -u xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.c:1.34 xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.c:1.34.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.c:1.34 Mon Feb 24 23:08:21 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.c Fri May 16 10:50:12 2003 @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.c,v 1.34 2003/02/25 04:08:21 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.c,v 1.34.2.1 2003/05/16 14:50:12 alanh Exp $ */ /* * vim: sw=4 ts=8 ai ic: * @@ -2090,9 +2090,19 @@ VGAOUT8(vgaCRIndex, 0x3a); VGAOUT8(vgaCRReg, cr3a); - if( Entering ) + if( Entering ) { + /* We reinit the engine here just as in the UseBIOS case + * as otherwise we lose performance because the engine + * isn't setup properly (Alan Hourihane - alanh@fairlite.demon.co.uk). + */ + SavageInitialize2DEngine(pScrn); SavageSetGBD(pScrn); + VGAOUT16(vgaCRIndex, 0x0140); + + SavageSetGBD(pScrn); + } + vgaHWProtect(pScrn, FALSE); return; Index: xc/programs/Xserver/hw/xfree86/drivers/sis/Imakefile diff -u xc/programs/Xserver/hw/xfree86/drivers/sis/Imakefile:1.31 xc/programs/Xserver/hw/xfree86/drivers/sis/Imakefile:1.31.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/sis/Imakefile:1.31 Mon Feb 17 12:06:44 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/sis/Imakefile Sat May 24 18:22:14 2003 @@ -1,4 +1,4 @@ -XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/Imakefile,v 1.31 2003/02/17 17:06:44 dawes Exp $ +XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/Imakefile,v 1.31.2.1 2003/05/24 22:22:14 sven Exp $ XCOMM XCOMM This is an Imakefile for the SIS driver. XCOMM @@ -73,6 +73,7 @@ InstallDriverSDKNonExecFile(sis300_accel.h,$(DRIVERSDKDIR)/drivers/sis) InstallDriverSDKNonExecFile(sis310_accel.c,$(DRIVERSDKDIR)/drivers/sis) InstallDriverSDKNonExecFile(sis310_accel.h,$(DRIVERSDKDIR)/drivers/sis) +InstallDriverSDKNonExecFile(sis_accel.h,$(DRIVERSDKDIR)/drivers/sis) InstallDriverSDKNonExecFile(sis_accel.c,$(DRIVERSDKDIR)/drivers/sis) InstallDriverSDKNonExecFile(init.c,$(DRIVERSDKDIR)/drivers/sis) InstallDriverSDKNonExecFile(init.h,$(DRIVERSDKDIR)/drivers/sis) @@ -103,5 +104,8 @@ InstallDriverSDKNonExecFile(sis_vga.c,$(DRIVERSDKDIR)/drivers/sis) InstallDriverSDKNonExecFile(sis_video.c,$(DRIVERSDKDIR)/drivers/sis) InstallDriverSDKNonExecFile(sis6326_video.c,$(DRIVERSDKDIR)/drivers/sis) +InstallDriverSDKNonExecFile(sis_accel.c,$(DRIVERSDKDIR)/drivers/sis) +InstallDriverSDKNonExecFile(vgatypes.h,$(DRIVERSDKDIR)/drivers/sis) +InstallDriverSDKNonExecFile(vstruct.h,$(DRIVERSDKDIR)/drivers/sis) InstallDriverSDKObjectModule(sis,$(DRIVERSDKMODULEDIR),drivers) Index: xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile diff -u xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile:1.31 xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile:1.31.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile:1.31 Mon Feb 17 12:06:44 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile Sat May 24 18:22:14 2003 @@ -1,4 +1,4 @@ -XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile,v 1.31 2003/02/17 17:06:44 dawes Exp $ +XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile,v 1.31.2.1 2003/05/24 22:22:14 sven Exp $ XCOMM XCOMM This is an Imakefile for the TRIDENT driver. XCOMM @@ -62,5 +62,6 @@ InstallDriverSDKNonExecFile(tridentramdac.c,$(DRIVERSDKDIR)/drivers/trident) InstallDriverSDKNonExecFile(trident_video.c,$(DRIVERSDKDIR)/drivers/trident) InstallDriverSDKNonExecFile(tvga_dac.c,$(DRIVERSDKDIR)/drivers/trident) +InstallDriverSDKNonExecFile(xp_accel.c,$(DRIVERSDKDIR)/drivers/trident) InstallDriverSDKObjectModule(trident,$(DRIVERSDKMODULEDIR),drivers) Index: xc/programs/Xserver/hw/xfree86/drivers/vesa/Imakefile diff -u xc/programs/Xserver/hw/xfree86/drivers/vesa/Imakefile:1.6 xc/programs/Xserver/hw/xfree86/drivers/vesa/Imakefile:1.6.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/vesa/Imakefile:1.6 Mon Feb 17 12:06:44 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/vesa/Imakefile Sat May 24 18:22:15 2003 @@ -1,4 +1,4 @@ -XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/vesa/Imakefile,v 1.6 2003/02/17 17:06:44 dawes Exp $ +XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/vesa/Imakefile,v 1.6.2.1 2003/05/24 22:22:15 sven Exp $ #define IHaveModules #include @@ -40,6 +40,7 @@ InstallDriverSDKNonExecFile(Imakefile,$(DRIVERSDKDIR)/drivers/vesa) InstallDriverSDKNonExecFile(vesa.c,$(DRIVERSDKDIR)/drivers/vesa) +InstallDriverSDKNonExecFile(vesa.h,$(DRIVERSDKDIR)/drivers/vesa) InstallDriverSDKObjectModule(vesa,$(DRIVERSDKMODULEDIR),drivers) Index: xc/programs/Xserver/hw/xfree86/drivers/vmware/Imakefile diff -u xc/programs/Xserver/hw/xfree86/drivers/vmware/Imakefile:1.6 xc/programs/Xserver/hw/xfree86/drivers/vmware/Imakefile:1.6.2.1 --- xc/programs/Xserver/hw/xfree86/drivers/vmware/Imakefile:1.6 Mon Feb 17 12:06:45 2003 +++ xc/programs/Xserver/hw/xfree86/drivers/vmware/Imakefile Sat May 24 18:22:15 2003 @@ -1,4 +1,4 @@ -XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/vmware/Imakefile,v 1.6 2003/02/17 17:06:45 dawes Exp $ +XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/vmware/Imakefile,v 1.6.2.1 2003/05/24 22:22:15 sven Exp $ XCOMM XCOMM This is an Imakefile for the VMware virtual SVGA driver. XCOMM @@ -43,5 +43,20 @@ DependTarget() InstallDriverSDKNonExecFile(Imakefile,$(DRIVERSDKDIR)/drivers/vmware) +InstallDriverSDKNonExecFile(vmware.c,$(DRIVERSDKDIR)/drivers/vmware) +InstallDriverSDKNonExecFile(vmwarecurs.c,$(DRIVERSDKDIR)/drivers/vmware) +InstallDriverSDKNonExecFile(vmwarexaa.c,$(DRIVERSDKDIR)/drivers/vmware) +InstallDriverSDKNonExecFile(guest_os.h,$(DRIVERSDKDIR)/drivers/vmware) +InstallDriverSDKNonExecFile(includeCheck.h,$(DRIVERSDKDIR)/drivers/vmware) +InstallDriverSDKNonExecFile(svga_limits.h,$(DRIVERSDKDIR)/drivers/vmware) +InstallDriverSDKNonExecFile(svga_reg.h,$(DRIVERSDKDIR)/drivers/vmware) +InstallDriverSDKNonExecFile(svga_struct.h,$(DRIVERSDKDIR)/drivers/vmware) +InstallDriverSDKNonExecFile(vm_basic_types.h,$(DRIVERSDKDIR)/drivers/vmware) +InstallDriverSDKNonExecFile(vm_device_version.h,$(DRIVERSDKDIR)/drivers/vmware) +InstallDriverSDKNonExecFile(vmware.h,$(DRIVERSDKDIR)/drivers/vmware) +InstallDriverSDKNonExecFile(bits2pixels.c,$(DRIVERSDKDIR)/drivers/vmware) +InstallDriverSDKNonExecFile(bits2pixels.h,$(DRIVERSDKDIR)/drivers/vmware) +InstallDriverSDKNonExecFile(offscreen_manager.c,$(DRIVERSDKDIR)/drivers/vmware) +InstallDriverSDKNonExecFile(offscreen_manager.h,$(DRIVERSDKDIR)/drivers/vmware) InstallDriverSDKObjectModule(vmware,$(DRIVERSDKMODULEDIR),drivers) Index: xc/programs/Xserver/hw/xfree86/fbdevhw/fbdevhw.c diff -u xc/programs/Xserver/hw/xfree86/fbdevhw/fbdevhw.c:1.30 xc/programs/Xserver/hw/xfree86/fbdevhw/fbdevhw.c:1.30.2.1 --- xc/programs/Xserver/hw/xfree86/fbdevhw/fbdevhw.c:1.30 Mon Nov 25 09:05:00 2002 +++ xc/programs/Xserver/hw/xfree86/fbdevhw/fbdevhw.c Tue Aug 26 08:17:37 2003 @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/fbdevhw/fbdevhw.c,v 1.30 2002/11/25 14:05:00 eich Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/fbdevhw/fbdevhw.c,v 1.30.2.1 2003/08/26 12:17:37 daenzer Exp $ */ /* all driver need this */ #include "xf86.h" @@ -789,6 +789,11 @@ fbdevHWPtr fPtr = FBDEVHWPTR(pScrn); TRACE_ENTER("AdjustFrame"); + + if ( x < 0 || x + fPtr->var.xres > fPtr->var.xres_virtual || + y < 0 || y + fPtr->var.yres > fPtr->var.yres_virtual ) + return; + fPtr->var.xoffset = x; fPtr->var.yoffset = y; if (-1 == ioctl(fPtr->fd,FBIOPAN_DISPLAY,(void*)&fPtr->var)) Index: xc/programs/Xserver/hw/xfree86/os-support/Imakefile diff -u xc/programs/Xserver/hw/xfree86/os-support/Imakefile:3.56 xc/programs/Xserver/hw/xfree86/os-support/Imakefile:3.56.2.1 --- xc/programs/Xserver/hw/xfree86/os-support/Imakefile:3.56 Mon Feb 17 12:06:45 2003 +++ xc/programs/Xserver/hw/xfree86/os-support/Imakefile Sat May 24 18:22:16 2003 @@ -1,4 +1,4 @@ -XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/os-support/Imakefile,v 3.56 2003/02/17 17:06:45 dawes Exp $ +XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/os-support/Imakefile,v 3.56.2.1 2003/05/24 22:22:16 sven Exp $ @@ -119,3 +119,5 @@ InstallDriverSDKNonExecFile(xf86_ansic.h,$(DRIVERSDKINCLUDEDIR)) InstallDriverSDKNonExecFile(xf86_libc.h,$(DRIVERSDKINCLUDEDIR)) InstallDriverSDKNonExecFile(xf86drm.h,$(DRIVERSDKINCLUDEDIR)) +InstallDriverSDKNonExecFile(xf86drmCompat.h,$(DRIVERSDKINCLUDEDIR)) +InstallDriverSDKNonExecFile(assyntax.h,$(DRIVERSDKINCLUDEDIR)) Index: xc/programs/Xserver/hw/xfree86/os-support/xf86_libc.h diff -u xc/programs/Xserver/hw/xfree86/os-support/xf86_libc.h:3.56 xc/programs/Xserver/hw/xfree86/os-support/xf86_libc.h:3.56.2.1 --- xc/programs/Xserver/hw/xfree86/os-support/xf86_libc.h:3.56 Sat Feb 22 01:00:39 2003 +++ xc/programs/Xserver/hw/xfree86/os-support/xf86_libc.h Wed Oct 8 13:56:34 2003 @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/xf86_libc.h,v 3.56 2003/02/22 06:00:39 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/xf86_libc.h,v 3.56.2.1 2003/10/08 17:56:34 eich Exp $ */ @@ -71,7 +71,11 @@ typedef int xf86key_t; /* setjmp/longjmp */ +#if defined(__ia64__) +typedef int xf86jmp_buf[1024] __attribute__ ((aligned (16))); /* guarantees 128-bit alignment! */ +#else typedef int xf86jmp_buf[1024]; +#endif /* for setvbuf */ #define XF86_IONBF 1 Index: xc/programs/Xserver/hw/xfree86/vbe/Imakefile diff -u xc/programs/Xserver/hw/xfree86/vbe/Imakefile:1.1 xc/programs/Xserver/hw/xfree86/vbe/Imakefile:1.1.2.1 --- xc/programs/Xserver/hw/xfree86/vbe/Imakefile:1.1 Mon Feb 17 12:06:45 2003 +++ xc/programs/Xserver/hw/xfree86/vbe/Imakefile Sat May 24 18:22:16 2003 @@ -1,4 +1,4 @@ -XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/vbe/Imakefile,v 1.1 2003/02/17 17:06:45 dawes Exp $ +XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/vbe/Imakefile,v 1.1.2.1 2003/05/24 22:22:16 sven Exp $ /* @@ -33,4 +33,5 @@ InstallDriverSDKLibraryModule(vbe,$(DRIVERSDKMODULEDIR),.) InstallDriverSDKNonExecFile(vbe.h,$(DRIVERSDKINCLUDEDIR)) +InstallDriverSDKNonExecFile(vbeModes.h,$(DRIVERSDKINCLUDEDIR)) Index: xc/programs/Xserver/hw/xfree86/xaa/xaaPCache.c diff -u xc/programs/Xserver/hw/xfree86/xaa/xaaPCache.c:1.30 xc/programs/Xserver/hw/xfree86/xaa/xaaPCache.c:1.30.10.1 --- xc/programs/Xserver/hw/xfree86/xaa/xaaPCache.c:1.30 Mon Sep 25 19:56:14 2000 +++ xc/programs/Xserver/hw/xfree86/xaa/xaaPCache.c Fri Aug 15 21:13:58 2003 @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/xaa/xaaPCache.c,v 1.30 2000/09/25 23:56:14 mvojkovi Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/xaa/xaaPCache.c,v 1.30.10.1 2003/08/16 01:13:58 dawes Exp $ */ #include "misc.h" #include "xf86.h" @@ -763,6 +763,7 @@ 1) Don't take up more than half the memory. 2) Don't bother if you can't get at least four. 3) Don't make more than MAX_512. + 4) Don't have any of there are no 256x256s. 256x256 - 1) Don't take up more than a quarter of the memory enless there @@ -786,6 +787,13 @@ else Target256 = ntotal >> 4; if(Target256 < 4) Target256 = 0; + if(Num512 && Num256 < 4) { + while(Num512 && Num256 < Target256) { + SubdivideList(&List512, &List256); + Num256 += 4; Num512--; + } + } + if(!Num512) { /* no room */ } else if((Num512 < 4) || (!Target512)) { while(Num512) { Index: xc/programs/Xserver/mi/Imakefile diff -u xc/programs/Xserver/mi/Imakefile:3.34 xc/programs/Xserver/mi/Imakefile:3.34.2.1 --- xc/programs/Xserver/mi/Imakefile:3.34 Wed May 22 17:38:31 2002 +++ xc/programs/Xserver/mi/Imakefile Sat May 24 18:22:17 2003 @@ -3,7 +3,7 @@ -XCOMM $XFree86: xc/programs/Xserver/mi/Imakefile,v 3.34 2002/05/22 21:38:31 herrb Exp $ +XCOMM $XFree86: xc/programs/Xserver/mi/Imakefile,v 3.34.2.1 2003/05/24 22:22:17 sven Exp $ #include @@ -85,3 +85,4 @@ InstallDriverSDKNonExecFile(mipointer.h,$(DRIVERSDKINCLUDEDIR)) InstallDriverSDKNonExecFile(mipointrst.h,$(DRIVERSDKINCLUDEDIR)) InstallDriverSDKNonExecFile(mizerarc.h,$(DRIVERSDKINCLUDEDIR)) +InstallDriverSDKNonExecFile(micoord.h,$(DRIVERSDKINCLUDEDIR)) Index: xc/programs/Xserver/os/access.c diff -u xc/programs/Xserver/os/access.c:3.42 xc/programs/Xserver/os/access.c:3.42.2.1 --- xc/programs/Xserver/os/access.c:3.42 Sun Jul 7 16:11:52 2002 +++ xc/programs/Xserver/os/access.c Sun May 25 06:44:39 2003 @@ -45,7 +45,7 @@ SOFTWARE. ******************************************************************/ -/* $XFree86: xc/programs/Xserver/os/access.c,v 3.42 2002/07/07 20:11:52 herrb Exp $ */ +/* $XFree86: xc/programs/Xserver/os/access.c,v 3.42.2.1 2003/05/25 10:44:39 herrb Exp $ */ #ifdef WIN32 #include @@ -730,6 +730,7 @@ if (ifr->ifa_addr.sa_family == AF_DECnet) continue; #endif /* DNETCONN */ + len = sizeof(*(ifr->ifa_addr)); family = ConvertAddr(ifr->ifa_addr, &len, (pointer *)&addr); if (family == -1 || family == FamilyLocal) continue; Index: xc/programs/Xserver/render/Imakefile diff -u xc/programs/Xserver/render/Imakefile:1.10 xc/programs/Xserver/render/Imakefile:1.10.2.1 --- xc/programs/Xserver/render/Imakefile:1.10 Fri Nov 22 21:38:15 2002 +++ xc/programs/Xserver/render/Imakefile Sat May 24 18:22:17 2003 @@ -1,4 +1,4 @@ -XCOMM $XFree86: xc/programs/Xserver/render/Imakefile,v 1.10 2002/11/23 02:38:15 keithp Exp $ +XCOMM $XFree86: xc/programs/Xserver/render/Imakefile,v 1.10.2.1 2003/05/24 22:22:17 sven Exp $ #include SRCS = animcur.c \ @@ -36,3 +36,9 @@ NormalLintTarget($(SRCS)) DependTarget() + +InstallDriverSDKNonExecFile(glyphstr.h,$(DRIVERSDKINCLUDEDIR)) +InstallDriverSDKNonExecFile(mipict.h,$(DRIVERSDKINCLUDEDIR)) +InstallDriverSDKNonExecFile(picture.h,$(DRIVERSDKINCLUDEDIR)) +InstallDriverSDKNonExecFile(picturestr.h,$(DRIVERSDKINCLUDEDIR)) + Index: xc/programs/mkfontscale/mkfontscale.c diff -u xc/programs/mkfontscale/mkfontscale.c:1.4 xc/programs/mkfontscale/mkfontscale.c:1.4.2.1 --- xc/programs/mkfontscale/mkfontscale.c:1.4 Wed Feb 12 22:04:07 2003 +++ xc/programs/mkfontscale/mkfontscale.c Wed Oct 8 13:56:35 2003 @@ -19,7 +19,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/* $XFree86: xc/programs/mkfontscale/mkfontscale.c,v 1.4 2003/02/13 03:04:07 dawes Exp $ */ +/* $XFree86: xc/programs/mkfontscale/mkfontscale.c,v 1.4.2.1 2003/10/08 17:56:35 eich Exp $ */ #include #include @@ -390,8 +390,10 @@ if(ftrc) continue; - if((face->face_flags & FT_FACE_FLAG_SCALABLE) == 0) + if((face->face_flags & FT_FACE_FLAG_SCALABLE) == 0) { + FT_Done_Face(face); continue; + } found = 0; @@ -549,6 +551,7 @@ encoding->value); } free(filename); + FT_Done_Face(face); } entries = reverseList(entries); fprintf(fontscale, "%d\n", listLength(entries)); Index: xc/programs/twm/events.c diff -u xc/programs/twm/events.c:1.12 xc/programs/twm/events.c:1.12.4.1 --- xc/programs/twm/events.c:1.12 Fri Dec 14 15:01:06 2001 +++ xc/programs/twm/events.c Thu Jun 12 02:24:22 2003 @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/twm/events.c,v 1.12 2001/12/14 20:01:06 dawes Exp $ */ +/* $XFree86: xc/programs/twm/events.c,v 1.12.4.1 2003/06/12 06:24:22 herrb Exp $ */ /*****************************************************************************/ /* @@ -350,7 +350,7 @@ void HandleEvents() { - while (!TimeToYield) + while (TRUE) { if (enter_flag && !QLength(dpy)) { if (enter_win && enter_win != raise_win) { @@ -369,12 +369,6 @@ else XtDispatchEvent (&Event); } - if (dpy) - { - Reborder (CurrentTime); - XCloseDisplay(dpy); - } - exit(0); } Index: xc/programs/twm/list.c diff -u xc/programs/twm/list.c:1.8 xc/programs/twm/list.c:1.8.2.1 --- xc/programs/twm/list.c:1.8 Tue Sep 24 17:00:27 2002 +++ xc/programs/twm/list.c Thu Jun 12 02:24:22 2003 @@ -48,7 +48,7 @@ /** TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE **/ /** OR PERFORMANCE OF THIS SOFTWARE. **/ /*****************************************************************************/ -/* $XFree86: xc/programs/twm/list.c,v 1.8 2002/09/24 21:00:27 tsi Exp $ */ +/* $XFree86: xc/programs/twm/list.c,v 1.8.2.1 2003/06/12 06:24:22 herrb Exp $ */ /********************************************************************** @@ -110,7 +110,7 @@ twmrc_error_prefix(); fprintf (stderr, "unable to allocate %ld bytes for name_list\n", (unsigned long)sizeof(name_list)); - Done(0); + Done(NULL, NULL); } nptr->next = *list_head; Index: xc/programs/twm/menus.c diff -u xc/programs/twm/menus.c:1.16 xc/programs/twm/menus.c:1.16.2.1 --- xc/programs/twm/menus.c:1.16 Sat Oct 19 16:04:20 2002 +++ xc/programs/twm/menus.c Thu Jun 12 02:24:22 2003 @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/twm/menus.c,v 1.16 2002/10/19 20:04:20 herrb Exp $ */ +/* $XFree86: xc/programs/twm/menus.c,v 1.16.2.1 2003/06/12 06:24:22 herrb Exp $ */ /*****************************************************************************/ /* @@ -1007,7 +1007,7 @@ int x, y; Bool center; { - int WindowNameOffset, WindowNameCount; + int WindowNameCount; TwmWindow **WindowNames; TwmWindow *tmp_win2,*tmp_win3; int i; @@ -1033,37 +1033,38 @@ menu->mapped = NEVER_MAPPED; AddToMenu(menu, "TWM Windows", NULLSTR, NULL, F_TITLE,NULLSTR,NULLSTR); - WindowNameOffset=(char *)Scr->TwmRoot.next->name - - (char *)Scr->TwmRoot.next; for(tmp_win = Scr->TwmRoot.next , WindowNameCount=0; tmp_win != NULL; tmp_win = tmp_win->next) WindowNameCount++; - WindowNames = - (TwmWindow **)malloc(sizeof(TwmWindow *)*WindowNameCount); - WindowNames[0] = Scr->TwmRoot.next; - for(tmp_win = Scr->TwmRoot.next->next , WindowNameCount=1; - tmp_win != NULL; - tmp_win = tmp_win->next,WindowNameCount++) + if (WindowNameCount != 0) { - tmp_win2 = tmp_win; - for (i=0;iTwmRoot.next; + for(tmp_win = Scr->TwmRoot.next->next , WindowNameCount=1; + tmp_win != NULL; + tmp_win = tmp_win->next,WindowNameCount++) { - if ((*compar)(tmp_win2->name,WindowNames[i]->name) < 0) + tmp_win2 = tmp_win; + for (i=0;iname,WindowNames[i]->name) < 0) + { + tmp_win3 = tmp_win2; + tmp_win2 = WindowNames[i]; + WindowNames[i] = tmp_win3; + } } + WindowNames[WindowNameCount] = tmp_win2; } - WindowNames[WindowNameCount] = tmp_win2; - } - for (i=0; iname, (char *)WindowNames[i], - NULL, F_POPUP,NULL,NULL); + for (i=0; iname, (char *)WindowNames[i], + NULL, F_POPUP,NULL,NULL); + } + free(WindowNames); } - free(WindowNames); MakeMenu(menu); } @@ -1236,17 +1237,22 @@ Window w; TwmWindow *tmp_win; { - int lastx, lasty, width, height, bw2; - int namelen; + int lastx, lasty, bw2; XEvent event; +#if 0 + int namelen; + int width, height; namelen = strlen (tmp_win->name); +#endif bw2 = tmp_win->frame_bw * 2; AddingW = tmp_win->attr.width + bw2; AddingH = tmp_win->attr.height + tmp_win->title_height + bw2; +#if 0 width = (SIZE_HINDENT + MyFont_TextWidth (&Scr->SizeFont, tmp_win->name, namelen)); height = Scr->SizeFont.height + SIZE_VINDENT * 2; +#endif XGetGeometry(dpy, w, &JunkRoot, &origDragX, &origDragY, (unsigned int *)&DragWidth, (unsigned int *)&DragHeight, &JunkBW, &JunkDepth); @@ -1255,7 +1261,7 @@ XQueryPointer (dpy, Scr->Root, &JunkRoot, &JunkChild, &JunkX, &JunkY, &AddingX, &AddingY, &JunkMask); -/***** +#if 0 Scr->SizeStringOffset = width + MyFont_TextWidth(&Scr->SizeFont, ": ", 2); XResizeWindow (dpy, Scr->SizeWindow, Scr->SizeStringOffset + @@ -1263,16 +1269,16 @@ MyFont_DrawImageString (dpy, Scr->SizeWindow, &Scr->SizeFont, Scr->NormalGC, width, SIZE_VINDENT + Scr->SizeFont.ascent, ": ", 2); -*****/ +#endif lastx = -10000; lasty = -10000; -/***** +#if 0 MoveOutline(Scr->Root, origDragX - JunkBW, origDragY - JunkBW, DragWidth * JunkBW, DragHeight * JunkBW, tmp_win->frame_bw, tmp_win->title_height); -*****/ +#endif MenuStartResize(tmp_win, origDragX, origDragY, DragWidth, DragHeight); while (TRUE) { @@ -2303,7 +2309,7 @@ break; case F_QUIT: - Done(0); + Done(NULL, NULL); break; case F_PRIORITY: Index: xc/programs/twm/session.c diff -u xc/programs/twm/session.c:3.8 xc/programs/twm/session.c:3.8.4.1 --- xc/programs/twm/session.c:3.8 Fri Dec 14 15:01:10 2001 +++ xc/programs/twm/session.c Thu Jun 12 02:24:22 2003 @@ -25,7 +25,7 @@ Author: Ralph Mor, X Consortium ******************************************************************************/ -/* $XFree86: xc/programs/twm/session.c,v 3.8 2001/12/14 20:01:10 dawes Exp $ */ +/* $XFree86: xc/programs/twm/session.c,v 3.8.4.1 2003/06/12 06:24:22 herrb Exp $ */ #include @@ -977,7 +977,7 @@ { SmcCloseConnection (smcConn, 0, NULL); XtRemoveInput (iceInputId); - Done(0); + Done(NULL, NULL); } Index: xc/programs/twm/twm.c diff -u xc/programs/twm/twm.c:3.12 xc/programs/twm/twm.c:3.12.4.1 --- xc/programs/twm/twm.c:3.12 Fri Dec 14 15:01:10 2001 +++ xc/programs/twm/twm.c Thu Jun 12 02:24:22 2003 @@ -59,7 +59,7 @@ * 27-Oct-87 Thomas E. LaStrange File created * 10-Oct-90 David M. Sternlicht Storing saved colors on root ***********************************************************************/ -/* $XFree86: xc/programs/twm/twm.c,v 3.12 2001/12/14 20:01:10 dawes Exp $ */ +/* $XFree86: xc/programs/twm/twm.c,v 3.12.4.1 2003/06/12 06:24:22 herrb Exp $ */ #include #include @@ -85,6 +85,7 @@ #include XtAppContext appContext; /* Xt application context */ +XtSignalId si; Display *dpy = NULL; /* which display are we talking to */ Window ResizeWindow; /* the window we are resizing */ @@ -99,11 +100,11 @@ ScreenInfo *Scr = NULL; /* the cur and prev screens */ int PreviousScreen; /* last screen that we were on */ int FirstScreen; /* TRUE ==> first screen of display */ -volatile Bool TimeToYield = FALSE; /* TRUE ==> exit requested */ Bool PrintErrorMessages = False; /* controls error messages */ static int RedirectError; /* TRUE ==> another window manager running */ static int TwmErrorHandler ( Display *dpy, XErrorEvent *event ); /* for settting RedirectError */ static int CatchRedirectError ( Display *dpy, XErrorEvent *event ); /* for everything else */ +static SIGNAL_T sigHandler(int); char Info[INFO_LINES][INFO_SIZE]; /* info strings to print */ int InfoLines; char *InitFile = NULL; @@ -235,8 +236,9 @@ } #define newhandler(sig) \ - if (signal (sig, SIG_IGN) != SIG_IGN) (void) signal (sig, Done) + if (signal (sig, SIG_IGN) != SIG_IGN) (void) signal (sig, sigHandler) + newhandler (SIGINT); newhandler (SIGHUP); newhandler (SIGQUIT); @@ -269,6 +271,8 @@ XtToolkitInitialize (); appContext = XtCreateApplicationContext (); + si = XtAppAddSignal(appContext, Done, NULL); + if (!(dpy = XtOpenDisplay (appContext, display_name, "twm", "twm", NULL, 0, &zero, NULL))) { fprintf (stderr, "%s: unable to open display \"%s\"\n", @@ -825,26 +829,6 @@ } -/*********************************************************************** - * - * Procedure: - * Done - cleanup and exit twm - * - * Returned Value: - * none - * - * Inputs: - * none - * - * Outputs: - * none - * - * Special Considerations: - * none - * - *********************************************************************** - */ - void Reborder (time) Time time; @@ -872,13 +856,42 @@ SetFocus ((TwmWindow*)NULL, time); } -SIGNAL_T -Done(int sig) +static SIGNAL_T +sigHandler(int sig) { - TimeToYield = True; + XtNoticeSignal(si); SIGNAL_RETURN; } +/*********************************************************************** + * + * Procedure: + * Done - cleanup and exit twm + * + * Returned Value: + * none + * + * Inputs: + * none + * + * Outputs: + * none + * + * Special Considerations: + * none + * + *********************************************************************** + */ +void +Done(XtPointer client_data, XtSignalId *si) +{ + if (dpy) + { + Reborder(CurrentTime); + XCloseDisplay(dpy); + } + exit(0); +} /* * Error Handlers. If a client dies, we'll get a BadWindow error (except for Index: xc/programs/twm/twm.h diff -u xc/programs/twm/twm.h:3.12 xc/programs/twm/twm.h:3.12.4.1 --- xc/programs/twm/twm.h:3.12 Fri Dec 14 15:01:10 2001 +++ xc/programs/twm/twm.h Thu Jun 12 02:24:22 2003 @@ -60,7 +60,7 @@ * 28-Oct-87 Thomas E. LaStrange File created * 10-Oct-90 David M. Sternlicht Storeing saved colors on root ***********************************************************************/ -/* $XFree86: xc/programs/twm/twm.h,v 3.12 2001/12/14 20:01:10 dawes Exp $ */ +/* $XFree86: xc/programs/twm/twm.h,v 3.12.4.1 2003/06/12 06:24:22 herrb Exp $ */ #ifndef _TWM_ #define _TWM_ @@ -352,7 +352,7 @@ extern void CreateFonts ( void ); extern void RestoreWithdrawnLocation ( TwmWindow *tmp ); extern void Reborder( Time time); -extern SIGNAL_T Done( int sig ); +extern void Done( XtPointer, XtSignalId * ); extern void ComputeCommonTitleOffsets ( void ); extern void ComputeTitleLocation ( TwmWindow *tmp ); extern void ComputeWindowTitleOffsets ( TwmWindow *tmp_win, int width, Bool squeeze ); @@ -399,7 +399,6 @@ extern Pixmap CreateMenuIcon ( int height, unsigned int *widthp, unsigned int *heightp ); extern Bool ErrorOccurred; -extern volatile Bool TimeToYield; extern XErrorEvent LastErrorEvent; #define ResetError() (ErrorOccurred = False) Index: xc/programs/xdm/Imakefile diff -u xc/programs/xdm/Imakefile:3.52 xc/programs/xdm/Imakefile:3.52.2.1 --- xc/programs/xdm/Imakefile:3.52 Sat Dec 7 15:31:04 2002 +++ xc/programs/xdm/Imakefile Wed Sep 17 01:58:16 2003 @@ -3,7 +3,7 @@ -XCOMM $XFree86: xc/programs/xdm/Imakefile,v 3.52 2002/12/07 20:31:04 herrb Exp $ +XCOMM $XFree86: xc/programs/xdm/Imakefile,v 3.52.2.1 2003/09/17 05:58:16 herrb Exp $ #define IHaveSubdirs #define PassCDebugFlags 'CDEBUGFLAGS=$(CDEBUGFLAGS)' @@ -13,7 +13,7 @@ #endif #ifndef SharedLibXdmGreet -#define SharedLibXdmGreet (HasSharedLibraries && (defined(AlphaArchitecture) || SystemV4)) +#define SharedLibXdmGreet (HasSharedLibraries && !defined(LinuxArchitecture) && (defined(AlphaArchitecture) || SystemV4)) #endif #ifndef BuildBoth @@ -43,6 +43,12 @@ KRBIVLIB = KrbIVLibraries #endif +#if HasKrbIV +KRBIV_DEFINES = KrbIVDefines +KRBIV_INCLUDES = KrbIVIncludes +KRBIVLIB = KrbIVLibraries +#endif + #if HasKrb5 KRB5_DEFINES = Krb5Defines KRB5_INCLUDE = Krb5Includes @@ -50,12 +56,23 @@ KRB5SRCS = krb5auth.c #endif +#if !HasArc4Random +PRNGCSRCS = prngc.c +PRNGCOBJS = prngc.o +#endif + #if SharedLibXdmGreet GREET_DIR = greeter -#if SystemV4 || (SharedLibXdmGreet && (defined(LinuxArchitecture) || defined(NetBSDArchitecture) || defined(GNUMachArchitecture))) +#if (SystemV4 && !defined(SGIArchitecture)) || \ + (SharedLibXdmGreet && \ + (defined(LinuxArchitecture) || \ + defined(NetBSDArchitecture) || \ + defined(GNUMachArchitecture))) DLLIBRARY = DlLibrary #endif #else +XPM_DEFINES = -DXPM +GREETLIBS = $(XPMLIB) GREET_DEFINES = -DGREET_USER_STATIC $(KRBIV_DEFINES) $(KRBIV_INCLUDES) GREETSRCS = greet.c verify.c Login.c GREETOBJS = greet.o verify.o Login.o @@ -74,8 +91,6 @@ XINLIBS = $(XINERAMALIB) #endif -XPM_DEFINES = -DXPM - /* This is correct for Linux and FreeBSD */ #if HasPam PAM_LIBRARIES = PamLibraries @@ -131,14 +146,8 @@ FRAGILE_DEFINES = -DFRAGILE_DEV_MEM #endif -#if defined(NetBSDArchitecture) && \ - ((OSMajorVersion > 1) || \ - (OSMajorVersion == 1 && OSMinorVersion > 3)) -RANDOM_DEFINES = -DDEV_RANDOM=\"/dev/urandom\" -#endif - -#ifdef OpenBSDArchitecture -RANDOM_DEFINES = -DARC4_RANDOM +#ifdef RandomDefines +RANDOM_DEFINES = RandomDefines #endif #if HasVFork @@ -159,9 +168,20 @@ PROCTITLE_DEFINES = -DHAS_SETPROCTITLE #endif -#if !HasSnprintf -SNPRINTFSRCS = snprintf.c -SNPRINTFOBJS = snprintf.o +#undef HasSnprintf +#define HasSnprintf NO + +#if HasSnprintf +SNPRINTF_DEFINES = -DHAS_SNPRINTF +#endif + +#ifdef HasSunC +#if HasSunC +XCOMM auth.c & chooser.c must be compiled with -Xa (ANSI compatible) instead +XCOMM of -Xc (strict ANSI compliance) in order to access the definition for +XCOMM struct lifreq, which uses "long long" type variables. +LIFREQ_FLAGS = -Xa +#endif #endif SYS_LIBRARIES = $(SYS_LIBRARIES1) $(SYS_LIBRARIES2) $(SYS_LIBRARIES3) @@ -172,7 +192,7 @@ INCLUDES = $(KRB5_INCLUDE) DEPLIBS = $(DEPXMULIB) $(DEPXTOOLLIB) $(DEPXLIB) $(DEPXAUTHLIB) \ $(DEPXDMCPLIB) $(XINDEPLIBS) -LOCAL_LIBRARIES = $(XPMLIB) $(XMULIB) $(XTOOLLIB) $(XLIB) $(XAUTHLIB) \ +LOCAL_LIBRARIES = $(GREETLIBS) $(XMULIB) $(XTOOLLIB) $(XLIB) $(XAUTHLIB) \ $(XDMCPLIB) $(RPCLIB) $(PAM_LIBRARIES) $(DLLIBRARY) \ $(CRYPT_LIBRARIES) $(KRBIVLIB) $(XINLIBS) @@ -180,18 +200,16 @@ netaddr.c reset.c resource.c protodpy.c policy.c \ session.c socket.c streams.c util.c xdmcp.c \ mitauth.c \ - genauth.c access.c choose.c \ - $(XDMAUTHSRCS) $(RPCSRCS) $(KRB5SRCS) $(GREETSRCS) \ - $(SNPRINTFSRCS) + genauth.c access.c choose.c $(PRNGCSRCS) \ + $(XDMAUTHSRCS) $(RPCSRCS) $(KRB5SRCS) $(GREETSRCS) OBJS1 = auth.o daemon.o server.o dpylist.o dm.o error.o file.o \ netaddr.o reset.o resource.o protodpy.o policy.o \ session.o socket.o streams.o util.o xdmcp.o \ mitauth.o \ - genauth.o access.o choose.o \ - $(XDMAUTHOBJS) $(RPCOBJS) $(KRB5OBJS) $(GREETOBJS) \ - $(SNPRINTFOBJS) - SRCS2 = xdmshell.c - OBJS2 = xdmshell.o + genauth.o access.o choose.o $(PRNGCOBJS) \ + $(XDMAUTHOBJS) $(RPCOBJS) $(KRB5OBJS) $(GREETOBJS) + SRCS2 = xdmshell.c + OBJS2 = xdmshell.o #if BuildChooser SRCS3 = chooser.c OBJS3 = chooser.o @@ -235,6 +253,7 @@ -DOSMINORVERSION=$(OSMINORVERSION) \ $(XKB_CLIENT_DEFINES) $(USER_CONTEXT_DEFINES) \ $(XPM_DEFINES) $(XINERAMA_DEFINES) $(PROCTITLE_DEFINES) + EXTRAMANDEFS = $(RANDOM_DEFINES) XCOMM XCOMM Special definitions for compiling default resources; these parameters @@ -261,10 +280,16 @@ '-DDEF_GREETER_LIB="$(XDMDIR)/libXdmGreet.so"' ComplexProgramTarget_1(xdm,$(LOCAL_LIBRARIES),NullParameter) +#ifdef LinkConfDirectory LinkConfDirectory(xdm,.,xdm,.) #ifdef VarDbDirectory LinkConfDirectoryLong(xdm,xdm,authdir,authdir,$(CONFDIR),$(VARDBDIR)) #endif +#else +#ifdef VarDirectory +LinkVarDirectory(xdm,.,xdm,.) +#endif +#endif NormalProgramTarget(xdmshell,$(OBJS2),NullParameter,NullParameter,NullParameter) NormalProgramTarget(sessreg,$(OBJS4),NullParameter,NullParameter,NullParameter) InstallProgram(sessreg,$(BINDIR)) @@ -275,7 +300,7 @@ #endif #if BuildChooser -SpecialCObjectRule(chooser, $(ICONFIGFILES), $(SOCK_DEFINES)) +SpecialCObjectRule(chooser, $(ICONFIGFILES), $(SOCK_DEFINES) $(LIFREQ_FLAGS)) NormalProgramTarget(chooser,$(OBJS3),$(DEPLIBS3),$(LIBS3),NullParameter) InstallProgram(chooser,$(XDMDIR)) InstallAppDefaults(Chooser) @@ -285,7 +310,7 @@ InstallProgram(xdm-shadow,$(BINDIR)) #endif -SpecialCObjectRule(auth,$(ICONFIGFILES),$(SOCK_DEFINES)) +SpecialCObjectRule(auth,$(ICONFIGFILES),$(SOCK_DEFINES) $(LIFREQ_FLAGS)) SpecialCObjectRule(policy,$(ICONFIGFILES),$(_NOOP_)) SpecialCObjectRule(resource,$(ICONFIGFILES),$(RES_DEFINES)) SpecialCObjectRule(socket,$(ICONFIGFILES),$(SOCK_DEFINES)) @@ -306,10 +331,6 @@ #endif #endif /* !SharedLibXdmGreet */ -#if !HasSnprintf -LinkSourceFile(snprintf.c,$(LIBSRC)/misc) -#endif - #ifdef IHaveSubdirs MakeSubdirs($(SUBDIRS)) DependSubdirs($(SUBDIRS)) Index: xc/programs/xdm/access.c diff -u xc/programs/xdm/access.c:3.10 xc/programs/xdm/access.c:3.10.2.1 --- xc/programs/xdm/access.c:3.10 Tue Dec 10 18:36:43 2002 +++ xc/programs/xdm/access.c Wed Sep 17 01:58:16 2003 @@ -2,6 +2,7 @@ * $Xorg: access.c,v 1.5 2001/02/09 02:05:40 xorgcvs Exp $ * Copyright 1990, 1998 The Open Group +Copyright 2002 Sun Microsystems, Inc. All rights reserved. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that @@ -19,14 +20,14 @@ AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Except as contained in this notice, the name of The Open Group shall not be +Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. +in this Software without prior written authorization from the copyright holder. * * Author: Keith Packard, MIT X Consortium */ -/* $XFree86: xc/programs/xdm/access.c,v 3.10 2002/12/10 23:36:43 tsi Exp $ */ +/* $XFree86: xc/programs/xdm/access.c,v 3.10.2.1 2003/09/17 05:58:16 herrb Exp $ */ /* * Access control for XDMCP - keep a database of allowable display addresses @@ -53,12 +54,15 @@ #define CHOOSER_STRING "CHOOSER" #define BROADCAST_STRING "BROADCAST" #define NOBROADCAST_STRING "NOBROADCAST" +#define LISTEN_STRING "LISTEN" +#define WILDCARD_STRING "*" #define HOST_ALIAS 0 #define HOST_ADDRESS 1 #define HOST_BROADCAST 2 #define HOST_CHOOSER 3 #define HOST_NOBROADCAST 4 +#define HOST_ANYADDR 5 typedef struct _hostEntry { struct _hostEntry *next; @@ -67,11 +71,13 @@ char *aliasName; ARRAY8 hostAddress; } entry; + int hopCount; } HostEntry; #define DISPLAY_ALIAS 0 #define DISPLAY_PATTERN 1 #define DISPLAY_ADDRESS 2 +#define DISPLAY_LISTEN 3 typedef struct _displayEntry { struct _displayEntry *next; @@ -106,6 +112,7 @@ hostent = gethostbyname (localHostname()); XdmcpAllocARRAY8 (&localAddress, hostent->h_length); memmove( localAddress.data, hostent->h_addr, hostent->h_length); + } return &localAddress; } @@ -140,6 +147,9 @@ case DISPLAY_ADDRESS: XdmcpDisposeARRAY8 (&d->entry.displayAddress.clientAddress); break; + case DISPLAY_LISTEN: + /* do nothing - this case doesn't use the d->entry union */ + break; } for (h = d->hosts; h; h = next) { next = h->next; @@ -217,7 +227,8 @@ continue; } default: - *wordp++ = c; + if (wordp < &(wordBuffer[WORD_LEN])) + *wordp++ = c; break; } quoted = FALSE; @@ -230,13 +241,13 @@ { char *hostOrAlias; HostEntry *h; - struct hostent *hostent; tryagain: hostOrAlias = ReadWord (file, TRUE); if (!hostOrAlias) return NULL; h = (HostEntry *) malloc (sizeof (DisplayEntry)); + h->hopCount = 1; if (*hostOrAlias == ALIAS_CHARACTER) { h->type = HOST_ALIAS; @@ -259,24 +270,45 @@ { h->type = HOST_NOBROADCAST; } + else if (!strcmp (hostOrAlias, WILDCARD_STRING)) + { + h->type = HOST_ANYADDR; + h->entry.hostAddress.length = 0; + } else { + void *addr=NULL; + size_t addr_length=0; + struct hostent *hostent = gethostbyname (hostOrAlias); + char *hops = strrchr(hostOrAlias, '/'); + + if (hops) { + *(hops++) = '\0'; + h->hopCount = strtol(hops, NULL, 10); + if (h->hopCount < 1) + h->hopCount = 1; + } + + if (hostent) { + addr = &(hostent->h_addr); + addr_length = hostent->h_length; + } h->type = HOST_ADDRESS; - hostent = gethostbyname (hostOrAlias); - if (!hostent) + + if (!addr) { Debug ("No such host %s\n", hostOrAlias); LogError ("Access file \"%s\", host \"%s\" not found\n", accessFile, hostOrAlias); free ((char *) h); goto tryagain; } - if (!XdmcpAllocARRAY8 (&h->entry.hostAddress, hostent->h_length)) + if (!XdmcpAllocARRAY8 (&h->entry.hostAddress, addr_length)) { LogOutOfMem ("ReadHostEntry\n"); free ((char *) h); return NULL; } - memmove( h->entry.hostAddress.data, hostent->h_addr, hostent->h_length); + memmove( h->entry.hostAddress.data, addr, addr_length); } return h; } @@ -301,7 +333,6 @@ DisplayEntry *d; struct _display *display; HostEntry *h, **prev; - struct hostent *hostent; displayOrAlias = ReadWord (file, FALSE); if (!displayOrAlias) @@ -321,6 +352,10 @@ } strcpy (d->entry.aliasName, displayOrAlias); } + else if (!strcmp(displayOrAlias, LISTEN_STRING)) + { + d->type = DISPLAY_LISTEN; + } else { if (*displayOrAlias == NEGATE_CHARACTER) @@ -341,21 +376,33 @@ } else { + void *addr = NULL; + size_t addr_length = 0; + int addrtype = 0; + + struct hostent *hostent; + if ((hostent = gethostbyname (displayOrAlias)) == NULL) { + addr = &(hostent->h_addr); + addrtype = hostent->h_addrtype; + addr_length = hostent->h_length; + } + if (addr == NULL) + { LogError ("Access file %s, display %s unknown\n", accessFile, displayOrAlias); free ((char *) d); return NULL; } d->type = DISPLAY_ADDRESS; display = &d->entry.displayAddress; - if (!XdmcpAllocARRAY8 (&display->clientAddress, hostent->h_length)) + if (!XdmcpAllocARRAY8 (&display->clientAddress, addr_length)) { free ((char *) d); return NULL; } - memmove( display->clientAddress.data, hostent->h_addr, hostent->h_length); - switch (hostent->h_addrtype) + memmove( display->clientAddress.data, addr, addr_length); + switch (addrtype) { #ifdef AF_UNIX case AF_UNIX: @@ -388,6 +435,14 @@ } else if (h->type == HOST_NOBROADCAST) { FreeHostEntry (h); d->notBroadcast = 1; + } else if (h->type == HOST_ANYADDR) { + if (d->type == DISPLAY_LISTEN) { + *prev = h; + prev = &h->next; + } else { + Debug("Wildcard host specified in Xaccess for type other than LISTEN -- ignoring\n"); + FreeHostEntry (h); + } } else { *prev = h; prev = &h->next; @@ -574,6 +629,7 @@ { switch (d->type) { case DISPLAY_ALIAS: + case DISPLAY_LISTEN: continue; case DISPLAY_PATTERN: if (!clientName) @@ -628,6 +684,7 @@ { switch (d->type) { case DISPLAY_ALIAS: + case DISPLAY_LISTEN: continue; case DISPLAY_PATTERN: if (!clientName) @@ -675,6 +732,7 @@ { switch (d->type) { case DISPLAY_ALIAS: + case DISPLAY_LISTEN: continue; case DISPLAY_PATTERN: if (!clientName) @@ -734,6 +792,7 @@ continue; switch (d->type) { case DISPLAY_ALIAS: + case DISPLAY_LISTEN: continue; case DISPLAY_PATTERN: if (!clientName) @@ -759,4 +818,32 @@ && (type == BROADCAST_QUERY ? d->notBroadcast == 0 : 1); } +void ForEachListenAddr ( + ListenFunc listenfunction, + ListenFunc mcastfunction, + void **closure) +{ + DisplayEntry *d; + HostEntry *h; + int listenFound = 0; + + for (d = database; d != NULL ; d = d->next) + { + if (d->type == DISPLAY_LISTEN) { + listenFound = 1; + h = d->hosts; + if (h != NULL) { + (*listenfunction) (&h->entry.hostAddress, closure); + } + for (h = h->next; h != NULL; h = h->next) { + (*mcastfunction) (&h->entry.hostAddress, closure); + } + } + } + if (!listenFound) { + (*listenfunction) (NULL, closure); + } +} + + #endif /* XDMCP */ Index: xc/programs/xdm/auth.c diff -u xc/programs/xdm/auth.c:3.27 xc/programs/xdm/auth.c:3.27.2.1 --- xc/programs/xdm/auth.c:3.27 Tue Dec 10 17:37:17 2002 +++ xc/programs/xdm/auth.c Wed Sep 17 01:58:16 2003 @@ -26,7 +26,7 @@ from The Open Group. */ -/* $XFree86: xc/programs/xdm/auth.c,v 3.27 2002/12/10 22:37:17 tsi Exp $ */ +/* $XFree86: xc/programs/xdm/auth.c,v 3.27.2.1 2003/09/17 05:58:16 herrb Exp $ */ /* * xdm - display manager daemon @@ -88,7 +88,21 @@ #include #endif /* __GNU__ */ -#if ((defined(SVR4) && !defined(sun)) || defined(ISC)) && defined(SIOCGIFCONF) +/* Solaris provides an extended interface SIOCGLIFCONF. Other systems + * may have this as well, but the code has only been tested on Solaris + * so far, so we only enable it there. Other platforms may be added as + * needed. + * + * Test for Solaris commented out -- TSI @ UQV 2003.06.13 + */ +#ifdef SIOCGLIFCONF +/* #if defined(sun) */ +#define USE_SIOCGLIFCONF +/* #endif */ +#endif + +#if ((defined(SVR4) && !defined(sun)) || defined(ISC)) && \ + defined(SIOCGIFCONF) && !defined(USE_SIOCGLIFCONF) #define SYSV_SIOCGIFCONF #endif @@ -270,7 +284,7 @@ MakeServerAuthFile (struct display *d) { int len; -#ifdef SYSV +#if defined(SYSV) && !defined(SVR4) #define NAMELEN 14 #else #define NAMELEN 255 @@ -851,7 +865,13 @@ #else /* WINTCP */ -#ifdef SIOCGIFCONF +#if defined(SIOCGIFCONF) || defined (USE_SIOCGLIFCONF) + +#ifdef USE_SIOCGLIFCONF +#define ifr_type struct lifreq +#else +#define ifr_type struct ifreq +#endif /* Handle variable length ifreq in BNR2 and later */ #ifdef VARIABLE_IFREQ @@ -859,7 +879,7 @@ (p->ifr_addr.sa_len > sizeof (p->ifr_addr) ? \ p->ifr_addr.sa_len - sizeof (p->ifr_addr) : 0)) #else -#define ifr_size(p) (sizeof (struct ifreq)) +#define ifr_size(p) (sizeof (ifr_type)) #endif /* Define this host for access control. Find all the hosts the OS knows about @@ -869,42 +889,92 @@ DefineSelf (int fd, FILE *file, Xauth *auth) { char buf[2048], *cp, *cplim; - struct ifconf ifc; int len; char *addr; int family; - register struct ifreq *ifr; + register ifr_type *ifr; +#ifdef USE_SIOCGLIFCONF + int n; + void * bufptr = buf; + size_t buflen = sizeof(buf); + struct lifconf ifc; +#ifdef SIOCGLIFNUM + struct lifnum ifn; +#endif +#else + struct ifconf ifc; +#endif +#if defined(SIOCGLIFNUM) && defined(SIOCGLIFCONF) + ifn.lifn_family = AF_UNSPEC; + ifn.lifn_flags = 0; + if (ioctl (fd, (int) SIOCGLIFNUM, (char *) &ifn) < 0) + LogError ("Failed getting interface count"); + if (buflen < (ifn.lifn_count * sizeof(struct lifreq))) { + buflen = ifn.lifn_count * sizeof(struct lifreq); + bufptr = malloc(buflen); + } +#endif + +#ifdef USE_SIOCGLIFCONF + ifc.lifc_family = AF_UNSPEC; + ifc.lifc_flags = 0; + ifc.lifc_len = buflen; + ifc.lifc_buf = bufptr; + +#define IFC_IOCTL_REQ SIOCGLIFCONF +#define IFC_IFC_REQ ifc.lifc_req +#define IFC_IFC_LEN ifc.lifc_len +#define IFR_IFR_ADDR ifr->lifr_addr +#define IFR_IFR_NAME ifr->lifr_name + +#else ifc.ifc_len = sizeof (buf); ifc.ifc_buf = buf; - if (ifioctl (fd, SIOCGIFCONF, (char *) &ifc) < 0) - LogError ("Trouble getting network interface configuration"); +#define IFC_IOCTL_REQ SIOCGIFCONF #ifdef ISC #define IFC_IFC_REQ (struct ifreq *) ifc.ifc_buf #else #define IFC_IFC_REQ ifc.ifc_req #endif +#define IFC_IFC_LEN ifc.ifc_len +#define IFR_IFR_ADDR ifr->ifr_addr +#define IFR_IFR_NAME ifr->ifr_name +#endif - cplim = (char *) IFC_IFC_REQ + ifc.ifc_len; + if (ifioctl (fd, IFC_IOCTL_REQ, (char *) &ifc) < 0) { + LogError ("Trouble getting network interface configuration"); + +#ifdef USE_SIOCGLIFCONF + if (bufptr != buf) { + free(bufptr); + } +#endif + return; + } + + cplim = (char *) IFC_IFC_REQ + IFC_IFC_LEN; for (cp = (char *) IFC_IFC_REQ; cp < cplim; cp += ifr_size (ifr)) { - ifr = (struct ifreq *) cp; + ifr = (ifr_type *) cp; #ifdef DNETCONN /* * this is ugly but SIOCGIFCONF returns decnet addresses in * a different form from other decnet calls */ - if (ifr->ifr_addr.sa_family == AF_DECnet) { + if (IFR_IFR_ADDR.sa_family == AF_DECnet) { len = sizeof (struct dn_naddr); addr = (char *)ifr->ifr_addr.sa_data; family = FamilyDECnet; } else #endif { - if (ConvertAddr ((XdmcpNetaddr) &ifr->ifr_addr, &len, &addr) < 0) + family = ConvertAddr ((XdmcpNetaddr) &IFR_IFR_ADDR, &len, &addr); + if (family < 0) continue; + if (len == 0) { Debug ("Skipping zero length address\n"); @@ -917,14 +987,13 @@ * the local entry anyway, so this one can * be tossed. */ - if (len == 4 && + if (family == FamilyInternet && len == 4 && addr[0] == 127 && addr[1] == 0 && addr[2] == 0 && addr[3] == 1) { Debug ("Skipping localhost address\n"); continue; } - family = FamilyInternet; } Debug ("DefineSelf: write network address, length %d\n", len); writeAddr (family, len, addr, file, auth); Index: xc/programs/xdm/choose.c diff -u xc/programs/xdm/choose.c:3.15 xc/programs/xdm/choose.c:3.15.4.1 --- xc/programs/xdm/choose.c:3.15 Fri Dec 14 15:01:20 2001 +++ xc/programs/xdm/choose.c Wed Sep 17 01:58:16 2003 @@ -26,7 +26,7 @@ * Author: Keith Packard, MIT X Consortium */ -/* $XFree86: xc/programs/xdm/choose.c,v 3.15 2001/12/14 20:01:20 dawes Exp $ */ +/* $XFree86: xc/programs/xdm/choose.c,v 3.15.4.1 2003/09/17 05:58:16 herrb Exp $ */ /* * choose.c @@ -43,6 +43,7 @@ #include #include "dm_socket.h" +#include #ifndef X_NO_SYS_UN #ifndef Lynx @@ -200,16 +201,17 @@ { char *port; int portlen; - ARRAY8Ptr localAddress; + ARRAY8Ptr localAddress = getLocalAddress (); + port = NetaddrPort((XdmcpNetaddr)addr_buf, &portlen); result_buf[0] = netfamily >> 8; result_buf[1] = netfamily & 0xFF; result_buf[2] = port[0]; result_buf[3] = port[1]; - localAddress = getLocalAddress (); - memmove( (char *)result_buf+4, (char *)localAddress->data, 4); - result_len = 8; + memmove( (char *)result_buf+4, (char *)localAddress->data, + localAddress->length); + result_len = 4 + localAddress->length; } break; #ifdef AF_DECnet @@ -280,13 +282,17 @@ { ChoicePtr c; int insert; +#if 0 int found = 0; +#endif Debug ("Got indirect choice back\n"); for (c = choices; c; c = c->next) { if (XdmcpARRAY8Equal (clientAddress, &c->client) && connectionType == c->connectionType) { +#if 0 found = 1; +#endif break; } } Index: xc/programs/xdm/chooser.c diff -u xc/programs/xdm/chooser.c:3.24 xc/programs/xdm/chooser.c:3.24.4.1 --- xc/programs/xdm/chooser.c:3.24 Fri Dec 14 15:01:20 2001 +++ xc/programs/xdm/chooser.c Wed Sep 17 01:58:16 2003 @@ -26,7 +26,7 @@ * Author: Keith Packard, MIT X Consortium */ -/* $XFree86: xc/programs/xdm/chooser.c,v 3.24 2001/12/14 20:01:20 dawes Exp $ */ +/* $XFree86: xc/programs/xdm/chooser.c,v 3.24.4.1 2003/09/17 05:58:16 herrb Exp $ */ /* * Chooser - display a menu of names and let the user select one @@ -262,13 +262,16 @@ PingHosts (XtPointer closure, XtIntervalId *id) { HostAddr *hosts; + int sfd = socketFD; for (hosts = hostAddrdb; hosts; hosts = hosts->next) { if (hosts->type == QUERY) - XdmcpFlush (socketFD, &directBuffer, (XdmcpNetaddr) hosts->addr, hosts->addrlen); + XdmcpFlush (sfd, &directBuffer, + (XdmcpNetaddr) hosts->addr, hosts->addrlen); else - XdmcpFlush (socketFD, &broadcastBuffer, (XdmcpNetaddr) hosts->addr, hosts->addrlen); + XdmcpFlush (sfd, &broadcastBuffer, + (XdmcpNetaddr) hosts->addr, hosts->addrlen); } if (++pingTry < TRIES) XtAddTimeOut (PING_INTERVAL, PingHosts, (XtPointer) 0); @@ -354,7 +357,7 @@ struct hostent *hostent; char *host; - hostent = gethostbyaddr ((char *)hostAddr.data, hostAddr.length, AF_INET); + hostent = gethostbyaddr ((char *)hostAddr.data, hostAddr.length, addr->sa_family); if (hostent) { XdmcpDisposeARRAY8 (hostname); @@ -466,9 +469,10 @@ int saveHostname = 0; struct sockaddr addr; int addrlen; + int sfd = * (int *) closure; addrlen = sizeof (addr); - if (!XdmcpFill (socketFD, &buffer, (XdmcpNetaddr) &addr, &addrlen)) + if (!XdmcpFill (sfd, &buffer, (XdmcpNetaddr) &addr, &addrlen)) return; if (!XdmcpReadHeader (&buffer, &header)) return; @@ -486,7 +490,8 @@ if (header.length == 6 + authenticationName.length + hostname.length + status.length) { - if (AddHostname (&hostname, &status, &addr, header.opcode == (int) WILLING)) + if (AddHostname (&hostname, &status, (struct sockaddr *) &addr, + header.opcode == (int) WILLING)) saveHostname = 1; } } @@ -498,7 +503,8 @@ { if (header.length == 4 + hostname.length + status.length) { - if (AddHostname (&hostname, &status, &addr, header.opcode == (int) WILLING)) + if (AddHostname (&hostname, &status, (struct sockaddr *) &addr, + header.opcode == (int) WILLING)) saveHostname = 1; } @@ -673,12 +679,17 @@ } else { - - /* address as hex string, e.g., "12180022" (depreciated) */ + /* address as hex string, e.g., "12180022" (deprecated) */ if (strlen(name) == 8 && FromHex(name, (char *)&in_addr.sin_addr, strlen(name)) == 0) { in_addr.sin_family = AF_INET; + in_addr.sin_port = htons (XDM_UDP_PORT); +#ifdef BSD44SOCKETS + in_addr.sin_len = sizeof(in_addr); +#endif + RegisterHostaddr ((struct sockaddr *)&in_addr, sizeof (in_addr), + QUERY); } /* Per RFC 1123, check first for IP address in dotted-decimal form */ else if ((in_addr.sin_addr.s_addr = inet_addr(name)) != -1) @@ -718,12 +729,15 @@ else { - /* address as hex string, e.g., "12180022" (depreciated) */ + /* address as hex string, e.g., "12180022" (deprecated) */ if (strlen(name) == 8 && FromHex(name, (char *)&in_addr.sin_addr, strlen(name)) == 0) { in_addr.sin_family = AF_INET; - } + in_addr.sin_port = htons (XDM_UDP_PORT); + RegisterHostaddr ((struct sockaddr *)&in_addr, sizeof (in_addr), + QUERY); + } else { /* Per RFC 1123, check first for IP address in dotted-decimal form */ else if ((in_addr.sin_addr.s_addr = inet_addr(name)) != -1) in_addr.sin_family = AF_INET; @@ -740,6 +754,8 @@ in_addr.sin_port = htons (XDM_UDP_PORT); RegisterHostaddr ((struct sockaddr *)&in_addr, sizeof (in_addr), QUERY); + } + } } #endif /* __GNU__ */ @@ -830,7 +846,7 @@ #endif XtAddInput (socketFD, (XtPointer) XtInputReadMask, ReceivePacket, - (XtPointer) 0); + (XtPointer) &socketFD); while (*argv) { RegisterHostname (*argv); Index: xc/programs/xdm/dm.c diff -u xc/programs/xdm/dm.c:3.21 xc/programs/xdm/dm.c:3.21.2.1 --- xc/programs/xdm/dm.c:3.21 Sat Dec 7 15:31:04 2002 +++ xc/programs/xdm/dm.c Wed Sep 17 01:58:16 2003 @@ -26,7 +26,7 @@ from The Open Group. */ -/* $XFree86: xc/programs/xdm/dm.c,v 3.21 2002/12/07 20:31:04 herrb Exp $ */ +/* $XFree86: xc/programs/xdm/dm.c,v 3.21.2.1 2003/09/17 05:58:16 herrb Exp $ */ /* * xdm - display manager daemon @@ -73,7 +73,7 @@ #endif -#if defined(SVR4) && !defined(SCO) +#if defined(SVR4) && !defined(SCO) && !defined(sun) extern FILE *fdopen(); #endif @@ -86,7 +86,7 @@ static void StartDisplays (void); static void TerminateProcess (int pid, int signal); -int Rescan; +volatile int Rescan; static long ServersModTime, ConfigModTime, AccessFileModTime; int nofork_session = 0; @@ -157,7 +157,9 @@ snprintf(cmdbuf, sizeof(cmdbuf), "/bin/rm -f %s/authdir/authfiles/A*", authDir); system(cmdbuf); } - +#if!defined(ARC4_RANDOM) && !defined(DEV_RANDOM) + AddOtherEntropy (); +#endif #ifdef XDMCP init_session_id (); CreateWellKnownSockets (); @@ -177,9 +179,13 @@ SetAccessFileTime (); #ifdef XDMCP ScanAccessDatabase (); + UpdateListenSockets (); #endif ScanServers (); StartDisplays (); +#if !defined(ARC4_RANDOM) && !defined(DEV_RANDOM) + AddOtherEntropy(); +#endif (void) Signal (SIGHUP, RescanNotify); #ifndef UNRELIABLE_SIGNALS (void) Signal (SIGCHLD, ChildNotify); @@ -281,6 +287,7 @@ SetAccessFileTime (); #ifdef XDMCP ScanAccessDatabase (); + UpdateListenSockets (); #endif StartDisplays (); } @@ -339,6 +346,7 @@ LogInfo ("Rereading access file %s\n", accessFile); AccessFileModTime = statb.st_mtime; ScanAccessDatabase (); + UpdateListenSockets(); } } #endif @@ -517,6 +525,9 @@ " removing display %s\n",d->name); LogError("Server crash rate too high:" " removing display %s\n",d->name); +#if !defined(ARC4_RANDOM) && !defined(DEV_RANDOM) + AddTimerEntropy(); +#endif RemoveDisplay (d); } else d->lastCrash = Time; Index: xc/programs/xdm/dm.h diff -u xc/programs/xdm/dm.h:3.29 xc/programs/xdm/dm.h:3.29.2.1 --- xc/programs/xdm/dm.h:3.29 Fri May 31 14:46:10 2002 +++ xc/programs/xdm/dm.h Wed Sep 17 01:58:16 2003 @@ -26,7 +26,7 @@ from The Open Group. */ -/* $XFree86: xc/programs/xdm/dm.h,v 3.29 2002/05/31 18:46:10 dawes Exp $ */ +/* $XFree86: xc/programs/xdm/dm.h,v 3.29.2.1 2003/09/17 05:58:16 herrb Exp $ */ /* * xdm - display manager daemon @@ -116,6 +116,21 @@ #endif #endif +#ifdef USE_PAM +#include +#endif + +#ifdef CSRG_BASED +#include +#ifdef HAS_SETUSERCONTEXT +#include +#include +#ifdef USE_BSDAUTH +#include +#endif +#endif +#endif + # define waitCompose(sig,core,code) ((sig) * 256 + (core) * 128 + (code)) # define waitVal(w) waitCompose(waitSig(w), waitCore(w), waitCode(w)) @@ -186,6 +201,7 @@ int useChooser; /* Run the chooser for this display */ ARRAY8 clientAddr; /* for chooser picking */ CARD16 connectionType; /* ... */ + int xdmcpFd; #endif /* server management resources */ int serverAttempts; /* number of attempts at running X */ @@ -279,6 +295,7 @@ #endif typedef void (*ChooserFunc)(CARD16 connectionType, ARRAY8Ptr addr, char *closure); +typedef void (*ListenFunc)(ARRAY8Ptr addr, void **closure); struct verify_info { int uid; /* user id */ @@ -318,7 +335,12 @@ extern char *keyFile; extern char *accessFile; extern char **exportList; +#if !defined(ARC4_RANDOM) extern char *randomFile; +extern char *prngdSocket; +extern int prngdPort; +#endif + extern char *greeterLib; extern char *willing; extern int choiceTimeout; /* chooser choice timeout */ @@ -352,6 +374,8 @@ extern int ScanAccessDatabase (void); extern int UseChooser (ARRAY8Ptr clientAddress, CARD16 connectionType); extern void ForEachChooserHost (ARRAY8Ptr clientAddress, CARD16 connectionType, ChooserFunc function, char *closure); +extern void ForEachListenAddr(ListenFunc listenfunction, + ListenFunc mcastfcuntion, void **closure); /* in choose.c */ extern ARRAY8Ptr IndirectChoice (ARRAY8Ptr clientAddress, CARD16 connectionType); @@ -439,9 +463,12 @@ extern int WaitForServer (struct display *d); extern void ResetServer (struct display *d); -/* socket.c */ +/* socket.c or streams.c */ extern int GetChooserAddr (char *addr, int *lenp); extern void CreateWellKnownSockets (void); +extern void UpdateListenSockets (void); +extern void CloseListenSockets (void); +extern void ProcessListenSockets (fd_set *readmask); /* in util.c */ extern char *localHostname (void); @@ -467,6 +494,7 @@ extern void WaitForSomething (void); extern void init_session_id(void); extern void registerHostname(char *name, int namelen); +extern void ProcessRequestSocket(int fd); /* * CloseOnFork flags @@ -497,6 +525,11 @@ #define Jmp_buf sigjmp_buf #endif +#ifndef HAS_SNPRINTF +#include +#define snprintf XmuSnprintf +#endif + typedef SIGVAL (*SIGFUNC)(int); SIGVAL (*Signal(int, SIGFUNC Handler))(int); Index: xc/programs/xdm/dm_auth.h diff -u xc/programs/xdm/dm_auth.h:1.2 xc/programs/xdm/dm_auth.h:1.2.10.1 --- xc/programs/xdm/dm_auth.h:1.2 Wed May 31 03:15:11 2000 +++ xc/programs/xdm/dm_auth.h Wed Sep 17 01:58:16 2003 @@ -1,5 +1,5 @@ /* - * $XFree86: xc/programs/xdm/dm_auth.h,v 1.2 2000/05/31 07:15:11 eich Exp $ + * $XFree86: xc/programs/xdm/dm_auth.h,v 1.2.10.1 2003/09/17 05:58:16 herrb Exp $ */ /************************************************************ @@ -87,6 +87,14 @@ extern void SetUserAuthorization (struct display *d, struct verify_info *verify); /* genauth.c */ -extern void GenerateAuthData (char *auth, int len); +extern int GenerateAuthData (char *auth, int len); +#if !defined(ARC4_RANDOM) +extern void AddPreGetEntropy (void); +extern void AddOtherEntropy (void); +extern void AddTimerEntropy (void); +#endif + +/* prngc.c */ +extern int get_prngd_bytes(char *, int, unsigned short, char *); #endif /* _DM_AUTH_H_ */ Index: xc/programs/xdm/dpylist.c diff -u xc/programs/xdm/dpylist.c:1.5 xc/programs/xdm/dpylist.c:1.5.4.1 --- xc/programs/xdm/dpylist.c:1.5 Fri Dec 14 15:01:21 2001 +++ xc/programs/xdm/dpylist.c Wed Sep 17 01:58:16 2003 @@ -26,7 +26,7 @@ from The Open Group. */ -/* $XFree86: xc/programs/xdm/dpylist.c,v 1.5 2001/12/14 20:01:21 dawes Exp $ */ +/* $XFree86: xc/programs/xdm/dpylist.c,v 1.5.4.1 2003/09/17 05:58:16 herrb Exp $ */ /* * xdm - display manager daemon @@ -258,6 +258,7 @@ d->clientAddr.data = NULL; d->clientAddr.length = 0; d->connectionType = 0; + d->xdmcpFd = -1; #endif d->version = 1; /* registered with The Open Group */ displays = d; Index: xc/programs/xdm/genauth.c diff -u xc/programs/xdm/genauth.c:3.15 xc/programs/xdm/genauth.c:3.15.2.3 --- xc/programs/xdm/genauth.c:3.15 Sun Oct 6 14:12:29 2002 +++ xc/programs/xdm/genauth.c Fri Oct 17 17:37:45 2003 @@ -26,7 +26,7 @@ from The Open Group. */ -/* $XFree86: xc/programs/xdm/genauth.c,v 3.15 2002/10/06 18:12:29 herrb Exp $ */ +/* $XFree86: xc/programs/xdm/genauth.c,v 3.15.2.3 2003/10/17 21:37:45 herrb Exp $ */ /* * xdm - display manager daemon @@ -45,7 +45,13 @@ #include #define Time_t time_t +#ifdef HASXDMAUTH static unsigned char key[8]; +#endif + +#ifdef DEV_RANDOM +extern char *randomDevice; +#endif #ifdef HASXDMAUTH @@ -53,7 +59,10 @@ typedef struct auth_ks_struct { auth_cblock _; } auth_wrapper_schedule[16]; -extern void _XdmcpWrapperToOddParity(); +extern int _XdmcpAuthSetup(unsigned char *, auth_wrapper_schedule); +extern int _XdmcpAuthDoIt(unsigned char *, unsigned char *, + auth_wrapper_schedule, int); +extern void _XdmcpWrapperToOddParity(unsigned char *, unsigned char *); static void longtochars (long l, unsigned char *c) @@ -66,66 +75,293 @@ #endif -# define FILE_LIMIT 1024 /* no more than this many buffers */ +#ifdef POLL_DEV_RANDOM +#include +static int +pollRandomDevice (int fd) +{ + struct pollfd fds; + + fds.fd = fd; + fds.events = POLLIN | POLLRDNORM; + /* Wait up to 5 seconds for entropy to accumulate */ + return poll(&fds, 1, 5000); +} +#else +#define pollRandomDevice(fd) 1 +#endif + +#if !defined(ARC4_RANDOM) + +/* ####################################################################### */ + +/* + * Copyright Theodore Ts'o, 1994, 1995, 1996, 1997, 1998, 1999. All + * rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, and the entire permission notice in its entirety, + * including the disclaimer of warranties. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF + * WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ + +static unsigned int epool[32], erotate, eadd_ptr; + +static void +add_entropy (unsigned const int *in, int nwords) +{ + static unsigned const int twist_table[8] = { + 0, 0x3b6e20c8, 0x76dc4190, 0x4db26158, + 0xedb88320, 0xd6d6a3e8, 0x9b64c2b0, 0xa00ae278 }; + unsigned i, w; + int new_rotate; + + while (nwords--) { + w = *in++; + w = (w<>(32-erotate)) & 0xffffffff; + i = eadd_ptr = (eadd_ptr - 1) & 31; + new_rotate = erotate + 14; + if (i) + new_rotate = erotate + 7; + erotate = new_rotate & 31; + w ^= epool[(i + 26) & 31]; + w ^= epool[(i + 20) & 31]; + w ^= epool[(i + 14) & 31]; + w ^= epool[(i + 7) & 31]; + w ^= epool[(i + 1) & 31]; + w ^= epool[i]; + epool[i] = (w >> 3) ^ twist_table[w & 7]; + } +} + +/* ####################################################################### */ + +/* + * This code implements something close to the MD5 message-digest + * algorithm. This code is based on code written by Colin Plumb + * in 1993, no copyright is claimed. + * This code is in the public domain; do with it what you wish. + */ + +/* The four core functions - F1 is optimized somewhat */ +#define F1(x, y, z) (z ^ (x & (y ^ z))) +#define F2(x, y, z) F1 (z, x, y) +#define F3(x, y, z) (x ^ y ^ z) +#define F4(x, y, z) (y ^ (x | ~z)) + +/* This is the central step in the MD5 algorithm. */ +#define pmd5_step(f, w, x, y, z, data, s) \ + ( w += (f(x, y, z) + data) & 0xffffffff, w = w<>(32-s), w += x ) + +/* + * The core of the MD5 algorithm, this alters an existing MD5 hash to + * reflect the addition of 16 longwords of new data. + */ +static void +pmd5_hash (unsigned int *out, unsigned const int in[16]) +{ + unsigned int a, b, c, d; + + a = out[0]; + b = out[1]; + c = out[2]; + d = out[3]; + + pmd5_step(F1, a, b, c, d, in[0] + 0xd76aa478, 7); + pmd5_step(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); + pmd5_step(F1, c, d, a, b, in[2] + 0x242070db, 17); + pmd5_step(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); + pmd5_step(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); + pmd5_step(F1, d, a, b, c, in[5] + 0x4787c62a, 12); + pmd5_step(F1, c, d, a, b, in[6] + 0xa8304613, 17); + pmd5_step(F1, b, c, d, a, in[7] + 0xfd469501, 22); + pmd5_step(F1, a, b, c, d, in[8] + 0x698098d8, 7); + pmd5_step(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); + pmd5_step(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); + pmd5_step(F1, b, c, d, a, in[11] + 0x895cd7be, 22); + pmd5_step(F1, a, b, c, d, in[12] + 0x6b901122, 7); + pmd5_step(F1, d, a, b, c, in[13] + 0xfd987193, 12); + pmd5_step(F1, c, d, a, b, in[14] + 0xa679438e, 17); + pmd5_step(F1, b, c, d, a, in[15] + 0x49b40821, 22); + + pmd5_step(F2, a, b, c, d, in[1] + 0xf61e2562, 5); + pmd5_step(F2, d, a, b, c, in[6] + 0xc040b340, 9); + pmd5_step(F2, c, d, a, b, in[11] + 0x265e5a51, 14); + pmd5_step(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); + pmd5_step(F2, a, b, c, d, in[5] + 0xd62f105d, 5); + pmd5_step(F2, d, a, b, c, in[10] + 0x02441453, 9); + pmd5_step(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); + pmd5_step(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); + pmd5_step(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); + pmd5_step(F2, d, a, b, c, in[14] + 0xc33707d6, 9); + pmd5_step(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); + pmd5_step(F2, b, c, d, a, in[8] + 0x455a14ed, 20); + pmd5_step(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); + pmd5_step(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); + pmd5_step(F2, c, d, a, b, in[7] + 0x676f02d9, 14); + pmd5_step(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); + + pmd5_step(F3, a, b, c, d, in[5] + 0xfffa3942, 4); + pmd5_step(F3, d, a, b, c, in[8] + 0x8771f681, 11); + pmd5_step(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); + pmd5_step(F3, b, c, d, a, in[14] + 0xfde5380c, 23); + pmd5_step(F3, a, b, c, d, in[1] + 0xa4beea44, 4); + pmd5_step(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); + pmd5_step(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); + pmd5_step(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); + pmd5_step(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); + pmd5_step(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); + pmd5_step(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); + pmd5_step(F3, b, c, d, a, in[6] + 0x04881d05, 23); + pmd5_step(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); + pmd5_step(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); + pmd5_step(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); + pmd5_step(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); + + pmd5_step(F4, a, b, c, d, in[0] + 0xf4292244, 6); + pmd5_step(F4, d, a, b, c, in[7] + 0x432aff97, 10); + pmd5_step(F4, c, d, a, b, in[14] + 0xab9423a7, 15); + pmd5_step(F4, b, c, d, a, in[5] + 0xfc93a039, 21); + pmd5_step(F4, a, b, c, d, in[12] + 0x655b59c3, 6); + pmd5_step(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); + pmd5_step(F4, c, d, a, b, in[10] + 0xffeff47d, 15); + pmd5_step(F4, b, c, d, a, in[1] + 0x85845dd1, 21); + pmd5_step(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); + pmd5_step(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); + pmd5_step(F4, c, d, a, b, in[6] + 0xa3014314, 15); + pmd5_step(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); + pmd5_step(F4, a, b, c, d, in[4] + 0xf7537e82, 6); + pmd5_step(F4, d, a, b, c, in[11] + 0xbd3af235, 10); + pmd5_step(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); + pmd5_step(F4, b, c, d, a, in[9] + 0xeb86d391, 21); + + out[0] += a; + out[1] += b; + out[2] += c; + out[3] += d; +} + +/* ####################################################################### */ + -#if !defined(ARC4_RANDOM) && !defined(DEV_RANDOM) static int -sumFile (char *name, long sum[2]) +sumFile (const char *name, int len, int whence, off_t offset) { - long buf[1024*2]; - int cnt; - int fd; - int loops; - int reads; - int i; - int ret_status = 0; - - fd = open (name, O_RDONLY); - if (fd < 0) { - LogError("Cannot open randomFile \"%s\", errno = %d\n", name, errno); - return 0; + int fd, cnt, readlen = 0; + unsigned char buf[0x1000]; + + if ((fd = open (name, O_RDONLY)) < 0) { + Debug("cannot open entropy source \"%s\", errno=%d\n", name, errno); + return -1; } -#ifdef FRAGILE_DEV_MEM - if (strcmp(name, "/dev/mem") == 0) lseek (fd, (off_t) 0x100000, SEEK_SET); -#endif - reads = FILE_LIMIT; - sum[0] = 0; - sum[1] = 0; - while ((cnt = read (fd, (char *) buf, sizeof (buf))) > 0 && --reads > 0) { - loops = cnt / (2 * sizeof (long)); - for (i = 0; i < loops; i+= 2) { - sum[0] += buf[i]; - sum[1] += buf[i+1]; - ret_status = 1; + lseek (fd, offset, whence); + while (readlen < len) { + if (!(cnt = read (fd, buf, sizeof (buf)))) + break; + if (cnt < 0) { + close (fd); + Debug("cannot read entropy source \"%s\", errno=%d\n", + name, errno); + return -1; } + readlen += cnt; + add_entropy((unsigned*)buf, (cnt + 3) / 4); } - if (cnt < 0) - LogError("Cannot read randomFile \"%s\", errno = %d\n", name, errno); close (fd); - return ret_status; + Debug("read %d bytes from entropy source \"%s\"\n", readlen, name); + return readlen; } + +void +AddTimerEntropy (void) +{ + struct timeval now; + X_GETTIMEOFDAY (&now); + add_entropy((unsigned*)&now, sizeof(now)/sizeof(unsigned)); +} + +#define BSIZ 0x10000 + +void +AddOtherEntropy (void) +{ + AddTimerEntropy(); + /* XXX -- setup-specific ... use some common ones */ + sumFile ("/var/log/messages", 0x1000, SEEK_END, -0x1000); + sumFile ("/var/log/syslog", 0x1000, SEEK_END, -0x1000); + sumFile ("/var/log/debug", 0x1000, SEEK_END, -0x1000); + sumFile ("/var/log/kern.log", 0x1000, SEEK_END, -0x1000); + sumFile ("/var/log/daemon.log", 0x1000, SEEK_END, -0x1000); +} + +void +AddPreGetEntropy (void) +{ + static long offset; + long readlen; + + AddTimerEntropy(); + if ((readlen = sumFile (randomFile, BSIZ, SEEK_SET, offset)) == BSIZ) { + offset += readlen; +#ifdef FRAGILE_DEV_MEM + if (!strcmp (randomFile, "/dev/mem")) { + if (offset == 0xa0000) /* skip 640kB-1MB ROM mappings */ + offset = 0x100000; + else if (offset == 0xf00000) /* skip 15-16MB memory hole */ + offset = 0x1000000; + } #endif + return; + } else if (readlen >= 0 && offset) { + if ((offset = sumFile (randomFile, BSIZ, SEEK_SET, 0)) == BSIZ) + return; + } + LogError("Cannot read randomFile \"%s\"; X cookies may be easily guessable\n", randomFile); +} +#endif /* !ARC4_RANDOM && !DEV_RANDOM */ + #ifdef HASXDMAUTH static void InitXdmcpWrapper (void) { + u_int32_t sum[4]; #ifdef ARC4_RANDOM - u_int32_t sum[2]; - sum[0] = arc4random(); sum[1] = arc4random(); *(u_char *)sum = 0; - _XdmcpWrapperToOddParity(sum, key); + _XdmcpWrapperToOddParity((unsigned char *)sum, key); +#else + unsigned char tmpkey[8]; -#elif defined(DEV_RANDOM) +#ifdef DEV_RANDOM int fd; - unsigned char tmpkey[8]; - if ((fd = open(DEV_RANDOM, O_RDONLY)) >= 0) { - if (read(fd, tmpkey, 8) == 8) { + if ((fd = open(randomDevice, O_RDONLY)) >= 0) { + if (pollRandomDevice(fd) && read(fd, tmpkey, 8) == 8) { tmpkey[0] = 0; _XdmcpWrapperToOddParity(tmpkey, key); close(fd); @@ -133,15 +369,27 @@ } else { close(fd); } + } else { + LogError("Cannot open randomDevice \"%s\", errno = %d\n", + randomDevice, errno); } -#else - long sum[2]; - unsigned char tmpkey[8]; - - if (!sumFile (randomFile, sum)) { - sum[0] = time ((Time_t *) 0); - sum[1] = time ((Time_t *) 0); +#endif + /* Try some pseudo-random number genrator daemon next */ + if (prngdSocket != NULL || prngdPort != 0) { + if (get_prngd_bytes(tmpkey, sizeof(tmpkey), prngdPort, + prngdSocket) == 0) { + tmpkey[0] = 0; + _XdmcpWrapperToOddParity(tmpkey, key); + return; + } } + /* Fall back if no other source of random number was found */ + AddPreGetEntropy(); + pmd5_hash (sum, epool); + add_entropy (sum, 1); + pmd5_hash (sum, epool + 16); + add_entropy (sum + 2, 1); + longtochars (sum[0], tmpkey+0); longtochars (sum[1], tmpkey+4); tmpkey[0] = 0; @@ -151,115 +399,84 @@ #endif -#ifndef HASXDMAUTH -/* A random number generator that is more unpredictable - than that shipped with some systems. - This code is taken from the C standard. */ - -static unsigned long int next = 1; - -static int -xdm_rand(void) -{ - next = next * 1103515245 + 12345; - return (unsigned int)(next/65536) % 32768; -} - -static void -xdm_srand(unsigned int seed) -{ - next = seed; -} -#endif /* no HASXDMAUTH */ -void +int GenerateAuthData (char *auth, int len) { +#ifdef HASXDMAUTH + int i, bit; + auth_wrapper_schedule schedule; + unsigned char data[8]; + static int xdmcpAuthInited; long ldata[2]; #ifdef ITIMER_REAL - { - struct timeval now; + struct timeval now; - X_GETTIMEOFDAY (&now); - ldata[0] = now.tv_usec; - ldata[1] = now.tv_sec; - } + X_GETTIMEOFDAY (&now); + ldata[0] = now.tv_usec; + ldata[1] = now.tv_sec; #else - { -#ifndef __UNIXOS2__ - long time (); -#endif - - ldata[0] = time ((long *) 0); - ldata[1] = getpid (); - } + ldata[0] = time ((long *) 0); + ldata[1] = getpid (); #endif -#ifdef HASXDMAUTH - { - int bit; - int i; - auth_wrapper_schedule schedule; - unsigned char data[8]; - static int xdmcpAuthInited; - longtochars (ldata[0], data+0); - longtochars (ldata[1], data+4); - if (!xdmcpAuthInited) - { - InitXdmcpWrapper (); - xdmcpAuthInited = 1; - } - _XdmcpAuthSetup (key, schedule); - for (i = 0; i < len; i++) { - auth[i] = 0; - for (bit = 1; bit < 256; bit <<= 1) { - _XdmcpAuthDoIt (data, data, schedule, 1); - if ((data[0] + data[1]) & 0x4) - auth[i] |= bit; - } - } - } -#else + longtochars (ldata[0], data+0); + longtochars (ldata[1], data+4); + if (!xdmcpAuthInited) { - int seed; - int value; - int i; - static long localkey[2] = {0,0}; - - if ( (localkey[0] == 0) && (localkey[1] == 0) ) { + InitXdmcpWrapper (); + xdmcpAuthInited = 1; + } + _XdmcpAuthSetup (key, schedule); + for (i = 0; i < len; i++) { + auth[i] = 0; + for (bit = 1; bit < 256; bit <<= 1) { + _XdmcpAuthDoIt (data, data, schedule, 1); + if ((data[0] + data[1]) & 0x4) + auth[i] |= bit; + } + } +#else /* !XDMAUTH */ #ifdef ARC4_RANDOM - localkey[0] = arc4random(); - localkey[1] = arc4random(); -#elif defined(DEV_RANDOM) - int fd; + unsigned int *rnd = (unsigned*)auth; + int i; + + for (i = 0; i < len; i += 4) + rnd[i / 4] = arc4random(); + return 1; +#else /* !ARC4_RANDOM */ + unsigned tmp[4] = { 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476 }; +#ifdef DEV_RANDOM + int fd; - if ((fd = open(DEV_RANDOM, O_RDONLY)) >= 0) { - if (read(fd, (char *)localkey, 8) != 8) { - localkey[0] = 1; - } - close(fd); - } else { - localkey[0] = 1; - } -#else - if (!sumFile (randomFile, localkey)) { - localkey[0] = 1; /* To keep from continually calling sumFile() */ - } -#endif + if ((fd = open(randomDevice, O_RDONLY)) >= 0) { + if (pollRandomDevice(fd) && + read(fd, auth, len) == len) { + close(fd); + return 1; } - - seed = (ldata[0]+localkey[0]) + ((ldata[1]+localkey[1]) << 16); - xdm_srand (seed); - for (i = 0; i < len; i++) - { - value = xdm_rand (); - auth[i] = (value & 0xff00) >> 8; - } - value = len; - if (value > sizeof (key)) - value = sizeof (key); - memmove( (char *) key, auth, value); + close(fd); + LogError("Cannot read randomDevice \"%s\", errno=%d\n", + randomDevice, errno); + } else + LogError("Cannot open randomDevice \"%s\", errno = %d\n", + randomDevice, errno); +#endif /* DEV_RANDOM */ + /* Try some pseudo-random number genrator daemon next */ + if (prngdSocket != NULL || prngdPort != 0) { + if (get_prngd_bytes(auth, len, prngdPort, prngdSocket) == 0) { + return 1; + } } -#endif + /* Fallback if not able to get from /dev/random */ + AddPreGetEntropy(); + pmd5_hash (tmp, epool); + add_entropy (tmp, 1); + pmd5_hash (tmp, epool + 16); + add_entropy (tmp + 2, 1); + memcpy (auth, tmp, len); + return 1; +#endif /* !ARC4_RANDOM */ +#endif /* !HASXDMAUTH */ } Index: xc/programs/xdm/greet.h diff -u xc/programs/xdm/greet.h:1.8 xc/programs/xdm/greet.h:1.8.4.1 --- xc/programs/xdm/greet.h:1.8 Fri Dec 14 15:01:22 2001 +++ xc/programs/xdm/greet.h Wed Sep 17 01:58:16 2003 @@ -26,7 +26,7 @@ from The Open Group. */ -/* $XFree86: xc/programs/xdm/greet.h,v 1.8 2001/12/14 20:01:22 dawes Exp $ */ +/* $XFree86: xc/programs/xdm/greet.h,v 1.8.4.1 2003/09/17 05:58:16 herrb Exp $ */ /* * greet.h - interface to xdm's dynamically-loadable modular greeter @@ -37,7 +37,7 @@ /* * Do this rather than break a build over a const-mismatch */ -#if defined(__linux__) || defined(CSRG_BASED) +#if defined(__linux__) || defined(CSRG_BASED) || (defined(sun) && defined(SVR4)) #define CRYPT_ARGS const char *s1, const char *s2 #define GETSPNAM_ARGS const char *name #define GETPWNAM_ARGS const char *name Index: xc/programs/xdm/mitauth.c diff -u xc/programs/xdm/mitauth.c:1.4 xc/programs/xdm/mitauth.c:1.4.4.1 --- xc/programs/xdm/mitauth.c:1.4 Fri Dec 14 15:01:22 2001 +++ xc/programs/xdm/mitauth.c Wed Sep 17 01:58:16 2003 @@ -26,7 +26,7 @@ from The Open Group. */ -/* $XFree86: xc/programs/xdm/mitauth.c,v 1.4 2001/12/14 20:01:22 dawes Exp $ */ +/* $XFree86: xc/programs/xdm/mitauth.c,v 1.4.4.1 2003/09/17 05:58:16 herrb Exp $ */ /* * xdm - display manager daemon @@ -45,14 +45,12 @@ # define AUTH_DATA_LEN 16 /* bytes of authorization data */ static char auth_name[256]; -static int auth_name_len; void MitInitAuth (unsigned short name_len, char *name) { if (name_len > 256) name_len = 256; - auth_name_len = name_len; memmove( auth_name, name, name_len); } @@ -85,7 +83,13 @@ } memmove( (char *)new->name, name, namelen); new->name_length = namelen; - GenerateAuthData (new->data, AUTH_DATA_LEN); + if (!GenerateAuthData (new->data, AUTH_DATA_LEN)) + { + free((char *) new->name); + free((char *) new->data); + free((char *) new); + return (Xauth *) 0; + } new->data_length = AUTH_DATA_LEN; return new; } Index: xc/programs/xdm/netaddr.c diff -u xc/programs/xdm/netaddr.c:3.6 xc/programs/xdm/netaddr.c:3.6.4.1 --- xc/programs/xdm/netaddr.c:3.6 Fri Dec 14 15:01:22 2001 +++ xc/programs/xdm/netaddr.c Wed Sep 17 01:58:16 2003 @@ -26,7 +26,7 @@ from The Open Group. */ -/* $XFree86: xc/programs/xdm/netaddr.c,v 3.6 2001/12/14 20:01:22 dawes Exp $ */ +/* $XFree86: xc/programs/xdm/netaddr.c,v 3.6.4.1 2003/09/17 05:58:16 herrb Exp $ */ /* * xdm - X display manager @@ -231,8 +231,8 @@ Debug ("port %d, host %d.%d.%d.%d\n", (p[0] << 8) + p[1], t[0], t[1], t[2], t[3]); break; - } #endif + } } #endif Index: xc/programs/xdm/prngc.c diff -u /dev/null xc/programs/xdm/prngc.c:1.1.2.3 --- /dev/null Sat Feb 28 22:49:37 2004 +++ xc/programs/xdm/prngc.c Fri Oct 17 17:37:45 2003 @@ -0,0 +1,192 @@ +/* $XFree86: xc/programs/xdm/prngc.c,v 1.1.2.3 2003/10/17 21:37:45 herrb Exp $ */ +/* + * Copyright (c) 1995,1999 Theo de Raadt. All rights reserved. + * Copyright (c) 2001-2002 Damien Miller. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#include +#include +#include +#ifndef X_NO_SYS_UN +#ifndef Lynx +#include +#else +#include +#endif +#endif +#include +#include +#include +#include +#include +#include + +#include "dm_auth.h" +#include "dm_error.h" + +static ssize_t atomicio(ssize_t (*)(), int, void *, size_t); + +#ifndef offsetof +# define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) +#endif + +/* + * Collect 'len' bytes of entropy into 'buf' from PRNGD/EGD daemon + * listening either on 'tcp_port', or via Unix domain socket at * + * 'socket_path'. + * Either a non-zero tcp_port or a non-null socket_path must be + * supplied. + * Returns 0 on success, -1 on error + */ +int +get_prngd_bytes(char *buf, int len, + unsigned short tcp_port, char *socket_path) +{ + int fd, addr_len, rval, errors; + char msg[2]; + struct sockaddr *addr; + struct sockaddr_in addr_in; + struct sockaddr_un addr_un; + int af; + void (*old_sigpipe)(int); + + /* Sanity checks */ + if (socket_path == NULL && tcp_port == 0) { + LogError("get_random_prngd: " + "You must specify a port or a socket\n"); + return -1; + } + if (socket_path != NULL && + strlen(socket_path) >= sizeof(addr_un.sun_path)) { + LogError("get_random_prngd: Random pool path is too long\n"); + return -1; + } + if (len > 255) { + LogError("get_random_prngd: " + "Too many bytes to read from PRNGD\n"); + return -1; + } + + memset(&addr_in, '\0', sizeof(addr)); + + if (tcp_port != 0) { + af = addr_in.sin_family = AF_INET; + addr_in.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + addr_in.sin_port = htons(tcp_port); + addr_len = sizeof(addr_in); + addr = (struct sockaddr *)&addr_in; + } else { + af = addr_un.sun_family = AF_UNIX; + strncpy(addr_un.sun_path, socket_path, + sizeof(addr_un.sun_path)); + addr_len = offsetof(struct sockaddr_un, sun_path) + + strlen(socket_path) + 1; + addr = (struct sockaddr *)&addr_un; + } + + old_sigpipe = signal(SIGPIPE, SIG_IGN); + + errors = 0; + rval = -1; +reopen: + fd = socket(af, SOCK_STREAM, 0); + if (fd == -1) { + LogInfo("Couldn't create socket: %s\n", strerror(errno)); + goto done; + } + + if (connect(fd, (struct sockaddr*)addr, addr_len) == -1) { + if (af == AF_INET) { + LogInfo("Couldn't connect to PRNGD port %d: %s\n", + tcp_port, strerror(errno)); + } else { + LogInfo("Couldn't connect to PRNGD socket" + " \"%s\": %s\n", + addr_un.sun_path, strerror(errno)); + } + goto done; + } + + /* Send blocking read request to PRNGD */ + msg[0] = 0x02; + msg[1] = len; + + if (atomicio(write, fd, msg, sizeof(msg)) != sizeof(msg)) { + if (errno == EPIPE && errors < 10) { + close(fd); + errors++; + goto reopen; + } + LogInfo("Couldn't write to PRNGD socket: %s\n", + strerror(errno)); + goto done; + } + + if (atomicio(read, fd, buf, len) != len) { + if (errno == EPIPE && errors < 10) { + close(fd); + errors++; + goto reopen; + } + LogInfo("Couldn't read from PRNGD socket: %s\n", + strerror(errno)); + goto done; + } + + rval = 0; +done: + signal(SIGPIPE, old_sigpipe); + if (fd != -1) + close(fd); + return rval; +} + +/* + * ensure all of data on socket comes through. f==read || f==write + */ +static ssize_t +atomicio(ssize_t (*f)(), int fd, void *_s, size_t n) +{ + char *s = _s; + ssize_t res, pos = 0; + + while (n > pos) { + res = (f) (fd, s + pos, n - pos); + switch (res) { + case -1: +#ifdef EWOULDBLOCK + if (errno == EINTR || errno == EAGAIN + || errno == EWOULDBLOCK) +#else + if (errno == EINTR || errno == EAGAIN) +#endif + continue; + case 0: + return (res); + default: + pos += res; + } + } + return (pos); +} Index: xc/programs/xdm/resource.c diff -u xc/programs/xdm/resource.c:3.10 xc/programs/xdm/resource.c:3.10.2.1 --- xc/programs/xdm/resource.c:3.10 Sat Dec 7 15:31:04 2002 +++ xc/programs/xdm/resource.c Wed Sep 17 01:58:16 2003 @@ -26,7 +26,7 @@ from The Open Group. */ -/* $XFree86: xc/programs/xdm/resource.c,v 3.10 2002/12/07 20:31:04 herrb Exp $ */ +/* $XFree86: xc/programs/xdm/resource.c,v 3.10.2.1 2003/09/17 05:58:16 herrb Exp $ */ /* * xdm - display manager daemon @@ -57,7 +57,17 @@ char *keyFile; char *accessFile; char **exportList; +#if !defined(ARC4_RANDOM) char *randomFile; +#endif +#ifdef DEV_RANDOM +char *randomDevice; +#endif +#if !defined(ARC4_RANDOM) +char *prngdSocket; +int prngdPort; +#endif + char *greeterLib; char *willing; int choiceTimeout; /* chooser choice timeout */ @@ -72,6 +82,7 @@ * parameters set util/imake.includes/site.def (or *.macros in that directory * if it is server-specific). DO NOT CHANGE THESE DEFINITIONS! */ +#ifndef __EMX__ #ifndef DEF_SERVER_LINE #define DEF_SERVER_LINE ":0 local /usr/bin/X11/X :0" #endif @@ -119,15 +130,74 @@ #define DEF_ACCESS_FILE "" #endif #ifndef DEF_RANDOM_FILE -# ifdef linux -# define DEF_RANDOM_FILE "/dev/urandom" -# else -# define DEF_RANDOM_FILE "/dev/mem" -# endif +#define DEF_RANDOM_FILE "/dev/mem" +#endif +#ifndef DEF_PRNGD_SOCKET +#define DEF_PRNGD_SOCKET "/tmp/entropy" +#endif +#ifndef DEF_PRNGD_PORT +#define DEF_PRNGD_PORT "0" #endif #ifndef DEF_GREETER_LIB #define DEF_GREETER_LIB "/usr/lib/X11/xdm/libXdmGreet.so" #endif +#else +/* unfortunately I have to declare all of them, because there is a limit + * in argument size in OS/2 + * but everything needs to be fixed again + */ +#define DEF_SERVER_LINE ":0 local /XFree86/bin/X :0" +#ifndef XRDB_PROGRAM +#define XRDB_PROGRAM "/XFree86/bin/xrdb" +#endif +#ifndef DEF_SESSION +#define DEF_SESSION "/XFree86/bin/xterm -ls" +#endif +#ifndef DEF_USER_PATH +#define DEF_USER_PATH "c:\\os2;c:\\os2\apps;\\XFree86\\bin" +#endif +#ifndef DEF_SYSTEM_PATH +#define DEF_SYSTEM_PATH "c:\\os2;c:\\os2\apps;\\XFree86\\bin" +#endif +#ifndef DEF_SYSTEM_SHELL +#define DEF_SYSTEM_SHELL "sh" +#endif +#ifndef DEF_FAILSAFE_CLIENT +#define DEF_FAILSAFE_CLIENT "/XFree86/bin/xterm" +#endif +#ifndef DEF_XDM_CONFIG +#define DEF_XDM_CONFIG "/XFree86/lib/X11/xdm/xdm-config" +#endif +#ifndef DEF_CHOOSER +#define DEF_CHOOSER "/XFree86/lib/X11/xdm/chooser" +#endif +#ifndef DEF_AUTH_NAME +#ifdef HASXDMAUTH +#define DEF_AUTH_NAME "XDM-AUTHORIZATION-1 MIT-MAGIC-COOKIE-1" +#else +#define DEF_AUTH_NAME "MIT-MAGIC-COOKIE-1" +#endif +#endif +#ifndef DEF_AUTH_DIR +#define DEF_AUTH_DIR "/XFree86/lib/X11/xdm" +#endif +#ifndef DEF_USER_AUTH_DIR +#define DEF_USER_AUTH_DIR "/tmp" +#endif +#ifndef DEF_KEY_FILE +#define DEF_KEY_FILE "" +#endif +#ifndef DEF_ACCESS_FILE +#define DEF_ACCESS_FILE "" +#endif +#ifndef DEF_RANDOM_FILE +#define DEF_RANDOM_FILE "" +#endif +#ifndef DEF_GREETER_LIB +#define DEF_GREETER_LIB "/XFree86/lib/X11/xdm/libXdmGreet.so" +#endif + +#endif /* __EMX__ */ #define DEF_UDP_PORT "177" /* registered XDMCP port, dont change */ @@ -163,8 +233,18 @@ DEF_ACCESS_FILE} , { "exportList", "ExportList", DM_ARGV, (char **) &exportList, ""} , +#if !defined(ARC4_RANDOM) { "randomFile", "RandomFile", DM_STRING, &randomFile, DEF_RANDOM_FILE} , +{ "prgndSocket", "PrngdSocket", DM_STRING, &prngdSocket, + DEF_PRNGD_SOCKET}, +{ "prngdPort", "PrngdPort", DM_INT, (char **) &prngdPort, + DEF_PRNGD_PORT}, +#endif +#ifdef DEV_RANDOM +{ "randomDevice", "RandomDevice", DM_STRING, &randomDevice, + DEV_RANDOM} , +#endif { "greeterLib", "GreeterLib", DM_STRING, &greeterLib, DEF_GREETER_LIB} , { "choiceTimeout","ChoiceTimeout",DM_INT, (char **) &choiceTimeout, Index: xc/programs/xdm/server.c diff -u xc/programs/xdm/server.c:3.13 xc/programs/xdm/server.c:3.13.4.1 --- xc/programs/xdm/server.c:3.13 Fri Dec 14 15:01:23 2001 +++ xc/programs/xdm/server.c Wed Sep 17 01:58:16 2003 @@ -26,7 +26,7 @@ from The Open Group. */ -/* $XFree86: xc/programs/xdm/server.c,v 3.13 2001/12/14 20:01:23 dawes Exp $ */ +/* $XFree86: xc/programs/xdm/server.c,v 3.13.4.1 2003/09/17 05:58:16 herrb Exp $ */ /* * xdm - display manager daemon @@ -190,14 +190,26 @@ #endif for (;;) { #if defined(SYSV) && defined(X_NOT_POSIX) + /* + * wait() is unsafe. Other Xserver or xdm processes may + * exit at this time and this will remove the wait status. + * This means the main loop will not restart the display. + */ pid = wait ((waitType *) 0); #else if (!receivedUsr1) - pid = wait ((waitType *) 0); - else #ifndef X_NOT_POSIX - pid = waitpid (-1, (int *) 0, WNOHANG); + pid = waitpid (serverPid, (int *) 0, 0); + else + pid = waitpid (serverPid, (int *) 0, WNOHANG); #else + /* + * If you have wait4() but not waitpid(), use that instead + * of wait() and wait3() to make this code safe. See + * above comment. + */ + pid = wait ((waitType *) 0); + else pid = wait3 ((waitType *) 0, WNOHANG, (struct rusage *) 0); #endif /* X_NOT_POSIX */ Index: xc/programs/xdm/session.c diff -u xc/programs/xdm/session.c:3.33 xc/programs/xdm/session.c:3.33.4.2 --- xc/programs/xdm/session.c:3.33 Fri Dec 14 15:01:23 2001 +++ xc/programs/xdm/session.c Mon Sep 29 17:01:09 2003 @@ -26,7 +26,7 @@ from The Open Group. */ -/* $XFree86: xc/programs/xdm/session.c,v 3.33 2001/12/14 20:01:23 dawes Exp $ */ +/* $XFree86: xc/programs/xdm/session.c,v 3.33.4.2 2003/09/29 21:01:09 herrb Exp $ */ /* * xdm - display manager daemon @@ -54,23 +54,24 @@ #ifdef SECURE_RPC # include # include +extern int key_setnet(struct key_netstarg *arg); #endif #ifdef K5AUTH # include #endif #ifndef GREET_USER_STATIC -#include -#ifndef RTLD_NOW -#define RTLD_NOW 1 -#endif +# include +# ifndef RTLD_NOW +# define RTLD_NOW 1 +# endif #endif static int runAndWait (char **args, char **environ); -#if defined(CSRG_BASED) || defined(__osf__) || defined(__DARWIN__) || defined(__QNXNTO__) -#include -#include +#if defined(CSRG_BASED) || defined(__osf__) || defined(__DARWIN__) || defined(__QNXNTO__) || defined(sun) || defined(__GLIBC__) +# include +# include #else /* should be in */ extern void setgrent(void); @@ -79,27 +80,34 @@ #endif #ifdef USESHADOW +# if defined(SVR4) +# include +# else extern struct spwd *getspnam(GETSPNAM_ARGS); extern void endspent(void); +# endif #endif -#if defined(CSRG_BASED) -#include -#include +#if defined(CSRG_BASED) || defined(__GLIBC__) +# include +# include #else extern struct passwd *getpwnam(GETPWNAM_ARGS); -#ifdef linux +# ifdef linux extern void endpwent(void); -#endif +# endif extern char *crypt(CRYPT_ARGS); #endif + #ifdef USE_PAM -pam_handle_t **thepamhp() +pam_handle_t ** +thepamhp(void) { static pam_handle_t *pamh = NULL; return &pamh; } -pam_handle_t *thepamh() +pam_handle_t * +thepamh(void) { pam_handle_t **pamhp; @@ -136,12 +144,12 @@ endgrent, #ifdef USESHADOW getspnam, -#ifndef QNX4 +# ifndef QNX4 endspent, -#endif /* QNX4 doesn't use endspent */ +# endif /* QNX4 doesn't use endspent */ #endif getpwnam, -#ifdef linux +#if defined(linux) || defined(__GLIBC__) endpwent, #endif crypt, @@ -189,7 +197,7 @@ } #if defined(_POSIX_SOURCE) || defined(SYSV) || defined(SVR4) -#define killpg(pgrp, sig) kill(-(pgrp), sig) +# define killpg(pgrp, sig) kill(-(pgrp), sig) #endif static void @@ -226,8 +234,7 @@ void SessionPingFailed (struct display *d) { - if (clientPid > 1) - { + if (clientPid > 1) { AbortClient (clientPid); source (verify.systemEnviron, d->reset); } @@ -246,7 +253,7 @@ static int IOErrorHandler (Display *dpy) { - LogError("fatal IO error %d (%s)\n", errno, _SysErrorMsg(errno)); + LogError ("fatal IO error %d (%s)\n", errno, _SysErrorMsg(errno)); exit(RESERVER_DISPLAY); /*NOTREACHED*/ return 0; @@ -255,7 +262,7 @@ static int ErrorHandler(Display *dpy, XErrorEvent *event) { - LogError("X error\n"); + LogError ("X error\n"); if (XmuPrintDefaultErrorMessage (dpy, event, stderr) == 0) return 0; exit(UNMANAGE_DISPLAY); /*NOTREACHED*/ @@ -266,7 +273,7 @@ { static int pid = 0; Display *dpy; - greet_user_rtn greet_stat; + greet_user_rtn greet_stat; static GreetUserProc greet_user_proc = NULL; #ifndef GREET_USER_STATIC void *greet_lib_handle; @@ -288,13 +295,12 @@ #ifdef GREET_USER_STATIC greet_user_proc = GreetUser; #else - Debug("ManageSession: loading greeter library %s\n", greeterLib); + Debug ("ManageSession: loading greeter library %s\n", greeterLib); greet_lib_handle = dlopen(greeterLib, RTLD_NOW); if (greet_lib_handle != NULL) greet_user_proc = (GreetUserProc)dlsym(greet_lib_handle, "GreetUser"); - if (greet_user_proc == NULL) - { - LogError("%s while loading %s\n", dlerror(), greeterLib); + if (greet_user_proc == NULL) { + LogError ("%s while loading %s\n", dlerror(), greeterLib); exit(UNMANAGE_DISPLAY); } #endif @@ -306,8 +312,7 @@ greet.version = 1; greet_stat = (*greet_user_proc)(d, &dpy, &verify, &greet, &dlfuncs); - if (greet_stat == Greet_Success) - { + if (greet_stat == Greet_Success) { clientPid = 0; if (!Setjmp (abortSession)) { (void) Signal (SIGTERM, catchTerm); @@ -322,29 +327,23 @@ /* Save memory; close library */ dlclose(greet_lib_handle); #endif - + /* * Wait for session to end, */ for (;;) { - if (d->pingInterval) - { - if (!Setjmp (pingTime)) - { + if (d->pingInterval) { + if (!Setjmp (pingTime)) { (void) Signal (SIGALRM, catchAlrm); (void) alarm (d->pingInterval * 60); pid = wait ((waitType *) 0); (void) alarm (0); - } - else - { + } else { (void) alarm (0); if (!PingServer (d, (Display *) NULL)) SessionPingFailed (d); } - } - else - { + } else { pid = wait ((waitType *) 0); } if (pid == clientPid) @@ -391,8 +390,7 @@ { char **env = 0; - if (d->setup && d->setup[0]) - { + if (d->setup && d->setup[0]) { env = systemEnv (d, (char *) 0, (char *) 0); (void) source (env, d->setup); freeEnv (env); @@ -436,8 +434,7 @@ Debug ("Before XGrabServer %s\n", d->name); XGrabServer (dpy); if (XGrabKeyboard (dpy, DefaultRootWindow (dpy), True, GrabModeAsync, - GrabModeAsync, CurrentTime) != GrabSuccess) - { + GrabModeAsync, CurrentTime) != GrabSuccess) { (void) alarm (0); (void) Signal (SIGALRM, SIG_DFL); LogError ("WARNING: keyboard on display %s could not be secured\n", @@ -448,8 +445,7 @@ (void) alarm (0); (void) Signal (SIGALRM, SIG_DFL); pseudoReset (dpy); - if (!d->grabServer) - { + if (!d->grabServer) { XUngrabServer (dpy); XSync (dpy, 0); } @@ -460,8 +456,7 @@ UnsecureDisplay (struct display *d, Display *dpy) { Debug ("Unsecure display %s\n", d->name); - if (d->grabServer) - { + if (d->grabServer) { XUngrabServer (dpy); XSync (dpy, 0); } @@ -487,8 +482,7 @@ kill (d->serverPid, d->resetSignal); else ResetServer (d); - if (removeAuth) - { + if (removeAuth) { setgid (verify.gid); setuid (verify.uid); RemoveUserAuthorization (d, &verify); @@ -500,7 +494,7 @@ code = Krb5DisplayCCache(d->name, &ccache); if (code) - LogError("%s while getting Krb5 ccache to destroy\n", + LogError ("%s while getting Krb5 ccache to destroy\n", error_message(code)); else { code = krb5_cc_destroy(ccache); @@ -508,7 +502,7 @@ if (code == KRB5_FCC_NOFILE) { Debug ("No Kerberos ccache file found to destroy\n"); } else - LogError("%s while destroying Krb5 credentials cache\n", + LogError ("%s while destroying Krb5 credentials cache\n", error_message(code)); } else Debug ("Kerberos ccache destroyed\n"); @@ -535,8 +529,9 @@ #ifdef HAS_SETUSERCONTEXT struct passwd* pwd; #endif -#ifdef USE_PAM - pam_handle_t *pamh = thepamh(); +#ifdef USE_PAM + pam_handle_t *pamh = thepamh (); + int pam_error; #endif if (verify->argv) { @@ -552,7 +547,7 @@ } #ifdef USE_PAM if (pamh) pam_open_session(pamh, 0); -#endif +#endif switch (pid = fork ()) { case 0: CleanUpChild (); @@ -577,34 +572,35 @@ #ifndef AIXV3 #ifndef HAS_SETUSERCONTEXT - if (setgid(verify->gid) < 0) - { - LogError("setgid %d (user \"%s\") failed, errno=%d\n", + if (setgid(verify->gid) < 0) { + LogError ("setgid %d (user \"%s\") failed, errno=%d\n", verify->gid, name, errno); return (0); } #if defined(BSD) && (BSD >= 199103) - if (setlogin(name) < 0) - { - LogError("setlogin for \"%s\" failed, errno=%d", name, errno); + if (setlogin(name) < 0) { + LogError ("setlogin for \"%s\" failed, errno=%d", name, errno); return(0); } #endif #ifndef QNX4 - if (initgroups(name, verify->gid) < 0) - { - LogError("initgroups for \"%s\" failed, errno=%d\n", name, errno); + if (initgroups(name, verify->gid) < 0) { + LogError ("initgroups for \"%s\" failed, errno=%d\n", name, errno); return (0); } #endif /* QNX4 doesn't support multi-groups, no initgroups() */ #ifdef USE_PAM - if (thepamh()) { - pam_setcred(thepamh(), PAM_ESTABLISH_CRED); + if (pamh) { + pam_error = pam_setcred (pamh, PAM_ESTABLISH_CRED); + if (pam_error != PAM_SUCCESS) { + LogError ("pam_setcred for \"%s\" failed: %s\n", + name, pam_strerror(pamh, pam_error)); + return(0); + } } #endif - if (setuid(verify->uid) < 0) - { - LogError("setuid %d (user \"%s\") failed, errno=%d\n", + if (setuid(verify->uid) < 0) { + LogError ("setuid %d (user \"%s\") failed, errno=%d\n", verify->uid, name, errno); return (0); } @@ -614,19 +610,15 @@ * environment variables, resource limits, and umask. */ pwd = getpwnam(name); - if (pwd) - { - if (setusercontext(NULL, pwd, pwd->pw_uid, LOGIN_SETALL) < 0) - { - LogError("setusercontext for \"%s\" failed, errno=%d\n", name, + if (pwd) { + if (setusercontext(NULL, pwd, pwd->pw_uid, LOGIN_SETALL) < 0) { + LogError ("setusercontext for \"%s\" failed, errno=%d\n", name, errno); return (0); } endpwent(); - } - else - { - LogError("getpwnam for \"%s\" failed, errno=%d\n", name, errno); + } else { + LogError ("getpwnam for \"%s\" failed, errno=%d\n", name, errno); return (0); } #endif /* HAS_SETUSERCONTEXT */ @@ -635,9 +627,8 @@ * Set the user's credentials: uid, gid, groups, * audit classes, user limits, and umask. */ - if (setpcred(name, NULL) == -1) - { - LogError("setpcred for \"%s\" failed, errno=%d\n", name, errno); + if (setpcred(name, NULL) == -1) { + LogError ("setpcred for \"%s\" failed, errno=%d\n", name, errno); return (0); } #endif /* AIXV3 */ @@ -652,6 +643,7 @@ char netname[MAXNETNAMELEN+1], secretkey[HEXKEYBYTES+1]; int nameret, keyret; int len; + struct key_netstarg netst; int key_set_ok = 0; nameret = getnetname (netname); @@ -662,34 +654,34 @@ keyret = getsecretkey(netname,secretkey,passwd); Debug ("getsecretkey returns %d, key length %d\n", keyret, strlen (secretkey)); + memcpy(&(netst.st_priv_key), secretkey, HEXKEYBYTES); + netst.st_netname = strdup(netname); + memset(netst.st_pub_key, 0, HEXKEYBYTES); + if (key_setnet(&netst) < 0) { + Debug ("Could not set secret key.\n"); + } + free(netst.st_netname); /* is there a key, and do we have the right password? */ - if (keyret == 1) - { - if (*secretkey) - { + if (keyret == 1) { + if (*secretkey) { keyret = key_setsecret(secretkey); Debug ("key_setsecret returns %d\n", keyret); if (keyret == -1) LogError ("failed to set NIS secret key\n"); else key_set_ok = 1; - } - else - { + } else { /* found a key, but couldn't interpret it */ LogError ("password incorrect for NIS principal \"%s\"\n", nameret ? netname : name); } } - if (!key_set_ok) - { + if (!key_set_ok) { /* remove SUN-DES-1 from authorizations list */ int i, j; - for (i = 0; i < d->authNum; i++) - { + for (i = 0; i < d->authNum; i++) { if (d->authorizations[i]->name_length == 9 && - memcmp(d->authorizations[i]->name, "SUN-DES-1", 9) == 0) - { + memcmp(d->authorizations[i]->name, "SUN-DES-1", 9) == 0) { for (j = i+1; j < d->authNum; j++) d->authorizations[j-1] = d->authorizations[j]; d->authNum--; @@ -714,11 +706,9 @@ setEnv(verify->userEnviron, "KRB5CCNAME", Krb5CCacheName(d->name)); } else { - for (i = 0; i < d->authNum; i++) - { + for (i = 0; i < d->authNum; i++) { if (d->authorizations[i]->name_length == 14 && - memcmp(d->authorizations[i]->name, "MIT-KERBEROS-5", 14) == 0) - { + memcmp(d->authorizations[i]->name, "MIT-KERBEROS-5", 14) == 0) { /* remove Kerberos from authorizations list */ for (j = i+1; j < d->authNum; j++) d->authorizations[j-1] = d->authorizations[j]; @@ -773,8 +763,7 @@ if (file && file[0]) { Debug ("source %s\n", file); args = parseArgs ((char **) 0, file); - if (!args) - { + if (!args) { args = args_safe; args[0] = file; args[1] = NULL; @@ -841,8 +830,7 @@ f = fopen (argv[0], "r"); if (!f) return; - if (fgets (program, sizeof (program) - 1, f) == NULL) - { + if (fgets (program, sizeof (program) - 1, f) == NULL) { fclose (f); return; } @@ -894,8 +882,7 @@ char **env, **exp, *value; env = 0; - for (exp = exportList; exp && *exp; ++exp) - { + for (exp = exportList; exp && *exp; ++exp) { value = getenv (*exp); if (value) env = setEnv (env, *exp, value); @@ -907,13 +894,12 @@ systemEnv (struct display *d, char *user, char *home) { char **env; - + env = defaultEnv (); env = setEnv (env, "DISPLAY", d->name); if (home) env = setEnv (env, "HOME", home); - if (user) - { + if (user) { env = setEnv (env, "USER", user); env = setEnv (env, "LOGNAME", user); } Index: xc/programs/xdm/socket.c diff -u xc/programs/xdm/socket.c:3.10 xc/programs/xdm/socket.c:3.10.4.1 --- xc/programs/xdm/socket.c:3.10 Fri Dec 14 15:01:24 2001 +++ xc/programs/xdm/socket.c Wed Sep 17 01:58:16 2003 @@ -2,6 +2,7 @@ /* Copyright 1988, 1998 The Open Group +Copyright 2002 Sun Microsystems, Inc. All rights reserved. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that @@ -15,18 +16,18 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR +IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Except as contained in this notice, the name of The Open Group shall +Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization -from The Open Group. +from the copyright holder. */ -/* $XFree86: xc/programs/xdm/socket.c,v 3.10 2001/12/14 20:01:24 dawes Exp $ */ +/* $XFree86: xc/programs/xdm/socket.c,v 3.10.4.1 2003/09/17 05:58:16 herrb Exp $ */ /* * xdm - display manager daemon @@ -52,9 +53,8 @@ #endif #endif #include +#include - -extern int xdmcpFd; extern int chooserFd; extern FD_TYPE WellKnownSocketsMask; @@ -63,37 +63,8 @@ void CreateWellKnownSockets (void) { - struct sockaddr_in sock_addr; - char *name; - - if (request_port == 0) - return; - Debug ("creating socket %d\n", request_port); - xdmcpFd = socket (AF_INET, SOCK_DGRAM, 0); - if (xdmcpFd == -1) { - LogError ("XDMCP socket creation failed, errno %d\n", errno); - return; - } - name = localHostname (); + char *name = localHostname (); registerHostname (name, strlen (name)); - RegisterCloseOnFork (xdmcpFd); - /* zero out the entire structure; this avoids 4.4 incompatibilities */ - bzero ((char *) &sock_addr, sizeof (sock_addr)); -#ifdef BSD44SOCKETS - sock_addr.sin_len = sizeof(sock_addr); -#endif - sock_addr.sin_family = AF_INET; - sock_addr.sin_port = htons ((short) request_port); - sock_addr.sin_addr.s_addr = htonl (INADDR_ANY); - if (bind (xdmcpFd, (struct sockaddr *)&sock_addr, sizeof (sock_addr)) == -1) - { - LogError ("error %d binding socket address %d\n", errno, request_port); - close (xdmcpFd); - xdmcpFd = -1; - return; - } - WellKnownSocketsMax = xdmcpFd; - FD_SET (xdmcpFd, &WellKnownSocketsMask); chooserFd = socket (AF_INET, SOCK_STREAM, 0); Debug ("Created chooser socket %d\n", chooserFd); @@ -115,15 +86,322 @@ { struct sockaddr_in in_addr; int len; + int retval = 0; len = sizeof in_addr; + if (chooserFd < 0) + return -1; /* TODO check other listening sockets */ if (getsockname (chooserFd, (struct sockaddr *)&in_addr, (void *)&len) < 0) return -1; - Debug ("Chooser socket port: %d\n", ntohs(in_addr.sin_port)); - memmove( addr, (char *) &in_addr, len); + Debug ("Chooser socket port: %d\n", + ntohs(((struct sockaddr_in *) &in_addr)->sin_port)); + if (*lenp < len) + retval = -2; + else + memmove( addr, (char *) &in_addr, len); *lenp = len; - return 0; + return retval; +} + +static int +CreateListeningSocket (struct sockaddr *sock_addr, int salen) +{ + int fd; + const char *addrstring = "unknown"; + + if (request_port == 0) + return -1; + + if (debugLevel > 0) { + addrstring = inet_ntoa(((struct sockaddr_in *) sock_addr)->sin_addr); + + Debug ("creating socket to listen on port %d of address %s\n", + request_port,addrstring); + } + + fd = socket (sock_addr->sa_family, SOCK_DGRAM, 0); + + if (fd == -1) { + LogError ("XDMCP socket creation failed, errno %d\n", errno); + return fd; + } + RegisterCloseOnFork (fd); + + if (bind (fd, sock_addr, salen) == -1) + { + LogError ("error %d binding socket address %d\n", errno, request_port); + close (fd); + fd = -1; + return fd; + } + if (fd > WellKnownSocketsMax) + WellKnownSocketsMax = fd; + FD_SET (fd, &WellKnownSocketsMask); + return fd; +} + +struct socklist { + struct socklist * next; + struct socklist * mcastgroups; + struct sockaddr * addr; + int salen; + int addrlen; + int fd; + int ref; /* referenced bit - see UpdateListenSockets */ +}; + +static struct socklist *listensocks; + +static void +DestroyListeningSocket (struct socklist *s) +{ + if (s->fd >= 0) { + FD_CLR (s->fd, &WellKnownSocketsMask); + close(s->fd); + s->fd = -1; + } + if (s->addr) { + free(s->addr); + s->addr = NULL; + } + if (s->mcastgroups) { + struct socklist *g, *n; + + for (g = s->mcastgroups; g != NULL; g = n) { + n = g->next; + if (g->addr) + free(g->addr); + free(g); + } + s->mcastgroups = NULL; + } +} + +static struct socklist* +FindInList(struct socklist *list, ARRAY8Ptr addr) +{ + struct socklist *s; + + for (s = list; s != NULL; s = s->next) { + if (s->addrlen == addr->length) { + char *addrdata; + + switch (s->addr->sa_family) { + case AF_INET: + addrdata = (char *) + &(((struct sockaddr_in *)s->addr)->sin_addr.s_addr); + break; + default: + /* Unrecognized address family */ + continue; + } + if (memcmp(addrdata, addr->data, addr->length) == 0) { + return s; + } + } + } + return NULL; +} + +static struct socklist * +CreateSocklistEntry(ARRAY8Ptr addr) +{ + struct socklist *s = malloc (sizeof(struct socklist)); + if (s == NULL) + LogOutOfMem("CreateSocklistEntry"); + + bzero(s, sizeof(struct socklist)); + + if (addr->length == 4) /* IPv4 */ + { + struct sockaddr_in *sin; + sin = malloc (sizeof(struct sockaddr_in)); + if (sin == NULL) + LogOutOfMem("CreateSocklistEntry"); + s->addr = (struct sockaddr *) sin; + + bzero (sin, sizeof (struct sockaddr_in)); +#ifdef BSD44SOCKETS + sin->sin_len = sizeof(struct sockaddr_in); +#endif + s->salen = sizeof(struct sockaddr_in); + s->addrlen = sizeof(struct in_addr); + sin->sin_family = AF_INET; + sin->sin_port = htons ((short) request_port); + memcpy(&sin->sin_addr, addr->data, addr->length); + } + else { + /* Unknown address type */ + free(s); + s = NULL; + } + return s; +} + +static void +UpdateListener(ARRAY8Ptr addr, void **closure) +{ + struct socklist *s; + ARRAY8 tmpaddr; + + *closure = NULL; + + if (addr == NULL || addr->length == 0) { + struct in_addr in; + in.s_addr = htonl (INADDR_ANY); + tmpaddr.length = sizeof(in); + tmpaddr.data = (CARD8Ptr) ∈ + addr = &tmpaddr; + } + + s = FindInList(listensocks, addr); + + if (s) { + *closure = (void *) s; + s->ref = 1; + return; + } + + s = CreateSocklistEntry(addr); + + if (s == NULL) + return; + + s->fd = CreateListeningSocket(s->addr, s->salen); + if (s->fd < 0) { + free(s->addr); + free(s); + return; + } + s->ref = 1; + s->next = listensocks; + listensocks = s; + *closure = (void *) s; +} + +#define JOIN_MCAST_GROUP 0 +#define LEAVE_MCAST_GROUP 1 + +static void +ChangeMcastMembership(struct socklist *s, struct socklist *g, int op) +{ + int sockopt; + + switch (s->addr->sa_family) + { + case AF_INET: + { + struct ip_mreq mreq; + memcpy(&mreq.imr_multiaddr, + &((struct sockaddr_in *) g->addr)->sin_addr, + sizeof(struct in_addr)); + memcpy(&mreq.imr_interface, + &((struct sockaddr_in *) s->addr)->sin_addr, + sizeof(struct in_addr)); + if (op == JOIN_MCAST_GROUP) { + sockopt = IP_ADD_MEMBERSHIP; + } else { + sockopt = IP_DROP_MEMBERSHIP; + } + if (setsockopt(s->fd, IPPROTO_IP, sockopt, + &mreq, sizeof(mreq)) < 0) { + LogError ("XDMCP socket multicast %s to %s failed, errno %d\n", + (op == JOIN_MCAST_GROUP) ? "join" : "drop", + inet_ntoa(((struct sockaddr_in *) g->addr)->sin_addr), + errno); + return; + } else if (debugLevel > 0) { + Debug ("XDMCP socket multicast %s to %s succeeded\n", + (op == JOIN_MCAST_GROUP) ? "join" : "drop", + inet_ntoa(((struct sockaddr_in *) g->addr)->sin_addr)); + } + } + } +} + +static void +UpdateMcastGroup(ARRAY8Ptr addr, void **closure) +{ + struct socklist *s = (struct socklist *) *closure; + struct socklist *g; + + g = FindInList(s->mcastgroups, addr); + + if (g) { /* Already in the group, mark & continue */ + g->ref = 1; + return; + } + + /* Need to join the group */ + g = CreateSocklistEntry(addr); + if (g == NULL) + return; + + ChangeMcastMembership(s, g, JOIN_MCAST_GROUP); +} + +/* Open or close listening sockets to match the current settings read in + from the access database. */ +void UpdateListenSockets (void) +{ + struct socklist *s, *g, **ls, **lg, *ns, *ng; + void *tmpPtr = NULL; + + /* Clear Ref bits - any not marked by UpdateCallback will be closed */ + for (s = listensocks; s != NULL; s = s->next) { + s->ref = 0; + for (g = s->mcastgroups; g != NULL ; g = g->next) { + g->ref = 0; + } + } + ForEachListenAddr(UpdateListener, UpdateMcastGroup, &tmpPtr); + for (s = listensocks, ls = &listensocks; s != NULL; s = ns) { + ns = s->next; + if (s->ref == 0) { + DestroyListeningSocket(s); + *ls = s->next; + free(s); + } else { + ls = &(s->next); + for (lg = &s->mcastgroups, g = *lg; g != NULL ; g = ng) { + ng = g->next; + if (g->ref == 0) { + ChangeMcastMembership(s,g,LEAVE_MCAST_GROUP); + *lg = g->next; + free(g); + } else { + lg = &(g->next); + } + } + } + } +} + +/* Close all additional listening sockets beyond the basic chooserFd and + remove them from the WellKnownSocketsMask. */ +void CloseListenSockets (void) +{ + struct socklist *s, *n; + + for (s = listensocks; s != NULL; s = n) { + n = s->next; + DestroyListeningSocket(s); + free(s); + } + listensocks = NULL; +} + +/* For each listening socket identified in readmask, process the incoming + XDMCP request */ +void ProcessListenSockets (fd_set *readmask) +{ + struct socklist *s; + + for (s = listensocks; s != NULL; s = s->next) { + if (FD_ISSET(s->fd, readmask)) + ProcessRequestSocket(s->fd); + } } #endif /* !STREAMSCONN */ Index: xc/programs/xdm/streams.c diff -u xc/programs/xdm/streams.c:3.6 xc/programs/xdm/streams.c:3.6.4.1 --- xc/programs/xdm/streams.c:3.6 Fri Dec 14 15:01:24 2001 +++ xc/programs/xdm/streams.c Wed Sep 17 01:58:17 2003 @@ -26,7 +26,7 @@ from The Open Group. */ -/* $XFree86: xc/programs/xdm/streams.c,v 3.6 2001/12/14 20:01:24 dawes Exp $ */ +/* $XFree86: xc/programs/xdm/streams.c,v 3.6.4.1 2003/09/17 05:58:17 herrb Exp $ */ /* * xdm - display manager daemon @@ -146,5 +146,24 @@ return retval; } +/* TODO: Implement support for controlling which interfaces are listened on + and for listening to multicast addresses. See the sockets equivalent in + sockets.c for details. */ + +void UpdateListenSockets (void) +{ + return; +} + +void CloseListenSockets (void) +{ + return; +} + +void ProcessListenSockets (fd_set *readmask) +{ + return; +} + #endif /* STREAMSCONN */ #endif /* XDMCP */ Index: xc/programs/xdm/xdm.man diff -u xc/programs/xdm/xdm.man:3.22 xc/programs/xdm/xdm.man:3.22.2.1 --- xc/programs/xdm/xdm.man:3.22 Sat Oct 12 12:06:47 2002 +++ xc/programs/xdm/xdm.man Wed Sep 17 01:58:17 2003 @@ -23,7 +23,7 @@ .\" other dealings in this Software without prior written authorization .\" from The Open Group. .\" -.\" $XFree86: xc/programs/xdm/xdm.man,v 3.22 2002/10/12 16:06:47 herrb Exp $ +.\" $XFree86: xc/programs/xdm/xdm.man,v 3.22.2.1 2003/09/17 05:58:17 herrb Exp $ .\" .TH XDM 1 __xorgversion__ .SH NAME @@ -92,6 +92,13 @@ .I chooser or X terminals themselves. .PP +.I Xdm +can be configured to ignore BroadcastQuery messages from selected hosts. +This is useful when you don't want the host to appear in menus produced +by +.I chooser +or X terminals themselves. +.PP Because .I xdm provides the first interface that users will see, it is designed to be @@ -144,7 +151,7 @@ At the end of the session, the \fIXreset\fP script is run to clean up, the X server is reset, and the cycle starts over. .PP -The file \fI__projectroot__/lib/X11/xdm/xdm-errors\fP will contain error +The file \fI __projectroot__/lib/X11/xdm/xdm-errors\fP will contain error messages from .I xdm and anything output to stderr by \fIXsetup, Xstartup, Xsession\fP @@ -305,7 +312,7 @@ This names a directory under which .I xdm stores authorization files while initializing the session. The -default value is \fI__projectroot__/lib/X11/xdm.\fP +default value is \fI __projectroot__/lib/X11/xdm.\fP Can be overridden for specific displays by DisplayManager.\fIDISPLAY\fP.authFile. .IP \fBDisplayManager.autoRescan\fP @@ -349,10 +356,31 @@ A file to checksum to generate the seed of authorization keys. This should be a file that changes frequently. The default is \fI/dev/mem\fP. +#ifdef DEV_RANDOM +.IP \fBDisplayManager.randomDevice\fP +A file to read 8 bytes from to generate the seed of authorization keys. +The default is \fI DEV_RANDOM \fP. If this file cannot be read, or if a +read blocks for more than 5 seconds, xdm falls back to using a checksum +of \fBDisplayManager.randomFile\fP to generate the seed. +#endif +#if !defined(ARC4_RANDOM) +.IP \fBDisplayManager.prngdSocket\fP +.IP \fBDisplayManager.prngPort\fP +A UNIX domain socket name or a TCP socket port number on local host on +which a Pseudo-Random Number Generator Daemon, like EGD +(http://egd.sourceforge.net) is listening, in order to generate the +autorization keys. Either a non null port or a valid socket name must +be specified. The default is to use the Unix-domain socket +\fI/tmp/entropy\fP. +.PP +On systems that don't have such a daemon, a fall-back entropy +gathering system, based on various log file contents hashed by the MD5 +algorithm is used instead. +#endif .IP \fBDisplayManager.greeterLib\fP On systems that support a dynamically-loadable greeter library, the name of the library. The default is -\fI__projectroot__/lib/X11/xdm/libXdmGreet.so\fP. +\fI __projectroot__/lib/X11/xdm/libXdmGreet.so\fP. .IP \fBDisplayManager.choiceTimeout\fP Number of seconds to wait for display to respond after user has selected a host from the chooser. If the display sends an XDMCP @@ -384,17 +412,17 @@ which describes the various resources that are appropriate to place in this file. There is no default value for this resource, but -\fI__projectroot__/lib/X11/xdm/Xresources\fP +\fI __projectroot__/lib/X11/xdm/Xresources\fP is the conventional name. .IP "\fBDisplayManager.\fP\fIDISPLAY\fP\fB.chooser\fP" Specifies the program run to offer a host menu for Indirect queries redirected to the special host name CHOOSER. -\fI__projectroot__/lib/X11/xdm/chooser\fP is the default. +\fI __projectroot__/lib/X11/xdm/chooser\fP is the default. See the sections \fBXDMCP Access Control\fP and \fBChooser\fP. .IP "\fBDisplayManager.\fP\fIDISPLAY\fP\fB.xrdb\fP" Specifies the program used to load the resources. By default, .I xdm -uses \fI__projectroot__/bin/xrdb\fP. +uses \fI __projectroot__/bin/xrdb\fP. .IP "\fBDisplayManager.\fP\fIDISPLAY\fP\fB.cpp\fP" This specifies the name of the C preprocessor which is used by \fIxrdb\fP. .IP "\fBDisplayManager.\fP\fIDISPLAY\fP\fB.setup\fP" @@ -412,7 +440,7 @@ See the section \fBStartup Program.\fP .IP "\fBDisplayManager.\fP\fIDISPLAY\fP\fB.session\fP" This specifies the session to be executed (not running as root). -By default, \fI__projectroot__/bin/xterm\fP is +By default, \fI __projectroot__/bin/xterm\fP is run. The conventional name is \fIXsession\fP. See the section .B "Session Program." @@ -498,7 +526,7 @@ will fall back to this program. This program is executed with no arguments, but executes using the same environment variables as the session would have had (see the section \fBSession Program\fP). -By default, \fI__projectroot__/bin/xterm\fP is used. +By default, \fI __projectroot__/bin/xterm\fP is used. .IP "\fBDisplayManager.\fP\fIDISPLAY\fP\fB.grabServer\fP" .IP "\fBDisplayManager.\fP\fIDISPLAY\fP\fB.grabTimeout\fP" To improve security, @@ -577,7 +605,7 @@ First, the .I xdm configuration file should be set up. -Make a directory (usually \fI__projectroot__/lib/X11/xdm\fP) to contain all +Make a directory (usually \fI __projectroot__/lib/X11/xdm\fP) to contain all of the relevant files. .LP Here is a reasonable configuration file, which could be @@ -632,6 +660,11 @@ This can be used to prevent an xdm server from appearing on menus based on Broadcast queries. .PP +To only respond to Direct queries for a host or pattern, +it can be followed by the optional ``NOBROADCAST'' keyword. +This can be used to prevent an xdm server from appearing on +menus based on Broadcast queries. +.PP An Indirect entry also contains a host name or pattern, but follows it with a list of host names or macros to which indirect queries should be sent. @@ -725,6 +758,33 @@ \fBDisplayManager.choiceTimeout\fP seconds) and forwards the request to the chosen host, which starts a session on that display. .\" +.SH LISTEN +The following configuration directive is also defined for the Xaccess +configuration file: +.IP "\fBLISTEN\fP \fIinterface\fP \fI[list of multicast group addresses]\fP" +\fIinterface\fP may be a hostname or IP addresss representing a +network interface on this machine, or the wildcard * to represent all +available network interfaces. +.PP +If one or more LISTEN lines are specified, xdm only listens for XDMCP +connections on the specified interfaces. If multicast group addresses +are listed on a listen line, xdm joins the multicast groups on the +given interface. +.PP +If no LISTEN lines are given, the original behavior of listening on +all interfaces is preserved for backwards compatibility. +.PP +To disable listening for XDMCP connections altogther, a line of LISTEN +with no addresses may be specified, or the previously supported method +of setting DisplayManager.requestPort to 0 may be used. +.PP +Example: +.ta 2i 4i +.nf +LISTEN 10.11.12.13 # Listen only on this interface, as long + # as no other listen directives appear in + # file. +.fi .SH "LOCAL SERVER SPECIFICATION" .PP The resource \fBDisplayManager.servers\fP gives a server specification @@ -830,6 +890,15 @@ SHELL the value of \fBDisplayManager.\fP\fIDISPLAY\fP\fB.systemShell\fP XAUTHORITY may be set to an authority file .fi +.IP "\fBxlogin.Login.allowRootLogin\fP" +If set to ``false'', don't allow root (and any other user with uid = 0) to +log in directly. +The default is ``true''. +.IP "\fBxlogin.Login.allowNullPasswd\fP" +If set to ``true'', allow an otherwise failing password match to succeed +if the account does not require a password at all. +The default is ``false'', so only users that have passwords assigned can +log in. .PP Note that since \fIxdm\fP grabs the keyboard, any other windows will not be able to receive keyboard input. They will be able to interact with @@ -1230,7 +1299,7 @@ .nf .ta .5i - xdm \-server ":0 SUN-3/60CG4 local __projectroot__/bin/X :0" + xdm \-server \(lq:0 SUN-3/60CG4 local __projectroot__/bin/X :0\(rq .fi .PP Index: xc/programs/xdm/xdmauth.c diff -u xc/programs/xdm/xdmauth.c:1.5 xc/programs/xdm/xdmauth.c:1.5.4.1 --- xc/programs/xdm/xdmauth.c:1.5 Fri Dec 14 15:01:25 2001 +++ xc/programs/xdm/xdmauth.c Wed Sep 17 01:58:17 2003 @@ -26,7 +26,7 @@ from The Open Group. */ -/* $XFree86: xc/programs/xdm/xdmauth.c,v 1.5 2001/12/14 20:01:25 dawes Exp $ */ +/* $XFree86: xc/programs/xdm/xdmauth.c,v 1.5.4.1 2003/09/17 05:58:17 herrb Exp $ */ /* * xdm - display manager daemon * Author: Keith Packard, MIT X Consortium @@ -135,7 +135,13 @@ } memmove( (char *)new->name, name, namelen); new->name_length = namelen; - GenerateAuthData ((char *)new->data, new->data_length); + if (!GenerateAuthData ((char *)new->data, new->data_length)) + { + free ((char *) new->name); + free ((char *) new->data); + free ((char *) new); + return (Xauth *) 0; + } /* * set the first byte of the session key to zero as it * is a DES key and only uses 56 bits Index: xc/programs/xdm/xdmcp.c diff -u xc/programs/xdm/xdmcp.c:3.21 xc/programs/xdm/xdmcp.c:3.21.2.1 --- xc/programs/xdm/xdmcp.c:3.21 Tue Dec 10 17:37:17 2002 +++ xc/programs/xdm/xdmcp.c Wed Sep 17 01:58:17 2003 @@ -26,7 +26,7 @@ from The Open Group. */ -/* $XFree86: xc/programs/xdm/xdmcp.c,v 3.21 2002/12/10 22:37:17 tsi Exp $ */ +/* $XFree86: xc/programs/xdm/xdmcp.c,v 3.21.2.1 2003/09/17 05:58:17 herrb Exp $ */ /* * xdm - display manager daemon @@ -55,13 +55,6 @@ #include #endif #endif -#if defined(__SVR4) && defined(__sun) - /* - * make sure we get the resolver's version of gethostbyname - * otherwise we may not get all the addresses! - */ -#define gethostbyname res_gethostbyname -#endif #include #include @@ -72,27 +65,28 @@ /* * misc externs */ -extern int Rescan, ChildReady; -extern int sourceAddress; +extern volatile int Rescan; +extern int sourceAddress, ChildReady; /* * Forward reference */ -static void broadcast_respond (struct sockaddr *from, int fromlen, int length); -static void forward_respond (struct sockaddr *from, int fromlen, int length); -static void manage (struct sockaddr *from, int fromlen, int length); -static void query_respond (struct sockaddr *from, int fromlen, int length); -static void request_respond (struct sockaddr *from, int fromlen, int length); -static void send_accept (struct sockaddr *to, int tolen, CARD32 sessionID, ARRAY8Ptr authenticationName, ARRAY8Ptr authenticationData, ARRAY8Ptr authorizationName, ARRAY8Ptr authorizationData); -static void send_alive (struct sockaddr *from, int fromlen, int length); -static void send_decline (struct sockaddr *to, int tolen, ARRAY8Ptr authenticationName, ARRAY8Ptr authenticationData, ARRAY8Ptr status); -static void send_failed (struct sockaddr *from, int fromlen, char *name, CARD32 sessionID, char *reason); -static void send_refuse (struct sockaddr *from, int fromlen, CARD32 sessionID); -static void send_unwilling (struct sockaddr *from, int fromlen, ARRAY8Ptr authenticationName, ARRAY8Ptr status); -static void send_willing (struct sockaddr *from, int fromlen, ARRAY8Ptr authenticationName, ARRAY8Ptr status); - +static void broadcast_respond (struct sockaddr *from, int fromlen, int length, int fd); +static void forward_respond (struct sockaddr *from, int fromlen, int length, int fd); +static void manage (struct sockaddr *from, int fromlen, int length, int fd); +static void query_respond (struct sockaddr *from, int fromlen, int length, int fd); +static void request_respond (struct sockaddr *from, int fromlen, int length, int fd); +static void send_accept (struct sockaddr *to, int tolen, CARD32 sessionID, ARRAY8Ptr authenticationName, ARRAY8Ptr authenticationData, ARRAY8Ptr authorizationName, ARRAY8Ptr authorizationData, int fd); +static void send_alive (struct sockaddr *from, int fromlen, int length, int fd); +static void send_decline (struct sockaddr *to, int tolen, ARRAY8Ptr authenticationName, ARRAY8Ptr authenticationData, ARRAY8Ptr status, int fd); +static void send_failed (struct sockaddr *from, int fromlen, char *name, CARD32 sessionID, char *reason, int fd); +static void send_refuse (struct sockaddr *from, int fromlen, CARD32 sessionID, int fd); +static void send_unwilling (struct sockaddr *from, int fromlen, ARRAY8Ptr authenticationName, ARRAY8Ptr status, int fd); +static void send_willing (struct sockaddr *from, int fromlen, ARRAY8Ptr authenticationName, ARRAY8Ptr status, int fd); +#ifdef STREAMSCONN int xdmcpFd = -1; +#endif int chooserFd = -1; FD_TYPE WellKnownSocketsMask; @@ -103,22 +97,44 @@ void DestroyWellKnownSockets (void) { +#ifdef STREAMSCONN if (xdmcpFd != -1) { close (xdmcpFd); + FD_CLR(xdmcpFd, &WellKnownSocketsMask); xdmcpFd = -1; } +#endif if (chooserFd != -1) { close (chooserFd); + FD_CLR(chooserFd, &WellKnownSocketsMask); chooserFd = -1; } + CloseListenSockets(); +} + +static int +FD_ANYSET(fd_set *fds) +{ + int i; + char *mask = (char *) fds; + + for (i = 0 ; i < sizeof(fds); i++) { + if (mask[i]) + return TRUE; + } + return FALSE; } int AnyWellKnownSockets (void) { - return xdmcpFd != -1 || chooserFd != -1; + return +#ifdef STREAMS_CONN + xdmcpFd != -1 || +#endif + chooserFd != -1 || FD_ANYSET(&WellKnownSocketsMask); } static XdmcpBuffer buffer; @@ -161,7 +177,7 @@ default: return; } - XdmcpFlush (xdmcpFd, &buffer, (XdmcpNetaddr) addr, addrlen); + XdmcpFlush (*((int *) closure), &buffer, (XdmcpNetaddr) addr, addrlen); return; } @@ -193,7 +209,8 @@ struct sockaddr *from, int fromlen, ARRAYofARRAY8Ptr authenticationNames, - xdmOpCode type) + xdmOpCode type, + int fd) { ARRAY8Ptr authenticationName; ARRAY8 status; @@ -217,10 +234,10 @@ authenticationName = ChooseAuthentication (authenticationNames); if (Willing (&addr, connectionType, authenticationName, &status, type)) - send_willing (from, fromlen, authenticationName, &status); + send_willing (from, fromlen, authenticationName, &status, fd); else if (type == QUERY) - send_unwilling (from, fromlen, authenticationName, &status); + send_unwilling (from, fromlen, authenticationName, &status, fd); XdmcpDisposeARRAY8 (&status); } @@ -228,7 +245,8 @@ indirect_respond ( struct sockaddr *from, int fromlen, - int length) + int length, + int fd) { ARRAYofARRAY8 queryAuthenticationNames; ARRAY8 clientAddress; @@ -264,13 +282,13 @@ XdmcpWriteARRAY8 (&buffer, &clientPort); XdmcpWriteARRAYofARRAY8 (&buffer, &queryAuthenticationNames); - localHostAsWell = ForEachMatchingIndirectHost (&clientAddress, connectionType, sendForward, (char *) 0); + localHostAsWell = ForEachMatchingIndirectHost (&clientAddress, connectionType, sendForward, (char *) &fd); XdmcpDisposeARRAY8 (&clientAddress); XdmcpDisposeARRAY8 (&clientPort); if (localHostAsWell) all_query_respond (from, fromlen, &queryAuthenticationNames, - INDIRECT_QUERY); + INDIRECT_QUERY, fd); } else { @@ -279,8 +297,8 @@ XdmcpDisposeARRAYofARRAY8 (&queryAuthenticationNames); } -static void -ProcessRequestSocket (void) +void +ProcessRequestSocket (int fd) { XdmcpHeader header; struct sockaddr addr; @@ -288,7 +306,7 @@ Debug ("ProcessRequestSocket\n"); bzero ((char *) &addr, sizeof (addr)); - if (!XdmcpFill (xdmcpFd, &buffer, (XdmcpNetaddr) &addr, &addrlen)) { + if (!XdmcpFill (fd, &buffer, (XdmcpNetaddr) &addr, &addrlen)) { Debug ("XdmcpFill failed\n"); return; } @@ -305,25 +323,25 @@ switch (header.opcode) { case BROADCAST_QUERY: - broadcast_respond (&addr, addrlen, header.length); + broadcast_respond ((struct sockaddr *) &addr, addrlen, header.length, fd); break; case QUERY: - query_respond (&addr, addrlen, header.length); + query_respond ((struct sockaddr *) &addr, addrlen, header.length, fd); break; case INDIRECT_QUERY: - indirect_respond (&addr, addrlen, header.length); + indirect_respond ((struct sockaddr *) &addr, addrlen, header.length, fd); break; case FORWARD_QUERY: - forward_respond (&addr, addrlen, header.length); + forward_respond ((struct sockaddr *) &addr, addrlen, header.length, fd); break; case REQUEST: - request_respond (&addr, addrlen, header.length); + request_respond ((struct sockaddr *) &addr, addrlen, header.length, fd); break; case MANAGE: - manage (&addr, addrlen, header.length); + manage ((struct sockaddr *) &addr, addrlen, header.length, fd); break; case KEEPALIVE: - send_alive (&addr, addrlen, header.length); + send_alive ((struct sockaddr *) &addr, addrlen, header.length, fd); break; } } @@ -342,15 +360,21 @@ nready, Rescan, ChildReady); if (nready > 0) { +#ifdef STREAMSCONN if (xdmcpFd >= 0 && FD_ISSET (xdmcpFd, &reads)) ProcessRequestSocket (); +#endif if (chooserFd >= 0 && FD_ISSET (chooserFd, &reads)) + { #ifdef ISC if (!ChildReady) { WaitForSomething (); } else #endif ProcessChooserSocket (chooserFd); + FD_CLR(chooserFd, &reads); + } + ProcessListenSockets(&reads); } if (ChildReady) { @@ -384,7 +408,8 @@ struct sockaddr *from, int fromlen, int length, - xdmOpCode type) + xdmOpCode type, + int fd) { ARRAYofARRAY8 queryAuthenticationNames; int expectedLen; @@ -396,7 +421,7 @@ for (i = 0; i < (int)queryAuthenticationNames.length; i++) expectedLen += 2 + queryAuthenticationNames.data[i].length; if (length == expectedLen) - all_query_respond (from, fromlen, &queryAuthenticationNames, type); + all_query_respond (from, fromlen, &queryAuthenticationNames, type, fd); XdmcpDisposeARRAYofARRAY8 (&queryAuthenticationNames); } @@ -404,19 +429,21 @@ query_respond ( struct sockaddr *from, int fromlen, - int length) + int length, + int fd) { Debug ("Query respond %d\n", length); - direct_query_respond (from, fromlen, length, QUERY); + direct_query_respond (from, fromlen, length, QUERY, fd); } static void broadcast_respond ( struct sockaddr *from, int fromlen, - int length) + int length, + int fd) { - direct_query_respond (from, fromlen, length, BROADCAST_QUERY); + direct_query_respond (from, fromlen, length, BROADCAST_QUERY, fd); } /* computes an X display name */ @@ -516,7 +543,8 @@ forward_respond ( struct sockaddr *from, int fromlen, - int length) + int length, + int fd) { ARRAY8 clientAddress; ARRAY8 clientPort; @@ -576,7 +604,7 @@ client = (struct sockaddr *) &in_addr; clientlen = sizeof (in_addr); all_query_respond (client, clientlen, &authenticationNames, - FORWARD_QUERY); + FORWARD_QUERY, fd); } break; #endif @@ -599,7 +627,7 @@ clientlen = sizeof (un_addr); #endif all_query_respond (client, clientlen, &authenticationNames, - FORWARD_QUERY); + FORWARD_QUERY, fd); } break; #endif @@ -629,7 +657,8 @@ struct sockaddr *from, int fromlen, ARRAY8Ptr authenticationName, - ARRAY8Ptr status) + ARRAY8Ptr status, + int fd) { XdmcpHeader header; @@ -647,7 +676,7 @@ XdmcpWriteARRAY8 (&buffer, authenticationName); XdmcpWriteARRAY8 (&buffer, &Hostname); XdmcpWriteARRAY8 (&buffer, status); - XdmcpFlush (xdmcpFd, &buffer, (XdmcpNetaddr) from, fromlen); + XdmcpFlush (fd, &buffer, (XdmcpNetaddr) from, fromlen); } static void @@ -655,7 +684,8 @@ struct sockaddr *from, int fromlen, ARRAY8Ptr authenticationName, - ARRAY8Ptr status) + ARRAY8Ptr status, + int fd) { XdmcpHeader header; @@ -671,7 +701,7 @@ XdmcpWriteHeader (&buffer, &header); XdmcpWriteARRAY8 (&buffer, &Hostname); XdmcpWriteARRAY8 (&buffer, status); - XdmcpFlush (xdmcpFd, &buffer, (XdmcpNetaddr) from, fromlen); + XdmcpFlush (fd, &buffer, (XdmcpNetaddr) from, fromlen); } static unsigned long globalSessionID; @@ -696,7 +726,8 @@ request_respond ( struct sockaddr *from, int fromlen, - int length) + int length, + int fd) { CARD16 displayNumber; ARRAY16 connectionTypes; @@ -821,14 +852,14 @@ &authenticationName, &authenticationData, &authorizationName, - &authorizationData); + &authorizationData, fd); } else { decline: ; send_decline (from, fromlen, &authenticationName, &authenticationData, - reason); + reason, fd); if (pdpy) DisposeProtoDisplay (pdpy); } @@ -850,7 +881,8 @@ ARRAY8Ptr authenticationName, ARRAY8Ptr authenticationData, ARRAY8Ptr authorizationName, - ARRAY8Ptr authorizationData) + ARRAY8Ptr authorizationData, + int fd) { XdmcpHeader header; @@ -868,7 +900,7 @@ XdmcpWriteARRAY8 (&buffer, authenticationData); XdmcpWriteARRAY8 (&buffer, authorizationName); XdmcpWriteARRAY8 (&buffer, authorizationData); - XdmcpFlush (xdmcpFd, &buffer, (XdmcpNetaddr) to, tolen); + XdmcpFlush (fd, &buffer, (XdmcpNetaddr) to, tolen); } static void @@ -877,7 +909,8 @@ int tolen, ARRAY8Ptr authenticationName, ARRAY8Ptr authenticationData, - ARRAY8Ptr status) + ARRAY8Ptr status, + int fd) { XdmcpHeader header; @@ -892,14 +925,15 @@ XdmcpWriteARRAY8 (&buffer, status); XdmcpWriteARRAY8 (&buffer, authenticationName); XdmcpWriteARRAY8 (&buffer, authenticationData); - XdmcpFlush (xdmcpFd, &buffer, (XdmcpNetaddr) to, tolen); + XdmcpFlush (fd, &buffer, (XdmcpNetaddr) to, tolen); } static void manage ( struct sockaddr *from, int fromlen, - int length) + int length, + int fd) { CARD32 sessionID; CARD16 displayNumber; @@ -949,7 +983,7 @@ Debug ("Session ID %ld refused\n", (long) sessionID); if (pdpy) Debug ("Existing Session ID %ld\n", (long) pdpy->sessionID); - send_refuse (from, fromlen, sessionID); + send_refuse (from, fromlen, sessionID, fd); } else { @@ -960,7 +994,8 @@ Debug ("Computed display name: %s\n", name); if (!name) { - send_failed (from, fromlen, "(no name)", sessionID, "out of memory"); + send_failed (from, fromlen, "(no name)", sessionID, + "out of memory", fd); goto abort; } d = FindDisplayByName (name); @@ -972,7 +1007,8 @@ class = malloc (displayClass.length + 1); if (!class) { - send_failed (from, fromlen, name, sessionID, "out of memory"); + send_failed (from, fromlen, name, sessionID, + "out of memory", fd); goto abort; } if (displayClass.length) @@ -988,7 +1024,8 @@ from_save = (XdmcpNetaddr) malloc (fromlen); if (!from_save) { - send_failed (from, fromlen, name, sessionID, "out of memory"); + send_failed (from, fromlen, name, sessionID, + "out of memory", fd); goto abort; } memmove( from_save, from, fromlen); @@ -996,7 +1033,8 @@ if (!d) { free ((char *) from_save); - send_failed (from, fromlen, name, sessionID, "out of memory"); + send_failed (from, fromlen, name, sessionID, + "out of memory", fd); goto abort; } d->displayType.location = Foreign; @@ -1008,6 +1046,7 @@ d->displayNumber = pdpy->displayNumber; ClientAddress (from, &clientAddress, &clientPort, &connectionType); d->useChooser = 0; + d->xdmcpFd = fd; if (IsIndirectClient (&clientAddress, connectionType)) { Debug ("IsIndirectClient\n"); @@ -1028,7 +1067,8 @@ { free ((char *) from_save); free ((char *) d); - send_failed (from, fromlen, name, sessionID, "out of memory"); + send_failed (from, fromlen, name, sessionID, + "out of memory", fd); goto abort; } d->authorizations[0] = pdpy->fileAuthorization; @@ -1052,7 +1092,8 @@ char *reason) { Debug ("Display start failed, sending Failed\n"); - send_failed ((struct sockaddr *)(d->from), d->fromlen, d->name, d->sessionID, reason); + send_failed ((struct sockaddr *)(d->from), d->fromlen, d->name, + d->sessionID, reason, d->xdmcpFd); } static void @@ -1061,7 +1102,8 @@ int fromlen, char *name, CARD32 sessionID, - char *reason) + char *reason, + int fd) { static char buf[256]; XdmcpHeader header; @@ -1078,14 +1120,15 @@ XdmcpWriteHeader (&buffer, &header); XdmcpWriteCARD32 (&buffer, sessionID); XdmcpWriteARRAY8 (&buffer, &status); - XdmcpFlush (xdmcpFd, &buffer, (XdmcpNetaddr) from, fromlen); + XdmcpFlush (fd, &buffer, (XdmcpNetaddr) from, fromlen); } static void send_refuse ( struct sockaddr *from, int fromlen, - CARD32 sessionID) + CARD32 sessionID, + int fd) { XdmcpHeader header; @@ -1095,14 +1138,15 @@ header.length = 4; XdmcpWriteHeader (&buffer, &header); XdmcpWriteCARD32 (&buffer, sessionID); - XdmcpFlush (xdmcpFd, &buffer, (XdmcpNetaddr) from, fromlen); + XdmcpFlush (fd, &buffer, (XdmcpNetaddr) from, fromlen); } static void send_alive ( struct sockaddr *from, int fromlen, - int length) + int length, + int fd) { CARD32 sessionID; CARD16 displayNumber; @@ -1136,7 +1180,7 @@ XdmcpWriteHeader (&buffer, &header); XdmcpWriteCARD8 (&buffer, sendRunning); XdmcpWriteCARD32 (&buffer, sendSessionID); - XdmcpFlush (xdmcpFd, &buffer, (XdmcpNetaddr) from, fromlen); + XdmcpFlush (fd, &buffer, (XdmcpNetaddr) from, fromlen); } } } @@ -1155,9 +1199,12 @@ struct hostent *hostent = NULL; char dotted[20]; char *local_name = ""; + int af_type; + + af_type = AF_INET; hostent = gethostbyaddr ((char *)connectionAddress->data, - connectionAddress->length, AF_INET); + connectionAddress->length, af_type); if (hostent) { /* check for DNS spoofing */ @@ -1198,7 +1245,7 @@ break; } return name; - } +} #if 0 static int Index: xc/programs/xdm/config/Xaccess diff -u xc/programs/xdm/config/Xaccess:1.3 xc/programs/xdm/config/Xaccess:1.3.8.1 --- xc/programs/xdm/config/Xaccess:1.3 Wed Jan 17 18:45:24 2001 +++ xc/programs/xdm/config/Xaccess Wed Sep 17 01:58:18 2003 @@ -1,6 +1,5 @@ # $Xorg: Xaccess,v 1.3 2000/08/17 19:54:17 cpqbld Exp $ -# -# $XFree86: xc/programs/xdm/config/Xaccess,v 1.3 2001/01/17 23:45:24 dawes Exp $ +# $XFree86: xc/programs/xdm/config/Xaccess,v 1.3.8.1 2003/09/17 05:58:18 herrb Exp $ # # Access control file for XDMCP connections # @@ -24,6 +23,10 @@ # # %name list of hosts ... # +# To control which addresses xdm listens for requests on: +# +# LISTEN address [list of multicast groups ... ] +# # The first form tells xdm which displays to respond to itself. # The second form tells xdm to forward indirect queries from hosts matching # the specified pattern to the indicated list of hosts. @@ -32,6 +35,9 @@ # address and display the results on the terminal. # The fourth form is similar to the third, except instead of using the # broadcast address, it sends DirectQuerys to each of the hosts in the list +# The fifth form tells xdm which addresses to listen for incoming connections +# on. If present, xdm will only listen for connections on the specified +# interfaces and/or multicast groups. # # In all cases, xdm uses the first entry which matches the terminal; # for IndirectQuery messages only entries with right hand sides can @@ -68,3 +74,17 @@ #%hostlist host-a host-b #* CHOOSER %hostlist # + +# +# If you have a machine with multiple network interfaces or IP addresses +# you can control which interfaces accept XDMCP packets by listing a LISTEN +# line for each interface you want to listen on. You can additionally list +# one or more multicast groups after each address to listen on those groups +# on that address. +# +# If no LISTEN is specified, the default is the same as "LISTEN *" - listen on +# all unicast interfaces, but not for multicast packets. If any LISTEN lines +# are specified, then only the listed interfaces will be listened on. +# + +#LISTEN * ff02::1 Index: xc/programs/xdm/greeter/Imakefile diff -u xc/programs/xdm/greeter/Imakefile:1.7 xc/programs/xdm/greeter/Imakefile:1.7.2.1 --- xc/programs/xdm/greeter/Imakefile:1.7 Sat Nov 30 13:59:35 2002 +++ xc/programs/xdm/greeter/Imakefile Wed Sep 17 01:58:18 2003 @@ -3,7 +3,7 @@ -XCOMM $XFree86: xc/programs/xdm/greeter/Imakefile,v 1.7 2002/11/30 18:59:35 herrb Exp $ +XCOMM $XFree86: xc/programs/xdm/greeter/Imakefile,v 1.7.2.1 2003/09/17 05:58:18 herrb Exp $ #define DoNormalLib NO #define DoSharedLib YES @@ -11,7 +11,7 @@ #define DoProfileLib NO #define LibName XdmGreet #define LibHeaders NO -SOXDMGREETREV = 1.0 +SOXDMGREETREV = 2.0 #define SoRev SOXDMGREETREV #if UseXKBInClients @@ -77,10 +77,12 @@ GREETER_DEFINES = -DGREET_LIB #endif +XPM_DEFINES = -DXPM + INCLUDES = -I.. $(KRBIV_INCLUDES) $(KRB5_INCLUDE) DEFINES = $(GREETER_DEFINES) $(XDMAUTH_DEFINES) $(RPC_DEFINES) \ $(KRBIV_DEFINES) $(KRB5_DEFINES) $(PWD_DEFINES) $(PAM_DEFINES) \ - $(XKB_CLIENT_DEFINES) + $(XKB_CLIENT_DEFINES) $(XPM_DEFINES) SRCS = greet.c verify.c Login.c OBJS = greet.o verify.o Login.o Index: xc/programs/xdm/greeter/Login.c diff -u xc/programs/xdm/greeter/Login.c:3.16 xc/programs/xdm/greeter/Login.c:3.16.2.1 --- xc/programs/xdm/greeter/Login.c:3.16 Sun Oct 6 16:42:16 2002 +++ xc/programs/xdm/greeter/Login.c Wed Sep 17 01:58:18 2003 @@ -26,7 +26,7 @@ from The Open Group. */ -/* $XFree86: xc/programs/xdm/greeter/Login.c,v 3.16 2002/10/06 20:42:16 herrb Exp $ */ +/* $XFree86: xc/programs/xdm/greeter/Login.c,v 3.16.2.1 2003/09/17 05:58:18 herrb Exp $ */ /* * xdm - display manager daemon @@ -137,7 +137,12 @@ {XtNpasswdPrompt, XtCPasswdPrompt, XtRString, sizeof (char *), offset(passwdPrompt), XtRString, "Password: "}, {XtNfail, XtCFail, XtRString, sizeof (char *), - offset(fail), XtRString, "Login incorrect"}, + offset(fail), XtRString, +#if defined(sun) && defined(SVR4) + "Login incorrect or not on system console if root"}, +#else + "Login incorrect"}, +#endif {XtNfailTimeout, XtCFailTimeout, XtRInt, sizeof (int), offset(failTimeout), XtRImmediate, (XtPointer) 10}, {XtNnotifyDone, XtCCallback, XtRFunction, sizeof (XtPointer), @@ -1108,7 +1113,6 @@ w->login.logoValid = False; goto SkipXpmLoad; } - else myAttributes.valuemask |= XpmReturnPixels; myAttributes.valuemask |= XpmReturnExtensions; Index: xc/programs/xdm/greeter/greet.c diff -u xc/programs/xdm/greeter/greet.c:3.16 xc/programs/xdm/greeter/greet.c:3.16.2.1 --- xc/programs/xdm/greeter/greet.c:3.16 Sun Oct 6 16:42:16 2002 +++ xc/programs/xdm/greeter/greet.c Wed Sep 17 01:58:18 2003 @@ -26,7 +26,7 @@ from The Open Group. */ -/* $XFree86: xc/programs/xdm/greeter/greet.c,v 3.16 2002/10/06 20:42:16 herrb Exp $ */ +/* $XFree86: xc/programs/xdm/greeter/greet.c,v 3.16.2.1 2003/09/17 05:58:18 herrb Exp $ */ /* * xdm - display manager daemon @@ -145,8 +145,10 @@ data->name, strlen (data->passwd)); switch (status) { case NOTIFY_OK: - strcpy (name, data->name); - strcpy (password, data->passwd); + strncpy (name, data->name, sizeof(name)); + name[sizeof(name)-1] = '\0'; + strncpy (password, data->passwd, sizeof(password)); + password[sizeof(password)-1] = '\0'; bzero (data->passwd, PASSWORD_LEN); code = 0; done = 1; @@ -280,6 +282,9 @@ Debug ("Greet connection closed\n"); } +#define WHITESPACE 0 +#define ARGUMENT 1 + static int Greet (struct display *d, struct greet_info *greet) { @@ -306,7 +311,23 @@ Debug ("Done dispatch %s\n", d->name); if (code == 0) { - greet->name = name; + char *ptr; + unsigned int c,state = WHITESPACE; + + /* + * Process the name string to get rid of white spaces. + */ + for (ptr = name; state == WHITESPACE; ptr++) + { + c = (unsigned int)(*ptr); + if (c == ' ') + continue; + + state = ARGUMENT; + break; + } + + greet->name = ptr; greet->password = password; XtSetArg (arglist[0], XtNsessionArgument, (char *) &(greet->string)); XtSetArg (arglist[1], XtNallowNullPasswd, (char *) &(greet->allow_null_passwd)); Index: xc/programs/xdm/greeter/verify.c diff -u xc/programs/xdm/greeter/verify.c:3.24 xc/programs/xdm/greeter/verify.c:3.24.2.1 --- xc/programs/xdm/greeter/verify.c:3.24 Mon Nov 25 20:16:09 2002 +++ xc/programs/xdm/greeter/verify.c Wed Sep 17 01:58:18 2003 @@ -26,7 +26,7 @@ from The Open Group. */ -/* $XFree86: xc/programs/xdm/greeter/verify.c,v 3.24 2002/11/26 01:16:09 dawes Exp $ */ +/* $XFree86: xc/programs/xdm/greeter/verify.c,v 3.24.2.1 2003/09/17 05:58:18 herrb Exp $ */ /* * xdm - display manager daemon @@ -304,6 +304,47 @@ char **argv; Debug ("Verify %s ...\n", greet->name); + +#if defined(sun) && defined(SVR4) + /* Solaris: If CONSOLE is set to /dev/console in /etc/default/login, + then root can only login on system console */ + +# define SOLARIS_LOGIN_DEFAULTS "/etc/default/login" + + if (strcmp(greet->name, "root") == 0) { + char *console = NULL, *tmp = NULL; + FILE *fs; + + if ((fs= fopen(SOLARIS_LOGIN_DEFAULTS, "r")) != NULL) + { + char str[120]; + while (!feof(fs)) + { + fgets(str, 120, fs); + if(str[0] == '#' || strlen(str) < 8) + continue; + if((tmp = strstr(str, "CONSOLE=")) != NULL) + console = strdup((tmp+8)); + } + fclose(fs); + if ( console != NULL && + (strncmp(console, "/dev/console", 12) == 0) && + (strncmp(d->name,":0",2) != 0) ) + { + Debug("Not on system console\n"); + bzero(greet->password, strlen(greet->password)); + XFree(console); + return 0; + } + Xfree(console); + } + else + { + Debug("Could not open %s\n", SOLARIS_LOGIN_DEFAULTS); + } + } +#endif + #ifndef USE_PAM p = getpwnam (greet->name); endpwent();