xref: /freebsd/crypto/krb5/src/lib/kadm5/clnt/clnt_policy.c (revision 7f2fe78b9dd5f51c821d771b63d2e096f6fd49e9)
1 /* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /*
3  * Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved
4  *
5  * $Header$
6  */
7 
8 #include    <gssrpc/rpc.h>
9 #include    <kadm5/admin.h>
10 #include    <kadm5/kadm_rpc.h>
11 #include    "client_internal.h"
12 #include        <stdlib.h>
13 #include        <string.h>
14 #include        <errno.h>
15 
16 kadm5_ret_t
kadm5_create_policy(void * server_handle,kadm5_policy_ent_t policy,long mask)17 kadm5_create_policy(void *server_handle,
18                     kadm5_policy_ent_t policy, long mask)
19 {
20     cpol_arg            arg;
21     generic_ret         r = { 0, 0 };
22     kadm5_server_handle_t handle = server_handle;
23 
24     CHECK_HANDLE(server_handle);
25 
26     if(policy == (kadm5_policy_ent_t) NULL)
27         return EINVAL;
28 
29     arg.mask = mask;
30     arg.api_version = handle->api_version;
31     memcpy(&arg.rec, policy, sizeof(kadm5_policy_ent_rec));
32     if (create_policy_2(&arg, &r, handle->clnt))
33         return KADM5_RPC_ERROR;
34     return r.code;
35 }
36 
37 kadm5_ret_t
kadm5_delete_policy(void * server_handle,char * name)38 kadm5_delete_policy(void *server_handle, char *name)
39 {
40     dpol_arg            arg;
41     generic_ret         r = { 0, 0 };
42     kadm5_server_handle_t handle = server_handle;
43 
44     CHECK_HANDLE(server_handle);
45 
46     if(name == NULL)
47         return EINVAL;
48 
49     arg.name = name;
50     arg.api_version = handle->api_version;
51 
52     if (delete_policy_2(&arg, &r, handle->clnt))
53         return KADM5_RPC_ERROR;
54     return r.code;
55 }
56 
57 kadm5_ret_t
kadm5_modify_policy(void * server_handle,kadm5_policy_ent_t policy,long mask)58 kadm5_modify_policy(void *server_handle,
59                     kadm5_policy_ent_t policy, long mask)
60 {
61     mpol_arg            arg;
62     generic_ret         r = { 0, 0 };
63     kadm5_server_handle_t handle = server_handle;
64 
65     CHECK_HANDLE(server_handle);
66 
67     if(policy == (kadm5_policy_ent_t) NULL)
68         return EINVAL;
69 
70     arg.mask = mask;
71     arg.api_version = handle->api_version;
72 
73     memcpy(&arg.rec, policy, sizeof(kadm5_policy_ent_rec));
74     if (modify_policy_2(&arg, &r, handle->clnt))
75         return KADM5_RPC_ERROR;
76     return r.code;
77 }
78 
79 kadm5_ret_t
kadm5_get_policy(void * server_handle,char * name,kadm5_policy_ent_t ent)80 kadm5_get_policy(void *server_handle, char *name, kadm5_policy_ent_t ent)
81 {
82     gpol_arg        arg;
83     gpol_ret        r;
84     kadm5_server_handle_t handle = server_handle;
85 
86     memset(ent, 0, sizeof(*ent));
87 
88     CHECK_HANDLE(server_handle);
89 
90     arg.name = name;
91     arg.api_version = handle->api_version;
92 
93     if(name == NULL)
94         return EINVAL;
95 
96     memset(&r, 0, sizeof(gpol_ret));
97     if (get_policy_2(&arg, &r, handle->clnt))
98         return KADM5_RPC_ERROR;
99     if (r.code == 0)
100         memcpy(ent, &r.rec, sizeof(r.rec));
101     return r.code;
102 }
103 
104 kadm5_ret_t
kadm5_get_policies(void * server_handle,char * exp,char *** pols,int * count)105 kadm5_get_policies(void *server_handle,
106                    char *exp, char ***pols, int *count)
107 {
108     gpols_arg   arg;
109     gpols_ret   r;
110     kadm5_server_handle_t handle = server_handle;
111 
112     CHECK_HANDLE(server_handle);
113 
114     if(pols == NULL || count == NULL)
115         return EINVAL;
116     arg.exp = exp;
117     arg.api_version = handle->api_version;
118     memset(&r, 0, sizeof(gpols_ret));
119     if (get_pols_2(&arg, &r, handle->clnt))
120         return KADM5_RPC_ERROR;
121     if (r.code == 0) {
122         *count = r.count;
123         *pols = r.pols;
124     } else {
125         *count = 0;
126         *pols = NULL;
127     }
128 
129     return r.code;
130 }
131