[Canna-dev 52] canuum patch for Canna 3.6

Back to archive index

Ikumi Keita ikumi****@rever*****
2002年 10月 27日 (日) 01:04:01 JST


  井汲です。一応、canuum のパッチを作ってみました。

>> もう、いまさら使う人は居ないかもしれませんが、
>> canuum で make install.man を実行すると、

>> make: *** `canuum.tmp' に必要なターゲット `canuum.man' を make するルールがあ
>>> ません.  中止。

  これの原因は、わかってみれば実に単純なことでした。英語版マニュアルの
canuum.man というファイルがなかった、というだけのことで、

touch canuum.man

と、空のファイルを作っただけで解消しました。
  英語版の man ディレクトリに、空っぽの canuum.1 がインストールされる
という不具合はありますが、とりあえず暫定的な解決法、ということで。

  以下、作業手順とパッチです。

[ やったこと ]
0. Canna.conf の JapaneseLocale と LOCALE_DIR に、実在する locale とディ
   レクトリを書いておきます。これがないと、起動時に「そんな lang あり
   ません」と怒られます。
1. Uum4.109.tar.gz を適当な ftp サイトから取ってきます(NEC の「かん
   な」ページにあるリンクは、今リンク切れを起こしているようです。
   archie や www.alltheweb.com を活用して、お近くの ftp サイトをお探し
   ください)。
2. Uum4.109.tar.gz を展開すると、15 個のファイルができます。これらを、
   みな canuum のディレクトリに移します(これで、canuum の README.jp
   にある、Bring.sh に相当する作業は終わりです)。
3. 以下の作業は canuum ディレクトリで行います。まず、
   patch < Canuum.patch を実行します。
4. FreeBSD の ports に含まれる patch のうち、jhlp.c に対する以下のパッ
   チを当てます(ひょっとしたら、他の OS には悪影響を与えるパッチかも
   しれません)。
5. uum のセキュリティーホールに対応する、以下の第二のパッチを当てます。
6. 以下、README.jp にある通り、xmkmf → make Makefile → make depend
   → make で、滞りなくコンパイルできます。
8. 上記の通り、touch canuum.man します。
7. su して root になって、make install install.man します。

[ 使ったパッチ ]
↓第1のパッチ。FreeBSD 4.6.2 の ports/japanese/canuum/files/patch-ae
そのままです。
--- jhlp.c.orig	Thu Jan 21 21:52:56 1999
+++ jhlp.c	Thu Jan 21 21:56:35 1999
@@ -76,6 +76,9 @@
 
 jmp_buf kk_env;
 
+#if (defined(__unix__) || defined(unix)) && !defined(USG)
+#include <sys/param.h>
+#endif
 #ifdef SYSVR2
 #	include <sys/param.h>
 #endif /* SYSVR2 */
@@ -285,9 +288,11 @@
 
 
 #if defined(BSD42) && !defined(DGUX)
+#if !(defined(BSD) && (BSD >= 199306))
     if (saveutmp() < 0) {
 	puts("Can't save utmp\n");
     }
+#endif
 #endif /* BSD42 */
 
 
@@ -781,7 +786,12 @@
 #endif
     int pid;
 
