Fix additional cases where krb5.h is included before k5-int.h. In most cases,
[krb5.git] / src / lib / kadm5 / clnt / clnt_policy.c
1 /*
2  * Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved
3  *
4  * $Header$
5  */
6
7 #if !defined(lint) && !defined(__CODECENTER__)
8 static char *rcsid = "$Header$";
9 #endif
10
11 #include    <gssrpc/rpc.h>
12 #include    <kadm5/admin.h>
13 #include    <kadm5/kadm_rpc.h>
14 #include    "client_internal.h"
15 #include        <stdlib.h>
16 #include        <string.h>
17 #include        <errno.h>
18 #include    "err_handle.h"
19
20 kadm5_ret_t
21 kadm5_create_policy(void *server_handle,
22                          kadm5_policy_ent_t policy, long mask)
23 {
24     cpol_arg            arg;
25     generic_ret         *r;
26     kadm5_server_handle_t handle = server_handle;
27
28     CHECK_HANDLE(server_handle);
29
30     if(policy == (kadm5_policy_ent_t) NULL)
31         return EINVAL;
32
33     arg.mask = mask;
34     arg.api_version = handle->api_version;
35     memcpy(&arg.rec, policy, sizeof(kadm5_policy_ent_rec));
36     r = create_policy_2(&arg, handle->clnt);
37     if(r == NULL)
38         return KADM5_RPC_ERROR;    
39
40     if(r->code)
41     {
42         krb5_set_err( handle->context, krb5_err_have_str, r->code, r->err_str );
43     }
44     return r->code;
45 }
46
47 kadm5_ret_t
48 kadm5_delete_policy(void *server_handle, char *name)
49 {
50     dpol_arg            arg;
51     generic_ret         *r;
52     kadm5_server_handle_t handle = server_handle;
53          
54     CHECK_HANDLE(server_handle);
55
56     if(name == NULL)
57         return EINVAL;
58
59     arg.name = name;
60     arg.api_version = handle->api_version;
61
62     r = delete_policy_2(&arg, handle->clnt);
63     if(r == NULL)
64         return KADM5_RPC_ERROR;    
65
66     if(r->code)
67     {
68         krb5_set_err( handle->context, krb5_err_have_str, r->code, r->err_str );
69     }
70     return r->code;
71 }
72
73 kadm5_ret_t
74 kadm5_modify_policy(void *server_handle,
75                          kadm5_policy_ent_t policy, long mask)
76 {
77     mpol_arg            arg;
78     generic_ret         *r;
79     kadm5_server_handle_t handle = server_handle;
80
81     CHECK_HANDLE(server_handle);
82
83     if(policy == (kadm5_policy_ent_t) NULL)
84         return EINVAL;
85         
86     arg.mask = mask;
87     arg.api_version = handle->api_version;
88
89     memcpy(&arg.rec, policy, sizeof(kadm5_policy_ent_rec));
90     r = modify_policy_2(&arg, handle->clnt);
91     if(r == NULL)
92         return KADM5_RPC_ERROR;    
93
94     if(r->code)
95     {
96         krb5_set_err( handle->context, krb5_err_have_str, r->code, r->err_str );
97     }
98     return r->code;
99 }
100
101 kadm5_ret_t
102 kadm5_get_policy(void *server_handle, char *name, kadm5_policy_ent_t ent)
103 {
104     gpol_arg        arg;
105     gpol_ret        *r;
106     kadm5_server_handle_t handle = server_handle;
107
108     CHECK_HANDLE(server_handle);
109
110     arg.name = name;
111     arg.api_version = handle->api_version;
112
113     if(name == NULL)
114         return EINVAL;
115         
116     r = get_policy_2(&arg, handle->clnt);
117     if(r == NULL)
118         return KADM5_RPC_ERROR;
119     if (handle->api_version == KADM5_API_VERSION_1) {
120          kadm5_policy_ent_t *entp;
121
122          entp = (kadm5_policy_ent_t *) ent;
123          if(r->code == 0) {
124               if (!(*entp = (kadm5_policy_ent_t)
125                     malloc(sizeof(kadm5_policy_ent_rec))))
126                    return ENOMEM;
127               memcpy(*entp, &r->rec, sizeof(**entp));
128          } else {
129               *entp = NULL;
130          }
131     } else {
132          if (r->code == 0)
133               memcpy(ent, &r->rec, sizeof(r->rec));
134     }
135          
136     if(r->code)
137     {
138         krb5_set_err( handle->context, krb5_err_have_str, r->code, r->err_str );
139     }
140     return r->code;
141 }
142
143 kadm5_ret_t
144 kadm5_get_policies(void *server_handle,
145                           char *exp, char ***pols, int *count)
146 {
147     gpols_arg   arg;
148     gpols_ret   *r;
149     kadm5_server_handle_t handle = server_handle;
150
151     CHECK_HANDLE(server_handle);
152
153     if(pols == NULL || count == NULL)
154         return EINVAL;
155     arg.exp = exp;
156     arg.api_version = handle->api_version;
157     r = get_pols_2(&arg, handle->clnt);
158     if(r == NULL)
159         return KADM5_RPC_ERROR;
160     if(r->code == 0) {
161          *count = r->count;
162          *pols = r->pols;
163     } else {
164          *count = 0;
165          *pols = NULL;
166     }
167     
168     if(r->code)
169     {
170         krb5_set_err( handle->context, krb5_err_have_str, r->code, r->err_str );
171     }
172     return r->code;
173 }