implement GSS_KRB5_SET_DNS_CANONIZE_X
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@18512 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		@@ -39,35 +39,15 @@
 | 
				
			|||||||
RCSID("$Id$");
 | 
					RCSID("$Id$");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static OM_uint32
 | 
					static OM_uint32
 | 
				
			||||||
set_compat_des3_mic_context_option
 | 
					get_bool(OM_uint32 *minor_status,
 | 
				
			||||||
           (OM_uint32 *minor_status,
 | 
						 const gss_buffer_t value,
 | 
				
			||||||
            gss_ctx_id_t *context_handle,
 | 
						 int *flag)
 | 
				
			||||||
            const gss_buffer_t value)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    gsskrb5_ctx ctx;
 | 
					 | 
				
			||||||
    const char *p;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (*context_handle == GSS_C_NO_CONTEXT) {
 | 
					 | 
				
			||||||
	*minor_status = EINVAL;
 | 
					 | 
				
			||||||
	return GSS_S_NO_CONTEXT;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (value->value == NULL || value->length != 1) {
 | 
					    if (value->value == NULL || value->length != 1) {
 | 
				
			||||||
	*minor_status = EINVAL;
 | 
						*minor_status = EINVAL;
 | 
				
			||||||
	return GSS_S_FAILURE;
 | 
						return GSS_S_FAILURE;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    p = (const char *)value->value;
 | 
					    *flag = *((const char *)value->value) != 0;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    ctx = (gsskrb5_ctx)*context_handle;
 | 
					 | 
				
			||||||
    HEIMDAL_MUTEX_lock(&ctx->ctx_id_mutex);
 | 
					 | 
				
			||||||
    if (*p) {
 | 
					 | 
				
			||||||
	ctx->more_flags |= COMPAT_OLD_DES3;
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
	ctx->more_flags &= ~COMPAT_OLD_DES3;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    ctx->more_flags |= COMPAT_OLD_DES3_SELECTED;
 | 
					 | 
				
			||||||
    HEIMDAL_MUTEX_unlock(&ctx->ctx_id_mutex);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return GSS_S_COMPLETE;
 | 
					    return GSS_S_COMPLETE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -78,6 +58,8 @@ _gsskrb5_set_sec_context_option
 | 
				
			|||||||
            const gss_OID desired_object,
 | 
					            const gss_OID desired_object,
 | 
				
			||||||
            const gss_buffer_t value)
 | 
					            const gss_buffer_t value)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    OM_uint32 maj_stat;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    GSSAPI_KRB5_INIT ();
 | 
					    GSSAPI_KRB5_INIT ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (value == GSS_C_NO_BUFFER) {
 | 
					    if (value == GSS_C_NO_BUFFER) {
 | 
				
			||||||
@@ -86,9 +68,37 @@ _gsskrb5_set_sec_context_option
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (gss_oid_equal(desired_object, GSS_KRB5_COMPAT_DES3_MIC_X)) {
 | 
					    if (gss_oid_equal(desired_object, GSS_KRB5_COMPAT_DES3_MIC_X)) {
 | 
				
			||||||
	return set_compat_des3_mic_context_option(minor_status,
 | 
						gsskrb5_ctx ctx;
 | 
				
			||||||
						  context_handle,
 | 
						int flag;
 | 
				
			||||||
						  value);
 | 
					
 | 
				
			||||||
 | 
						if (*context_handle == GSS_C_NO_CONTEXT) {
 | 
				
			||||||
 | 
						    *minor_status = EINVAL;
 | 
				
			||||||
 | 
						    return GSS_S_NO_CONTEXT;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						maj_stat = get_bool(minor_status, value, &flag);
 | 
				
			||||||
 | 
						if (maj_stat != GSS_S_COMPLETE)
 | 
				
			||||||
 | 
						    return maj_stat;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ctx = (gsskrb5_ctx)*context_handle;
 | 
				
			||||||
 | 
						HEIMDAL_MUTEX_lock(&ctx->ctx_id_mutex);
 | 
				
			||||||
 | 
						if (flag)
 | 
				
			||||||
 | 
						    ctx->more_flags |= COMPAT_OLD_DES3;
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
						    ctx->more_flags &= ~COMPAT_OLD_DES3;
 | 
				
			||||||
 | 
						ctx->more_flags |= COMPAT_OLD_DES3_SELECTED;
 | 
				
			||||||
 | 
						HEIMDAL_MUTEX_unlock(&ctx->ctx_id_mutex);
 | 
				
			||||||
 | 
						return GSS_S_COMPLETE;
 | 
				
			||||||
 | 
					    } else if (gss_oid_equal(desired_object, GSS_KRB5_SET_DNS_CANONIZE_X)) {
 | 
				
			||||||
 | 
						int flag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						maj_stat = get_bool(minor_status, value, &flag);
 | 
				
			||||||
 | 
						if (maj_stat != GSS_S_COMPLETE)
 | 
				
			||||||
 | 
						    return maj_stat;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						krb5_set_dns_canonize_hostname(_gsskrb5_context, flag);
 | 
				
			||||||
 | 
						return GSS_S_COMPLETE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    } else if (gss_oid_equal(desired_object, GSS_KRB5_REGISTER_ACCEPTOR_IDENTITY_X)) {
 | 
					    } else if (gss_oid_equal(desired_object, GSS_KRB5_REGISTER_ACCEPTOR_IDENTITY_X)) {
 | 
				
			||||||
	char *str;
 | 
						char *str;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user