summaryrefslogtreecommitdiffstats
path: root/src/windows
diff options
context:
space:
mode:
authorJeffrey Altman <jaltman@secure-endpoints.com>2007-08-24 14:23:14 +0000
committerJeffrey Altman <jaltman@secure-endpoints.com>2007-08-24 14:23:14 +0000
commitfd9e358aea48a7d52cdc58b6283128e685d4ef18 (patch)
treeb7b1952ca570330e993e98e7ace52064400c6b1e /src/windows
parentd8daba5d488be9b24fdbaca2272553818735ce99 (diff)
downloadkrb5-fd9e358aea48a7d52cdc58b6283128e685d4ef18.tar.gz
krb5-fd9e358aea48a7d52cdc58b6283128e685d4ef18.tar.xz
krb5-fd9e358aea48a7d52cdc58b6283128e685d4ef18.zip
NIM: Identity Configuration Panel Fixes
In the identity configuration panel of Network Identity Manager, the user can specify a new identity which can then be configured. The existing code didn't check if the identity specified by the user already exists. The patch adds the check. If the identity already exists, the user is notified as such. Another bug prevented the user from configuring an identity that was added back in following the deletion of the same identity during the same session. The deleted status of the identity was not reset when it was added back. Additionally, this patch adds code that has already been added to the new credentials dialog to apply Windows XP theme textures to the child dialogs used as tab panels in the configuration dialog. Child dialogs don't automatically adjust the theme settings based on whether it is nested inside a tab control. The theme must be applied manually. ticket: new component: windows git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@19853 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/windows')
-rw-r--r--src/windows/identity/ui/cfg_identities_wnd.c56
1 files changed, 48 insertions, 8 deletions
diff --git a/src/windows/identity/ui/cfg_identities_wnd.c b/src/windows/identity/ui/cfg_identities_wnd.c
index 5e3079224..46efe242b 100644
--- a/src/windows/identity/ui/cfg_identities_wnd.c
+++ b/src/windows/identity/ui/cfg_identities_wnd.c
@@ -26,6 +26,9 @@
#include<khmapp.h>
#include<assert.h>
+#if _WIN32_WINNT >= 0x0501
+#include<uxtheme.h>
+#endif
static khui_config_node
get_window_node(HWND hwnd) {
@@ -93,6 +96,9 @@ add_subpanels(HWND hwnd,
#ifdef DEBUG
assert(hwnd_panel);
#endif
+#if _WIN32_WINNT >= 0x0501
+ EnableThemeDialogTexture(hwnd_panel, ETDT_ENABLETAB);
+#endif
ShowWindow(hwnd_panel, SW_HIDE);
@@ -299,8 +305,9 @@ typedef struct tag_ident_data {
wchar_t * idname;
int lv_idx;
- BOOL removed;
+ BOOL removed; /* this identity was marked for removal */
BOOL applied;
+ BOOL purged; /* this identity was actually removed */
khm_int32 flags;
@@ -456,6 +463,8 @@ write_params_ident(ident_data * d) {
assert(!(flags & KCDB_IDENT_FLAG_CONFIG));
#endif
+ d->purged = TRUE;
+
} else {
if (d->saved.monitor != d->work.monitor)
@@ -478,7 +487,7 @@ write_params_ident(ident_data * d) {
d->applied = TRUE;
- if (d->hwnd)
+ if (d->hwnd && !d->removed)
PostMessage(d->hwnd, KHUI_WM_CFG_NOTIFY,
MAKEWPARAM(0, WMCFG_UPDATE_STATE), 0);
@@ -965,6 +974,7 @@ khm_cfg_add_ident_proc(HWND hwnd,
khm_handle csp_ident = NULL;
khm_size cb;
khm_int32 rv = KHM_ERROR_SUCCESS;
+ khm_int32 flags = 0;
d = (add_ident_data *)(LONG_PTR)
GetWindowLongPtr(hwnd, DWLP_USER);
@@ -990,6 +1000,23 @@ khm_cfg_add_ident_proc(HWND hwnd,
cb = sizeof(idname);
kcdb_identity_get_name(ident, idname, &cb);
+ /* check if the identity is already in the
+ configuration */
+ if (KHM_SUCCEEDED(kcdb_identity_get_flags(ident, &flags)) &&
+ (flags & KCDB_IDENT_FLAG_CONFIG)) {
+
+ wchar_t fmt[256];
+
+ LoadString(khm_hInstance, IDS_CFG_IDNAME_EXT,
+ fmt, ARRAYLENGTH(fmt));
+ StringCbPrintf(err_msg, sizeof(err_msg), fmt, idname);
+
+ kcdb_identity_release(ident);
+ ident = NULL;
+
+ goto show_failure;
+ }
+
/* now we have to create the identity configuration. */
if (KHM_FAILED(rv = kcdb_identity_get_config(ident,
KHM_FLAG_CREATE,
@@ -1001,6 +1028,7 @@ khm_cfg_add_ident_proc(HWND hwnd,
StringCbPrintf(err_msg, sizeof(err_msg), fmt, rv);
kcdb_identity_release(ident);
+ ident = NULL;
goto show_failure;
}
@@ -1247,8 +1275,17 @@ find_ident_by_node(khui_config_node node) {
break;
}
- if (i < (int)cfg_idents.n_idents)
+ if (i < (int)cfg_idents.n_idents) {
+ if (cfg_idents.idents[i].purged) {
+ /* we are re-creating a purged identity */
+ cfg_idents.idents[i].purged = FALSE;
+ cfg_idents.idents[i].removed = FALSE;
+ cfg_idents.idents[i].applied = FALSE;
+
+ read_params_ident(&cfg_idents.idents[i]);
+ }
return &cfg_idents.idents[i];
+ }
/* there is no identity data for this configuration node. We try
to create it. */
@@ -1463,11 +1500,14 @@ khm_cfg_id_tab_proc(HWND hwnd,
cont = (BOOL *) lParam;
d = find_ident_by_node(idata->ctx_node);
write_params_ident(d);
- if (d->removed && cont)
- *cont = FALSE;
- khui_cfg_set_flags_inst(idata, KHUI_CNFLAG_APPLIED,
- KHUI_CNFLAG_APPLIED |
- KHUI_CNFLAG_MODIFIED);
+ if (d->removed) {
+ if (cont)
+ *cont = FALSE;
+ } else {
+ khui_cfg_set_flags_inst(idata, KHUI_CNFLAG_APPLIED,
+ KHUI_CNFLAG_APPLIED |
+ KHUI_CNFLAG_MODIFIED);
+ }
break;
case WMCFG_UPDATE_STATE: