kterm-6.2.0 $B$r0J2<$N$h$&$J4D6-$GMxMQ$7$F$$$k$H!"(B
	OS:		NetBSD-1.1, NetBSD-1.2, FreeBSD-2.2.2
	$BG'>ZJ}<0(B:	MIT-MAGIC-COOKIE-1
	$B$=$NB>$N>r7o(B:	$B%[!<%`%G%#%l%/%H%j$OJL%^%7%s$K$"$j!"(BNFS $B$G(B
			$B%^%&%s%H$7$F$$$k!#(BNFS $B%5!<%P$O(B kterm $B$NAv9T$9(B
			$B$k%^%7%s$KBP$7$F!"(Broot $B%"%/%;%9$r5v$7$F$$$J$$!#(B
$B%U%!%$%k(B .Xauthority $B$X%"%/%;%9$G$-$J$$$?$a!"2<5-$N$h$&$K%(%i!<$,5/$3(B
$B$k$3$H$,$"$j$^$9!#(B
	% ./kterm
	Xlib: connection to ":0.0" refused by server
	Xlib: Client is not authorized to connect to Server
	./kterm Xt error: Can't open display: :0.0
XFree86-3.2 $BImB0$N(B xterm $B$K$O!"$3$NLdBj$X$NBP:v$,4^$^$l$F$$$k$N$G!"H4(B
$B$-=P$7$F(Bkterm-6.2.0 $B$KEv$F$^$7$?!#0J2<$K<($9%Q%C%A$,$=$l$G$9!#(B

$B$3$N%Q%C%A$K$O!"(Brevoke(2) $B8F$S$@$7$NDI2C$b4^$^$l$F$$$^$9$,!"$3$l$O>e$N(B
$BLdBj$H$O4X78$"$j$^$;$s!#%G%#%9%/%j%W%?(B ttydev $B$rMxMQ$9$k%W%m%;%9$,;D$C(B
$B$F$$$?>l9g$X$NBP:v$G$9!#!J$3$l$b(B XFree86-3.2 $B$+$i;}$C$F$-$?$b$N$G$9!#!K(B

$B$J$*!"(BXFree86-3.2 $B$K$O!"(BUSE_POSIX_TERMIOS $B$H$$$&(B #ifdef $B=hM}$b4^$^$l$F(B
$B$*$j!"(B4.4BSD $B7O$N(B OS $B$rMxMQ$9$k>l9g$K$O!"$3$NJQ99$b9T$C$F$*$$$?J}$,NI(B
$B$5$=$&$J$N$G$9$,!"0J2<$N%Q%C%A$K$O4^$^$l$F$$$^$;$s!#(B

				-- Noriyuki Soda <soda@sra.co.jp>

Index: main.c
*** main.c	1996/07/12 05:01:38	1.1
--- main.c	1997/06/03 12:02:44	1.3
***************
*** 238,246 ****
--- 238,257 ----
  
  #ifdef _POSIX_SOURCE
  #define USE_POSIX_WAIT
+ #define HAS_POSIX_SAVED_IDS
  #endif
  #ifdef SVR4
  #define USE_POSIX_WAIT
+ #define HAS_POSIX_SAVED_IDS
+ #endif
+ 
+ #if !defined(MINIX) && !defined(WIN32)
+ #include <sys/param.h>	/* for NOFILE */
+ #endif
+ 
+ #if (BSD >= 199103)
+ #define USE_POSIX_WAIT
+ #define HAS_POSIX_SAVED_IDS
  #endif
  
  #include <stdio.h>
***************
*** 1307,1328 ****
  
  	/* Init the Toolkit. */
  	XtSetErrorHandler(xt_error);
  #ifdef KTERM
! 	toplevel = XtAppInitialize (&app_con, "KTerm", 
  #else /* !KTERM */
! 	toplevel = XtAppInitialize (&app_con, "XTerm", 
  #endif /* !KTERM */
  				    optionDescList, XtNumber(optionDescList), 
  				    &argc, argv, fallback_resources, NULL, 0);
  
! 	XtGetApplicationResources(toplevel, (XtPointer) &resource,
  				  application_resources,
  				  XtNumber(application_resources), NULL, 0);
  
  #ifdef __sgi
! 	if (resource.useLocale)
! 	    setlocale(LC_ALL,"");
  #endif
  
  	waiting_for_initial_map = resource.wait_for_map;
  
--- 1318,1367 ----
  
  	/* Init the Toolkit. */
  	XtSetErrorHandler(xt_error);
+ 	{
+ #ifdef HAS_POSIX_SAVED_IDS
+ 	    uid_t euid = geteuid();
+ 	    gid_t egid = getegid();
+ 	    uid_t ruid = getuid();
+ 	    gid_t rgid = getgid();
+ 
+ 	    if (setegid(rgid) == -1)
+ 		(void) fprintf(stderr, "setegid(%d): %s\n",
+ 			       (int) rgid, strerror(errno));
+ 
+ 	    if (seteuid(ruid) == -1)
+ 		(void) fprintf(stderr, "seteuid(%d): %s\n",
+ 			       (int) ruid, strerror(errno));
+ #endif
+ 
+ 	    XtSetErrorHandler(xt_error);
  #ifdef KTERM
! 	    toplevel = XtAppInitialize (&app_con, "KTerm", 
  #else /* !KTERM */
! 	    toplevel = XtAppInitialize (&app_con, "XTerm", 
  #endif /* !KTERM */
  				    optionDescList, XtNumber(optionDescList), 
  				    &argc, argv, fallback_resources, NULL, 0);
  
! 	    XtGetApplicationResources(toplevel, (XtPointer) &resource,
  				  application_resources,
  				  XtNumber(application_resources), NULL, 0);
  
  #ifdef __sgi
! 	    if (resource.useLocale)
! 		setlocale(LC_ALL,"");
! #endif
! 
! #ifdef HAS_POSIX_SAVED_IDS
! 	    if (seteuid(euid) == -1)
! 		(void) fprintf(stderr, "seteuid(%d): %s\n",
! 			       (int) euid, strerror(errno));
! 
! 	    if (setegid(egid) == -1)
! 		(void) fprintf(stderr, "setegid(%d): %s\n",
! 			       (int) egid, strerror(errno));
  #endif
+ 	}
  
  	waiting_for_initial_map = resource.wait_for_map;
  
***************
*** 2445,2450 ****
--- 2484,2492 ----
  				close (tty);
  			}
  #endif /* TIOCNOTTY */
+ #if (BSD >= 199103)
+ 			(void)revoke(ttydev);
+ #endif
  			if ((tty = open(ttydev, O_RDWR, 0)) >= 0) {
  #if defined(CRAY) && defined(TCSETCTTY)
  			    /* make /dev/tty work */
