Novell Database Abstraction Layer merge.
[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    "err_handle.h"
18
19 kadm5_ret_t
20 kadm5_create_policy(void *server_handle,
21                          kadm5_policy_ent_t policy, long mask)
22 {
23     cpol_arg            arg;
24     generic_ret         *r;
25     kadm5_server_handle_t handle = server_handle;
26
27     CHECK_HANDLE(server_handle);
28
29     if(policy == (kadm5_policy_ent_t) NULL)
30         return EINVAL;
31
32     arg.mask = mask;
33     arg.api_version = handle->api_version;
34     memcpy(&arg.rec, policy, sizeof(kadm5_policy_ent_rec));
35     r = create_policy_1(&arg, handle->clnt);
36     if(r == NULL)
37         return KADM5_RPC_ERROR;    
38
39     if(r->code)
40     {
41         krb5_set_err( handle->context, krb5_err_have_str, r->code, r->err_str );
42     }
43     return r->code;
44 }
45
46 kadm5_ret_t
47 kadm5_delete_policy(void *server_handle, char *name)
48 {
49     dpol_arg            arg;
50     generic_ret         *r;
51     kadm5_server_handle_t handle = server_handle;
52          
53     CHECK_HANDLE(server_handle);
54
55     if(name == NULL)
56         return EINVAL;
57
58     arg.name = name;
59     arg.api_version = handle->api_version;
60
61     r = delete_policy_1(&arg, handle->clnt);
62     if(r == NULL)
63         return KADM5_RPC_ERROR;    
64
65     if(r->code)
66     {
67         krb5_set_err( handle->context, krb5_err_have_str, r->code, r->err_str );
68     }
69     return r->code;
70 }
71
72 kadm5_ret_t
73 kadm5_modify_policy(void *server_handle,
74                          kadm5_policy_ent_t policy, long mask)
75 {
76     mpol_arg            arg;
77     generic_ret         *r;
78     kadm5_server_handle_t handle = server_handle;
79
80     CHECK_HANDLE(server_handle);
81
82     if(policy == (kadm5_policy_ent_t) NULL)
83         return EINVAL;
84         
85     arg.mask = mask;
86     arg.api_version = handle->api_version;
87
88     memcpy(&arg.rec, policy, sizeof(kadm5_policy_ent_rec));
89     r = modify_policy_1(&arg, handle->clnt);
90     if(r == NULL)
91         return KADM5_RPC_ERROR;    
92
93     if(r->code)
94     {
95         krb5_set_err( handle->context, krb5_err_have_str, r->code, r->err_str );
96     }
97     return r->code;
98 }
99
100 kadm5_ret_t
101 kadm5_get_policy(void *server_handle, char *name, kadm5_policy_ent_t ent)
102 {
103     gpol_arg        arg;
104     gpol_ret        *r;
105     kadm5_server_handle_t handle = server_handle;
106
107     CHECK_HANDLE(server_handle);
108
109     arg.name = name;
110     arg.api_version = handle->api_version;
111
112     if(name == NULL)
113         return EINVAL;
114         
115     r = get_policy_1(&arg, handle->clnt);
116     if(r == NULL)
117         return KADM5_RPC_ERROR;
118     if (handle->api_version == KADM5_API_VERSION_1) {
119          kadm5_policy_ent_t *entp;
120
121          entp = (kadm5_policy_ent_t *) ent;
122          if(r->code == 0) {
123               if (!(*entp = (kadm5_policy_ent_t)
124                     malloc(sizeof(kadm5_policy_ent_rec))))
125                    return ENOMEM;
126               memcpy(*entp, &r->rec, sizeof(**entp));
127          } else {
128               *entp = NULL;
129          }
130     } else {
131          if (r->code == 0)
132               memcpy(ent, &r->rec, sizeof(r->rec));
133     }
134          
135     if(r->code)
136     {
137         krb5_set_err( handle->context, krb5_err_have_str, r->code, r->err_str );
138     }
139     return r->code;
140 }
141
142 kadm5_ret_t
143 kadm5_get_policies(void *server_handle,
144                           char *exp, char ***pols, int *count)
145 {
146     gpols_arg   arg;
147     gpols_ret   *r;
148     kadm5_server_handle_t handle = server_handle;
149
150     CHECK_HANDLE(server_handle);
151
152     if(pols == NULL || count == NULL)
153         return EINVAL;
154     arg.exp = exp;
155     arg.api_version = handle->api_version;
156     r = get_pols_1(&arg, handle->clnt);
157     if(r == NULL)
158         return KADM5_RPC_ERROR;
159     if(r->code == 0) {
160          *count = r->count;
161          *pols = r->pols;
162     } else {
163          *count = 0;
164          *pols = NULL;
165     }
166     
167     if(r->code)
168     {
169         krb5_set_err( handle->context, krb5_err_have_str, r->code, r->err_str );
170     }
171     return r->code;
172 }