-    if ((pid = wait3(&status, WNOHANG | WUNTRACED, NULL)) == child_id) {
+/*
+ * Remove warning.
+ * Patched by Hidekazu Kuroki(hidek****@cs*****)		1996/8/20
+ */
+/*  if ((pid = wait3(&status, WNOHANG | WUNTRACED, NULL)) == child_id) { */
+    if ((pid = wait3((int *)&status, WNOHANG | WUNTRACED, NULL)) == child_id) {
 	if (WIFSTOPPED(status)) {
 #ifdef SIGCONT
 	    kill(pid, SIGCONT);
@@ -1174,9 +1184,11 @@
 	setpgrp(0, pid);
 #endif /* BSD42 */
 
+#if !(defined(BSD) && (BSD >= 199306))
 	if (setutmp(ttypfd) == ERROR) {
 	    puts("Can't set utmp.");
 	} 
+#endif
 
 #ifdef linux
 	setsid();
@@ -1634,9 +1646,11 @@
 	perror(prog);
     }
 
+#if !(defined(BSD) && (BSD >= 199306))
     if (resetutmp(ttypfd) == ERROR) {
 	printf("Can't reset utmp.");
     }
+#endif
 #ifdef TIOCSSIZE
     pty_rowcol.ts_lines = 0;
     pty_rowcol.ts_cols = 0;
@@ -1706,11 +1720,24 @@
 char *b, *pty;
 int no;
 {
+/*
+ * Change pseudo-devices.
+ * Because FreeBSD's master pseudo-devices are pty[p-sP-S][0-9a-v].
+ * Patched by Hidekazu Kuroki(hidek****@cs*****)		1996/8/20
+ */
   if (no < 0x10 * ('z' - 'p' + 1)) {
+#if (defined(BSD) && (BSD >= 199306)) /* 4.4BSD-Lite by Taoka */
+    sprintf(b, "%s%1c%1c", pty, "pqrsPQRS"[(no >> 5)], ((no & 0x1f > 9)? 'a' : '0') + (no & 0x1f));
+#else /* ! 4.4BSD-Lite */
     sprintf(b, "%s%1c%1x", pty, 'p' + (no >> 4), no & 0x0f);
+#endif /* ! 4.4BSD-Lite */
   } else {
     no -= 0x10 * ('z' - 'p' + 1);
+#if (defined(BSD) && (BSD >= 199306)) /* 4.4BSD-Lite by Taoka */
+    sprintf(b, "%s%1c%1c", pty, "pqrsPQRS"[(no >> 5)], ((no & 0x1f > 9)? 'a' : '0') + (no & 0x1f));
+#else /* ! 4.4BSD-Lite */
     sprintf(b, "%s%1c%1x", pty, 'P' + (no >> 4), no & 0x0f);
+#endif /* ! 4.4BSD-Lite */
   }
 }
 

第2のパッチ。
--- jhlp.c~	Sun Oct 20 20:56:51 2002
+++ jhlp.c	Sun Oct 20 21:05:17 2002
@@ -180,12 +180,14 @@
 
     strcpy(username, getpwuid(getuid())->pw_name);
     if((name = getenv(WNN_USERNAME_ENV)) != NULL){
-	strcpy(username, name);
+	strncpy(username, name,  PATHNAMELEN-1);
+	username[PATHNAMELEN-1] = '\0';
     }
     for (i = 1; i < argc;) {
 	if (!strcmp(argv[i++], "-L")) {
 	    if (i >= argc || argv[i][0] == '-') default_usage();
-	    strcpy(lang_dir, argv[i++]);
+	    strncpy(lang_dir, argv[i++], 31);
+	    lang_dir[31] = '\0';
 	    for (;i < argc; i++) {
 		argv[i - 2] = argv[i];
 	    }
@@ -205,7 +207,7 @@
 		strcpy(lang_dir, p);
 	    }
 #else
-	    strncpy(lang_dir, p, 32);
+	    strncpy(lang_dir, p, 31);
 	    lang_dir[31] = '\0';
 #endif
 	}
@@ -250,8 +252,9 @@
 	    server_env = WNN_DEF_SERVER_ENV;
 	}
 	if(name = getenv(server_env)) {
-	    strcpy(def_servername, name);
-	    strcpy(def_reverse_servername, name);
+	    strncpy(def_servername, name, PATHNAMELEN-1);
+	    def_servername[PATHNAMELEN-1] = '\0';
+	    strcpy(def_reverse_servername, def_servername);
 	}
     }
 
@@ -507,7 +510,8 @@
 
 static int do_k_opt()
 {
-    strcpy(uumkey_name_in_uumrc, optarg);
+    strncpy(uumkey_name_in_uumrc, optarg, PATHNAMELEN-1);
+    uumkey_name_in_uumrc[PATHNAMELEN-1] = '\0';
     if (*uumkey_name_in_uumrc == '\0') {
 	return -1;
     }
@@ -517,7 +521,8 @@
 
 static int do_c_opt()
 {
-    strcpy(convkey_name_in_uumrc, optarg);
+    strncpy(convkey_name_in_uumrc, optarg, PATHNAMELEN-1);
+    convkey_name_in_uumrc[PATHNAMELEN-1] = '\0';
     if (*convkey_name_in_uumrc == '\0') {
 	return -1;
     }
@@ -527,7 +532,8 @@
 
 static int do_r_opt()
 {
-    strcpy(rkfile_name_in_uumrc, optarg);
+    strncpy(rkfile_name_in_uumrc, optarg, PATHNAMELEN-1);
+    rkfile_name_in_uumrc[PATHNAMELEN-1] = '\0';
     if (*rkfile_name_in_uumrc == '\0') {
 	return -1;
     }
@@ -543,8 +549,9 @@
 
 static int do_D_opt()
 {
-    strcpy(def_servername, optarg);
-    strcpy(def_reverse_servername, optarg);
+    strncpy(def_servername, optarg, PATHNAMELEN-1);
+    def_servername[PATHNAMELEN-1] = '\0';
+    strcpy(def_reverse_servername, def_servername);
     if (*def_servername == '\0') {
 	return -1;
     }
@@ -553,7 +560,8 @@
 
 static int do_n_opt()
 {
-    strcpy(username, optarg);
+    strncpy(username, optarg, PATHNAMELEN-1);
+    username[PATHNAMELEN-1] = '\0';
     if (*username == '\0') {
 	return -1;
     }

							井汲 景太



Canna-dev メーリングリストの案内
Back to archive index