[5117] in Kerberos

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

Re: Kerb 5 BETA5 srvtab problem

daemon@ATHENA.MIT.EDU (Tomasz Krupa)
Tue May 9 19:12:20 1995

To: kerberos@MIT.EDU
Date: 9 May 1995 22:29:35 GMT
From: tomekk@neutron.MIT.EDU (Tomasz Krupa)

Tomasz Krupa (s139091@dss) wrote:
: V4 srvtab generated by kdb5_edit cannot be decoded propely (eg. rcmd entry)
: so Kerberos 4 applications (secure telnet) cannot decode authenticator.
I fixed it. It was a bug in kdb5_edit.c - in BETA5 kvno field changed
its size from 1 (char) to 2/4 (int) bytes. Old Kerberos 4 srvtabs
require 1 byte long field but BETA5 wrote 4.

This is a new patch to kdb5_edit.c fixing this bug and also improving
av4k command functionality.

 
--- /tmp/t/krb5-BETA5.org/src/admin/edit/kdb5_edit.c	Mon May  1 19:37:45 1995
+++ kdb5_edit.c	Wed May 10 00:02:15 1995
@@ -22,6 +22,9 @@
  * 
  *
  * Edit a KDC database.
+ *
+ * V4 srvtab & av4k bugs fixed by 
+ * Tomasz Krupa (T.Krupa@riviera.pw.edu.pl), 1995.05.10
  */
 
 #include "k5-int.h"
@@ -723,6 +726,8 @@
     krb5_principal princ;
     krb5_db_entry dbentry;
     char *pname;
+    char *v5pname; 
+    unsigned char v4kvno; 
     register int i;
     int nentries;
     krb5_boolean more;
@@ -730,7 +735,8 @@
 
     if (argc < 3) {
 	com_err(argv[0], 0, "Too few arguments");
-	com_err(argv[0], 0, "Usage: %s instance name [name ...]", argv[0]);
+	com_err(argv[0], 0, "Usage: %s v4instance v4name [v4name ...]", 
+	        argv[0]); 
 	exit_status++;
 	return;
     }
@@ -770,20 +776,32 @@
 	    exit_status++;
 	    continue;
 	}
+
+/* Use v4 to v5 name conversion to fill srvtab propely */
 	strcpy(pname, argv[i]);
-	strcat(pname, "/");
+	strcat(pname, ".");
 	strcat(pname, argv[1]);
 	if (!strchr(argv[1], REALM_SEP)) {
 	    strcat(pname, REALM_SEP_STR);
 	    strcat(pname, cur_realm);
 	}
 
-	if (retval = krb5_parse_name(edit_context, pname, &princ)) {
-	    com_err(argv[0], retval, "while parsing %s", pname);
+	if (retval = krb5_425_conv_principal(edit_context, argv[i], argv[1],
+					     cur_realm, &princ)) {
+	    com_err(argv[0], retval, "while converting V4 %s to V5 name", 
+                    pname);
 	    exit_status++;
 	    free(pname);
 	    continue;
 	}
+
+	if (retval = krb5_unparse_name(edit_context, princ, &v5pname)) {
+	    com_err(argv[0], retval, "while unparsing");
+	    exit_status++;
+	    free(pname);
+	    continue;
+	}
+
 	nentries = 1;
 	if (retval = krb5_db_get_principal(edit_context, princ, &dbentry, &nentries,
 					   &more)) {
@@ -819,14 +837,17 @@
 	fwrite(argv[i], strlen(argv[i]) + 1, 1, fout); /* p.name */
 	fwrite(argv[1], strlen(argv[1]) + 1, 1, fout); /* p.instance */
 	fwrite(cur_realm, strlen(cur_realm) + 1, 1, fout); /* p.realm */
-	fwrite((char *)&dbentry.kvno, sizeof(dbentry.kvno), 1, fout);
+	v4kvno = dbentry.kvno;
+	fwrite((char *)&v4kvno, sizeof(v4kvno), 1, fout);
 	fwrite((char *)key.contents, 8, 1, fout);
-	printf("'%s' added to V4 srvtab '%s'\n", pname, ktname);
+	printf("'%s' added as '%s' to V4 srvtab '%s'\n", v5pname, 
+               pname, ktname); 
 	memset((char *)key.contents, 0, key.length);
 	krb5_xfree(key.contents);
     cleanall:
 	    krb5_db_free_principal(edit_context, &dbentry, nentries);
     cleanmost:
+	    free(v5pname); 
 	    free(pname);
 	    krb5_free_principal(edit_context, princ);
     }


    Tomek

 /--------------------------------------------------------------------------\
/ Tomasz Krupa                    URL: http://www.riviera.pw.edu.pl/~tomek   \
Work:   T.Krupa@elka.pw.edu.pl -> ELKA System Administrator                   
School: T.Krupa@ia.pw.edu.pl   -> Inst. of Control and Computation Engineering
Home:   T.Krupa@riviera.pw.edu.pl Warsaw University of Technology             
\ Phone:(48-2) 660-9344           Warsaw, POLAND                             /
 \--------------------------------------------------------------------------/

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