[5405] in Athena Bugs

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

rkinit bug: server loops on incorrect password

daemon@ATHENA.MIT.EDU (qjb@ATHENA.MIT.EDU)
Tue Jul 3 15:15:18 1990

From: qjb@ATHENA.MIT.EDU
Date: Tue, 3 Jul 90 15:14:53 -0400
To: bugs@ATHENA.MIT.EDU


The following patches fix the bug in rkinit that caused the
server to loop when an incorrect password was typed on the
client.  In addition, the Makefiles have been updated so that
rkinit will be linked against kerberos and des libraries in the
release instead of those in krbuser.

It may be easier to recopy /mit/qjb/source/rkinit than to apply
these patches since ever directory is changed. 

By the way, it took me longer to send this message than to fix
the bug.

====


Files changed and summary of changes:

rkinit/Makefile
Changed so kerberos code will be taken from release instead of krbuser

rkinitd/Makefile
Changed so kerberos code will be taken from release instead of krbuser

lib/Makefile
Changed so kerberos code will be taken from release instead of krbuser


include/rkinit_private.h
Added MT_DROP message type


lib/rk_util.c
Added string representation of MT_DROP message type

lib/rk_rpc.c
Added rki_drop_server and call to this function so that rkinit
will shut rkinitd down on a client-side error.

lib/rkinit_err.et
Added RKINIT_DROP error message to be issued by the server when
the client drops the connection.



No source code outside of the rkinit library needed to be
changed.  The new clients will work with the old servers and
vice versa.  The new clients will shut the old servers down
(elimintating the bug), but the old server will issue the error
message "Unknown message type" instead of "Connection dropped by
remote host".



======= Patch to be applied in rkinit/rkinit =========

*** Makefile.old	Tue Jul  3 15:05:39 1990
--- Makefile		Tue Jul  3 15:05:40 1990
***************
*** 1,5 ****
  #  
! #  $Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/rkinit/RCS/Makefile,v 1.2 89/11/13 15:10:23 qjb Exp $
  #  $Source: /afs/athena.mit.edu/user/q/qjb/source/rkinit/rkinit/RCS/Makefile,v $
  #  $Author: qjb $
  #
--- 1,5 ----
  #  
! #  $Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/rkinit/RCS/Makefile,v 1.3 90/07/03 14:56:03 qjb Exp $
  #  $Source: /afs/athena.mit.edu/user/q/qjb/source/rkinit/rkinit/RCS/Makefile,v $
  #  $Author: qjb $
  #
***************
*** 9,21 ****
  DESTDIR		= 
  INSTALLDIR	= /usr/athena
  
! KRB_TOP		= /afs/athena.mit.edu/system/krbuser/@sys
! KLIBS		= -L$(KRB_TOP)/lib -lkrb -ldes
  
  RKLIB		= ../lib/librkinit.a
  
  DFLAGS		= -O
! INCLUDES	= -I$(KRB_TOP)/include -I../include
  CFLAGS 		= $(DFLAGS) $(INCLUDES)
  LIBS		= $(RKLIB) $(KLIBS) -lcom_err
  
--- 9,20 ----
  DESTDIR		= 
  INSTALLDIR	= /usr/athena
  
! KLIBS		= -lkrb -ldes
  
  RKLIB		= ../lib/librkinit.a
  
  DFLAGS		= -O
! INCLUDES	= -I../include
  CFLAGS 		= $(DFLAGS) $(INCLUDES)
  LIBS		= $(RKLIB) $(KLIBS) -lcom_err
  


============ patch to be applied in rkinit/rkinitd ===========

*** Makefile.old	Tue Jul  3 15:07:17 1990
--- Makefile		Tue Jul  3 15:07:18 1990
***************
*** 1,5 ****
  #  
! #  $Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/rkinitd/RCS/Makefile,v 1.2 89/11/13 15:11:17 qjb Exp $
  #  $Source: /afs/athena.mit.edu/user/q/qjb/source/rkinit/rkinitd/RCS/Makefile,v $
  #  $Author: qjb $
  #
--- 1,5 ----
  #  
! #  $Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/rkinitd/RCS/Makefile,v 1.3 90/07/03 14:56:54 qjb Exp $
  #  $Source: /afs/athena.mit.edu/user/q/qjb/source/rkinit/rkinitd/RCS/Makefile,v $
  #  $Author: qjb $
  #
***************
*** 9,21 ****
  DESTDIR		=
  INSTALLDIR	= /etc/athena
  
