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>
23 * OPENCELL DIALOG ____________________________________________________________
27 void OpenCell_OnSubset (HWND hDlg)
32 if (!IsWindowEnabled (GetDlgItem (hDlg, IDC_MON_ONE)))
34 if (!IsDlgButtonChecked (hDlg, IDC_MON_ONE))
36 EnableWindow (GetDlgItem (hDlg, IDC_MON_SERVER), fEnable);
39 if (!IsWindowEnabled (GetDlgItem (hDlg, IDC_MON_SOME)))
41 if (!IsDlgButtonChecked (hDlg, IDC_MON_SOME))
43 EnableWindow (GetDlgItem (hDlg, IDC_MON_SUBSET), fEnable);
47 void OpenCell_Hook_Enable (HWND hDlg, BOOL fEnable)
49 EnableWindow (GetDlgItem (hDlg, IDOK), fEnable);
50 EnableWindow (GetDlgItem (hDlg, IDHELP), fEnable);
51 EnableWindow (GetDlgItem (hDlg, IDCANCEL), fEnable);
52 EnableWindow (GetDlgItem (hDlg, IDC_ADVANCED), fEnable);
53 EnableWindow (GetDlgItem (hDlg, IDC_OPENCELL_CELL), fEnable);
54 EnableWindow (GetDlgItem (hDlg, IDC_MON_ALL), fEnable);
55 EnableWindow (GetDlgItem (hDlg, IDC_MON_ONE), fEnable);
56 EnableWindow (GetDlgItem (hDlg, IDC_OPENCELL_ID), fEnable);
57 EnableWindow (GetDlgItem (hDlg, IDC_OPENCELL_PASSWORD), fEnable);
61 BOOL fAnySubsets = !!SendDlgItemMessage (hDlg, IDC_MON_SUBSET, CB_GETCOUNT, 0, 0);
62 EnableWindow (GetDlgItem (hDlg, IDC_MON_SOME), fAnySubsets);
66 EnableWindow (GetDlgItem (hDlg, IDC_MON_SOME), FALSE);
69 OpenCell_OnSubset (hDlg);
73 void OpenCellDlg_Hook_OnOK (HWND hDlg, LPOPENCELLDLG_PARAMS lpp)
76 OpenCell_Hook_Enable (hDlg, FALSE);
79 // Remember what cell the user chose to edit
81 GetDlgItemText (hDlg, IDC_OPENCELL_CELL, lpp->szCell, cchNAME);
83 // Try to obtain the credentials specified by the user.
85 TCHAR szCell[ cchNAME ];
86 GetDlgItemText (hDlg, IDC_OPENCELL_CELL, szCell, cchNAME);
88 TCHAR szUser[ cchRESOURCE ];
89 GetDlgItemText (hDlg, IDC_OPENCELL_ID, szUser, cchNAME);
91 TCHAR szPassword[ cchRESOURCE ];
92 GetDlgItemText (hDlg, IDC_OPENCELL_PASSWORD, szPassword, cchNAME);
95 if ((lpp->hCreds = AfsAppLib_SetCredentials (lpp->szCell, szUser, szPassword, &status)) == NULL)
97 ErrorDialog (status, IDS_ERROR_BAD_CREDENTIALS);
101 // See if those credentials are sufficient
103 CHECKCREDS_PARAMS pp;
104 memset (&pp, 0x00, sizeof(pp));
105 memcpy (&pp.bcdp, &lpp->bcdp, sizeof(BADCREDSDLG_PARAMS));
106 pp.bcdp.hParent = hDlg;
107 pp.hCreds = lpp->hCreds;
108 pp.fShowWarning = TRUE;
110 if ((rc = AfsAppLib_CheckCredentials (&pp)) == FALSE)
112 SetDlgItemText (hDlg, IDC_OPENCELL_ID, TEXT("admin"));
113 PostMessage (hDlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hDlg,IDC_OPENCELL_PASSWORD), TRUE);
119 g.hCreds = lpp->hCreds;
121 // Instead of closing the dialog, start an taskOPENCELL task;
122 // we'll wait for that to complete successfully before we'll
125 LPOPENCELL_PACKET lpocp = New (OPENCELL_PACKET);
126 memset (lpocp, 0x00, sizeof(OPENCELL_PACKET));
127 lstrcpy (lpocp->szCell, lpp->szCell);
128 lpocp->fCloseAppOnFail = FALSE;
129 lpocp->hCreds = lpp->hCreds;
131 if (IsDlgButtonChecked (hDlg, IDC_MON_ALL))
135 else if (IsDlgButtonChecked (hDlg, IDC_MON_ONE))
137 TCHAR szServer[ cchNAME ];
138 GetDlgItemText (hDlg, IDC_MON_SERVER, szServer, cchNAME);
139 lpocp->sub = New (SUBSET);
140 memset (lpocp->sub, 0x0, sizeof(SUBSET));
142 FormatMultiString (&lpocp->sub->pszMonitored, TRUE, TEXT("%1"), TEXT("%s"), szServer);
145 lpocp->sub->pszMonitored = AllocateString (2);
146 lpocp->sub->pszMonitored[0] = TEXT('\0');
147 lpocp->sub->pszMonitored[1] = TEXT('\0');
150 else // (IsDlgButtonChecked (hDlg, IDC_MON_SOME))
152 TCHAR szSubset[ cchNAME ];
153 GetDlgItemText (hDlg, IDC_MON_SUBSET, szSubset, cchNAME);
154 lpocp->sub = Subsets_LoadSubset (szCell, szSubset);
157 StartTask (taskOPENCELL, hDlg, lpocp);
161 OpenCell_Hook_Enable (hDlg, TRUE);
166 void OpenCell_OnCellChange (HWND hDlg, BOOL fMoveCaret)
168 HWND hCombo = GetDlgItem (hDlg, IDC_MON_SUBSET);
169 CB_StartChange (hCombo, TRUE);
171 BOOL fAddedAny = FALSE;
173 TCHAR szCell[ cchNAME ];
174 GetDlgItemText (hDlg, IDC_OPENCELL_CELL, szCell, cchNAME);
176 if (szCell[0] != TEXT('\0'))
178 BOOL fSelectedCurrentCell = FALSE;
181 TCHAR szCurrentCell[ cchNAME ];
182 g.lpiCell->GetCellName (szCurrentCell);
184 if (!lstrcmpi (szCell, szCurrentCell))
185 fSelectedCurrentCell = TRUE;
187 if (g.sub && g.sub->pszMonitored)
188 SetDlgItemText (hDlg, IDC_MON_SERVER, g.sub->pszMonitored);
190 SetDlgItemText (hDlg, IDC_MON_SERVER, TEXT(""));
193 TCHAR szSubset[ cchNAME ];
194 for (size_t iIndex = 0; Subsets_EnumSubsets (szCell, iIndex, szSubset); ++iIndex)
196 CB_AddItem (hCombo, szSubset, (LPARAM)iIndex+1);
199 if (fSelectedCurrentCell && !lstrcmpi (szSubset, g.sub->szSubset))
204 CB_EndChange (hCombo, (LPARAM)(iSel == 0) ? 1 : iSel);
206 if (fAddedAny && iSel)
208 CheckDlgButton (hDlg, IDC_MON_ALL, FALSE);
209 CheckDlgButton (hDlg, IDC_MON_ONE, FALSE);
210 CheckDlgButton (hDlg, IDC_MON_SOME, TRUE);
212 else if (!fAddedAny && IsDlgButtonChecked (hDlg, IDC_MON_SOME))
214 CheckDlgButton (hDlg, IDC_MON_ALL, FALSE);
215 CheckDlgButton (hDlg, IDC_MON_SOME, FALSE);
216 CheckDlgButton (hDlg, IDC_MON_ONE, TRUE);
219 BOOL fEnable = fAddedAny;
220 if (!IsWindowEnabled (GetDlgItem (hDlg, IDC_MON_ALL)))
222 EnableWindow (GetDlgItem (hDlg, IDC_MON_SOME), fEnable);
224 OpenCell_OnSubset (hDlg);
228 void OpenCell_OnAdvanced (HWND hDlg)
230 HWND hGroup = GetDlgItem (hDlg, IDC_ADVANCED_GROUP);
236 GetWindowRect (hDlg, &rWindow);
237 GetClientRect (hDlg, &rClient);
238 GetRectInParent (hGroup, &rGroup);
240 if (cyRECT(rClient) <= rGroup.top) // closed now?
242 SetWindowPos (hDlg, NULL,
245 cyRECT(rWindow) + cyRECT(rGroup) + 14,
246 SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
248 TCHAR szText[ cchRESOURCE ];
249 GetString (szText, IDS_ADVANCEDIN_BUTTON);
250 SetDlgItemText (hDlg, IDC_ADVANCED, szText);
254 SetWindowPos (hDlg, NULL,
257 cyRECT(rWindow) - cyRECT(rGroup) - 14,
258 SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
260 TCHAR szText[ cchRESOURCE ];
261 GetString (szText, IDS_ADVANCEDOUT_BUTTON);
262 SetDlgItemText (hDlg, IDC_ADVANCED, szText);
267 void OpenCellDlg_Hook_OnEndTask_OpenCell (HWND hDlg, LPTASKPACKET ptp)
271 EndDialog (hDlg, IDOK);
275 OpenCell_Hook_Enable (hDlg, TRUE);
277 TCHAR szCell[ cchNAME ];
278 GetDlgItemText (hDlg, IDC_OPENCELL_CELL, szCell, cchNAME);
279 ErrorDialog (ptp->status, IDS_ERROR_CANT_OPEN_CELL, TEXT("%s"), szCell);
284 BOOL CALLBACK OpenCellDlg_Hook (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
289 CheckDlgButton (hDlg, IDC_MON_ALL, TRUE);
290 CheckDlgButton (hDlg, IDC_MON_ONE, FALSE);
291 CheckDlgButton (hDlg, IDC_MON_SOME, FALSE);
292 OpenCell_OnSubset (hDlg);
293 OpenCell_OnAdvanced (hDlg);
294 OpenCell_OnCellChange (hDlg, TRUE);
299 if ((ptp = (LPTASKPACKET)lp) != NULL)
301 if (ptp->idTask == taskOPENCELL)
302 OpenCellDlg_Hook_OnEndTask_OpenCell (hDlg, ptp);
303 FreeTaskPacket (ptp);
311 OpenCellDlg_Hook_OnOK (hDlg, (LPOPENCELLDLG_PARAMS)GetWindowLong (hDlg, DWL_USER));
314 case IDC_OPENCELL_CELL:
318 TCHAR szCell[ cchNAME ];
319 SendDlgItemMessage (hDlg, IDC_OPENCELL_CELL, CB_GETLBTEXT, CB_GetSelected(GetDlgItem (hDlg, IDC_OPENCELL_CELL)), (LPARAM)szCell);
320 SetDlgItemText (hDlg, IDC_OPENCELL_CELL, szCell);
321 OpenCell_OnCellChange (hDlg, FALSE);
325 OpenCell_OnCellChange (hDlg, FALSE);
331 OpenCell_OnAdvanced (hDlg);
337 OpenCell_OnSubset (hDlg);
348 * CREDENTIALS ________________________________________________________________
352 void GetBadCredsDlgParams (LPBADCREDSDLG_PARAMS lpp)
354 memset (lpp, 0x00, sizeof(BADCREDSDLG_PARAMS));
355 lpp->pfShowWarningEver = &gr.fWarnBadCreds;
356 lpp->idsDesc = IDS_BADCREDS_DESC;
360 void GetCredentialsDlgParams (LPCREDENTIALSDLG_PARAMS lpp)
362 memset (lpp, 0x00, sizeof(CREDENTIALSDLG_PARAMS));
363 lpp->hParent = g.hMain;
365 g.lpiCell->GetCellName (lpp->szCell);
367 AfsAppLib_GetLocalCell (lpp->szCell);
368 lpp->hCreds = g.hCreds;
369 GetBadCredsDlgParams (&lpp->bcdp);
374 * OPERATIONS _________________________________________________________________
378 BOOL OpenCellDialog (void)
380 if (!Subsets_SaveIfDirty (g.sub))
383 OPENCELLDLG_PARAMS pp;
384 memset (&pp, 0x00, sizeof(pp));
385 pp.idd = IDD_OPENCELL;
386 pp.hookproc = (DLGPROC)OpenCellDlg_Hook;
387 pp.hParent = g.hMain;
389 pp.lpcl = AfsAppLib_GetCellList (HKCU, REGSTR_SETTINGS_CELLS);
390 pp.hCreds = g.hCreds;
391 GetBadCredsDlgParams (&pp.bcdp);
393 BOOL rc = AfsAppLib_ShowOpenCellDialog (&pp);
395 AfsAppLib_FreeCellList (pp.lpcl);
400 BOOL NewCredsDialog (void)
402 CREDENTIALSDLG_PARAMS pp;
403 GetCredentialsDlgParams (&pp);
404 return AfsAppLib_ShowCredentialsDialog (&pp);
408 void CheckForExpiredCredentials (void)
410 CREDENTIALSDLG_PARAMS pp;
411 GetCredentialsDlgParams (&pp);
412 AfsAppLib_CheckForExpiredCredentials (&pp);
416 BOOL CheckCredentials (BOOL fComplain)
418 CHECKCREDS_PARAMS pp;
419 memset (&pp, 0x00, sizeof(pp));
420 pp.fShowWarning = fComplain;
421 pp.hCreds = g.hCreds;
422 GetBadCredsDlgParams (&pp.bcdp);
424 return AfsAppLib_CheckCredentials (&pp);