BOOL OpenClientLibrary (ULONG *pStatus) { BOOL rc = FALSE; ULONG status = ERROR_DLL_NOT_FOUND; if ((++g_cReqClientLibrary) == 1) { if ( ((g_hiClientLibrary = LoadLibrary (cszLIBRARY_CLIENT)) == NULL) || ((afsclient_TokenGetExistingP = (afsclient_TokenGetExisting_t)GetProcAddress (g_hiClientLibrary, "afsclient_TokenGetExisting")) == NULL) || ((afsclient_TokenGetNewP = (afsclient_TokenGetNew_t)GetProcAddress (g_hiClientLibrary, "afsclient_TokenGetNew")) == NULL) || ((afsclient_TokenCloseP = (afsclient_TokenClose_t)GetProcAddress (g_hiClientLibrary, "afsclient_TokenClose")) == NULL) || ((afsclient_TokenQueryP = (afsclient_TokenQuery_t)GetProcAddress (g_hiClientLibrary, "afsclient_TokenQuery")) == NULL) || ((afsclient_CellOpenP = (afsclient_CellOpen_t)GetProcAddress (g_hiClientLibrary, "afsclient_CellOpen")) == NULL) || ((afsclient_CellCloseP = (afsclient_CellClose_t)GetProcAddress (g_hiClientLibrary, "afsclient_CellClose")) == NULL) || ((afsclient_LocalCellGetP = (afsclient_LocalCellGet_t)GetProcAddress (g_hiClientLibrary, "afsclient_LocalCellGet")) == NULL) || ((afsclient_InitP = (afsclient_Init_t)GetProcAddress (g_hiClientLibrary, "afsclient_Init")) == NULL) ) { status = GetLastError(); CloseClientLibrary(); } else if (!(*afsclient_InitP)((afs_status_p)&status)) { CloseClientLibrary(); } } if (g_hiClientLibrary) { rc = TRUE; } if (pStatus) *pStatus = status; return rc; }
UINT_PTR AfsAppLib_GetCredentials (LPCTSTR pszCell, ULONG *pStatus) { UINT_PTR hCreds = 0; ULONG status = 0; UINT_PTR idClient; if ((idClient = AfsAppLib_GetAdminServerClientID()) != 0) { hCreds = asc_CredentialsGet (idClient, pszCell, &status); } else if (OpenClientLibrary()) { LPSTR pszCellA = StringToAnsi (pszCell); afsclient_TokenGetExisting (pszCellA, (PVOID *)&hCreds, (afs_status_p)&status); FreeString (pszCellA, pszCell); CloseClientLibrary(); } if (!hCreds && pStatus) *pStatus = status; return hCreds; }
BOOL AfsAppLib_CrackCredentials (UINT_PTR hCreds, LPTSTR pszCell, LPTSTR pszUser, LPSYSTEMTIME pst, ULONG *pStatus) { BOOL rc = FALSE; ULONG status = 0; UINT_PTR idClient; if ((idClient = AfsAppLib_GetAdminServerClientID()) != 0) { rc = asc_CredentialsCrack (idClient, (PVOID) hCreds, pszCell, pszUser, pst, &status); } else if (OpenClientLibrary()) { char szUserA[ cchRESOURCE ], szUser2A[ cchRESOURCE ]; char szCellA[ cchRESOURCE ]; unsigned long dateExpire; int fHasKasToken; if (afsclient_TokenQuery ((PVOID)hCreds, &dateExpire, szUserA, szUser2A, szCellA, &fHasKasToken, (afs_status_p)&status)) { rc = TRUE; CopyAnsiToString (pszUser, szUserA); CopyAnsiToString (pszCell, szCellA); AfsAppLib_UnixTimeToSystemTime (pst, dateExpire); } CloseClientLibrary(); } if (!hCreds && pStatus) *pStatus = status; return rc; }
UINT_PTR AfsAppLib_SetCredentials (LPCTSTR pszCell, LPCTSTR pszUser, LPCTSTR pszPassword, ULONG *pStatus) { UINT_PTR hCreds = 0; ULONG status = 0; UINT_PTR idClient; if ((idClient = AfsAppLib_GetAdminServerClientID()) != 0) { hCreds = asc_CredentialsSet (idClient, pszCell, pszUser, pszPassword, &status); } else if (OpenClientLibrary()) { char szCellA[ cchRESOURCE ]; char szUserA[ cchRESOURCE ]; char szPasswordA[ cchRESOURCE ]; CopyStringToAnsi (szCellA, pszCell); CopyStringToAnsi (szUserA, pszUser); CopyStringToAnsi (szPasswordA, pszPassword); afsclient_TokenGetNew (szCellA, szUserA, szPasswordA, (PVOID *)&hCreds, (afs_status_p)&status); CloseClientLibrary(); } if (hCreds) { PostMessage (AfsAppLib_GetMainWindow(), WM_REFRESHED_CREDENTIALS, 0, (LPARAM)hCreds); } if (!hCreds && pStatus) *pStatus = status; return hCreds; }
DWORD _stdcall DlgProc_Browse_ThreadProc (LPARAM lp) { BROWSEDIALOGPARAMS *pbdp; if ((pbdp = (BROWSEDIALOGPARAMS *)lp) != NULL) { pbdp->fThreadActive = TRUE; PostMessage (pbdp->hDlg, WM_THREADSTART, 0, 0); UINT_PTR idClient; if ((idClient = AfsAppLib_GetAdminServerClientID()) != 0) { EnumeratePrincipalsRemotely (pbdp, idClient); } else { if (OpenClientLibrary()) { if (OpenKasLibrary()) { EnumeratePrincipalsLocally (pbdp); CloseKasLibrary(); } CloseClientLibrary(); } } pbdp->fThreadActive = FALSE; PostMessage (pbdp->hDlg, WM_THREADDONE, 0, 0); } return 0; }
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 */ }