Date: Thu, 2 Jan 2003 11:20:04 -0800 (PST) From: Bjorn Gronvall <bg@effnet.com> To: freebsd-bugs@FreeBSD.org Subject: Re: bin/45397: Telnet dumps core when MAKE_KERBEROS5=yes is enabled Message-ID: <200301021920.h02JK40B069513@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/45397; it has been noted by GNATS.
From: Bjorn Gronvall <bg@effnet.com>
To: freebsd-gnats-submit@FreeBSD.org, ari.suutari@syncrontech.com,
roam@ringlet.net, bug-followup@FreeBSD.org, markm@FreeBSD.org
Cc:
Subject: Re: bin/45397: Telnet dumps core when MAKE_KERBEROS5=yes is enabled
Date: Thu, 02 Jan 2003 20:16:36 +0100
This is a multi-part message in MIME format.
--------------D1C7367BBBD2CF5FAB51F35F
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
This patch also renames net_write to telnet_net_write (as Peter
suggested). It also includes changes to
crypto/telnet/libtelnet/kerberos5.c to ensure that subkeys are
properly used (incorporated from heimdal).
After these two changes my telnet and telnetd interoperates
correctly with the heimdal ditos and and also with the old
FreeBSD telnetd.
Cheers,
Björn
--------------D1C7367BBBD2CF5FAB51F35F
Content-Type: text/plain; charset=us-ascii;
name="telnet.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="telnet.patch"
diff -ur crypto/telnet.orig/libtelnet/auth.c crypto/telnet/libtelnet/auth.c
--- crypto/telnet.orig/libtelnet/auth.c Sat Apr 13 12:59:07 2002
+++ crypto/telnet/libtelnet/auth.c Thu Jan 2 18:06:48 2003
@@ -359,7 +359,7 @@
}
*e++ = IAC;
*e++ = SE;
- net_write(str_request, e - str_request);
+ telnet_net_write(str_request, e - str_request);
printsub('>', &str_request[2], e - str_request - 2);
}
}
@@ -444,7 +444,7 @@
}
auth_send_data += 2;
}
- net_write(str_none, sizeof(str_none));
+ telnet_net_write(str_none, sizeof(str_none));
printsub('>', &str_none[2], sizeof(str_none) - 2);
if (auth_debug_mode)
printf(">>>%s: Sent failure message\r\n", Name);
@@ -537,7 +537,7 @@
}
*e++ = IAC;
*e++ = SE;
- net_write(str_request, e - str_request);
+ telnet_net_write(str_request, e - str_request);
printsub('>', &str_request[2], e - &str_request[2]);
return(1);
}
diff -ur crypto/telnet.orig/libtelnet/enc_des.c crypto/telnet/libtelnet/enc_des.c
--- crypto/telnet.orig/libtelnet/enc_des.c Sat Apr 13 12:59:07 2002
+++ crypto/telnet/libtelnet/enc_des.c Thu Jan 2 18:06:50 2003
@@ -225,7 +225,7 @@
*p++ = IAC;
*p++ = SE;
printsub('>', &fbp->fb_feed[2], p - &fbp->fb_feed[2]);
- net_write(fbp->fb_feed, p - fbp->fb_feed);
+ telnet_net_write(fbp->fb_feed, p - fbp->fb_feed);
break;
default:
return(FAILED);
@@ -284,7 +284,7 @@
*p++ = IAC;
*p++ = SE;
printsub('>', &fbp->fb_feed[2], p - &fbp->fb_feed[2]);
- net_write(fbp->fb_feed, p - fbp->fb_feed);
+ telnet_net_write(fbp->fb_feed, p - fbp->fb_feed);
state = fbp->state[DIR_DECRYPT-1] = IN_PROGRESS;
break;
@@ -309,7 +309,7 @@
*p++ = IAC;
*p++ = SE;
printsub('>', &fbp->fb_feed[2], p - &fbp->fb_feed[2]);
- net_write(fbp->fb_feed, p - fbp->fb_feed);
+ telnet_net_write(fbp->fb_feed, p - fbp->fb_feed);
break;
}
diff -ur crypto/telnet.orig/libtelnet/encrypt.c crypto/telnet/libtelnet/encrypt.c
--- crypto/telnet.orig/libtelnet/encrypt.c Sat Apr 13 12:59:07 2002
+++ crypto/telnet/libtelnet/encrypt.c Thu Jan 2 18:06:50 2003
@@ -427,7 +427,7 @@
*/
if (!Server && autodecrypt)
encrypt_send_request_start();
- net_write(str_send, str_suplen);
+ telnet_net_write(str_send, str_suplen);
printsub('>', &str_send[2], str_suplen - 2);
str_suplen = 0;
}
@@ -773,7 +773,7 @@
}
*strp++ = IAC;
*strp++ = SE;
- net_write(str_keyid, strp - str_keyid);
+ telnet_net_write(str_keyid, strp - str_keyid);
printsub('>', &str_keyid[2], strp - str_keyid - 2);
}
@@ -832,7 +832,7 @@
}
*p++ = IAC;
*p++ = SE;
- net_write(str_start, p - str_start);
+ telnet_net_write(str_start, p - str_start);
net_encrypt();
printsub('>', &str_start[2], p - &str_start[2]);
/*
@@ -858,7 +858,7 @@
return;
str_end[3] = ENCRYPT_END;
- net_write(str_end, sizeof(str_end));
+ telnet_net_write(str_end, sizeof(str_end));
net_encrypt();
printsub('>', &str_end[2], sizeof(str_end) - 2);
/*
@@ -886,7 +886,7 @@
}
*p++ = IAC;
*p++ = SE;
- net_write(str_start, p - str_start);
+ telnet_net_write(str_start, p - str_start);
printsub('>', &str_start[2], p - &str_start[2]);
if (encrypt_debug_mode)
printf(">>>%s: Request input to be encrypted\r\n", Name);
@@ -896,7 +896,7 @@
encrypt_send_request_end(void)
{
str_end[3] = ENCRYPT_REQEND;
- net_write(str_end, sizeof(str_end));
+ telnet_net_write(str_end, sizeof(str_end));
printsub('>', &str_end[2], sizeof(str_end) - 2);
if (encrypt_debug_mode)
diff -ur crypto/telnet.orig/libtelnet/kerberos.c crypto/telnet/libtelnet/kerberos.c
--- crypto/telnet.orig/libtelnet/kerberos.c Sat Apr 13 12:59:07 2002
+++ crypto/telnet/libtelnet/kerberos.c Thu Jan 2 18:06:51 2003
@@ -126,7 +126,7 @@
*p++ = SE;
if (str_data[3] == TELQUAL_IS)
printsub('>', &str_data[2], p - (&str_data[2]));
- return(net_write(str_data, p - str_data));
+ return(telnet_net_write(str_data, p - str_data));
}
int
diff -ur crypto/telnet.orig/libtelnet/kerberos5.c crypto/telnet/libtelnet/kerberos5.c
--- crypto/telnet.orig/libtelnet/kerberos5.c Sat Apr 13 12:59:07 2002
+++ crypto/telnet/libtelnet/kerberos5.c Thu Jan 2 18:06:51 2003
@@ -128,7 +128,7 @@
*p++ = SE;
if (str_data[3] == TELQUAL_IS)
printsub('>', &str_data[2], p - &str_data[2]);
- return(net_write(str_data, p - str_data));
+ return(telnet_net_write(str_data, p - str_data));
}
int
@@ -193,6 +193,8 @@
else
ap_opts = 0;
+ ap_opts |= AP_OPTS_USE_SUBKEY;
+
ret = krb5_auth_con_init (context, &auth_context);
if (ret) {
if (auth_debug_mode) {
@@ -406,6 +408,29 @@
printf("Kerberos V5: "
"krb5_auth_con_getremotesubkey failed (%s)\r\n",
krb5_get_err_text(context, ret));
+ return;
+ }
+
+ if (key_block == NULL) {
+ ret = krb5_auth_con_getkey(context,
+ auth_context,
+ &key_block);
+ }
+ if (ret) {
+ Data(ap, KRB_REJECT, "krb5_auth_con_getkey failed", -1);
+ auth_finished(ap, AUTH_REJECT);
+ if (auth_debug_mode)
+ printf("Kerberos V5: "
+ "krb5_auth_con_getkey failed (%s)\r\n",
+ krb5_get_err_text(context, ret));
+ return;
+ }
+ if (key_block == NULL) {
+ Data(ap, KRB_REJECT, "no subkey received", -1);
+ auth_finished(ap, AUTH_REJECT);
+ if (auth_debug_mode)
+ printf("Kerberos V5: "
+ "krb5_auth_con_getremotesubkey returned NULL key\r\n");
return;
}
diff -ur crypto/telnet.orig/libtelnet/krb4encpwd.c crypto/telnet/libtelnet/krb4encpwd.c
--- crypto/telnet.orig/libtelnet/krb4encpwd.c Sat Apr 13 12:59:07 2002
+++ crypto/telnet/libtelnet/krb4encpwd.c Thu Jan 2 18:06:52 2003
@@ -146,7 +146,7 @@
*p++ = SE;
if (str_data[3] == TELQUAL_IS)
printsub('>', &str_data[2], p - (&str_data[2]));
- return(net_write(str_data, p - str_data));
+ return(telnet_net_write(str_data, p - str_data));
}
int
diff -ur crypto/telnet.orig/libtelnet/misc-proto.h crypto/telnet/libtelnet/misc-proto.h
--- crypto/telnet.orig/libtelnet/misc-proto.h Sat Apr 13 12:59:07 2002
+++ crypto/telnet/libtelnet/misc-proto.h Thu Jan 2 18:06:52 2003
@@ -71,7 +71,7 @@
/*
* These functions are imported from the application
*/
-int net_write(unsigned char *, int);
+int telnet_net_write(unsigned char *, int);
void net_encrypt(void);
int telnet_spin(void);
char *telnet_getenv(char *);
diff -ur crypto/telnet.orig/libtelnet/rsaencpwd.c crypto/telnet/libtelnet/rsaencpwd.c
--- crypto/telnet.orig/libtelnet/rsaencpwd.c Sat Apr 13 12:59:07 2002
+++ crypto/telnet/libtelnet/rsaencpwd.c Thu Jan 2 18:06:52 2003
@@ -142,7 +142,7 @@
*p++ = SE;
if (str_data[3] == TELQUAL_IS)
printsub('>', &str_data[2], p - (&str_data[2]));
- return(net_write(str_data, p - str_data));
+ return(telnet_net_write(str_data, p - str_data));
}
int
diff -ur crypto/telnet.orig/libtelnet/sra.c crypto/telnet/libtelnet/sra.c
--- crypto/telnet.orig/libtelnet/sra.c Thu May 16 10:46:49 2002
+++ crypto/telnet/libtelnet/sra.c Thu Jan 2 18:06:53 2003
@@ -106,7 +106,7 @@
*p++ = SE;
if (str_data[3] == TELQUAL_IS)
printsub('>', &str_data[2], p - (&str_data[2]));
- return(net_write(str_data, p - str_data));
+ return(telnet_net_write(str_data, p - str_data));
}
int
diff -ur crypto/telnet.orig/telnet/authenc.c crypto/telnet/telnet/authenc.c
--- crypto/telnet.orig/telnet/authenc.c Sat Apr 13 12:59:08 2002
+++ crypto/telnet/telnet/authenc.c Thu Jan 2 18:06:53 2003
@@ -55,7 +55,7 @@
#include "types.h"
int
-net_write(unsigned char *str, int len)
+telnet_net_write(unsigned char *str, int len)
{
if (NETROOM() > len) {
ring_supply_data(&netoring, str, len);
diff -ur crypto/telnet.orig/telnetd/authenc.c crypto/telnet/telnetd/authenc.c
--- crypto/telnet.orig/telnetd/authenc.c Sat Apr 13 12:59:08 2002
+++ crypto/telnet/telnetd/authenc.c Thu Jan 2 18:06:54 2003
@@ -47,7 +47,7 @@
#include <libtelnet/misc.h>
int
-net_write(unsigned char *str, int len)
+telnet_net_write(unsigned char *str, int len)
{
if (nfrontp + len < netobuf + BUFSIZ) {
output_datalen(str, len);
--------------D1C7367BBBD2CF5FAB51F35F--
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200301021920.h02JK40B069513>
