Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/crypto/krb5/src/lib/kadm5/clnt/clnt_policy.c
39566 views
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
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
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
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
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
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
132