Commit 98fa4fe8 authored by Dr. Stephen Henson's avatar Dr. Stephen Henson
Browse files

Fix ASN1 additions for KRB5
parent 0b4c91c0
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -358,6 +358,7 @@ typedef struct ssl_method_st
 *	Cipher 			OCTET_STRING,	-- the 3 byte cipher ID
 *	Session_ID 		OCTET_STRING,	-- the Session ID
 *	Master_key 		OCTET_STRING,	-- the master key
 *	KRB5_principal		OCTET_STRING	-- optional Kerberos principal
 *	Key_Arg [ 0 ] IMPLICIT	OCTET_STRING,	-- the optional Key argument
 *	Time [ 1 ] EXPLICIT	INTEGER,	-- optional Start Time
 *	Timeout [ 2 ] EXPLICIT	INTEGER,	-- optional Timeout ins seconds
+29 −16
Original line number Diff line number Diff line
@@ -146,9 +146,12 @@ int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp)
	a.key_arg.data=in->key_arg;

#ifndef OPENSSL_NO_KRB5
	if (in->krb5_client_princ_len)
		{
		a.krb5_princ.length=in->krb5_client_princ_len;
		a.krb5_princ.type=V_ASN1_OCTET_STRING;
		a.krb5_princ.data=in->krb5_client_princ;
		}
#endif /* OPENSSL_NO_KRB5 */
 
	if (in->time != 0L)
@@ -182,6 +185,7 @@ int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp)
	M_ASN1_I2D_len(&(a.session_id),		i2d_ASN1_OCTET_STRING);
	M_ASN1_I2D_len(&(a.master_key),		i2d_ASN1_OCTET_STRING);
#ifndef OPENSSL_NO_KRB5
	if (in->krb5_client_princ_len)
        	M_ASN1_I2D_len(&(a.krb5_princ),	i2d_ASN1_OCTET_STRING);
#endif /* OPENSSL_NO_KRB5 */
	if (in->key_arg_length > 0)
@@ -204,6 +208,7 @@ int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp)
	M_ASN1_I2D_put(&(a.session_id),		i2d_ASN1_OCTET_STRING);
	M_ASN1_I2D_put(&(a.master_key),		i2d_ASN1_OCTET_STRING);
#ifndef OPENSSL_NO_KRB5
	if (in->krb5_client_princ_len)
        	M_ASN1_I2D_put(&(a.krb5_princ),	i2d_ASN1_OCTET_STRING);
#endif /* OPENSSL_NO_KRB5 */
	if (in->key_arg_length > 0)
@@ -301,25 +306,33 @@ SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, unsigned char **pp,
	memcpy(ret->master_key,os.data,ret->master_key_length);

	os.length=0;
	M_ASN1_D2I_get_IMP_opt(osp,d2i_ASN1_OCTET_STRING,0,V_ASN1_OCTET_STRING);
	if (os.length > SSL_MAX_KEY_ARG_LENGTH)
		ret->key_arg_length=SSL_MAX_KEY_ARG_LENGTH;
	else
		ret->key_arg_length=os.length;
	memcpy(ret->key_arg,os.data,ret->key_arg_length);
	if (os.data != NULL) OPENSSL_free(os.data);

#ifndef OPENSSL_NO_KRB5
	os.length=0;
        M_ASN1_D2I_get_IMP_opt(osp,d2i_ASN1_OCTET_STRING,0,V_ASN1_OCTET_STRING);
	M_ASN1_D2I_get_opt(osp,d2i_ASN1_OCTET_STRING,V_ASN1_OCTET_STRING);
	if (os.data)
		{
        	if (os.length > SSL_MAX_KRB5_PRINCIPAL_LENGTH)
            		ret->krb5_client_princ_len=0;
		else
			ret->krb5_client_princ_len=os.length;
		memcpy(ret->krb5_client_princ,os.data,ret->krb5_client_princ_len);
	if (os.data != NULL) OPENSSL_free(os.data);
		OPENSSL_free(os.data);
		os.data = NULL;
		os.length = 0;
		}
	else
		ret->krb5_client_princ_len=0;
#endif /* OPENSSL_NO_KRB5 */

	M_ASN1_D2I_get_IMP_opt(osp,d2i_ASN1_OCTET_STRING,0,V_ASN1_OCTET_STRING);
	if (os.length > SSL_MAX_KEY_ARG_LENGTH)
		ret->key_arg_length=SSL_MAX_KEY_ARG_LENGTH;
	else
		ret->key_arg_length=os.length;
	memcpy(ret->key_arg,os.data,ret->key_arg_length);
	if (os.data != NULL) OPENSSL_free(os.data);

	ai.length=0;
	M_ASN1_D2I_get_EXP_opt(aip,d2i_ASN1_INTEGER,1);
	if (ai.data != NULL)
+2 −2
Original line number Diff line number Diff line
@@ -140,7 +140,7 @@ int SSL_SESSION_print(BIO *bp, SSL_SESSION *x)
			if (BIO_printf(bp,"%02X",x->key_arg[i]) <= 0) goto err;
			}
#ifndef OPENSSL_NO_KRB5
       if (BIO_puts(bp,"/n    Krb5 Principal: ") <= 0) goto err;
       if (BIO_puts(bp,"\n    Krb5 Principal: ") <= 0) goto err;
            if (x->krb5_client_princ_len == 0)
            {
		if (BIO_puts(bp,"None") <= 0) goto err;
@@ -148,7 +148,7 @@ int SSL_SESSION_print(BIO *bp, SSL_SESSION *x)
	else
		for (i=0; i<x->krb5_client_princ_len; i++)
			{
			if (BIO_printf(bp,"%02X",x->key_arg[i]) <= 0) goto err;
			if (BIO_printf(bp,"%02X",x->krb5_client_princ[i]) <= 0) goto err;
			}
#endif /* OPENSSL_NO_KRB5 */
	if (x->compress_meth != 0)