summaryrefslogtreecommitdiffstats
path: root/src/windows/cns/options.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/windows/cns/options.c')
-rw-r--r--src/windows/cns/options.c291
1 files changed, 291 insertions, 0 deletions
diff --git a/src/windows/cns/options.c b/src/windows/cns/options.c
new file mode 100644
index 0000000000..8a3b77bf16
--- /dev/null
+++ b/src/windows/cns/options.c
@@ -0,0 +1,291 @@
+/*
+ * Copyright 1994 by the Massachusetts Institute of Technology.
+ *
+ * For copying and distribution information, please see the file
+ * <mit-copyright.h>.
+ */
+
+/*
+ * functions to tweak the options dialog
+ */
+
+#include <windows.h>
+#include <windowsx.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+#include <string.h>
+#include <malloc.h>
+#include <ctype.h>
+#include <time.h>
+
+#include "cns.h"
+
+char confname[FILENAME_MAX];
+char ccname[FILENAME_MAX];
+
+/*
+ * Function: Process WM_INITDIALOG messages for the options dialog.
+ * Set up all initial dialog values from the KERBEROS_INI file.
+ *
+ * Returns: TRUE if we didn't set the focus here,
+ * FALSE if we did.
+ */
+BOOL
+opts_initdialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
+{
+ char wdir[FILENAME_MAX];
+ char defname[FILENAME_MAX];
+ char newname[FILENAME_MAX];
+ UINT rc;
+ int lifetime;
+
+ center_dialog(hwnd);
+ set_dialog_font(hwnd, hfontdialog);
+ rc = GetWindowsDirectory(wdir, sizeof(wdir));
+ assert(rc > 0);
+ strcat(wdir, "\\");
+
+ /* krb.conf file */
+ strcpy(defname, wdir);
+ strcat(defname, DEF_KRB_CONF);
+ GetPrivateProfileString(INI_FILES, INI_KRB_CONF, defname,
+ confname, sizeof(confname), KERBEROS_INI);
+#ifndef _WIN32
+ _strupr(confname);
+#endif
+ SetDlgItemText(hwnd, IDD_CONF, confname);
+
+#ifdef KRB4
+ /* krb.realms file */
+ strcpy(defname, wdir);
+ strcat(defname, DEF_KRB_REALMS);
+ GetPrivateProfileString(INI_FILES, INI_KRB_REALMS, defname,
+ newname, sizeof(newname), KERBEROS_INI);
+#ifndef _WIN32
+ _strupr(newname);
+#endif
+ SetDlgItemText(hwnd, IDD_REALMS, newname);
+#endif /* KRB4 */
+
+#ifdef KRB5
+ /* Credential cache file */
+ strcpy(defname, wdir);
+ strcat(defname, INI_KRB_CCACHE);
+ GetPrivateProfileString(INI_FILES, INI_KRB_CCACHE, defname,
+ ccname, sizeof(ccname), KERBEROS_INI);
+#ifndef _WIN32
+ _strupr(ccname);
+#endif
+ SetDlgItemText(hwnd, IDD_CCACHE, ccname);
+#endif /* KRB5 */
+
+ /* Ticket duration */
+ lifetime = GetPrivateProfileInt(INI_OPTIONS, INI_DURATION,
+ DEFAULT_TKT_LIFE * 5, KERBEROS_INI);
+ SetDlgItemInt(hwnd, IDD_LIFETIME, lifetime, FALSE);
+
+ /* Expiration action */
+ GetPrivateProfileString(INI_EXPIRATION, INI_ALERT, "No",
+ defname, sizeof(defname), KERBEROS_INI);
+ alert = _stricmp(defname, "Yes") == 0;
+ SendDlgItemMessage(hwnd, IDD_ALERT, BM_SETCHECK, alert, 0);
+
+ GetPrivateProfileString(INI_EXPIRATION, INI_BEEP, "No",
+ defname, sizeof(defname), KERBEROS_INI);
+ beep = _stricmp(defname, "Yes") == 0;
+ SendDlgItemMessage(hwnd, IDD_BEEP, BM_SETCHECK, beep, 0);
+
+#ifdef KRB5
+ GetPrivateProfileString(INI_TICKETOPTS, INI_FORWARDABLE, "No",
+ defname, sizeof(defname), KERBEROS_INI);
+ forwardable = _stricmp(defname, "Yes") == 0;
+ SendDlgItemMessage(hwnd, IDD_FORWARDABLE, BM_SETCHECK, forwardable, 0);
+#endif
+
+ return TRUE;
+}
+
+
+/*
+ * Function: Process WM_COMMAND messages for the options dialog.
+ */
+void
+opts_command(HWND hwnd, int cid, HWND hwndCtl, UINT codeNotify)
+{
+ char wdir[FILENAME_MAX];
+ char defname[FILENAME_MAX];
+ char newname[FILENAME_MAX];
+ char *p;
+ BOOL b;
+ int lifetime;
+ int rc;
+
+ switch (cid) {
+ case IDOK:
+ rc = GetWindowsDirectory(wdir, sizeof(wdir));
+ assert(rc > 0);
+ strcat(wdir, "\\");
+
+ /* Ticket duration */
+ lifetime = GetDlgItemInt(hwnd, IDD_LIFETIME, &b, FALSE);
+
+ if (!b) {
+ MessageBox(hwnd, "Lifetime must be a number!", "",
+ MB_OK | MB_ICONEXCLAMATION);
+ return; /* TRUE */
+ }
+
+ _itoa(lifetime, defname, 10);
+ b = WritePrivateProfileString(INI_OPTIONS, INI_DURATION,
+ defname, KERBEROS_INI);
+ assert(b);
+
+ /* krb.conf file */
+ GetDlgItemText(hwnd, IDD_CONF, newname, sizeof(newname));
+ trim(newname);
+ if (_stricmp(newname, confname)) { /* file name changed */
+ MessageBox(NULL,
+ "Change to configuration file location requires a restart"
+ "of KerbNet.\n"
+ "Please exit this application and restart this application",
+ "", MB_OK | MB_ICONEXCLAMATION);
+ }
+ strcpy(defname, wdir);
+ strcat(defname, DEF_KRB_CONF);
+ p = (*newname && _stricmp(newname, defname)) ? newname : NULL;
+ if (p)
+ strcpy(confname, p);
+ b = WritePrivateProfileString(INI_FILES, INI_KRB_CONF, p, KERBEROS_INI);
+ assert(b);
+
+ /* krb.realms file */
+#ifdef KRB4
+ GetDlgItemText(hwnd, IDD_REALMS, newname, sizeof(newname));
+ trim(newname);
+ strcpy(defname, wdir);
+ strcat(defname, DEF_KRB_REALMS);
+ p = (*newname && _stricmp(newname, defname)) ? newname : NULL;
+ b = WritePrivateProfileString(INI_FILES, INI_KRB_REALMS, p, KERBEROS_INI);
+ assert(b);
+#endif /* KRB4 */
+
+ /* Credential cache file */
+#ifdef KRB5
+ GetDlgItemText(hwnd, IDD_CCACHE, newname, sizeof(newname));
+ trim(newname);
+ strcpy(defname, wdir);
+ strcat(defname, "krb5cc");
+ if (*newname == '\0') /* For detecting name change */
+ strcpy(newname, defname);
+ p = (*newname && _stricmp(newname, defname)) ? newname : NULL;
+ b = WritePrivateProfileString(INI_FILES, INI_KRB_CCACHE, p, KERBEROS_INI);
+ assert(b);
+
+ if (_stricmp(ccname, newname)) { /* Did we change ccache file? */
+ krb5_error_code code;
+ krb5_ccache cctemp;
+
+ code = k5_init_ccache(&cctemp);
+ if (code) { /* Problem opening new one? */
+ com_err(NULL, code,
+ "while changing ccache.\r\nRestoring old ccache.");
+ b = WritePrivateProfileString(INI_FILES, INI_KRB_CCACHE,
+ ccname, KERBEROS_INI);
+ } else {
+ code = krb5_cc_close(k5_context, k5_ccache);
+ k5_ccache = cctemp; /* Copy new into old */
+ if (k5_name_from_ccache(k5_ccache)) {
+ kwin_init_name(GetParent(hwnd), "");
+ kwin_set_default_focus(GetParent(hwnd));
+ }
+ ticket_init_list(GetDlgItem (GetParent(hwnd),
+ IDD_TICKET_LIST));
+ }
+ }
+#endif /* KRB5 */
+
+ /* Expiration action */
+ alert = (BOOL)SendDlgItemMessage(hwnd, IDD_ALERT, BM_GETCHECK, 0, 0);
+ p = (alert) ? "Yes" : "No";
+ b = WritePrivateProfileString(INI_EXPIRATION, INI_ALERT, p, KERBEROS_INI);
+ assert(b);
+
+ beep = (BOOL)SendDlgItemMessage(hwnd, IDD_BEEP, BM_GETCHECK, 0, 0);
+ p = (beep) ? "Yes" : "No";
+ b = WritePrivateProfileString(INI_EXPIRATION, INI_BEEP, p, KERBEROS_INI);
+ assert(b);
+
+#ifdef KRB5
+ forwardable = (BOOL)SendDlgItemMessage(hwnd, IDD_FORWARDABLE,
+ BM_GETCHECK, 0, 0);
+ p = (forwardable) ? "Yes" : "No";
+ b = WritePrivateProfileString(INI_TICKETOPTS, INI_FORWARDABLE,
+ p, KERBEROS_INI);
+ assert(b);
+#endif
+
+ EndDialog(hwnd, IDOK);
+
+ return; /* TRUE */
+
+ case IDCANCEL:
+ EndDialog(hwnd, IDCANCEL);
+
+ return; /* TRUE */
+ }
+
+ return; /* FALSE */
+}
+
+
+/*
+ * Function: Process dialog specific messages for the opts dialog.
+ */
+BOOL CALLBACK
+opts_dlg_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ switch (message) {
+ HANDLE_MSG(hwnd, WM_INITDIALOG, opts_initdialog);
+
+ HANDLE_MSG(hwnd, WM_COMMAND, opts_command);
+ }
+
+ return FALSE;
+}
+
+
+/*
+ * Function: Display and process the options dialog.
+ *
+ * Parameters:
+ * hwnd - the parent window for the dialog
+ *
+ * Returns: TRUE if the dialog completed successfully, FALSE otherwise.
+ */
+BOOL
+opts_dialog(HWND hwnd)
+{
+ DLGPROC dlgproc;
+ int rc;
+
+#ifdef _WIN32
+ dlgproc = opts_dlg_proc;
+#else
+ dlgproc = (FARPROC)MakeProcInstance(opts_dlg_proc, hinstance);
+ assert(dlgproc != NULL);
+
+ if (dlgproc == NULL)
+ return FALSE;
+#endif
+
+ rc = DialogBox(hinstance, MAKEINTRESOURCE(ID_OPTS), hwnd, dlgproc);
+ assert(rc != -1);
+
+#ifndef _WIN32
+ FreeProcInstance((FARPROC)dlgproc);
+#endif
+
+ return rc == IDOK;
+}