I just applied your patch in the 0.9.7 and the 0.9.8-dev branches. 
Please test tomorrow's snapshot.

Thanks for your contribution.  Ticket resolved.

[EMAIL PROTECTED] - Mon Sep 22 21:37:29 2003]:

> <!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>
> 


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

Reply via email to