summaryrefslogtreecommitdiffstats
path: root/src/windows
diff options
context:
space:
mode:
authorJeffrey Altman <jaltman@secure-endpoints.com>2007-01-20 05:42:30 +0000
committerJeffrey Altman <jaltman@secure-endpoints.com>2007-01-20 05:42:30 +0000
commit07c9ff590e89f00ae3cd480096206842762b3fd9 (patch)
treef498a206d1498e359788ff2e8fa0e3d18878fd59 /src/windows
parent443c5d9d4084262c63abf1c2f1f10993c014f8be (diff)
downloadkrb5-07c9ff590e89f00ae3cd480096206842762b3fd9.tar.gz
krb5-07c9ff590e89f00ae3cd480096206842762b3fd9.tar.xz
krb5-07c9ff590e89f00ae3cd480096206842762b3fd9.zip
NIM - Context sensitive system tray menu and more
Adds context sensitive menus for renew and destroy to the system tray menu. Select either all identities or one of the identities with credentials. Increases the API to 1.1.9 and adds a new interactive callback mechanism. ticket: new component: windows git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@19077 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/windows')
-rw-r--r--src/windows/identity/apiversion.txt11
-rw-r--r--src/windows/identity/config/Makefile.w2k6
-rw-r--r--src/windows/identity/config/Makefile.w326
-rw-r--r--src/windows/identity/doc/footer.html2
-rw-r--r--src/windows/identity/doc/main_page.h5
-rw-r--r--src/windows/identity/kcreddb/identity.c7
-rw-r--r--src/windows/identity/plugins/common/dynimport.c30
-rw-r--r--src/windows/identity/ui/credfuncs.c36
-rw-r--r--src/windows/identity/ui/credfuncs.h4
-rw-r--r--src/windows/identity/ui/intaction.h44
-rw-r--r--src/windows/identity/ui/lang/en_us/khapp.rc7
-rw-r--r--src/windows/identity/ui/main.c3
-rw-r--r--src/windows/identity/ui/mainmenu.c287
-rw-r--r--src/windows/identity/ui/mainmenu.h3
-rw-r--r--src/windows/identity/ui/mainwnd.c39
-rw-r--r--src/windows/identity/ui/newcredwnd.c4
-rw-r--r--src/windows/identity/ui/reqdaemon.c6
-rw-r--r--src/windows/identity/ui/resource.h7
-rw-r--r--src/windows/identity/ui/toolbar.c7
-rw-r--r--src/windows/identity/ui/uibind.c58
-rw-r--r--src/windows/identity/uilib/action.c18
-rw-r--r--src/windows/identity/uilib/actions.csv4
-rw-r--r--src/windows/identity/uilib/khactiondef.h9
-rw-r--r--src/windows/identity/uilib/khuidefs.h7
24 files changed, 569 insertions, 41 deletions
diff --git a/src/windows/identity/apiversion.txt b/src/windows/identity/apiversion.txt
index 4399861e8e..9681ccc1c8 100644
--- a/src/windows/identity/apiversion.txt
+++ b/src/windows/identity/apiversion.txt
@@ -1,4 +1,5 @@
# Copyright (c) 2004 Massachusetts Institute of Technology
+# Copyright (c) 2007 Secure Endpoints Inc.
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
@@ -214,3 +215,13 @@ Date=(TBD)
+KCDB_OP_DELCONFIG
# notification that the configuration information for an identity is to be removed.
+
+
+#----------------------------------------------------------------
+Version=7
+AppVersion=1.1.9.0
+Date=(TBD)
+# Released with KFW 3.2.0
+
++KHUI_ACTION_UICB
+# Internal action to dispatch a UI callback \ No newline at end of file
diff --git a/src/windows/identity/config/Makefile.w2k b/src/windows/identity/config/Makefile.w2k
index b9902bd903..f2977786c5 100644
--- a/src/windows/identity/config/Makefile.w2k
+++ b/src/windows/identity/config/Makefile.w2k
@@ -4,7 +4,7 @@
# in the build tree.
#
# Copyright (c) 2004,2005,2006 Massachusetts Institute of Technology
-# Copyright (c) 2006 Secure Endpoints Inc.
+# Copyright (c) 2006,2007 Secure Endpoints Inc.
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
@@ -47,7 +47,7 @@ KHIMAIRA_WIN32_CONFIG=1
# Version info
NETIDMGR_VERSION_MAJOR=1
NETIDMGR_VERSION_MINOR=1
-NETIDMGR_VERSION_PATCH=8
+NETIDMGR_VERSION_PATCH=9
NETIDMGR_VERSION_AUX=0
NETIDMGR_RELEASEDESC=
@@ -58,7 +58,7 @@ NETIDMGR_RELEASEDESC=
#
# Changes to the API version numbers should be documented in
# apiversion.txt at the root of the source tree.
-NETIDMGR_VERSION_API=6
+NETIDMGR_VERSION_API=7
# Minimum backwards compatible version. API versions from
# NETIDMGR_VERSION_API_MINCOMPAT through NETIDMGR_VERSION_API
diff --git a/src/windows/identity/config/Makefile.w32 b/src/windows/identity/config/Makefile.w32
index 8ede1dbae0..e327a70755 100644
--- a/src/windows/identity/config/Makefile.w32
+++ b/src/windows/identity/config/Makefile.w32
@@ -4,7 +4,7 @@
# in the build tree.
#
# Copyright (c) 2004,2005,2006 Massachusetts Institute of Technology
-# Copyright (c) 2006 Secure Endpoints Inc.
+# Copyright (c) 2006,2007 Secure Endpoints Inc.
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
@@ -47,7 +47,7 @@ KHIMAIRA_WIN32_CONFIG=1
# Version info
NETIDMGR_VERSION_MAJOR=1
NETIDMGR_VERSION_MINOR=1
-NETIDMGR_VERSION_PATCH=8
+NETIDMGR_VERSION_PATCH=9
NETIDMGR_VERSION_AUX=0
NETIDMGR_RELEASEDESC=
@@ -58,7 +58,7 @@ NETIDMGR_RELEASEDESC=
#
# Changes to the API version numbers should be documented in
# apiversion.txt at the root of the source tree.
-NETIDMGR_VERSION_API=6
+NETIDMGR_VERSION_API=7
# Minimum backwards compatible version. API versions from
# NETIDMGR_VERSION_API_MINCOMPAT through NETIDMGR_VERSION_API
diff --git a/src/windows/identity/doc/footer.html b/src/windows/identity/doc/footer.html
index 13314c2b04..fb3b621ce9 100644
--- a/src/windows/identity/doc/footer.html
+++ b/src/windows/identity/doc/footer.html
@@ -5,7 +5,7 @@
<td>
<address style="align:right;">
<small>Generated on $datetime for $projectname $projectnumber by&nbsp;<a href="http://www.doxygen.org/index.html">Doxygen</a> $doxygenversion<br>
- &copy; 2004 Massachusetts Institute of Technology. Contact <a href="mailto:khimaira@mit.edu">khimaira@mit.edu</a><br>
+ &copy; 2004-2007 Massachusetts Institute of Technology. Contact <a href="mailto:khimaira@mit.edu">khimaira@mit.edu</a><br>
</small>
</address>
</td>
diff --git a/src/windows/identity/doc/main_page.h b/src/windows/identity/doc/main_page.h
index 415a8e3f3a..34b3d1d72c 100644
--- a/src/windows/identity/doc/main_page.h
+++ b/src/windows/identity/doc/main_page.h
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2005 Massachusetts Institute of Technology
+ * Copyright (c) 2007 Secure Endpoints Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -39,7 +40,7 @@
- \subpage bugs
- \subpage releases
- &copy; 2004 Massachusetts Institute of Technology
+ &copy; 2004-2007 Massachusetts Institute of Technology
*/
/*!
@@ -49,7 +50,7 @@
\section license_l MIT License
- Copyright &copy; 2004 Massachusetts Institute of Technology
+ Copyright &copy; 2004,2005,2006,2007 Massachusetts Institute of Technology
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
diff --git a/src/windows/identity/kcreddb/identity.c b/src/windows/identity/kcreddb/identity.c
index 6057b6f2c2..3f6020682a 100644
--- a/src/windows/identity/kcreddb/identity.c
+++ b/src/windows/identity/kcreddb/identity.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2005 Massachusetts Institute of Technology
+ * Copyright (c) 2007 Secure Endpoints Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -998,9 +999,8 @@ kcdb_identity_get_attr(khm_handle vid,
/* we should never hit this case */
#ifdef DEBUG
assert(FALSE);
-#else
- code = KHM_ERROR_INVALID_OPERATION;
#endif
+ code = KHM_ERROR_INVALID_OPERATION;
} else {
#endif
code = type->dup(
@@ -1091,9 +1091,8 @@ kcdb_identity_get_attr_string(khm_handle vid,
if(attrib->flags & KCDB_ATTR_FLAG_COMPUTED) {
#ifdef DEBUG
assert(FALSE);
-#else
- code = KHM_ERROR_INVALID_OPERATION;
#endif
+ code = KHM_ERROR_INVALID_OPERATION;
} else {
#endif
if(kcdb_buf_exist(&id->buf, slot)) {
diff --git a/src/windows/identity/plugins/common/dynimport.c b/src/windows/identity/plugins/common/dynimport.c
index 311e4cf933..b3d7644760 100644
--- a/src/windows/identity/plugins/common/dynimport.c
+++ b/src/windows/identity/plugins/common/dynimport.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2005 Massachusetts Institute of Technology
+* Copyright (c) 2007 Secure Endpoints Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -25,8 +26,7 @@
/* $Id$ */
#include<windows.h>
-#include<khdefs.h>
-#include<kherror.h>
+#include<netidmgr.h>
#include<dynimport.h>
HINSTANCE hKrb4 = 0;
@@ -364,30 +364,36 @@ khm_int32 init_imports(void) {
OSVERSIONINFO osvi;
int imp_rv = 1;
-#define CKRV if(!imp_rv) goto _err_ret
+#define CKRV(m) \
+ do { \
+ if(!imp_rv) { \
+ _reportf(L"Can't locate all required exports from module [%S]", (m)); \
+ goto _err_ret; \
+ } \
+ } while (FALSE)
#ifndef _WIN64
imp_rv = LoadFuncs(KRB4_DLL, k4_fi, &hKrb4, 0, 1, 0, 0);
- CKRV;
+ CKRV(KRB4_DLL);
#endif
imp_rv = LoadFuncs(KRB5_DLL, k5_fi, &hKrb5, 0, 1, 0, 0);
- CKRV;
+ CKRV(KRB5_DLL);
imp_rv = LoadFuncs(COMERR_DLL, ce_fi, &hComErr, 0, 0, 1, 0);
- CKRV;
+ CKRV(COMERR_DLL);
imp_rv = LoadFuncs(SERVICE_DLL, service_fi, &hService, 0, 1, 0, 0);
- CKRV;
+ CKRV(SERVICE_DLL);
imp_rv = LoadFuncs(SECUR32_DLL, lsa_fi, &hSecur32, 0, 1, 1, 1);
- CKRV;
+ CKRV(SECUR32_DLL);
imp_rv = LoadFuncs(KRB524_DLL, k524_fi, &hKrb524, 0, 1, 1, 1);
- CKRV;
+ CKRV(KRB524_DLL);
imp_rv = LoadFuncs(PROFILE_DLL, profile_fi, &hProfile, 0, 1, 0, 0);
- CKRV;
+ CKRV(PROFILE_DLL);
imp_rv = LoadFuncs(CCAPI_DLL, ccapi_fi, &hCCAPI, 0, 1, 0, 0);
/* CCAPI_DLL is optional. No error check. */
@@ -405,7 +411,7 @@ khm_int32 init_imports(void) {
{
// Windows 9x
imp_rv = LoadFuncs(TOOLHELPDLL, toolhelp_fi, &hToolHelp32, 0, 1, 0, 0);
- CKRV;
+ CKRV(TOOLHELPDLL);
hPsapi = 0;
}
@@ -413,7 +419,7 @@ khm_int32 init_imports(void) {
{
// Windows NT
imp_rv = LoadFuncs(PSAPIDLL, psapi_fi, &hPsapi, 0, 1, 0, 0);
- CKRV;
+ CKRV(PSAPIDLL);
hToolHelp32 = 0;
}
diff --git a/src/windows/identity/ui/credfuncs.c b/src/windows/identity/ui/credfuncs.c
index 530ef08521..dcb70480ed 100644
--- a/src/windows/identity/ui/credfuncs.c
+++ b/src/windows/identity/ui/credfuncs.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2005 Massachusetts Institute of Technology
+ * Copyright (c) 2007 Secure Endpoints Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -504,6 +505,41 @@ void khm_cred_destroy_creds(khm_boolean sync, khm_boolean quiet)
_end_task();
}
+void khm_cred_destroy_identity(khm_handle identity)
+{
+ khui_action_context * pctx;
+ wchar_t idname[KCDB_IDENT_MAXCCH_NAME];
+ khm_size cb;
+
+ if (identity == NULL)
+ return;
+
+ pctx = PMALLOC(sizeof(*pctx));
+#ifdef DEBUG
+ assert(pctx);
+#endif
+
+ khui_context_create(pctx,
+ KHUI_SCOPE_IDENT,
+ identity,
+ KCDB_CREDTYPE_INVALID,
+ NULL);
+
+ cb = sizeof(idname);
+ kcdb_identity_get_name(identity, idname, &cb);
+
+ _begin_task(KHERR_CF_TRANSITIVE);
+ _report_sr1(KHERR_NONE, IDS_CTX_DESTROY_ID, _dupstr(idname));
+ _describe();
+
+ kmq_post_message(KMSG_CRED,
+ KMSG_CRED_DESTROY_CREDS,
+ 0,
+ (void *) pctx);
+
+ _end_task();
+}
+
void khm_cred_renew_identity(khm_handle identity)
{
khui_new_creds * c;
diff --git a/src/windows/identity/ui/credfuncs.h b/src/windows/identity/ui/credfuncs.h
index 677d27945d..379573ff52 100644
--- a/src/windows/identity/ui/credfuncs.h
+++ b/src/windows/identity/ui/credfuncs.h
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2005 Massachusetts Institute of Technology
+ * Copyright (c) 2007 Secure Endpoints Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -34,6 +35,9 @@ void
khm_cred_destroy_creds(khm_boolean sync,
khm_boolean quiet);
+void
+khm_cred_destroy_identity(khm_handle identity);
+
void
khm_cred_renew_identity(khm_handle identity);
diff --git a/src/windows/identity/ui/intaction.h b/src/windows/identity/ui/intaction.h
new file mode 100644
index 0000000000..2b4a66a1f2
--- /dev/null
+++ b/src/windows/identity/ui/intaction.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2007 Secure Endpoints Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/* $Id$ */
+
+#ifndef __NETIDMGR_ACTION_H_INTERNAL
+#define __NETIDMGR_ACTION_H_INTERNAL
+
+/* Internal declarations for exports and data structured used in
+ nidmgr32.dll and netidmgr.exe */
+
+extern HWND khui_hwnd_main;
+
+typedef struct tag_khui_ui_callback_data {
+ khm_int32 magic;
+ khm_ui_callback cb;
+ void * rock;
+ khm_int32 rv;
+} khui_ui_callback_data;
+
+#define KHUI_UICBDATA_MAGIC 0x8a08572a
+
+#endif
diff --git a/src/windows/identity/ui/lang/en_us/khapp.rc b/src/windows/identity/ui/lang/en_us/khapp.rc
index 96e8de6a52..862872daea 100644
--- a/src/windows/identity/ui/lang/en_us/khapp.rc
+++ b/src/windows/identity/ui/lang/en_us/khapp.rc
@@ -782,6 +782,13 @@ STRINGTABLE
BEGIN
IDS_NC_REN_FAILED_TITLE_I "Failed to renew creds for %s"
IDS_CFG_IDNAME_NON "No identity selected. Please select an identity and try again."
+ IDS_MENU_DESTROY_CRED "Destroy ..."
+ IDS_MENU_RENEW_CRED "Renew ..."
+ IDS_ACTION_DESTROY_ALL "All identities"
+ IDS_ACTION_RENEW_ALL "All identities"
+ IDS_IDACTION_RENEW "Renew credentials for %s"
+ IDS_IDACTION_DESTROY "Destroy credentials for %s"
+ IDS_CTX_DESTROY_ID "Destroying identity %1!s!"
END
#endif // English (U.S.) resources
diff --git a/src/windows/identity/ui/main.c b/src/windows/identity/ui/main.c
index e2210782f4..c05fa6b7fa 100644
--- a/src/windows/identity/ui/main.c
+++ b/src/windows/identity/ui/main.c
@@ -352,10 +352,11 @@ int _n_ui_propsheets = 0;
void khm_add_property_sheet(khui_property_sheet * s) {
if(_n_ui_propsheets < MAX_UI_PROPSHEETS)
_ui_propsheets[_n_ui_propsheets++] = s;
+ else {
#ifdef DEBUG
- else
assert(FALSE);
#endif
+ }
}
void khm_del_property_sheet(khui_property_sheet * s) {
diff --git a/src/windows/identity/ui/mainmenu.c b/src/windows/identity/ui/mainmenu.c
index fc3a64b0c9..c99cafafd2 100644
--- a/src/windows/identity/ui/mainmenu.c
+++ b/src/windows/identity/ui/mainmenu.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2005 Massachusetts Institute of Technology
+ * Copyright (c) 2007 Secure Endpoints Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -561,6 +562,289 @@ LRESULT khm_menu_notify_main(LPNMHDR notice) {
return ret;
}
+struct identity_action_map {
+ khm_handle identity;
+ khm_int32 renew_cmd;
+ khm_int32 destroy_cmd;
+ int refreshcycle;
+};
+
+#define IDMAP_ALLOC_INCR 8
+
+struct identity_action_map * id_action_map = NULL;
+khm_size n_id_action_map = 0;
+khm_size nc_id_action_map = 0;
+
+int idcmd_refreshcycle = 0;
+
+static struct identity_action_map *
+create_identity_cmd_map(khm_handle ident) {
+
+ struct identity_action_map * actmap;
+ wchar_t idname[KCDB_IDENT_MAXCCH_NAME];
+ wchar_t fmt[128];
+ wchar_t tooltip[KHUI_MAXCCH_SHORT_DESC];
+ khm_size cb;
+
+ if (n_id_action_map + 1 > nc_id_action_map) {
+ nc_id_action_map = UBOUNDSS(n_id_action_map + 1,
+ IDMAP_ALLOC_INCR,
+ IDMAP_ALLOC_INCR);
+#ifdef DEBUG
+ assert(nc_id_action_map > n_id_action_map + 1);
+#endif
+ id_action_map = PREALLOC(id_action_map,
+ nc_id_action_map * sizeof(id_action_map[0]));
+#ifdef DEBUG
+ assert(id_action_map);
+#endif
+ ZeroMemory(&id_action_map[n_id_action_map],
+ sizeof(id_action_map[0]) * (nc_id_action_map - n_id_action_map));
+ }
+
+ actmap = &id_action_map[n_id_action_map];
+ n_id_action_map++;
+
+ cb = sizeof(idname);
+ kcdb_identity_get_name(ident, idname, &cb);
+
+ actmap->identity = ident;
+ kcdb_identity_hold(ident);
+
+ fmt[0] = L'\0';
+ LoadString(khm_hInstance, IDS_IDACTION_RENEW,
+ fmt, ARRAYLENGTH(fmt));
+ StringCbPrintf(tooltip, sizeof(tooltip), fmt, idname);
+
+ actmap->renew_cmd =
+ khui_action_create(NULL, idname, tooltip, NULL,
+ KHUI_ACTIONTYPE_TRIGGER, NULL);
+
+ fmt[0] = L'\0';
+ LoadString(khm_hInstance, IDS_IDACTION_DESTROY,
+ fmt, ARRAYLENGTH(fmt));
+ StringCbPrintf(tooltip, sizeof(tooltip), fmt, idname);
+
+ actmap->destroy_cmd =
+ khui_action_create(NULL, idname, tooltip, NULL,
+ KHUI_ACTIONTYPE_TRIGGER, NULL);
+
+ actmap->refreshcycle = idcmd_refreshcycle;
+
+ return actmap;
+}
+
+static void
+purge_identity_cmd_map(void) {
+ khm_size i;
+
+ for (i=0; i < n_id_action_map; i++) {
+ khm_handle ident;
+
+ if (id_action_map[i].refreshcycle != idcmd_refreshcycle) {
+ ident = id_action_map[i].identity;
+ id_action_map[i].identity = NULL;
+ kcdb_identity_release(ident);
+
+ khui_action_delete(id_action_map[i].renew_cmd);
+ khui_action_delete(id_action_map[i].destroy_cmd);
+
+ id_action_map[i].renew_cmd = 0;
+ id_action_map[i].destroy_cmd = 0;
+ }
+ }
+}
+
+static struct identity_action_map *
+get_identity_cmd_map(khm_handle ident) {
+ khm_size i;
+
+ for (i=0; i < n_id_action_map; i++) {
+ if (kcdb_identity_is_equal(id_action_map[i].identity,
+ ident))
+ break;
+ }
+
+ if (i < n_id_action_map) {
+ id_action_map[i].refreshcycle = idcmd_refreshcycle;
+ return &id_action_map[i];
+ } else {
+ return create_identity_cmd_map(ident);
+ }
+}
+
+static khm_int32
+get_identity_renew_command(khm_handle ident) {
+ struct identity_action_map * map;
+
+ map = get_identity_cmd_map(ident);
+
+ if (map)
+ return map->renew_cmd;
+ else
+ return 0;
+}
+
+static khm_int32
+get_identity_destroy_command(khm_handle ident) {
+ struct identity_action_map * map;
+
+ map = get_identity_cmd_map(ident);
+
+ if (map)
+ return map->destroy_cmd;
+ else
+ return 0;
+}
+
+void
+khm_refresh_identity_menus(void) {
+ khui_menu_def * renew_def = NULL;
+ khui_menu_def * dest_def = NULL;
+ wchar_t * idlist = NULL;
+ wchar_t * idname = NULL;
+ khm_size cb = 0;
+ khm_size n_idents = 0;
+ khm_size t;
+ khm_int32 rv = KHM_ERROR_SUCCESS;
+
+ idcmd_refreshcycle++;
+
+ do {
+ if (idlist)
+ PFREE(idlist);
+ idlist = NULL;
+ cb = 0;
+
+ rv = kcdb_identity_enum(KCDB_IDENT_FLAG_ACTIVE | KCDB_IDENT_FLAG_EMPTY,
+ KCDB_IDENT_FLAG_ACTIVE,
+ NULL,
+ &cb,
+ &n_idents);
+ if (rv != KHM_ERROR_TOO_LONG || cb == 0 || cb == sizeof(wchar_t) * 2)
+ break;
+
+ idlist = PMALLOC(cb);
+#ifdef DEBUG
+ assert(idlist);
+#endif
+
+ rv = kcdb_identity_enum(KCDB_IDENT_FLAG_ACTIVE | KCDB_IDENT_FLAG_EMPTY,
+ KCDB_IDENT_FLAG_ACTIVE,
+ idlist,
+ &cb,
+ &n_idents);
+ if (rv == KHM_ERROR_TOO_LONG)
+ continue;
+
+ if (KHM_FAILED(rv)) {
+ /* something else went wrong. hmm. */
+ if (idlist)
+ PFREE(idlist);
+ idlist = NULL;
+ }
+ break;
+
+ } while(TRUE);
+
+ renew_def = khui_find_menu(KHUI_MENU_RENEW_CRED);
+ dest_def = khui_find_menu(KHUI_MENU_DESTROY_CRED);
+#ifdef DEBUG
+ assert(renew_def);
+ assert(dest_def);
+#endif
+
+ t = khui_menu_get_size(renew_def);
+ while(t) {
+ khui_menu_remove_action(renew_def, 0);
+ t--;
+ }
+ khui_menu_insert_action(renew_def, 0, KHUI_ACTION_RENEW_ALL, 0);
+
+ t = khui_menu_get_size(dest_def);
+ while(t) {
+ khui_menu_remove_action(dest_def, 0);
+ t--;
+ }
+ khui_menu_insert_action(dest_def, 0, KHUI_ACTION_DESTROY_ALL, 0);
+
+ if (idlist != NULL && n_idents > 0) {
+ khui_menu_insert_action(renew_def, 1, KHUI_MENU_SEP, 0);
+ khui_menu_insert_action(dest_def, 1, KHUI_MENU_SEP, 0);
+ }
+
+ for (idname = idlist; idname && idname[0];
+ idname = multi_string_next(idname)) {
+ khm_handle identity = NULL;
+
+ if (KHM_FAILED(kcdb_identity_create(idname, 0, &identity))) {
+#ifdef DEBUG
+ assert(FALSE);
+#endif
+ continue;
+ }
+
+ khui_menu_insert_action(renew_def, 1000,
+ get_identity_renew_command(identity),
+ 0);
+
+ khui_menu_insert_action(dest_def, 1000,
+ get_identity_destroy_command(identity),
+ 0);
+ }
+
+ if (idlist)
+ PFREE(idlist);
+
+ purge_identity_cmd_map();
+}
+
+khm_boolean
+khm_check_identity_menu_action(khm_int32 act_id) {
+
+ if (act_id == KHUI_ACTION_DESTROY_ALL) {
+ khm_size i;
+
+ for (i=0; i < n_id_action_map; i++) {
+ if (id_action_map[i].identity != NULL) {
+ khm_cred_destroy_identity(id_action_map[i].identity);
+ }
+ }
+
+ return TRUE;
+ } else if (act_id == KHUI_ACTION_RENEW_ALL) {
+ khm_size i;
+
+ for (i=0; i < n_id_action_map; i++) {
+ if (id_action_map[i].identity != NULL) {
+ khm_cred_renew_identity(id_action_map[i].identity);
+ }
+ }
+
+ return TRUE;
+ } else {
+ khm_size i;
+
+ for (i=0; i < n_id_action_map; i++) {
+ if (id_action_map[i].identity == NULL)
+ continue;
+
+ if (id_action_map[i].renew_cmd == act_id) {
+ khm_cred_renew_identity(id_action_map[i].identity);
+ return TRUE;
+ }
+
+ if (id_action_map[i].destroy_cmd == act_id) {
+ khm_cred_destroy_identity(id_action_map[i].identity);
+ return TRUE;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
+
HMENU khui_hmenu_main = NULL;
void khm_menu_refresh_items(void) {
@@ -625,9 +909,8 @@ void khm_menu_create_main(HWND parent) {
if(!hwtb) {
#ifdef DEBUG
assert(FALSE);
-#else
- return;
#endif
+ return;
}
khui_main_menu_toolbar = hwtb;
diff --git a/src/windows/identity/ui/mainmenu.h b/src/windows/identity/ui/mainmenu.h
index 7f718c26c4..a0f64a0a6e 100644
--- a/src/windows/identity/ui/mainmenu.h
+++ b/src/windows/identity/ui/mainmenu.h
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2005 Massachusetts Institute of Technology
+ * Copyright (c) 2007 Secure Endpoints Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -46,6 +47,8 @@ void khm_menu_track_current(void);
LRESULT khm_menu_measure_item(WPARAM wParam, LPARAM lparam);
LRESULT khm_menu_draw_item(WPARAM wParam, LPARAM lparam);
void khm_menu_refresh_items(void);
+khm_boolean khm_check_identity_menu_action(khm_int32 act_id);
+void khm_refresh_identity_menus(void);
static HMENU mm_create_menu_from_def(khui_menu_def * def, BOOL main);
static void mm_show_panel_def(khui_menu_def * def, LONG x, LONG y);
diff --git a/src/windows/identity/ui/mainwnd.c b/src/windows/identity/ui/mainwnd.c
index eba23e40ed..71e09dfacc 100644
--- a/src/windows/identity/ui/mainwnd.c
+++ b/src/windows/identity/ui/mainwnd.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2005 Massachusetts Institute of Technology
+ * Copyright (c) 2007 Secure Endpoints Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -25,6 +26,7 @@
/* $Id$ */
#include<khmapp.h>
+#include<intaction.h>
#include<assert.h>
ATOM khm_main_window_class;
@@ -62,8 +64,9 @@ mw_restart_refresh_timer(HWND hwnd) {
&timeout)))
timeout = MW_REFRESH_TIMEOUT;
khc_close_space(csp_cw);
- } else
+ } else {
timeout = MW_REFRESH_TIMEOUT;
+ }
timeout *= 1000; /* convert to milliseconds */
@@ -172,6 +175,27 @@ khm_process_query_app_ver(khm_query_app_version * papp_ver) {
papp_ver->code = KHM_ERROR_SUCCESS;
}
+static void
+khm_ui_cb(LPARAM lParam) {
+ khui_ui_callback_data * pcbdata;
+
+ pcbdata = (khui_ui_callback_data *) lParam;
+
+ if (pcbdata == NULL || pcbdata->magic != KHUI_UICBDATA_MAGIC) {
+#ifdef DEBUG
+ assert(FALSE);
+#endif
+ return;
+ }
+
+#ifdef DEBUG
+ assert(pcbdata->cb);
+#endif
+
+ /* make the call */
+ pcbdata->rv = (*pcbdata->cb)(khm_hwnd_main, pcbdata->rock);
+}
+
LRESULT CALLBACK
khm_main_wnd_proc(HWND hwnd,
UINT uMsg,
@@ -339,6 +363,10 @@ khm_main_wnd_proc(HWND hwnd,
return SendMessage(khm_hwnd_main_cred, uMsg,
wParam, lParam);
+ case KHUI_ACTION_UICB:
+ khm_ui_cb(lParam);
+ break;
+
/* menu commands */
case KHUI_PACTION_MENU:
if(HIWORD(lParam) == 1)
@@ -408,6 +436,12 @@ khm_main_wnd_proc(HWND hwnd,
{
khui_action * act;
+ /* check if this is an identity menu action. (custom
+ actions that were created for renewing or
+ destroying specific identities). */
+ if (khm_check_identity_menu_action(LOWORD(wParam)))
+ break;
+
act = khui_find_action(LOWORD(wParam));
if (act && act->listener) {
kmq_post_sub_msg(act->listener, KMSG_ACT, KMSG_ACT_ACTIVATE, act->cmd, NULL);
@@ -568,6 +602,9 @@ khm_main_wnd_proc(HWND hwnd,
} else if (m->type == KMSG_CRED &&
m->subtype == KMSG_CRED_ADDR_CHANGE) {
khm_cred_addr_change();
+ } else if (m->type == KMSG_CRED &&
+ m->subtype == KMSG_CRED_ROOTDELTA) {
+ khm_refresh_identity_menus();
} else if (m->type == KMSG_KMM &&
m->subtype == KMSG_KMM_I_DONE) {
kmq_post_message(KMSG_ACT, KMSG_ACT_BEGIN_CMDLINE, 0, 0);
diff --git a/src/windows/identity/ui/newcredwnd.c b/src/windows/identity/ui/newcredwnd.c
index b876b02979..75ebef4d82 100644
--- a/src/windows/identity/ui/newcredwnd.c
+++ b/src/windows/identity/ui/newcredwnd.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2005 Massachusetts Institute of Technology
+ * Copyright (c) 2007 Secure Endpoints Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -1372,9 +1373,8 @@ static LRESULT nc_handle_wm_nc_notify(HWND hwnd,
} else {
#ifdef DEBUG
assert(FALSE);
-#else
- continue;
#endif
+ continue;
}
}
diff --git a/src/windows/identity/ui/reqdaemon.c b/src/windows/identity/ui/reqdaemon.c
index 684f6c74a6..b95f02daf7 100644
--- a/src/windows/identity/ui/reqdaemon.c
+++ b/src/windows/identity/ui/reqdaemon.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2005 Massachusetts Institute of Technology
+ * Copyright (c) 2007 Secure Endpoints Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -171,12 +172,11 @@ reqdaemonwnd_proc(HWND hwnd,
pdlginfo->out.ccache,
&cb);
kcdb_identity_release(out_ident);
- }
+ } else {
#ifdef DEBUG
- else {
assert(FALSE);
- }
#endif
+ }
*atsign++ = 0;
diff --git a/src/windows/identity/ui/resource.h b/src/windows/identity/ui/resource.h
index b8dc0ec048..f430fe0b08 100644
--- a/src/windows/identity/ui/resource.h
+++ b/src/windows/identity/ui/resource.h
@@ -294,6 +294,13 @@
#define IDS_NC_PWD_FAILED_TITLE_I 287
#define IDS_NC_REN_FAILED_TITLE_I 288
#define IDS_CFG_IDNAME_NON 289
+#define IDS_MENU_DESTROY_CRED 290
+#define IDS_MENU_RENEW_CRED 291
+#define IDS_ACTION_DESTROY_ALL 292
+#define IDS_ACTION_RENEW_ALL 293
+#define IDS_IDACTION_RENEW 294
+#define IDS_IDACTION_DESTROY 295
+#define IDS_CTX_DESTROY_ID 296
#define IDC_NC_USERNAME 1007
#define IDC_NC_PASSWORD 1008
#define IDC_NC_CREDTEXT_LABEL 1009
diff --git a/src/windows/identity/ui/toolbar.c b/src/windows/identity/ui/toolbar.c
index 7157563e4a..f3781b9301 100644
--- a/src/windows/identity/ui/toolbar.c
+++ b/src/windows/identity/ui/toolbar.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2005 Massachusetts Institute of Technology
+ * Copyright (c) 2007 Secure Endpoints Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -312,9 +313,8 @@ void khm_create_standard_toolbar(HWND rebar) {
if (!def) {
#ifdef DEBUG
assert(FALSE);
-#else
- return;
#endif
+ return;
}
hwtb = CreateWindowEx(0
@@ -340,9 +340,8 @@ void khm_create_standard_toolbar(HWND rebar) {
if(!hwtb) {
#ifdef DEBUG
assert(FALSE);
-#else
- return;
#endif
+ return;
}
hiList = ImageList_Create(
diff --git a/src/windows/identity/ui/uibind.c b/src/windows/identity/ui/uibind.c
new file mode 100644
index 0000000000..ac5e136265
--- /dev/null
+++ b/src/windows/identity/ui/uibind.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2007 Secure Endpoints Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/* $Id$ */
+
+#include<khuidefs.h>
+#include<intaction.h>
+
+#ifdef DEBUG
+#include <assert.h>
+#endif
+
+KHMEXP khm_int32 KHMAPI
+khui_request_UI_callback(khm_ui_callback cb, void * rock) {
+
+ khui_ui_callback_data cbdata;
+
+#ifdef DEBUG
+ assert(khui_hwnd_main);
+#endif
+
+ if (khui_hwnd_main == NULL)
+ return KHM_ERROR_NOT_READY;
+
+ ZeroMemory(&cbdata, sizeof(cbdata));
+ cbdata.magic = KHUI_UICBDATA_MAGIC;
+ cbdata.cb = cb;
+ cbdata.rock = rock;
+ cbdata.rv = KHM_ERROR_NOT_IMPLEMENTED;
+
+ SendMessage(khui_hwnd_main, WM_COMMAND,
+ MAKEWPARAM(KHUI_ACTION_UICB, 0),
+ (LPARAM) &cbdata);
+
+ return KHM_ERROR_SUCCESS;
+}
+
diff --git a/src/windows/identity/uilib/action.c b/src/windows/identity/uilib/action.c
index 78fd3a821a..a7ab184fad 100644
--- a/src/windows/identity/uilib/action.c
+++ b/src/windows/identity/uilib/action.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2005 Massachusetts Institute of Technology
+ * Copyright (c) 2007 Secure Endpoints Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -26,6 +27,7 @@
#define NOEXPORT
#include<khuidefs.h>
+#include<intaction.h>
#include<utils.h>
#include<assert.h>
@@ -164,8 +166,8 @@ khui_action_ref khui_menu_ico_ctx_normal[] = {
MENU_DEFACTION(KHUI_ACTION_CLOSE_APP),
MENU_SEP(),
MENU_ACTION(KHUI_ACTION_NEW_CRED),
- MENU_ACTION(KHUI_ACTION_RENEW_CRED),
- MENU_ACTION(KHUI_ACTION_DESTROY_CRED),
+ MENU_SUBMENU(KHUI_MENU_RENEW_CRED),
+ MENU_SUBMENU(KHUI_MENU_DESTROY_CRED),
MENU_SEP(),
MENU_ACTION(KHUI_ACTION_EXIT),
MENU_END()
@@ -181,6 +183,16 @@ khui_action_ref khui_menu_columns[] = {
MENU_END()
};
+khui_action_ref khui_menu_destroy_cred[] = {
+ MENU_DEFACTION(KHUI_ACTION_DESTROY_ALL),
+ MENU_END()
+};
+
+khui_action_ref khui_menu_renew_cred[] = {
+ MENU_DEFACTION(KHUI_ACTION_RENEW_ALL),
+ MENU_END()
+};
+
khui_action_ref khui_pmenu_tok_sel[] = {
MENU_ACTION(KHUI_ACTION_RENEW_CRED),
MENU_ACTION(KHUI_ACTION_DESTROY_CRED),
@@ -204,6 +216,8 @@ khui_menu_def khui_all_menus[] = {
CONSTMENU(KHUI_MENU_OPTIONS, KHUI_MENUSTATE_CONSTANT | KHUI_MENUSTATE_SYSTEM, khui_menu_options),
CONSTMENU(KHUI_MENU_HELP, KHUI_MENUSTATE_CONSTANT | KHUI_MENUSTATE_SYSTEM, khui_menu_help),
CONSTMENU(KHUI_MENU_COLUMNS, KHUI_MENUSTATE_CONSTANT | KHUI_MENUSTATE_SYSTEM, khui_menu_columns),
+ CONSTMENU(KHUI_MENU_RENEW_CRED, KHUI_MENUSTATE_CONSTANT | KHUI_MENUSTATE_SYSTEM, khui_menu_renew_cred),
+ CONSTMENU(KHUI_MENU_DESTROY_CRED, KHUI_MENUSTATE_CONSTANT | KHUI_MENUSTATE_SYSTEM, khui_menu_destroy_cred),
/* toolbars */
CONSTMENU(KHUI_TOOLBAR_STANDARD, KHUI_MENUSTATE_CONSTANT | KHUI_MENUSTATE_SYSTEM, khui_toolbar_standard),
diff --git a/src/windows/identity/uilib/actions.csv b/src/windows/identity/uilib/actions.csv
index 50c19d4f5d..88ac440523 100644
--- a/src/windows/identity/uilib/actions.csv
+++ b/src/windows/identity/uilib/actions.csv
@@ -7,6 +7,8 @@ KHUI_MENU_HELP,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_MENU_HELP,0,IDH_MENU_HELP,
KHUI_MENU_LAYOUT,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_MENU_LAYOUT,0,0,0
KHUI_MENU_TOOLBARS,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_MENU_TOOLBARS,0,0,0
KHUI_MENU_COLUMNS,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_CHOOSE_COLS,0,IDH_ACTION_CHOOSE_COLS,0
+KHUI_MENU_DESTROY_CRED,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_MENU_DESTROY_CRED,0,0,0
+KHUI_MENU_RENEW_CRED,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_MENU_RENEW_CRED,0,0,0
KHUI_ACTION_PROPERTIES,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_PROPERTIES,IDS_ACTIONT_PROPERTIES,IDH_ACTION_PROPERTIES,0
KHUI_ACTION_EXIT,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_EXIT,IDS_ACTIONT_EXIT,IDH_ACTION_EXIT,0
KHUI_ACTION_SET_DEF_ID,KHUI_ACTIONTYPE_TRIGGER | KHUI_ACTIONTYPE_TOGGLE,,0,0,0,0,0,IDS_ACTION_SET_DEF_ID,IDS_ACTIONT_SET_DEF_ID,IDH_ACTION_SET_DEF_ID,0
@@ -34,6 +36,8 @@ KHUI_ACTION_HELP_ABOUT,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_HELP_ABOUT,
KHUI_ACTION_OPEN_APP,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_OPEN_APP,0,0,0
KHUI_ACTION_CLOSE_APP,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_CLOSE_APP,0,0,0
KHUI_ACTION_IMPORT,KHUI_ACTIONTYPE_TRIGGER,,IDB_IMPORT,0,IDB_IMPORT_DIS,IDB_IMPORT_SM,IDB_IMPORT_SM_DIS,IDS_ACTION_IMPORT,IDS_ACTIONT_IMPORT,0,0
+KHUI_ACTION_DESTROY_ALL,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_DESTROY_ALL,0,0,0
+KHUI_ACTION_RENEW_ALL,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_RENEW_ALL,0,0,0
KHUI_PACTION_OK,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_PACTION_OK,0,0,0
KHUI_PACTION_CANCEL,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_PACTION_CANCEL,0,0,0
KHUI_PACTION_CLOSE,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_PACTION_CLOSE,0,0,0
diff --git a/src/windows/identity/uilib/khactiondef.h b/src/windows/identity/uilib/khactiondef.h
index 68bbf91379..31866ba275 100644
--- a/src/windows/identity/uilib/khactiondef.h
+++ b/src/windows/identity/uilib/khactiondef.h
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2005 Massachusetts Institute of Technology
+ * Copyright (c) 2007 Secure Endpoints Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -65,6 +66,9 @@
#define KHUI_ACTION_LAYOUT_CUST (KHUI_ACTION_BASE + 30)
#define KHUI_ACTION_OPT_APPEAR (KHUI_ACTION_BASE + 31)
#define KHUI_ACTION_LAYOUT_RELOAD (KHUI_ACTION_BASE + 32)
+#define KHUI_ACTION_RENEW_ALL (KHUI_ACTION_BASE + 33)
+#define KHUI_ACTION_DESTROY_ALL (KHUI_ACTION_BASE + 34)
+#define KHUI_ACTION_UICB (KHUI_ACTION_BASE + 35)
/*@}*/
/*! \name Pseudo actions
@@ -105,6 +109,7 @@ context.
#define KHUI_PACTION_PGUP (KHUI_PACTION_BASE + 26)
#define KHUI_PACTION_PGUP_EXTEND (KHUI_PACTION_BASE + 27)
#define KHUI_PACTION_PGDN_EXTEND (KHUI_PACTION_BASE + 28)
+
/*@}*/
/*! \name Menus
@@ -135,7 +140,9 @@ Stock menus.
#define KHUI_PMENU_TOK_SEL (KHUI_MENU_BASE + 10)
#define KHUI_PMENU_ID_SEL (KHUI_MENU_BASE + 11)
-/* Next menu: 14 */
+#define KHUI_MENU_DESTROY_CRED (KHUI_MENU_BASE + 16)
+#define KHUI_MENU_RENEW_CRED (KHUI_MENU_BASE + 17)
+
/*@}*/
/*! \name Toolbars
diff --git a/src/windows/identity/uilib/khuidefs.h b/src/windows/identity/uilib/khuidefs.h
index de28979257..7df605cc74 100644
--- a/src/windows/identity/uilib/khuidefs.h
+++ b/src/windows/identity/uilib/khuidefs.h
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2005 Massachusetts Institute of Technology
+ * Copyright (c) 2007 Secure Endpoints Inc.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -87,6 +88,12 @@ khm_get_lib_version(khm_version * libver, khm_ui_4 * apiver);
KHMEXP khm_ui_4 KHMAPI
khm_get_commctl_version(khm_version * pdvi);
+typedef khm_int32
+(KHMAPI *khm_ui_callback)(HWND hwnd_main_wnd, void * rock);
+
+KHMEXP khm_int32 KHMAPI
+khui_request_UI_callback(khm_ui_callback cb, void * rock);
+
/*!@}*/
#endif