<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <title></title>
</head>
<body>
<font size="2"><font face="Helvetica,sans-serif">&nbsp;&nbsp;&nbsp; A Kerberos
principal is composed of the name, instance, and realm.<br>
When using OpenSSL with Kerberos, an OpenSSL server places the client's<br>
principal into ssl-&gt;kssl_ctx-&gt;client_princ.&nbsp; However, due to a
bug in<br>
kssl.c:kssl_ctx_setprinc(), the instance information is never copied.<br>
<br>
That is:<br>
<br>
Kerberos principal&nbsp;&nbsp;&nbsp; Current behavior&nbsp;&nbsp; Patched behavior<br>
<a class="moz-txt-link-abbreviated" href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <a 
class="moz-txt-link-abbreviated" href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>&nbsp;&nbsp; &nbsp;&nbsp; <a class="moz-txt-link-abbreviated" 
href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a><br>
<a class="moz-txt-link-abbreviated" href="mailto:foo/[EMAIL PROTECTED]">foo/[EMAIL 
PROTECTED]</a>&nbsp;&nbsp;&nbsp; <a class="moz-txt-link-abbreviated" 
href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a>&nbsp;&nbsp; <a 
class="moz-txt-link-abbreviated" href="mailto:foo/[EMAIL PROTECTED]">foo/[EMAIL 
PROTECTED]</a><br>
<br>
&nbsp;&nbsp;&nbsp; The attached patch updates kssl_ctx_setprinc() in kssl.[ch] to
ensure ssl-&gt;kssl_ctx-&gt;client_princ reflects the full principal.<br>
<br>
&nbsp;&nbsp;&nbsp; In addition, the patch update s_server.c:init_ssl_connection() to
print the Kerberos principal on connect (just like
init_ssl_connection() prints any client certificate information).<br>
<br>
&nbsp;&nbsp;&nbsp; Tested on Solaris [78], HP-UX 11.00, RH7.2 and RHAS21 with MIT
Kerberos 1.2.x<br>
<br>
Thanks-<br>
&nbsp;Dan<br>
<br>
<br>
diff -ur openssl-0.9.7-stable-SNAP-20030922/apps/s_server.c
openssl-0.9.7-stable-SNAP-20030922-work/apps/s_server.c<br>
--- openssl-0.9.7-stable-SNAP-20030922/apps/s_server.c&nbsp; Thu Jan 30
14:16:30 2003<br>
+++ openssl-0.9.7-stable-SNAP-20030922-work/apps/s_server.c&nbsp;&nbsp;&nbsp;&nbsp; 
Mon Sep
22 14:35:15 2003<br>
@@ -1264,6 +1264,13 @@<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 TLS1_FLAGS_TLS_PADDING_BUG)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 BIO_printf(bio_s_out,"Peer has incorrect TLSv1 block
padding\n");<br>
<br>
+#ifndef OPENSSL_NO_KRB5<br>
+&nbsp;&nbsp;&nbsp; if (con-&gt;kssl_ctx-&gt;client_princ != NULL)<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BIO_printf(bio_s_out,"Kerberos peer 
principal is %s\n",<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
con-&gt;kssl_ctx-&gt;client_princ);<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
+#endif /* OPENSSL_NO_KRB5 */<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return(1);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
<br>
diff -ur openssl-0.9.7-stable-SNAP-20030922/ssl/kssl.c
openssl-0.9.7-stable-SNAP-20030922-work/ssl/kssl.c<br>
--- openssl-0.9.7-stable-SNAP-20030922/ssl/kssl.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Wed Mar 26
14:16:38 2003<br>
+++ openssl-0.9.7-stable-SNAP-20030922-work/ssl/kssl.c&nbsp; Mon Sep 22
14:34:20 2003<br>
@@ -1497,7 +1497,8 @@<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (kssl_ctx_setprinc(kssl_ctx, 
KSSL_CLIENT,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 &amp;krb5ticket-&gt;enc_part2-&gt;client-&gt;realm,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 krb5ticket-&gt;enc_part2-&gt;client-&gt;data))<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 krb5ticket-&gt;enc_part2-&gt;client-&gt;data,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 krb5ticket-&gt;enc_part2-&gt;client-&gt;length))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 kssl_err_set(kssl_err, SSL_R_KRB5_S_BAD_TICKET,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 "kssl_ctx_setprinc() fails.\n");<br>
@@ -1564,16 +1565,17 @@<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
<br>
<br>
-/*&nbsp;&nbsp;&nbsp;&nbsp; Given a (krb5_data *) entity (and optional realm),<br>
+/*&nbsp;&nbsp;&nbsp;&nbsp; Given an array of (krb5_data) entity (and optional 
realm),<br>
&nbsp;**&nbsp;&nbsp;&nbsp;&nbsp; set the plain (char *) client_princ or service_host 
member<br>
&nbsp;**&nbsp;&nbsp;&nbsp;&nbsp; of the kssl_ctx struct.<br>
&nbsp;*/<br>
&nbsp;krb5_error_code<br>
&nbsp;kssl_ctx_setprinc(KSSL_CTX *kssl_ctx, int which,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; krb5_data *realm, krb5_data *entity)<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; krb5_data *realm, krb5_data *entity, int 
nentities)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp;&nbsp; **princ;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp; length;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp; i;<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (kssl_ctx == NULL&nbsp; ||&nbsp; entity 
== NULL)&nbsp; return KSSL_CTX_ERR;<br>
<br>
@@ -1585,18 +1587,32 @@<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (*princ)&nbsp; free(*princ);<br>
<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length = entity-&gt;length + ((realm)? 
realm-&gt;length + 2: 1);<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Add up all the entity-&gt;lengths */<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length = 0;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i=0; i &lt; nentities; i++)<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
{<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
length += entity[i].length;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Add in space for the '/' character(s) (if 
any) */<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length += nentities-1;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Space for the ('@'+realm+NULL | NULL) */<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length += ((realm)? realm-&gt;length + 2: 1);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((*princ = calloc(1, length)) == 
NULL)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 return KSSL_CTX_ERR;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
strncpy(*princ, entity-&gt;data, entity-&gt;length);<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
(*princ)[entity-&gt;length]='\0';<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
for (i = 0; i &lt; nentities; i++)<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 strncat(*princ, entity[i].data,
entity[i].length);<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 if (i &lt; nentities-1)<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 strcat (*princ, "/");<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 }<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 if (realm)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 strcat (*princ, "@");<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 (void) strncat(*princ, realm-&gt;data,
realm-&gt;length);<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
(*princ)[entity-&gt;length+1+realm-&gt;length]='\0';<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 }<br>
<br>
diff -ur openssl-0.9.7-stable-SNAP-20030922/ssl/kssl.h
openssl-0.9.7-stable-SNAP-20030922-work/ssl/kssl.h<br>
--- openssl-0.9.7-stable-SNAP-20030922/ssl/kssl.h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Tue Nov 26
06:03:00 2002<br>
+++ openssl-0.9.7-stable-SNAP-20030922-work/ssl/kssl.h&nbsp; Mon Sep 22
14:26:24 2003<br>
@@ -149,7 +149,7 @@<br>
&nbsp;KSSL_CTX *kssl_ctx_free(KSSL_CTX *kssl_ctx);<br>
&nbsp;void kssl_ctx_show(KSSL_CTX *kssl_ctx);<br>
&nbsp;krb5_error_code kssl_ctx_setprinc(KSSL_CTX *kssl_ctx, int which,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; krb5_data *realm, krb5_data *entity);<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; krb5_data *realm, krb5_data *entity, int 
nentities);<br>
&nbsp;krb5_error_code&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kssl_cget_tkt(KSSL_CTX 
*kssl_ctx,&nbsp; krb5_data
**enc_tktp,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; krb5_data *authenp, KSSL_ERR 
*kssl_err);<br>
&nbsp;krb5_error_code&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kssl_sget_tkt(KSSL_CTX 
*kssl_ctx,&nbsp; krb5_data
*indata,<br>
<br>
<br>
</font></font><br>
</body>
</html>

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to