2 * Copyright 2000, International Business Machines Corporation and others.
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
14 #include <afs/param.h>
18 #include <WINNT/afsclass.h>
23 * DEFINITIONS ________________________________________________________________
27 #define PTSGROUPACCESS_TO_ACCOUNTACCESS(_ga) \
28 ( ((_ga) == PTS_GROUP_OWNER_ACCESS) ? aaOWNER_ONLY : \
29 ((_ga) == PTS_GROUP_ACCESS) ? aaGROUP_ONLY : aaANYONE )
33 * ROUTINES ___________________________________________________________________
37 PTSGROUP::PTSGROUP (LPCELL lpCellParent, LPTSTR pszGroup)
39 m_lpiCell = lpCellParent->GetIdentifier();
40 lstrcpy (m_szName, pszGroup);
43 m_fStatusOutOfDate = TRUE;
47 memset(&m_gs, 0, sizeof(m_gs));
51 PTSGROUP::~PTSGROUP (void)
56 FreeString (m_mszMembers);
57 FreeString (m_mszMemberOf);
58 FreeString (m_mszOwnerOf);
62 void PTSGROUP::SendDeleteNotifications (void)
64 NOTIFYCALLBACK::SendNotificationToAll (evtDestroy, GetIdentifier());
68 void PTSGROUP::Close (void)
74 LPIDENT PTSGROUP::GetIdentifier (void)
76 if (m_lpiThis == NULL)
78 if ((m_lpiThis = IDENT::FindIdent (this)) == NULL)
79 m_lpiThis = New2 (IDENT,(this));
87 void PTSGROUP::Invalidate (void)
89 m_fStatusOutOfDate = TRUE;
93 LPCELL PTSGROUP::OpenCell (ULONG *pStatus)
95 return m_lpiCell->OpenCell (pStatus);
99 void PTSGROUP::GetName (LPTSTR pszGroup)
102 lstrcpy (pszGroup, m_szName);
106 BOOL PTSGROUP::GetStatus (LPPTSGROUPSTATUS lpgs, BOOL fNotify, ULONG *pStatus)
108 if (!RefreshStatus (fNotify, pStatus))
111 memcpy (lpgs, &m_gs, sizeof(PTSGROUPSTATUS));
116 PVOID PTSGROUP::GetUserParam (void)
118 return GetIdentifier()->GetUserParam();
122 void PTSGROUP::SetUserParam (PVOID pUserParam)
124 GetIdentifier()->SetUserParam (pUserParam);
128 BOOL PTSGROUP::GetMembers (LPTSTR *ppmsz, ULONG *pStatus)
130 if (!RefreshStatus (TRUE, pStatus))
132 *ppmsz = CloneMultiString (m_mszMembers);
137 BOOL PTSGROUP::GetMemberOf (LPTSTR *ppmsz, ULONG *pStatus)
139 if (!RefreshStatus (TRUE, pStatus))
141 *ppmsz = CloneMultiString (m_mszMemberOf);
146 BOOL PTSGROUP::GetOwnerOf (LPTSTR *ppmsz, ULONG *pStatus)
148 if (!RefreshStatus (TRUE, pStatus))
150 *ppmsz = CloneMultiString (m_mszOwnerOf);
155 void PTSGROUP::ChangeIdentName (LPTSTR pszNewName)
158 if ((lpi = GetIdentifier()) != NULL)
160 lstrcpy (lpi->m_szAccount, pszNewName);
163 lstrcpy (m_szName, pszNewName);
166 if ((lpCell = OpenCell()) != NULL)
168 lpCell->m_lGroups->Update(this);
174 BOOL PTSGROUP::RefreshStatus (BOOL fNotify, ULONG *pStatus)
179 if (m_fStatusOutOfDate)
181 m_fStatusOutOfDate = FALSE;
184 NOTIFYCALLBACK::SendNotificationToAll (evtRefreshStatusBegin, GetIdentifier());
186 memset (&m_gs, 0x00, sizeof(m_gs));
188 FreeString (m_mszOwnerOf);
191 FreeString (m_mszMemberOf);
192 m_mszMemberOf = NULL;
194 FreeString (m_mszMembers);
198 if ((lpCell = OpenCell (&status)) == NULL)
203 if ((hCell = lpCell->GetCellObject (&status)) == NULL)
208 wpGet.wpPtsGroupGet.hCell = hCell;
209 wpGet.wpPtsGroupGet.pszGroup = m_szName;
210 if (!Worker_DoTask (wtaskPtsGroupGet, &wpGet, &status))
214 m_gs.nMembers = wpGet.wpPtsGroupGet.Entry.membershipCount;
215 m_gs.uidName = wpGet.wpPtsGroupGet.Entry.nameUid;
216 m_gs.uidOwner = wpGet.wpPtsGroupGet.Entry.ownerUid;
217 m_gs.uidCreator = wpGet.wpPtsGroupGet.Entry.creatorUid;
219 m_gs.aaListStatus = PTSGROUPACCESS_TO_ACCOUNTACCESS (wpGet.wpPtsGroupGet.Entry.listStatus);
220 m_gs.aaListGroupsOwned = PTSGROUPACCESS_TO_ACCOUNTACCESS (wpGet.wpPtsGroupGet.Entry.listGroupsOwned);
221 m_gs.aaListMembers = PTSGROUPACCESS_TO_ACCOUNTACCESS (wpGet.wpPtsGroupGet.Entry.listMembership);
222 m_gs.aaAddMember = PTSGROUPACCESS_TO_ACCOUNTACCESS (wpGet.wpPtsGroupGet.Entry.listAdd);
223 m_gs.aaDeleteMember = PTSGROUPACCESS_TO_ACCOUNTACCESS (wpGet.wpPtsGroupGet.Entry.listDelete);
224 CopyAnsiToString (m_gs.szOwner, wpGet.wpPtsGroupGet.Entry.owner);
225 CopyAnsiToString (m_gs.szCreator, wpGet.wpPtsGroupGet.Entry.creator);
228 // Grab the list of users which belong to this group
230 WORKERPACKET wpBegin;
231 wpBegin.wpPtsGroupMemberListBegin.hCell = hCell;
232 wpBegin.wpPtsGroupMemberListBegin.pszGroup = m_szName;
233 if (Worker_DoTask (wtaskPtsGroupMemberListBegin, &wpBegin, &status))
237 TCHAR szMember[ cchNAME ];
240 wpNext.wpPtsGroupMemberListNext.hEnum = wpBegin.wpPtsGroupMemberListBegin.hEnum;
241 wpNext.wpPtsGroupMemberListNext.pszMember = szMember;
242 if (!Worker_DoTask (wtaskPtsGroupMemberListNext, &wpNext))
245 FormatMultiString (&m_mszMembers, FALSE, TEXT("%1"), TEXT("%s"), szMember);
249 wpDone.wpPtsGroupMemberListDone.hEnum = wpBegin.wpPtsGroupMemberListBegin.hEnum;
250 Worker_DoTask (wtaskPtsGroupMemberListDone, &wpDone);
253 // Grab the list of groups which this group owns
255 wpBegin.wpPtsOwnedGroupListBegin.hCell = hCell;
256 wpBegin.wpPtsOwnedGroupListBegin.pszOwner = m_szName;
257 if (Worker_DoTask (wtaskPtsOwnedGroupListBegin, &wpBegin, &status))
261 TCHAR szGroup[ cchNAME ];
264 wpNext.wpPtsOwnedGroupListNext.hEnum = wpBegin.wpPtsOwnedGroupListBegin.hEnum;
265 wpNext.wpPtsOwnedGroupListNext.pszGroup = szGroup;
266 if (!Worker_DoTask (wtaskPtsOwnedGroupListNext, &wpNext))
269 FormatMultiString (&m_mszOwnerOf, FALSE, TEXT("%1"), TEXT("%s"), szGroup);
273 wpDone.wpPtsOwnedGroupListDone.hEnum = wpBegin.wpPtsOwnedGroupListBegin.hEnum;
274 Worker_DoTask (wtaskPtsOwnedGroupListDone, &wpDone);
277 // Grab the list of groups to which this group belongs
279 wpBegin.wpPtsUserMemberListBegin.hCell = hCell;
280 wpBegin.wpPtsUserMemberListBegin.pszUser = m_szName;
281 if (Worker_DoTask (wtaskPtsUserMemberListBegin, &wpBegin, &status))
285 TCHAR szGroup[ cchNAME ];
288 wpNext.wpPtsUserMemberListNext.hEnum = wpBegin.wpPtsUserMemberListBegin.hEnum;
289 wpNext.wpPtsUserMemberListNext.pszGroup = szGroup;
290 if (!Worker_DoTask (wtaskPtsUserMemberListNext, &wpNext))
293 FormatMultiString (&m_mszMemberOf, FALSE, TEXT("%1"), TEXT("%s"), szGroup);
297 wpDone.wpPtsUserMemberListDone.hEnum = wpBegin.wpPtsUserMemberListBegin.hEnum;
298 Worker_DoTask (wtaskPtsUserMemberListDone, &wpDone);
306 NOTIFYCALLBACK::SendNotificationToAll (evtRefreshStatusEnd, GetIdentifier(), ((rc) ? 0 : status));