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; } 井汲 景太