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