[5405] in Athena Bugs
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