void EnumeratePrincipalsLocally (LPBROWSEDIALOGPARAMS pbdp) { ULONG status; char szCellA[ MAX_PATH ]; CopyStringToAnsi (szCellA, pbdp->szCell); PVOID hCell; if (afsclient_CellOpen (szCellA, (PVOID)pbdp->hCreds, &hCell, (afs_status_p)&status)) { // Enumerate the principals recognized by KAS. // PVOID hEnum; if (kas_PrincipalGetBegin (hCell, NULL, &hEnum, (afs_status_p)&status)) { pbdp->fCanStopThreadEasily = TRUE; while (!pbdp->fShouldStopThread) { kas_identity_t who; if (!kas_PrincipalGetNext (hEnum, &who, (afs_status_p)&status)) break; LPTSTR pszName; if ((pszName = CloneAnsi ((LPSTR)who.principal)) == NULL) break; PostMessage (pbdp->hDlg, WM_FOUNDNAME, 0, (LPARAM)pszName); // pszName freed by DlgProc_Browse when it receives the message } kas_PrincipalGetDone (hEnum, (afs_status_p)&status); } afsclient_CellClose (hCell, (afs_status_p)&status); } }
BOOL AfsAppLib_IsUserAdmin (UINT_PTR hCreds, LPTSTR pszUser) { #ifndef USE_KASERVER return TRUE; #else BOOL rc = FALSE; afs_status_t status; UINT_PTR idClient; if ((idClient = AfsAppLib_GetAdminServerClientID()) != 0) { TCHAR szCell[ cchRESOURCE ]; TCHAR szUser[ cchRESOURCE ]; SYSTEMTIME stExpire; if (asc_CredentialsCrack (idClient, hCreds, szCell, szUser, &stExpire, (ULONG*)&status)) { ASID idCell; if (asc_CellOpen (idClient, hCreds, szCell, AFSADMSVR_SCOPE_USERS, &idCell, (ULONG*)&status)) { ASID idUser; if (asc_ObjectFind (idClient, idCell, TYPE_USER, pszUser, &idUser, (ULONG*)&status)) { ASOBJPROP Info; if (asc_ObjectPropertiesGet (idClient, GET_ALL_DATA, idCell, idUser, &Info, (ULONG*)&status)) { if (Info.u.UserProperties.fHaveKasInfo) { rc = Info.u.UserProperties.KASINFO.fIsAdmin; } } } asc_CellClose (idClient, idCell, (ULONG*)&status); } } } else if (OpenClientLibrary()) { if (OpenKasLibrary()) { char szUserA[ cchRESOURCE ], szUser2A[ cchRESOURCE ]; char szCellA[ cchRESOURCE ]; unsigned long dateExpire; int fHasKasToken; if (afsclient_TokenQuery (hCreds, &dateExpire, szUserA, szUser2A, szCellA, &fHasKasToken, (afs_status_p)&status)) { PVOID hCell; if (afsclient_CellOpen (szCellA, hCreds, &hCell, &status)) { kas_identity_t Identity; memset (&Identity, 0x00, sizeof(Identity)); CopyStringToAnsi (Identity.principal, pszUser); kas_principalEntry_t Entry; if (kas_PrincipalGet (hCell, NULL, &Identity, &Entry, &status)) { if (Entry.adminSetting == KAS_ADMIN) rc = TRUE; } afsclient_CellClose (hCell, (afs_status_p)&status); } } CloseKasLibrary(); } CloseClientLibrary(); } return rc; #endif /* USE_KASERVER */ }
int main(int argc, char *argv[]) { int rc; afs_status_t st = 0; struct rx_connection *conn; char *srvrName; long srvrPort; char *cellName; void *tokenHandle; void *cellHandle; ParseArgs(argc, argv, &cellName, &srvrName, &srvrPort); rc = afsclient_Init(&st); if (!rc) { fprintf(stderr, "afsclient_Init, status %d\n", st); exit(1); } rc = afsclient_TokenGetExisting(cellName, &tokenHandle, &st); if (!rc) { fprintf(stderr, "afsclient_TokenGetExisting, status %d\n", st); exit(1); } rc = afsclient_CellOpen(cellName, tokenHandle, &cellHandle, &st); if (!rc) { fprintf(stderr, "afsclient_CellOpen, status %d\n", st); exit(1); } rc = afsclient_RPCStatOpenPort(cellHandle, srvrName, srvrPort, &conn, &st); if (!rc) { fprintf(stderr, "afsclient_RPCStatOpenPort, status %d\n", st); exit(1); } rc = util_RPCStatsStateEnable(conn, RXSTATS_EnablePeerRPCStats, &st); if (!rc) { fprintf(stderr, "util_RPCStatsStateEnable, status %d\n", st); exit(1); } rc = afsclient_RPCStatClose(conn, &st); if (!rc) { fprintf(stderr, "afsclient_RPCStatClose, status %d\n", st); exit(1); } rc = afsclient_CellClose(cellHandle, &st); if (!rc) { fprintf(stderr, "afsclient_CellClose, status %d\n", st); exit(1); } rc = afsclient_TokenClose(tokenHandle, &st); if (!rc) { fprintf(stderr, "afsclient_TokenClose, status %d\n", st); exit(1); } exit(0); }