Windows global stuff:
[krb5.git] / src / lib / krb5 / krb / copy_athctr.c
1 /*
2  * lib/krb5/krb/copy_athctr.c
3  *
4  * Copyright 1990,1991 by the Massachusetts Institute of Technology.
5  * All Rights Reserved.
6  *
7  * Export of this software from the United States of America may
8  *   require a specific license from the United States Government.
9  *   It is the responsibility of any person or organization contemplating
10  *   export to obtain such a license before exporting.
11  * 
12  * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
13  * distribute this software and its documentation for any purpose and
14  * without fee is hereby granted, provided that the above copyright
15  * notice appear in all copies and that both that copyright notice and
16  * this permission notice appear in supporting documentation, and that
17  * the name of M.I.T. not be used in advertising or publicity pertaining
18  * to distribution of the software without specific, written prior
19  * permission.  M.I.T. makes no representations about the suitability of
20  * this software for any purpose.  It is provided "as is" without express
21  * or implied warranty.
22  * 
23  *
24  * krb5_copy_authenticator()
25  */
26
27 #include "k5-int.h"
28
29 krb5_error_code
30 krb5_copy_authenticator(context, authfrom, authto)
31     krb5_context context;
32 const krb5_authenticator *authfrom;
33 krb5_authenticator **authto;
34 {
35     krb5_error_code retval;
36     krb5_authenticator *tempto;
37
38     if (!(tempto = (krb5_authenticator *)malloc(sizeof(*tempto))))
39         return ENOMEM;
40     *tempto = *authfrom;
41
42     retval = krb5_copy_principal(context, authfrom->client, &tempto->client);
43     if (retval) {
44         krb5_xfree(tempto);
45         return retval;
46     }
47     
48     if (authfrom->checksum &&
49         (retval = krb5_copy_checksum(context, authfrom->checksum, &tempto->checksum))) {
50             krb5_free_principal(context, tempto->client);    
51             krb5_xfree(tempto);
52             return retval;
53     }
54     
55     if (authfrom->subkey) {
56             retval = krb5_copy_keyblock(context, authfrom->subkey, &tempto->subkey);
57             if (retval) {
58                     krb5_xfree(tempto->subkey);
59                     krb5_free_checksum(context, tempto->checksum);
60                     krb5_free_principal(context, tempto->client);    
61                     krb5_xfree(tempto);
62                     return retval;
63             }
64     }
65     
66     if (authfrom->authorization_data) {
67                 retval = krb5_copy_authdata(context, authfrom->authorization_data,
68                                     &tempto->authorization_data);
69                 if (retval) {
70                     krb5_xfree(tempto->subkey);
71                     krb5_free_checksum(context, tempto->checksum);
72                     krb5_free_principal(context, tempto->client);    
73                     krb5_free_authdata(context, tempto->authorization_data);
74                     krb5_xfree(tempto);
75                     return retval;
76                 }
77     }
78
79     *authto = tempto;
80     return 0;
81 }