! KRB_TOP		= /afs/athena.mit.edu/system/krbuser/@sys
! KLIBS		= -L$(KRB_TOP)/lib -lkrb -ldes
  
  RKLIB		= ../lib/librkinit.a
  
  DFLAGS		= -O
! INCLUDES	= -I$(KRB_TOP)/include -I../include
  CFLAGS 		= $(DFLAGS) $(INCLUDES)
  LIBS		= $(RKLIB) $(KLIBS) -lcom_err
  
--- 9,20 ----
  DESTDIR		=
  INSTALLDIR	= /etc/athena
  
! KLIBS		= -lkrb -ldes
  
  RKLIB		= ../lib/librkinit.a
  
  DFLAGS		= -O
! INCLUDES	= -I../include
  CFLAGS 		= $(DFLAGS) $(INCLUDES)
  LIBS		= $(RKLIB) $(KLIBS) -lcom_err
  
================ patch to be applied in rkinit/include =========

*** rkinit_private.h.old	Tue Jul  3 15:09:46 1990
--- rkinit_private.h		Tue Jul  3 15:09:48 1990
***************
*** 1,5 ****
  /* 
!  * $Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/include/RCS/rkinit_private.h,v 1.1 89/11/12 19:26:51 qjb Exp $
   * $Source: /afs/athena.mit.edu/user/q/qjb/source/rkinit/include/RCS/rkinit_private.h,v $
   * $Author: qjb $
   *
--- 1,5 ----
  /* 
!  * $Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/include/RCS/rkinit_private.h,v 1.2 89/11/13 20:04:53 qjb Exp $
   * $Source: /afs/athena.mit.edu/user/q/qjb/source/rkinit/include/RCS/rkinit_private.h,v $
   * $Author: qjb $
   *
***************
*** 9,16 ****
  #define RKINIT_LVERSION 3
  #define RKINIT_HVERSION 3
  
! /* Port to be used */
  #define SERVENT "rkinit"
  
  /* Key for kerberos authentication */
  #define KEY "rcmd"
--- 9,17 ----
  #define RKINIT_LVERSION 3
  #define RKINIT_HVERSION 3
  
! /* Service to be used; port number to fall back on if service isn't found */
  #define SERVENT "rkinit"
+ #define PORT 2108
  
  /* Key for kerberos authentication */
  #define KEY "rcmd"

=========== patch to be applied in lib ========

*** Makefile.old	Tue Jul  3 15:10:47 1990
--- Makefile		Tue Jul  3 15:10:47 1990
***************
*** 1,5 ****
  #  
! #  $Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/Makefile,v 1.3 89/11/13 21:06:07 qjb Exp $
  #  $Source: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/Makefile,v $
  #  $Author: qjb $
  #
--- 1,5 ----
  #  
! #  $Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/Makefile,v 1.4 90/07/03 14:57:56 qjb Exp $
  #  $Source: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/Makefile,v $
  #  $Author: qjb $
  #
***************
*** 9,21 ****
  DESTDIR		=
  INSTALLDIR	= /usr/athena/lib
  
- KRB_TOP		= /afs/athena.mit.edu/system/krbuser/@sys
- KLIBS		= -L$(KRB_TOP)/lib -lkrb -ldes
- 
  DFLAGS		= -O
! INCLUDES	= -I$(KRB_TOP)/include -I../include
  CFLAGS 		= $(DFLAGS) $(INCLUDES)
- LIBS		= $(KLIBS) -lcom_err
  
  RKERR_H		= ../include/rkinit_err.h
  RKERR_ET	= rkinit_err.et
--- 9,17 ----
  DESTDIR		=
  INSTALLDIR	= /usr/athena/lib
  
  DFLAGS		= -O
! INCLUDES	= -I../include
  CFLAGS 		= $(DFLAGS) $(INCLUDES)
  
  RKERR_H		= ../include/rkinit_err.h
  RKERR_ET	= rkinit_err.et
*** rk_util.c.old	Tue Jul  3 15:12:04 1990
--- rk_util.c		 Jul  3 15:12:05 1990
***************
*** 1,5 ****
  /* 
!  * $Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/rk_util.c,v 1.1 89/11/12 19:29:53 qjb Exp $
   * $Source: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/rk_util.c,v $
   * $Author: qjb $
   *
--- 1,5 ----
  /* 
!  * $Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/rk_util.c,v 1.2 90/07/03 14:58:39 qjb Exp $
   * $Source: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/rk_util.c,v $
   * $Author: qjb $
   *
***************
*** 11,17 ****
   */
  
  #if !defined(lint) && !defined(SABER)
