<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">kterm-6.2.0 を以下のような環境で利用していると、
	OS:		NetBSD-1.1, NetBSD-1.2, FreeBSD-2.2.2
	認証方式:	MIT-MAGIC-COOKIE-1
	その他の条件:	ホームディレクトリは別マシンにあり、NFS で
			マウントしている。NFS サーバは kterm の走行す
			るマシンに対して、root アクセスを許していない。
ファイル .Xauthority へアクセスできないため、下記のようにエラーが起こ
ることがあります。
	% ./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 附属の xterm には、この問題への対策が含まれているので、抜
き出してkterm-6.2.0 に当てました。以下に示すパッチがそれです。

このパッチには、revoke(2) 呼びだしの追加も含まれていますが、これは上の
問題とは関係ありません。ディスクリプタ ttydev を利用するプロセスが残っ
ていた場合への対策です。（これも XFree86-3.2 から持ってきたものです。）

なお、XFree86-3.2 には、USE_POSIX_TERMIOS という #ifdef 処理も含まれて
おり、4.4BSD 系の OS を利用する場合には、この変更も行っておいた方が良
さそうなのですが、以下のパッチには含まれていません。

				-- Noriyuki Soda &lt;soda@sra.co.jp&gt;

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) &amp;&amp; !defined(WIN32)
+ #include &lt;sys/param.h&gt;	/* for NOFILE */
+ #endif
+ 
+ #if (BSD &gt;= 199103)
+ #define USE_POSIX_WAIT
+ #define HAS_POSIX_SAVED_IDS
  #endif
  
  #include &lt;stdio.h&gt;
***************
*** 1307,1328 ****
  
  	/* Init the Toolkit. */
  	XtSetErrorHandler(xt_error);
  #ifdef KTERM
! 	toplevel = XtAppInitialize (&amp;app_con, "KTerm", 
  #else /* !KTERM */
! 	toplevel = XtAppInitialize (&amp;app_con, "XTerm", 
  #endif /* !KTERM */
  				    optionDescList, XtNumber(optionDescList), 
  				    &amp;argc, argv, fallback_resources, NULL, 0);
  
! 	XtGetApplicationResources(toplevel, (XtPointer) &amp;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 (&amp;app_con, "KTerm", 
  #else /* !KTERM */
! 	    toplevel = XtAppInitialize (&amp;app_con, "XTerm", 
  #endif /* !KTERM */
  				    optionDescList, XtNumber(optionDescList), 
  				    &amp;argc, argv, fallback_resources, NULL, 0);
  
! 	    XtGetApplicationResources(toplevel, (XtPointer) &amp;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 &gt;= 199103)
+ 			(void)revoke(ttydev);
+ #endif
  			if ((tty = open(ttydev, O_RDWR, 0)) &gt;= 0) {
  #if defined(CRAY) &amp;&amp; defined(TCSETCTTY)
  			    /* make /dev/tty work */
</pre></body></html>