more-rx-updates-20060504
[openafs.git] / src / WINNT / afsadmsvr / TaAfsAdmSvrClientGroup.cpp
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 #include <winsock2.h>
11 #include <ws2tcpip.h>
12
13 extern "C" {
14 #include <afs/param.h>
15 #include <afs/stds.h>
16 }
17
18 #include "TaAfsAdmSvrClientInternal.h"
19
20
21 /*
22  * ROUTINES ___________________________________________________________________
23  *
24  */
25
26 BOOL ADMINAPI asc_GroupChange (UINT_PTR idClient, ASID idCell, ASID idGroup, LPAFSADMSVR_CHANGEGROUP_PARAMS pChange, ULONG *pStatus)
27 {
28    BOOL rc = TRUE;
29    ULONG status = 0;
30
31    RpcTryExcept
32       {
33       if ((rc = AfsAdmSvr_ChangeGroup (idClient, idCell, idGroup, pChange, &status)) != FALSE)
34          {
35          // If we succeeded in changing this group's properties, get the
36          // newest values for our cache.
37          //
38          ASOBJPROP Properties;
39          rc = asc_ObjectPropertiesGet (idClient, GET_ALL_DATA, idCell, idGroup, &Properties, &status);
40          }
41       }
42    RpcExcept(1)
43       {
44       rc = FALSE;
45       status = RPC_S_CALL_FAILED_DNE;
46       }
47    RpcEndExcept
48
49    if (!rc && pStatus)
50       *pStatus = status;
51    return rc;
52 }
53
54
55 BOOL ADMINAPI asc_GroupMembersGet (UINT_PTR idClient, ASID idCell, ASID idGroup, LPASIDLIST *ppAsidList, ULONG *pStatus)
56 {
57    BOOL rc = TRUE;
58    ULONG status = 0;
59
60    RpcTryExcept
61       {
62       rc = AfsAdmSvr_GetGroupMembers (idClient, idCell, idGroup, ppAsidList, &status);
63       }
64    RpcExcept(1)
65       {
66       rc = FALSE;
67       status = RPC_S_CALL_FAILED_DNE;
68       }
69    RpcEndExcept
70
71    if (!rc && pStatus)
72       *pStatus = status;
73    return rc;
74 }
75
76
77 BOOL ADMINAPI asc_GroupMemberAdd (UINT_PTR idClient, ASID idCell, ASID idGroup, ASID idMember, ULONG *pStatus)
78 {
79    BOOL rc = TRUE;
80    ULONG status = 0;
81
82    RpcTryExcept
83       {
84       rc = AfsAdmSvr_AddGroupMember (idClient, idCell, idGroup, idMember, &status);
85       }
86    RpcExcept(1)
87       {
88       rc = FALSE;
89       status = RPC_S_CALL_FAILED_DNE;
90       }
91    RpcEndExcept
92
93    if (!rc && pStatus)
94       *pStatus = status;
95    return rc;
96 }
97
98
99 BOOL ADMINAPI asc_GroupMemberRemove (UINT_PTR idClient, ASID idCell, ASID idGroup, ASID idMember, ULONG *pStatus)
100 {
101    BOOL rc = TRUE;
102    ULONG status = 0;
103
104    RpcTryExcept
105       {
106       rc = AfsAdmSvr_RemoveGroupMember (idClient, idCell, idGroup, idMember, &status);
107       }
108    RpcExcept(1)
109       {
110       rc = FALSE;
111       status = RPC_S_CALL_FAILED_DNE;
112       }
113    RpcEndExcept
114
115    if (!rc && pStatus)
116       *pStatus = status;
117    return rc;
118 }
119
120
121 BOOL ADMINAPI asc_GroupRename (UINT_PTR idClient, ASID idCell, ASID idGroup, LPCTSTR pszNewName, ULONG *pStatus)
122 {
123    BOOL rc = TRUE;
124    ULONG status = 0;
125
126    RpcTryExcept
127       {
128       STRING szNewName = TEXT("");
129       if (pszNewName)
130          lstrcpy (szNewName, pszNewName);
131       if ((rc = AfsAdmSvr_RenameGroup (idClient, idCell, idGroup, szNewName, &status)) == TRUE)
132          {
133          // If we succeeded in changing this group's name, get the
134          // newest group properties for our cache.
135          //
136          ASOBJPROP Properties;
137          rc = asc_ObjectPropertiesGet (idClient, GET_ALL_DATA, idCell, idGroup, &Properties, &status);
138          }
139       }
140    RpcExcept(1)
141       {
142       rc = FALSE;
143       status = RPC_S_CALL_FAILED_DNE;
144       }
145    RpcEndExcept
146
147    if (!rc && pStatus)
148       *pStatus = status;
149    return rc;
150 }
151
152
153 BOOL ADMINAPI asc_GroupMembershipGet (UINT_PTR idClient, ASID idCell, ASID idMember, LPASIDLIST *ppAsidList, ULONG *pStatus)
154 {
155    BOOL rc = TRUE;
156    ULONG status = 0;
157
158    RpcTryExcept
159       {
160       rc = AfsAdmSvr_GetGroupMembership (idClient, idCell, idMember, ppAsidList, &status);
161       }
162    RpcExcept(1)
163       {
164       rc = FALSE;
165       status = RPC_S_CALL_FAILED_DNE;
166       }
167    RpcEndExcept
168
169    if (!rc && pStatus)
170       *pStatus = status;
171    return rc;
172 }
173
174
175 BOOL ADMINAPI asc_GroupOwnershipGet (UINT_PTR idClient, ASID idCell, ASID idOwner, LPASIDLIST *ppAsidList, ULONG *pStatus)
176 {
177    BOOL rc = TRUE;
178    ULONG status = 0;
179
180    RpcTryExcept
181       {
182       rc = AfsAdmSvr_GetGroupOwnership (idClient, idCell, idOwner, ppAsidList, &status);
183       }
184    RpcExcept(1)
185       {
186       rc = FALSE;
187       status = RPC_S_CALL_FAILED_DNE;
188       }
189    RpcEndExcept
190
191    if (!rc && pStatus)
192       *pStatus = status;
193    return rc;
194 }
195
196
197 BOOL ADMINAPI asc_GroupCreate (UINT_PTR idClient, ASID idCell, LPAFSADMSVR_CREATEGROUP_PARAMS pCreate, ASID *pidGroup, ULONG *pStatus)
198 {
199    BOOL rc = TRUE;
200    ULONG status = 0;
201
202    RpcTryExcept
203       {
204       if ((rc = AfsAdmSvr_CreateGroup (idClient, idCell, pCreate, pidGroup, &status)) == TRUE)
205          {
206          // If we succeeded in creating this group, get the
207          // initial group properties for our cache.
208          //
209          ASOBJPROP Properties;
210          rc = asc_ObjectPropertiesGet (idClient, GET_ALL_DATA, idCell, *pidGroup, &Properties, &status);
211          }
212       }
213    RpcExcept(1)
214       {
215       rc = FALSE;
216       status = RPC_S_CALL_FAILED_DNE;
217       }
218    RpcEndExcept
219
220    if (!rc && pStatus)
221       *pStatus = status;
222    return rc;
223 }
224
225
226 BOOL ADMINAPI asc_GroupDelete (UINT_PTR idClient, ASID idCell, ASID idGroup, ULONG *pStatus)
227 {
228    BOOL rc = TRUE;
229    ULONG status = 0;
230
231    RpcTryExcept
232       {
233       if ((rc = AfsAdmSvr_DeleteGroup (idClient, idCell, idGroup, &status)) == TRUE)
234          {
235          // If we succeeded in deleting this group, clean up our cache.
236          // Expect this call to fail (the group's deleted, right?)
237          //
238          ASOBJPROP Properties;
239          ULONG dummy;
240          (void)asc_ObjectPropertiesGet (idClient, GET_ALL_DATA, idCell, idGroup, &Properties, &dummy);
241          }
242       }
243    RpcExcept(1)
244       {
245       rc = FALSE;
246       status = RPC_S_CALL_FAILED_DNE;
247       }
248    RpcEndExcept
249
250    if (!rc && pStatus)
251       *pStatus = status;
252    return rc;
253 }
254