! static char *rcsid = "$Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/rk_util.c,v 1.1 89/11/12 19:29:53 qjb Exp $";
  #endif lint || SABER
  
  #include <stdio.h>
--- 11,17 ----
   */
  
  #if !defined(lint) && !defined(SABER)
! static char *rcsid = "$Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/rk_util.c,v 1.2 90/07/03 14:58:39 qjb Exp $";
  #endif lint || SABER
  
  #include <stdio.h>
***************
*** 84,89 ****
--- 84,92 ----
  	break;
        case MT_AUTH:
  	string = "Authenticator";
+ 	break;
+       case MT_DROP:
+ 	string = "Drop server";
  	break;
        default:
  	string = "Unknown message type";
*** rk_rpc.c.old	Tue Jul  3 15:13:06 1990
--- rk_rpc.c		Tue Jul  3 15:13:07 1990
***************
*** 1,5 ****
  /* 
!  * $Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/rk_rpc.c,v 1.2 89/11/13 20:34:50 qjb Exp $
   * $Source: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/rk_rpc.c,v $
   * $Author: qjb $
   *
--- 1,5 ----
  /* 
!  * $Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/rk_rpc.c,v 1.3 90/07/03 14:58:56 qjb Exp $
   * $Source: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/rk_rpc.c,v $
   * $Author: qjb $
   *
***************
*** 9,15 ****
   */
  
  #if !defined(lint) && !defined(SABER)
! static char *rcsid = "$Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/rk_rpc.c,v 1.2 89/11/13 20:34:50 qjb Exp $";
  #endif lint || SABER
  
  #include <stdio.h>
--- 9,15 ----
   */
  
  #if !defined(lint) && !defined(SABER)
! static char *rcsid = "$Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/rk_rpc.c,v 1.3 90/07/03 14:58:56 qjb Exp $";
  #endif lint || SABER
  
  #include <stdio.h>
***************
*** 128,133 ****
--- 128,139 ----
  	}
      }
  
+     if (packet[PKT_TYPE] == MT_DROP) {
+ 	sprintf(errbuf, "Connection dropped by remote host");
+ 	rkinit_errmsg(errbuf);
+ 	return(RKINIT_DROPPED);
+     }
+ 
      if (packet[PKT_TYPE] != type) {
  	sprintf(errbuf, "Expected packet type of %s; got %s",
  		rki_mt_to_string(type), 
***************
*** 296,302 ****
--- 302,314 ----
      return(RKINIT_SUCCESS);
  }
  
+ void rki_drop_server()
+ {
+     (void) rki_send_packet(sock, MT_DROP, 0, "");
+ }
+ 
  void rki_cleanup_rpc()
  {
+     rki_drop_server();
      (void) close(sock);
  }
*** rkinit_err.et.old	Tue Jul  3 15:13:49 1990
--- rkinit_err.et	Tue Jul  3 15:13:50 1990
***************
*** 1,5 ****
  # 
! # $Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/rkinit_err.et,v 1.1 89/11/12 19:31:39 qjb Exp $
  # $Source: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/rkinit_err.et,v $
  # $Author: qjb $
  #
--- 1,5 ----
  # 
! # $Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/rkinit_err.et,v 1.2 90/07/03 14:58:27 qjb Exp $
  # $Source: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/rkinit_err.et,v $
  # $Author: qjb $
  #
***************
*** 10,16 ****
  
  et rkin
  
! ec RKINIT_RCSID,	"$Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/rkinit_err.et,v 1.1 89/11/12 19:31:39 qjb Exp $"
  ec RKINIT_VERSION,	"Version mismatch"
  ec RKINIT_HOST,		"Failure getting host information"
  ec RKINIT_SERV,		"Failure getting service information (/etc/services)"
--- 10,16 ----
  
  et rkin
  
! ec RKINIT_RCSID,	"$Header: /afs/athena.mit.edu/user/q/qjb/source/rkinit/lib/RCS/rkinit_err.et,v 1.2 90/07/03 14:58:27 qjb Exp $"
  ec RKINIT_VERSION,	"Version mismatch"
  ec RKINIT_HOST,		"Failure getting host information"
  ec RKINIT_SERV,		"Failure getting service information (/etc/services)"
***************
*** 26,31 ****
--- 26,32 ----
  ec RKINIT_GETSOCK,	"Failure in getsockname"
  ec RKINIT_MEMORY,	"Out of memory"
  ec RKINIT_TIMEOUT,	"Timed out"
+ ec RKINIT_DROPPED,	"Connection dropped"
  
  ec RKINIT_LAST,		"Last error message"
  end

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