Move common code to krb5_unsupported_enctype() and make error message contain string instead of error number
Signed-off-by: Love Hornquist Astrand <lha@h5l.org>
This commit is contained in:
		
				
					committed by
					
						
						Love Hornquist Astrand
					
				
			
			
				
	
			
			
			
						parent
						
							d931fd0a22
						
					
				
				
					commit
					38df403d45
				
			@@ -51,6 +51,9 @@ static void free_key_schedule(krb5_context,
 | 
				
			|||||||
			      struct _krb5_key_data *,
 | 
								      struct _krb5_key_data *,
 | 
				
			||||||
			      struct _krb5_encryption_type *);
 | 
								      struct _krb5_encryption_type *);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static krb5_error_code _krb5_unsupported_enctype(krb5_context,
 | 
				
			||||||
 | 
					                                                 krb5_enctype);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/************************************************************
 | 
					/************************************************************
 | 
				
			||||||
 *                                                          *
 | 
					 *                                                          *
 | 
				
			||||||
 ************************************************************/
 | 
					 ************************************************************/
 | 
				
			||||||
@@ -62,10 +65,7 @@ krb5_enctype_keysize(krb5_context context,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    struct _krb5_encryption_type *et = _krb5_find_enctype(type);
 | 
					    struct _krb5_encryption_type *et = _krb5_find_enctype(type);
 | 
				
			||||||
    if(et == NULL) {
 | 
					    if(et == NULL) {
 | 
				
			||||||
	krb5_set_error_message(context, KRB5_PROG_ETYPE_NOSUPP,
 | 
					        return _krb5_unsupported_enctype (context, type);
 | 
				
			||||||
			       N_("encryption type %d not supported", ""),
 | 
					 | 
				
			||||||
			       type);
 | 
					 | 
				
			||||||
	return KRB5_PROG_ETYPE_NOSUPP;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    *keysize = et->keytype->size;
 | 
					    *keysize = et->keytype->size;
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
@@ -78,10 +78,7 @@ krb5_enctype_keybits(krb5_context context,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    struct _krb5_encryption_type *et = _krb5_find_enctype(type);
 | 
					    struct _krb5_encryption_type *et = _krb5_find_enctype(type);
 | 
				
			||||||
    if(et == NULL) {
 | 
					    if(et == NULL) {
 | 
				
			||||||
	krb5_set_error_message(context, KRB5_PROG_ETYPE_NOSUPP,
 | 
					        return _krb5_unsupported_enctype (context, type);
 | 
				
			||||||
			       "encryption type %d not supported",
 | 
					 | 
				
			||||||
			       type);
 | 
					 | 
				
			||||||
	return KRB5_PROG_ETYPE_NOSUPP;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    *keybits = et->keytype->bits;
 | 
					    *keybits = et->keytype->bits;
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
@@ -95,10 +92,7 @@ krb5_generate_random_keyblock(krb5_context context,
 | 
				
			|||||||
    krb5_error_code ret;
 | 
					    krb5_error_code ret;
 | 
				
			||||||
    struct _krb5_encryption_type *et = _krb5_find_enctype(type);
 | 
					    struct _krb5_encryption_type *et = _krb5_find_enctype(type);
 | 
				
			||||||
    if(et == NULL) {
 | 
					    if(et == NULL) {
 | 
				
			||||||
	krb5_set_error_message(context, KRB5_PROG_ETYPE_NOSUPP,
 | 
					        return _krb5_unsupported_enctype (context, type);
 | 
				
			||||||
			       N_("encryption type %d not supported", ""),
 | 
					 | 
				
			||||||
			       type);
 | 
					 | 
				
			||||||
	return KRB5_PROG_ETYPE_NOSUPP;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    ret = krb5_data_alloc(&key->keyvalue, et->keytype->size);
 | 
					    ret = krb5_data_alloc(&key->keyvalue, et->keytype->size);
 | 
				
			||||||
    if(ret)
 | 
					    if(ret)
 | 
				
			||||||
@@ -121,10 +115,8 @@ _key_schedule(krb5_context context,
 | 
				
			|||||||
    struct _krb5_key_type *kt;
 | 
					    struct _krb5_key_type *kt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (et == NULL) {
 | 
					    if (et == NULL) {
 | 
				
			||||||
	krb5_set_error_message (context, KRB5_PROG_ETYPE_NOSUPP,
 | 
					        return _krb5_unsupported_enctype (context,
 | 
				
			||||||
				N_("encryption type %d not supported", ""),
 | 
					                               key->key->keytype);
 | 
				
			||||||
				key->key->keytype);
 | 
					 | 
				
			||||||
	return KRB5_PROG_ETYPE_NOSUPP;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    kt = et->keytype;
 | 
					    kt = et->keytype;
 | 
				
			||||||
@@ -684,10 +676,7 @@ krb5_enctype_to_keytype(krb5_context context,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    struct _krb5_encryption_type *e = _krb5_find_enctype(etype);
 | 
					    struct _krb5_encryption_type *e = _krb5_find_enctype(etype);
 | 
				
			||||||
    if(e == NULL) {
 | 
					    if(e == NULL) {
 | 
				
			||||||
	krb5_set_error_message (context, KRB5_PROG_ETYPE_NOSUPP,
 | 
					        return _krb5_unsupported_enctype (context, etype);
 | 
				
			||||||
				N_("encryption type %d not supported", ""),
 | 
					 | 
				
			||||||
				etype);
 | 
					 | 
				
			||||||
	return KRB5_PROG_ETYPE_NOSUPP;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    *keytype = e->keytype->type; /* XXX */
 | 
					    *keytype = e->keytype->type; /* XXX */
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
@@ -713,10 +702,7 @@ krb5_enctype_valid(krb5_context context,
 | 
				
			|||||||
    if (context == NULL)
 | 
					    if (context == NULL)
 | 
				
			||||||
	return KRB5_PROG_ETYPE_NOSUPP;
 | 
						return KRB5_PROG_ETYPE_NOSUPP;
 | 
				
			||||||
    if(e == NULL) {
 | 
					    if(e == NULL) {
 | 
				
			||||||
	krb5_set_error_message (context, KRB5_PROG_ETYPE_NOSUPP,
 | 
					        return _krb5_unsupported_enctype (context, etype);
 | 
				
			||||||
				N_("encryption type %d not supported", ""),
 | 
					 | 
				
			||||||
				etype);
 | 
					 | 
				
			||||||
	return KRB5_PROG_ETYPE_NOSUPP;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    /* Must be (e->flags & F_DISABLED) */
 | 
					    /* Must be (e->flags & F_DISABLED) */
 | 
				
			||||||
    krb5_set_error_message (context, KRB5_PROG_ETYPE_NOSUPP,
 | 
					    krb5_set_error_message (context, KRB5_PROG_ETYPE_NOSUPP,
 | 
				
			||||||
@@ -1954,10 +1940,7 @@ krb5_derive_key(krb5_context context,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    et = _krb5_find_enctype (etype);
 | 
					    et = _krb5_find_enctype (etype);
 | 
				
			||||||
    if (et == NULL) {
 | 
					    if (et == NULL) {
 | 
				
			||||||
	krb5_set_error_message(context, KRB5_PROG_ETYPE_NOSUPP,
 | 
					        return _krb5_unsupported_enctype (context, etype);
 | 
				
			||||||
			       N_("encryption type %d not supported", ""),
 | 
					 | 
				
			||||||
			       etype);
 | 
					 | 
				
			||||||
	return KRB5_PROG_ETYPE_NOSUPP;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ret = krb5_copy_keyblock(context, key, &d.key);
 | 
					    ret = krb5_copy_keyblock(context, key, &d.key);
 | 
				
			||||||
@@ -1972,6 +1955,32 @@ krb5_derive_key(krb5_context context,
 | 
				
			|||||||
    return ret;
 | 
					    return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 
 | 
				
			||||||
 | 
					 * _krb5_unsupported_enctype() converts etype to a user readable
 | 
				
			||||||
 | 
					 * string and sets as a side effect the krb5_error_message containing
 | 
				
			||||||
 | 
					 * this string. Returns KRB5_PROG_ETYPE_NOSUPP in not the conversion
 | 
				
			||||||
 | 
					 * of the etype failed in which case the error code of the etype
 | 
				
			||||||
 | 
					 * convesion is returned.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					static krb5_error_code
 | 
				
			||||||
 | 
					_krb5_unsupported_enctype(krb5_context context,
 | 
				
			||||||
 | 
					                          krb5_enctype etype)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int errcode;
 | 
				
			||||||
 | 
					    char *etypename = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (errcode = krb5_enctype_to_string (context, etype, &etypename))
 | 
				
			||||||
 | 
					        return errcode;
 | 
				
			||||||
 | 
					    else {
 | 
				
			||||||
 | 
					        krb5_set_error_message (context, KRB5_PROG_ETYPE_NOSUPP,
 | 
				
			||||||
 | 
					                                N_("encryption type %s not supported", ""),
 | 
				
			||||||
 | 
					                                etypename);
 | 
				
			||||||
 | 
					        free(etypename);
 | 
				
			||||||
 | 
					        return KRB5_PROG_ETYPE_NOSUPP;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static krb5_error_code
 | 
					static krb5_error_code
 | 
				
			||||||
_get_derived_key(krb5_context context,
 | 
					_get_derived_key(krb5_context context,
 | 
				
			||||||
		 krb5_crypto crypto,
 | 
							 krb5_crypto crypto,
 | 
				
			||||||
@@ -2035,10 +2044,7 @@ krb5_crypto_init(krb5_context context,
 | 
				
			|||||||
    if((*crypto)->et == NULL || ((*crypto)->et->flags & F_DISABLED)) {
 | 
					    if((*crypto)->et == NULL || ((*crypto)->et->flags & F_DISABLED)) {
 | 
				
			||||||
	free(*crypto);
 | 
						free(*crypto);
 | 
				
			||||||
	*crypto = NULL;
 | 
						*crypto = NULL;
 | 
				
			||||||
	krb5_set_error_message (context, KRB5_PROG_ETYPE_NOSUPP,
 | 
						return _krb5_unsupported_enctype (context, etype);
 | 
				
			||||||
				N_("encryption type %d not supported", ""),
 | 
					 | 
				
			||||||
				etype);
 | 
					 | 
				
			||||||
	return KRB5_PROG_ETYPE_NOSUPP;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if((*crypto)->et->keytype->size != key->keyvalue.length) {
 | 
					    if((*crypto)->et->keytype->size != key->keyvalue.length) {
 | 
				
			||||||
	free(*crypto);
 | 
						free(*crypto);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user