[2904] in Kerberos-V5-bugs

home help back first fref pref prev next nref lref last post

krb5-admin/572: kadmind crashes when kadmin user ^c's and quits during long operation.

daemon@ATHENA.MIT.EDU (Tony Mione)
Tue Mar 24 14:24:13 1998

Resent-From: gnats@rt-11.MIT.EDU (GNATS Management)
Resent-To: bjaspan@MIT.EDU
Resent-Reply-To: krb5-bugs@MIT.EDU, mione@boeing.rutgers.edu
Date: Tue, 24 Mar 1998 14:23:23 -0500 (EST)
From: Tony Mione <mione@boeing.rutgers.edu>
Reply-To: mione@boeing.rutgers.edu
To: krb5-bugs@MIT.EDU


>Number:         572
>Category:       krb5-admin
>Synopsis:       kadmind crashes when kadmin user ^c's and quits during long operation.
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    bjaspan
>State:          open
>Class:          sw-bug
>Submitter-Id:   unknown
>Arrival-Date:   Tue Mar 24 14:24:01 EST 1998
>Last-Modified:
>Originator:     Tony Mione
>Organization:
Rutgers University Network Services 
Tony Mione, RUCS/NS, Rutgers University, Hill 055, Piscataway,NJ - 732-445-0650
mione@nbcs-ns.rutgers.edu                 W3: http://www-ns.rutgers.edu/~mione/
PGP Fingerprint : E2 25 2C CD 28 73 3C 5B  0B 91 8A 4E 22 BA FA 9F
Editorial Advisor for Digital Systems Report   ***** Important: John 17:3 *****
>Release:        1.0pl1
>Environment:
	
System: SunOS boeing.rutgers.edu 5.5.1 Generic_103640-05 sun4u sparc SUNW,Ultra-1
Architecture: sun4

>Description:
	When a kadmin user requests a time-consuming operation (listprincs
or getprincs * on a large database), and the types Control-C followed by a
quit command, the kadmind for the associated realm dies. This happens due
to improper handling of the SIGPIPE signal. The signal is not reset in
sig_pipe() from ovsec_kadmd.c.

>How-To-Repeat:
	Create a database with more than 5000 entries. Start the kadmind
for that realm. Enter kadmin, authenticate, and type 'listprincs'. Then,
before any data is returned, type Control-C and 'quit'. The kadmind on the
remote server gets multiple SIGPIPEs and dies.

>Fix:
	Reset the SIGPIPE handler inside of sig_pipe(). The code fix below
also resets one other signal inside the signal handler function.

*** ovsec_kadmd.c.14	Tue Mar 24 13:44:56 1998
--- ovsec_kadmd.c.current	Fri Mar 13 14:29:05 1998
***************
*** 1,11 ****
  /*
   * Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved
   *
!  * $Header: /rutgers/src/private/krb5-1.0/src/kadmin/server/RCS/ovsec_kadmd.c,v 1.4 1998/01/23 23:56:22 mione Exp $
   */
  
  #if !defined(lint) && !defined(__CODECENTER__)
! static char *rcsid = "$Header: /rutgers/src/private/krb5-1.0/src/kadmin/server/RCS/ovsec_kadmd.c,v 1.4 1998/01/23 23:56:22 mione Exp $";
  #endif
  
  #include    <stdio.h>
--- 1,11 ----
  /*
   * Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved
   *
!  * $Header: /rutgers/src/private/krb5-1.0/src/kadmin/server/RCS/ovsec_kadmd.c,v 1.5 1998/03/11 21:33:31 mione Exp mione $
   */
  
  #if !defined(lint) && !defined(__CODECENTER__)
! static char *rcsid = "$Header: /rutgers/src/private/krb5-1.0/src/kadmin/server/RCS/ovsec_kadmd.c,v 1.5 1998/03/11 21:33:31 mione Exp mione $";
  #endif
  
  #include    <stdio.h>
***************
*** 564,569 ****
--- 564,570 ----
  
  void request_exit(int signum)
  {
+   signal ( signum, request_exit ); /* Reset signal */
       krb5_klog_syslog(LOG_DEBUG, "Got signal to request exit");
       signal_request_exit = 1;
       return;
***************
*** 580,585 ****
--- 581,587 ----
   */
  void sig_pipe(int unused)
  {
+   signal ( SIGPIPE, sig_pipe ); /* Reset signal */
       krb5_klog_syslog(LOG_NOTICE, "Warning: Received a SIGPIPE; probably a "
  	    "client aborted.  Continuing.");
       return;

>Audit-Trail:
>Unformatted:

home help back first fref pref prev next nref lref last post