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/afsapplib.h>
16 #include "al_dynlink.h"
17 #include <WINNT/TaAfsAdmSvrClient.h>
21 * DEFINITIONS ________________________________________________________________
27 * VARIABLES __________________________________________________________________
33 * PROTOTYPES _________________________________________________________________
37 void OnExpiredCredentials (WPARAM wp, LPARAM lp);
39 BOOL CALLBACK OpenCell_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
40 void OpenCell_OnInitDialog (HWND hDlg, LPOPENCELLDLG_PARAMS lpp);
41 BOOL OpenCell_OnOK (HWND hDlg, LPOPENCELLDLG_PARAMS lpp);
42 void OpenCell_OnCell (HWND hDlg);
43 void OpenCell_Enable (HWND hDlg, BOOL fEnable);
44 void OpenCell_OnGotCreds (HWND hDlg, LPARAM lp);
46 BOOL CALLBACK NewCreds_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
47 void NewCreds_OnInitDialog (HWND hDlg, LPCREDENTIALSDLG_PARAMS lpp);
48 BOOL NewCreds_OnOK (HWND hDlg, LPCREDENTIALSDLG_PARAMS lpp);
49 void NewCreds_OnLogin (HWND hDlg);
50 void NewCreds_Enable (HWND hDlg, BOOL fEnable);
51 void NewCreds_GetOutParams (HWND hDlg, LPCREDENTIALSDLG_PARAMS lpp);
53 BOOL CALLBACK BadCreds_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
57 * ROUTINES ___________________________________________________________________
61 BOOL AfsAppLib_CrackCredentials (PVOID hCreds, LPTSTR pszCell, LPTSTR pszUser, LPSYSTEMTIME pst, ULONG *pStatus)
67 if ((idClient = AfsAppLib_GetAdminServerClientID()) != 0)
69 rc = asc_CredentialsCrack (idClient, hCreds, pszCell, pszUser, pst, &status);
72 if (OpenClientLibrary())
74 char szUserA[ cchRESOURCE ], szUser2A[ cchRESOURCE ];
75 char szCellA[ cchRESOURCE ];
76 unsigned long dateExpire;
79 if (afsclient_TokenQuery (hCreds, &dateExpire, szUserA, szUser2A, szCellA, &fHasKasToken, (afs_status_p)&status))
82 CopyAnsiToString (pszUser, szUserA);
83 CopyAnsiToString (pszCell, szCellA);
84 AfsAppLib_UnixTimeToSystemTime (pst, dateExpire);
90 if (!hCreds && pStatus)
96 PVOID AfsAppLib_GetCredentials (LPCTSTR pszCell, ULONG *pStatus)
102 if ((idClient = AfsAppLib_GetAdminServerClientID()) != 0)
104 hCreds = asc_CredentialsGet (idClient, pszCell, &status);
107 if (OpenClientLibrary())
109 LPSTR pszCellA = StringToAnsi (pszCell);
111 afsclient_TokenGetExisting (pszCellA, &hCreds, (afs_status_p)&status);
113 FreeString (pszCellA, pszCell);
114 CloseClientLibrary();
117 if (!hCreds && pStatus)
123 PVOID AfsAppLib_SetCredentials (LPCTSTR pszCell, LPCTSTR pszUser, LPCTSTR pszPassword, ULONG *pStatus)
129 if ((idClient = AfsAppLib_GetAdminServerClientID()) != 0)
131 hCreds = asc_CredentialsSet (idClient, pszCell, pszUser, pszPassword, &status);
134 if (OpenClientLibrary())
136 char szCellA[ cchRESOURCE ];
137 char szUserA[ cchRESOURCE ];
138 char szPasswordA[ cchRESOURCE ];
139 CopyStringToAnsi (szCellA, pszCell);
140 CopyStringToAnsi (szUserA, pszUser);
141 CopyStringToAnsi (szPasswordA, pszPassword);
143 afsclient_TokenGetNew (szCellA, szUserA, szPasswordA, &hCreds, (afs_status_p)&status);
145 CloseClientLibrary();
150 PostMessage (AfsAppLib_GetMainWindow(), WM_REFRESHED_CREDENTIALS, 0, (LPARAM)hCreds);
153 if (!hCreds && pStatus)
160 * OPEN CELL DIALOG ___________________________________________________________
164 BOOL AfsAppLib_ShowOpenCellDialog (LPOPENCELLDLG_PARAMS lpp)
166 HINSTANCE hInst = APP_HINST;
169 hInst = APPLIB_HINST;
170 lpp->idd = IDD_APPLIB_OPENCELL;
172 if (lpp->hCreds == 0)
175 lpp->hCreds = AfsAppLib_GetCredentials (lpp->szCell);
177 lpp->hCreds = AfsAppLib_GetCredentials (NULL);
180 int rc = ModalDialogParam (lpp->idd, lpp->hParent, (DLGPROC)OpenCell_DlgProc, (LPARAM)lpp);
182 return (rc == IDOK) ? TRUE : FALSE;
186 BOOL CALLBACK OpenCell_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
188 LPOPENCELLDLG_PARAMS lpp;
189 if (msg == WM_INITDIALOG)
190 SetWindowLong (hDlg, DWL_USER, lp);
192 if ((lpp = (LPOPENCELLDLG_PARAMS)GetWindowLong (hDlg, DWL_USER)) != NULL)
196 if (CallWindowProc ((WNDPROC)lpp->hookproc, hDlg, msg, wp, lp))
203 if (AfsAppLib_HandleHelp (lpp->idd, hDlg, msg, wp, lp))
210 OpenCell_OnInitDialog (hDlg, lpp);
217 EndDialog (hDlg, IDCANCEL);
221 if (OpenCell_OnOK (hDlg, lpp))
222 EndDialog (hDlg, IDOK);
225 case IDC_OPENCELL_CELL:
229 TCHAR szCell[ cchNAME ];
230 SendDlgItemMessage (hDlg, IDC_OPENCELL_CELL, CB_GETLBTEXT, CB_GetSelected(GetDlgItem (hDlg, IDC_OPENCELL_CELL)), (LPARAM)szCell);
231 SetDlgItemText (hDlg, IDC_OPENCELL_CELL, szCell);
232 OpenCell_OnCell (hDlg);
236 OpenCell_OnCell (hDlg);
243 case WM_REFRESHED_CREDENTIALS:
244 OpenCell_OnGotCreds (hDlg, lp);
252 void OpenCell_OnInitDialog (HWND hDlg, LPOPENCELLDLG_PARAMS lpp)
254 // Fix the title of the dialog (unless the caller has supplied a
255 // custom dialog template)
257 if (lpp && (lpp->idd == IDD_APPLIB_OPENCELL))
259 TCHAR szApplication[ cchNAME ];
260 AfsAppLib_GetAppName (szApplication);
261 if (szApplication[0] != TEXT('\0'))
263 TCHAR szTitle[ cchRESOURCE ];
264 GetWindowText (hDlg, szTitle, cchRESOURCE);
265 lstrcat (szTitle, TEXT(" - "));
266 lstrcat (szTitle, szApplication);
267 SetWindowText (hDlg, szTitle);
271 // Fill in the 'Cell:' combobox; we'll list the default cell, and any
272 // cell which the user has specified before.
274 CB_StartChange (GetDlgItem (hDlg, IDC_OPENCELL_CELL), TRUE);
278 TCHAR szDefCell[ cchNAME ];
279 if (AfsAppLib_GetLocalCell (szDefCell) && *szDefCell)
281 CB_AddItem (GetDlgItem (hDlg, IDC_OPENCELL_CELL), szDefCell, 1);
284 else for (size_t ii = 0; ii < lpp->lpcl->nCells; ++ii)
286 CB_AddItem (GetDlgItem (hDlg, IDC_OPENCELL_CELL), lpp->lpcl->aCells[ii], 1+ii);
289 CB_EndChange (GetDlgItem (hDlg, IDC_OPENCELL_CELL), 1);
291 // Set up the "Credentials" box; if the user needs credentials to edit
292 // this default cell, jump the cursor to the appropriate field
294 SetDlgItemText (hDlg, IDC_OPENCELL_ID, TEXT("admin"));
296 OpenCell_OnCell (hDlg);
300 BOOL OpenCell_OnOK (HWND hDlg, LPOPENCELLDLG_PARAMS lpp)
303 OpenCell_Enable (hDlg, FALSE);
306 // Remember what cell the user chose to edit
308 GetDlgItemText (hDlg, IDC_OPENCELL_CELL, lpp->szCell, cchNAME);
310 // Try to obtain the credentials specified by the user.
312 TCHAR szCell[ cchNAME ];
313 GetDlgItemText (hDlg, IDC_OPENCELL_CELL, szCell, cchNAME);
315 TCHAR szUser[ cchRESOURCE ];
316 GetDlgItemText (hDlg, IDC_OPENCELL_ID, szUser, cchNAME);
318 TCHAR szPassword[ cchRESOURCE ];
319 GetDlgItemText (hDlg, IDC_OPENCELL_PASSWORD, szPassword, cchNAME);
322 if ((lpp->hCreds = AfsAppLib_SetCredentials (lpp->szCell, szUser, szPassword, &status)) == NULL)
324 ErrorDialog (status, IDS_ERROR_BAD_CREDENTIALS);
328 // See if those credentials are sufficient
330 CHECKCREDS_PARAMS pp;
331 memset (&pp, 0x00, sizeof(pp));
332 memcpy (&pp.bcdp, &lpp->bcdp, sizeof(BADCREDSDLG_PARAMS));
333 pp.bcdp.hParent = hDlg;
334 pp.hCreds = lpp->hCreds;
335 pp.fShowWarning = TRUE;
337 if ((rc = AfsAppLib_CheckCredentials (&pp)) == FALSE)
339 SetDlgItemText (hDlg, IDC_OPENCELL_ID, TEXT("admin"));
340 PostMessage (hDlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hDlg,IDC_OPENCELL_PASSWORD), TRUE);
345 OpenCell_Enable (hDlg, TRUE);
354 TCHAR szCell[ cchNAME ];
355 TCHAR szUser[ cchNAME ];
359 } OPENCELL_ONCELL_PARAMS, *LPOPENCELL_ONCELL_PARAMS;
361 DWORD WINAPI OpenCell_OnCell_ThreadProc (PVOID lp)
363 LPOPENCELL_ONCELL_PARAMS lpp;
364 if ((lpp = (LPOPENCELL_ONCELL_PARAMS)lp) != NULL)
366 PVOID hCreds = AfsAppLib_GetCredentials (lpp->szCell);
367 lpp->fGotCreds = AfsAppLib_CrackCredentials (hCreds, lpp->szCell, lpp->szUser, &lpp->stExpire);
368 lpp->fValidCreds = FALSE;
370 if (lpp->fGotCreds && AfsAppLib_IsTimeInFuture (&lpp->stExpire))
372 CHECKCREDS_PARAMS pp;
373 memset (&pp, 0x00, sizeof(pp));
375 lpp->fValidCreds = AfsAppLib_CheckCredentials(&pp);
378 // Post our results; we'll return the same packet we got.
380 if (IsWindow (lpp->hDlg))
381 PostMessage (lpp->hDlg, WM_REFRESHED_CREDENTIALS, 0, (LPARAM)lpp);
390 void OpenCell_OnCell (HWND hDlg)
392 // Fire up a background thread to query our current credentials in the
395 LPOPENCELL_ONCELL_PARAMS lpp = New (OPENCELL_ONCELL_PARAMS);
396 memset (lpp, 0x00, sizeof(lpp));
397 GetDlgItemText (hDlg, IDC_OPENCELL_CELL, lpp->szCell, cchNAME);
401 CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE)OpenCell_OnCell_ThreadProc, lpp, 0, &dwThreadID);
405 void OpenCell_OnGotCreds (HWND hDlg, LPARAM lp)
407 LPOPENCELL_ONCELL_PARAMS lpp;
408 if ((lpp = (LPOPENCELL_ONCELL_PARAMS)lp) != NULL)
410 // Don't do anything to the dialog if the user has chosen a different
411 // cell than that for which we just queried credentials.
413 TCHAR szCell[ cchNAME ];
414 GetDlgItemText (hDlg, IDC_OPENCELL_CELL, szCell, cchNAME);
416 if (!lstrcmpi (szCell, lpp->szCell))
418 TCHAR szPrevCreds[ cchRESOURCE ];
419 GetDlgItemText (hDlg, IDC_OPENCELL_OLDCREDS, szPrevCreds, cchRESOURCE);
423 LPTSTR psz = FormatString (IDS_CREDS_NONE, TEXT("%s"), lpp->szCell);
424 SetDlgItemText (hDlg, IDC_OPENCELL_OLDCREDS, psz);
427 else if (!AfsAppLib_IsTimeInFuture (&lpp->stExpire))
429 LPTSTR pszCreds = FormatString (IDS_CREDS_EXPIRED, TEXT("%s%s%t"), lpp->szCell, lpp->szUser, &lpp->stExpire);
430 SetDlgItemText (hDlg, IDC_OPENCELL_OLDCREDS, pszCreds);
431 FreeString (pszCreds);
435 LPTSTR pszCreds = FormatString (IDS_CREDS_VALID, TEXT("%s%s%t"), lpp->szCell, lpp->szUser, &lpp->stExpire);
436 SetDlgItemText (hDlg, IDC_OPENCELL_OLDCREDS, pszCreds);
437 FreeString (pszCreds);
440 SetDlgItemText (hDlg, IDC_OPENCELL_ID, (lpp->fGotCreds) ? lpp->szUser : TEXT("admin"));
442 if (!lpp->fValidCreds && !szPrevCreds[0])
443 PostMessage (hDlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hDlg,IDC_OPENCELL_PASSWORD), TRUE);
451 void OpenCell_Enable (HWND hDlg, BOOL fEnable)
453 EnableWindow (GetDlgItem (hDlg, IDOK), fEnable);
454 EnableWindow (GetDlgItem (hDlg, IDCANCEL), fEnable);
455 EnableWindow (GetDlgItem (hDlg, IDHELP), fEnable);
456 EnableWindow (GetDlgItem (hDlg, IDC_OPENCELL_CELL), fEnable);
457 EnableWindow (GetDlgItem (hDlg, IDC_OPENCELL_ID), fEnable);
458 EnableWindow (GetDlgItem (hDlg, IDC_OPENCELL_PASSWORD), fEnable);
463 * NEW CREDENTIALS DIALOG _____________________________________________________
467 BOOL AfsAppLib_ShowCredentialsDialog (LPCREDENTIALSDLG_PARAMS lpp)
469 HINSTANCE hInst = APP_HINST;
472 hInst = APPLIB_HINST;
473 lpp->idd = IDD_APPLIB_CREDENTIALS;
475 if (lpp->hCreds == 0)
478 lpp->hCreds = AfsAppLib_GetCredentials (lpp->szCell);
480 lpp->hCreds = AfsAppLib_GetCredentials (NULL);
483 int rc = ModalDialogParam (lpp->idd, lpp->hParent, (DLGPROC)NewCreds_DlgProc, (LPARAM)lpp);
485 return (rc == IDOK) ? TRUE : FALSE;
489 BOOL CALLBACK NewCreds_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
491 LPCREDENTIALSDLG_PARAMS lpp;
492 if (msg == WM_INITDIALOG)
493 SetWindowLong (hDlg, DWL_USER, lp);
495 if ((lpp = (LPCREDENTIALSDLG_PARAMS)GetWindowLong (hDlg, DWL_USER)) != NULL)
499 if (CallWindowProc ((WNDPROC)lpp->hookproc, hDlg, msg, wp, lp))
506 if (AfsAppLib_HandleHelp (lpp->idd, hDlg, msg, wp, lp))
513 NewCreds_OnInitDialog (hDlg, lpp);
520 EndDialog (hDlg, IDCANCEL);
524 if (NewCreds_OnOK (hDlg, lpp))
525 EndDialog (hDlg, IDOK);
528 case IDC_CREDS_LOGIN:
529 NewCreds_OnLogin (hDlg);
539 void NewCreds_OnInitDialog (HWND hDlg, LPCREDENTIALSDLG_PARAMS lpp)
541 // Fix the title of the dialog (unless the caller has supplied a
542 // custom dialog template)
544 if (lpp && (lpp->idd == IDD_APPLIB_CREDENTIALS))
546 TCHAR szApplication[ cchNAME ];
547 AfsAppLib_GetAppName (szApplication);
548 if (szApplication[0] != TEXT('\0'))
550 TCHAR szTitle[ cchRESOURCE ];
551 GetWindowText (hDlg, szTitle, cchRESOURCE);
552 lstrcat (szTitle, TEXT(" - "));
553 lstrcat (szTitle, szApplication);
554 SetWindowText (hDlg, szTitle);
558 // Set up the "Credentials" boxes
560 TCHAR szUser[ cchRESOURCE ];
563 BOOL fValidCreds = TRUE;
564 BOOL fShowCreds = TRUE;
565 CHECKCREDS_PARAMS pp;
566 memset (&pp, 0x00, sizeof(pp));
567 pp.hCreds = lpp->hCreds;
568 pp.fShowWarning = FALSE;
569 memcpy (&pp.bcdp, &lpp->bcdp, sizeof(BADCREDSDLG_PARAMS));
570 pp.bcdp.hParent = hDlg;
572 if (!AfsAppLib_CrackCredentials (lpp->hCreds, lpp->szCell, szUser, &st))
577 if (!AfsAppLib_IsTimeInFuture (&st))
582 if (!AfsAppLib_CheckCredentials (&pp))
587 CheckDlgButton (hDlg, IDC_CREDS_LOGIN, !fValidCreds);
589 PostMessage (hDlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hDlg,IDC_CREDS_PASSWORD), TRUE);
591 SetDlgItemText (hDlg, IDC_CREDS_CELL, lpp->szCell);
595 SetDlgItemText (hDlg, IDC_CREDS_CURRENTID, szUser);
597 LPTSTR pszDate = FormatString (TEXT("%1"), TEXT("%t"), &st);
598 SetDlgItemText (hDlg, IDC_CREDS_EXPDATE, pszDate);
599 FreeString (pszDate);
602 SetDlgItemText (hDlg, IDC_CREDS_ID, TEXT("admin"));
604 NewCreds_OnLogin (hDlg);
608 BOOL NewCreds_OnOK (HWND hDlg, LPCREDENTIALSDLG_PARAMS lpp)
610 NewCreds_GetOutParams (hDlg, lpp);
611 if (!IsDlgButtonChecked (hDlg, IDC_CREDS_LOGIN))
616 NewCreds_Enable (hDlg, FALSE);
618 // Try to obtain the credentials specified by the user.
620 TCHAR szUser[ cchRESOURCE ];
621 GetDlgItemText (hDlg, IDC_CREDS_ID, szUser, cchNAME);
623 TCHAR szPassword[ cchRESOURCE ];
624 GetDlgItemText (hDlg, IDC_CREDS_PASSWORD, szPassword, cchNAME);
627 if ((lpp->hCreds = AfsAppLib_SetCredentials (lpp->szCell, szUser, szPassword, &status)) == NULL)
629 ErrorDialog (status, IDS_ERROR_BAD_CREDENTIALS);
633 // See if those credentials are sufficient
635 CHECKCREDS_PARAMS pp;
636 memset (&pp, 0x00, sizeof(pp));
637 memcpy (&pp.bcdp, &lpp->bcdp, sizeof(BADCREDSDLG_PARAMS));
638 pp.bcdp.hParent = hDlg;
639 pp.hCreds = lpp->hCreds;
640 pp.fShowWarning = TRUE;
642 if ((rc = AfsAppLib_CheckCredentials (&pp)) == FALSE)
644 SetDlgItemText (hDlg, IDC_CREDS_ID, TEXT("admin"));
645 PostMessage (hDlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hDlg,IDC_CREDS_PASSWORD), TRUE);
650 NewCreds_Enable (hDlg, TRUE);
656 void NewCreds_OnLogin (HWND hDlg)
658 BOOL fEnable = IsDlgButtonChecked (hDlg, IDC_CREDS_LOGIN);
660 EnableWindow (GetDlgItem (hDlg, IDC_CREDS_ID), fEnable);
661 EnableWindow (GetDlgItem (hDlg, IDC_CREDS_PASSWORD), fEnable);
665 void NewCreds_Enable (HWND hDlg, BOOL fEnable)
667 EnableWindow (GetDlgItem (hDlg, IDOK), fEnable);
668 EnableWindow (GetDlgItem (hDlg, IDCANCEL), fEnable);
669 EnableWindow (GetDlgItem (hDlg, IDHELP), fEnable);
670 EnableWindow (GetDlgItem (hDlg, IDC_CREDS_LOGIN), fEnable);
673 NewCreds_OnLogin (hDlg);
676 EnableWindow (GetDlgItem (hDlg, IDC_CREDS_ID), fEnable);
677 EnableWindow (GetDlgItem (hDlg, IDC_CREDS_PASSWORD), fEnable);
682 void NewCreds_GetOutParams (HWND hDlg, LPCREDENTIALSDLG_PARAMS lpp)
684 if (!IsDlgButtonChecked (hDlg, IDC_CREDS_LOGIN))
686 lpp->szIdentity[0] = TEXT('\0');
687 lpp->szPassword[0] = TEXT('\0');
691 GetDlgItemText (hDlg, IDC_CREDS_ID, lpp->szIdentity, cchNAME);
692 GetDlgItemText (hDlg, IDC_CREDS_PASSWORD, lpp->szPassword, cchNAME);
698 * TEST CREDENTIALS ___________________________________________________________
704 BADCREDSDLG_PARAMS bcdp;
707 } REALBADCREDSDLG_PARAMS, *LPREALBADCREDSDLG_PARAMS;
709 BOOL AfsAppLib_CheckCredentials (LPCHECKCREDS_PARAMS lpp)
711 BOOL fCredsOK = TRUE;
712 int idsWarning = IDS_BADCREDS_DESC_GENERAL;
714 TCHAR szCell[ cchNAME ];
715 TCHAR szUser[ cchNAME ];
718 if (!AfsAppLib_CrackCredentials (lpp->hCreds, szCell, szUser, &stExpire))
722 else if (!AfsAppLib_IsUserAdmin (lpp->hCreds, szUser))
725 idsWarning = IDS_BADCREDS_DESC_BADCHOICE;
727 else if (!AfsAppLib_IsTimeInFuture (&stExpire))
730 idsWarning = IDS_BADCREDS_DESC_EXPIRED;
733 if (!fCredsOK && lpp->fShowWarning)
735 if (lpp->bcdp.pfShowWarningEver && !(*lpp->bcdp.pfShowWarningEver))
737 fCredsOK = TRUE; // user says always ignore bad credentials.
742 AfsAppLib_GetLocalCell (szCell);
744 int idsDesc = (lpp->bcdp.idsDesc) ? lpp->bcdp.idsDesc : IDS_BADCREDS_DESC2;
745 LPTSTR pszDesc = FormatString (idsDesc, TEXT("%s"), szCell);
746 LPTSTR pszFullText = FormatString (idsWarning, TEXT("%s%s%m"), szCell, pszDesc, IDS_BADCREDS_DESC3);
747 FreeString (pszDesc);
749 REALBADCREDSDLG_PARAMS pp;
750 memset (&pp, 0x00, sizeof(pp));
751 pp.pszFullText = pszFullText;
752 memcpy (&pp.bcdp, &lpp->bcdp, sizeof(BADCREDSDLG_PARAMS));
754 HINSTANCE hInst = APP_HINST;
755 if (pp.bcdp.idd == 0)
757 hInst = APPLIB_HINST;
758 pp.bcdp.idd = IDD_APPLIB_BADCREDS;
761 int rc = ModalDialogParam (pp.bcdp.idd, pp.bcdp.hParent, (DLGPROC)BadCreds_DlgProc, (LPARAM)&pp);
764 fCredsOK = TRUE; // user says ignore bad credentials this time.
767 FreeString (pszFullText);
775 BOOL CALLBACK BadCreds_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
777 LPREALBADCREDSDLG_PARAMS lpp;
778 if (msg == WM_INITDIALOG)
779 SetWindowLong (hDlg, DWL_USER, lp);
780 if ((lpp = (LPREALBADCREDSDLG_PARAMS)GetWindowLong (hDlg, DWL_USER)) != NULL)
782 if (lpp->bcdp.hookproc)
784 if (CallWindowProc ((WNDPROC)lpp->bcdp.hookproc, hDlg, msg, wp, lp))
787 if (AfsAppLib_HandleHelp (lpp->bcdp.idd, hDlg, msg, wp, lp))
794 TCHAR szApplication[ cchNAME ];
795 AfsAppLib_GetAppName (szApplication);
796 if (szApplication[0] != TEXT('\0'))
798 TCHAR szTitle[ cchRESOURCE ];
799 GetWindowText (hDlg, szTitle, cchRESOURCE);
800 lstrcat (szTitle, TEXT(" - "));
801 lstrcat (szTitle, szApplication);
802 SetWindowText (hDlg, szTitle);
804 if (!lpp || !lpp->bcdp.pfShowWarningEver)
805 DestroyWindow (GetWindow (hDlg, IDC_BADCREDS_SHUTUP));
807 SetDlgItemText (hDlg, IDC_BADCREDS_DESC, lpp->pszFullText);
815 if (lpp && lpp->bcdp.pfShowWarningEver)
816 *lpp->bcdp.pfShowWarningEver = !IsDlgButtonChecked (hDlg, IDC_BADCREDS_SHUTUP);
817 EndDialog (hDlg, LOWORD(wp));
828 * EXPIRED CREDENTIALS ________________________________________________________
832 void AfsAppLib_CheckForExpiredCredentials (LPCREDENTIALSDLG_PARAMS lpp)
834 static PVOID hCredsPrevious = NULL;
835 static BOOL fHadGoodCredentials;
837 TCHAR szCell[ cchNAME ];
838 TCHAR szUser[ cchNAME ];
841 BOOL fHaveCredentials;
842 fHaveCredentials = AfsAppLib_CrackCredentials (lpp->hCreds, szCell, szUser, &stExpire);
844 if (hCredsPrevious && (hCredsPrevious != lpp->hCreds))
846 if (!fHaveCredentials)
847 fHadGoodCredentials = FALSE;
848 else if (!AfsAppLib_IsTimeInFuture (&stExpire))
849 fHadGoodCredentials = FALSE;
851 fHadGoodCredentials = TRUE;
852 hCredsPrevious = lpp->hCreds;
854 else if (fHaveCredentials && AfsAppLib_IsTimeInFuture (&stExpire))
856 fHadGoodCredentials = TRUE;
858 else if (fHadGoodCredentials) // used to have good credentials, but now don't
860 fHadGoodCredentials = FALSE;
862 LPCREDENTIALSDLG_PARAMS lppCopy = New (CREDENTIALSDLG_PARAMS);
863 memcpy (lppCopy, lpp, sizeof(CREDENTIALSDLG_PARAMS));
865 if (!AfsAppLib_GetMainWindow())
866 OnExpiredCredentials ((WPARAM)(!AfsAppLib_IsTimeInFuture(&stExpire)), (LPARAM)lppCopy);
868 PostMessage (AfsAppLib_GetMainWindow(), WM_EXPIRED_CREDENTIALS, (WPARAM)(!AfsAppLib_IsTimeInFuture(&stExpire)), (LPARAM)lppCopy);
873 void OnExpiredCredentials (WPARAM wp, LPARAM lp)
875 BOOL fExpired = (BOOL)wp;
876 LPCREDENTIALSDLG_PARAMS lpp = (LPCREDENTIALSDLG_PARAMS)lp;
878 if (lpp && lpp->bcdp.pfShowWarningEver && *(lpp->bcdp.pfShowWarningEver))
880 int idsWarning = (wp) ? IDS_BADCREDS_DESC_EXPIRED : IDS_BADCREDS_DESC_DESTROYED;
882 int idsDesc = (lpp->bcdp.idsDesc) ? lpp->bcdp.idsDesc : IDS_BADCREDS_DESC2;
883 LPTSTR pszDesc = FormatString (idsDesc, TEXT("%s"), lpp->szCell);
884 LPTSTR pszFullText = FormatString (idsWarning, TEXT("%s%s%m"), lpp->szCell, pszDesc, IDS_BADCREDS_DESC3);
885 FreeString (pszDesc);
887 REALBADCREDSDLG_PARAMS pp;
888 memset (&pp, 0x00, sizeof(pp));
889 pp.pszFullText = pszFullText;
890 memcpy (&pp.bcdp, &lpp->bcdp, sizeof(BADCREDSDLG_PARAMS));
892 if (ModalDialogParam (IDD_APPLIB_BADCREDS, NULL, (DLGPROC)BadCreds_DlgProc, (LPARAM)&pp) != IDCANCEL)
894 AfsAppLib_ShowCredentialsDialog (lpp);
897 FreeString (pszFullText);
907 BOOL AfsAppLib_IsUserAdmin (PVOID hCreds, LPTSTR pszUser)
916 if ((idClient = AfsAppLib_GetAdminServerClientID()) != 0)
918 TCHAR szCell[ cchRESOURCE ];
919 TCHAR szUser[ cchRESOURCE ];
921 if (asc_CredentialsCrack (idClient, hCreds, szCell, szUser, &stExpire, (ULONG*)&status))
924 if (asc_CellOpen (idClient, hCreds, szCell, AFSADMSVR_SCOPE_USERS, &idCell, (ULONG*)&status))
927 if (asc_ObjectFind (idClient, idCell, TYPE_USER, pszUser, &idUser, (ULONG*)&status))
930 if (asc_ObjectPropertiesGet (idClient, GET_ALL_DATA, idCell, idUser, &Info, (ULONG*)&status))
932 if (Info.u.UserProperties.fHaveKasInfo)
934 rc = Info.u.UserProperties.KASINFO.fIsAdmin;
938 asc_CellClose (idClient, idCell, (ULONG*)&status);
942 else if (OpenClientLibrary())
944 if (OpenKasLibrary())
946 char szUserA[ cchRESOURCE ], szUser2A[ cchRESOURCE ];
947 char szCellA[ cchRESOURCE ];
948 unsigned long dateExpire;
951 if (afsclient_TokenQuery (hCreds, &dateExpire, szUserA, szUser2A, szCellA, &fHasKasToken, (afs_status_p)&status))
954 if (afsclient_CellOpen (szCellA, hCreds, &hCell, &status))
956 kas_identity_t Identity;
957 memset (&Identity, 0x00, sizeof(Identity));
958 CopyStringToAnsi (Identity.principal, pszUser);
960 kas_principalEntry_t Entry;
961 if (kas_PrincipalGet (hCell, NULL, &Identity, &Entry, &status))
963 if (Entry.adminSetting == KAS_ADMIN)
967 afsclient_CellClose (hCell, (afs_status_p)&status);
974 CloseClientLibrary();
978 #endif /* USE_KASERVER */