2010年10月20日

[mew-dist 29282] Re:NTEmacsでmaster passwdが使えない

細川です

|Date: Sat, 30 Aug 2008 15:35:36 +0900 ()
|From: Kentaro KAWAMOTO <kentaro.kawamoto@xxxxx>
|Message-Id: <20080830.153536.253820720.kentaro.kawamoto@xxxxx>
|Subject: [mew-dist 28609] Re: NTEmacsでmaster passwdが使えない
>
> On Wed, 27 Aug 2008 09:40:56 +0900 ()

> Kentaro KAWAMOTO <kentaro.kawamoto@xxxxx> wrote:
>
>> 最近の GnuPG は、--use-agent をサポートしていないようです。
>> コマンドラインで実行したら、
>> gpg: NOTE: --use-agent is not available in this version
>> と言われてしまいました。
>>
>> 上記 URL に書いてあるように、
>> パッチを当てた GnuPG を作ってみます。
>
> http://clbianco.altervista.org/gnupg/eng/gnupg.html
> http://www.issp.u-tokyo.ac.jp/labs/sor/iida/gnupg/
> を参考に、GnuPG 1.4.9 にパッチを当ててビルドしたら
> Mew から使えるようになりました。
>
> 参考までにパッチを添付します。

便利に使わせていただいています、ありがとうございます。
このパッチを GnuPG 1.4.11 に当たるよう修正したものを添付します。

Windows の Emacs 23.2 と Cygwin 1.7 の GnuPG 1.4.9 で署名がうまくいか
ないこと、および、このパッチをあてた GnuPG 1.4.11 で署名がうまくいく
ことを確認してあります。

--
Yu-ji Hosokawa (細川雄司)

Content-Disposition: inline; filename="gnupg-1.4.11_ttyio.patch"

diff -pur gnupg-1.4.11.orig/util/ttyio.c gnupg-1.4.11/util/ttyio.c
--- gnupg-1.4.11.orig/util/ttyio.c 2010-09-28 18:39:05.000000000 +0900
+++ gnupg-1.4.11/util/ttyio.c 2010-10-20 06:18:01.029056500 +0900
@@ -71,6 +71,7 @@ static struct {

#else /* yeah, we have a real OS */
static FILE *ttyfp = NULL;
+static FILE *ttyfpin = NULL;
#endif

static int initialized;
@@ -157,7 +158,7 @@ init_ttyfp(void)
return;

#if defined(_WIN32)
- {
+ if( isatty(fileno(stdin)) ) {
SECURITY_ATTRIBUTES sa;

memset(&sa, 0, sizeof(sa));
@@ -176,6 +177,9 @@ init_ttyfp(void)
&sa, OPEN_EXISTING, 0, 0 );
if (con.in == INVALID_HANDLE_VALUE)
log_fatal ("open(CONIN$) failed: %s", w32_strerror (0));
+ } else {
+ con.out = GetStdHandle(STD_OUTPUT_HANDLE);
+ con.in = GetStdHandle(STD_INPUT_HANDLE);
}
SetConsoleMode(con.in, DEF_INPMODE );
SetConsoleMode(con.out, DEF_OUTMODE );
@@ -183,7 +187,8 @@ init_ttyfp(void)
#elif defined(__EMX__)
ttyfp = stdout; /* Fixme: replace by the real functions: see wklib */
#else
- ttyfp = batchmode? stderr : fopen( tty_get_ttyname (), "r+");
+ ttyfp = batchmode? stderr : stdout;
+ ttyfpin = batchmode? stderr : stdin;
if( !ttyfp ) {
log_error("cannot open `%s': %s\n",
tty_get_ttyname (), strerror(errno) );
@@ -268,7 +273,7 @@ tty_printf( const char *fmt, ... )
log_bug("xtryvasprintf() failed\n");
n = strlen (buf);

- if (!WriteConsoleA (con.out, buf, n, &nwritten, NULL))
+ if (!WriteFile( con.out, buf, n, &nwritten, NULL ) )
log_fatal ("WriteConsole failed: %s", w32_strerror (0));
if( n != nwritten )
log_fatal ("WriteConsole failed: %d != %d\n", n, (int)nwritten );
@@ -446,7 +451,7 @@ do_get( const char *prompt, int hidden )
for(;;) {
DWORD nread;

- if (!ReadConsoleA (con.in, cbuf, 1, &nread, NULL))
+ if( !ReadFile( con.in, cbuf, 1, &nread, NULL ) )
log_fatal ("ReadConsole failed: %s", w32_strerror (0));
if( !nread )
continue;
@@ -515,16 +520,18 @@ do_get( const char *prompt, int hidden )
} while (c != '\n');
i = (i>0) ? i-1 : 0;
#else /* unix version */
+ if( !isatty(fileno(stdin)) ) hidden = 0;
+
if( hidden ) {
#ifdef HAVE_TCGETATTR
struct termios term;

- if( tcgetattr(fileno(ttyfp), &termsave) )
+ if( tcgetattr(fileno(ttyfpin), &termsave) )
log_fatal("tcgetattr() failed: %s\n", strerror(errno) );
restore_termios = 1;
term = termsave;
term.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL);
- if( tcsetattr( fileno(ttyfp), TCSAFLUSH, &term ) )
+ if( tcsetattr( fileno(ttyfpin), TCSAFLUSH, &term ) )
log_fatal("tcsetattr() failed: %s\n", strerror(errno) );
#endif
# ifdef __VMS
@@ -538,7 +545,7 @@ do_get( const char *prompt, int hidden )

/* fixme: How can we avoid that the \n is echoed w/o disabling
* canonical mode - w/o this kill_prompt can't work */
- while( read(fileno(ttyfp), cbuf, 1) == 1 && *cbuf != '\n' ) {
+ while( read(fileno(ttyfpin), cbuf, 1) == 1 && *cbuf != '\n' ) {
if( !hidden )
last_prompt_len++;
c = *cbuf;
@@ -565,7 +572,7 @@ do_get( const char *prompt, int hidden )

if( hidden ) {
# ifdef HAVE_TCGETATTR
- if( tcsetattr(fileno(ttyfp), TCSAFLUSH, &termsave) )
+ if( tcsetattr(fileno(ttyfpin), TCSAFLUSH, &termsave) )
log_error("tcsetattr() failed: %s\n", strerror(errno) );
restore_termios = 0;
# endif
@@ -641,7 +648,8 @@ tty_kill_prompt()
if( !last_prompt_len )
return;
#ifdef _WIN32
- tty_printf("\r%*s\r", last_prompt_len, "");
+ if( isatty(fileno(stdin)) )
+ tty_printf("\r%*s\r", last_prompt_len, "");
#else
{
int i;

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (Cygwin)

iF4EABEIAAYFAky+GuEACgkQhBUuX+Eky0EitgD/VXiZFu0nNvlRKXnGu1DZA0OV
lSewt6Ljg16diQfmhDwA/jwo9DBqKLRuE9Oo+OWuIrW+GEsyPBkkstEjLgBgziOC
=yogn
-----END PGP SIGNATURE-----

投稿者 xml-rpc : 2010年10月20日 07:25
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/99285
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。