[5117] in Kerberos
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 /
\--------------------------------------------------------------------------/