2 * Copyright (c) 1997 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
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.
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.
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
38 #include "krb5_locl.h"
40 KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
41 _krb5_principal2principalname (PrincipalName
*p
,
42 const krb5_principal from
)
44 return copy_PrincipalName(&from
->name
, p
);
47 KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
48 _krb5_principalname2krb5_principal (krb5_context context
,
49 krb5_principal
*principal
,
50 const PrincipalName from
,
56 p
= calloc(1, sizeof(*p
));
58 return krb5_enomem(context
);
59 ret
= copy_PrincipalName(&from
, &p
->name
);
64 p
->realm
= strdup(realm
);
65 if (p
->realm
== NULL
) {
66 free_PrincipalName(&p
->name
);
68 return krb5_enomem(context
);
74 KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
75 _krb5_ticket2krb5_principal(krb5_context context
,
76 krb5_principal
*principal
,
77 const EncTicketPart
*ticket
,
78 const AuthorizationData
*authenticator_ad
)
81 krb5_principal p
= NULL
;
85 ret
= _krb5_principalname2krb5_principal(context
,
90 (p
->nameattrs
= calloc(1, sizeof(p
->nameattrs
[0]))) == NULL
)
91 ret
= krb5_enomem(context
);
93 p
->nameattrs
->authenticated
= 1;
95 (p
->nameattrs
->source
=
96 calloc(1, sizeof(p
->nameattrs
->source
[0]))) == NULL
)
97 ret
= krb5_enomem(context
);
99 p
->nameattrs
->source
->element
=
100 choice_PrincipalNameAttrSrc_enc_ticket_part
;
101 ret
= copy_EncTicketPart(ticket
,
102 &p
->nameattrs
->source
->u
.enc_ticket_part
);
103 /* NOTE: we don't want to keep a copy of the session key here! */
105 der_free_octet_string(&p
->nameattrs
->source
->u
.enc_ticket_part
.key
.keyvalue
);
107 if (ret
== 0 && authenticator_ad
) {
108 p
->nameattrs
->authenticator_ad
=
109 calloc(1, sizeof(p
->nameattrs
->authenticator_ad
[0]));
110 if (p
->nameattrs
->authenticator_ad
== NULL
)
111 ret
= krb5_enomem(context
);
113 ret
= copy_AuthorizationData(authenticator_ad
,
114 p
->nameattrs
->authenticator_ad
);
120 krb5_free_principal(context
, p
);
124 KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
125 _krb5_kdcrep2krb5_principal(krb5_context context
,
126 krb5_principal
*principal
,
127 const EncKDCRepPart
*kdcrep
)
130 krb5_principal p
= NULL
;
134 ret
= _krb5_principalname2krb5_principal(context
,
139 (p
->nameattrs
= calloc(1, sizeof(p
->nameattrs
[0]))) == NULL
)
140 ret
= krb5_enomem(context
);
142 p
->nameattrs
->authenticated
= 1;
144 (p
->nameattrs
->source
=
145 calloc(1, sizeof(p
->nameattrs
->source
[0]))) == NULL
)
146 ret
= krb5_enomem(context
);
148 p
->nameattrs
->source
->element
=
149 choice_PrincipalNameAttrSrc_enc_kdc_rep_part
;
150 ret
= copy_EncKDCRepPart(kdcrep
,
151 &p
->nameattrs
->source
->u
.enc_kdc_rep_part
);
152 /* NOTE: we don't want to keep a copy of the session key here! */
154 der_free_octet_string(&p
->nameattrs
->source
->u
.enc_kdc_rep_part
.key
.keyvalue
);
160 krb5_free_principal(context
, p
);