xref: /illumos-gate/usr/src/lib/krb5/kadm5/clnt/clnt_policy.c (revision 7c478bd95313f5f23a4c958a745db2134aa0324)
1*7c478bd9Sstevel@tonic-gate /*
2*7c478bd9Sstevel@tonic-gate  * Copyright 2002 Sun Microsystems, Inc.  All rights reserved.
3*7c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
4*7c478bd9Sstevel@tonic-gate  */
5*7c478bd9Sstevel@tonic-gate 
6*7c478bd9Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
7*7c478bd9Sstevel@tonic-gate 
8*7c478bd9Sstevel@tonic-gate /*
9*7c478bd9Sstevel@tonic-gate  * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
10*7c478bd9Sstevel@tonic-gate  *
11*7c478bd9Sstevel@tonic-gate  *	Openvision retains the copyright to derivative works of
12*7c478bd9Sstevel@tonic-gate  *	this source code.  Do *NOT* create a derivative of this
13*7c478bd9Sstevel@tonic-gate  *	source code before consulting with your legal department.
14*7c478bd9Sstevel@tonic-gate  *	Do *NOT* integrate *ANY* of this source code into another
15*7c478bd9Sstevel@tonic-gate  *	product before consulting with your legal department.
16*7c478bd9Sstevel@tonic-gate  *
17*7c478bd9Sstevel@tonic-gate  *	For further information, read the top-level Openvision
18*7c478bd9Sstevel@tonic-gate  *	copyright which is contained in the top-level MIT Kerberos
19*7c478bd9Sstevel@tonic-gate  *	copyright.
20*7c478bd9Sstevel@tonic-gate  *
21*7c478bd9Sstevel@tonic-gate  * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
22*7c478bd9Sstevel@tonic-gate  *
23*7c478bd9Sstevel@tonic-gate  */
24*7c478bd9Sstevel@tonic-gate 
25*7c478bd9Sstevel@tonic-gate 
26*7c478bd9Sstevel@tonic-gate /*
27*7c478bd9Sstevel@tonic-gate  * Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved
28*7c478bd9Sstevel@tonic-gate  *
29*7c478bd9Sstevel@tonic-gate  * $Header: /cvs/krbdev/krb5/src/lib/kadm5/clnt/clnt_policy.c,v 1.2 1998/02/14 02:32:57 tlyu Exp $
30*7c478bd9Sstevel@tonic-gate  */
31*7c478bd9Sstevel@tonic-gate 
32*7c478bd9Sstevel@tonic-gate #if !defined(lint) && !defined(__CODECENTER__)
33*7c478bd9Sstevel@tonic-gate static char *rcsid = "$Header: /cvs/krbdev/krb5/src/lib/kadm5/clnt/clnt_policy.c,v 1.2 1998/02/14 02:32:57 tlyu Exp $";
34*7c478bd9Sstevel@tonic-gate #endif
35*7c478bd9Sstevel@tonic-gate 
36*7c478bd9Sstevel@tonic-gate #include    <rpc/rpc.h> /* SUNWresync121 XXX */
37*7c478bd9Sstevel@tonic-gate #include    <kadm5/admin.h>
38*7c478bd9Sstevel@tonic-gate #include    <kadm5/kadm_rpc.h>
39*7c478bd9Sstevel@tonic-gate #include    "client_internal.h"
40*7c478bd9Sstevel@tonic-gate #include	<stdlib.h>
41*7c478bd9Sstevel@tonic-gate #include	<string.h>
42*7c478bd9Sstevel@tonic-gate 
43*7c478bd9Sstevel@tonic-gate kadm5_ret_t
44*7c478bd9Sstevel@tonic-gate kadm5_create_policy(void *server_handle,
45*7c478bd9Sstevel@tonic-gate 			 kadm5_policy_ent_t policy, long mask)
46*7c478bd9Sstevel@tonic-gate {
47*7c478bd9Sstevel@tonic-gate     cpol_arg		arg;
48*7c478bd9Sstevel@tonic-gate     generic_ret		*r;
49*7c478bd9Sstevel@tonic-gate     kadm5_server_handle_t handle = server_handle;
50*7c478bd9Sstevel@tonic-gate 
51*7c478bd9Sstevel@tonic-gate     CHECK_HANDLE(server_handle);
52*7c478bd9Sstevel@tonic-gate 
53*7c478bd9Sstevel@tonic-gate     if(policy == (kadm5_policy_ent_t) NULL)
54*7c478bd9Sstevel@tonic-gate 	return EINVAL;
55*7c478bd9Sstevel@tonic-gate 
56*7c478bd9Sstevel@tonic-gate     arg.mask = mask;
57*7c478bd9Sstevel@tonic-gate     arg.api_version = handle->api_version;
58*7c478bd9Sstevel@tonic-gate     memcpy(&arg.rec, policy, sizeof(kadm5_policy_ent_rec));
59*7c478bd9Sstevel@tonic-gate     r = create_policy_1(&arg, handle->clnt);
60*7c478bd9Sstevel@tonic-gate     if(r == NULL)
61*7c478bd9Sstevel@tonic-gate 	return KADM5_RPC_ERROR;
62*7c478bd9Sstevel@tonic-gate     return r->code;
63*7c478bd9Sstevel@tonic-gate }
64*7c478bd9Sstevel@tonic-gate 
65*7c478bd9Sstevel@tonic-gate kadm5_ret_t
66*7c478bd9Sstevel@tonic-gate kadm5_delete_policy(void *server_handle, char *name)
67*7c478bd9Sstevel@tonic-gate {
68*7c478bd9Sstevel@tonic-gate     dpol_arg		arg;
69*7c478bd9Sstevel@tonic-gate     generic_ret		*r;
70*7c478bd9Sstevel@tonic-gate     kadm5_server_handle_t handle = server_handle;
71*7c478bd9Sstevel@tonic-gate 
72*7c478bd9Sstevel@tonic-gate     CHECK_HANDLE(server_handle);
73*7c478bd9Sstevel@tonic-gate 
74*7c478bd9Sstevel@tonic-gate     if(name == NULL)
75*7c478bd9Sstevel@tonic-gate 	return EINVAL;
76*7c478bd9Sstevel@tonic-gate 
77*7c478bd9Sstevel@tonic-gate     arg.name = name;
78*7c478bd9Sstevel@tonic-gate     arg.api_version = handle->api_version;
79*7c478bd9Sstevel@tonic-gate 
80*7c478bd9Sstevel@tonic-gate     r = delete_policy_1(&arg, handle->clnt);
81*7c478bd9Sstevel@tonic-gate     if(r == NULL)
82*7c478bd9Sstevel@tonic-gate 	return KADM5_RPC_ERROR;
83*7c478bd9Sstevel@tonic-gate     return r->code;
84*7c478bd9Sstevel@tonic-gate }
85*7c478bd9Sstevel@tonic-gate 
86*7c478bd9Sstevel@tonic-gate kadm5_ret_t
87*7c478bd9Sstevel@tonic-gate kadm5_modify_policy(void *server_handle,
88*7c478bd9Sstevel@tonic-gate 			 kadm5_policy_ent_t policy, long mask)
89*7c478bd9Sstevel@tonic-gate 
90*7c478bd9Sstevel@tonic-gate {
91*7c478bd9Sstevel@tonic-gate     mpol_arg		arg;
92*7c478bd9Sstevel@tonic-gate     generic_ret		*r;
93*7c478bd9Sstevel@tonic-gate     kadm5_server_handle_t handle = server_handle;
94*7c478bd9Sstevel@tonic-gate 
95*7c478bd9Sstevel@tonic-gate     CHECK_HANDLE(server_handle);
96*7c478bd9Sstevel@tonic-gate 
97*7c478bd9Sstevel@tonic-gate     if(policy == (kadm5_policy_ent_t) NULL)
98*7c478bd9Sstevel@tonic-gate 	return EINVAL;
99*7c478bd9Sstevel@tonic-gate 
100*7c478bd9Sstevel@tonic-gate     arg.mask = mask;
101*7c478bd9Sstevel@tonic-gate     arg.api_version = handle->api_version;
102*7c478bd9Sstevel@tonic-gate 
103*7c478bd9Sstevel@tonic-gate     memcpy(&arg.rec, policy, sizeof(kadm5_policy_ent_rec));
104*7c478bd9Sstevel@tonic-gate     r = modify_policy_1(&arg, handle->clnt);
105*7c478bd9Sstevel@tonic-gate     if(r == NULL)
106*7c478bd9Sstevel@tonic-gate 	return KADM5_RPC_ERROR;
107*7c478bd9Sstevel@tonic-gate     return r->code;
108*7c478bd9Sstevel@tonic-gate }
109*7c478bd9Sstevel@tonic-gate 
110*7c478bd9Sstevel@tonic-gate kadm5_ret_t
111*7c478bd9Sstevel@tonic-gate kadm5_get_policy(void *server_handle, char *name, kadm5_policy_ent_t ent)
112*7c478bd9Sstevel@tonic-gate 
113*7c478bd9Sstevel@tonic-gate {
114*7c478bd9Sstevel@tonic-gate     gpol_arg	    arg;
115*7c478bd9Sstevel@tonic-gate     gpol_ret	    *r;
116*7c478bd9Sstevel@tonic-gate     kadm5_server_handle_t handle = server_handle;
117*7c478bd9Sstevel@tonic-gate 
118*7c478bd9Sstevel@tonic-gate     CHECK_HANDLE(server_handle);
119*7c478bd9Sstevel@tonic-gate 
120*7c478bd9Sstevel@tonic-gate     arg.name = name;
121*7c478bd9Sstevel@tonic-gate     arg.api_version = handle->api_version;
122*7c478bd9Sstevel@tonic-gate 
123*7c478bd9Sstevel@tonic-gate     if(name == NULL)
124*7c478bd9Sstevel@tonic-gate 	return EINVAL;
125*7c478bd9Sstevel@tonic-gate 
126*7c478bd9Sstevel@tonic-gate     r = get_policy_1(&arg, handle->clnt);
127*7c478bd9Sstevel@tonic-gate     if(r == NULL)
128*7c478bd9Sstevel@tonic-gate 	return KADM5_RPC_ERROR;
129*7c478bd9Sstevel@tonic-gate     if (handle->api_version == KADM5_API_VERSION_1) {
130*7c478bd9Sstevel@tonic-gate 	 kadm5_policy_ent_t *entp;
131*7c478bd9Sstevel@tonic-gate 
132*7c478bd9Sstevel@tonic-gate 	 entp = (kadm5_policy_ent_t *) ent;
133*7c478bd9Sstevel@tonic-gate 	 if(r->code == 0) {
134*7c478bd9Sstevel@tonic-gate 	      if (!(*entp = (kadm5_policy_ent_t)
135*7c478bd9Sstevel@tonic-gate 		    malloc(sizeof(kadm5_policy_ent_rec))))
136*7c478bd9Sstevel@tonic-gate 		   return ENOMEM;
137*7c478bd9Sstevel@tonic-gate 	      memcpy(*entp, &r->rec, sizeof(**entp));
138*7c478bd9Sstevel@tonic-gate 	 } else {
139*7c478bd9Sstevel@tonic-gate 	      *entp = NULL;
140*7c478bd9Sstevel@tonic-gate 	 }
141*7c478bd9Sstevel@tonic-gate     } else {
142*7c478bd9Sstevel@tonic-gate 	 if (r->code == 0)
143*7c478bd9Sstevel@tonic-gate 	      memcpy(ent, &r->rec, sizeof(r->rec));
144*7c478bd9Sstevel@tonic-gate     }
145*7c478bd9Sstevel@tonic-gate 
146*7c478bd9Sstevel@tonic-gate     return r->code;
147*7c478bd9Sstevel@tonic-gate }
148*7c478bd9Sstevel@tonic-gate 
149*7c478bd9Sstevel@tonic-gate kadm5_ret_t
150*7c478bd9Sstevel@tonic-gate kadm5_get_policies(void *server_handle,
151*7c478bd9Sstevel@tonic-gate 			  char *exp, char ***pols, int *count)
152*7c478bd9Sstevel@tonic-gate {
153*7c478bd9Sstevel@tonic-gate     gpols_arg	arg;
154*7c478bd9Sstevel@tonic-gate     gpols_ret	*r;
155*7c478bd9Sstevel@tonic-gate     kadm5_server_handle_t handle = server_handle;
156*7c478bd9Sstevel@tonic-gate 
157*7c478bd9Sstevel@tonic-gate     CHECK_HANDLE(server_handle);
158*7c478bd9Sstevel@tonic-gate 
159*7c478bd9Sstevel@tonic-gate     if(pols == NULL || count == NULL)
160*7c478bd9Sstevel@tonic-gate 	return EINVAL;
161*7c478bd9Sstevel@tonic-gate     arg.exp = exp;
162*7c478bd9Sstevel@tonic-gate     arg.api_version = handle->api_version;
163*7c478bd9Sstevel@tonic-gate     r = get_pols_1(&arg, handle->clnt);
164*7c478bd9Sstevel@tonic-gate     if(r == NULL)
165*7c478bd9Sstevel@tonic-gate 	return KADM5_RPC_ERROR;
166*7c478bd9Sstevel@tonic-gate     if(r->code == 0) {
167*7c478bd9Sstevel@tonic-gate 	 *count = r->count;
168*7c478bd9Sstevel@tonic-gate 	 *pols = r->pols;
169*7c478bd9Sstevel@tonic-gate     } else {
170*7c478bd9Sstevel@tonic-gate 	 *count = 0;
171*7c478bd9Sstevel@tonic-gate 	 *pols = NULL;
172*7c478bd9Sstevel@tonic-gate     }
173*7c478bd9Sstevel@tonic-gate 
174*7c478bd9Sstevel@tonic-gate     return r->code;
175*7c478bd9Sstevel@tonic-gate }
176