On Mon, Jun 23, 2008 at 02:31:55PM +0200, Tobias Ulmer wrote:
> Index: patches/patch-attacher_c
> ===================================================================
> RCS file: /cvs/ports/misc/screen/patches/patch-attacher_c,v
> retrieving revision 1.1
> diff -u -r1.1 patch-attacher_c
> --- patches/patch-attacher_c  14 Oct 2003 23:05:28 -0000      1.1
> +++ patches/patch-attacher_c  22 Jun 2008 12:08:32 -0000
> @@ -1,6 +1,6 @@
>  $OpenBSD: patch-attacher_c,v 1.1 2003/10/14 23:05:28 jolan Exp $
> ---- attacher.c.orig  2003-09-08 09:24:48.000000000 -0500
> -+++ attacher.c       2003-10-14 14:10:14.000000000 -0500
> +--- attacher.c.orig  Mon Sep  8 16:24:48 2003
> ++++ attacher.c       Sun Jun 22 14:04:14 2008
>  @@ -676,7 +676,7 @@ LockTerminal()
>             setuid(real_uid); /* this should be done already */
>   #endif
> @@ -10,3 +10,16 @@
>             exit(errno);
>           }
>         if (pid == -1)
> +@@ -869,8 +869,10 @@ screen_builtin_lck()
> +       errno = 0;
> +       if ((cp1 = getpass(message)) == NULL)
> +         {
> +-          AttacherFinit(SIGARG);
> +-          /* NOTREACHED */
> ++          if (errno == EINTR) /* interrupted by a signal */
> ++            continue;
> ++
> ++          AttacherFinit(SIGARG); /* fatal error, exit attacher, unlock 
> screen */
> +         }
> + #ifdef USE_PAM
> +       PAM_conversation.appdata_ptr = cp1;

Is this enough? getpass(3) can bail out on other conditions than EINTR.

Reply via email to