From 282dad581689e182106b9b9a6d86667af9b87cba Mon Sep 17 00:00:00 2001 From: Colin Leroy Date: Sat, 7 Oct 2006 19:54:35 +0000 Subject: [PATCH 1/1] 2006-10-07 [colin] 2.5.3cvs20 * src/plugins/pgpcore/pgp_viewer.c Kill gpg after 5 seconds wait --- ChangeLog | 5 +++++ PATCHSETS | 1 + configure.ac | 2 +- src/plugins/pgpcore/pgp_viewer.c | 34 +++++++++++++++++++++++++++++++- 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1e57df8f8..9e84d78c1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-10-07 [colin] 2.5.3cvs20 + + * src/plugins/pgpcore/pgp_viewer.c + Kill gpg after 5 seconds wait + 2006-10-07 [colin] 2.5.3cvs19 * src/plugins/pgpcore/pgp_viewer.c diff --git a/PATCHSETS b/PATCHSETS index 9b5069025..e713fe3ca 100644 --- a/PATCHSETS +++ b/PATCHSETS @@ -1974,3 +1974,4 @@ ( cvs diff -u -r 1.1.2.28 -r 1.1.2.29 src/plugins/pgpcore/sgpgme.c; ) > 2.5.3cvs17.patchset ( diff -u /dev/null src/plugins/pgpcore/pgp_viewer.c; diff -u /dev/null src/plugins/pgpcore/pgp_viewer.h; ) > 2.5.3cvs18.patchset ( cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/plugins/pgpcore/pgp_viewer.c; cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/plugins/pgpcore/pgp_viewer.h; ) > 2.5.3cvs19.patchset +( cvs diff -u -r 1.1.2.2 -r 1.1.2.3 src/plugins/pgpcore/pgp_viewer.c; ) > 2.5.3cvs20.patchset diff --git a/configure.ac b/configure.ac index 07e0bd1a5..483d4798c 100644 --- a/configure.ac +++ b/configure.ac @@ -11,7 +11,7 @@ MINOR_VERSION=5 MICRO_VERSION=3 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=19 +EXTRA_VERSION=20 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/plugins/pgpcore/pgp_viewer.c b/src/plugins/pgpcore/pgp_viewer.c index e9225282a..eb5f1167a 100644 --- a/src/plugins/pgpcore/pgp_viewer.c +++ b/src/plugins/pgpcore/pgp_viewer.c @@ -25,6 +25,8 @@ #include #include #include +#include +#include #include "version.h" #include "common/sylpheed.h" @@ -119,8 +121,38 @@ static void pgpview_show_mime_part(TextView *textview, MimeInfo *partinfo) #ifndef G_OS_WIN32 gchar *cmd = g_strdup_printf("gpg --recv-keys %s", sig->fpr); int res = 0; + pid_t pid = 0; GTK_EVENTS_FLUSH(); - res = system(cmd); + + pid = fork(); + if (pid == -1) { + res = -1; + } else if (pid == 0) { + /* son */ + res = system(cmd); + _exit(res); + } else { + int status = 0; + time_t start_wait = time(NULL); + res = -1; + do { + if (waitpid(pid, &status, WNOHANG) == 0 || !WIFEXITED(status)) { + usleep(200000); + } else { + res = WEXITSTATUS(status); + break; + } + if (time(NULL) - start_wait > 5) { + debug_print("SIGTERM'ing gpg\n"); + kill(pid, SIGTERM); + } + if (time(NULL) - start_wait > 6) { + debug_print("SIGKILL'ing gpg\n"); + kill(pid, SIGKILL); + break; + } + } while(1); + } if (res == 0) { TEXTVIEW_INSERT(_(" This key has been imported to your keyring.\n")); } else { -- 2.25.1