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;
44 memset(&m_gs, 0, sizeof(m_gs));
48 PTSGROUP::~PTSGROUP (void)
53 FreeString (m_mszMembers);
54 FreeString (m_mszMemberOf);
55 FreeString (m_mszOwnerOf);
59 void PTSGROUP::SendDeleteNotifications (void)
61 NOTIFYCALLBACK::SendNotificationToAll (evtDestroy, GetIdentifier());
65 void PTSGROUP::Close (void)
71 LPIDENT PTSGROUP::GetIdentifier (void)
73 if (m_lpiThis == NULL)
75 if ((m_lpiThis = IDENT::FindIdent (this)) == NULL)
76 m_lpiThis = New2 (IDENT,(this));
84 void PTSGROUP::Invalidate (void)
86 m_fStatusOutOfDate = TRUE;
90 LPCELL PTSGROUP::OpenCell (ULONG *pStatus)
92 return m_lpiCell->OpenCell (pStatus);
96 void PTSGROUP::GetName (LPTSTR pszGroup)
99 lstrcpy (pszGroup, m_szName);
103 BOOL PTSGROUP::GetStatus (LPPTSGROUPSTATUS lpgs, BOOL fNotify, ULONG *pStatus)
105 if (!RefreshStatus (fNotify, pStatus))
108 memcpy (lpgs, &m_gs, sizeof(PTSGROUPSTATUS));
113 PVOID PTSGROUP::GetUserParam (void)
115 return GetIdentifier()->GetUserParam();
119 void PTSGROUP::SetUserParam (PVOID pUserParam)
121 GetIdentifier()->SetUserParam (pUserParam);
125 BOOL PTSGROUP::GetMembers (LPTSTR *ppmsz, ULONG *pStatus)
127 if (!RefreshStatus (TRUE, pStatus))
129 *ppmsz = CloneMultiString (m_mszMembers);
134 BOOL PTSGROUP::GetMemberOf (LPTSTR *ppmsz, ULONG *pStatus)
136 if (!RefreshStatus (TRUE, pStatus))
138 *ppmsz = CloneMultiString (m_mszMemberOf);
143 BOOL PTSGROUP::GetOwnerOf (LPTSTR *ppmsz, ULONG *pStatus)
145 if (!RefreshStatus (TRUE, pStatus))
147 *ppmsz = CloneMultiString (m_mszOwnerOf);
152 void PTSGROUP::ChangeIdentName (LPTSTR pszNewName)
155 if ((lpi = GetIdentifier()) != NULL)
157 lstrcpy (lpi->m_szAccount, pszNewName);
160 lstrcpy (m_szName, pszNewName);
163 if ((lpCell = OpenCell()) != NULL)
165 lpCell->m_lGroups->Update(this);
171 BOOL PTSGROUP::RefreshStatus (BOOL fNotify, ULONG *pStatus)
176 if (m_fStatusOutOfDate)
178 m_fStatusOutOfDate = FALSE;
181 NOTIFYCALLBACK::SendNotificationToAll (evtRefreshStatusBegin, GetIdentifier());
183 memset (&m_gs, 0x00, sizeof(m_gs));
185 FreeString (m_mszOwnerOf);
188 FreeString (m_mszMemberOf);
189 m_mszMemberOf = NULL;
191 FreeString (m_mszMembers);
195 if ((lpCell = OpenCell (&status)) == NULL)
200 if ((hCell = lpCell->GetCellObject (&status)) == NULL)
205 wpGet.wpPtsGroupGet.hCell = hCell;
206 wpGet.wpPtsGroupGet.pszGroup = m_szName;
207 if (!Worker_DoTask (wtaskPtsGroupGet, &wpGet, &status))
211 m_gs.nMembers = wpGet.wpPtsGroupGet.Entry.membershipCount;
212 m_gs.uidName = wpGet.wpPtsGroupGet.Entry.nameUid;
213 m_gs.uidOwner = wpGet.wpPtsGroupGet.Entry.ownerUid;
214 m_gs.uidCreator = wpGet.wpPtsGroupGet.Entry.creatorUid;
216 m_gs.aaListStatus = PTSGROUPACCESS_TO_ACCOUNTACCESS (wpGet.wpPtsGroupGet.Entry.listStatus);
217 m_gs.aaListGroupsOwned = PTSGROUPACCESS_TO_ACCOUNTACCESS (wpGet.wpPtsGroupGet.Entry.listGroupsOwned);
218 m_gs.aaListMembers = PTSGROUPACCESS_TO_ACCOUNTACCESS (wpGet.wpPtsGroupGet.Entry.listMembership);
219 m_gs.aaAddMember = PTSGROUPACCESS_TO_ACCOUNTACCESS (wpGet.wpPtsGroupGet.Entry.listAdd);
220 m_gs.aaDeleteMember = PTSGROUPACCESS_TO_ACCOUNTACCESS (wpGet.wpPtsGroupGet.Entry.listDelete);
221 CopyAnsiToString (m_gs.szOwner, wpGet.wpPtsGroupGet.Entry.owner);
222 CopyAnsiToString (m_gs.szCreator, wpGet.wpPtsGroupGet.Entry.creator);
225 // Grab the list of users which belong to this group
227 WORKERPACKET wpBegin;
228 wpBegin.wpPtsGroupMemberListBegin.hCell = hCell;
229 wpBegin.wpPtsGroupMemberListBegin.pszGroup = m_szName;
230 if (Worker_DoTask (wtaskPtsGroupMemberListBegin, &wpBegin, &status))
234 TCHAR szMember[ cchNAME ];
237 wpNext.wpPtsGroupMemberListNext.hEnum = wpBegin.wpPtsGroupMemberListBegin.hEnum;
238 wpNext.wpPtsGroupMemberListNext.pszMember = szMember;
239 if (!Worker_DoTask (wtaskPtsGroupMemberListNext, &wpNext))
242 FormatMultiString (&m_mszMembers, FALSE, TEXT("%1"), TEXT("%s"), szMember);
246 wpDone.wpPtsGroupMemberListDone.hEnum = wpBegin.wpPtsGroupMemberListBegin.hEnum;
247 Worker_DoTask (wtaskPtsGroupMemberListDone, &wpDone);
250 // Grab the list of groups which this group owns
252 wpBegin.wpPtsOwnedGroupListBegin.hCell = hCell;
253 wpBegin.wpPtsOwnedGroupListBegin.pszOwner = m_szName;
254 if (Worker_DoTask (wtaskPtsOwnedGroupListBegin, &wpBegin, &status))
258 TCHAR szGroup[ cchNAME ];
261 wpNext.wpPtsOwnedGroupListNext.hEnum = wpBegin.wpPtsOwnedGroupListBegin.hEnum;
262 wpNext.wpPtsOwnedGroupListNext.pszGroup = szGroup;
263 if (!Worker_DoTask (wtaskPtsOwnedGroupListNext, &wpNext))
266 FormatMultiString (&m_mszOwnerOf, FALSE, TEXT("%1"), TEXT("%s"), szGroup);
270 wpDone.wpPtsOwnedGroupListDone.hEnum = wpBegin.wpPtsOwnedGroupListBegin.hEnum;
271 Worker_DoTask (wtaskPtsOwnedGroupListDone, &wpDone);
274 // Grab the list of groups to which this group belongs
276 wpBegin.wpPtsUserMemberListBegin.hCell = hCell;
277 wpBegin.wpPtsUserMemberListBegin.pszUser = m_szName;
278 if (Worker_DoTask (wtaskPtsUserMemberListBegin, &wpBegin, &status))
282 TCHAR szGroup[ cchNAME ];
285 wpNext.wpPtsUserMemberListNext.hEnum = wpBegin.wpPtsUserMemberListBegin.hEnum;
286 wpNext.wpPtsUserMemberListNext.pszGroup = szGroup;
287 if (!Worker_DoTask (wtaskPtsUserMemberListNext, &wpNext))
290 FormatMultiString (&m_mszMemberOf, FALSE, TEXT("%1"), TEXT("%s"), szGroup);
294 wpDone.wpPtsUserMemberListDone.hEnum = wpBegin.wpPtsUserMemberListBegin.hEnum;
295 Worker_DoTask (wtaskPtsUserMemberListDone, &wpDone);
303 NOTIFYCALLBACK::SendNotificationToAll (evtRefreshStatusEnd, GetIdentifier(), ((rc) ? 0 : status));