Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/crypto/heimdal/lib/gssapi/krb5/compat.c
34923 views
1
/*
2
* Copyright (c) 2003 - 2005 Kungliga Tekniska Högskolan
3
* (Royal Institute of Technology, Stockholm, Sweden).
4
* All rights reserved.
5
*
6
* Redistribution and use in source and binary forms, with or without
7
* modification, are permitted provided that the following conditions
8
* are met:
9
*
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
*
13
* 2. Redistributions in binary form must reproduce the above copyright
14
* notice, this list of conditions and the following disclaimer in the
15
* documentation and/or other materials provided with the distribution.
16
*
17
* 3. Neither the name of the Institute nor the names of its contributors
18
* may be used to endorse or promote products derived from this software
19
* without specific prior written permission.
20
*
21
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31
* SUCH DAMAGE.
32
*/
33
34
#include "gsskrb5_locl.h"
35
36
static krb5_error_code
37
check_compat(OM_uint32 *minor_status,
38
krb5_context context, krb5_const_principal name,
39
const char *option, krb5_boolean *compat,
40
krb5_boolean match_val)
41
{
42
krb5_error_code ret = 0;
43
char **p, **q;
44
krb5_principal match;
45
46
47
p = krb5_config_get_strings(context, NULL, "gssapi",
48
option, NULL);
49
if(p == NULL)
50
return 0;
51
52
match = NULL;
53
for(q = p; *q; q++) {
54
ret = krb5_parse_name(context, *q, &match);
55
if (ret)
56
break;
57
58
if (krb5_principal_match(context, name, match)) {
59
*compat = match_val;
60
break;
61
}
62
63
krb5_free_principal(context, match);
64
match = NULL;
65
}
66
if (match)
67
krb5_free_principal(context, match);
68
krb5_config_free_strings(p);
69
70
if (ret) {
71
if (minor_status)
72
*minor_status = ret;
73
return GSS_S_FAILURE;
74
}
75
76
return 0;
77
}
78
79
/*
80
* ctx->ctx_id_mutex is assumed to be locked
81
*/
82
83
OM_uint32
84
_gss_DES3_get_mic_compat(OM_uint32 *minor_status,
85
gsskrb5_ctx ctx,
86
krb5_context context)
87
{
88
krb5_boolean use_compat = FALSE;
89
OM_uint32 ret;
90
91
if ((ctx->more_flags & COMPAT_OLD_DES3_SELECTED) == 0) {
92
ret = check_compat(minor_status, context, ctx->target,
93
"broken_des3_mic", &use_compat, TRUE);
94
if (ret)
95
return ret;
96
ret = check_compat(minor_status, context, ctx->target,
97
"correct_des3_mic", &use_compat, FALSE);
98
if (ret)
99
return ret;
100
101
if (use_compat)
102
ctx->more_flags |= COMPAT_OLD_DES3;
103
ctx->more_flags |= COMPAT_OLD_DES3_SELECTED;
104
}
105
return 0;
106
}
107
108
#if 0
109
OM_uint32
110
gss_krb5_compat_des3_mic(OM_uint32 *minor_status, gss_ctx_id_t ctx, int on)
111
{
112
*minor_status = 0;
113
114
HEIMDAL_MUTEX_lock(&ctx->ctx_id_mutex);
115
if (on) {
116
ctx->more_flags |= COMPAT_OLD_DES3;
117
} else {
118
ctx->more_flags &= ~COMPAT_OLD_DES3;
119
}
120
ctx->more_flags |= COMPAT_OLD_DES3_SELECTED;
121
HEIMDAL_MUTEX_unlock(&ctx->ctx_id_mutex);
122
123
return 0;
124
}
125
#endif
126
127