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
11 #include <afs/param.h>
15 #include <WINNT/afsclass.h>
20 * DEFINITIONS ________________________________________________________________
24 #define PTSGROUPACCESS_TO_ACCOUNTACCESS(_ga) \
25 ( ((_ga) == PTS_GROUP_OWNER_ACCESS) ? aaOWNER_ONLY : \
26 ((_ga) == PTS_GROUP_ACCESS) ? aaGROUP_ONLY : aaANYONE )
30 * ROUTINES ___________________________________________________________________
34 PTSGROUP::PTSGROUP (LPCELL lpCellParent, LPTSTR pszGroup)
36 m_lpiCell = lpCellParent->GetIdentifier();
37 lstrcpy (m_szName, pszGroup);
40 m_fStatusOutOfDate = TRUE;
47 PTSGROUP::~PTSGROUP (void)
52 FreeString (m_mszMembers);
53 FreeString (m_mszMemberOf);
54 FreeString (m_mszOwnerOf);
58 void PTSGROUP::SendDeleteNotifications (void)
60 NOTIFYCALLBACK::SendNotificationToAll (evtDestroy, GetIdentifier());
64 void PTSGROUP::Close (void)
70 LPIDENT PTSGROUP::GetIdentifier (void)
72 if (m_lpiThis == NULL)
74 if ((m_lpiThis = IDENT::FindIdent (this)) == NULL)
75 m_lpiThis = New2 (IDENT,(this));
83 void PTSGROUP::Invalidate (void)
85 m_fStatusOutOfDate = TRUE;
89 LPCELL PTSGROUP::OpenCell (ULONG *pStatus)
91 return m_lpiCell->OpenCell (pStatus);
95 void PTSGROUP::GetName (LPTSTR pszGroup)
98 lstrcpy (pszGroup, m_szName);
102 BOOL PTSGROUP::GetStatus (LPPTSGROUPSTATUS lpgs, BOOL fNotify, ULONG *pStatus)
104 if (!RefreshStatus (fNotify, pStatus))
107 memcpy (lpgs, &m_gs, sizeof(PTSGROUPSTATUS));
112 PVOID PTSGROUP::GetUserParam (void)
114 return GetIdentifier()->GetUserParam();
118 void PTSGROUP::SetUserParam (PVOID pUserParam)
120 GetIdentifier()->SetUserParam (pUserParam);
124 BOOL PTSGROUP::GetMembers (LPTSTR *ppmsz, ULONG *pStatus)
126 if (!RefreshStatus (TRUE, pStatus))
128 *ppmsz = CloneMultiString (m_mszMembers);
133 BOOL PTSGROUP::GetMemberOf (LPTSTR *ppmsz, ULONG *pStatus)
135 if (!RefreshStatus (TRUE, pStatus))
137 *ppmsz = CloneMultiString (m_mszMemberOf);
142 BOOL PTSGROUP::GetOwnerOf (LPTSTR *ppmsz, ULONG *pStatus)
144 if (!RefreshStatus (TRUE, pStatus))
146 *ppmsz = CloneMultiString (m_mszOwnerOf);
151 void PTSGROUP::ChangeIdentName (LPTSTR pszNewName)
154 if ((lpi = GetIdentifier()) != NULL)
156 lstrcpy (lpi->m_szAccount, pszNewName);
159 lstrcpy (m_szName, pszNewName);
162 if ((lpCell = OpenCell()) != NULL)
164 lpCell->m_lGroups->Update(this);
170 BOOL PTSGROUP::RefreshStatus (BOOL fNotify, ULONG *pStatus)
175 if (m_fStatusOutOfDate)
177 m_fStatusOutOfDate = FALSE;
180 NOTIFYCALLBACK::SendNotificationToAll (evtRefreshStatusBegin, GetIdentifier());
182 memset (&m_gs, 0x00, sizeof(m_gs));
184 FreeString (m_mszOwnerOf);
187 FreeString (m_mszMemberOf);
188 m_mszMemberOf = NULL;
190 FreeString (m_mszMembers);
194 if ((lpCell = OpenCell (&status)) == NULL)
199 if ((hCell = lpCell->GetCellObject (&status)) == NULL)
204 wpGet.wpPtsGroupGet.hCell = hCell;
205 wpGet.wpPtsGroupGet.pszGroup = m_szName;
206 if (!Worker_DoTask (wtaskPtsGroupGet, &wpGet, &status))
210 m_gs.nMembers = wpGet.wpPtsGroupGet.Entry.membershipCount;
211 m_gs.uidName = wpGet.wpPtsGroupGet.Entry.nameUid;
212 m_gs.uidOwner = wpGet.wpPtsGroupGet.Entry.ownerUid;
213 m_gs.uidCreator = wpGet.wpPtsGroupGet.Entry.creatorUid;
215 m_gs.aaListStatus = PTSGROUPACCESS_TO_ACCOUNTACCESS (wpGet.wpPtsGroupGet.Entry.listStatus);
216 m_gs.aaListGroupsOwned = PTSGROUPACCESS_TO_ACCOUNTACCESS (wpGet.wpPtsGroupGet.Entry.listGroupsOwned);
217 m_gs.aaListMembers = PTSGROUPACCESS_TO_ACCOUNTACCESS (wpGet.wpPtsGroupGet.Entry.listMembership);
218 m_gs.aaAddMember = PTSGROUPACCESS_TO_ACCOUNTACCESS (wpGet.wpPtsGroupGet.Entry.listAdd);
219 m_gs.aaDeleteMember = PTSGROUPACCESS_TO_ACCOUNTACCESS (wpGet.wpPtsGroupGet.Entry.listDelete);
220 CopyAnsiToString (m_gs.szOwner, wpGet.wpPtsGroupGet.Entry.owner);
221 CopyAnsiToString (m_gs.szCreator, wpGet.wpPtsGroupGet.Entry.creator);
224 // Grab the list of users which belong to this group
226 WORKERPACKET wpBegin;
227 wpBegin.wpPtsGroupMemberListBegin.hCell = hCell;
228 wpBegin.wpPtsGroupMemberListBegin.pszGroup = m_szName;
229 if (Worker_DoTask (wtaskPtsGroupMemberListBegin, &wpBegin, &status))
233 TCHAR szMember[ cchNAME ];
236 wpNext.wpPtsGroupMemberListNext.hEnum = wpBegin.wpPtsGroupMemberListBegin.hEnum;
237 wpNext.wpPtsGroupMemberListNext.pszMember = szMember;
238 if (!Worker_DoTask (wtaskPtsGroupMemberListNext, &wpNext))
241 FormatMultiString (&m_mszMembers, FALSE, TEXT("%1"), TEXT("%s"), szMember);
245 wpDone.wpPtsGroupMemberListDone.hEnum = wpBegin.wpPtsGroupMemberListBegin.hEnum;
246 Worker_DoTask (wtaskPtsGroupMemberListDone, &wpDone);
249 // Grab the list of groups which this group owns
251 wpBegin.wpPtsOwnedGroupListBegin.hCell = hCell;
252 wpBegin.wpPtsOwnedGroupListBegin.pszOwner = m_szName;
253 if (Worker_DoTask (wtaskPtsOwnedGroupListBegin, &wpBegin, &status))
257 TCHAR szGroup[ cchNAME ];
260 wpNext.wpPtsOwnedGroupListNext.hEnum = wpBegin.wpPtsOwnedGroupListBegin.hEnum;
261 wpNext.wpPtsOwnedGroupListNext.pszGroup = szGroup;
262 if (!Worker_DoTask (wtaskPtsOwnedGroupListNext, &wpNext))
265 FormatMultiString (&m_mszOwnerOf, FALSE, TEXT("%1"), TEXT("%s"), szGroup);
269 wpDone.wpPtsOwnedGroupListDone.hEnum = wpBegin.wpPtsOwnedGroupListBegin.hEnum;
270 Worker_DoTask (wtaskPtsOwnedGroupListDone, &wpDone);
273 // Grab the list of groups to which this group belongs
275 wpBegin.wpPtsUserMemberListBegin.hCell = hCell;
276 wpBegin.wpPtsUserMemberListBegin.pszUser = m_szName;
277 if (Worker_DoTask (wtaskPtsUserMemberListBegin, &wpBegin, &status))
281 TCHAR szGroup[ cchNAME ];
284 wpNext.wpPtsUserMemberListNext.hEnum = wpBegin.wpPtsUserMemberListBegin.hEnum;
285 wpNext.wpPtsUserMemberListNext.pszGroup = szGroup;
286 if (!Worker_DoTask (wtaskPtsUserMemberListNext, &wpNext))
289 FormatMultiString (&m_mszMemberOf, FALSE, TEXT("%1"), TEXT("%s"), szGroup);
293 wpDone.wpPtsUserMemberListDone.hEnum = wpBegin.wpPtsUserMemberListBegin.hEnum;
294 Worker_DoTask (wtaskPtsUserMemberListDone, &wpDone);
302 NOTIFYCALLBACK::SendNotificationToAll (evtRefreshStatusEnd, GetIdentifier(), ((rc) ? 0 : status));