From eb06a8e77810afeb718f7f42ece5759d4330d940 Mon Sep 17 00:00:00 2001 From: Tom Yu Date: Mon, 17 Oct 2011 19:34:08 +0000 Subject: [PATCH] Delete Network Identity Manager git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@25363 dc483132-0cff-0310-8789-dd5450dbe970 --- src/windows/identity/Makefile | 214 - src/windows/identity/apiversion.txt | 367 - src/windows/identity/config/Makefile | 147 - src/windows/identity/config/Makefile.w2k | 306 - src/windows/identity/config/Makefile.w32 | 344 - src/windows/identity/config/ccsv.pl | 134 - src/windows/identity/config/csvschema.cfg | 67 - .../identity/config/netidmgr_intver.h.in | 46 - .../identity/config/netidmgr_version.h.in | 62 - src/windows/identity/doc/Makefile | 71 - src/windows/identity/doc/cred_aquisition.h | 325 - src/windows/identity/doc/cred_data_types.h | 264 - src/windows/identity/doc/cred_main.h | 36 - src/windows/identity/doc/cred_msgs.h | 123 - src/windows/identity/doc/cred_prop_pages.h | 180 - src/windows/identity/doc/doxyfile.cfg | 1259 ---- src/windows/identity/doc/footer.html | 21 - src/windows/identity/doc/header.html | 6 - .../doc/images/credview-select-outline.jpg | Bin 16084 -> 0 bytes .../identity/doc/images/khimaira_logo.png | Bin 3970 -> 0 bytes .../doc/images/khimaira_logo_small.png | Bin 3970 -> 0 bytes .../doc/images/modules_plugins_krb5.png | Bin 22193 -> 0 bytes src/windows/identity/doc/main_page.h | 174 - src/windows/identity/doc/netidmgr.doc | Bin 2042368 -> 0 bytes src/windows/identity/doc/netidmgr.pdf | Bin 1565851 -> 0 bytes src/windows/identity/doc/plugin_framework.h | 241 - src/windows/identity/doc/plugin_locale.h | 107 - src/windows/identity/doc/plugin_main.h | 113 - src/windows/identity/doc/plugin_structure.h | 55 - src/windows/identity/doc/stylesheet.css | 387 -- src/windows/identity/doc/ui_actions.h | 30 - src/windows/identity/doc/ui_context.h | 188 - src/windows/identity/doc/ui_main.h | 36 - src/windows/identity/doc/ui_menus.h | 30 - src/windows/identity/help/Index.hhk | 9 - src/windows/identity/help/Makefile | 41 - .../identity/help/html/about_netidmgr.htm | 57 - src/windows/identity/help/html/act_chpw.htm | 35 - .../identity/help/html/act_destroy_creds.htm | 36 - .../identity/help/html/act_import_creds.htm | 31 - .../identity/help/html/act_new_creds.htm | 118 - .../identity/help/html/act_renew_creds.htm | 40 - .../identity/help/html/act_set_default.htm | 30 - src/windows/identity/help/html/bugs.htm | 33 - .../identity/help/html/cmdline_netidmgr.htm | 50 - .../identity/help/html/concept_cred_pro.htm | 38 - .../identity/help/html/concept_credential.htm | 31 - .../identity/help/html/concept_ident_pro.htm | 32 - .../identity/help/html/concept_identity.htm | 35 - src/windows/identity/help/html/concepts.htm | 48 - src/windows/identity/help/html/copyright.htm | 48 - src/windows/identity/help/html/howdoi.htm | 45 - .../help/html/images/appicon_empty.png | Bin 878 -> 0 bytes .../help/html/images/appicon_expired.png | Bin 1071 -> 0 bytes .../help/html/images/appicon_good.png | Bin 1065 -> 0 bytes .../help/html/images/appicon_warnexp.png | Bin 1036 -> 0 bytes .../help/html/images/appicon_warning.png | Bin 1064 -> 0 bytes .../help/html/images/flag-critical.bmp | Bin 822 -> 0 bytes .../help/html/images/flag-warning.bmp | Bin 822 -> 0 bytes .../help/html/images/flag_expired.bmp | Bin 774 -> 0 bytes .../help/html/images/flag_renewable.bmp | Bin 1334 -> 0 bytes .../identity/help/html/images/id-sm.bmp | Bin 822 -> 0 bytes .../identity/help/html/images/logo.jpg | Bin 2014 -> 0 bytes .../identity/help/html/images/logo_shade.jpg | Bin 1641 -> 0 bytes .../html/images/notification_icon_menu.png | Bin 8069 -> 0 bytes .../help/html/images/screen_app_icon.png | Bin 10789 -> 0 bytes .../help/html/images/screen_chng_pwd.png | Bin 10508 -> 0 bytes .../html/images/screen_config_appearance.png | Bin 20195 -> 0 bytes .../images/screen_config_cred_provider.png | Bin 26005 -> 0 bytes .../html/images/screen_config_general.png | Bin 30809 -> 0 bytes .../html/images/screen_config_global_krb4.png | Bin 20681 -> 0 bytes .../html/images/screen_config_global_krb5.png | Bin 21934 -> 0 bytes .../help/html/images/screen_config_ident.png | Bin 26360 -> 0 bytes .../html/images/screen_config_ident_krb4.png | Bin 18158 -> 0 bytes .../html/images/screen_config_ident_krb5.png | Bin 22456 -> 0 bytes .../images/screen_config_ident_provider.png | Bin 28809 -> 0 bytes .../help/html/images/screen_config_idents.png | Bin 23875 -> 0 bytes .../images/screen_config_notifications.png | Bin 17223 -> 0 bytes .../images/screen_config_plug_in_krb4.png | Bin 19313 -> 0 bytes .../images/screen_config_plug_in_krb5.png | Bin 21145 -> 0 bytes .../screen_config_plug_in_krb5_ccache.png | Bin 18848 -> 0 bytes .../screen_config_plug_in_krb5_realm.png | Bin 25097 -> 0 bytes .../html/images/screen_config_plug_ins.png | Bin 23714 -> 0 bytes .../help/html/images/screen_main_wnd.png | Bin 49149 -> 0 bytes .../html/images/screen_main_wnd_basic.png | Bin 24630 -> 0 bytes .../help/html/images/screen_menu_bar.png | Bin 871 -> 0 bytes .../html/images/screen_menu_credential.png | Bin 9870 -> 0 bytes .../help/html/images/screen_menu_file.png | Bin 2952 -> 0 bytes .../help/html/images/screen_menu_help.png | Bin 5812 -> 0 bytes .../help/html/images/screen_menu_options.png | Bin 4877 -> 0 bytes .../help/html/images/screen_menu_view.png | Bin 6386 -> 0 bytes .../html/images/screen_menu_view_cols.png | Bin 14875 -> 0 bytes .../help/html/images/screen_new_creds.png | Bin 11571 -> 0 bytes .../html/images/screen_new_creds_err01.png | Bin 11757 -> 0 bytes .../help/html/images/screen_new_creds_exp.png | Bin 23631 -> 0 bytes .../help/html/images/screen_tb_standard.png | Bin 10327 -> 0 bytes .../help/html/images/screen_tray_icon.png | Bin 5846 -> 0 bytes .../help/html/images/wdg_collapsed_hi.bmp | Bin 774 -> 0 bytes .../help/html/images/wdg_expanded_hi.bmp | Bin 774 -> 0 bytes .../help/html/images/wdg_stick_hi.bmp | Bin 774 -> 0 bytes .../help/html/images/wdg_stuck_hi.bmp | Bin 774 -> 0 bytes src/windows/identity/help/html/menu_all.htm | 41 - .../identity/help/html/menu_credential.htm | 81 - src/windows/identity/help/html/menu_file.htm | 45 - src/windows/identity/help/html/menu_help.htm | 54 - .../identity/help/html/menu_options.htm | 65 - src/windows/identity/help/html/menu_view.htm | 99 - src/windows/identity/help/html/nidmgr.css | 122 - .../identity/help/html/tb_standard.htm | 80 - src/windows/identity/help/html/template.htm | 11 - src/windows/identity/help/html/use_config.htm | 306 - src/windows/identity/help/html/use_icon.htm | 74 - src/windows/identity/help/html/use_layout.htm | 91 - src/windows/identity/help/html/use_start.htm | 70 - src/windows/identity/help/html/using.htm | 58 - src/windows/identity/help/html/welcome.htm | 130 - src/windows/identity/help/html/wnd_main.htm | 114 - src/windows/identity/help/khhelp.h | 33 - src/windows/identity/help/netidmgr.hhp | 35 - src/windows/identity/help/popups.txt | 1 - src/windows/identity/help/popups_newcreds.txt | 30 - src/windows/identity/help/popups_password.txt | 19 - src/windows/identity/help/toc.hhc | 144 - src/windows/identity/include/Makefile | 38 - src/windows/identity/include/khdefs.h | 243 - src/windows/identity/include/kherror.h | 185 - src/windows/identity/include/khlist.h | 214 - src/windows/identity/include/khmsgtypes.h | 817 --- src/windows/identity/include/netidmgr.h | 43 - src/windows/identity/kconfig/Makefile | 51 - src/windows/identity/kconfig/api.c | 2661 -------- src/windows/identity/kconfig/kconfig.h | 960 --- .../identity/kconfig/kconfiginternal.h | 131 - src/windows/identity/kconfig/kconfigmain.c | 37 - src/windows/identity/kconfig/registry.c | 27 - src/windows/identity/kconfig/test/utiltest.c | 207 - src/windows/identity/kcreddb/Makefile | 53 - src/windows/identity/kcreddb/attrib.c | 878 --- src/windows/identity/kcreddb/attrib.h | 55 - src/windows/identity/kcreddb/buf.c | 390 -- src/windows/identity/kcreddb/buf.h | 78 - src/windows/identity/kcreddb/credential.c | 1092 --- src/windows/identity/kcreddb/credential.h | 71 - src/windows/identity/kcreddb/credset.c | 1166 ---- src/windows/identity/kcreddb/credset.h | 75 - src/windows/identity/kcreddb/credtype.c | 408 -- src/windows/identity/kcreddb/credtype.h | 55 - src/windows/identity/kcreddb/identity.c | 1599 ----- src/windows/identity/kcreddb/identity.h | 60 - src/windows/identity/kcreddb/init.c | 91 - src/windows/identity/kcreddb/kcdbconfig.csv | 15 - src/windows/identity/kcreddb/kcreddb.h | 3329 --------- .../identity/kcreddb/kcreddbinternal.h | 63 - src/windows/identity/kcreddb/kcreddbmain.c | 40 - .../identity/kcreddb/lang/en_us/kcredres.rc | 130 - src/windows/identity/kcreddb/langres.h | 48 - src/windows/identity/kcreddb/resource.h | 27 - src/windows/identity/kcreddb/type.c | 1386 ---- src/windows/identity/kcreddb/type.h | 216 - src/windows/identity/kherr/Makefile | 44 - src/windows/identity/kherr/kherr.c | 1579 ----- src/windows/identity/kherr/kherr.h | 1126 ---- src/windows/identity/kherr/kherrinternal.h | 74 - src/windows/identity/kherr/kherrmain.c | 52 - src/windows/identity/kmm/Makefile | 55 - src/windows/identity/kmm/kmm.c | 192 - src/windows/identity/kmm/kmm.h | 1068 --- src/windows/identity/kmm/kmm_module.c | 676 -- src/windows/identity/kmm/kmm_plugin.c | 413 -- src/windows/identity/kmm/kmm_reg.c | 336 - src/windows/identity/kmm/kmm_registrar.c | 1034 --- src/windows/identity/kmm/kmmconfig.csv | 47 - src/windows/identity/kmm/kmminternal.h | 261 - src/windows/identity/kmm/kmmmain.c | 160 - src/windows/identity/kmm/kplugin.h | 146 - src/windows/identity/kmm/lang/kmm_msgs.mc | 259 - src/windows/identity/kmq/Makefile | 49 - src/windows/identity/kmq/consumer.c | 572 -- src/windows/identity/kmq/init.c | 310 - src/windows/identity/kmq/kmq.h | 713 -- src/windows/identity/kmq/kmqconfig.csv | 5 - src/windows/identity/kmq/kmqinternal.h | 241 - src/windows/identity/kmq/kmqmain.c | 47 - src/windows/identity/kmq/msgtype.c | 394 -- src/windows/identity/kmq/publisher.c | 564 -- src/windows/identity/nidmgrdll/Makefile | 126 - src/windows/identity/nidmgrdll/Makefile.w2k | 120 - src/windows/identity/nidmgrdll/dllmain.c | 114 - src/windows/identity/nidmgrdll/nidmgrdll.rc | 74 - src/windows/identity/plugins/common/Makefile | 44 - .../identity/plugins/common/dynimport.c | 485 -- .../identity/plugins/common/dynimport.h | 368 - .../identity/plugins/common/krb5common.c | 451 -- .../identity/plugins/common/krb5common.h | 56 - src/windows/identity/plugins/krb4/Makefile | 106 - .../identity/plugins/krb4/errorfuncs.c | 225 - .../identity/plugins/krb4/errorfuncs.h | 65 - .../identity/plugins/krb4/images/plugin.ico | Bin 7278 -> 0 bytes .../identity/plugins/krb4/krb4configdlg.c | 555 -- src/windows/identity/plugins/krb4/krb4funcs.c | 897 --- src/windows/identity/plugins/krb4/krb4funcs.h | 132 - src/windows/identity/plugins/krb4/krb4main.c | 157 - .../identity/plugins/krb4/krb4newcreds.c | 884 --- .../identity/plugins/krb4/krb4plugin.c | 297 - .../identity/plugins/krb4/krbconfig.csv | 17 - src/windows/identity/plugins/krb4/krbcred.h | 134 - .../plugins/krb4/lang/en_us/langres.rc | 205 - .../identity/plugins/krb4/lang/krb4_msgs.mc | 57 - src/windows/identity/plugins/krb4/langres.h | 49 - src/windows/identity/plugins/krb4/version.rc | 89 - src/windows/identity/plugins/krb5/Makefile | 114 - src/windows/identity/plugins/krb5/datarep.c | 414 -- src/windows/identity/plugins/krb5/datarep.h | 76 - .../identity/plugins/krb5/errorfuncs.c | 297 - .../identity/plugins/krb5/errorfuncs.h | 75 - .../identity/plugins/krb5/images/deleted.ico | Bin 1406 -> 0 bytes .../plugins/krb5/images/krb5plugin.ico | Bin 7278 -> 0 bytes .../identity/plugins/krb5/images/modified.ico | Bin 1406 -> 0 bytes .../identity/plugins/krb5/images/new.ico | Bin 1406 -> 0 bytes .../identity/plugins/krb5/images/normal.ico | Bin 1406 -> 0 bytes .../identity/plugins/krb5/krb5configcc.c | 582 -- .../identity/plugins/krb5/krb5configdlg.c | 2896 -------- .../identity/plugins/krb5/krb5configid.c | 366 - .../identity/plugins/krb5/krb5configids.c | 281 - src/windows/identity/plugins/krb5/krb5funcs.c | 3637 ---------- src/windows/identity/plugins/krb5/krb5funcs.h | 224 - .../identity/plugins/krb5/krb5identpro.c | 1861 ------ src/windows/identity/plugins/krb5/krb5main.c | 497 -- .../identity/plugins/krb5/krb5newcreds.c | 2925 -------- .../identity/plugins/krb5/krb5plugin.c | 265 - src/windows/identity/plugins/krb5/krb5props.c | 175 - .../identity/plugins/krb5/krbconfig.csv | 45 - src/windows/identity/plugins/krb5/krbcred.h | 243 - .../plugins/krb5/lang/en_us/langres.rc | 509 -- .../identity/plugins/krb5/lang/krb5_msgs.mc | 199 - src/windows/identity/plugins/krb5/langres.h | 216 - src/windows/identity/plugins/krb5/version.rc | 88 - .../sample/templates/credprov/Makefile | 278 - .../identity/sample/templates/credprov/README | 250 - .../sample/templates/credprov/config_id.c | 121 - .../sample/templates/credprov/config_ids.c | 99 - .../sample/templates/credprov/config_main.c | 103 - .../sample/templates/credprov/credacq.c | 408 -- .../sample/templates/credprov/credprov.h | 176 - .../sample/templates/credprov/credtype.c | 52 - .../templates/credprov/images/plugin.ico | Bin 9110 -> 0 bytes .../templates/credprov/lang/en_us/langres.rc | 204 - .../sample/templates/credprov/langres.h | 34 - .../identity/sample/templates/credprov/main.c | 171 - .../sample/templates/credprov/plugin.c | 382 -- .../sample/templates/credprov/proppage.c | 58 - .../sample/templates/credprov/version.rc | 94 - src/windows/identity/ui/Makefile | 109 - src/windows/identity/ui/Makefile.w2k | 91 - src/windows/identity/ui/aboutwnd.c | 154 - src/windows/identity/ui/aboutwnd.h | 33 - src/windows/identity/ui/addrchange.c | 93 - src/windows/identity/ui/addrchange.h | 36 - src/windows/identity/ui/appglobal.h | 163 - src/windows/identity/ui/appver.rc | 40 - src/windows/identity/ui/cfg_appear_wnd.c | 440 -- src/windows/identity/ui/cfg_general_wnd.c | 424 -- src/windows/identity/ui/cfg_identities_wnd.c | 1573 ----- src/windows/identity/ui/cfg_notif_wnd.c | 350 - src/windows/identity/ui/cfg_plugins_wnd.c | 654 -- src/windows/identity/ui/configwnd.c | 1243 ---- src/windows/identity/ui/configwnd.h | 88 - src/windows/identity/ui/credfuncs.c | 1415 ---- src/windows/identity/ui/credfuncs.h | 95 - src/windows/identity/ui/credwnd.c | 5952 ----------------- src/windows/identity/ui/credwnd.h | 306 - src/windows/identity/ui/debugfuncs.c | 256 - src/windows/identity/ui/debugfuncs.h | 37 - src/windows/identity/ui/htwnd.c | 1311 ---- src/windows/identity/ui/htwnd.h | 57 - .../identity/ui/images/app_notify_error.ico | Bin 2862 -> 0 bytes .../identity/ui/images/app_notify_info.ico | Bin 2862 -> 0 bytes .../identity/ui/images/app_notify_none.ico | Bin 2862 -> 0 bytes .../identity/ui/images/app_notify_warn.ico | Bin 2862 -> 0 bytes .../identity/ui/images/app_state_exp.ico | Bin 2862 -> 0 bytes .../identity/ui/images/app_state_ok.ico | Bin 2862 -> 0 bytes .../identity/ui/images/app_state_warn.ico | Bin 2862 -> 0 bytes .../identity/ui/images/cfg_applied.ico | Bin 1406 -> 0 bytes .../identity/ui/images/cfg_default.ico | Bin 1406 -> 0 bytes .../identity/ui/images/cfg_deleted.ico | Bin 1406 -> 0 bytes src/windows/identity/ui/images/cfg_mod.ico | Bin 1406 -> 0 bytes src/windows/identity/ui/images/cfg_plugin.ico | Bin 9110 -> 0 bytes .../identity/ui/images/cfg_plugin_dis.ico | Bin 8854 -> 0 bytes .../identity/ui/images/cfg_plugin_err.ico | Bin 8854 -> 0 bytes .../identity/ui/images/chpw-dis-sm.bmp | Bin 822 -> 0 bytes src/windows/identity/ui/images/chpw-dis.bmp | Bin 2430 -> 0 bytes src/windows/identity/ui/images/chpw-sm.bmp | Bin 822 -> 0 bytes src/windows/identity/ui/images/chpw.bmp | Bin 2430 -> 0 bytes src/windows/identity/ui/images/disabled.ico | Bin 2166 -> 0 bytes src/windows/identity/ui/images/enabled.ico | Bin 2166 -> 0 bytes .../identity/ui/images/flag-critical.bmp | Bin 822 -> 0 bytes .../identity/ui/images/flag-warning.bmp | Bin 822 -> 0 bytes .../identity/ui/images/flag_expired.bmp | Bin 774 -> 0 bytes .../identity/ui/images/flag_renewable.bmp | Bin 1334 -> 0 bytes src/windows/identity/ui/images/help-sm.bmp | Bin 822 -> 0 bytes src/windows/identity/ui/images/help.bmp | Bin 2430 -> 0 bytes .../identity/ui/images/id-delete-dis-sm.bmp | Bin 1014 -> 0 bytes .../identity/ui/images/id-delete-dis.bmp | Bin 3186 -> 0 bytes .../identity/ui/images/id-delete-sm.bmp | Bin 1014 -> 0 bytes src/windows/identity/ui/images/id-delete.bmp | Bin 3186 -> 0 bytes src/windows/identity/ui/images/id-dis-sm.bmp | Bin 822 -> 0 bytes src/windows/identity/ui/images/id-dis.bmp | Bin 3186 -> 0 bytes .../identity/ui/images/id-new-dis-sm.bmp | Bin 1014 -> 0 bytes src/windows/identity/ui/images/id-new-dis.bmp | Bin 3186 -> 0 bytes src/windows/identity/ui/images/id-new-sm.bmp | Bin 1014 -> 0 bytes src/windows/identity/ui/images/id-new.bmp | Bin 3186 -> 0 bytes .../identity/ui/images/id-refresh-dis.bmp | Bin 3186 -> 0 bytes .../identity/ui/images/id-refresh-sm-dis.bmp | Bin 1014 -> 0 bytes .../identity/ui/images/id-refresh-sm.bmp | Bin 1014 -> 0 bytes src/windows/identity/ui/images/id-refresh.bmp | Bin 3186 -> 0 bytes src/windows/identity/ui/images/id-sm.bmp | Bin 822 -> 0 bytes src/windows/identity/ui/images/id.bmp | Bin 3186 -> 0 bytes src/windows/identity/ui/images/id.ico | Bin 2862 -> 0 bytes src/windows/identity/ui/images/ident.png | Bin 423 -> 0 bytes src/windows/identity/ui/images/import-dis.bmp | Bin 2430 -> 0 bytes .../identity/ui/images/import-sm-dis.bmp | Bin 774 -> 0 bytes src/windows/identity/ui/images/import-sm.bmp | Bin 822 -> 0 bytes src/windows/identity/ui/images/import.bmp | Bin 2430 -> 0 bytes .../identity/ui/images/khimaira-cfg.bmp | Bin 30056 -> 0 bytes src/windows/identity/ui/images/logo_shade.bmp | Bin 30056 -> 0 bytes src/windows/identity/ui/images/main_app.ico | Bin 25214 -> 0 bytes .../identity/ui/images/tb-blank-small.bmp | Bin 774 -> 0 bytes src/windows/identity/ui/images/tb-blank.bmp | Bin 2430 -> 0 bytes src/windows/identity/ui/images/tb-space.bmp | Bin 2430 -> 0 bytes .../identity/ui/images/tk-delete-dis-sm.bmp | Bin 1014 -> 0 bytes .../identity/ui/images/tk-delete-dis.bmp | Bin 3186 -> 0 bytes .../identity/ui/images/tk-delete-sm.bmp | Bin 822 -> 0 bytes src/windows/identity/ui/images/tk-delete.bmp | Bin 2430 -> 0 bytes src/windows/identity/ui/images/tk-dis-sm.bmp | Bin 1014 -> 0 bytes src/windows/identity/ui/images/tk-dis.bmp | Bin 3186 -> 0 bytes .../identity/ui/images/tk-new-dis-sm.bmp | Bin 1014 -> 0 bytes src/windows/identity/ui/images/tk-new-dis.bmp | Bin 3186 -> 0 bytes src/windows/identity/ui/images/tk-new-sm.bmp | Bin 822 -> 0 bytes src/windows/identity/ui/images/tk-new.bmp | Bin 2430 -> 0 bytes .../identity/ui/images/tk-refresh-dis-sm.bmp | Bin 1014 -> 0 bytes .../identity/ui/images/tk-refresh-dis.bmp | Bin 3186 -> 0 bytes .../identity/ui/images/tk-refresh-sm.bmp | Bin 822 -> 0 bytes src/windows/identity/ui/images/tk-refresh.bmp | Bin 2430 -> 0 bytes src/windows/identity/ui/images/tk-sm.bmp | Bin 822 -> 0 bytes src/windows/identity/ui/images/tk.bmp | Bin 3186 -> 0 bytes .../identity/ui/images/vw-refresh-sm.bmp | Bin 822 -> 0 bytes src/windows/identity/ui/images/vw-refresh.bmp | Bin 2430 -> 0 bytes .../identity/ui/images/wdg_collapsed.bmp | Bin 774 -> 0 bytes .../identity/ui/images/wdg_collapsed_hi.bmp | Bin 774 -> 0 bytes .../identity/ui/images/wdg_credtype.bmp | Bin 1014 -> 0 bytes .../identity/ui/images/wdg_expanded.bmp | Bin 774 -> 0 bytes .../identity/ui/images/wdg_expanded_hi.bmp | Bin 774 -> 0 bytes src/windows/identity/ui/images/wdg_flag.bmp | Bin 1014 -> 0 bytes src/windows/identity/ui/images/wdg_stick.bmp | Bin 774 -> 0 bytes .../identity/ui/images/wdg_stick_hi.bmp | Bin 774 -> 0 bytes src/windows/identity/ui/images/wdg_stuck.bmp | Bin 774 -> 0 bytes .../identity/ui/images/wdg_stuck_hi.bmp | Bin 774 -> 0 bytes src/windows/identity/ui/khmapp.h | 70 - .../identity/ui/lang/en_us/cmdline.rtf | Bin 1252 -> 0 bytes src/windows/identity/ui/lang/en_us/khapp.rc | 869 --- src/windows/identity/ui/main.c | 1075 --- src/windows/identity/ui/mainmenu.c | 1233 ---- src/windows/identity/ui/mainmenu.h | 68 - src/windows/identity/ui/mainwnd.c | 1380 ---- src/windows/identity/ui/mainwnd.h | 82 - src/windows/identity/ui/makeacceldef.pl | 29 - src/windows/identity/ui/makeactiondef.pl | 29 - .../identity/ui/netidmgr.exe.manifest.i386 | 22 - .../identity/ui/netidmgr.manifest.amd64.vc7 | 22 - .../ui/netidmgr.manifest.amd64.vc7.debug | 22 - .../identity/ui/netidmgr.manifest.amd64.vc8 | 31 - .../ui/netidmgr.manifest.amd64.vc8.debug | 31 - .../identity/ui/netidmgr.manifest.i386.vc7 | 22 - .../ui/netidmgr.manifest.i386.vc7.debug | 22 - .../identity/ui/netidmgr.manifest.i386.vc8 | 31 - .../ui/netidmgr.manifest.i386.vc8.debug | 31 - src/windows/identity/ui/newcredwnd.c | 3034 --------- src/windows/identity/ui/newcredwnd.h | 193 - src/windows/identity/ui/notifier.c | 3173 --------- src/windows/identity/ui/notifier.h | 69 - src/windows/identity/ui/passwnd.c | 133 - src/windows/identity/ui/passwnd.h | 39 - src/windows/identity/ui/propertywnd.c | 254 - src/windows/identity/ui/propertywnd.h | 36 - src/windows/identity/ui/reqdaemon.c | 453 -- src/windows/identity/ui/reqdaemon.h | 42 - src/windows/identity/ui/resource.h | 421 -- src/windows/identity/ui/statusbar.c | 206 - src/windows/identity/ui/statusbar.h | 55 - src/windows/identity/ui/taskbar.c | 87 - src/windows/identity/ui/taskbar.h | 38 - src/windows/identity/ui/timer.c | 1015 --- src/windows/identity/ui/timer.h | 100 - src/windows/identity/ui/toolbar.c | 471 -- src/windows/identity/ui/toolbar.h | 52 - src/windows/identity/ui/uiconfig.csv | 273 - src/windows/identity/uilib/Makefile | 68 - src/windows/identity/uilib/accel.csv | 26 - src/windows/identity/uilib/acceldef.cfg | 51 - src/windows/identity/uilib/action.c | 1672 ----- src/windows/identity/uilib/actiondef.cfg | 67 - src/windows/identity/uilib/actions.csv | 55 - src/windows/identity/uilib/alert.c | 440 -- src/windows/identity/uilib/configui.c | 1088 --- src/windows/identity/uilib/configui.h | 74 - src/windows/identity/uilib/creddlg.c | 719 -- src/windows/identity/uilib/intaction.h | 112 - src/windows/identity/uilib/intalert.h | 136 - src/windows/identity/uilib/khaction.h | 1005 --- src/windows/identity/uilib/khactiondef.h | 170 - src/windows/identity/uilib/khalerts.h | 403 -- src/windows/identity/uilib/khconfigui.h | 627 -- src/windows/identity/uilib/khhtlink.h | 77 - src/windows/identity/uilib/khnewcred.h | 1132 ---- src/windows/identity/uilib/khprops.h | 209 - src/windows/identity/uilib/khremote.h | 84 - src/windows/identity/uilib/khrescache.h | 100 - src/windows/identity/uilib/khtracker.h | 114 - src/windows/identity/uilib/khuidefs.h | 146 - src/windows/identity/uilib/propsheet.c | 232 - src/windows/identity/uilib/propwnd.c | 39 - src/windows/identity/uilib/rescache.c | 304 - src/windows/identity/uilib/trackerwnd.c | 474 -- src/windows/identity/uilib/uibind.c | 59 - src/windows/identity/uilib/uilibmain.c | 46 - src/windows/identity/uilib/version.c | 85 - src/windows/identity/util/Makefile | 49 - src/windows/identity/util/hashtable.c | 173 - src/windows/identity/util/hashtable.h | 231 - src/windows/identity/util/mstring.c | 512 -- src/windows/identity/util/mstring.h | 361 - src/windows/identity/util/perfstat.c | 459 -- src/windows/identity/util/perfstat.h | 74 - src/windows/identity/util/sync.c | 132 - src/windows/identity/util/sync.h | 128 - src/windows/identity/util/utils.h | 37 - 436 files changed, 101374 deletions(-) delete mode 100644 src/windows/identity/Makefile delete mode 100644 src/windows/identity/apiversion.txt delete mode 100644 src/windows/identity/config/Makefile delete mode 100644 src/windows/identity/config/Makefile.w2k delete mode 100644 src/windows/identity/config/Makefile.w32 delete mode 100644 src/windows/identity/config/ccsv.pl delete mode 100644 src/windows/identity/config/csvschema.cfg delete mode 100644 src/windows/identity/config/netidmgr_intver.h.in delete mode 100644 src/windows/identity/config/netidmgr_version.h.in delete mode 100644 src/windows/identity/doc/Makefile delete mode 100644 src/windows/identity/doc/cred_aquisition.h delete mode 100644 src/windows/identity/doc/cred_data_types.h delete mode 100644 src/windows/identity/doc/cred_main.h delete mode 100644 src/windows/identity/doc/cred_msgs.h delete mode 100644 src/windows/identity/doc/cred_prop_pages.h delete mode 100644 src/windows/identity/doc/doxyfile.cfg delete mode 100644 src/windows/identity/doc/footer.html delete mode 100644 src/windows/identity/doc/header.html delete mode 100644 src/windows/identity/doc/images/credview-select-outline.jpg delete mode 100644 src/windows/identity/doc/images/khimaira_logo.png delete mode 100644 src/windows/identity/doc/images/khimaira_logo_small.png delete mode 100644 src/windows/identity/doc/images/modules_plugins_krb5.png delete mode 100644 src/windows/identity/doc/main_page.h delete mode 100755 src/windows/identity/doc/netidmgr.doc delete mode 100755 src/windows/identity/doc/netidmgr.pdf delete mode 100644 src/windows/identity/doc/plugin_framework.h delete mode 100644 src/windows/identity/doc/plugin_locale.h delete mode 100644 src/windows/identity/doc/plugin_main.h delete mode 100644 src/windows/identity/doc/plugin_structure.h delete mode 100644 src/windows/identity/doc/stylesheet.css delete mode 100644 src/windows/identity/doc/ui_actions.h delete mode 100644 src/windows/identity/doc/ui_context.h delete mode 100644 src/windows/identity/doc/ui_main.h delete mode 100644 src/windows/identity/doc/ui_menus.h delete mode 100644 src/windows/identity/help/Index.hhk delete mode 100644 src/windows/identity/help/Makefile delete mode 100644 src/windows/identity/help/html/about_netidmgr.htm delete mode 100644 src/windows/identity/help/html/act_chpw.htm delete mode 100644 src/windows/identity/help/html/act_destroy_creds.htm delete mode 100644 src/windows/identity/help/html/act_import_creds.htm delete mode 100644 src/windows/identity/help/html/act_new_creds.htm delete mode 100644 src/windows/identity/help/html/act_renew_creds.htm delete mode 100644 src/windows/identity/help/html/act_set_default.htm delete mode 100644 src/windows/identity/help/html/bugs.htm delete mode 100644 src/windows/identity/help/html/cmdline_netidmgr.htm delete mode 100644 src/windows/identity/help/html/concept_cred_pro.htm delete mode 100644 src/windows/identity/help/html/concept_credential.htm delete mode 100644 src/windows/identity/help/html/concept_ident_pro.htm delete mode 100644 src/windows/identity/help/html/concept_identity.htm delete mode 100644 src/windows/identity/help/html/concepts.htm delete mode 100644 src/windows/identity/help/html/copyright.htm delete mode 100644 src/windows/identity/help/html/howdoi.htm delete mode 100644 src/windows/identity/help/html/images/appicon_empty.png delete mode 100644 src/windows/identity/help/html/images/appicon_expired.png delete mode 100644 src/windows/identity/help/html/images/appicon_good.png delete mode 100644 src/windows/identity/help/html/images/appicon_warnexp.png delete mode 100644 src/windows/identity/help/html/images/appicon_warning.png delete mode 100644 src/windows/identity/help/html/images/flag-critical.bmp delete mode 100644 src/windows/identity/help/html/images/flag-warning.bmp delete mode 100644 src/windows/identity/help/html/images/flag_expired.bmp delete mode 100644 src/windows/identity/help/html/images/flag_renewable.bmp delete mode 100644 src/windows/identity/help/html/images/id-sm.bmp delete mode 100644 src/windows/identity/help/html/images/logo.jpg delete mode 100644 src/windows/identity/help/html/images/logo_shade.jpg delete mode 100644 src/windows/identity/help/html/images/notification_icon_menu.png delete mode 100644 src/windows/identity/help/html/images/screen_app_icon.png delete mode 100644 src/windows/identity/help/html/images/screen_chng_pwd.png delete mode 100644 src/windows/identity/help/html/images/screen_config_appearance.png delete mode 100644 src/windows/identity/help/html/images/screen_config_cred_provider.png delete mode 100644 src/windows/identity/help/html/images/screen_config_general.png delete mode 100644 src/windows/identity/help/html/images/screen_config_global_krb4.png delete mode 100644 src/windows/identity/help/html/images/screen_config_global_krb5.png delete mode 100644 src/windows/identity/help/html/images/screen_config_ident.png delete mode 100644 src/windows/identity/help/html/images/screen_config_ident_krb4.png delete mode 100644 src/windows/identity/help/html/images/screen_config_ident_krb5.png delete mode 100644 src/windows/identity/help/html/images/screen_config_ident_provider.png delete mode 100644 src/windows/identity/help/html/images/screen_config_idents.png delete mode 100644 src/windows/identity/help/html/images/screen_config_notifications.png delete mode 100644 src/windows/identity/help/html/images/screen_config_plug_in_krb4.png delete mode 100644 src/windows/identity/help/html/images/screen_config_plug_in_krb5.png delete mode 100644 src/windows/identity/help/html/images/screen_config_plug_in_krb5_ccache.png delete mode 100644 src/windows/identity/help/html/images/screen_config_plug_in_krb5_realm.png delete mode 100644 src/windows/identity/help/html/images/screen_config_plug_ins.png delete mode 100644 src/windows/identity/help/html/images/screen_main_wnd.png delete mode 100644 src/windows/identity/help/html/images/screen_main_wnd_basic.png delete mode 100644 src/windows/identity/help/html/images/screen_menu_bar.png delete mode 100644 src/windows/identity/help/html/images/screen_menu_credential.png delete mode 100644 src/windows/identity/help/html/images/screen_menu_file.png delete mode 100644 src/windows/identity/help/html/images/screen_menu_help.png delete mode 100644 src/windows/identity/help/html/images/screen_menu_options.png delete mode 100644 src/windows/identity/help/html/images/screen_menu_view.png delete mode 100644 src/windows/identity/help/html/images/screen_menu_view_cols.png delete mode 100644 src/windows/identity/help/html/images/screen_new_creds.png delete mode 100644 src/windows/identity/help/html/images/screen_new_creds_err01.png delete mode 100644 src/windows/identity/help/html/images/screen_new_creds_exp.png delete mode 100644 src/windows/identity/help/html/images/screen_tb_standard.png delete mode 100644 src/windows/identity/help/html/images/screen_tray_icon.png delete mode 100644 src/windows/identity/help/html/images/wdg_collapsed_hi.bmp delete mode 100644 src/windows/identity/help/html/images/wdg_expanded_hi.bmp delete mode 100644 src/windows/identity/help/html/images/wdg_stick_hi.bmp delete mode 100644 src/windows/identity/help/html/images/wdg_stuck_hi.bmp delete mode 100644 src/windows/identity/help/html/menu_all.htm delete mode 100644 src/windows/identity/help/html/menu_credential.htm delete mode 100644 src/windows/identity/help/html/menu_file.htm delete mode 100644 src/windows/identity/help/html/menu_help.htm delete mode 100644 src/windows/identity/help/html/menu_options.htm delete mode 100644 src/windows/identity/help/html/menu_view.htm delete mode 100644 src/windows/identity/help/html/nidmgr.css delete mode 100644 src/windows/identity/help/html/tb_standard.htm delete mode 100644 src/windows/identity/help/html/template.htm delete mode 100644 src/windows/identity/help/html/use_config.htm delete mode 100644 src/windows/identity/help/html/use_icon.htm delete mode 100644 src/windows/identity/help/html/use_layout.htm delete mode 100644 src/windows/identity/help/html/use_start.htm delete mode 100644 src/windows/identity/help/html/using.htm delete mode 100644 src/windows/identity/help/html/welcome.htm delete mode 100644 src/windows/identity/help/html/wnd_main.htm delete mode 100644 src/windows/identity/help/khhelp.h delete mode 100644 src/windows/identity/help/netidmgr.hhp delete mode 100644 src/windows/identity/help/popups.txt delete mode 100644 src/windows/identity/help/popups_newcreds.txt delete mode 100644 src/windows/identity/help/popups_password.txt delete mode 100644 src/windows/identity/help/toc.hhc delete mode 100644 src/windows/identity/include/Makefile delete mode 100644 src/windows/identity/include/khdefs.h delete mode 100644 src/windows/identity/include/kherror.h delete mode 100644 src/windows/identity/include/khlist.h delete mode 100644 src/windows/identity/include/khmsgtypes.h delete mode 100644 src/windows/identity/include/netidmgr.h delete mode 100644 src/windows/identity/kconfig/Makefile delete mode 100644 src/windows/identity/kconfig/api.c delete mode 100644 src/windows/identity/kconfig/kconfig.h delete mode 100644 src/windows/identity/kconfig/kconfiginternal.h delete mode 100644 src/windows/identity/kconfig/kconfigmain.c delete mode 100644 src/windows/identity/kconfig/registry.c delete mode 100644 src/windows/identity/kconfig/test/utiltest.c delete mode 100644 src/windows/identity/kcreddb/Makefile delete mode 100644 src/windows/identity/kcreddb/attrib.c delete mode 100644 src/windows/identity/kcreddb/attrib.h delete mode 100644 src/windows/identity/kcreddb/buf.c delete mode 100644 src/windows/identity/kcreddb/buf.h delete mode 100644 src/windows/identity/kcreddb/credential.c delete mode 100644 src/windows/identity/kcreddb/credential.h delete mode 100644 src/windows/identity/kcreddb/credset.c delete mode 100644 src/windows/identity/kcreddb/credset.h delete mode 100644 src/windows/identity/kcreddb/credtype.c delete mode 100644 src/windows/identity/kcreddb/credtype.h delete mode 100644 src/windows/identity/kcreddb/identity.c delete mode 100644 src/windows/identity/kcreddb/identity.h delete mode 100644 src/windows/identity/kcreddb/init.c delete mode 100644 src/windows/identity/kcreddb/kcdbconfig.csv delete mode 100644 src/windows/identity/kcreddb/kcreddb.h delete mode 100644 src/windows/identity/kcreddb/kcreddbinternal.h delete mode 100644 src/windows/identity/kcreddb/kcreddbmain.c delete mode 100644 src/windows/identity/kcreddb/lang/en_us/kcredres.rc delete mode 100644 src/windows/identity/kcreddb/langres.h delete mode 100644 src/windows/identity/kcreddb/resource.h delete mode 100644 src/windows/identity/kcreddb/type.c delete mode 100644 src/windows/identity/kcreddb/type.h delete mode 100644 src/windows/identity/kherr/Makefile delete mode 100644 src/windows/identity/kherr/kherr.c delete mode 100644 src/windows/identity/kherr/kherr.h delete mode 100644 src/windows/identity/kherr/kherrinternal.h delete mode 100644 src/windows/identity/kherr/kherrmain.c delete mode 100644 src/windows/identity/kmm/Makefile delete mode 100644 src/windows/identity/kmm/kmm.c delete mode 100644 src/windows/identity/kmm/kmm.h delete mode 100644 src/windows/identity/kmm/kmm_module.c delete mode 100644 src/windows/identity/kmm/kmm_plugin.c delete mode 100644 src/windows/identity/kmm/kmm_reg.c delete mode 100644 src/windows/identity/kmm/kmm_registrar.c delete mode 100644 src/windows/identity/kmm/kmmconfig.csv delete mode 100644 src/windows/identity/kmm/kmminternal.h delete mode 100644 src/windows/identity/kmm/kmmmain.c delete mode 100644 src/windows/identity/kmm/kplugin.h delete mode 100644 src/windows/identity/kmm/lang/kmm_msgs.mc delete mode 100644 src/windows/identity/kmq/Makefile delete mode 100644 src/windows/identity/kmq/consumer.c delete mode 100644 src/windows/identity/kmq/init.c delete mode 100644 src/windows/identity/kmq/kmq.h delete mode 100644 src/windows/identity/kmq/kmqconfig.csv delete mode 100644 src/windows/identity/kmq/kmqinternal.h delete mode 100644 src/windows/identity/kmq/kmqmain.c delete mode 100644 src/windows/identity/kmq/msgtype.c delete mode 100644 src/windows/identity/kmq/publisher.c delete mode 100644 src/windows/identity/nidmgrdll/Makefile delete mode 100644 src/windows/identity/nidmgrdll/Makefile.w2k delete mode 100644 src/windows/identity/nidmgrdll/dllmain.c delete mode 100644 src/windows/identity/nidmgrdll/nidmgrdll.rc delete mode 100644 src/windows/identity/plugins/common/Makefile delete mode 100644 src/windows/identity/plugins/common/dynimport.c delete mode 100644 src/windows/identity/plugins/common/dynimport.h delete mode 100644 src/windows/identity/plugins/common/krb5common.c delete mode 100644 src/windows/identity/plugins/common/krb5common.h delete mode 100644 src/windows/identity/plugins/krb4/Makefile delete mode 100644 src/windows/identity/plugins/krb4/errorfuncs.c delete mode 100644 src/windows/identity/plugins/krb4/errorfuncs.h delete mode 100644 src/windows/identity/plugins/krb4/images/plugin.ico delete mode 100644 src/windows/identity/plugins/krb4/krb4configdlg.c delete mode 100644 src/windows/identity/plugins/krb4/krb4funcs.c delete mode 100644 src/windows/identity/plugins/krb4/krb4funcs.h delete mode 100644 src/windows/identity/plugins/krb4/krb4main.c delete mode 100644 src/windows/identity/plugins/krb4/krb4newcreds.c delete mode 100644 src/windows/identity/plugins/krb4/krb4plugin.c delete mode 100644 src/windows/identity/plugins/krb4/krbconfig.csv delete mode 100644 src/windows/identity/plugins/krb4/krbcred.h delete mode 100644 src/windows/identity/plugins/krb4/lang/en_us/langres.rc delete mode 100644 src/windows/identity/plugins/krb4/lang/krb4_msgs.mc delete mode 100644 src/windows/identity/plugins/krb4/langres.h delete mode 100644 src/windows/identity/plugins/krb4/version.rc delete mode 100644 src/windows/identity/plugins/krb5/Makefile delete mode 100644 src/windows/identity/plugins/krb5/datarep.c delete mode 100644 src/windows/identity/plugins/krb5/datarep.h delete mode 100644 src/windows/identity/plugins/krb5/errorfuncs.c delete mode 100644 src/windows/identity/plugins/krb5/errorfuncs.h delete mode 100644 src/windows/identity/plugins/krb5/images/deleted.ico delete mode 100644 src/windows/identity/plugins/krb5/images/krb5plugin.ico delete mode 100644 src/windows/identity/plugins/krb5/images/modified.ico delete mode 100644 src/windows/identity/plugins/krb5/images/new.ico delete mode 100644 src/windows/identity/plugins/krb5/images/normal.ico delete mode 100644 src/windows/identity/plugins/krb5/krb5configcc.c delete mode 100644 src/windows/identity/plugins/krb5/krb5configdlg.c delete mode 100644 src/windows/identity/plugins/krb5/krb5configid.c delete mode 100644 src/windows/identity/plugins/krb5/krb5configids.c delete mode 100644 src/windows/identity/plugins/krb5/krb5funcs.c delete mode 100644 src/windows/identity/plugins/krb5/krb5funcs.h delete mode 100644 src/windows/identity/plugins/krb5/krb5identpro.c delete mode 100644 src/windows/identity/plugins/krb5/krb5main.c delete mode 100644 src/windows/identity/plugins/krb5/krb5newcreds.c delete mode 100644 src/windows/identity/plugins/krb5/krb5plugin.c delete mode 100644 src/windows/identity/plugins/krb5/krb5props.c delete mode 100644 src/windows/identity/plugins/krb5/krbconfig.csv delete mode 100644 src/windows/identity/plugins/krb5/krbcred.h delete mode 100644 src/windows/identity/plugins/krb5/lang/en_us/langres.rc delete mode 100644 src/windows/identity/plugins/krb5/lang/krb5_msgs.mc delete mode 100644 src/windows/identity/plugins/krb5/langres.h delete mode 100644 src/windows/identity/plugins/krb5/version.rc delete mode 100644 src/windows/identity/sample/templates/credprov/Makefile delete mode 100644 src/windows/identity/sample/templates/credprov/README delete mode 100644 src/windows/identity/sample/templates/credprov/config_id.c delete mode 100644 src/windows/identity/sample/templates/credprov/config_ids.c delete mode 100644 src/windows/identity/sample/templates/credprov/config_main.c delete mode 100644 src/windows/identity/sample/templates/credprov/credacq.c delete mode 100644 src/windows/identity/sample/templates/credprov/credprov.h delete mode 100644 src/windows/identity/sample/templates/credprov/credtype.c delete mode 100644 src/windows/identity/sample/templates/credprov/images/plugin.ico delete mode 100644 src/windows/identity/sample/templates/credprov/lang/en_us/langres.rc delete mode 100644 src/windows/identity/sample/templates/credprov/langres.h delete mode 100644 src/windows/identity/sample/templates/credprov/main.c delete mode 100644 src/windows/identity/sample/templates/credprov/plugin.c delete mode 100644 src/windows/identity/sample/templates/credprov/proppage.c delete mode 100644 src/windows/identity/sample/templates/credprov/version.rc delete mode 100644 src/windows/identity/ui/Makefile delete mode 100644 src/windows/identity/ui/Makefile.w2k delete mode 100644 src/windows/identity/ui/aboutwnd.c delete mode 100644 src/windows/identity/ui/aboutwnd.h delete mode 100644 src/windows/identity/ui/addrchange.c delete mode 100644 src/windows/identity/ui/addrchange.h delete mode 100644 src/windows/identity/ui/appglobal.h delete mode 100644 src/windows/identity/ui/appver.rc delete mode 100644 src/windows/identity/ui/cfg_appear_wnd.c delete mode 100644 src/windows/identity/ui/cfg_general_wnd.c delete mode 100644 src/windows/identity/ui/cfg_identities_wnd.c delete mode 100644 src/windows/identity/ui/cfg_notif_wnd.c delete mode 100644 src/windows/identity/ui/cfg_plugins_wnd.c delete mode 100644 src/windows/identity/ui/configwnd.c delete mode 100644 src/windows/identity/ui/configwnd.h delete mode 100644 src/windows/identity/ui/credfuncs.c delete mode 100644 src/windows/identity/ui/credfuncs.h delete mode 100644 src/windows/identity/ui/credwnd.c delete mode 100644 src/windows/identity/ui/credwnd.h delete mode 100644 src/windows/identity/ui/debugfuncs.c delete mode 100644 src/windows/identity/ui/debugfuncs.h delete mode 100644 src/windows/identity/ui/htwnd.c delete mode 100644 src/windows/identity/ui/htwnd.h delete mode 100644 src/windows/identity/ui/images/app_notify_error.ico delete mode 100644 src/windows/identity/ui/images/app_notify_info.ico delete mode 100644 src/windows/identity/ui/images/app_notify_none.ico delete mode 100644 src/windows/identity/ui/images/app_notify_warn.ico delete mode 100644 src/windows/identity/ui/images/app_state_exp.ico delete mode 100644 src/windows/identity/ui/images/app_state_ok.ico delete mode 100644 src/windows/identity/ui/images/app_state_warn.ico delete mode 100644 src/windows/identity/ui/images/cfg_applied.ico delete mode 100644 src/windows/identity/ui/images/cfg_default.ico delete mode 100644 src/windows/identity/ui/images/cfg_deleted.ico delete mode 100644 src/windows/identity/ui/images/cfg_mod.ico delete mode 100644 src/windows/identity/ui/images/cfg_plugin.ico delete mode 100644 src/windows/identity/ui/images/cfg_plugin_dis.ico delete mode 100644 src/windows/identity/ui/images/cfg_plugin_err.ico delete mode 100644 src/windows/identity/ui/images/chpw-dis-sm.bmp delete mode 100644 src/windows/identity/ui/images/chpw-dis.bmp delete mode 100644 src/windows/identity/ui/images/chpw-sm.bmp delete mode 100644 src/windows/identity/ui/images/chpw.bmp delete mode 100644 src/windows/identity/ui/images/disabled.ico delete mode 100644 src/windows/identity/ui/images/enabled.ico delete mode 100644 src/windows/identity/ui/images/flag-critical.bmp delete mode 100644 src/windows/identity/ui/images/flag-warning.bmp delete mode 100644 src/windows/identity/ui/images/flag_expired.bmp delete mode 100644 src/windows/identity/ui/images/flag_renewable.bmp delete mode 100644 src/windows/identity/ui/images/help-sm.bmp delete mode 100644 src/windows/identity/ui/images/help.bmp delete mode 100644 src/windows/identity/ui/images/id-delete-dis-sm.bmp delete mode 100644 src/windows/identity/ui/images/id-delete-dis.bmp delete mode 100644 src/windows/identity/ui/images/id-delete-sm.bmp delete mode 100644 src/windows/identity/ui/images/id-delete.bmp delete mode 100644 src/windows/identity/ui/images/id-dis-sm.bmp delete mode 100644 src/windows/identity/ui/images/id-dis.bmp delete mode 100644 src/windows/identity/ui/images/id-new-dis-sm.bmp delete mode 100644 src/windows/identity/ui/images/id-new-dis.bmp delete mode 100644 src/windows/identity/ui/images/id-new-sm.bmp delete mode 100644 src/windows/identity/ui/images/id-new.bmp delete mode 100644 src/windows/identity/ui/images/id-refresh-dis.bmp delete mode 100644 src/windows/identity/ui/images/id-refresh-sm-dis.bmp delete mode 100644 src/windows/identity/ui/images/id-refresh-sm.bmp delete mode 100644 src/windows/identity/ui/images/id-refresh.bmp delete mode 100644 src/windows/identity/ui/images/id-sm.bmp delete mode 100644 src/windows/identity/ui/images/id.bmp delete mode 100644 src/windows/identity/ui/images/id.ico delete mode 100644 src/windows/identity/ui/images/ident.png delete mode 100644 src/windows/identity/ui/images/import-dis.bmp delete mode 100644 src/windows/identity/ui/images/import-sm-dis.bmp delete mode 100644 src/windows/identity/ui/images/import-sm.bmp delete mode 100644 src/windows/identity/ui/images/import.bmp delete mode 100644 src/windows/identity/ui/images/khimaira-cfg.bmp delete mode 100644 src/windows/identity/ui/images/logo_shade.bmp delete mode 100644 src/windows/identity/ui/images/main_app.ico delete mode 100644 src/windows/identity/ui/images/tb-blank-small.bmp delete mode 100644 src/windows/identity/ui/images/tb-blank.bmp delete mode 100644 src/windows/identity/ui/images/tb-space.bmp delete mode 100644 src/windows/identity/ui/images/tk-delete-dis-sm.bmp delete mode 100644 src/windows/identity/ui/images/tk-delete-dis.bmp delete mode 100644 src/windows/identity/ui/images/tk-delete-sm.bmp delete mode 100644 src/windows/identity/ui/images/tk-delete.bmp delete mode 100644 src/windows/identity/ui/images/tk-dis-sm.bmp delete mode 100644 src/windows/identity/ui/images/tk-dis.bmp delete mode 100644 src/windows/identity/ui/images/tk-new-dis-sm.bmp delete mode 100644 src/windows/identity/ui/images/tk-new-dis.bmp delete mode 100644 src/windows/identity/ui/images/tk-new-sm.bmp delete mode 100644 src/windows/identity/ui/images/tk-new.bmp delete mode 100644 src/windows/identity/ui/images/tk-refresh-dis-sm.bmp delete mode 100644 src/windows/identity/ui/images/tk-refresh-dis.bmp delete mode 100644 src/windows/identity/ui/images/tk-refresh-sm.bmp delete mode 100644 src/windows/identity/ui/images/tk-refresh.bmp delete mode 100644 src/windows/identity/ui/images/tk-sm.bmp delete mode 100644 src/windows/identity/ui/images/tk.bmp delete mode 100644 src/windows/identity/ui/images/vw-refresh-sm.bmp delete mode 100644 src/windows/identity/ui/images/vw-refresh.bmp delete mode 100644 src/windows/identity/ui/images/wdg_collapsed.bmp delete mode 100644 src/windows/identity/ui/images/wdg_collapsed_hi.bmp delete mode 100644 src/windows/identity/ui/images/wdg_credtype.bmp delete mode 100644 src/windows/identity/ui/images/wdg_expanded.bmp delete mode 100644 src/windows/identity/ui/images/wdg_expanded_hi.bmp delete mode 100644 src/windows/identity/ui/images/wdg_flag.bmp delete mode 100644 src/windows/identity/ui/images/wdg_stick.bmp delete mode 100644 src/windows/identity/ui/images/wdg_stick_hi.bmp delete mode 100644 src/windows/identity/ui/images/wdg_stuck.bmp delete mode 100644 src/windows/identity/ui/images/wdg_stuck_hi.bmp delete mode 100644 src/windows/identity/ui/khmapp.h delete mode 100644 src/windows/identity/ui/lang/en_us/cmdline.rtf delete mode 100644 src/windows/identity/ui/lang/en_us/khapp.rc delete mode 100644 src/windows/identity/ui/main.c delete mode 100644 src/windows/identity/ui/mainmenu.c delete mode 100644 src/windows/identity/ui/mainmenu.h delete mode 100644 src/windows/identity/ui/mainwnd.c delete mode 100644 src/windows/identity/ui/mainwnd.h delete mode 100644 src/windows/identity/ui/makeacceldef.pl delete mode 100644 src/windows/identity/ui/makeactiondef.pl delete mode 100644 src/windows/identity/ui/netidmgr.exe.manifest.i386 delete mode 100644 src/windows/identity/ui/netidmgr.manifest.amd64.vc7 delete mode 100644 src/windows/identity/ui/netidmgr.manifest.amd64.vc7.debug delete mode 100644 src/windows/identity/ui/netidmgr.manifest.amd64.vc8 delete mode 100644 src/windows/identity/ui/netidmgr.manifest.amd64.vc8.debug delete mode 100644 src/windows/identity/ui/netidmgr.manifest.i386.vc7 delete mode 100644 src/windows/identity/ui/netidmgr.manifest.i386.vc7.debug delete mode 100644 src/windows/identity/ui/netidmgr.manifest.i386.vc8 delete mode 100644 src/windows/identity/ui/netidmgr.manifest.i386.vc8.debug delete mode 100644 src/windows/identity/ui/newcredwnd.c delete mode 100644 src/windows/identity/ui/newcredwnd.h delete mode 100644 src/windows/identity/ui/notifier.c delete mode 100644 src/windows/identity/ui/notifier.h delete mode 100644 src/windows/identity/ui/passwnd.c delete mode 100644 src/windows/identity/ui/passwnd.h delete mode 100644 src/windows/identity/ui/propertywnd.c delete mode 100644 src/windows/identity/ui/propertywnd.h delete mode 100644 src/windows/identity/ui/reqdaemon.c delete mode 100644 src/windows/identity/ui/reqdaemon.h delete mode 100644 src/windows/identity/ui/resource.h delete mode 100644 src/windows/identity/ui/statusbar.c delete mode 100644 src/windows/identity/ui/statusbar.h delete mode 100644 src/windows/identity/ui/taskbar.c delete mode 100644 src/windows/identity/ui/taskbar.h delete mode 100644 src/windows/identity/ui/timer.c delete mode 100644 src/windows/identity/ui/timer.h delete mode 100644 src/windows/identity/ui/toolbar.c delete mode 100644 src/windows/identity/ui/toolbar.h delete mode 100644 src/windows/identity/ui/uiconfig.csv delete mode 100644 src/windows/identity/uilib/Makefile delete mode 100644 src/windows/identity/uilib/accel.csv delete mode 100644 src/windows/identity/uilib/acceldef.cfg delete mode 100644 src/windows/identity/uilib/action.c delete mode 100644 src/windows/identity/uilib/actiondef.cfg delete mode 100644 src/windows/identity/uilib/actions.csv delete mode 100644 src/windows/identity/uilib/alert.c delete mode 100644 src/windows/identity/uilib/configui.c delete mode 100644 src/windows/identity/uilib/configui.h delete mode 100644 src/windows/identity/uilib/creddlg.c delete mode 100644 src/windows/identity/uilib/intaction.h delete mode 100644 src/windows/identity/uilib/intalert.h delete mode 100644 src/windows/identity/uilib/khaction.h delete mode 100644 src/windows/identity/uilib/khactiondef.h delete mode 100644 src/windows/identity/uilib/khalerts.h delete mode 100644 src/windows/identity/uilib/khconfigui.h delete mode 100644 src/windows/identity/uilib/khhtlink.h delete mode 100644 src/windows/identity/uilib/khnewcred.h delete mode 100644 src/windows/identity/uilib/khprops.h delete mode 100644 src/windows/identity/uilib/khremote.h delete mode 100644 src/windows/identity/uilib/khrescache.h delete mode 100644 src/windows/identity/uilib/khtracker.h delete mode 100644 src/windows/identity/uilib/khuidefs.h delete mode 100644 src/windows/identity/uilib/propsheet.c delete mode 100644 src/windows/identity/uilib/propwnd.c delete mode 100644 src/windows/identity/uilib/rescache.c delete mode 100644 src/windows/identity/uilib/trackerwnd.c delete mode 100644 src/windows/identity/uilib/uibind.c delete mode 100644 src/windows/identity/uilib/uilibmain.c delete mode 100644 src/windows/identity/uilib/version.c delete mode 100644 src/windows/identity/util/Makefile delete mode 100644 src/windows/identity/util/hashtable.c delete mode 100644 src/windows/identity/util/hashtable.h delete mode 100644 src/windows/identity/util/mstring.c delete mode 100644 src/windows/identity/util/mstring.h delete mode 100644 src/windows/identity/util/perfstat.c delete mode 100644 src/windows/identity/util/perfstat.h delete mode 100644 src/windows/identity/util/sync.c delete mode 100644 src/windows/identity/util/sync.h delete mode 100644 src/windows/identity/util/utils.h diff --git a/src/windows/identity/Makefile b/src/windows/identity/Makefile deleted file mode 100644 index a2fdcf449..000000000 --- a/src/windows/identity/Makefile +++ /dev/null @@ -1,214 +0,0 @@ -# -# Copyright (c) 2004 Massachusetts Institute of Technology -# Copyright (c) 2006 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. - -!ifdef ETAGRUN -all: finale doc -!else -all: finale -!endif - -MODULE=all -!include - -!ifndef CLEANRUN -!ifndef TESTRUN -!ifndef ETAGRUN - -# Define KH_NO_WX if the build should not fail on warnings. The -# default is to treat warnings as errors. - -#RMAKE=$(MAKECMD) /nologo all KH_NO_WX=1 -RMAKE=$(MAKECMD) /nologo all -RMAKE_W2K=$(MAKECMD) /nologo all KHBUILD_W2K=1 - -!else -RMAKE=$(MAKECMD) /nologo etag -RMAKE_W2K=echo Skipping W2K target for ETAGS run. -!endif -!else -RMAKE=$(MAKECMD) /nologo test -RMAKE_W2K=$(MAKECMD) /nologo test KHBUILD_W2K=1 -!endif -!else -RMAKE=$(MAKECMD) /nologo clean -RMAKE_W2K=$(MAKECMD) /nologo clean KHBUILD_W2K=1 -!endif - -!if "$(CPU)" != "i386" -NO_KRB4=1 -!endif - -start: - -config: start - $(ECHO) -- Entering $@: - $(CD) $@ - $(RMAKE) - $(CD) .. - $(ECHO) -- Done with $@ - -include: config - $(ECHO) -- Entering $@: - $(CD) $@ - $(RMAKE) - $(CD) .. - $(ECHO) -- Done with $@ - -util: include - $(ECHO) -- Entering $@: - $(CD) $@ - $(RMAKE) - $(CD) .. - $(ECHO) -- Done with $@ - -kherr: util - $(ECHO) -- Entering $@: - $(CD) $@ - $(RMAKE) - $(CD) .. - $(ECHO) -- Done with $@ - -kconfig: kherr - $(ECHO) -- Entering $@: - $(CD) $@ - $(RMAKE) - $(CD) .. - $(ECHO) -- Done with $@ - -kmq: kconfig - $(ECHO) -- Entering $@: - $(CD) $@ - $(RMAKE) - $(CD) .. - $(ECHO) -- Done with $@ - -kcreddb: kmq - $(ECHO) -- Entering $@: - $(CD) $@ - $(RMAKE) - $(CD) .. - $(ECHO) -- Done with $@ - -kmm: kcreddb - $(ECHO) -- Entering $@: - $(CD) $@ - $(RMAKE) - $(CD) .. - $(ECHO) -- Done with $@ - -help: kmm - $(ECHO) -- Entering $@: - $(CD) $@ - $(RMAKE) - $(CD) .. - $(ECHO) -- Done with $@ - -uilib: help - $(ECHO) -- Entering $@: - $(CD) $@ - $(RMAKE) - $(RMAKE_W2K) - $(CD) .. - $(ECHO) -- Done with $@ - -nidmgrdll: uilib - $(ECHO) -- Entering $@ - $(CD) $@ - $(RMAKE) - $(RMAKE_W2K) - $(CD) .. - $(ECHO) -- Done with $@ - -ui: nidmgrdll - $(ECHO) -- Entering $@: - $(CD) $@ - $(RMAKE) - $(RMAKE_W2K) - $(CD) .. - $(ECHO) -- Done with $@ - -# Now build the plugins -plugincommon: ui - $(ECHO) -- Entering $@ - $(CD) plugins\common - $(RMAKE) - $(CD) ..\.. - $(ECHO) -- Done with $@ - -krb5plugin: plugincommon - $(ECHO) -- Entering $@ - $(CD) plugins\krb5 - $(RMAKE) - $(CD) ..\.. - $(ECHO) -- Done with $@ - -!ifndef NO_KRB4 -finale: krb4plugin - -krb4plugin: plugincommon - $(ECHO) -- Entering $@ - $(CD) plugins\krb4 - $(RMAKE) - $(CD) ..\.. - $(ECHO) -- Done with $@ -!endif - -!ifdef BUILD_AFS -finale: afsplugin - -afsplugin: plugincommon - $(ECHO) -- Entering $@ - $(CD) plugins\afs - $(RMAKE) - $(CD) ..\.. - $(ECHO) -- Done with $@ -!endif - -!ifdef NODOCBUILD -doctarget= -!else -doctarget=doc -!endif - -finale: krb5plugin $(doctarget) - $(ECHO) -- Done. - -pdoc: - -doc: pdoc - $(ECHO) -- Entering $@: - $(CD) $@ - $(RMAKE) - $(CD) .. - $(ECHO) -- Done with $@ - -clean:: - $(MAKECMD) /nologo CLEANRUN=1 - -test:: - $(MAKECMD) /nologo TESTRUN=1 - -etags:: - $(RM) $(TAGFILE) - $(MAKECMD) /nologo ETAGRUN=1 diff --git a/src/windows/identity/apiversion.txt b/src/windows/identity/apiversion.txt deleted file mode 100644 index 5f07d46f2..000000000 --- a/src/windows/identity/apiversion.txt +++ /dev/null @@ -1,367 +0,0 @@ -# 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 -# (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. - - -# This file documents the versions of the API for NetIDMgr. The -# syntax of the file is: -# -# Version= -# AppVersion= -# Date= | NOTRELEASED -# # -# -# # comment -# Schema: -# # comment - - -#---------------------------------------------------------------- -Version=1 -AppVersion=0.1.0.0 -Date=NOTRELEASED -# Original Khimaira API. - -#---------------------------------------------------------------- -Version=2 -AppVersion=0.1.1.0 -Date=Nov 01, 2005 -# Alpha 1 release of NetIDMgr, along with KFW 3.0.0 beta - -#---------------------------------------------------------------- -Version=3 -AppVersion=0.1.2.0 -Date=Nov 30, 2005 -# Alpha 2 release of NetIDMgr, along with KFW 3.0.0 beta 2 - -#---------------------------------------------------------------- -Version=4 -AppVersion=1.0.0.0 -Date=Dec 05, 2005 -# Released with KfW 3.0.0 - -#---------------------------------------------------------------- -Version=5 -AppVersion=1.1.0.0 -Date=(TBD) -# Released with KFW 3.1.0 - -+khui_alert_show_modal(),KMSG_ALERT_SHOW_MODAL, KHUI_ALERT_FLAG_MODAL -# Support for modal alert boxes - -+KHUI_PACTION_YES, KHUI_PACTION_NO, KHUI_PACTION_YESALL, KHUI_PACTION_NOALL, KHUI_PACTION_KEEP, KHUI_PACTION_REMOVE, KHUI_PACTION_DISCARD -# Additional pseudo actions - -!tag_khui_action, khui_action -# Membership extension for supporting custom actions. Type changes -# from 'int' to khm_int32. - -+khui_action_create(), khui_action_get_data(), khui_action_delete() -# Support for creating custom actions - -!kmq_msg_subscription, tag_kmq_msg_subscription -# Add 'magic' field. - -+KHUI_MENU_NONE -# New identifier for unspecified menu commands. - -+khui_menu_insert_action(), khui_menu_get_action(), khui_menu_get_size(), khui_menu_remove_action() -# Functions for manipulating custom menus - -+khui_menu_insert_paction() -# Exported, but not exposed as an API. For inserting actions by -# reference in to menus. - --khui_menu_add_action(), khui_menu_add_paction() -# Removed deprecated functions. Temporarily provided as macros. The -# replacements are khui_menu_insert_action() and -# khui_menu_insert_paction() respectively. - -+kmq_create_hwnd_subscription() -# Ad-hoc subscriptions can now be obtained for Win32 windows. - --khui_create_gloabl_accel_table() -# Exported but no longer exposed. - --khui_action_list_length() -# Exported but no longer exposed. - -+kmm_enable_plugin() -# New API for enabling or disabling plugins - -!kmm_plugin_info -# Added 'flags' field. - -+KCDB_ATTR_FLAG_TRANSIENT -# New flag for transient attributes. - -+kherr_get_prev_event(), kherr_get_last_event() -# For more efficient traversal of the event lists for use by error context handlers. - -+KHERR_RF_COMMIT -# Flag for error events to signal that the error event has been committed. - -+khui_action_trigger() -# Function for triggerring an action. - -+khui_action_set_hwnd() -# internal API. Should not be used by anyone. Basically sets the HWND that should receive event notifications from the UI library. - -+KEPT_PTR -# error library data type for pointers - -+_cptr -# type cast macro for pointer types - -!khc_open_space -# name parameter is now a const string - -!KCDB_ATTRNAME_ISSUE -# Fixed typo - -!kherr_val -# is now an inline function instead of a macro - -!kherr_param -# is now a structure instead of an integer type - -+KEPT_NONE -# new constant signifying a NULL parameter - -!_int32, _uint32, _int64, _uint64, _cstr, _tstr, _cptr -# appropriate typecasts added - -+vnull -# macro to insert a NULL parameter - -!_report_cs0, _report_cs1, _report_cs2, _report_cs3 -!_report_sr0, _report_sr1, _report_sr2, _report_sr3 -!_report_mr0, _report_mr1, _report_mr2, _report_mr3 -!_report_ts0, _report_ts1, _report_ts2, _report_ts3 -# modified to use _vnull() instead of 0 for NULL parameters - -+KCONF_FLAG_WRITEIFMOD -# new flag for khc_open_space() indicating that the specified handle should only write to a configuration space if the value read from the handle is different from the value being written - -+KCONF_FLAG_IFMODCI -# indicates that the string comparison function used for KCONF_FLAG_WRITEIFMOD should be case insensitive. - -!khc_write_int32(), khc_write_int64(), khc_write_string(), khc_write_multi_string() -# Change of behavior. If the configuration handle has KCONF_FLAG_WRITEIFMOD flag set, only writes if the value being written to is different from the value being read. - -!khc_read_string(), khc_read_multi_string(), khc_read_int32(), khc_read_int64(), khc_read_binary(), khc_write_string(), khc_write_int32(), khc_write_int64(), khc_write_binary(), khc_get_type(), khc_value_exists(), khc_remove_value() -# The value name parameter is now a constant pointer - -!khc_load_schema(), khc_unload_schema() -# The schema pointer is now a constant pointer - --Schema:NetIDMgr\PluginManager\Modules\\Flags --Schema:NetIDMgr\PluginManager\Plugins\\Flags -# Deprecated. Replaced by separate values for each of the bits in Flags. This allows each setting to be deployed independently via GPO. - -+Schema:NetIDMgr\PluginManager\Modules\\Disabled -+Schema:NetIDMgr\PluginManager\Plugins\\Disabled -# If non-zero, the corresponding module or plug-in is disabled. - -!kcdb_identity_set_attrib(), kcdb_identity_get_attrib(), kcdb_identity_get_attrib_string() -# Attribute name parameter is now a const pointer to a wchar_t string - -!kcdb_cred_create() -# Name parameter is now a const pointer to a wchar_t string - -!kcdb_cred_set_attrib(), kcdb_cred_get_attrib() -!kcdb_cred_get_attrib_string(), kcdb_creds_comp_attrib() -# Attribute name parameter is now a const pointer to a wchar_t string - -!kcdb_type_get_id() -# Name parameter is now a const pointer to a wchar_t string - -!kcdb_type_register() -# type parameter is now a const pointer - -!kcdb_attrib_get_id() -# Name parameter is now a const pointer - -!kcdb_attrib_register() -# attrib parameter is now a const pointer - -!kcdb_credtype_register() -# type parameter is now a const pointer - -!kcdb_credtype_get_id() -# name parameter is now a const pointer - -!kcdb_buf_get_attrib(), kcdb_buf_get_attrib_string(), kcbd_buf_set_attrib() -# attr_name is now a const pointer - -+KCDB_OP_DELCONFIG -# notification that the configuration information for an identity is to be removed. - - -#---------------------------------------------------------------- -Version=7 -AppVersion=1.1.9.0 -Date=Feb 16, 2007 -# Released with KFW 3.2 Alpha 1 - -+KHUI_ACTION_UICB -# Internal action to dispatch a UI callback - -+WMNC_UPDATE_LAYOUT -# Used to update the layout and size of the dialogs during a new -# credentials operation. - -- NCDLG_TAB_HEIGHT, NCDLG_TAB_WIDTH -# No longer used - -- NCDLG_BBAR_WIDTH -# Moved to internal header file - -+ KCDB_IDENT_FLAG_UNKNOWN -# Used to indicate that an authority could not be contacted to -# determine the validity of an identity. - -+ khui_refresh_actions() -# Force a refresh of the application menus and toolbars. - -+ khui_action_lock() -+ khui_action_unlock() -# Synchronization of action and menu operations. - -! khui_alert -# Structure definition is now internal - -! khui_action -# Structure definition is now internal - -+ khui_alert_set_type() -+ khui_alert_set_ctx() -+ khui_alert_get_response() -# Additional functions to setup an alert. - -! kmq_message -# Added field "aborted" - -+ kmq_abort_call() -+ kmq_is_call_aborted() -# Added placeholders - -! kmq_message_ref -! kmq_queue -! kmq_msg_subscription -! kmq_msg_type -# Structure definition now internal - -! KMQ_MSG_TYPE_MAX -! KMQ_MAXCCH_TYPE_NAME -! KMQ_MAXCB_TYPE_NAME -! KMQ_MSG_SUB_MAGIC -! KMQ_RCPTTYPE_CB -! KMQ_RCPTTYPE_HWND -! KMQ_QUEUE_FLAG_DELETED -# Macros not internal - -#---------------------------------------------------------------- -Version=8 -AppVersion=1.1.10.0 -Date=(TBD) -# Released with (TBD) - -! hash_add(), hash_del(), hash_lookup(), hash_exist() -# 'key' parameter is now (const void *) - -! struct tag_has_bin, hash_bin -# 'key' member is now (const void *) - - -+WMNC_UPDATE_LAYOUT -# Used to update the layout and size of the dialogs during a new -# credentials operation. - -- NCDLG_TAB_HEIGHT, NCDLG_TAB_WIDTH -# No longer used - -- NCDLG_BBAR_WIDTH -# Moved to internal header file - -+ KCDB_IDENT_FLAG_UNKNOWN -# Used to indicate that an authority could not be contacted to -# determine the validity of an identity. - -+ khui_refresh_actions() -# Force a refresh of the application menus and toolbars. - -+ khui_action_lock() -+ khui_action_unlock() -# Synchronization of action and menu operations. - -! khui_alert -# Structure definition is now internal - -! khui_action -# Structure definition is now internal - -+ khui_alert_set_type() -+ khui_alert_set_ctx() -+ khui_alert_get_response() -# Additional functions to setup an alert. - -! kmq_message -# Added field "aborted" - -+ kmq_abort_call() -+ kmq_is_call_aborted() -# Added placeholders - -! kmq_message_ref -! kmq_queue -! kmq_msg_subscription -! kmq_msg_type -# Structure definition now internal - -! KMQ_MSG_TYPE_MAX -! KMQ_MAXCCH_TYPE_NAME -! KMQ_MAXCB_TYPE_NAME -! KMQ_MSG_SUB_MAGIC -! KMQ_RCPTTYPE_CB -! KMQ_RCPTTYPE_HWND -! KMQ_QUEUE_FLAG_DELETED -# Macros not internal - -! khc_value_exists() -# Behavior change with respect to shadowed handles. If a value -# doesn't exist in the top level handle, then each shadowed handle -# will be tried in turn until the value is found. - -#---------------------------------------------------------------- -Version=9 -AppVersion=1.3.0.0 -Date=(TBD) -# Released with (TBD) - -+ KHERR_CTX_NEWCHILD -+ KHERR_CTX_FOLDCHILD -# Added to kherr.h to support additional notifications - -+ WMNC_IDENT_PREPROCESS -# Preprocess the identity selector controls before fetching the -# selected identity diff --git a/src/windows/identity/config/Makefile b/src/windows/identity/config/Makefile deleted file mode 100644 index e5bc7eea8..000000000 --- a/src/windows/identity/config/Makefile +++ /dev/null @@ -1,147 +0,0 @@ -# -# Copyright (c) 2004,2005,2006 Massachusetts Institute of Technology -# Copyright (c) 2006 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. - - -MODULE=config -!include - -all: showvars showvers mkalldirs mkversion - -showvars: - $(ECHO) SRC= $(SRC) - $(ECHO) DESTDIR = $(DESTDIR) - $(ECHO) OBJDIR = $(OBJDIR) - $(ECHO). - $(ECHO) CC = $(CC) - $(ECHO) DOXYGEN = $(DOXYGEN) - $(ECHO) HHC = $(HHC) - -showvers: - $(ECHO) ---- Version Information ---- - $(ECHO) NETIDMGR_VERSION= $(NETIDMGR_VERSION) - $(ECHO) NETIDMGR_VERSION_API=$(NETIDMGR_VERSION_API) - $(ECHO) NETIDMGR_RELEASEDESC=$(NETIDMGR_RELEASEDESC) - $(ECHO) Build Type :$(KH_BUILD), $(KH_RELEASE) - $(ECHO) Strings: - $(ECHO) Company = $(NETIDMGR_SRC_COMPANY_1033) - $(ECHO) Copyright = $(NETIDMGR_SRC_COPYRIGHT_1033) - $(ECHO) ---- End Version Information --- - $(ECHO). - -mkalldirs: -! if !exist($(DESTROOT)) - -$(MKDIR) $(DESTROOT) -! endif -! if !exist($(OBJROOT)) - -$(MKDIR) $(OBJROOT) -! endif -! if !exist($(DESTDIR)) - -$(MKDIR) $(DESTDIR) -! endif -! if !exist($(OBJDIR)) - -$(MKDIR) $(OBJDIR) -! endif -! if !exist($(INCDIR)) - -$(MKDIR) $(INCDIR) -! endif -! if !exist($(BINDIR)) - -$(MKDIR) $(BINDIR) -! endif -! if !exist($(LIBDIR)) - -$(MKDIR) $(LIBDIR) -! endif -! if !exist($(DOCDIR)) - -$(MKDIR) $(DOCDIR) -! endif -! if !exist($(OBJDIR)\W2K) - -$(MKDIR) $(OBJDIR)\W2K -! endif -! if !exist($(BINDIR)\W2K) - -$(MKDIR) $(BINDIR)\W2K -! endif -! if !exist($(LIBDIR)\W2K) - -$(MKDIR) $(LIBDIR)\W2K -! endif - $(ECHO) Done creating directories. - -VERSIONINT=$(INCDIR)\netidmgr_intver.h - -VERSIONEXT=$(INCDIR)\netidmgr_version.h - -# Version related defines - -! if "$(KH_BUILD)"=="RETAIL" -kh_fileflags=0 -! else -kh_fileflags=VS_FF_DEBUG -! endif -! if "$(KH_RELEASE)"=="PRERELEASE" -kh_fileflags=$(kh_fileflags) | VS_FF_PRERELEASE -! elseif "$(KH_RELEASE)"=="PRIVATE" -kh_fileflags=$(kh_fileflags) | VS_FF_PRIVATEBUILD -! elseif "$(KH_RELEASE)"=="SPECIAL" -kh_fileflags=$(kh_fileflags) | VS_FF_SPECIALBUILD -! endif - -kh_fileos=VOS_NT_WINDOWS32 -kh_filetype_app=VFT_APP -kh_filetype_dll=VFT_DLL - -mkversion: $(VERSIONINT) $(VERSIONEXT) - -# Version and build strings - -!if "$(KH_RELEASE)" == "OFFICIAL" -NETIDMGR_VERSION_STR_1033=$(NETIDMGR_VERSION) -NETIDMGR_COMMENT_STR_1033=Official build. Please send bug reports to kfw-bugs@MIT.EDU -!elseif "$(KH_RELEASE)" == "PRERELEASE" -NETIDMGR_VERSION_STR_1033=$(NETIDMGR_VERSION) Prelease $(NETIDMGR_RELEASEDESC) -NETIDMGR_COMMENT_STR_1033=Prerelease build. Please send bug reports to kfw-bugs@MIT.EDU -!elseif "$(KH_RELEASE)" == "PRIVATE" -NETIDMGR_VERSION_STR_1033=$(NETIDMGR_VERSION).PRIVATE -NETIDMGR_PRIVATE_STR_1033=Private build. Please send bug reports to kfw-bugs@MIT.EDU -!elseif "$(KH_RELEASE)" == "SPECIAL" -NETIDMGR_VERSION_STR_1033=$(NETIDMGR_VERSION).SPECIAL -NETIDMGR_SPECIAL_STR_1033=Special build. Please send bug reports to kfw-bugs@MIT.EDU -!endif - -!if "$(KH_BUILD)" == "DEBUG" -NETIDMGR_VERSION_STR_1033=$(NETIDMGR_VERSION_STR_1033).DEBUG -!else -!endif - -NETIDMGR_PRODUCT_1033=NetIDMgr $(NETIDMGR_VERSION_STR_1033) - -!include netidmgr_version.h.in - -!include netidmgr_intver.h.in - -clean:: -! if exist($(VERSIONINT)) - $(RM) $(VERSIONINT) -! endif -! if exist($(VERSIONEXT)) - $(RM) $(VERSIONEXT) -! endif - diff --git a/src/windows/identity/config/Makefile.w2k b/src/windows/identity/config/Makefile.w2k deleted file mode 100644 index 2edc113f4..000000000 --- a/src/windows/identity/config/Makefile.w2k +++ /dev/null @@ -1,306 +0,0 @@ -# -# Khimaira : Win32 configuration makefile -# This file will be included by all the makefiles -# in the build tree. -# -# Copyright (c) 2004,2005,2006 Massachusetts Institute of Technology -# 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 -# (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. - -!ifndef KHIMAIRA_WIN32_CONFIG -KHIMAIRA_WIN32_CONFIG=1 - -# Environment Variables -# The following environment variables MUST be set: -# KH_ROOT : Root of the source tree. -# KH_BUILD: One of DEBUG or RETAIL -# -# The following environment variables are optional: -# KH_RUNTIME: One of STATIC or DLL, specifies whether the CRT libs -# are linked statically or through MSVCRT.DLL. -# KH_AUXCFLAGS: Optional flags for CL -# KH_RELEASE: Release type. One of OFFICIAL, PRERELEASE, PRIVATE or SPECIAL. -# OFFICIAL : An official release of Khimaira -# PREPRELEASE: A beta/release candidate release -# PRIVATE : Private build -# SPECIAL : Special build. Typically one with non-mainline patches. - -# Version info -NETIDMGR_VERSION_MAJOR=1 -NETIDMGR_VERSION_MINOR=3 -NETIDMGR_VERSION_PATCH=1 -NETIDMGR_VERSION_AUX=0 -NETIDMGR_RELEASEDESC= - -# The API version. This number must be incremented each time the API -# changes. Plugins specify the version of the API that they were -# compiled against and the Module Manager uses the API numbers to -# decide whether the plugin is safe to load or not. -# -# Changes to the API version numbers should be documented in -# apiversion.txt at the root of the source tree. -NETIDMGR_VERSION_API=10 - -# Minimum backwards compatible version. API versions from -# NETIDMGR_VERSION_API_MINCOMPAT through NETIDMGR_VERSION_API -# inclusive, are compatible with this version. -NETIDMGR_VERSION_API_MINCOMPAT=5 - -NETIDMGR_VERSION=$(NETIDMGR_VERSION_MAJOR).$(NETIDMGR_VERSION_MINOR).$(NETIDMGR_VERSION_PATCH).$(NETIDMGR_VERSION_AUX) -NETIDMGR_VERSIONC=$(NETIDMGR_VERSION_MAJOR),$(NETIDMGR_VERSION_MINOR),$(NETIDMGR_VERSION_PATCH),$(NETIDMGR_VERSION_AUX) - -# Source information -NETIDMGR_SRC_COMPANY_1033=Massachusetts Institute of Technology -NETIDMGR_SRC_COPYRIGHT_1033=(C) 2005-2007 Massachusetts Institute of Technology - -# Choose the default build type if one is not set -!if ("$(KH_BUILD)" != "DEBUG") && ("$(KH_BUILD)" != "RETAIL") -! if defined(NODEBUG) && "$(NODEBUG)"=="1" -KH_BUILD=RETAIL -! else -KH_BUILD=DEBUG -! endif -!endif - -!if "$(KH_BUILD)"=="DEBUG" && defined(NODEBUG) && "$(NODEBUG)"=="1" -! error The Khimaira build configuration is set for DEBUG while the Platform SDK build environment is set to RETAIL. -!endif - -# The default release type is PRIVATE is no other type is specified -!if ("$(KH_RELEASE)" != "OFFICIAL") && ("$(KH_RELEASE)" != "PRERELEASE") && ("$(KH_RELEASE)" != "PRIVATE") && ("$(KH_RELEASE)" != "SPECIAL") -KH_RELEASE=PRIVATE -!endif - -# Actual build environment settings - -# See what compiler we are using -# TODO: Update this to support other compilers -!if defined(MSVCVer) && "$(MSVCVer)"=="8.0" -KH_CLVER=vc8 -!else -KH_CLVER=vc7 -!endif - -# Check for required env vars -!ifndef MODULE -! error MODULE must be specified -!endif -!ifndef KH_ROOT -! ifndef PISMERE -! error Either KH_ROOT or PISMERE must be defined -! else -KH_ROOT=$(PISMERE)\athena\auth\krb5\src\windows\identity -! endif -!endif - -!ifdef NODEBUG -OUTPRE_DBG=rel -!else -OUTPRE_DBG=dbg -!endif -OUTPRE1=obj -OUTPRE2=$(OUTPRE1)\$(CPU) -OUTPRE3=$(OUTPRE2)\$(OUTPRE_DBG) -OUTPRE=$(OUTPRE3)^\ - - - -# Output directory structure -DESTROOT=$(KH_ROOT)\obj -OBJROOT=$(KH_ROOT)\obj -SRC=$(KH_ROOT) - -DESTDIR=$(DESTROOT)\$(CPU)\$(OUTPRE_DBG) -OBJDIR=$(OBJROOT)\$(CPU)\$(OUTPRE_DBG) - -OBJ=$(OBJDIR)\$(MODULE) -INCDIR=$(DESTDIR)\inc -#BINDIR=$(DESTDIR)\bin -BINDIR=$(KH_ROOT)\$(OUTPRE)\W2K -#LIBDIR=$(DESTDIR)\lib -LIBDIR=$(KH_ROOT)\$(OUTPRE)\W2K -DOCDIR=$(DESTDIR)\doc - -# Source directories -CONFDIR=$(SRC)\config - -# Setup environment for win32.mak - -!if "$(KH_BUILD)" == "RETAIL" -NODEBUG=1 -!endif - -# Win32.mak -APPVER=5.0 -TARGETOS=WINNT -_WIN32_IE=0x0500 -_WIN32_WINNT=0x0500 -!include - -# Program macros - -CD=cd -RM=del /q -MKDIR=md -RMDIR=rd -ECHO=echo -MAKECMD=nmake /nologo -CP=copy /y -LINK=link -CCSV=perl $(SRC)\config\ccsv.pl -MC=mc - -!ifdef KH_DOXYFULLPATH -DOXYGEN=$(KH_DOXYFULLPATH) -!else -DOXYGEN=doxygen -!endif - -!ifdef KH_HHCFULLPATH -HHC=$(KH_HHCFULLPATH) -!else -HHC=hhc -!endif - -!ifdef KH_KFWPATH -KFWINCDIR=$(KH_KFWPATH)\inc -kfwincflags = -I$(KFWINCDIR)\krb5 -I$(KFWINCDIR)\krb5\KerberosIV -I$(KFWINCDIR)\krb4 -I$(KFWINCDIR)\loadfuncs -I$(KFWINCDIR) -KFWLIBDIR=$(KH_KFWPATH)\lib\$(CPU) -!else if defined(PISMERE) -KFWINCDIR=$(PISMERE)\athena\auth\krb5\src\include -kfwincflags = -I$(KFWINCDIR) -I$(PISMERE)\athena\util\loadfuncs -I$(PISMERE)\athena\auth\krb5\src\include\kerberosIV -I$(PISMERE)\athena\auth\krb4\include -KFWLIBDIR=$(PISMERE)\target\lib\$(CPU)\$(OUTPRE_DBG) -!endif - -!ifdef KH_AFSPATH -AFSINCDIR=$(KH_AFSPATH)\include -AFSLIBDIR=$(KH_AFSPATH)\lib -afsincflags=-I$(AFSINCDIR) -!endif - -#EXTLIBDIR=$(SRC)\ext-lib\$(CPU) -#EXTINCDIR=-I$(SRC)\ext-inc - -incflags= -I$(INCDIR) -I$(SRC)\include -I. -I$(OBJ) $(kfwincflags) $(afsincflags) -rincflags= /i $(INCDIR) /i $(SRC)\include /i . -khdefines=-DUNICODE -D_UNICODE -khcwarn=/Wp64 -!ifndef KH_NO_WX -khcwarn=$(khcwarn) /WX -!endif - -!if "$(CPU)" == "i386" -khdefines=$(khdefines) -D_USE_32BIT_TIME_T -!endif - -#DEBUG_SYMBOLS -ldebug=$(ldebug) /DEBUG -cdebug=$(cdebug) -Os -Zi - -# Additionally, suppress conflicting default library directives that we -# might pull in from external libraries. - -!ifndef NODEBUG -lndeflibflag=/NODEFAULTLIB:MSVCRT -!else -lndeflibflag=/NODEFAULTLIB:MSVCRTD -!endif - -khcflags=$(cdebug) $(cflags) $(incflags) $(khdefines) $(khcwarn) -khlguiflags=$(ldebug) $(guilflags) $(lndeflibflag) -khlconflags=$(ldebug) $(conlflags) $(lndeflibflag) -khldllguiflags=$(ldebug) $(dlllflags) $(lndeflibflag) -khldllconflags=$(ldebug) $(dlllflags) $(lndeflibflag) - -!if "$(KH_RUNTIME)" == "STATIC" -khcflags=$(khcflags) $(cvarsmt) -khlguiflags=$(khlguiflags) $(guilibsmt) -khlconflags=$(khlconflags) $(conlibsmt) -khldllguiflags=$(khldllguiflags) $(guilibsmt) -khldllconflags=$(khldllconflags) $(conlibsmt) -!else -khcflags=$(khcflags) $(cvarsdll) -khlguiflags=$(khlguiflags) $(guilibsdll) -khlconflags=$(khlconflags) $(conlibsdll) -khldllguiflags=$(khldllguiflags) $(guilibsdll) -khldllconflags=$(khldllconflags) $(conlibsdll) -!endif - -C2OBJ=$(CC) $(khcflags) $(KH_AUXCFLAGS) /Fo"$@" /c $** - -EXECONLINK=$(LINK) /NOLOGO $(khlconflags) /OUT:$@ $** - -EXEGUILINK=$(LINK) /NOLOGO $(khlguiflags) /OUT:$@ $** - -DLLCONLINK=$(LINK) /NOLOGO $(khldllconflags) /OUT:$@ /IMPLIB:$(LIBDIR)\$(@B).lib $** - -DLLGUILINK=$(LINK) /NOLOGO $(khldllguiflags) /OUT:$@ /IMPLIB:$(LIBDIR)\$(@B).lib $** - -DLLRESLINK=$(LINK) /NOLOGO /DLL /NOENTRY /MACHINE:$(PROCESSOR_ARCHITECTURE) /OUT:$@ $** - -RC2RES=$(RC) $(RFLAGS) $(rincflags) /fo $@ $** - -MC2RC=$(MC) $(MCFLAGS) -h $(OBJ)\ -m 1024 -r $(OBJ)\ -x $(OBJ)\ $** - -{}.c{$(OBJ)}.obj: - $(C2OBJ) - -{$(OBJ)}.c{$(OBJ)}.obj: - $(C2OBJ) - -{}.h{$(INCDIR)}.h: - $(CP) $** $@ - -{}.rc{$(OBJ)}.res: - $(RC2RES) - -{$(OBJ)}.rc{$(OBJ)}.res: - $(RC2RES) - -clean:: -!if exist($(OBJ)) - $(RM) $(OBJ)\ -!endif - if exist vc70.pdb $(RM) vc70.pdb - if exist vc80.pdb $(RM) vc80.pdb - -test:: - -mkdirs:: -!if !exist($(LIBDIR)) - $(MKDIR) $(LIBDIR) -!endif -!if !exist($(BINDIR)) - $(MKDIR) $(BINDIR) -!endif -!if !exist($(OBJ)) - $(MKDIR) $(OBJ) -!endif - -TAGFILE = $(SRC)\TAGS - -etag:: - etags -o $(TAGFILE) -a *.c *.h - -.SUFFIXES: .h - -!endif diff --git a/src/windows/identity/config/Makefile.w32 b/src/windows/identity/config/Makefile.w32 deleted file mode 100644 index eda497065..000000000 --- a/src/windows/identity/config/Makefile.w32 +++ /dev/null @@ -1,344 +0,0 @@ -# -# Khimaira : Win32 configuration makefile -# This file will be included by all the makefiles -# in the build tree. -# -# Copyright (c) 2004,2005,2006 Massachusetts Institute of Technology -# 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 -# (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. - -!ifndef KHIMAIRA_WIN32_CONFIG -KHIMAIRA_WIN32_CONFIG=1 - -# Environment Variables -# The following environment variables MUST be set: -# KH_ROOT : Root of the source tree. -# KH_BUILD: One of DEBUG or RETAIL -# -# The following environment variables are optional: -# KH_RUNTIME: One of STATIC or DLL, specifies whether the CRT libs -# are linked statically or through MSVCRT.DLL. -# KH_AUXCFLAGS: Optional flags for CL -# KH_RELEASE: Release type. One of OFFICIAL, PRERELEASE, PRIVATE or SPECIAL. -# OFFICIAL : An official release of Khimaira -# PREPRELEASE: A beta/release candidate release -# PRIVATE : Private build -# SPECIAL : Special build. Typically one with non-mainline patches. - -# Version info -NETIDMGR_VERSION_MAJOR=1 -NETIDMGR_VERSION_MINOR=3 -NETIDMGR_VERSION_PATCH=1 -NETIDMGR_VERSION_AUX=0 -NETIDMGR_RELEASEDESC= - -# The API version. This number must be incremented each time the API -# changes. Plugins specify the version of the API that they were -# compiled against and the Module Manager uses the API numbers to -# decide whether the plugin is safe to load or not. -# -# Changes to the API version numbers should be documented in -# apiversion.txt at the root of the source tree. -NETIDMGR_VERSION_API=10 - -# Minimum backwards compatible version. API versions from -# NETIDMGR_VERSION_API_MINCOMPAT through NETIDMGR_VERSION_API -# inclusive, are compatible with this version. -NETIDMGR_VERSION_API_MINCOMPAT=5 - -NETIDMGR_VERSION=$(NETIDMGR_VERSION_MAJOR).$(NETIDMGR_VERSION_MINOR).$(NETIDMGR_VERSION_PATCH).$(NETIDMGR_VERSION_AUX) -NETIDMGR_VERSIONC=$(NETIDMGR_VERSION_MAJOR),$(NETIDMGR_VERSION_MINOR),$(NETIDMGR_VERSION_PATCH),$(NETIDMGR_VERSION_AUX) - -# Source information -NETIDMGR_SRC_COMPANY_1033=Massachusetts Institute of Technology -NETIDMGR_SRC_COPYRIGHT_1033=(C) 2005-2007 Massachusetts Institute of Technology - -# Choose the default build type if one is not set -!if ("$(KH_BUILD)" != "DEBUG") && ("$(KH_BUILD)" != "RETAIL") -! if defined(NODEBUG) && "$(NODEBUG)"=="1" -KH_BUILD=RETAIL -! else -KH_BUILD=DEBUG -! endif -!endif - -!if "$(KH_BUILD)"=="DEBUG" && defined(NODEBUG) && "$(NODEBUG)"=="1" -! error The Khimaira build configuration is set for DEBUG while the Platform SDK build environment is set to RETAIL. -!endif - -# The default release type is PRIVATE is no other type is specified -!if ("$(KH_RELEASE)" != "OFFICIAL") && ("$(KH_RELEASE)" != "PRERELEASE") && ("$(KH_RELEASE)" != "PRIVATE") && ("$(KH_RELEASE)" != "SPECIAL") -KH_RELEASE=PRIVATE -!endif - -# Actual build environment settings - -# See what compiler we are using -# TODO: Update this to support other compilers -!if defined(MSVCVer) && "$(MSVCVer)"=="8.0" -KH_CLVER=vc8 -!else -KH_CLVER=vc7 -!endif - -# Check for required env vars -!ifndef MODULE -! error MODULE must be specified -!endif -!ifndef KH_ROOT -! ifndef PISMERE -! error Either KH_ROOT or PISMERE must be defined -! else -KH_ROOT=$(PISMERE)\athena\auth\krb5\src\windows\identity -! endif -!endif - -!ifdef NODEBUG -OUTPRE_DBG=rel -!else -OUTPRE_DBG=dbg -!endif -OUTPRE1=obj -OUTPRE2=$(OUTPRE1)\$(CPU) -OUTPRE3=$(OUTPRE2)\$(OUTPRE_DBG) -OUTPRE=$(OUTPRE3)^\ - - - -# Output directory structure -DESTROOT=$(KH_ROOT)\obj -OBJROOT=$(KH_ROOT)\obj -SRC=$(KH_ROOT) - -DESTDIR=$(DESTROOT)\$(CPU)\$(OUTPRE_DBG) -OBJDIR=$(OBJROOT)\$(CPU)\$(OUTPRE_DBG) - -OBJ=$(OBJDIR)\$(MODULE) -INCDIR=$(DESTDIR)\inc -#BINDIR=$(DESTDIR)\bin -BINDIR=$(KH_ROOT)\$(OUTPRE) -#LIBDIR=$(DESTDIR)\lib -LIBDIR=$(KH_ROOT)\$(OUTPRE) -DOCDIR=$(DESTDIR)\doc - -# Source directories -CONFDIR=$(SRC)\config - -# If we are forcing a Win2K build, we need to adjust the build -# directories and environment. - -!ifdef KHBUILD_W2K - -OBJ=$(OBJ)\W2K -BINDIR=$(BINDIR)\W2K -LIBDIR=$(LIBDIR)\W2K - -APPVER=5.0 -TARGETOS=WINNT -_WIN32_IE=0x0500 -_WIN32_WINNT=0x0500 - -!endif - -# Setup environment for win32.mak - -!if "$(KH_BUILD)" == "RETAIL" -NODEBUG=1 -!endif - -# Win32.mak - -!include - -# Program macros - -CD=cd -RM=del /q -MKDIR=md -RMDIR=rd -ECHO=echo -MAKECMD=nmake /nologo -CP=copy /y -LINK=link -CCSV=perl $(SRC)\config\ccsv.pl -MC=mc - -!ifdef KH_DOXYFULLPATH -DOXYGEN=$(KH_DOXYFULLPATH) -!else -DOXYGEN=doxygen -!endif - -!ifdef KH_HHCFULLPATH -HHC=$(KH_HHCFULLPATH) -!else -HHC=hhc -!endif - -!ifdef KH_KFWPATH -KFWINCDIR=$(KH_KFWPATH)\inc -kfwincflags = -I$(KFWINCDIR)\krb5 -I$(KFWINCDIR)\krb5\KerberosIV -I$(KFWINCDIR)\krb4 -I$(KFWINCDIR)\loadfuncs -I$(KFWINCDIR) -KFWLIBDIR=$(KH_KFWPATH)\lib\$(CPU) -!else if defined(PISMERE) -KFWINCDIR=$(PISMERE)\athena\auth\krb5\src\include -kfwincflags = -I$(KFWINCDIR) -I$(PISMERE)\athena\util\loadfuncs -I$(PISMERE)\athena\auth\krb5\src\include\kerberosIV -I$(PISMERE)\athena\auth\krb4\include -KFWLIBDIR=$(PISMERE)\target\lib\$(CPU)\$(OUTPRE_DBG) -!endif - -!ifdef KH_AFSPATH -AFSINCDIR=$(KH_AFSPATH)\include -AFSLIBDIR=$(KH_AFSPATH)\lib -afsincflags=-I$(AFSINCDIR) -!endif - -#EXTLIBDIR=$(SRC)\ext-lib\$(CPU) -#EXTINCDIR=-I$(SRC)\ext-inc - -incflags= -I$(INCDIR) -I$(SRC)\include -I. -I$(OBJ) $(kfwincflags) $(afsincflags) -rincflags= /i $(INCDIR) /i $(SRC)\include /i . -khdefines=-DUNICODE -D_UNICODE -khcwarn=/Wp64 -!ifndef KH_NO_WX -khcwarn=$(khcwarn) /WX -!endif - -!if "$(CPU)" == "i386" -khdefines=$(khdefines) -D_USE_32BIT_TIME_T -!endif - -#DEBUG_SYMBOLS -ldebug=$(ldebug) /DEBUG -cdebug=$(cdebug) -Os -Zi - -# Additionally, suppress conflicting default library directives that we -# might pull in from external libraries. - -!ifndef NODEBUG -lndeflibflag=/NODEFAULTLIB:MSVCRT -!else -lndeflibflag=/NODEFAULTLIB:MSVCRTD -!endif - -khcflags=$(cdebug) $(cflags) $(incflags) $(khdefines) $(khcwarn) -khlguiflags=$(ldebug) $(guilflags) $(lndeflibflag) -khlconflags=$(ldebug) $(conlflags) $(lndeflibflag) -khldllguiflags=$(ldebug) $(dlllflags) $(lndeflibflag) -khldllconflags=$(ldebug) $(dlllflags) $(lndeflibflag) - -!if "$(KH_RUNTIME)" == "STATIC" -khcflags=$(khcflags) $(cvarsmt) -khlguiflags=$(khlguiflags) $(guilibsmt) -khlconflags=$(khlconflags) $(conlibsmt) -khldllguiflags=$(khldllguiflags) $(guilibsmt) -khldllconflags=$(khldllconflags) $(conlibsmt) -!else -khcflags=$(khcflags) $(cvarsdll) -khlguiflags=$(khlguiflags) $(guilibsdll) -khlconflags=$(khlconflags) $(conlibsdll) -khldllguiflags=$(khldllguiflags) $(guilibsdll) -khldllconflags=$(khldllconflags) $(conlibsdll) -!endif - -C2OBJ=$(CC) $(khcflags) $(KH_AUXCFLAGS) /Fo"$@" /c $** - -EXECONLINK=$(LINK) /NOLOGO $(khlconflags) /OUT:$@ $** - -EXEGUILINK=$(LINK) /NOLOGO $(khlguiflags) /OUT:$@ $** - -DLLCONLINK=$(LINK) /NOLOGO $(khldllconflags) /OUT:$@ /IMPLIB:$(LIBDIR)\$(@B).lib $** - -DLLGUILINK=$(LINK) /NOLOGO $(khldllguiflags) /OUT:$@ /IMPLIB:$(LIBDIR)\$(@B).lib $** - -DLLRESLINK=$(LINK) /NOLOGO /DLL /NOENTRY /MACHINE:$(PROCESSOR_ARCHITECTURE) /OUT:$@ $** - -RC2RES=$(RC) $(RFLAGS) $(rincflags) /fo $@ $** - -MC2RC=$(MC) $(MCFLAGS) -h $(OBJ)\ -m 1024 -r $(OBJ)\ -x $(OBJ)\ $** - -{}.c{$(OBJ)}.obj: - $(C2OBJ) - -{$(OBJ)}.c{$(OBJ)}.obj: - $(C2OBJ) - -{}.h{$(INCDIR)}.h: - $(CP) $** $@ - -{}.rc{$(OBJ)}.res: - $(RC2RES) - -{$(OBJ)}.rc{$(OBJ)}.res: - $(RC2RES) - -clean:: - if exist "$(OBJ)" $(RM) "$(OBJ)" - if exist vc70.pdb $(RM) vc70.pdb - if exist vc80.pdb $(RM) vc80.pdb - -test:: - -mkdirs:: -!if !exist($(OBJ)) - $(MKDIR) $(OBJ) -!endif - -TAGFILE = $(SRC)\TAGS - -etag:: - etags -o $(TAGFILE) -a *.c *.h - -.SUFFIXES: .h - -# -# Manifest handling -# -# Starting with Visual Studio 8, the C compiler and the linker -# generate manifests so that the applications will link with the -# correct side-by-side DLLs at run-time. These are required for -# correct operation under Windows XP. We also have custom manifests -# which need to be merged with the manifests that VS creates. -# -# The syntax for invoking the _VC_MANIFEST_EMBED_foo macro is: -# $(_VC_MANIFEST_EMBED_???) -# - -!ifndef MT -MT=mt.exe -nologo -!endif - -_VC_MANIFEST_EMBED_EXE= \ -if exist $@.manifest $(MT) -outputresource:$@;1 -manifest $@.manifest - -_VC_MANIFEST_EMBED_DLL= \ -if exist $@.manifest $(MT) -outputresource:$@;2 -manifest $@.manifest - -# Note that if you are merging manifests, then the VS generated -# manifest should be cleaned up after calling _VC_MANIFEST_EMBED_???. -# This ensures that even if the DLL or EXE is executed in-place, the -# embedded manifest will be used. Otherwise the $@.manifest file will -# be used. -_VC_MANIFEST_CLEAN= \ -if exist $@.manifest $(RM) $@.manifest - -# End of manifest handling - -!endif diff --git a/src/windows/identity/config/ccsv.pl b/src/windows/identity/config/ccsv.pl deleted file mode 100644 index f23179363..000000000 --- a/src/windows/identity/config/ccsv.pl +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/perl - -# -# Copyright (c) 2004 Massachusetts Institute of Technology -# -# 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. -# - - -# This is a simple script that is used for generating C code from CSV -#files. We expect three arguments, the which is the .csv file -#to be parsed, a which is a configuration file and the -#. - -# The configuration file is a perl file which defines the following -#variables : - -# $skip_lines : the number of lines to skip in the csv. The default is 0 - -# @pquote : an array of boolean integers that specify whether or not -# to quote the specific field using double quotes. The default is to -# not quote anything. - -# $file_prefix : the prefix for the file - -# $record_prefix : the prefix for each record - -# $field_sep : the field separator. The default is ',' - -# $record_postfix : the postfix for each record - -# $record_sep : A record separator. Only shows up between records. - -# $file_postfix : the postfix for the entire file - -use Text::ParseWords; - -sub do_nothingus { -} - -if($#ARGV != 2) { - print "Usage: ccsv.pl \n"; - die; -} - -$infn=$ARGV[0]; -$cfgfn=$ARGV[1]; -$outfn=$ARGV[2]; - -$skip_lines = 0; -@pquote = {}; -$file_prefix = ""; -$record_prefix = ""; -$finc = ""; -$field_sep = ","; -$record_postfix = ""; -$record_sep = "\n"; -$file_postfix = ""; -$record_parser = \&do_nothingus; - -($inbase) = ($infn =~ m/^(\w*)/); - -do $cfgfn; - -open(IN, "<".$infn) or die "Can't open input file:".$infn; -open(OUT, ">".$outfn) or die "Can't open output file:".$outfn; - -$first_line = 1; - -while() { - chomp $_; - if (m/^\#/) { - if (m/^\#\@/) { - ($inc) = m/^\#\@(.*)/; - $finc = $finc.$inc."\n"; - } else { - # ignore - } - } elsif ($skip_lines > 0) { - $skip_lines--; - } else { - if($first_line == 0){ - print OUT $record_sep; - } else { - $file_prefix =~ s/\$finc/$finc/; - print OUT $file_prefix; - $first_line = 0; - } - - @fields = &parse_line(',',0,$_); - for(@fields) { - chomp; - s/^\s*//; - } - - &$record_parser(\@fields); - - print OUT $record_prefix; - for(my $i=0; $i <= $#fields; $i++) { - print OUT $field_sep if $i != 0; - print OUT 'L"' if $pquote[$i] == 1; - print OUT $fields[$i]; - print OUT '"' if $pquote[$i] == 1; - } - print OUT $record_postfix; - } -} - -if ($first_line == 1) { - print OUT $file_prefix; -} - -print OUT $file_postfix; - -close INF; -close OUT; diff --git a/src/windows/identity/config/csvschema.cfg b/src/windows/identity/config/csvschema.cfg deleted file mode 100644 index a21c83c5b..000000000 --- a/src/windows/identity/config/csvschema.cfg +++ /dev/null @@ -1,67 +0,0 @@ -# -# Copyright (c) 2004 Massachusetts Institute of Technology -# -# 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. -# - -$file_prefix = < - -\$finc - -kconf_schema schema_$inbase\[] = { -EOS - -$record_prefix = "{"; - -$record_sep = ",\n"; - -$record_postfix = "}"; - -$file_postfix = < - -/* Language specific version strings */ -#define KH_VERSTR_COMPANY_1033 "$(NETIDMGR_SRC_COMPANY_1033)" -#define KH_VERSTR_COPYRIGHT_1033 "$(NETIDMGR_SRC_COPYRIGHT_1033)" -#define KH_VERSTR_PRODUCT_1033 "$(NETIDMGR_PRODUCT_1033)" -#define KH_VERSTR_VERSION_1033 "$(NETIDMGR_VERSION_STR_1033)" - -!ifdef NETIDMGR_COMMENT_STR_1033 -#define KH_VERSTR_COMMENT_1033 "$(NETIDMGR_COMMENT_STR_1033)" -#define KH_VERSTR_BUILDINFO_1033 KH_VERSTR_COMMENT_1033 -!endif -!ifdef NETIDMGR_PRIVATE_STR_1033 -#define KH_VERSTR_PRIVATE_1033 "$(NETIDMGR_PRIVATE_STR_1033)" -#define KH_VERSTR_BUILDINFO_1033 KH_VERSTR_PRIVATE_1033 -!endif -!ifdef NETIDMGR_SPECIAL_STR_1033 -#define KH_VERSTR_SPECIAL_1033 "$(NETIDMGR_SPECIAL_STR_1033)" -#define KH_VERSTR_BUILDINFO_1033 KH_VERSTR_SPECIAL_1033 -!endif -#endif - -#define KH_BUILD "$(KH_BUILD)" - -! if "$(KH_BUILD)"=="RETAIL" -#define KH_BUILD_RETAIL -! elseif "$(KH_RELEASE)"=="PRERELEASE" -#define KH_BUILD_PRERELEASE -! elseif "$(KH_RELEASE)"=="PRIVATE" -#define KH_BUILD_PRIVATE -! elseif "$(KH_RELEASE)"=="SPECIAL" -#define KH_BUILD_SPECIAL -! endif - -<< diff --git a/src/windows/identity/config/netidmgr_version.h.in b/src/windows/identity/config/netidmgr_version.h.in deleted file mode 100644 index babcc53a9..000000000 --- a/src/windows/identity/config/netidmgr_version.h.in +++ /dev/null @@ -1,62 +0,0 @@ -$(VERSIONEXT): Makefile Makefile.w32 - $(CP) << $(VERSIONEXT) -/* Copyright (c) 2004 Massachusetts Institute of Technology - * - * 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. - * - */ - -#ifndef __NETIDMGR_VERSION_H -#define __NETIDMGR_VERSION_H - -#include - -/* Version number macros */ -#define KH_VERSION_MAJOR $(NETIDMGR_VERSION_MAJOR) -#define KH_VERSION_MINOR $(NETIDMGR_VERSION_MINOR) -#define KH_VERSION_PATCH $(NETIDMGR_VERSION_PATCH) -#define KH_VERSION_AUX $(NETIDMGR_VERSION_AUX) - -#define KH_VERSION_API $(NETIDMGR_VERSION_API) -#define KH_VERSION_API_MINCOMPAT $(NETIDMGR_VERSION_API_MINCOMPAT) - -#define KH_VERSION_LIST $(NETIDMGR_VERSIONC) -#define KH_VERSION_STRING "$(NETIDMGR_VERSION)" -#define KH_VERSION_STRINGW L"$(NETIDMGR_VERSION)" -#define KH_VERSION_STRINGC "$(NETIDMGR_VERSIONC)" -#define KH_VERSION_STRINGCW L"$(NETIDMGR_VERSIONC)" -#define KH_VERSION_STRINGAPI "$(NETIDMGR_VERSION_API)" - -/* Version definition macros */ -#define KH_VER_FILEFLAGMASK 0x17L -#define KH_VER_FILEFLAGS $(kh_fileflags) -#define KH_VER_FILEOS $(kh_fileos) -#define KH_VER_FILETYPEDLL $(kh_filetype_dll) -#define KH_VER_FILETYPEAPP $(kh_filetype_app) - -/* Special macros for NetIDMgr special string resources */ -#define NIMV_MODULE "NIDM_Module" -#define NIMV_PLUGINS "NIDM_Plugins" -#define NIMV_APIVER "NIDM_APIVers" -#define NIMV_SUPPORT "NIDM_Support" - -#endif -<< diff --git a/src/windows/identity/doc/Makefile b/src/windows/identity/doc/Makefile deleted file mode 100644 index db40d0f65..000000000 --- a/src/windows/identity/doc/Makefile +++ /dev/null @@ -1,71 +0,0 @@ -# -# 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 -# (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. - - -MODULE=doc -!include <../config/Makefile.w32> - -all: mkdirs docs - -docs: - $(DOXYGEN) << -@INCLUDE = doxyfile.cfg - -PROJECT_NUMBER = "$(KHIMAIRA_VERSION)" - -OUTPUT_DIRECTORY = "$(DOCDIR)" - -STRIP_FROM_PATH = "$(SRC)" - -INTERNAL_DOCS = NO - -WARN_LOGFILE = "$(OBJ)\doxywarnings.txt" - -INPUT = "$(SRC)\include" -INPUT += "$(SRC)\kconfig" -INPUT += "$(SRC)\kcreddb" -INPUT += "$(SRC)\kmq" -INPUT += "$(SRC)\ui" -INPUT += "$(SRC)\uilib" -INPUT += "$(SRC)\util" -INPUT += "$(SRC)\doc" -INPUT += "$(SRC)\kmm" -INPUT += "$(SRC)\kherr" -!ifdef BUILD_AFS -INPUT += "$(SRC)\plugins\afs" - -ALIASES = "apiversion=$(NETIDMGR_VERSION_API)" -!endif - -IMAGE_PATH = "$(SRC)\doc\images" - -INCLUDE_PATH = "$(INCDIR)" "$(SRC)\include" - -CHM_FILE = "$(DOCDIR)\netiddev.chm" -<< - -$(HHC) $(DOCDIR)\html\index.hhp - -clean:: - if exist "$(DOCDIR)/html" $(RMDIR) /s /q "$(DOCDIR)\html" - if exist "$(DOCDIR)" $(RM) "$(DOCDIR)\*.*" diff --git a/src/windows/identity/doc/cred_aquisition.h b/src/windows/identity/doc/cred_aquisition.h deleted file mode 100644 index 0161f74f1..000000000 --- a/src/windows/identity/doc/cred_aquisition.h +++ /dev/null @@ -1,325 +0,0 @@ -/* - * 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 - * 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$ */ - -/*! \page cred_acq Managed credential acquisition - - Credential providers and identity providers must participate in - managed credential acquisition in order to respond to the user's - requests to obtain new credentials for an identity or to renew - credentials for an existing identity. - - There are two major processes that result in managed credential - acuqisition. One is the acquisition of credentials, while the - other is credential renewal. During a renewal, existing - credentials are used to obtain new credentials which expire later - than the existing credential. Typically, the identity provider - performs the task of obtaining renewed initial credentials while - the other credential providers obtain new credentials based on - these initial credentials. - - \section cred_acq_new New Credentials - - When a user initiates the process of initial credential - acquisition, Network Identity Manager broadcasts a - <::KMSG_CRED,::KMSG_CRED_NEW_CREDS> message. Credential providers - which need to participate in the credential acquisition should - respond to this message as detailed in \ref cred_acq_handle. - - \section cred_acq_renew Renew Credentials - - Network Identity Manager broadcasts a - <::KMSG_CRED,::KMSG_CRED_RENEW_CREDS> message to initiate the - process of renewing credentials. This may be triggered - automatically or by a user action. Credential providers which - need to participate in the renewal should respond to this message - as detailed in \ref cred_acq_handle. - - The following pages provide detailed information: - - - \subpage cred_acq_new_resp - - \subpage cred_acq_dlgproc - */ - -/*! \page cred_acq_new_resp Handling new credentials acquisition - - The process of acquiring credentials happens as follows: - - - Network Identity Manager creates a ::khui_new_creds object and a - credentials acquisition window. - - - <::KMSG_CRED,::KMSG_CRED_RENEW_CREDS> or - <::KMSG_CRED,::KMSG_CRED_NEW_CREDS> is sent to all the - credentials providers. - - - The credential providers create the panels (where appropriate) - for customizing their respective credential types. The type, - panel and any dependency information is populated into a - ::khui_new_creds_by_type structure and added to the - ::khui_new_creds structure. (See khui_cw_add_type()). - - - <::KMSG_CRED, ::KMSG_CRED_DIALOG_PRESTART> is sent to all the - credentials providers. - - - <::KMSG_CRED, ::KMSG_CRED_DIALOG_START> is sent to all the - credentials providers. - - - The dialog for obtaining credentials is displayed. - Notifications between the main dialog and the individual panels - are done through ::KHUI_WM_NC_NOTIFY messages to the dialog - procedures. - - - Once the dialog processing is done, a ::WMNC_DIALOG_PREPROCESS - message is sent to the dialog procedure. - - - Network Identity Manager posts - <::KMSG_CRED,::KMSG_CRED_DIALOG_PROCESS> message to all the - credentials providers. Each provider should check if the user - cancelled the dialog or indicated that the new credentials - should be obtained and act accordingly. The \c result field of - the ::khui_new_creds structure will be set to either - ::KHUI_NC_RESULT_PROCESS or ::KHUI_NC_RESULT_CANCEL to indicate - whether the user wishes to acquire credentials or cancel the - operation. - - - Once all the plug-ins have processed the <::KMSG_CRED, - ::KMSG_CRED_DIALOG_PROCESS> message, the application checks - whether the new credentials dialog should continue processing, - or whether the dialog should be closed. If the dialog should - continue processing, then the dialog returns to the state it was - in prior to the ::WMNC_DIALOG_PREPROCESS message was sent. If - the dialog should be closed, then a <::KMSG_CRED, - ::KMSG_CRED_END> message is sent. - - - A <::KMSG_CRED, ::KMSG_CRED_END> message signals the end of the - credentials acquisition process. Each credentials provider is - responsible for removing the ::khui_new_creds_by_type structre - from the ::khui_new_creds structure and freeing up any resources - it allocated earlier in preparation for obtaining new - credentials. - - \section cred_acq_handle Responding to credential acquisition messages - - \subsection cred_acq_handle_init <::KMSG_CRED,::KMSG_CRED_NEW_CREDS> and <::KMSG_CRED,::KMSG_CRED_RENEW_CREDS> Messages - - The credential acquisition messages are - <::KMSG_CRED,::KMSG_CRED_NEW_CREDS> and <::KMSG_CRED, - ::KMSG_CRED_RENEW_CREDS>. They are structured as follows: - - - \b type : ::KMSG_CRED - - \b subtype: ::KMSG_CRED_NEW_CREDS or ::KMSG_CRED_RENEW_CREDS - - \b uparam : 0 (unused) - - \b vparam : a pointer to a ::khui_new_creds structure. - - The \a vparam parameter of the message, as shown above, is a - pointer to a ::khui_new_creds structure. You can use the \a - subtype field of this structure to determine whether this is a new - credentials acquisition or a renewal. - - In response to this message, a credentials provider is expected to - provide a configuration panel which the user can use to customize - how the credentials of this type are to be obtained. The panel is - described by the ::khui_new_creds_by_type structure. - - \subsubsection cred_acq_panel_spec Specifying the credentials type panel - - The credentials type panel is used by the user to customize how - credentials of the specified type are to be obtained. The - ::khui_new_creds_by_type structure that describes the panel can be - used to specify a number of parameters that guide how the panel is - to be displayed in the new credentials acquisition dialog. - - The \a name field defines a localized string that will be - displayed in the tab control that houses the panel. If it is \a - NULL, then the name of the credentials type is used. Optionally, - an icon can be specified in the \a icon field which will appear - alongside the name. A tooltip may be provided in the \a tooltip - field which will be displayed when the user hovers the mouse over - the tab. - - In order to assert that the tab appears at a specific position in - the list of tabs, you can specify a positive number in the \a - ordinal field. Zero does not count as a valid ordinal. The - panels with positive ordinals are arranged first in increasing - order of ordinal (conflicts are resolved by sorting along the \a - name). Then the panels without a positive ordianl are arranged - behind these in increasing order of \a name. - - Currently, the credentials provider must specify a dialog template - that will be used to create the embedded dialog for configuring - new credentials for the type. This is done by setting the - khui_new_creds_by_type::h_module, khui_new_creds_by_type::dlg_proc - and khui_new_creds_by_type::dlg_template fields. - - Following is example code which suggests how this could be done: - - \code - // Message handling code for KMSG_CRED_NEW_CREDS or - // KMSG_CRED_INIT_CREDS - ... - khui_new_creds * c; - khui_new_creds_by_type * t; - - c = (khui_new_creds *) vparam; - t = PMALLOC(sizeof(*t)); - ZeroMemory(t, sizeof(*t)); - - t->type = my_cred_type; - - // set look and feel params - t->ordinal = 3; // third in line - t->name = L"My panel name"; - t->icon = LoadIcon(my_hInstance, MAKEINTRESOURCE(IDI_PANEL_ICON)); - t->tooltip = L"Configure credentials of my type"; - - // specify the dialog template to use - t->h_module = my_hInstance; - t->dlg_proc = my_dialog_procedure; - t->dlg_template = MAKEINTRESOURCE(IDD_NEW_CREDS); - - if(KHM_FAILED(khui_cw_add_type(c,t))) { - // handle error - } - \endcode - - It is important to note that the ::khui_new_creds_by_type pointer - that is passed into khui_cw_add_type() points to an allocated - block of memory which should remain in memory until - <::KMSG_CRED,::KMSG_CRED_END> message is received. - - For information on how the dialog procedure should be written, see - \ref cred_acq_dlgproc . - -*/ - -/*! \page cred_acq_dlgproc Writing the dialog procedure for a cred type panel - - Once each credentials provider has had a chance to add a - credentials type panel for the new credentials dialog, the - application will attempt to create all the dialog panels. It will - use the dialog template and the dialog procedure specified in the - \c dlg_proc and \c dlg_template members of the - ::khui_new_creds_by_type structure. - - The credentials type panel will be an ordinary dialog that is - created as a child of the new credentials window. Therefore, the - dialog template should have the WS_CHILD style and the - WS_EX_CONTROLPARENT extended style set so that the main dialog - procedure can correctly navigate the child dialog. - - \section cred_acq_dlgmsg Handling Messages - - \subsection cred_acq_dlg_WM_INITDIALOG WM_INITDIALOG - - When the application creates a credentials type panel dialog, it - passes a pointer to the ::khui_new_creds structure as the \c - LPARAM parameter. This can be used to query for the credentials - type panel for the plug-in, as follows: - - \code - - // Handler for WM_INITDIALOG: - // HWND hwnd, WPARAM wParam and LPARAM lParam - - khui_new_creds * nc = NULL; - khui_new_creds_by_type * nct = NULL; - - // We can define and use a structure like the following to - // maintain the data that will be used to drive the dialog user - // interface and to store credentials type settings: - struct nc_dialog_data * d = NULL; - - nc = (khui_new_creds *) lParam; - - // Now we can use nc to query for our credentials type structure - khui_cw_find_type(nc, credtype_id, &nct); - - assert(nct); - - // The dialog data structure should live until we receive - // WM_DESTROY. - d = malloc(sizeof(*d)); - ZeroMemory(d, sizeof(*d)); - - d->nc = nc; - d->nct = nct; - - // Store it as our user data for the dialog. - SetWindowLongPtr(hwnd, DWLP_USER, (LPARAM) d); - - // The aux member of the khui_new_creds_by_type structure is - // reserved for use by the credentials provider. We can use it to - // store our dialog data. This way, the dialog procedure and the - // plug-in thread can both access it and use it to store - // credential options for use when obtaining credentials. The - // dialog and the dialog data exist until KMSG_CRED_END is sent. - nct->aux = (LPARAM) d; - - // We should return FALSE here to indicate that we don't want to - // set keyboard focus to this dialog yet. The application will - // attempt to create all the credentials type panels as well as - // the other child dialogs used for the new credentials opeartion. - return FALSE; - - \endcode - - \subsection cred_acq_dlg_WM_NC_NOTIFY WM_NC_NOTIFY - - ::WM_NC_NOTIFY is a special window message that Network Identity - Manager uses to communicate with credentials type panels. The - messages are listed in the ::khui_wm_nc_notifications enumeration. - The format of the message is as follows: - - - uMsg : KHUI_WM_NC_NOTIFY - - HIWORD(wParam) : one of ::khui_wm_nc_notifications - - LPARAM : pointer to the ::khui_new_creds structure (except where noted) - - The ::WM_NC_NOTIFY notifications that a credentials provider is - expected to handle are the following: - - - ::WMNC_IDENTITY_CHANGE - - \copydoc WMNC_IDENTITY_CHANGE - - - ::WMNC_DIALOG_MOVE - - \copydoc WMNC_DIALOG_MOVE - - - ::WMNC_UPDATE_CREDTEXT - - \copydoc WMNC_UPDATE_CREDTEXT - - - ::WMNC_CREDTEXT_LINK - - \copydoc WMNC_CREDTEXT_LINK - - - ::WMNC_DIALOG_PREPROCESS - - \copydoc WMNC_DIALOG_PREPROCESS - - \section cred_acq_other Other notes - -*/ diff --git a/src/windows/identity/doc/cred_data_types.h b/src/windows/identity/doc/cred_data_types.h deleted file mode 100644 index b02edf22b..000000000 --- a/src/windows/identity/doc/cred_data_types.h +++ /dev/null @@ -1,264 +0,0 @@ -/* - * 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 - * 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$ */ - -/*! \page cred_data_types Data types in Network Identity Manager - - Network Identity Manager's Credentials Database supports several - useful data types. In addition, plug-ins can define custom data - types. Only a few operations are expected of these data types - since the core KCDB delegates fine grained operations to other - entities that understand the underlying format. - - A field in a credential can have any one of these data types, but - it must have some data type. Each value can be at most \a - KCDB_TYPE_MAXCB bytes in length regardless of the data type. - - Some data types have a fixed size (such as \a Int32), while others - are variable size. The required memory for each field in a - credential is allocated as needed. - - \section kcdb_pg_dt Data types - - Descriptions of individual data types are below. - - \subsection kcdb_pg_idt Individual data types - - \subsubsection kcdb_pg_idt_v Void - - Type identifier : ::KCDB_TYPE_VOID - - The Void data type is used to indicate that the associated object - does not contain any data. - - \subsubsection kcdb_pg_idt_s String - - Type identifier : ::KCDB_TYPE_STRING - - A unicode string that is terminated with a unicode NULL (L'\\0'). - By default, the type has the following flags: - - \a KCDB_TYPE_FLAG_CB_AUTO - - This is because, as long as the string is terminated with a unicode NULL, - the length of the string, and therefore it's size in bytes, can be inferred - from the data itself. - - \subsubsection kcdb_pg_idt_d Date - - Type identifier : ::KCDB_TYPE_DATE - - Dates and times in Network Identity Manager are stored in \a - FILETIME structures. Utility functions are provided for - converting from other formats such as \a time_t. - - \subsubsection kcdb_pg_idt_i Interval - - Type identifier : ::KCDB_TYPE_INTERVAL - - Stores an interval of time. Stored as a 64-bit signed integer. The - string representation of this data type is different from the \a - Date data type and designates an interval of time. - - The special value _I64_MAX (which is defined in limits.h as - 0x7fffffffffffffff, or in other words, the largest positive value - that can be stored in a 64-bit signed integer) is used to - represent an interval of unknown length. - - The string representations of a data value of Interval type are - defined as follows for English (US): - - - "(Unknown)" if the value is _I64_MAX - - - "(Expired)" if the value is less than zero - - - "%d days %d hours" if the value is greater than 24 hours - - - "%d hours %d mins" if the value is greater than 1 hour - - - "%d mins %d secs" if the value is greater than 1 minute - - - "%d seconds" otherwise - - \subsubsection kcdb_pg_idt_i32 Int32 - - Type identifier : ::KCDB_TYPE_INT32 - - A signed 32-bit integer. - - \subsubsection kcdb_pg_idt_i64 Int64 - - Type identifier : ::KCDB_TYPE_INT64 - - A signed 64-bit integer. - - \subsubsection kcdb_pg_idt_da Data - - Type identifier : ::KCDB_TYPE_DATA - - Raw data. Can contain a byte stream. This data type can be used - by plug-ins to associate raw data with a credential. However, - there is no built-in string representation for this data type. As - such, this is not meant to be used for storing anything that has - to be displayed to the user verbatim. - - \section kcdb_pg_cust Custom data types - - \subsection kcdb_pg_cb Custom data type call backs - - Custom data types in the Network Identity Manager Credentials - Database are defined using \a kcdb_type structures that must - include several callback functions. The expected behavior of - these callback functions is documented below. - - \subsubsection kcdb_pg_cb_ts toString - - \code - khm_int32 toString( - const void * data, - khm_int32 cb_data, - wchar_t *buffer, - khm_int32 *pcb_buffer, - khm_int32 flags); - \endcode - - Produce the localized string representation of the object pointed to by - \a data. The size of the data block is specified by the \a cb_data - parameter. If the data type specified the \a KCDB_TYPE_FLAG_CB_AUTO flag - then \a cb_data can be \a KCDB_CBSIZE_AUTO, in which case the size of the - data block is to be inferred. - - \a toString should assume that the block of data pointed to by \a data is - valid for this data type. - - The \a pcb_buffer parameter is always a valid pointer to an \a khm_int32 - variable. - - The \a buffer parameter is a pointer to a \a wchar_t buffer which is to - receive the unicode string representing the object. \a buffer may be - \a NULL, in which case the required size of the buffer should be returned - in \a pcb_buffer. In this case, the function should return - \a KHM_ERROR_TOO_LONG. - - If the \a buffer parameter is not \a NULL and the \a pcb_buffer specifies - that the buffer is large enough to hold the string representation, the - function should copy the string representation to the buffer, set the - \a pcb_buffer to the number of bytes that were copied including the - terminating \a NULL, and return \a KHM_ERROR_SUCCESS. - - If the \a buffer parameter is not \a NULL and the \a pcb_buffer specifies - a buffer that is not large enough, the function should set \a pcb_buffer - to the required size (including the terminating \a NULL) and then return - \a KHM_ERROR_TOO_LONG. - - \subsubsection kcdb_pg_cb_cmp comp - - \code - khm_int32 comp( - const void * data1, - khm_int32 cb_data1, - const void * data2, - khm_int32 cb_d2); - \endcode - - Compares two objects and returns a value indicating the relative ordering. - - Since the KCDB does not interpret any data type, it relies on a loose - definition of what a relative ordering is. It is left up to each data - type callback to interpret what 'ascending' and 'descending' mean. - - The return value \a r should be as follows: - - \a r < 0 : if \a data1 < \a data2 - - \a r > 0 : if \a data1 > \a data2 - - \a r = 0 : if \a data1 = \a data2 or no relative ordering can be determined - for the two objects \a data1 and \a data2. - - The function should assume that both objects are valid for this data type. - - The size specifiers \a cb_data1 and \a cb_data2 can (either or both) be - \a KCDB_CBSIZE_AUTO if the data type specified \a KCDB_TYPE_FLAG_CB_AUTO - flag. - - \subsubsection kcdb_pg_cb_dup dup - - \code - khm_int32 dup( - const void * d_src, - khm_int32 cb_src, - void * d_dst, - khm_int32 * pcb_dst); - \endcode - - Duplicate an object. The object pointed to by \a d_src is to be copied to - the buffer pointed to by \a d_dst. The function is to assume that \a d_src - object is valid. The size specifier \a cb_src may be \a KCDB_CBSIZE_AUTO - if \a KCDB_TYPE_FLAG_CB_AUTO was specified for the data type. - - If \a d_dst pointer is \a NULL, then the required buffer size should be - returned in \a pcb_dst. In this case, the function itself should return - \a KHM_ERROR_TOO_LONG. The same behavior should occur if \a d_dst is non - \a NULL and \a pcb_dst indicates that the buffer is not sufficient. - - If \a d_dst is not \a NULL and \a pcb_dst indicates that the buffer is - sufficient, then a copy of the object in \a d_src should be placed in - \a d_dst. The function shold return \a KHM_ERROR_SUCCESS and set - \a pcb_dst to the number of bytes that were copied. - - This callback will only be called when the credentials database is - retrieving objects from the outside. Once it receives an object it may be - copied or moved as required. Hence the object should not assume to reside - in a specific location of memory. Also, \a dup is not intended to perform - such functions as reference counting which require knowledge of a precise - number of instances of an object, as the credentials database may copy - the object simply by copying the block of memory. - - Note that whenever \a pcb_dst is to be set, it MUST be set to a valid byte - count. It can not be assigned \a KCDB_CBSIZE_AUTO even if the data type - supports it. The \a pcb_dst parameter is used internally to allocate - memory for the object. - - \subsubsection kcdb_pg_cb_iv isValid - - \code - khm_boolean isValid( - const void * data, - khm_int32 cb_data); - \endcode - - Checks if the object pointed to by the \a data pointer is a valid object - for this data type. If the data type specified the \a KCDB_TYPE_CB_AUTO - flag, then the \a cb_data parameter may be \a KCDB_CBSIZE_AUTO, in which - the size of the object should be inferred from the data. - - The function should be able to determine the validity of the object and - return \a TRUE if it is valid. Return \a FALSE if it isn't, or if the - size of the object can not be inferred from the given data, or if the - inferred size exceeds \a KCDB_TYPE_MAXCB. - -*/ diff --git a/src/windows/identity/doc/cred_main.h b/src/windows/identity/doc/cred_main.h deleted file mode 100644 index cbd88bbcb..000000000 --- a/src/windows/identity/doc/cred_main.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * 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 - * 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$ */ - -/*! \page cred Credentials Providers - - \section cred_contents Contents - - - \subpage cred_data_types - - \subpage cred_msgs - - \subpage cred_acq - - \subpage cred_prop_pages -*/ diff --git a/src/windows/identity/doc/cred_msgs.h b/src/windows/identity/doc/cred_msgs.h deleted file mode 100644 index a60b883d2..000000000 --- a/src/windows/identity/doc/cred_msgs.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * 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 - * 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$ */ - -/*! \page cred_msgs Handling credentials provider messages - -A credentials provider plug-in receives a number of messages during the -course of execution. This section describes the appropriate ways of -handling these messages. - - - \ref pi_credmsg_system - - \ref pi_credmsg_cred - - \ref pi_credmsg_list - - \ref pi_credmsg_credacq - - \ref pi_credmsg_destroy - - \ref pi_credmsg_import - - \ref pi_credmsg_prop - -\section pi_credmsg_system System mesages - -There are only two system messages that a credentials provider needs -to handle. Both of these are explained elsewhere as they deal with -initialization and uninitialization of the plug-in. See the following -two sections for details on handling these messages. - -- <::KMSG_SYSTEM,::KMSG_SYSTEM_INIT> \ref pi_pt_cred_init -- <::KMSG_SYSTEM,::KMSG_SYSTEM_EXIT> \ref pi_pt_cred_exit - -\section pi_credmsg_cred Credential messages - -\subsection pi_credmsg_list Listing Credentials - -When the Network Identity Manager application needs to refresh the -list of credentials that credentials providers are aware of, it sends -out a <::KMSG_CRED, ::KMSG_CRED_REFRESH> message. - -Each credentials provider is expected to populate a credential set -with the credentials that it is aware of and call -kcdb_credset_collect() or kcdb_credset_collect_filtered() to merge the -credentials into the root credentials set. - -In addition to responding to <::KMSG_CRED, ::KMSG_CRED_REFRESH>, each -credentials provider is expected to list and merge their credentials -during the following events: - -- When the plug-in is initialized, during <::KMSG_SYSTEM, ::KMSG_SYSTEM_INIT> - -- When the plug-in obtains new credentials during the new credentials - acquisition sequence and whenever the plug-in becomes aware of new - credentials. - -\subsection pi_credmsg_credacq Credential Acquisition Message Sequence - -The aquisition of new or renewed credentials is conducted via a -sequence of messages. Details of handling this sequence is explained -in the section \ref cred_acq . - -\subsection pi_credmsg_destroy Destroying Credentials - -When a request is received to destroy credentials, Network Identity -Manager sends out a <::KMSG_CRED, ::KMSG_CRED_DESTROY_CRED> message. -The \c vparam member of the message will point to a -::khui_action_context structure that describes which credentials are -being destroyed. The plug-in is expected to destroy any credentials -that were provided by the plug-in which are included in the user -interface context. - -\see \ref khui_context_using - -\subsection pi_credmsg_import Importing Credentials - -The import action is typically used to request that plug-ins import -any relevant credentials from the Windows LSA cache. This typically -only applies to plug-ins that provide Kerberos credentials and is not -discussed in detail. - -\subsection pi_credmsg_prop Property Pages - -Credentials providers are also expected to participate in the user -interface when the user makes a request to view the properties of a -credential or identity. - - - <::KMSG_CRED, ::KMSG_CRED_PP_BEGIN> - - <::KMSG_CRED, ::KMSG_CRED_PP_PRECREATE> - - <::KMSG_CRED, ::KMSG_CRED_PP_END> - - <::KMSG_CRED, ::KMSG_CRED_PP_DESTROY> - -Details about handling this sequence of messages is discussed in \ref -cred_prop_pages . - -\subsection pi_credmsg_addrchange Address Change Notification - -When the Network Identity Manager detects that that IP address of the -machine has changed, it will issue a <::KMSG_CRED, -::KMSG_CRED_ADDR_CHANGE>. Handling this notification is optional and -is only necessary for credentials providers which are affected by IP -address changes. This is just a notification and the plug-in is not -expected to take any special action. - -*/ diff --git a/src/windows/identity/doc/cred_prop_pages.h b/src/windows/identity/doc/cred_prop_pages.h deleted file mode 100644 index 19426237b..000000000 --- a/src/windows/identity/doc/cred_prop_pages.h +++ /dev/null @@ -1,180 +0,0 @@ -/* - * 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 - * 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$ */ - -/*! \page cred_prop_pages Property Pages for Credentials - - This section describes the logistics of property pages. When a - user selects the 'Properties' option from a menu (either the File - menu or a context menu), then a KHUI_ACTION_PROPERTIES action is - triggered. This is handled by the credentials window and triggers - the launch of a property sheet if there is a valid context to - extract properties from. - - Sequence of actions: - - - KHUI_ACTION_PROPERTIES action is triggered. - - - The main window dispatches the action to the credentials window. - - - If there is a valid context, then the credentials window calls - khui_ps_create_sheet() to create an empty property sheet - structure of type ::khui_property_sheet. The \a ctx member of - the structure is populated with the property context obtained - through khui_context_get(). - - In addition to the \c ctx member, depending on the scope of the - context, other fields of the ::khui_property_sheet structure - could also be set: - - - For ::KHUI_SCOPE_IDENT, the \c identity field will be set to - the selected identity. - - - For ::KHUI_SCOPE_CREDTYPE, the \c identity field will be set to - the selected identity, and the \c credtype field will be set to - the selected credential type. - - - For ::KHUI_SCOPE_CRED, in addition to the \c identity and \c - credtype fields being set as above, the \c cred field will be - set to a handle to the credential. - - - A global message is broadcast of type - <::KMSG_CRED,::KMSG_CRED_PP_BEGIN> with the parameter blob that - is a pointer to the ::khui_property_sheet structure. - - - Subscribers to <::KMSG_CRED> messages handle the message, check - the ::khui_property_sheet structure and determine whether or - not and what type property pages to add to the property sheet. - New property sheets are added by calling khui_ps_add_page(). - - The following code shows how this message might be handled. - - \code - - // Message handler code for KMSG_CRED_PP_BEGIN - - khui_property_sheet * ps; - PROPSHEETPAGE * psp; // from prsht.h - - if (ps->credtype == credtype_id && - ps->cred) { - - // We have been requested to show a property sheet for one of - // our credentials. - - // The PROPSHEETPAGE structure has to exist until we remove the - // property sheet page when we are handling KMSG_CRED_PP_END. - - psp = malloc(sizeof(*psp)); - ZeroMemory(p, sizeof(*psp)); - - psp->dwSize = sizeof(*psp); - psp->dwFlags = 0; - - // hResModule is the handle to the resource module - psp->hInstance = hResModule; - - // IDD_PP_CRED is the dialog template for our property page - psp->pszTemplate = MAKEINTRESOURCE(IDD_PP_CRED); - - // pp_cred_dlg_proc is the message handler for our property - // page. See the Platform SDK for details. - psp->pfnDlgProc = pp_cred_dlg_proc; - - // We can pass the khui_property_sheet structure as the - // lParam for the message handler so it knows the scope of - // the property sheet. - psp->lParam = (LPARAM) ps; - - // Finally, add a property page for our credential type - // stored in credtype_id. Note that only one property page - // can be added per credential type. - - khui_ps_add_page(ps, credtype_id, 0, psp, NULL); - - return KHM_ERROR_SUCCESS; - } - - \endcode - - - Once all the plug-ins have had a chance to add their property - sheets, a <::KMSG_CRED,::KMSG_CRED_PP_PRECREATE> message is - broadcast. This is a chance for the property page providers to - do any processing before the property page is created. - - - The property sheet is created and made visible with a call to - khui_ps_show_sheet(). - - - The Network Identity Manager message loop takes over. Further - interaction including notifications of 'Ok','Cancel','Apply' and - other property sheet related actions are handled through WIN32 - messages to the window procedure of the property sheet and the - message handlers for the individual property pages. - - - Once the user closes the property sheet, a - <::KMSG_CRED,::KMSG_CRED_PP_END> message is sent to all - subscribers. Individual subscribers who added pages to the - property sheet must free up any associated resources at this - point. - - Continuing our example from above, the following code could be - used to handle this message: - - \code - - // Handler for KMSG_CRED_PP_END - - khui_property_page * p = NULL; - - // If a property sheet was added by us, this call would get - // a handle to the property page structure. - - if (KHM_SUCCEEDED(khui_ps_find_page(ps, credtype_id, &p))) { - - // It is safe to assume that the property page window has - // been destroyed by the time we receive KMSG_CRED_PP_END. - // So we can free the PROPSHEETPAGE structure we allocated - // above. - - if (p->p_page) - free(p->p_page); - p->p_page = NULL; - - // The property page structure we added will automatically - // be removed and freed by the application. - } - - return KHM_ERROR_SUCCESS; - \endcode - - - All the ::khui_property_page structures that were allocated as - well as the ::khui_property_sheet structure are freed up with a - call to khui_ps_destroy_sheet(). - -\note The maximum number of property sheets that can be open at one -time is currently set to 256. Each property sheet can have a maximum -of 16 property pages. - */ diff --git a/src/windows/identity/doc/doxyfile.cfg b/src/windows/identity/doc/doxyfile.cfg deleted file mode 100644 index 7bb3092fe..000000000 --- a/src/windows/identity/doc/doxyfile.cfg +++ /dev/null @@ -1,1259 +0,0 @@ -# Doxyfile 1.5.2 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file that -# follow. The default is UTF-8 which is also the encoding used for all text before -# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into -# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of -# possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = "Network Identity Manager" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, -# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, -# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, -# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = YES - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 4 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to -# include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = YES - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = NO - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = - -# This tag can be used to specify the character encoding of the source files that -# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default -# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. -# See http://www.gnu.org/software/libiconv for the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the output. -# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, -# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentstion. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = header.html - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = footer.html - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = stylesheet.css - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = YES - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = YES - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = YES - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = _WIN32 \ - UNICODE \ - _UNICODE - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to -# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to -# specify the directory where the mscgen tool resides. If left empty the tool is assumed to -# be found in the default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a caller dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen will always -# show the root nodes and its direct children regardless of this setting. - -DOT_GRAPH_MAX_NODES = 50 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/src/windows/identity/doc/footer.html b/src/windows/identity/doc/footer.html deleted file mode 100644 index 6383e6a57..000000000 --- a/src/windows/identity/doc/footer.html +++ /dev/null @@ -1,21 +0,0 @@ -
- - - - - - -
-
- Generated on $datetime for $projectname $projectnumber by Doxygen $doxygenversion
- © 2004-2007 Massachusetts Institute of Technology.
- © 2005-2007 Secure Endpoints Inc.
- Contact khimaira@mit.edu
-
-
-
- -
- - - diff --git a/src/windows/identity/doc/header.html b/src/windows/identity/doc/header.html deleted file mode 100644 index b85d6a1e7..000000000 --- a/src/windows/identity/doc/header.html +++ /dev/null @@ -1,6 +0,0 @@ - - -$title - - - diff --git a/src/windows/identity/doc/images/credview-select-outline.jpg b/src/windows/identity/doc/images/credview-select-outline.jpg deleted file mode 100644 index d06ca9f88cc2b5f816b837f4a3d2247186df5c0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16084 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 Xg7(?pxrzMKb^#C2hN!Pd`>6i`gPRKu diff --git a/src/windows/identity/doc/images/khimaira_logo_small.png b/src/windows/identity/doc/images/khimaira_logo_small.png deleted file mode 100644 index 26c338007d5dc8534986c5dc5461d786c157a3d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3970 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 Xg7(?pxrzMKb^#C2hN!Pd`>6i`gPRKu diff --git a/src/windows/identity/doc/images/modules_plugins_krb5.png b/src/windows/identity/doc/images/modules_plugins_krb5.png deleted file mode 100644 index 127e89e8dd10faf16b794cce9eb838040de06fab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22193 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�gaH|V0V=9(eVw+ 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 diff --git a/src/windows/identity/doc/main_page.h b/src/windows/identity/doc/main_page.h deleted file mode 100644 index dc7d1e3cc..000000000 --- a/src/windows/identity/doc/main_page.h +++ /dev/null @@ -1,174 +0,0 @@ -/* - * 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 - * 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$ */ - -/*! \mainpage Network Identity Manager - - \image html khimaira_logo.png - - \section main_dev Documentation for Developers - - Network Identity Manager is a credentials manager, which is - capable of managing Kerberos v5, Kerberos v4, Andrew File System, - and Kerberized Certificate Authority credentials. This document - describes the API that is implemented by the Khimaira framework - upon which Network Identity Manager is based. - - See the following sections for more information : - - \subpage license - - \subpage bugs - - \subpage releases - - © 2004-2007 Massachusetts Institute of Technology - - © 2005-2007 Secure Endpoints Inc. -*/ - -/*! - \page license License agreement and credits - - Network Identity Manager is distributed under the MIT License. - - \section license_l MIT License - - Copyright © 2004,2005,2006,2007 Massachusetts Institute of Technology - - Copyright © 2005,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 (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. - - \section license_credits Credits - - Network Identity Manager was developed at the Massachusetts Institute of - Technology in partnership with Secure Endpoints Inc. - - Information Services and - Technology at Massachusetts - Institute of Technology - - Secure Endpoints Inc. -*/ - -/*! \page bugs Reporting bugs - - Network Identity Manager bugs can be reported to - kfw-bugs@mit.edu or - netidmgr@secure-endpoints.com - - When reporting bugs, please include as much information as - possible to help reproduce the problem. - - \image html khimaira_logo_small.png -*/ - -/*! \page releases Prior releases - - The following is a list of releases of Network Identity Manager. - Whenever there is an addition to the API or a significant change - in behavior, the API version is incremented. A plug-in that is - developed against a particular version of the API will be - compatible with any release of Network Identity Manager that - implements that version of the API. - - The Network Identity Manager version number is set as the file and - product version of nidmgr32.dll. - - The API version refers to the version of the API exposed by - nidmgr32.dll. A plug-in that was built against a - particular API version will be compatible with any version of - Network Identity Manager whose API version is the same. - - - 1.3.0.0 Kerberos for Windows 3.2 August 15, 2007\n - API version : 9 - - - 1.2.0.2 Kerberos for Windows 3.2 Beta 2 Apr 11, 2007\n - API version : 8 - - - 1.2.0.1 Apr 06, 2007\n - API version : 8 - - - 1.2.0.0 Kerberos for Windows 3.2 Beta 1 Mar 29, 2007\n - API version : 8 - - - 1.1.11.0 Mar 20, 2007\n - API version : 8 - - - 1.1.10.0 Feb 28, 2007\n - API version : 8 - - - 1.1.9.0 Jan 20, 2007\n - API version : 7 - - - 1.1.8.0 Kerberos for Windows 3.1 Final Nov 22, 2006\n - API version : 6 - - - 1.1.6.0 Kerberos for Windows 3.1 Beta 4 Nov 17, 2006\n - API version : 6 - - - 1.1.4.0 Kerberos for Windows 3.1 Beta 3 Nov 08, 2006\n - API version : 6 - - - 1.1.2.0 Oct 09, 2006\n - API version : 6 - - - 1.1.0.2 Sep 21, 2006\n - API version : 6 - - - 1.1.0.1 Jul 19, 2006\n - API version : 5 - - - 1.1.0.0 Mar 08, 2006\n - API version : 5 - - - 1.0.0.0 Kerberos for Windows 3.0 Dec 05, 2005\n - API version : 4 - - - 0.1.2.0 Second Alpha release Nov 30, 2005\n - API version : 3\n - Released along with Kerberos for Windows 3.0 beta 2. - - - 0.1.1 First Alpha release Nov 01, 2005\n - Released along with Kerberos for Windows 3.0 beta. - -*/ diff --git a/src/windows/identity/doc/netidmgr.doc b/src/windows/identity/doc/netidmgr.doc deleted file mode 100755 index 6e2c9a37f493ae9e064af3b0d4b9cabdbc7d0a7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2042368 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 rb^0+TmupyoMi{7g58ed1D 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 z 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 z%0A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

LL%>qPBljUrEBb}B^pSy|Qu{2UxPZ{;J^??Yvz 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

*8RIpH`+>bRh9Tuo4V@| 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ÉYv0wVG8*k@C&DS-2mMp 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 z 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 z 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%0D_ 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
    GpVgM4U=^jQ?#%02k2<8o5f6p{+N`6HUPG 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%0DjvER! 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 RX2C5W*S|S17v_Nr{tq`?DL4QC diff --git a/src/windows/identity/doc/netidmgr.pdf b/src/windows/identity/doc/netidmgr.pdf deleted file mode 100755 index a5b22a965e97b1634cc19930a8bfc80eae7a948d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1565851 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%0A_#@mV4Z~5gUcuikWO^T?(Eq6!2%{D%Kw| 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%0AZ5vkf@OnQ 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%0DfdWI>}nrmE*S= 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%0Dq-<;?+T^mW|UY~OoVOBvg4R;<XxW29bE6(YgT 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%0DDDMF^bK^A2Mx2YOt92A3I%ZSQKAqAfb{{`e6?7R z#r*UZb~@|$h)T47`SaL-_=RE>L7^DS-dRgZ7r>R`1MNt@fc&ETlF6#ntS(})vs7KK zjd|vWQ^^>ARK_Q-NNAxKrsIrAi7Pmrto}I|PRyuJo8EI=KE+9=ihhVD>Qidi<cM3# zWq7{Ddvu)DcgDs)u%YO`u6L&%Y;n0E6zdB*VgtI1yoTELy!BK%GT^3^)9_ZBTu5Hw zH`_k$dw$|b`?`oV3l*!+0j|2XrFwI#%()St`_nPUEp#+yc<!CR{Qmo>Z<{JS^Yh03 zaySz+0mTQqyFx&gfJn1sDdnu<e&_av>K;aCvBq9cr6t2fjjT%#z!cx`(9I@+4(fsK zjl!L6+w2-7N>?MUs}tH8Zk+QI%Wb)(qGO>Oqbn;M0@N^CM>0cz;t8F0lYb4pU?W~j z(H<crEO)`@_M@7w6Dgy<PFj2VQTnBw$VZR&WGA0V70IV@`9$`Mly1c{hs@qRG}+!W zh<>Z4b@;td@K*%wqZBg77wO({pc{_?yaeH{tS;`E>cTu8gLBtreU7(Z`o8=3Cg!8S zDSCwh!Ann;%mWG|Hm|^an9K_)ED)-06(gARx<L_Zue0}DFi#}TrOrjNIViK&BxC4L zRNebyc2YIGplX+DUe)kFsR$R25C5thG-2FdVv3|d5;LlVL3?Vgtt7IWBybejL2mh# zdP}KbA)f#)2IfQ=U3$**nt9}Du-3JDb&MP%DIUtn>Na9ZvpCxGD8RXl23PX-17TbP zE69#Jbbtq?2=?~pxyj=@ELh_xTXx7AjAQ5&fN^`ps{FD(DwR4LN_WY8cs0+NBC<4P z6V=+aWhu1yU4QS3Yil^ATmZLUuEt&j?X3bQkEjVKTTpIS+3%5iMUVpZ$F8z|478ss z1Av+^Ll{;8{AdY{({gL8-Kkg1+)I>{owPtQ!`g$Z1z1A!U#R=Xzfku#P@+h`D|vk6 z>YX9&(8OKr5=rGR@-hc<rf3WO)I{np>w`}wuAANvIOWr82D0n^`9`kRN*b@IL&Fib zT;wTG;@mM|!24VGd)(J?%g9b`J1V&xe}}=$N*qCKSYK6qR(ncR@g3dV#(<9KvtOTt z(6N{9J0!ppUPsCPmiD3R&J|~BF2fZDN-9()YxkYyvH+&|G(L0KJM4q4*EMqlz?L`X zWC#}H@ruPlJZ*jZw+)wC6=vpv_OPFuc;WgatJvd0vA50Sov8ln@<cHnk29Xv^ljN1 zM`&IbkeRX!;D-Eg4L#`h&ue^6m#<4)0Vgu5Uv=PcWbS<AWWN3entfj-kt1M+egYjt z(f)4MdOsMAVfd7WRR&fnQ!MXI2^1YZ!oCWUg6P3hNos4~I{VeL$l>#X?=ls><8Qd! zdY<O2{RzWw2aSh<kMW<ys!#w;KoS!S^a*4geba~=1D_b?jRSoye%^(#1BN%WdO(HX zU(D&HpG4^a@eG{0Se)-&WHnnJgSWnd_9R6C>$K+5m+`*`hf~Orb^+EL2H>gV?eg<o zoQm*(MiGENp^)?FLUe7w1U@CYfBCQ-gb5Uf?*9%ofMz%We(?S!5SCPV1AhWf1~mEu zyjBD%yPQGfeE}_p8x|5m@)%(&fvh4tdmo^J-`h<9)vEN&SkTZ<esK`T@-zFX*d^}t z>~PJ~`_!a+1fW2p_OyOVpTtkyR<QogR$aY2fVdxU6YkLa&|($=2LD}Sf2n7Rh%2ao zl}pul0PRPCJZ)8>WiQ|OO0W6sdCuP_?(MI{agwdYO17rfZp4S@2KxSaB^1b1@FnB0 z4}yH(Y$K7v;KX}Uzu(_x;=WIpH)tHN3Aa#yW`iJudp|~y!L>gry34@cxq|Ma9bn$L zEdN1+yI}tn8I&Tr%^cD9i$X4?7#<_>FTQ*=tkXQ{UQTufB%Y*9=l7#gC>_Wk5z)=# zt#8m?C)^Zi2O<)r=Wp9aANz7yQY{EP0^$-wlVk)6yrg)OGB}(gh(HedQU;19i3oji z7qOl`3g&DFbwo?JtyjN6fM9bMGHwMZ<vcp>1%~L}^)GoL>h}n7AsqNWZ5a`n$$j|1 zxMrz_Xe0wb+hfH3O*mz|5|8*7d1PcCfb;*<eWB<sAf6gj5nfV@0EGbkP=43Uip!&S zt6;)@mEro-n}T3!R-$slKx+s$+KN|{LUD?s@|Zq~r-M%z#fN?~C!zH<f6ao4F>|II zivQJ@ES4g~I>)A;dlF~W0b*SG?-u$>5@sfmevfSsmzW_xkDLIXjj8i7U$;tt;ig=f z5=>ZF?e6S{cP+X%DE8Ywa!UwEb)OJqUJD2-DNLm&jK|fD0>un;t4Q}PeKZCP#^&+n z(Q~lmYiKPkP{wz&^G{H4I<PX<SX9_C1!`*&1vOQ{DOs1j#WiWsr9c<R(;J2#oEftg z^I(LE>j1r2DE=)<d7zcT>cS%*VYF5skNFS*^R-vSKO>uS!e1-)d(4u5(oW?ua&)TE zSkU3%{3>NjHmlrxPL2?V<RmL3SEm9$t9STB>m{u`Dwce(bo*6_gTbr$wF2=_uKH*X zMFW^YRQiZv|3dqDx;N+q{$DLX$luNdmLaN0;IK44ZUIM*l2<^oLj(S*%ec|fIAh4L zhbGh*=uE_FYFfYr!yD2I0QChpl~=9S{MLVxfBPgRy~I+<DaYgCvBGwZ$A(gwNPL4n z{;8V}wP4PI4CBZ=;dAk)vY78!i9P!D10KN;nTzeYd)C6iscnkxk1Irc^$Deyuy~!2 z?aZj@o}Ij^<hy=b4m8YFXwb_kbUV6;osS_mWbgr<!V4}60X&=G^Swk~O%kwvFy2aS zFRfe)>E7}luUVXedGF0TL-};slN^I?9Ndr>{U_{0AI`dzpg&~Z7ExjlOfTFvF5DLK z%ew@)9bsV_noRxs3UPEiUGfV~`&ey%vXoU2$KvIA@e@H|-rWKy%yp*-3iHiB6z1(o zt0w@3IV*RX?P6%-wYVMOo_jENi~eBNXDoVKe+H-Q4&H?2@~QEhwTu2~{6U)V+z6L} z+xAV7I!>2bqESopfcXpB22q#16|wNm27?}|hFUj+wn2??Y7r-JI``{ElsNn;$p^hM zb~n<`yR_A!E{?E)=WUPwXT9d}fbF~Vh2+r*BdK_^`r|i`$bLVquXtZfW>4)@6nA)` z-d5(u84#3LzDL=BUCRUB>0#Hsk@=|L230$B_%O!~Z8@4sV}<;|>MsQ5XUe4cv-&H> z&ua0cKchhM8)-2O#fDB4*H|yY3D#U?rShF}zW^G9Net(T@di~;1oH<OI-{*+oCLYf zTS;|Yq6E7ps#~_(3icQV^?=fvV`oF?gN=DW`S7B;K@G3B8nd$k`ebke!9qfttIY)R zUeR$#kyEu{B&EvS7S7$5+(%whM$jno0&bJ+G=U?NNB#5Dl^b*`<V4*ngzR#|_ho$A zwIYMx&qlUtcoU^3yEBxQ%?hS|CTuWuL+b{3@0QcbC$FF*^wu~!ux~Ck8pi=7=EyTb zMQ)2V3Ol8#`q3S5|0Rq%P0i$K{(g<5eX~`s9jC*t!pavZlhhQ{M7E}!2DC|dr{gQY zKplX-LXRH;MI3^Px)xVzwWyA##?BePagSBf!?{y4icCNL{Q7e2smh3tVj$obnt1jW zkK?Jb0of+<jW2In^AWFwO*;N4>r>EP9{RN2$P7BlIjo;HD^5x(c@==i#>l()vU0D6 zTgUCo9>{EG2q;u`kDMFYG!&ne38iiA^}xeoSV_#d@I_o=jeUwm{O$v0MnU5DVN2QX zzgOq+1Fg|n*Y?;E(K&LOf!5Z>2^rulZE^LXe1G$~OHZh^Sa1U?N4JZUY$cE+VLk`i zQXmTS*fxv+wi~0N_+ZY0iVhKp1J2^#vN_o&gIS~4s=nW&Z#aF>pW8e4LXbJx^zwGz z^~&c6A&Ogw<K>uaa(-;L{ae$FR^MtE`YXmkbGnEhDtuAj(Ks$3ZMl#BvDT*Sa&wEe zJsE;WL(zk-IUUzSe`3dvR*>zM<f8mWUV_nsz@-C-3S;-kYxdwq<O~&b8o9S%PCNNN zoYHZZK7WM!fsL&S$bk)qe|_o#`Jkd11~Hkjz3q!hU=65Y$NDD-0BwVQ{yvIzZJX^y zWY}WzZ^6FLLAuqcy3KQOHxumt9QKSoxDH+S<KI3RnEwoF|3B8({TNMvibwk2TBl*2 zO`i&Y{Q?Gqc#FOF8fXlDAGJIJlCb+w=srdPyr5dgoG`#oM>ul~eW>k!<_E2q%%_dr z6kVzrkT#Kjf`xwI@c;COC~|1XvFI?hqpF9#ElWTw!|>M|R{!;eMyaW{CT}EO{1<ru z5cocjgAzBQcAyrg?3EIcCHsC!QD(9L!)vee|Lqos-vaUPIi#(Xz>w~5ivJ&yVRd}> z4e00i?;(o-buceP8DNhg;(@jf&?S1{X5UdXZF*q>KOF>(qXxj5fB#z!sCl^!GK!Qq zTKT6jPBrWi^-3S~k8M2hvh&)8GaA{!-wFVtVJu0bJH6b|F5m(h3RWrT(hFOjKv}g1 zm2|etRND3X|EVwl^Z#!F%<0`UZ{}jPg<#kfImV?ZO*dTkQs?;3ue<NElOp9`e7PQI zerond=A|Gk+3+t9C!Vu|5d?d;%f!tD$MJ;Cf8QHvPhj7YRu+wn*;90?6_h1k!j+PW zj`}%&-lKuXj)C+EIz9keN?Ddhhde;)!+8S<%Kt=w)C|HH0IBZBw1eVNk-9<iEWj@| z3{*H05`+>CypO~oN8Pb#-~&bi-i5ztpT*+Op*n-(@s#IoPhB4S9NL|lav?4_;@`(1 z1^)qySpO+X=w&yhbQy41yIG=&p@+ChFd)PQ0RlH#3Gr?b!ss^FsKOjC`w6xa0eh6I zQ(XG^+?nHdT<^&pvTCshbx<?&9>t@65~#hxUgnQ=T69V3Q?bkWK`wI)+A}6dVp1VD zdTiuT^v*m<`B~Yf*f+Y(0R71NvK<=WBu02W-*kX$E*d2Zye}U7({sR-z&M5aGxVG9 zC*5gCeEd^GPout!Ek7^}cQd-W7Z~>^Q#cz|1-V@$7{VQ_y<W<Vo0yehRc0dtQ6BF& zSYCWh@P!Qn3DN>mFob6JQLU5`Bu_E*sZ3NIyz4ED#nVBcmlX-uO<rt+km6C{?Ue)i z^w-0(9(ww`+t;-sKjObNu2a5=nGd`I8Z36@n)V@o0kg@WB+wpfzK@oWgsSw$;P)X9 zQNqo2>+Ju`I8IwxS#G%eaI&jBiU6-AgWCnWBJui=*_7b947_)73#<LR{#k6hPj$yV z3wSRuXOHCV9vVUuIONm-x%Ewh9J3Xe;p~AOAk}#b-o6oSNCHrG0UrMg_z*9mf7}K7 za@D7mE0z0bR=d7(T9tg<%87?Haq;8KTn~#zVPBn_PlODRKRqj~bj@h_baa^LL_d2d zIy8o||E*7@iTeIZo$;${{t2C=9U+X58_fB|xVJ4(XF}-i+<Oe<Au{9NiLIDef6&K- z*T9bAPra|u(sUQK^1$67U>v2-;C!3SdF2VMPb3&Rv*Y!NjYo=k<T_NVzY|_x*$h(L zGS!+Aa9}_ld?@Op$~ikYu7kTMb5Cu>Dh!7vW?iZ|GAvptLBJI%bBcgo&fIbJ^&Kp^ z#C&o)vMs5KEPCf`;ST>w_-;<_YpVZC)gMh9N^SL5Xg#gvgmD9A?%q*gqJEIkqd%2m z19{yyplN@od$b|Pm=@J8>SzJI%qh?%b0`LUEL6WHyp#Wg&}i_x<WpDgio<%CKC0+! zuB}W^A5fY$yPRHqG;P~x(UelOnM71#!=!OQ-3zkgk~770Vfj;I&7T!jm{5PIM-Iqj z6!aRB@JY0H%!)L)A<D(FG;Or$XlvNrYRNZ<0KD<!beF#4Q`AIuKt|c+XU30_dBpIX z&U<A7<&6OaMJXKNf~$lMx{xuc={I0qCcN3T(zF+<VB;6V@lD_2I4xW559UhytM8Gt zDugKgDmKq{m}Z~iMtdKw>r!_-js6bqdjNUR42q{6=>u9kBr|yIypdScUykaF3JkFF zi-@Y+Fd#tc^8rI^1~{U@?e2RJXvL69H;o5IHrrqoI%|Lt6DKX}(~uec`@@#BjmvNw zT{z|X4j?Iujb-?nxD4A`Y!WjpT7yn|ZyFsyla?zgSda(tBcLrU%nC~Q7;kVB`l5Mc zB&}h>Pe68bQVJn#)P~T_eyRojupfZE`A`u6F@#P5!bj?Z{p#a5QIr852<c1T$S%SL z!QTNZ@zcF>AW^`%RFXYt0fY6Wk0bL<{ceOE<2|`HY8N_2%$!0uEqrg_EV>a=$$#p? zat5z~)@Lkq2O+KmqK1zF)p!6U|Az7^`8GwPguci1QtC09YKfRssg<aWPf)%BwuHgS zuo^UxwxMHq9C2%?UtFRf?Ts`?V(-KMMj)gwhgVGh^ywGh--0XQuRLmMDRa)yuzfs? zlJxXBA}-XkWAt#?dNnB@GMlHMB7M^A24z7anaC8aU%0&+u9~W*fz!C`pb23zCI3){ ziyt>}`@IF{jqEu<6Z%vRkr<uc_<?_3{_I?n0smQLOOmx`D4wk2oh}82mH54P8|2tZ zUNlCS?F1hv*%tejx8b%|zd@_ZB@!q3N0;o?!pg=Z!pZ{{s6*G!s<OKqr(9kg(4a5i z_k!?1r!Z=Uf8M6ezn^muA6y=&!UH}b0$ls?UI6z#<Sk$ckdO?4W{^#JDEIF|*aNFb zZ51W<jC**>4T&j_YU}A<ej{#1TzdwvWuKvAgooPG#x7`ecAWMP5x423;*?9NLO^sQ ziD83~kwMdFL*W|(UvV-4ACD^;_V^zao9UkmMZy>{4pq)#ItcoZk>ZW=vep!3M58wH z=F_GumZUvmNMlYa-adax!=4Qj;K-1<ybxX~dxY>}U^NKC6@LK&`k9ZGn6*SPrBV5k zuH&(8Cn#Tp8<4?qGNAO$pfY2E8f1MlIxe|?mc(&DdKSt3%}^)65THAfP=17zEP+Vp zDYJ76=sRHck2nF{20S0sfk5zg`1>skcmsHS@+6(VDWl|SA@1W~iO#mog1`XiD?;DI zBf!_{=aAqK5M{60-%(U>20O3wMcq#_@OB2{{e<{%_KpeC0v;PFA#3*D6Q|$nu_5B5 z*ASB*C{C=v0t7s>g|G80<+|F6CqY@dgn58`37trBkVfXcv*$5{@+Z=s_zA_`fU3-} za95LtB-BaomsK~=u(rscOk)HMb9yfIAH6rm{4aW6^z1}+UW!atHcCy?;rhB~Z{Y@8 zq`s`;WV}f0+iaBgHGj3o>Wz|`LE|{^RCymw_hOFMt%duq5+vxJikkA>`{y=KeR(4X zL-EXU6=#7pAxu@{7Y=HWi;d+$N2fEom(RxKx!1HX0UatM?L~NM{)Fv>IbOMrH>D-! zobvLIIGQ*h!%9u)FB#9d%+)gcIW7W$c!B~BVn(#V(Be!7GhPx9#~DItp1C0_wT&DY z^xK}U^?v}AGy)9KHBRUOy~VPG47232$$=MJM|t4!DnRce2+0LWAHQ$4su^^2G|m7} z<JS=Io<MNQffUn;U(I~s(e`D8K5*$&v#i~3Oefw(_-7u-7ZYXNy~D%7Wq>$<N1%tF z7aa5xyaf9|^B5;Uj~@@>S$(Yjjtzn#6feQ(cY;K{9f?dCq~`9|qAV4WL!pi7{c}O1 z0Z~tY7Cp~C=&3J}nEid&K|~l9G68B!5e~)w);Ym+|L?@@DG|6kr~9We&B$1EKmiO1 zWQF0MYxuYUUFilHLcx7Fh_#nsR3ZDhgbI)^1z=_WV-*e)YtDU)gmh(9DIk_F#6$*? zkO@`^=(fWb?Zx2lnogCqfJ!aieL5>u`<{3|vwb6F16p1BB|oIGrq_@6>jnCsgQ3#? z**b&gEsZzgk8tN1h4DhirBuO2&|?-mIEk>RLa}y(=kifmeVn#1pZh=+5z_m9kSSvl z)Ohd~uANFkCiNz?Y?TQeiJ7hU|EWbH58c@QYSEQj-Px7b<zX;uqmEG1U0YgHjotpn zdEBd9_DXk&2j5ZuQ)%2avo!NhzfG15LSZ}^#RbKl_O?W*+?~*pS4ib;Al3fe8PL|R z)n1KYsm10$JtlZ#2yP?N5D`4N!Dabi!VkkUiwhyfj!dgxE9<(M6nvE}-W3QOB$B29 zLLYFruS}9JXCTA7H)$t*heyG8lHQ_~Mi0%p?(fkFvOTSY>rS^9*Il14|55E2#dY}P zoOpOFm4-Wh>y)W8pfv8$$|<CNq7;6Dd41U1`|1f}wYf8}EX(^4YQp8X0OyXvXYbuC zDamMlIlJ`+@byC+@D1U4$4;i%W9EKa>x0pjTlmdQ+Q`Fx&!3H}&EGxMAq4ZbQJgyk zW=5m?DmrAj-XvO&y>kCv6`@N8#zI=uk&x+GL6Sd)`@i{4v3mQW9Mg85GGM1|5TEZ> z!CzT-R=P&~Jp)j);FL4NEQmzk;np}9@7zF(y&ljhO$gM=ADhPU)NU&aeCx7b)`cDA z_VP0GFwk`QF8TWDw-@~!J<T)s^0eR%PJP%55uINhn3r<e6RAH6A69CauM6iOGacbc ztP7WCRnQS_c`4~}f?4l*)AZ^Uyi&9jxJm6N=(lOs^9W=14Prh)!Ehg<`{}PWho%T( z6Ji5e9M}p9Z@f$2;Wl_Yu9CFcvT){gb+xyoJb7~r_Y{XDI0D2^<kuK|w#V08HMS?0 zp@a0l8&<YjejhEbD>YvCYT!C1uvS@l6&2sE9Ppu=hA`_YBYpM;zraNTj6D+IkB|VH z4Ez9VxtA!bM}_@xo%Gdy;}H+_7x4Ea$Y$$ZOB_d52zPIA^bLXC&1H^3|47C2X3!7= zy!`6!S8t*U9lKm`lO~WWs3J}=gXq0l6Uq8SfCyLMh-?8ECy+rQUb11_zXbmK0C>rU z@j9s==CM1{VKy6Yv?|4i4$n<$2O)jr>^)sGs@pyoS;K<Z)YL>;_3l_W%z?JPjV8XW z(5UhTBh?x})tD~us>VlcTR^D0mQP{fzB-<BMsRr}z%~rA!(YW}FU*}ngar4q?zCBX zHlScf9@a;<M-o4YZydR_lNvx1bA8+?les)PaT|RZqu&H_LYXzWIJ!~H4CA`&JVg9~ zhcBFKKwabICbxWAs5`NCtaL2h&*6v?<Km_@LnQespN>=|i>4snT+MectRE!c!S}fK zvu@0I_X<ZBo-c5EyCL*gce0=$wj+U-?{58pp+*0&_&X9<1KE^gLPrms5%+tp%T8bx z1p8GkxXepkTr4prA`?5v$uolrN6w@Zz$D?~p9wDFdqs8<CqRl1fsskVL%=QM$FQmn z0aNG@dSisoOW{S3caGknK_P^n(5O)Ar|H@Y!0dm5zFH9Af$NIw1K$hI2Pgj-rnHPG z>et<}_{!Pags#;5jp=;hVR>%flDj>XJXisj36K+;+;-L5swq%`=o1X$2U6%0M3v{m zl8(u4pAbnCAibb@kb$qf1EYz)0T7w?wZ8iVg(lF(zhOKEgmN$4;ZTHdk%9CNP^fz$ z1L@0i_&IU^C&~K*hK%63tfE{kAK><HN<xqz-j<1eBieZ{F2Xiq0kuLx8X^G{28oEf zm;Clz!{aFu(mU)d923CLf2sMR_W<eB-nH(R2S^vBUUL6E){p=H4(rGDZ&*KeHUt#! z{{rjB&i)ToPt3~P%2w4{&j5kd69ce%|L0gg#JCWEJ^<clplW2V#rjTMl2y&f*`8I# z0wD5<{r`;hyC3_1!TNFW|9@fqk~L<-W_g}@oN4rBsx_BOD_5eRJUET2oYkK#FUY`_ zAuH#xD2UA}qUoA$+V6{~J%{SR0_BxgtOpV}#cUl_t1bkzDi7BBcTDc)8XI54dsx9@ z^Yk1?E2nME-XG{e-?JW=Ko8f?rs-JWJSDR6^9%2FfBDMmvj<4zepS(Xswqh|A@Eg# zi!kUZp1bSS>FF&NUDc-H=@Drk**@~GuxTfy2j+=AAccn!5ykYQuTi{1C_f_ejw6pe zls0F4axhpq_sx|>A9d66u;r?!Jm6=Vq|PqWzLIHk+c!^nnL!>a-Ilb0hOUrBPA|p= zOs|~x{fj@I_^sqMaZ5J~&uZ;$*4RPZH=o;^+C4r`8zC<om5m%7L!VxM_f@l14gKYt z+P8#WBv7|CNWUYIu3Kqkqp#?hXV-J@ID-O1q;YSlmXd5Xu)z?^p-|z?-g6iCxEWn4 zXFOG@t7gk)79D-Ar&N(NLH>T|?5^H4nl?el*k&%Lsa%K7XV&4W$saMaPD|Gfo%4SL zW}rUMkkOCy(ohTGV;b;jeVr;lyEa!*782r3`vBzg)m@&7ee#Rr`n#l_#9=H;nR9Gw zqrOUla|piu%lxf$I;xT3XZ^$0_BN;Q2wY53fmA`7mv?9FmK#l-Mos)!a>o~)T@3k} zQ1-R6Ygjy9qbzDKspc%|tHvHyG5N>g$NWE4&11ZzBP(1<wZ;tE+B;fetb&r$z7s3N zlXs*@)>g~u^KAg!pD#IDOx6!y-da^vu>XSf(}wjw#1n5TTjb*VMmy5VVVB2!mU@+b zT)98eQ5yKY=rfOp-YhDeaS2?#YDQq$L}E5jxi#byv%m*m%@M2OchAlYo;!WtMQJVK zejqgme96W7NA&k!rBNvCD|mDRfnE81v-v=SrUO$rhf&fM+J!}9{fa}Um3q%@>R2bm zrn5$3KVw<5xr3viz)c?H=le0XqCBU@7_!wDjXc&<L>a`h+O~|Q6P_DydKA|1n6@4& zd9{D5%}bv?tP&PR7p=@Tp-5V@GAFYs<F{rCkzL7yWUB<fdeS9f3r@;J_m084m?^)& zny+mA@MeLFL`|$WiFM39T}sg$k{LC}O31FR`BiyJc|6vpQ(ms<XjR$5>N@Wb1&LW7 zRY4-b?YCW15MBx!W-Yf0Lzpc`M`K}hmCYNQ{JoB8D<rV;>uHlSwl&4G!(;&p>KR+& z&sa#%@i}c(H`^bl1#jb8xU-}*zKW1y(l|xq_Pg<3RnAbh$bCKkhFZ_{*!cJ7ZQWz` z<-#BdA4x$6+`BF})Tf4;v5$2Y@Z<e3-Z%QQM322<di?eeTRP!9RmB^dXgi{Zg$?UI z=mS~uG>mf$v@}daJqc&Unv~e=J>UGXU#dOhRHRCx-{D{i%G2YY%9ORp;i&ZGe#Gjq z2Md<`fU!<Rxk>NHiN)R$Ri^UlBUe_i<K~EFaF+F3DSWSNtb)CUe!ZPJUS~Y}x7jSg z#Ra8_;vq+q>Lq%+T=KowS}w9KI-%i=J4O}xcUcp+D;XJZWDivmn1*fD@A)qLribI* z_2O7hAIEPwcK#v;sVZQQH=LnVf%>;Hy_C81nm+dhcT%b3tR{ghKXo{`slhFnrH*EG z2v0<D`UR~eKPQ&G%Mj@=R78HBUrL|oZi5r~#NVR$SH$cT=iB!SzxpH^aA{u^5IgfH zPSlxmd+eQVYtV#t$<4eY)e9i0SQ`>f^6a9nBGxJI*7>+K1{v+GT`O+oQfRs<vWeT~ zUvMM~tCHfLA#*$P5lQ9P3u{_ge6{=zgon(fb~PH2yOqQw*5z(mi);f^SA0BI_RdB( z6P8^T7cFEq&tl*!Hj7E%U*7=L{q5qZP_!v$Jo`spxUW7wd_QcTtj*(aHs4ffFS<%S zIH^UWIEGPC9M-%oEo}_0f9EHQQDm(#TsB0Ry>}wGYJI&Q{NN}zT8`ISFYCis%J~lm z%^_GXoAcQobv1cmup!-^<eL9?aJzfg_P@g?v-9%s^Z%a%l>f(YJA43cclP*ucG$u| zaGpzaiFH22R8b*|qYIxfCcRx*MbS3HnXa+plfFUMLgaFy;m-NU)U&XZR}bW^cV3;t zcBQ*tBn8)?S5{g+@&1bP1cl>CUq>e$4-fZX?eUhw_QF|FL)M+D7tee_n#1PA!eB{S zMJ>IOf`V!7dMZ6YlB39drI7flEdFqZlUT=dv%kq<2eIe+dp(umGroHFbQ}QzF8f0> z%PPbs<VQ@+DBMrTQJ#~sATxDI4h{_~m3TOAF0GClvy8AHSb4O8pWfWV>pp7)^l}as z;(p*4bnvvc=13B5^teJo9I}c}=?j4Bo>^0V5B$1nMOv4gBg*gY9OZs{yC)(~{Pr0N zH#AlAWb0vgG0S_kUelG5yIn7QrhJKC6z<Q&pU{qleXzUud^YsEEvL4M#C4Zd5E#by z&ZuVD;<NVtB){UQX!;9`>Oe`)$=gSIOB0=hmb<RI1wlo+ALlN|{mvR!4$X&#gNjyU zZq<UfR4`DUzeRf>5t)^<-mPV|=L-y;ND(ElO-waSr%t&rmtY(}^ch95=v~3!q>#ep z@r?$0q;<BYng-X~SIUO`)(2BpT8|fcju8+!O!|yAdP31U>s!sTjQd0Et53bi8!pFi z(@I>oI{gVnJ&w*M1tvXUM)O&FCwq@bX~_?1yz(U+B&ZR*HLBjlIxJuY032OLTX$q$ zk1A(z<4KVh!68}J-|NN8l++)zFKc+-^eUxYomkwhibk_kKIYth55Vo#PcUr)-Mgc& z^9aV(eTREss|{ob5kK$f=HTFFzh&P<xx=ISE>!Ja@ytT$bHLZXqazj3saaZ<B2T^O z_?gh<MF}+sq##Un*Cvb&6k8EXT~VsYEhY+~k{hIygq|&ko-bSlEX+CvdNej|<|qWG zZt#^m%%&HapAF5pB@%EIedr|>?|HxZ5^5eSTlrp`bnwnhb+k$3LZ^Pvt*N%iq{U*e zX^+J9rbhxJk>DmjbB;Y1&XOlk=RfnJaNZTCY3yz@?KY_VSE_=`&Eio|F@M286VGr} z7G1uLlbzPd`OVkEpbhKejp^ZGyUfhd>*#;bc9+t;z(j&K790aNtWR53jmg1({)jPc zs1}{z%6`_6*7K8hQDM$!`tbS{<@YBrlAmEX?<+0#Z@w^eiR#wn<e9Xzjwg_2l%B1+ zZFbe!E~mD9{JAccZ82;216!o8K^$ulQ(&qX1k$i7tS!nj`8_Ily1y0tXZm!-DT!dN z(Y1Ha8@peOw5ieH&FGTx;>+vLQZ^}v@DJnZ`-kv_O%g`y>nhQPk72*DMRS_3nlCc~ z)ExeJ&z~k?pY6Zgnuae=17GmyKc?5XXvVi%SrElKEtPz9XP<Uid7j)m(R*!G23{<J zI33A1ylV^Ecpd+OOr+??=eNX{#d~51ZM)tK!iqjybaK6b!LgY|<+{%=d>?6h-hTIv zO%v@t9<n{m(Nv3j^|}QB{Q-c6o;67)Pp;DCOz#x(6T9Kg?X$zADO7Cxoh85BvtIK3 zz3@vXHq4z6ajcTXNgAK)Uo6wo(?9DEJ}N>V);-pD7dh|Wy;WRvH7%p)U6_|}*y0bK zuLI}KeQZU$-K4a6&~a`eT`rdcw{r3;Rx-j%olH$X5WwD<Pg$?swMLNbtmZhy@g-!O z=Y<B0f<5@h7c(yB|C4NI{E{qH4ItaqF?tPqNK+X<4`qYR*_~~s-I$wBbI_8qm})su zAQlcj76SB9bGz(zO1jWs^_lkykC^mqH2lmvwl^seT0)+Y>7_~6%~2jlBA~HIrkFZ+ z+cz+O<tS3|ZV&dM)*N#e<{nVN8RG)^vpcx+%VIC^X9dCDA{*XGwRy#7(-s)k@3wB3 zQ=sd*N04KTp|95I$dgq|uBVdFbPu<HzTv%h9`jA+S%>cVqj`;mV)nAeH}qFSrZ*^U zkxuaj2J|fXR&&JM1Fzd0S6`YmbcHewfGbOASPlAmhzQ@4uRofYhn<KC9}<~<yC629 z);?6DziQ3>UG~EqX!KZHmYHA-jbHxJ+V3u%<P?CVr<&oez&F<Kx||+<Vl->+P*rCa z%47b=V_}DsXJwo$_kn~xpcb5L&aF%yntcM|z{-7c3&8HuZjX;|oRnDVbmLB_LL6cc z76S8Ow;qD!)7<>$=5hFoEf<5A)N)dTm$Ao59;?lfnAqqr5|L7)-PY{v*|b@QPlL}$ zv(mN>L))(0cv#or##&Q`Phv$|e@?1i>@BkBuYSA=-<gG-Iu7KeI(c<zIzuZ;S2sKA z{USXwq*`0*+8!?e6fi71T*J+!^dJe*+LCNXSIM_MomD%Sf~Kx3u?>BpiTH;6LmdM6 z9zDaBd{kE%%DcjS>t2cH{4n+x#$`^EoEWR%eO_z}#NLsy8?KPh@WW`@J3R|?>YZ=Q z+Vv4Bhre%j=HfuQmGQokwY%$L^XIR}-1>6e2kJ+Sh}8i0osttxN};D-g^i;~SB5~{ zyT_8pEy1GDJ1cSOxt!3__3lPrDW0#qWII;&zcM#!E%X<^8WH!~kUeSoc;%mGxqc+K zLN13{!AZjCG}WXe=roaXVKkd_lTdpBd@2~Aa9h^qFSO;2VEnYC_be=+X$ZWZ%e?n9 zSJ+`sV9B*tInknZN^z-0LzRFSP{HkI0dJ`uNJJPN95`Doey+4CtV$D+g5P8|cvzJ@ zYr1*Z#Z&Y>v_FXqM|9!$p1K?Zf$-VDP>XLDEPb}c9O4JC)`-&yT(3A_*W+CTT->ah zQ|0b$-S6N385RZ13YHp1qVapn;~jqYT&KdSvk#8jy}^MX46yr$<7>rll#k&C4IZ_p zs7_x~Je!jVh2fdTgKQ~J_JfhvehYb&4M*8=hMTJ?iw2i^cut&BF3h*)IE}p1HPTp% z3_U$?o?j&;j$`M8ZCiKESo&|$)@PP2Op<Yq7L;NP<_ZlY9V=caFKL_|^`m~ATKJs2 z^_FytyLfj({i0awZfb(C_4#RVa5Jl#s7LTAYVc|?`@rNXA2yl0oJXB2Sn&4?+nINE z1`Ra^)5(QK+PR*)R(g)~iBWBPgQ7b+-S}5GZ!zgI#H{vcZhmSr6ix+Tl_>!h0WNfl zOBz;Di9<)X-{5wbTBo$&#wyeG%_o>oT;#9UhmqrjlcC_ffwoC0J|#(gVJOfdO8>}z z(c{DQ3+yngz3a9NI{x3KHiO-|?|C+(iS_++)_=`n0~EnqgPVH4reZ_U(^YJq`7+Zp zXigmHLt~=E41SW^X-Ivgig?oRISQBju!S&JJm2Yy0Ku_`au^y;#^Jq((!#7PkttZ_ zp2>4$+DgwuYAkfAeZ~)T$->Ajrs8Y|FdGX7^j}vD4%Y6MI(%L#!RGy=+#t5<B%~xx zP3~ddmlkO`%1QvzyqQCHBy|<ITgHO6K3x}>`V5wd(eZ1j%RJ<_(rSp2GMO;h;1|~u z+V7cJnheD>8G3bRmfAEt)%+Wmyx8P9^$w}fpG#SnblZT<I{O2^gIWu%QL4^_;OhXG zhnH9PVwmzkIsa~Ioqe<}Pi9@y*S2g*Op^CSM*6jaly2T!E{!zr=7Tq^4~EVcJfuFN z!JM%pfk+~jJv7>Ar}$3T=4}40z<VG93_hgvdPC3?)`p9i>&Q%cNlE(fu+(g&N}CXo zI<n^g){ZZBN2iX9rnhXD)dRrV9q$asc$_`|V<5`L<G#aHVSQZ0qm#uyB@lD--Gkk@ zU5vQL&i%}*{D2?~D{{81SjtFh|10rwp@7LgdE8e{Tl3wkX^*xHA(j1^HM(!Jg{ljr zMvrUWI0ibkWON0XX}M=|U#bi|lsf;k0{*%Shi9j22CSg5c%80xD9Ak|U{)eBSoYOD zJ`OY2r7xH&KSr&^a!*39D#|8HatRT>SYu5LSx8a-qiUVvHaYj)#&FfFEv69P78Yih zvsBBldPh85wM6SMPj}IL?x(Lyvs)W_S`01>J#yetT$T@Y3^_b_22@Vg-v%}LP0ydk zwd%nSuiFS3Ue`)~Ao)ThFCNfv)m6Fw0)ROOH(=Q99Cw$=0D)lB-B+&5=(<2c#H>mO zVC+Wa<hE{w!6c{Fm1Up?ne_CEie>`5Hn!W#2&|n%9lat}Jq<mHq!gCLXGp-p3nD?@ zH?z#dt{-B(7po4)-3HI&7m$;ligMUr&k2V2xSZcU*9lgj^$=eb-d)rk8aqTrZPPZM zT9(oISgTBujf0Mf$L>RFyh6#aut_z{uwQJlnoYUZmXx(&WBA#NZ)VxF{Bk;lD>;1I z_<1Gkz~v7IX`a@Nn)5TQ3w|Pl?Q48e%`(qdg7#}Ey7}A9#4g_rwzu~G2)clAEU%<0 zZdUi*k{9)MSv@TSr~+$Cd+4|Gb5e5fOH$P0j{gk!+)B<k2zCu9>%2Oub-3)zYa}it z{SBHa3y}SI&Z2gmme;N4#`*+>J2?;w;4FH0X*CsCd2FZ2EQrwn=D>w|R6L+j&`app zmz@0KtPbkA-NYD3VsRr{tHys3L4TnN#DqlYN(fgtHI<iV$Ej*;oIUW-Fe4N`oAyk! z^Om#T9b)<`7J;>MOs*8X$J*7fxN$fgtmMH7b1Fp`Fq*3J(yB&p3bF$xu}_ASXXY=r zQL!BWtLv$4|Ge_GY!mwk+}Lm>W+L<8<<wX!fVDehw}8jjSno>Zu>8!Fr`~QH?4hdV zo4m1(zBPX#fo*!4VO+i*(s;=`_maN=elC)NYL%A4O<rjuo%&rmW`*B$$$}*-X*Yd& zXD&%MLPX7vdn(OLmnz`0{ZVbHIWuI#c`jE{Xy9tPV_5NYz~N!1U#K9s1ZEcZSwXm_ z((N&^<Kg1Qj{M!F^;df16_?>jUk?}mNe|Y!-8;DOfak4(+di7XL>Mj6*g!yMRTwXR z%GD+2;apd4?IrA{Mt6U2Cxm^c-+c-KzbtLjp-@=A$GKh&P^YAT^H_=p3Y|m!x^YN3 zBr0<E@K6uzIDJ4rTF7r#y2CY5MLxI13W%p>ppUCRLxke;AxZ<<^*`-5xBP-NAn~7_ zT;nY{9_JXV^-Pa?xX~$oto`Yz6c*r=F4Z+~SX*dKmF&&$0p)czwf=m*qCU+>YE)!W z_uIpKBh&S%$A@q+k1m#ci*eiBU;}VNMAfs+coMBKjSu>#4yRM>;hbjBDkWo&VPSg* z=TYpAooJGDh606EvB|HzuQb<kyyR0LbGh2<k)kF0d(rgcEvd1tzlxBRCYToDYAtaM zj9KY!LjAKh3*HI{{*>bDuT;YPbF{R|8P~e)XtFa%oNQxzm!OI(JV72DOT25Q@P|F* z(2l&}vszA*#8}Gw;Q_<2^iC<I*5MfzcT^zOz6HSLwEJ>QaEGUI;pZm3gUC>PzEH^R zH_cC<HISb!P79p-3Q>_C8r~*@qL2wo5Ik1JR6dX08HW+|k(|jAkDrw#9+wy6N}_~* zlRw(`);0X-XK%FmFqCE*866V_=O(ANMKuqmwD2<NAdqykT6(YR6b$pT^F>dJy`BKp zvEQ_&fi`awi^YKaRm}M8Q`h1t9*}Q4xV*SaZipVa7K{2KK}n^g?6-xk@(dXfZbwJw zG*$mu4JFp~q&x{HHa{cRWh=w1yy_5*8N^Iyjq%OT-5PL6ab1?eqw%`#oaz})jg*6P z_?MloedgJ`YY>$_Td5%GA?(<Qw@TK<n|`9k*&n>PpNu>Fdvkr^<K52zeL!zm!cTQ^ zNEgn@nZE`-ygT)M$Slez4Z!#idCZyQ6AZ+PO&B${^t?IgPtskyzDz2y^0bRS<__8+ zKDAMG&&U4V8D^_w)VE7#w<fh-FLLD^=wrCIybb5|-;OpIHXkYL<=(E^kaL)MvF?8E z$OUTzHtKHc&eHt?;PeFJ4L!?z7Eh}0=K>Y<nGJAa1V8mH@9}Nyy8wXoOYjIxxA1wI zKD8nc;(e23=|_<69Il-%7<iTtu{Y6EAhPp2Bs3+t2if5Pbq1rWFcAdSj!{(rJTogu z=4Q@}sEWjb-Ud<i_LnrJEA^?jA_!z8s;~dS&OLwl7e5F7pZ@NZf@(*M6moM~kfaQh zyUI4u5ixdGl(MvY#}fp<_;5j;pk6Sj48Yx7EMyGX^OiD$51!awTruz?bvjZ?t?$<# zc(3k?;)YF|a0;k-z%ONA;3IHql^szMdbH@8dXbC_RQa()NJrjTwG0>zIFr(?>EDvZ zHJIxFieBjwK#a4^@4?!H@Kr52eV|{>dx`w^&rkGFN!K5wOwKGI(=Xp}9%b|5*G#u@ zDESfk5Abil8+e&sxRb6of`5oPLL~XDJ<L?#k9~5m{72$$MIr>M4d2WY*8W(k|0(@q zA6RWZM4Q2CYgv#$5G&gK)<n>=Zxk+(IWh5mJ$IVIOgglk-_Tgy216E2<CSH^d)+tJ zxlu}8qjlCt$H>*qpGsl<a?th;8zW8WiuIntJVvI691Z;geGNVY;Jyj<7>L4GK}kDB zef>S+;l}Z*WIeLOT^E0IWGQmH2fpPaC0~^<l)4uEu%Pjxh>3~)qyzg9ynM=B5%^YF z{7{^lvw7x=v~-ZW)9)TTJ*-E#j|i}T2pRB5>ZgQNCVg3{W~f<tLw9Tx%D8Et%+0Xq z@M?Eh7#O2n(KFc8D6Qt}ksMX~cQg`GRX&{L2CO6>pic;RGcI%5%*|=NJ6;5(MQeJo zpIv#rCgkXTQR*zYDoh&Z)aa=43xFXOMBoENBMDYvthxu|)iRD8c=L<3DW`Mtggk_6 za=>QbhG=XTXnBLGHp{-V0^_TLSW*K@VV8&?JH4LGk1BNdzUF54{J{*`;$K&3%p*(b z{B2ex1Xt^Kp_z~mCq=#MZol|UVq2S#4RW+yGZ$zH7kjqaqAV&p2fp&dl^eMurryld zNL=SGDRwnA{zw%GRG34kH%+ix8Z9KO^Q?TkXr(K-oz%n3EL}+gpPSH;Y0%DiuNf!K zQ%FfAGT3;6!I5W>Ji5UEWFNsWxRUCnW|M>K6%_Rt!Rw<1?<7T42`S~%&Cd|A|7>)b zh#Otru7GfO-+61!3k_m?-nVLR)LAlkbB(qc1QoSA7*k9|<1EQu-6Z`nYQ2+tm=dPU zjq4nDR0dFzS{RLF488FojHZ+84UKm)qARq(qnbW~#Taz%dd_#64r<eK-~uE_31Bx= zX*^nEE!nF>eBiai|8!~o>%6Tw7BAbqjq|B3?h<>a{W+LlxtK=W?R15~IL3C5%i$Ov z%9|k&x?!Fdtp510Kq@?pa7o^BCB%vw`2ITvh!u=}_89o~KQh?Va5Q0JqR;;1x<Cn< zr0bP(&jG}I1FgC}?c!6X`<0`j{6r~m-N^s4ddnSY&PTgvp266Oda-7Eehv9XbIP#B z^F~q!v890<9b9iyrf+D1iHz@OrUb1P%Zkj(-Ac8yvIwQ`&61n6zZvwpAT0Qb0(`-r ztE>BP_C+sw^d{uvT<!MRHAk%VsX80PD4%Gt6zAE3Cf%>Pd?Q}=A%<razcv$gr7X7Q zKNyT|uZ+ENS=5}Y&r9Yhrl58zS1xCS$t!$Rqbhu|=|=->1NdGe1x+?Ujg)8~Po7c# z@n?WlqVWMZEUsJgxycj(_7IFx*+UcKhzusq+#V)wrRq%uY+9>G=Y}|?6IIzlwZC_B zI9?Y<05C#E`ukBm1FK}`+1|iOU~?m41*v@TXx-&ctEi}sfd1xGBB5hqy{Z}Qtu3-7 zSWA*im;ZtXhV@0mvhcwESV~cN?+Ps_5nB{iK&~hd_wM$&+PYMJZ^9arud95pcurNn zd-BaY*puw3Pwe~|!_m8vIr-gD+r%2L(k&<pPz(_)1e?9x4pV;~CL<vkd<A*bB1T3y z1AB#!{-8fU9$TEi+%#JazNC{ejg4U$4wKnTzbguh%lx8YE|r|s9$ydz6;I4D&iy`# zj<Dj(pMDilWCKLg?nBDIwOZ0nnX_LE@^7o#dhhc;u%Nl+X)7}ccQwfjb$JgGp+uKz zAu8{VDjeyyEx3IuD*q($$dKW{1FF)^q0|@6fNwfZhoN5MxGLYUnT{{oVTJ3n#s)^` zjQ~D|ZIpTpNdqA>Ih<F_mFnTP7+GGQYzqmSS99j4El@^e*;t4~XJJL>*&dc?IV6zr z%)K0!*?-5}qjH>d4-i~hF}Z1o<%^uvrs|zL56ZhP5Mgy_OHmd+#<CuZ0-+I{y+A5_ z2GhP=aV^~nC)RP{EJ?+_<>S7QX^Wt(votxX1$Fyy0!R*m5B)ud{k*zG7xSG(T27lY zFrxtVw^Y1`B~QSxUFNNX>a1N4#AX*@7fd&J4F{~_dNH0U)rDaL^m^*^XD<|IZz>Vq z4Zk~)gPuc)xp4*>5SN8sm^bn&n<^2^RNE}~0=+LHS+uL=6B84GW*c;*FB5ji`69Q8 z_qWrk)f4cq_w4htgtsv)If8ymxfGfy^=8-`!<4k*A|FdgVNeC{O-~azXt3H;3l`xB zt&dz#>oufBsu8Bdk6P)Q@0(do<clvp*4r`r4$w}q2%Us49M4I2PqA?f-wZ5?d#ro> ztWkm<5wb*Q4``2db12Ke&V65?Dv=SyJPgMk-j7q4IUbg{J?3Qf1{J;`KLO<OJBW}N zZTmQc<~=lf7D^yNz%x*3Z|5wTs<(Z{JiqyBMk5e3bF$*ZF}#??ROH29@x}+391t)U zUIMsk^tY3g-~nCA6n-)OUVZ=-@hfO6!f$aV>wG@N?I`atW+-);$OLKO0qZx=`)7*X z;f5P*(ShymvVx4uN-=uVIp2L^k!AA?^A<Vv2SDiuH=#J)RHp1SL5A(XMm{rj7I4V6 z%%YB{;0|zGJ1%2}O`FyD$(c+pfAUrBZWNewWATgawlFi7clPCq#%**1k&J2Z4{*IL zUNgTZtl%gQm9-*s8$%QJ{axH6>g`T$FOiOHcstJ#;f2};`TVxO)1h)UomEZdG#l@S z4yo2lVd|jRcx?d0rpFe?U+BeC$Yjy4p#BZSjFsK+#O@IqtZz6uD@Fr!^FY^a`Xe6z z4W#PH5GSuHyO1WZL)GnszEbIk%Az1Iy2<E%`zEu2*#ucMoAssMx0ATi1HWvxYsaj4 zE&V|pb#t1+MNV`(b>SA!SCDefZwKl4c3dV3{A5hKlAJ0trw9r;-*u2p+G-@NJjYwf z&jc&>ET2h&PHI*`3w?4hdDk=n#rR$hNR7dIU2UtN8^4?GwLozF&1q+7y-oG2yFffk zuI%RChZV*LsW0PK9K2mcGxco=ZUm{DcwC?XvI#Glj$J#yv~fyDpz_Pjna5}NOFTf# zm>S&X_Q)3mFE}@Do7&|Hf7G!e1sbEdyjlwz;aGG2^hU(QClg&Z#bPEomXz^GxK}OC zSPdOK6(qj=+)hE~I!`F;M;8uyW9kCF`y#~~XieRKiV(OD-~Hts8t+;?R1WInUVi!p zdPx-=l5ptBM;TyiY#WtEUOHJ94OKMv`OI90-MZ=}TZuK8ivpWU6*AheFW6SK$P!Ia zA37=Lz#Ci+lu!!v2H6Q4|B=^TP3Tpb4LbT*V_nn4{UicDh5;r5!>=HVbAr_M3}`Sl zZsP>{M=%Pk<q&|Sm<8oWtZxb|U(h*(${4ZDEdtdT1z7MEJ>YL%0DLCl%CJS3{852Y zZ}6mRH~148k7y5-xPdRQr(8{X={+_-Mj;<8xk)}zAhX-nwKxiJH;+;ZC4t?3zv2MU zEOiv>U(5}c^gyewYw|en%fIj!{#f|451PK;9au6Ed+nYWGEf>bT;v%%g7(?7Jb@FS zCB~FetTUnEl3FS^#OSon_M<2hvrAR*Sgp1q7bw<@{bl6HmZ~hq;C=f2=3~1R!C;&8 z0F_6Co!pccC1&d*D%{8Xgl}`&Ght@$e_YTzJ^-973QUc~IOqx#2~r-y8rJ`6qZ5A= z`@??u$<PSSM3kTJ*GzrE7F{JX07>BU8hSYZE<9&e4S3tFPy5_eXE};$UzrumSataD z{!%fO_o7656<M)CDO^mGjCZsuLMf^3xWW$r3S;AP|89z_7zFRsH>YgcX4f27U{j9= zy<c4Qg+P{Nq{b^JvMaXIS_SU+;2Erd{C;J(;;O>+SpXwaEiaH6Y4qtA3Su+9Edt$y zm?o1i$wn-iHxYh~iY^kEOHPjwSb-H#Rs$g0v3St2gX}YI1nsz6g`QuoY@)_Uqrv1h zf>tjVQwh3Lo7KM!JDDaz@dl~$L}V>=N6BVg8>Vl_c8$#E|6ody#eZR?ZdeQsWXaF0 zZ!737#W4SII*E=9j(~pwjnf1>R|-Hu{T7>R(9^;h3kHGXaenX?rSXGzfE!n*?Ja1! zICb)bqZ#JWfl;LF3u&T^K5Dr2j+}}_mj0Nns51js6fqr}BW!%mH>k&MKP-Y9M=N+= zatli<N?1}v8G~ql%w)=7S!8eOSUGF9{iV^YmWpCgVN#34NBEm>Ol{Z|<xc3&1PNP& z6zZrKKOO4oh)d_P_q=tHO=f&eKoxi$J9nnvW2iiUMobYL4nn3Cc#qQ^WkgwCB!>}I zFW$*ZKtDQ9h4V9TavJ(g=;T?-2PT~0a^>{jZBqK-%tHC$@6T+yph6EMMD)!iYi286 z5aW-05qrU~piF%!akTW>e&wb7gE+$HIHn(9Y9<g68Wj-G?Zg<9MRl~wQi0D8zuDoY zhEjRGcw6M0`mAkU(?(Uyk$GPKvVR-5Dt%pKkF5}*<QJ(ssGY$m{y4IOhG&&jo)U4v z#BD={(>w!g)C@ejSQVLoxhCeDe0#-3+TcA+v5EynFR4AxtKutXRm-5!0qDmhPnV?O zVe?2M*(js0kwzJv+aQ+rQ9U>d$&(Mjb1(C&J)^a(eQQJ-);hd-Q{i(zUcjnJf#9th z2VmDN#MpO_c*cG8WBd_i4V90vel4BGeU^2o=tEmUEvHk@lo*&~WmxuJ>oB^5Q*=#! zk|si8;Wzz+Y&<4sYXx^v`@{dm+g*l5`L+!LR}_&(Qbal=hAwH5?v5cvy1UB&k?t<( z&Y?S`OS-$eyY?RN|2)sT`|f_&J&yh495Qp)73X<gbKk#lVlx|#Bb1<!K%&v-N}6PF z6qb+-_1689x1sQjQR5}t4pL@FkN-<}RwnRFEQVa6CxB+qIKy+KPP)_A@Oqn7?OORw z`g0wJfeNtzR}$S;V~>bpcuD!-R^}#-=0Z$CjN9}l_|9Rid`8Z@yk=;P$z=$^qgyye zO{pZa$89rsHq?^glAfM~%qt<|c_|t2M2ZmheW`z6wDU)78|krvA07%eW8N`<gL?|p zZ?xY!!TDBuG_jy>C?(`c4trOt({9(hCyshq$6g><l-G@1A+P}56bTwr=rG;$*LGf) z*wrd6E=Pw%sek6f`$NDB8*)`4*y~0Nj8s{kkc_5tuy`+cON{7Y<RW*<S3Q6yz+lWU zX#WSP73TmR^L;>3p7VEtO;oM>p$rIGCrlnMxG*I1Cun&%os=}|8cqf}Q4kyQKRhG- zytK)$cvI5U)Zop-i0AK@r;?wzt0uw%z}=aak86dyxusXci0+9;es6y7qkQ{-4UE2b zua>=oaLZ+?<W{S{I4v)$Xodn)1bk{HFp~ji#$!lzX088D0nIvr9Fr;4KRY=MxDlm5 z&5!sq?|tucohhA4-4!A=|I(+l`mel4EF&6z>j@8^3P*WuPlf1p6{=6w(b4d}Vj+6T zA#qrw`U68jhg&5yq0ODv@DJqQWa92imD<%0(zd>&uZ*6n1xzxUvIU$^py{PFQ-oy{ z)pJCOqs&J7?dB%J-~q0PQNtP#(f{ERS8(O_9=ODQCj9XrdzM}(ml*rNCBj8^t8z$? zh6p8iqJvduEF{<~%M49Lf%8TK+TQ?(*J|9Tf1yMpvwrlLNaq(Txax%{T_o>Qb;)Bv zlV?#tE~~kT=|0u0ZE>9b1MfKHWA*qL)>q%%EUpa08ik6tXY|Dx<>3~HuA9<6(uzHW zpF_NraA=R!-XK&9xT@iW4U4*RZs{|%i%=+}z8XuM_yQQt4P#*OI4HI_GNN3SUMS)u z$F>{NHY{C6QY4ktCC0qGSZtM<r<4o_nT}RY)_X-cSb{Et?U&45=1`F_<4irUg7u95 zd5|4DYMTxs6@-eMnpj5WJ10oems+_$bxIB|i$v1s54`WM+`Kd!vmhDOkMAO-E3Mb} zSkTD<C4h7rwD)g)krb*g9(^yk-!`+6TPx5$m%-oGD=9{oz<!3iHVaUoV{(4&@Vs(b zA>z*NGsbjze!CRQeEO;{f_LOLGXwwV1unKu>1EAFuHC_yaMnSC%|b%Ple`(%pmvS; zV@?U;wXoF|?;f&1Q26b$axFva5_A!4^E0t{;7L)iB3<~OAR+8ZzvcGWRQ<PFrB!7% zT}vyZAoWd5XM|+9ZL?#b`vE@A=YA$cJ*wHQa8PCMXp~cFOt{?VOiDGQg_#l+LN|!c zW%i<R2N&L&vNeCxFmg57ioOq9i__kF-W%DPYN4_Ob4!V==`aFg;QH$at%6SV>?N?r zx%EmcXIH&q#P!PT9il+Lix#er;|lGlEAW+4r6lFDEAyP>1FUo?7X|ASOf0Ys`bIWo zV5=mAfCCzl>X+}14<nMu(IZ~hn>DFoC)Xri6Zmt}4_^BYpyCK`t<vsIcFJ8}ep>?r zBNV8yfIEzUf`|;P0ryzKo|-DTkmc7I%qFb1MQfKst9h>k{V3b0D%qlL8owBHJj6U= zLumMpMdXkW>Iy>?H=+3f)C~{NY8)iuXvCWC(>~6@FR5lOAWNJvyccOJ;Q!NoSF%g= zuIGCK(v8KeB$2<D%miT(b?_0X-0Gh}I^VNUKz#sCU`X6eVMt2M>Ee6^1Zp~_ZBMfz zEi7E}+FK@AH5a=1q;4Tr!qM}XM?|Gkx4Q$gG40`lO{LSSK28?>q^BSz4V}!QtKjoE zRAc%E<c<9OsYkEs(*Y211OO2&01)x-;nx3^W;pzD=Xmsd^Wu>*0rlVlNM!#hwB{o6 zVZj^Q5h^1@9*)2P_O9Cls|ZCScy=M%H>oonKfP*_B-_*`yBfa{2Bs8te$>u-E~fxY zrC&kEEQZzqyr*jun!%mNUP^{kE?cTMPHV0eUC=D^%K(40s-ycXY(~x3{j{7tOMY{2 zOY3WYg(6Tx`pX6<=#SZA@5U~-Kk1nvLJVf6{s8cN2*!e!BgEjNAYe5R6U;t6*HZjZ zWK@AJr=k!+i*OXBIisB&70o7!L&x?j2!v9W5f9)J)zJ`^=iuB>$VIS2mJoFcVF3sx zHEL2yq6TA-fJ4IDHY#;K;yKtv8oTDZ=G5GHr1W6cI$O-_<Pn}4Hu=Ph+T}=!Pw674 zxaA~-%v!jsb^d2%pb%O?_MtV+GG?Un%vlTZfzB#gsY>#*4e41spN1T}+AWf|F-j6L zPg5C9d6W33bbD%|+3R5LBuwr~Bnb<w52MS8K3n<pmle?LeO|kiXw&|BFzsy=oRGl= z=*l(3h;4)fxI1531(1W0Htq0GDQ1ngE246LR=b#zrZy?6Or?L(>VFoBq)_UJ-6iCk zP}0SPgoU)52~<Hc!HX|<x!jID)Qh%rumWdlzBs>#4Ux(5r`m4UkQc%p?}&y7rf6|> z7gh`garA#HjCY0YrHA)QfK^6$EO(iic|C%DcQQGpdUT<~K6MRCr|EMbhY|dVLEK_% zO1+Fk&dYR>m);r<b3syFtA*CyHK9YM2z2RbU2*nzMy`&tYTji#`00)Ujdf}>XBzU$ zC-}*Ade-5f{Wj3$j&xtU?HeLQAPd&7=t}LY_Zp^{8WFEiAbaTslM9iO4oK&wVM?Hy za^J~;xsZPizG=-S0xvCTF@cwAM2)J^N~@yBlORVWr2Sb73HnU*BH~<JD?o?dn$NG4 z{t$%_(w1-_r$DHaFTvhJ8SyZ~<m+p5c&E;`=Y>Q@DQqt)s&D8<IM$SOCL;Ue3YX|v zlNNCKEXTfMF>LMKFdsu;ZrCV&&ugtW*n!O_faNF_O>tp#ta~{I_9K(vS9!7x-5Hgk zFX_)?PJlS8S2AvZr>a#%<rlG(pf*MR)=uG%ukK{EVYk-N+vZ<bR==?$SZB029YAg1 zY?fY5k$KY!d~dWE6Zo{Fk9Sg(N%;WMAV78MRbUUkIaW)ulPS{I*3!-FsZIy7u~rc_ zi+ijD!&W~E2_2Ou13!ojjejL%eACmZ`ZLXR4i@46WS@D?o0vmW8e&^&fpwIrXWSBx z7??&$m|t;F@S$Jc+b@ILKEIwOha7&9_nMD-O%AxFP(vWfKfP6*9YfU@KC)D*FV;an z<@3wH&JPmxVHr();K+vF#VMW<v?WwB6+AkSw>9C)j}S<NDR~3cW+oZtj8JE#4R$0H z1;w+r$C8a0u=|V2EMDudE61OT0~61$>Ileh==|ia|6ROJPi*2~Y}DQ6Ywy2N(4K#x zpm9(XH1~0aO4PN9YKpP*UmJO>+$OaRsUFzY1akde73WTLmGh{`fMSOLpH?y<lDP>m z)Nlbfn&NE`^+L}&q%4GP{BqP*9py9n)*GWw9&6v*@5%{~X&>{u)>Y6RwVS<^4A?C~ zj3pX`L#II@CDj)olR(N?iX{1%y~SoE2)V93f@=?T8q}A8&iOgk{m`|$2Q~(nXfDkk zHj4Q8$G<rrv0;wi<bDivOF(Gp{@YDFliS=<+O9MG!7m>Q&R%b5E2d-yj2ou9S7caI z;1ruzqCM_JABbWK9aFVo+yRJ)=YXzjZHiU~D0r?Rt0a4_+XgT+_rK)Z5bXsqT{c&# zpsE|N)NKrHn|8~VK!Tl9<fkZ)fdj_xD7OE3m?DA*It#xrmKuDJ<_2-kWlwqzvmYo6 zTE2%sFx46NAR47c)z5VSOcNe&uBJwYE`%e5o2;vaqM8Xd6Dsoo+3@lT)Rm#83IV~} zORdKwc>B$+tVhw4LVwf-*#Ey{$tQjo@Y2?s9H?7J_%F8*`lc=WL?KwW26@Xr{DsH< zHiXa?3RmkL0Lu)HD<xzF6?}YH!p(SUgS{`Ph}CyJCjRgPE<j*(>`&#fogw<W0`Z}L zNcOL}``(c1N(u`80PVx^;Qau<$nkfjg2>Pq1gvOS#o7sz0yp=;{|)g*SFXU%WC7nb z+C&|}FV&%diHGM6;kAtz=X_3ZO0&{zaUTvtpKb+&MTYp@drrBk$g%lr%fiwb7xF{v zjR5O)t2w&6nqss<FVFS=ph|rI6?uzc><z-X^scm^V6a6~ruI$Ie^>YC+s_Huhbv?- z4UO%{3to7yjtUZl^xp=EEDCFA!eXv6C&H8EU<Q#HeG6cHG3UpM*A9MMl~5#wE^tJH zT*$^105Ye}-ah#+Qs@i<3VCS8z+%y#TJ%LVT+W#teJie?kwYS+ONR{!`l}?;<KS)* z{}*svhOa=PL=qaBx)o9Y!i4Hm&4I!fgyjZZ7U2MdLKvt}m<kmNR{^1L<UuH8egO!D z#7Ue#fKG3mknrgHQ2hl8sl=jQ2}k|Cnve*H(ZE}FVATrB4kCv<&|}b-to>j=kAKYL z{(qUrkMHYz$W5SY4UFePLeR?%R3jYEt+k*?>psMbzHEXX3KN=!DL!)ckK;wB?$0#B z`7GUM@yEGAZ4LBycGHJnY(TowF@_ElVR_;(6w6u3PZSjS5#}cSWj%<GD^)dR=<^YF zy6+c-z1(OF<#6Ga<*Ht(s5}+Alr;PYiVU}83sCz>-h(xS8LICVXQ#JfcfauWT!oYZ z9-4yzmGrXAQLPshUt4qbuRW*;wFmnFdyvC3)^4r0?I-9Nw2uL?g2-@C<%6QwS3R+8 zQ_hYR(7!CftyHKbNc8e!zx<?qRB2~wb8|oVIU+hR#f^XRdKf*nwh1tuHcKm;%_$1b zLKcr(G_d|Vj09b)`{}#ge*zn3_;%^NeF@v^J}HB5Tk2+WI{axgnXT?9Du;bHEYPyP z*aiRc`$K7(W8V*TtH)0w+C*Xnx!Bz=hgJvZG^+td@03P`uhC`Ke}K2v`u3RKa^~WQ z@V@GDHCj^J{j{$yzS66c@L`-uAU|YhFBtzBuTejk9$&U|06OHq3g!PvqlB(d0vcsP z2K8El?nAo*D}_Ep{o5f}Ot<b)2j1A%^_@iP?g~tikF&}eaB28U8MHRcy{|2B7|EgM zPb5KW8zrB_IW`wLQtD-;{o=Nm<)zvrA88Jnm=AR9VPGhCv#}aZt$IJcT~p21QoM!{ z;6Xn&L_)Fy03LMaXCA<Vx@9tdC5vnceJ&N!#f~RT`?$uZ)B|4P1uScV-d0iG-9+qT zfesaw^Dfx6-_c}<k<6u-VUSOWK!**<_-cdg4l5XmDH`QflW8m2{|KM~w=n$MKU;tF z&+;DqvxlMg5UrS0#=weA>oljrWzo<?+9$@V<^^fYKm6GUz@I^58XCu=ex`s;sE_`L zhUe`6KgOo&f5#@`#}vjhnH-2s9)Ll27?wS4h4gUQdNex0j{seP)%@<a$md_F|ITBi z|C;+OALl-BdX}e}{3{ClxtiD}Nl8_z>5&BEXq>CAu-MGS9F)hQ8mA6z1v$;%w(S4w z$P+?@k0V-+M@DoFk$!BnQJbi$0l=XHv@_p-MJ0xJ4P@Z#gwVElNH+3ge_MpM!EdCs z%dRllal4={@Ha`iBoK8Dlz)Q(8|XfO;-NGDF|HCOnFvs9ZQl;O#V=~cAb8x&S7>uY z59k?}Xcivl8J53=PK2+UZ(2@oR>}$T1VLkxhL7j*q7yu$bg>neRC+-fZuEGt?(3i_ z<_Ap|+C87G{M%;zTU|gu8UpFHd|c`N^zbQY3j8?lDfPN{JbViZ^mY{fgmHj*zq$ss zBhropQyb!MT`#5${%4cCK&&q?n&)Opgl8IdY20B*1D2tH&LZCfe0`G@RPIP#j!8Vj z&g?TrWTbyDSV-I>G_+U{51;?rOMEhOO|mvMq<!&E578Tr$Nmo79t=#13h1xeW)p-~ zvHlg6S}|Tlx^DnHU_+TGq3XoT$DITwkVCTt)oox|fXvKkdyBXF!`g?V5MXGS>cQio z2Tt_-N4~)6^Pl-b-%1DmhnOdi5r9?eF|CuIYfAbMRaMiT9;HFUNPse|;(W(<y>^Y) zX5F!P-64AihgRe~e6FOObVH~o7LMa<_w!4HXe7E&jrd!O2xT&Qbq+(L)X(rp@Fo5d z-x&F=#hXU9di!^F91RW6`(61A&vAJeU6*5L`!-^H2Ks}>+g#tYb3z5Ai81huS90M9 z4uwN)zvUJH3~jo;K^Ghiys*T_u?@%tFpDo>l1@;{cqukmPcP>mTxjgS$Avf`3C<5Z z8DOw%Iy^8$l)#hl42ZE%`z8d8E$=ri23RNnaiaV^;=iI@Z0aPlu&1NpWY?@v+2+xp zGcxV8^&Rl;p^DV&TNy?D0o_;+6SG7(R2k~xX0IB!8mQw;+&6bC9wb4;Z*FK!e=TWO zzzbDP)HnSlXJfb?wpN-tWR<1I5f%fkPXKGQ{Ne3J$-UxCsbYg`{T<iM(dyTJCs&tX z|43C`^va*wDnovPQZ&(6B>Eow8fmi^-N~LAez@=WArpXN@Z>MNRY&E%#4iQFTYi7x ztyFcS2eU`15YnrM&6s>0n}MT-5SwY)jCppcytrCyrk}aw{k4o1dXnhCZ*0UL?8bvX z|ES!)*$XWA6DO)P|BcG7){JMq77jpaG-^X7IG|@Off<`ohtN1dLMqY8RQ^B-f%kj= zp|+Ypuk@m_A0(&Jm0p{*#4tcF_}`#IV9~>~NI*7t!qgM+g38<{K_T=Syz(Q;tTKJl zXp^;T?<w#}17iUwFH^>}QhhUUrgr3KKx(*Ru(?-h#MAw|@d8kOa)(x+@R0m-?;Xe; zb5TPCS@ek~h3JF}27o>J_~J+^{%r=ZF}Az^<|qlfKPPj(m+{@wvk<UJ?~op}J<@HR zi6B*8DFFJUcxwOA+8pJFFKgs*D3(-VR2X=NRb2=B4yABc+wBRH#OMIHk3@xi<%D<j zpC&17?2cfPhB4U0Vv^n22J{Dj<=FfT<+rq~Vw_}$0e*|*U;Gw8>j11n>B@t=bqJNW z0>QZe3se#NPQNX>RfC!XE4Uv}C$O791*(SD7#=n9+A(vxoQ*lCRGFFkIp?X-Zi7|D z+zKAfznsE1ix?&P$3_v?i!4URLElz2p!@daghZ$;;;8HC!K-B!+6{oFzaQ6YSy5;Q zfeq^XOf`6$0E1#G_CW!R=#Lc|XvMod#(`6}Hi%N1B{O)+)MLUdp_pN6F!@HKj$wk} z)OE{{m$|lgUH*#->DmGR{9UGJ>vqzVxUlbBduJw@tt<k5<anQqQk}+|sv(<{#?T~@ z5hS+JlKQ-T_Url(9!3DsVC@7M&QbY-$EH9g1k&r%czCf)BS@gPDKtH-*F*egDrZQ! z)&_xfwS{sB+vn^<?eVu^Nfj;Qv`N%f)nYQOijX^lMJR&;hV%}3579za!mZ9^TsUZJ zFK6=Lc^%Qi8!6S0(;9e>vl|)Z8<mD@FE<nQ;uK)_^;$UnN5c{H!2q)L1xy*E|J6{L z<75Bq)z^s~1F8b+jWV0om539LiNL@XGHu<cIM@i|zRw9HOMn{F3l+%_xsNMUe}n`> zc3iy9q^mLwa&b`01tE8r{s#Dlrp1H%mY8E)M?tIGXD}$#@olQ4#lOP&N@)s7e0|KC zbpgVId`^B&5kT;avH39dY-{Bub)>iznRRl{qpsVwoEv^AaEe`0&*e}L4QKDq#}|~a zb&Z8V;So0dDC+;5pv*}1w4%q!bgiH5M3~{}M<22vF-YJr^}Ov%btfK(bdQR*;$jzI z{{mKP|2V$KhzNjH`xB4jW97#VB=H0?MOK}DZ_7`D`d=ogj<QlBdV3kL8T0}HT1y$r z3>7$t%)o?RW{1w&2(U4g+!JL5Ux?-BBn0Ifh3R;pI_E#W7eoV5yiFJd*^~&30zjZG z6bK9mU;0jOimg=CH$>x=qyRNc7$kOLg$ln^#ZmRi{~Zsl)<#rtkAvaGHi$X4&6Pl@ zlN1Y)5aSxV?h}qIfCEM{OH1^nHh2_MGXUqJT;9J#abuU!z%V^+@1Z~#cWiofweMbi zdUI7yuwSs;`!O_5$o=qBIm1(!SpA&;oT$j<p_9p`q`|BGw<7Yu)c+~!<s)th^d}nw zj^qE62?+W(kEZ*t*7z*oKY@}1@Mveh^9CPgM!bL8VU@RMH*Q(*lEO|-$>+fZWQMRj zxPT`g1=uRrN29}5!tMt2kku_eiWKiN90DxhDBv{8{k+QABMqj<5))U!=W(rrxbDxM z7g}0)I3H&&Md^`w23cr&tP703ewb3NjjI$&xqae|8xp{JEtDe2MMW5XrnU@{k8Kp7 zh9J{Xm!-3XWGtc|b<TI;WN7FZ_f)P=5$KS>yy=Ud_o$=A$JUue#XU%-2@^<qp89>C zlRU7P6c3D5)pUEAZXb2Dd=OMeQ(?{kn*chR%0D`q-G#LQhx4%k32+4f%(Vy_Y>46b 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%0DNL=uV~l`5|RXYpi5d8*z!`422_3VdjZ=+U(ZM- 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%0De=&BDvPH)Ec(sQQe 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 diff --git a/src/windows/identity/doc/plugin_framework.h b/src/windows/identity/doc/plugin_framework.h deleted file mode 100644 index 84ad71c17..000000000 --- a/src/windows/identity/doc/plugin_framework.h +++ /dev/null @@ -1,241 +0,0 @@ -/* - * 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 - * 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$ */ - -/*! -\page pi_framework Plug-in Framework - -\section pi_fw_pnm Introduction to Plug-ins, Modules and Messages - -\subsection pi_fw_pnm_p Plug-ins - -A plug-in is a package that implements a defined API that will perform -credentials management or related tasks on behalf of Network Identity -Manager. - -The Network Identity Manager architecture is message based. The core -of each plug-in is a message handler. The plug-in integrates with the -application by subscribing to, and handling specific types of -messages. - -The plug-in message handler runs in its own thread and receive -asynchronous messages. There are exceptions, such as when one plug-in -requires another plug-in to handle a specific message before it can -handle the message. In addition, during certain operations that -require user interaction, each plug-in can delegate code that will run -in the main application thread (the user interface thread) to process -window messages. - -\subsection pi_fw_pnw_m Modules - -One or more plug-ins can be bundled together into a module. A module -is a dynamically loadable library which exports a specific set of -callbacks. Currently, the only two required callbacks for a module -are : - -- init_module(), and -- exit_module() - -For more information about how a module is structured, see \ref -pi_structure . - -\subsection pi_fw_pnm_msg Messages and Message Queues - -An integral part of this framework is the messaging system. Most of -the communication between the Network Identity Manager application and -plug-ins is conducted through passing messages. - -A message has a type and subtype and is denoted in this documentation -as \< \e message_type, \e message_subtype\>. For example, when a -plug-in is loaded, the first message it receives is \< ::KMSG_SYSTEM, -::KMSG_SYSTEM_INIT \>. - -Each thread in the application, specially threads that were created -for individual plug-in messages handlers, has an associated message -queue that stores and manages all the messages that have been sent to -subscribers in that thread. - -The most common recipient of a message is a message callback function -(see ::kmq_callback_t ). The message handler for a plug-in is one such -example. A message callback function receives the message type, -subtype and two optional parameters for the message. - -Any acceptable recipient can subscribe to broadcast messages of any -type. Once subscribed, whenever a message of that type is broadcast, -the message will get queued on the corresponding message queue. Then, -one of the dispatch functions can dispatch the message to the correct -callback function. (see ::kmq_dispatch). - -Next \subpage pi_fw_pm ... - -*/ - -/*! - -\page pi_fw_pm Module Manager - -The Module Manager is tasked with loading and unloading modules as -well as managing the plug-in message processing. - -When a module is successfully loaded, it registers one or more -plug-ins. The Module Manager creates a new thread for each of these -plug-ins. Then the initialization message to the plug-in is sent and -the message dispatch loop is started in this new thread. Having each -plug-in in a separate thread prevents one plug-in from "hanging" other -plug-ins and the user interface. - -\note For compatibility with future versions of Network Identity -Manager, a plug-in should not depend on the fact that it is running in -its own thread. - -Read more : -- \ref pi_structure - -\section pi_fw_pm_load Module Load Sequence - -When kmm_load_module() is called to load a specific module, the -following sequence of events occur: - -<ul> - - <li> - The registration information for the module is located on the - registry key \c - \\Software\\MIT\\NetIDMgr\\PluginManager\\Modules\\[ModuleName]. \see - \ref config - </li> - - <li> The module will not be loaded if one of the following conditions are - true: - - <ul> - <li> - The \c Disabled value is defined and non-zero. - </li> - - <li> - The \c FailureCount value is defined and exceeds the maximum - failure count. By default, the maximum failure count is three, - although it can be set by adding the registry value \c - ModuleMaxFailureCount in registry key \c - Software\\MIT\\NetIDMgr\\PluginManager\\Modules . - </li> - </ul> - </li> - - <li> - The \c ImagePath value from the registration information is used to - locate the module binary. If it is not an absolute path, then the - binary is located using the standard system search path starting - from the directory in which Network Identity Manager binaries are - located. - </li> - - <li> - The binary is loaded into the address space of Network Identity - Manager along with any dependencies not already loaded. - </li> - - <li> - If the Network Identity Manager core binary is signed, then the - signature is checked against the system and user certificate stores. - If this fails, the module is unloaded. See \ref pi_fw_pm_unload. - </li> - - <li> - The init_module() entry point for the loaded module is called. If - this function returns an error or if no plug-ins are registered, - then the module is immediately unloaded. See \ref pi_fw_pm_unload. - - <ul> - <li> - During processing of init_module(), if any localized resource - libraries are specified using kmm_set_locale_info(), then one of the - localized libraries will be loaded. See \ref pi_localization - </li> - - <li> - During processing of init_module(), the module registers all the - plug-ins that it is implementing by calling kmm_provide_plugin() - for each. - </li> - </ul> - </li> - - <li> - Once init_module() returns, each plug-in is initialized. The method - by which a plug-in is initialized depends on the plug-in type. The - initialization code for the plug-in may indicate that it didn't - initialize properly, in which case the plug-in is immediately - unregistered. No further calls are made to the plug-in. - </li> - - <li> - If no plug-in is successfully loaded, the module is unloaded. See - \ref pi_fw_pm_unload. - </li> -</ul> - - During normal operation, any registered plug-ins for a module can be - unloaded explicitly, or the plug-in itself may signal that it should - be unloaded. If at anytime, all the plug-ins for the module are - unloaded, then the module itself is also unloaded unless the \c - NoUnload registry value is set in the module key. - -\section pi_fw_pm_unload Unload sequence - -<ul> - <li> - For each of the plug-ins that are registered for a module, the exit - code is invoked. The method by which this happens depends on the - plug-in type. The plug-in is not given a chance to veto the - decision to unload. Each plug-in is responsible for performing - cleanup tasks, freeing resources and unsubscribing from any message - classes that it has subscribed to. - </li> - - <li> - Once all the plug-ins have been unloaded, the exit_module() entry - point is called for the module. - </li> - - <li> - If any localized resource libraries were loaded for the module, they - are unloaded. - </li> - - <li> - The module is unloaded. - </li> -</ul> - -The following diagram illustrates the relationship between modules and -plug-ins as implemented in the Kerberos 5 plug-in distributed with -Network Identity Manager. - -\image html modules_plugins_krb5.png - - */ diff --git a/src/windows/identity/doc/plugin_locale.h b/src/windows/identity/doc/plugin_locale.h deleted file mode 100644 index e6d1e1ef0..000000000 --- a/src/windows/identity/doc/plugin_locale.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * 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 - * 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$ */ - -/*! -\page pi_localization Localization - -If a module requires localized resources, it can register the -localized resource libraries with the module manager when it receives -the init_module() callback. Note that you can only register localized -resource libraries during init_module(). - -The localized resource library is global to a module. Each plug-in is -not allowed to define its own localization library, although it is -free to load and use any library as it sees fit. The module manager -does not manage these libraries for the plug-in. - -\section pi_loc_spec Specification of localized resources - -In order to register localized resource libraries, a module calls -kmm_set_locale_info(). The \a locales parameter to the function holds -a pointer to an array of ::kmm_module_locale records. Each record -specifies one language code and a filename of a library that holds the -language resources for that language. - -It is recommended that you use the LOCALE_DEF convenience macro when -defining locale records for use with kmm_set_locale_info(). This will -ensure that future changes in the API will only minimally affect your -code. For example: - -\code -kmm_module_locale my_locales[] = { -LOCALE_DEF(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US), L"english.dll", KMM_MLOC_FLAG_DEFAULT), -LOCALE_DEF(MAKELANGID(LANG_DUTCH,SUBLANG_DUTCH), L"dutch.dll", 0), -LOCALE_DEF(MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_MODERN), L"spanish.dll", 0) -}; - -int n_locales = sizeof(my_locales)/sizeof(my_locales[0]); - -... - -kmm_set_locale_info(h_module, my_locales, n_locales); - -... -\endcode - -See kmm_set_locale_info() and ::kmm_module_locale for more info. - -\section pi_loc_how Selection of localized resource library - -The module manager searches the array of ::kmm_module_locale objects -passed into the kmm_set_locale_info() function for one that matches -the current user locale (as opposed to the current system locale). A -record matches the locale if it has the same language ID. - -If a match is found, that library is selected. Otherwise, the list is -searched for one that is compatible with the current user locale. A -locale record is compatible with the user locale if the primary -language matches. - -If a match is still not found, the first record in the locale array -that has the ::KMM_MLOC_FLAG_DEFAULT flag set will be selected. - -If a match is still not found, then the kmm_set_locale_info() will -return ::KHM_ERROR_NOT_FOUND. - -\section pi_loc_usage Using localization - -The following convenience macros are available for using a module -handle to load resources from the corresponding resource library. -However, for performance reasons, it is advisable to obtain a handle -to the resource library loaded by the module manager using -kmm_get_resource_module() and then use it to access resources using -the regular WIN32 API. - -- ::kmm_LoadAccelerators -- ::kmm_LoadBitmap -- ::kmm_LoadCursor -- ::kmm_LoadIcon -- ::kmm_LoadImage -- ::kmm_LoadMenu -- ::kmm_LoadString - -*/ diff --git a/src/windows/identity/doc/plugin_main.h b/src/windows/identity/doc/plugin_main.h deleted file mode 100644 index bde85558d..000000000 --- a/src/windows/identity/doc/plugin_main.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * 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 - * 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$ */ - -/*! - -\page plug-ins Network Identity Manager Modules and Plug-ins - - The Network Identity Manager application does not include any - ability to manage any specific type of credential. Instead it - exposes a framework on which plug-ins can be implemented to manage - credentials. - - Plug-ins and localization are handled by the Network Identity - Manager Module Manager API. - - The following sections describe plug-ins in detail: - - - \subpage pi_framework - - \subpage pi_pt - - \subpage pi_structure - - \subpage pi_localization -*/ - -/*! \page pi_pt Plug-in Types - -The types of plug-ins that are currently supported by Network Identity -Manager are : - -\section pi_pt_cred Credential Provider - -A credential provider plug-in essentially acts as an interface between -Network Identity Manager and some entity which defines the credentials -for the purpose of managing those credentials. - -There can be more than one credential provider in a module. - -\subsection pi_pt_cred_comm Communication - -Communication between Network Identity Manager and a credential -provider occurs through a message processor. When registering a -credential provider, the module initialization code in init_module() -specifies ::KHM_PITYPE_CRED as the \a type member and sets \a msg_proc -member to a valid message processor in the ::khm_plugin record. - -\subsection pi_pt_cred_init Initialization - -Once init_module() has completed, the module manager sends a -<::KMSG_SYSTEM,::KMSG_SYSTEM_INIT> message to the message processor. - -For credential provider plug-ins, <::KMSG_SYSTEM,::KMSG_SYSTEM_INIT> is -guaranteed to be the first message it receives. - -The callback function should return KHM_ERROR_SUCCESS if it -initializes properly or some other value otherwise. If the return -value signals an error, then the plug-in is assumed to have failed -initialization and is immediately unloaded. - -The message processor is automatically subscribed to the following -message types: -- ::KMSG_SYSTEM -- ::KMSG_KCDB - -Although a plug-in can use the <::KMSG_SYSTEM,::KMSG_SYSTEM_INIT> -message enumerate existing credentials in the system, it should not -obtain new credentials. This is because other plug-ins that may depend -on the new credential messages may not be loaded at this time. See the -section on \ref cred_msgs for more information. - -\subsection pi_pt_cred_exit Uninitialization - -When the plug-in is to be removed, the module manager sends a -<::KMSG_SYSTEM,::KMSG_SYSTEM_EXIT> to the message processor. The -plug-in must perform any necessary shutdown operations, free up -resources and unsubscribe from any messages that it has subscribed to. - -This message is guaranteed to be the last message received by a -credentials manager plug-in if the plug-in unsubsribes from all -additional message classes that it subsribed to. - -The message types that the message processor is automatically -subscribed to (See \ref pi_pt_cred_init) do not have to be -unsubscribed from as they are automatically removed. - -\subsection pi_pt_cred_other Other Notes - -Since credential managers may receive privileged information, the -signature requirements for credential managers are specially strict. - -*/ diff --git a/src/windows/identity/doc/plugin_structure.h b/src/windows/identity/doc/plugin_structure.h deleted file mode 100644 index 68cee13e7..000000000 --- a/src/windows/identity/doc/plugin_structure.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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 - * 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$ */ - -/*! - -\page pi_structure Structure of a module - -A Network Identity Manager module is a dynamically loadable library -with a specific set of exported symbols. Each export symbol and -general notes about writing a plug-in module are documented below. - -\section pi_str_reg Registration and Version Information - -[TODO] - -\section pi_str_init Initialization - -Do not use DllMain or other system specific callback routines to -perform intilization tasks other than creating mutexes, initializing -thread local storage and other tasks that must be performed at that -stage. Specifically, do not call any Network Identity Manager API functions from -within DllMain. - -\section pi_str_cb Callbacks - -The callbacks that must be implemented by a module are: - -- init_module() -- exit_module() - - */ diff --git a/src/windows/identity/doc/stylesheet.css b/src/windows/identity/doc/stylesheet.css deleted file mode 100644 index f1183ee37..000000000 --- a/src/windows/identity/doc/stylesheet.css +++ /dev/null @@ -1,387 +0,0 @@ -BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { - font-family: Geneva, Arial, Helvetica, sans-serif; -} -BODY,TD { - font-size: 90%; -} -H1 { - text-align: center; - font-size: 160%; - border-bottom: 1px solid #88b7c8; - margin-bottom: 1em; - padding-top: 0.5em; - padding-bottom: 0.5em; - background-color: #e8eef2; -} -H2 { - margin-top: 1em; - font-size: 120%; - padding: 0.5em; - background-color: #f0f0f0; - border-bottom: 1px solid #888888; -} -H3 { - font-size: 100%; -} - -H4 { - font-size: 100%; -} - -CAPTION { font-weight: bold } -DIV.qindex { - width: 100%; - background-color: #e8eef2; - border: 1px solid #84b0c7; - text-align: center; - margin: 2px; - padding: 2px; - line-height: 140%; -} -DIV.nav { - width: 100%; - background-color: #e8eef2; - border: 1px solid #84b0c7; - text-align: center; - margin: 2px; - padding: 2px; - line-height: 140%; -} -DIV.navtab { - background-color: #e8eef2; - border: 1px solid #84b0c7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} -TD.navtab { - font-size: 70%; -} -A.qindex { - text-decoration: none; - font-weight: bold; - color: #1A419D; -} -A.qindex:visited { - text-decoration: none; - font-weight: bold; - color: #1A419D -} -A.qindex:hover { - text-decoration: none; - background-color: #ddddff; -} -A.qindexHL { - text-decoration: none; - font-weight: bold; - background-color: #6666cc; - color: #ffffff; - border: 1px double #9295C2; -} -A.qindexHL:hover { - text-decoration: none; - background-color: #6666cc; - color: #ffffff; -} -A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff } -A.el { text-decoration: none; font-weight: bold } -A.elRef { font-weight: bold } -A.code:link { text-decoration: none; font-weight: normal; color: #0000FF} -A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF} -A.codeRef:link { font-weight: normal; color: #0000FF} -A.codeRef:visited { font-weight: normal; color: #0000FF} -A:hover { text-decoration: none; background-color: #f2f2ff } -DL.el { margin-left: -1cm } -.fragment { - font-family: monospace, fixed; - font-size: 95%; -} -PRE.fragment { - border: 1px solid #CCCCCC; - background-color: #f5f5f5; - margin-top: 4px; - margin-bottom: 4px; - margin-left: 2px; - margin-right: 8px; - padding-left: 6px; - padding-right: 6px; - padding-top: 4px; - padding-bottom: 4px; -} -DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } - -DIV.groupHeader { - margin-left: 16px; - margin-top: 12px; - margin-bottom: 6px; - font-weight: bold; -} -DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% } -BODY { - background: white; - color: black; - margin-right: 20px; - margin-left: 20px; -} -TD.indexkey { - background-color: #e8eef2; - font-weight: bold; - padding-right : 10px; - padding-top : 2px; - padding-left : 10px; - padding-bottom : 2px; - margin-left : 0px; - margin-right : 0px; - margin-top : 2px; - margin-bottom : 2px; - border: 1px solid #CCCCCC; -} -TD.indexvalue { - background-color: #e8eef2; - font-style: italic; - padding-right : 10px; - padding-top : 2px; - padding-left : 10px; - padding-bottom : 2px; - margin-left : 0px; - margin-right : 0px; - margin-top : 2px; - margin-bottom : 2px; - border: 1px solid #CCCCCC; -} -TR.memlist { - background-color: #f0f0f0; -} -P.formulaDsp { text-align: center; } -IMG.formulaDsp { } -IMG.formulaInl { vertical-align: middle; } -SPAN.keyword { color: #008000 } -SPAN.keywordtype { color: #604020 } -SPAN.keywordflow { color: #e08000 } -SPAN.comment { color: #800000 } -SPAN.preprocessor { color: #806020 } -SPAN.stringliteral { color: #002080 } -SPAN.charliteral { color: #008080 } -.mdescLeft { - padding: 0px 8px 4px 8px; - font-size: 80%; - font-style: italic; - background-color: #FAFAFA; - border-top: 1px none #E0E0E0; - border-right: 1px none #E0E0E0; - border-bottom: 1px none #E0E0E0; - border-left: 1px none #E0E0E0; - margin: 0px; -} -.mdescRight { - padding: 0px 8px 4px 8px; - font-size: 80%; - font-style: italic; - background-color: #FAFAFA; - border-top: 1px none #E0E0E0; - border-right: 1px none #E0E0E0; - border-bottom: 1px none #E0E0E0; - border-left: 1px none #E0E0E0; - margin: 0px; -} -.memItemLeft { - padding: 1px 0px 0px 8px; - margin: 4px; - border-top-width: 1px; - border-right-width: 1px; - border-bottom-width: 1px; - border-left-width: 1px; - border-top-color: #E0E0E0; - border-right-color: #E0E0E0; - border-bottom-color: #E0E0E0; - border-left-color: #E0E0E0; - border-top-style: solid; - border-right-style: none; - border-bottom-style: none; - border-left-style: none; - background-color: #FAFAFA; - font-size: 80%; -} -.memItemRight { - padding: 1px 8px 0px 8px; - margin: 4px; - border-top-width: 1px; - border-right-width: 1px; - border-bottom-width: 1px; - border-left-width: 1px; - border-top-color: #E0E0E0; - border-right-color: #E0E0E0; - border-bottom-color: #E0E0E0; - border-left-color: #E0E0E0; - border-top-style: solid; - border-right-style: none; - border-bottom-style: none; - border-left-style: none; - background-color: #FAFAFA; - font-size: 80%; -} -.memTemplItemLeft { - padding: 1px 0px 0px 8px; - margin: 4px; - border-top-width: 1px; - border-right-width: 1px; - border-bottom-width: 1px; - border-left-width: 1px; - border-top-color: #E0E0E0; - border-right-color: #E0E0E0; - border-bottom-color: #E0E0E0; - border-left-color: #E0E0E0; - border-top-style: none; - border-right-style: none; - border-bottom-style: none; - border-left-style: none; - background-color: #FAFAFA; - font-size: 80%; -} -.memTemplItemRight { - padding: 1px 8px 0px 8px; - margin: 4px; - border-top-width: 1px; - border-right-width: 1px; - border-bottom-width: 1px; - border-left-width: 1px; - border-top-color: #E0E0E0; - border-right-color: #E0E0E0; - border-bottom-color: #E0E0E0; - border-left-color: #E0E0E0; - border-top-style: none; - border-right-style: none; - border-bottom-style: none; - border-left-style: none; - background-color: #FAFAFA; - font-size: 80%; -} -.memTemplParams { - padding: 1px 0px 0px 8px; - margin: 4px; - border-top-width: 1px; - border-right-width: 1px; - border-bottom-width: 1px; - border-left-width: 1px; - border-top-color: #E0E0E0; - border-right-color: #E0E0E0; - border-bottom-color: #E0E0E0; - border-left-color: #E0E0E0; - border-top-style: solid; - border-right-style: none; - border-bottom-style: none; - border-left-style: none; - color: #606060; - background-color: #FAFAFA; - font-size: 80%; -} -.search { color: #003399; - font-weight: bold; -} -FORM.search { - margin-bottom: 0px; - margin-top: 0px; -} -INPUT.search { font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} -TD.tiny { font-size: 75%; -} -a { - color: #1A41A8; -} -a:visited { - color: #2A3798; -} -.dirtab { padding: 4px; - border-collapse: collapse; - border: 1px solid #84b0c7; -} -TH.dirtab { background: #e8eef2; - font-weight: bold; -} -HR { height: 1px; - border: none; - border-top: 1px solid black; - border-color: #88b7c8; -} - -/* Style for detailed member documentation */ -.memtemplate { - font-size: 80%; - color: #606060; - font-weight: normal; -} -.memnav { - background-color: #e8eef2; - border: 1px solid #84b0c7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} -.memitem { - padding: 4px; - background-color: #eef3f5; - border-width: 1px; - border-style: solid; - border-color: #dedeee; - -moz-border-radius: 8px 8px 8px 8px; -} -.memname { - white-space: nowrap; - font-weight: bold; -} -.memdoc{ - padding-left: 10px; -} -.memproto { - background-color: #d5e1e8; - width: 100%; - border-width: 1px; - border-style: solid; - border-color: #84b0c7; - font-weight: bold; - -moz-border-radius: 8px 8px 8px 8px; -} -.paramkey { - text-align: right; -} -.paramtype { - white-space: nowrap; -} -.paramname { - color: #602020; - font-style: italic; - white-space: nowrap; -} -/* End Styling for detailed member documentation */ - -/* for the tree view */ -.ftvtree { - font-family: sans-serif; - margin:0.5em; -} -.directory { font-size: 9pt; font-weight: bold; } -.directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } -.directory > h3 { margin-top: 0; } -.directory p { margin: 0px; white-space: nowrap; } -.directory div { display: none; margin: 0px; } -.directory img { vertical-align: -30%; } - -DL.note { - background-color: #eeeeee; - width: 100%; - border-width: 1px; - border-style: solid; - border-color: #bbbbbb; - -moz-border-radius: 4px 4px 4px 4px; -} - -DL.note DT { - font-size: 75%; -} - diff --git a/src/windows/identity/doc/ui_actions.h b/src/windows/identity/doc/ui_actions.h deleted file mode 100644 index 04f9aa6f2..000000000 --- a/src/windows/identity/doc/ui_actions.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 - * 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$ */ - -/*! \page khui_actions Actions - - */ diff --git a/src/windows/identity/doc/ui_context.h b/src/windows/identity/doc/ui_context.h deleted file mode 100644 index f5f4e037e..000000000 --- a/src/windows/identity/doc/ui_context.h +++ /dev/null @@ -1,188 +0,0 @@ -/* - * 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 - * 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$ */ - -/*! \page khui_context Contexts - - \section khui_context_contents Contents - - - \ref khui_context_intro "Introduction" - - \subpage khui_context_using - - \section khui_context_intro Introduction - - Several ::KMSG_CRED messages and many messages depend on the - selections that the user has made on the user interface. The UI - context functions and data structures provide access to this - information. - - The Network Identity Manager user interface presents an outline view of all the - credentials that were provided by credentials providers. This - view consists of headers representing the outline levels and rows - representing individual credentials. - - Users can make multiple selections of credentials or headers from - this view. If all the credentials and subheaders under a - particular outline level are selected, then the header itself is - automatically selected. There may be multiple disjointed - selections of headers and credentials. - - In addition, the current cursor position also acts as a selector. - The credential or header under the cursor may not actually be - selected. The cursor is not the mouse pointer, but the focus - rectangle that may be moved either using the keyboard or by - clicking on a credential or header. - - Thus there are two independent groups of selections: - - - Credentials and headers which are in a selected state at some - specific point in time (the <b>current selection</b>). - - - The current credential or selection which the cursor is on (the - <b>cursor selection</b>). - - There are a few notes on how credentials are selected: - - - An "empty" header (a header that does not contain any credential - rows) does not appear in a UI context. However they can appear - as the current cursor context. - - - At its current implementation, cursor selections of identity, - credential type, and individual credentials are treated as - special cases since they are the most common. - - How the UI context is used when processing a specific action or - message depends on the action or message. If an action operates - on a group of credentials, then the current selection may be used, - and on the other hand if an action or message relates to just one - credential, identity or credential type is invoked, then the - cursor selection is invoked. - - For example, double-clicking a credential, or right clicking and - selecting 'Properties' from the context menu launches the property - window for a credential. This operates on the cursor selection - since that reflects where the user double clicked. However, - choosing 'Destroy' from the context menu invokes a command that - can be applied to a group of credential, and hence uses the - current selection. - - Next: \ref khui_context_using "Using Contexts" - */ - -/*! \page khui_context_using Using Contexts - - \section khui_context_using_1 Obtaining the context - - Typically, messages sent by actions that rely on UI context will - obtain and store the context in a location that is accessible to - the handlers of the message. - - If a plug-in needs to obtain the UI context, it should do so by - calling khui_context_get() and passing in a pointer to a - ::khui_action_context structure. - - Once obtained, the contents of the ::khui_action_context structure - should be considered read-only. When the plug-in is done with the - structure, it should call ::khui_context_release(). This cleans - up any additional memory allocated for storing the context as well - as releasing all the objects that were referenced from the - context. - - \section khui_context_sel_ctx Selection context - - The selection context is specified in the ::khui_action_context - structure in the \a sel_creds and \a n_sel_creds fields. These - combined provide an array of handles to credentials which are - selected. - - \note If \a n_sel_creds is zero, then \a sel_creds may be NULL. - - \section khui_context_cur_ctx Cursor context - - The scope of the cursor context is specified in the \a scope field - of the ::khui_action_context strucutre. The scope can be one of: - - - ::KHUI_SCOPE_NONE - - ::KHUI_SCOPE_IDENT - - ::KHUI_SCOPE_CREDTYPE - - ::KHUI_SCOPE_GROUP - - ::KHUI_SCOPE_CRED - - Depending on the scope, several other members of the strucre may - also be set. - - In general, the cursor context can be a single credential or an - entire outline level. Unlike the selection context, since this - specifies a single point of selection it can not be disjointed. - - The contents of the \a identity, \a cred_type, \a cred, \a headers - and \a n_headers are described in the documentation of each of the - scope values above. - - \subsection khui_context_sel_ctx_grp KHUI_SCOPE_GROUP - - The ::KHUI_SCOPE_GROUP scope is the generic scope which describes - a cursor selection that can not be simplified into any other - scope. - - In this case, the selection is described by an array of - ::khui_header elements each of which specify a criterion for - narrowing down the selection of credentials. The ::khui_header - structure specifies an attribute in the \a attr_id field and a - value in the \a data and \a cb_data fields. The credentials that - are selected are those in the root credential set whose repective - attributes contain the values specified in each of the - ::khui_header elements. - - For example, the following selection: - - \image html credview-select-outline.jpg - - will result in the following header specification: - - \code - ctx.n_headers = 3; - - ctx.headers[0].attr_id = KCDB_ATTR_LOCATION; - ctx.headers[0].data = L"grailauth@KHMTEST"; - ctx.headers[0].cb_data = sizeof(L"grailauth@KHMTEST"); - - ctx.headers[1].attr_id = KCDB_ATTR_ID; - ctx.headers[1].data = &handle_to_identity; - ctx.headers[1].cb_data = sizeof(khm_handle); - - ctx.headers[2].attr_id = KCDB_ATTR_TYPE; - ctx.headers[2].data = &kerberos_5_credtype; - ctx.headers[2].cb_data = sizeof(khm_int32); - \endcode - - \note The attribute that is used to specify the header is not the - display attribute, but the canonical attribute. For example, - in the above, the second header was actually - KCDB_ATTR_ID_NAME. But KCDB_ATTR_ID was used since that is - the canonical source for KCDB_ATTR_ID_NAME. See ::kcdb_attrib - for more information on canonical attributes. -*/ diff --git a/src/windows/identity/doc/ui_main.h b/src/windows/identity/doc/ui_main.h deleted file mode 100644 index ae6700847..000000000 --- a/src/windows/identity/doc/ui_main.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * 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 - * 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$ */ - -/*! \page khui User Interface Topics - - \section khui_contents Contents - - - \subpage khui_actions - - \subpage khui_menus - - \subpage khui_context - - \subpage khui_htwnd - */ diff --git a/src/windows/identity/doc/ui_menus.h b/src/windows/identity/doc/ui_menus.h deleted file mode 100644 index e46ee0840..000000000 --- a/src/windows/identity/doc/ui_menus.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 - * 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$ */ - -/*! \page khui_menus Menus - - */ diff --git a/src/windows/identity/help/Index.hhk b/src/windows/identity/help/Index.hhk deleted file mode 100644 index c0ba08a9a..000000000 --- a/src/windows/identity/help/Index.hhk +++ /dev/null @@ -1,9 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> -<HTML> -<HEAD> -<meta name="GENERATOR" content="Microsoft&reg; HTML Help Workshop 4.1"> -<!-- Sitemap 1.0 --> -</HEAD><BODY> -<UL> -</UL> -</BODY></HTML> diff --git a/src/windows/identity/help/Makefile b/src/windows/identity/help/Makefile deleted file mode 100644 index 8838bbd0d..000000000 --- a/src/windows/identity/help/Makefile +++ /dev/null @@ -1,41 +0,0 @@ -# -# 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 -# (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. - - -MODULE=help -!include <..\config\Makefile.w32> - -CHMFILE=$(BINDIR)\netidmgr.chm - -INCFILES=$(INCDIR)\khhelp.h - -all: mkdirs $(CHMFILE) $(INCFILES) - -$(CHMFILE): netidmgr.hhp - -$(HHC) netidmgr.hhp - $(CP) netidmgr.chm $(CHMFILE) - -clean:: - if exist ..\obj $(RM) $(INCFILES) - if exist netidmgr.chm $(RM) netidmgr.chm diff --git a/src/windows/identity/help/html/about_netidmgr.htm b/src/windows/identity/help/html/about_netidmgr.htm deleted file mode 100644 index 440831606..000000000 --- a/src/windows/identity/help/html/about_netidmgr.htm +++ /dev/null @@ -1,57 +0,0 @@ -<html> - -<head> -<title>About Network Identity Manager</title> -<meta name="description" content="About NetIDMgr"> -<meta name="keywords" content> -<link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> - -<body> - -<h1>About Network Identity Manager</h1> -<p>This is strictly an informative page about the origins of Network Identity Manager. -</p> -<h3>In the beginning</h3> -<p>Network Identity Manager was conceived as an identity management solution to -make up for the shortcomings of Leash32 (distributed with MIT Kerberos for Windows) -and AFSCreds (distributed with OpenAFS). </p> -<p>The work started as Unified Credentials Manager, a final project for the MIT -course 6.831 : User Interface Design and Implementation, taught by -<a href="http://people.csail.mit.edu/rcm/">Professor Rob Miller</a>. By the time -actual code was written, it was named Khimaira (which was later changed to Network -Identity Manager around October, 2005). Traces of the name Khimaira might still -exist in the source code. </p> -<p><a href="http://workshop.openafs.org/afsbpw05/talks/khimaira.html">Khimaira: -A Unified Interface for AFS and Kerberos</a> was presented at the -<a href="http://workshop.openafs.org/afsbpw05/">AFS and -Kerberos Best Practices Workshop 2005</a>. </p> -<p>A second talk, -<a href="http://workshop.openafs.org/afsbpw06/talks/asanka.html">Developing -plug-ins for Network Identity Manager</a>, was presented at -<a href="http://workshop.openafs.org/afsbpw06/">AFS and Kerberos Best Practice -Workshop 2006</a>.</p> -<p>The development of Network Identity Manager has been financially supported -(in alphabetical order) by <a href="http://www.fnal.gov/">Fermi National -Accelerator Laboratory</a>, -<a href="http://web.mit.edu">MIT</a> <a href="http://web.mit.edu/ist/">Information -Services and Technology</a>, <a href="http://www.jpl.nasa.gov">NASA Jet Propulsion -Laboratory</a>, <a href="http://www.secure-endpoints.com">Secure Endpoints Inc.</a>, -and <a href="http://www.stanford.edu/">Stanford University</a>. -</p> -<h3>Design</h3> -<p>A plug-in based architecture was chosen so that support for additional credential -types and features could be added without making changes to the mainline code. In -addition to making the application easily extensible, this also allows the AFS plug-in -to be maintained within the OpenAFS code base and separates the code supporting -Kerberos v5 and Kerberos v4 permitting Kerberos v4 to be easily removed from the -Kerberos for Windows distribution. Furthermore, it is anticipated that this would encourage -third party developers to develop plug-ins for Network Identity Manager.&nbsp; -As of September 2007, a Kerberized Certificate Authority credential provider and -a Grid credential provider are available from third parties.</p> -<p>More information about the concepts used in the design of Network Identity Manager -can be found <a href="concepts.htm">here</a>. </p> - -</body> - -</html> diff --git a/src/windows/identity/help/html/act_chpw.htm b/src/windows/identity/help/html/act_chpw.htm deleted file mode 100644 index a68f73336..000000000 --- a/src/windows/identity/help/html/act_chpw.htm +++ /dev/null @@ -1,35 +0,0 @@ -<html> -<head> - <title>Network Identity Manager - Change Password</title> - <meta name="description" content="change password"> - <meta name="keywords" content="change password dialog"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> - - <Object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> -<param name="Keyword" value="Changing Passwords"> -</OBJECT> -</head> -<body> - -<h1>Network Identity Manager - Change Password</h1> - -<p>The change password dialog can be invoked from the <a -href="menu_credential.htm">Credentials</a> menu. This is used to -change the password for the primary credentials provider (currently -Kerberos v5). -</p> -<p><img border="0" src="images/screen_chng_pwd.png" width="456" height="244"></p> - -<p>For the default identity provider (Kerberos v5), there are two input -boxes to specify the identity for which the password is to be changed. -The identity uniquely maps to the Kerberos principal of the same name. -Then the current password must be entered along with the new password -twice. -</p> - -<p>Note that currently, when the password for an identity is being -changed, only the associated Kerberos v5 password is changed. -</p> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/act_destroy_creds.htm b/src/windows/identity/help/html/act_destroy_creds.htm deleted file mode 100644 index 196631bc9..000000000 --- a/src/windows/identity/help/html/act_destroy_creds.htm +++ /dev/null @@ -1,36 +0,0 @@ -<html> -<head> - <title>Network Identity Manager - Destroy Credentials</title> - <meta name="description" content="Destroy Credentials"> - <meta name="keywords" content="destroy credentials"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -<Object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> -<param name="Keyword" value="Destroying Credentials"> -<param name="Keyword" value="Ctrl + D"> -<param name="Keyword" value="Delete key"> -</OBJECT></head> -<body> - -<h1>Network Identity Manager - Destroy Credentials</h1> - -<p>This action will attempt to destroy the credentials that are -currently selected in the credentials window. -</p> - -<p>In some cases, you may need to select all the credentials of a -specific type for the delete operation to succeed. This happens when -the credentials provider does not support deleting individual -credentials, but supports deleting all the credentials stored in one -specific location. -</p> - -<p>The action can be invoked by selecting the credentials and then -pressing the <span class="pre">Delete</span> key or by pressing <span -class="pre">Ctrl + D</span>. You can also select the <span -class="pre">Delete credentials</span> action from the context menu -(available via right-clicking inside the credentials window) or the -credentials menu. -</p> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/act_import_creds.htm b/src/windows/identity/help/html/act_import_creds.htm deleted file mode 100644 index c465c060d..000000000 --- a/src/windows/identity/help/html/act_import_creds.htm +++ /dev/null @@ -1,31 +0,0 @@ -<html> -<head> - <title>Network Identity Manager - Import Credentials</title> - <meta name="description" content="Import Credentials"> - <meta name="keywords" content="Import Credentials"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> - -<Object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> -<param name="Keyword" value="Importing Credentials"> -<param name="Keyword" value="Ctrl + I"> -<param name="Keyword" value="MSLSA"> -</OBJECT></head> -<body> - -<h1>Network Identity Manager - Import Credentials</h1> - -<p>Allows you to import credentials from the Microsoft Windows LSA credentials -cache. Currently, the only credentials provider that supports -importing is Kerberos v5. -</p> - -<p>This action can be invoked via the <a -href="menu_credential.htm">Credentials</a> menu or by pressing <span -class="pre">Ctrl + I</span>. In addition, the Kerberos v5 -configuration pane accessible via the <a -href="menu_options.htm">Options</a> menu contain settings that -control when the importing of credentials are performed at startup. -</p> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/act_new_creds.htm b/src/windows/identity/help/html/act_new_creds.htm deleted file mode 100644 index b329a1adf..000000000 --- a/src/windows/identity/help/html/act_new_creds.htm +++ /dev/null @@ -1,118 +0,0 @@ -<html> -<head> - <title>Network Identity Manager - New Credentials</title> - <meta name="description" content="obtain new credentials"> - <meta name="keywords" content="new creds"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> - - <Object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> -<param name="Keyword" value="Obtaining New Credentials"> -<param name="Keyword" value="Ctrl + N"> -<param name="Keyword" value="New Credentials Dialog"> -<param name="Keyword" value="Kerberos v5 ticket flags"> -<param name="Keyword" value="Changing Passwords"> -<param name="Keyword" value="Obtain New Credentials at Startup"> -</OBJECT> -</head> -<body> - -<h1>a Network Identity Manager - New Credentials</h1> - -<p>The new credentials dialog can be invoked from the <a -href="menu_credential.htm">Credentials</a> menu, by typing <span -class="pre">Ctrl + N</span>, using the context menu in the credentials -window or using the context menu in the NetIDMgr icon in the system -notification area. -</p> - -<p>Once invoked, you will be presented with a dialog similar to the -following: -</p> - -<p> -<img src="images/screen_new_creds.png" alt="New credentials dialog"/> -<p class="caption">New credentials dialog with a valid identity -selected.</p> - -<p>If the Kerberos v5 identity provider is used, the dialog will ask -for a username and a realm to determine the identity for which new -credentials will be obtained for. Depending on the selected identity, -you may be required to provide a password or other form of -authentication for new credentials to be obtained. -</p> - -<p>Below the prompts is the credentials summary window. This window -provides an overview of the credentials that will be obtained when the -dialog is completed. -</p> - -<h3>Expanded view</h3> - -<p>If you click any of the credentials type hyperlinks in the -credentials summary window or select the <span class="pre">&gt;&gt;</span> button, the dialog will switch to the expanded view. -An example of this is shown below: -</p> - -<p> -<img src="images/screen_new_creds_exp.png" -alt="Expanded new credentials window" /> - -<p class="caption">Expanded view of the new credentials dialog</p> - -<p> -The expanded view provides access to additional options available for -each credential provider. For example, the Kerberos v5 credentials -provider allows you to set the lifetime of the obtained Kerberos -ticket as well as ticket flags such as <i>renewable</i> or -<i>forwardable</i>. -</p> -<p> -<i>Note that the above screenshot is -from an instance of NetIDMgr with Kerberos v5, Kerberos v4, OpenAFS and -Kerberized Certificate Authority providers with a Kerberos v5 identity provider. Actual display may be -different depending on the providers that are active.</i></p> - -<h3>Credentials summary window</h3> - -<p>The credentials summary window provides an overview of the -credentials that will be obtained after the successful completion of -the new credentials dialog. The window contains hyperlinks that will -take you to the corresponding credentials option panels where you will -be able to set additional options for each type. -</p> - -<p>If there is a problem with the selected identity, the credentials -window will display a message describing the problem. For example: -</p> - -<p> -<img src="images/screen_new_creds_err01.png" alt="Credentials summary window showing an invalid identity" /> -</p> - -<p> -The above is an example of what you would see if the provided identity -is invalid. Once the identity provider (in this case, Kerberos v5) -indicates that the identity is invalid, it will be displayed as above -along with a brief description of why the identity was found to be -invalid. Here, the Kerberos v5 identity provider is reporting that the -specified principal does not exist in the Kerberos database. -</p> - -<h3>Additional notes</h3> - -<p>The new credentials dialog can be invoked from the command line using -the <span class="pre"> -i </span> or <span class="pre"> --kinit -</span> command line option. Additionally, if you specify the <span -class="pre"> -a </span> or <span class="pre"> --autoinit </span> -command line option, the new credentials dialog will be displayed if -there are no credentials available. -</p> - -<p> -Setting the <span class="pre">Obtain new credentials at startup (if none are present)</span> option in the <span -class="pre">General</span> configuration panel causes NetIDMgr to behave as if -the <span class="pre">--autoinit</span> option is specified at each execution. -</p> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/act_renew_creds.htm b/src/windows/identity/help/html/act_renew_creds.htm deleted file mode 100644 index a62c92fec..000000000 --- a/src/windows/identity/help/html/act_renew_creds.htm +++ /dev/null @@ -1,40 +0,0 @@ -<html> -<head> - <title>Network Identity Manager - Renew Credentials</title> - <meta name="description" content="Renew Credentials"> - <meta name="keywords" content="renew, credentials"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> - - <Object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> -<param name="Keyword" value="Renewing Credentials"> -<param name="Keyword" value="Ctrl + R"> -<param name="Keyword" value="Monitor Credential Expiration"> -<param name="Keyword" value="krb524 translator"> -<param name="Keyword" value=""> -<param name="Keyword" value=""> -</OBJECT> -</head> -<body> - -<h1>Network Identity Manager - Renew Credentials</h1> - -<p>The renew credentials action can be invoked via the <a -href="">Credential</a> menu or by pressing <span class="pre">Ctrl + -R</span>. Additionally, if the <span class="pre">Monitor credential -expiration</span> option is enabled for all identities or for a -specific identity, then those credentials will be automatically -renewed whenever possible before they expire.</p> - -<p>An identity must be selected before invoking the renew credentials -action.</p> - -<p>Not all credentials can be renewed. The actual logic of renewing -the credentials is up to each credentials provider. In general, NetIDMgr will invoke each credentials provider to renew their -respective credentials. For Kerberos v5, if the initial ticket is -renewable and not expired, then it will obtain a renewed initial -ticket. For Kerberos v4, once a renewed Kerberos v5 initial ticket is -obtained, it will try to use a Krb524 translator to obtain a new -Kerberos v4 initial ticket.</p> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/act_set_default.htm b/src/windows/identity/help/html/act_set_default.htm deleted file mode 100644 index b6628fac4..000000000 --- a/src/windows/identity/help/html/act_set_default.htm +++ /dev/null @@ -1,30 +0,0 @@ -<html> -<head> - <title>Network Identity Manager - Set As Default Identity</title> - <meta name="description" content="Set the default identity"> - <meta name="keywords" content="default, identity"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> -<body> - -<h1>Network Identity Manager - Set As Default Identity</h1> - -<p> -One identity can be designated as the default identity. The default identity is the -identity used by Kerberos v5 and GSS-API based applications which use the -default Kerberos v5 credential cache and do not request the use of a network identity by name. -</p> -<p> -The following methods can be used to set an identity as the default identity:</p> -<ol> - <li>In the NetIdMgr application window, select the desired identity and - choose the <i>Credentials-&gt;Set Default </i>menu item.</li> - <li>In the NetIdMgr application window, select the desired identity, click - the right mouse button, and choose the <i>Set as default</i> menu item.</li> - <li>Click the right mouse button on the NetIdMgr notification icon.&nbsp; - Choose the desired identity on the <i>Set Default</i> sub-menu.</li> -</ol> -<p>&nbsp;</p> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/bugs.htm b/src/windows/identity/help/html/bugs.htm deleted file mode 100644 index 6fbbc140c..000000000 --- a/src/windows/identity/help/html/bugs.htm +++ /dev/null @@ -1,33 +0,0 @@ -<html> -<head> - <title>Network Identity Manager - Reporting Bugs</title> - <meta name="description" content="Reporting bugs and feature requests"> - <meta name="keywords" content="bugs,features"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> -<body> - -<h1>Network Identity Manager - Reporting Bugs</h1> - -<p>If you encounter a bug in the software, please send a bug report via e-mail to -<a href="mailto:kfw-bugs@MIT.EDU" class="mail">kfw-bugs@MIT.EDU</a>. -Please include as much information as possible to assist us in reproducing the problem. -</p> - -<p><a href="mailto:kerberos@MIT.EDU" class="mail">kerberos@MIT.EDU</a> -is a mailing list set up for discussing end user Kerberos issues. It is -gatewayed to the Usenet newsgroup 'comp.protocols.kerberos'. If you -prefer to read it via mail, send a subscription request to -<a href="mailto:kerberos-request@MIT.EDU" class="mail">kerberos-request@MIT.EDU</a> -or subscribe via the web page:</p> - -<p> <a href="http://mailman.mit.edu/mailman/listinfo/kerberos" -class="external"> -http://mailman.mit.edu/mailman/listinfo/kerberos</a></p> - -<p>Information about Kerberos mailing lists can be found at <a -href="http://web.mit.edu/kerberos/mail-lists.html" -class="external">http://web.mit.edu/kerberos/mail-lists.html</a></p> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/cmdline_netidmgr.htm b/src/windows/identity/help/html/cmdline_netidmgr.htm deleted file mode 100644 index 4e11eec90..000000000 --- a/src/windows/identity/help/html/cmdline_netidmgr.htm +++ /dev/null @@ -1,50 +0,0 @@ -<html> -<head> - <title>Network Identity Manager Command Line Options</title> - <meta name="description" content=""> - <meta name="keywords" content=""> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> -<body> - -<h1>Network Identity Manager Command Line Options</h1> -<p>Command line options for Network Identity Manager are:</p> -<table border="1" width="57%" id="table1"> - <tr> - <td width="140"><font size="1">-a or --autoinit</font></td> - <td><font size="1">Automatic Initialization of Credentials</font></td> - </tr> - <tr> - <td width="140"><font size="1">-i or --kinit</font></td> - <td><font size="1">Obtain New Credentials and then exit</font></td> - </tr> - <tr> - <td width="140"><font size="1">-d or --destroy</font></td> - <td><font size="1">Destroy Credentials belonging to the default identity - and then exit</font></td> - </tr> - <tr> - <td width="140"><font size="1">-r or --renew</font></td> - <td><font size="1">Renew all Credentials and then exit</font></td> - </tr> - <tr> - <td width="140"><font size="1">-x or --exit</font></td> - <td><font size="1">Signal the running instance of Network Identity - Manager to exit</font></td> - </tr> - <tr> - <td width="140"><font size="1">--show</font></td> - <td><font size="1">Open the Network Identity Manager application window of a running instance.</font></td> - </tr> - <tr> - <td width="140"><font size="1">--hide</font></td> - <td><font size="1">Hide the Network Identity Manager application window of a running instance.</font></td> - </tr> - <tr> - <td width="140"><font size="1">--minimize</font></td> - <td><font size="1">Open the Network Identity Manager application window in minimized mode.</font></td> - </tr> -</table> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/concept_cred_pro.htm b/src/windows/identity/help/html/concept_cred_pro.htm deleted file mode 100644 index ab8f7c40e..000000000 --- a/src/windows/identity/help/html/concept_cred_pro.htm +++ /dev/null @@ -1,38 +0,0 @@ -<html> -<head> - <title>Network Identity Manager Concepts: Credentials Provider</title> - <meta name="description" content="NetIDMgr Concepts: Credentials Provider"> - <meta name="keywords" content="credentials provider, concepts"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> -<body> - -<h1>Network Identity Manager Concepts: Credentials Provider</h1> - -<p> -Network Identity Manager relies on plug-ins to provide the majority -of its functionality. A <b>credentials provider</b> is a plug-in -that manages one or more types of credentials. The responsibilities -of a credential provider are: -</p> -<ul> - <li>to maintain the list of credentials and their properties for the supported type</li> - <li>to monitor credential expiration</li> - <li>to provide the logic necessary to obtain additional credentials once the - <a href="concept_ident_pro.htm">identity provider</a> has obtained the - initial credential</li> - <li>to provide the user interface panels necessary to permit the user to - configure the credential provider</li> -</ul> - - -<p>MIT Kerberos for Windows ships with two Network Identity Manager credential -providers supporting Kerberos v5 and Kerberos v4.&nbsp; Credential providers for -the Andrew File System and the Kerberized Certificate Authority are available -separately.</p> -<p> -<img border="0" src="images/screen_config_cred_provider.png" width="542" height="393"></p> - - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/concept_credential.htm b/src/windows/identity/help/html/concept_credential.htm deleted file mode 100644 index 0fadbf599..000000000 --- a/src/windows/identity/help/html/concept_credential.htm +++ /dev/null @@ -1,31 +0,0 @@ -<html> -<head> - <title>Network Identity Manager Concepts: Credential</title> - <meta name="description" content="NetIDMgr Concepts: Credential"> - <meta name="keywords" content="credential, concepts"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> -<body> - -<h1>Network Identity Manager Concepts: Credential</h1> - -<p> -In Network Identity Manager, a <b>credential</b> is any digital object that can -be used by a network authentication protocol to assert a specific -<a href="concept_identity.htm">identity</a>.</p> -<p> -As of this writing, Network Identity Manager supports four different types of -credentials:</p> -<ul> - <li>Kerberos v5 tickets</li> - <li>Kerberos v4 tickets</li> - <li>AFS tokens</li> - <li>X.509 certificates issued by a Kerberized Certificate Authority</li> -</ul> -<p>Of these, only Kerberos v5 initial ticket granting tickets can be used as an -identity provider credential.</p> -<p>&nbsp;</p> - - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/concept_ident_pro.htm b/src/windows/identity/help/html/concept_ident_pro.htm deleted file mode 100644 index 4fca8674e..000000000 --- a/src/windows/identity/help/html/concept_ident_pro.htm +++ /dev/null @@ -1,32 +0,0 @@ -<html> -<head> - <title>Network Identity Manager Concepts: Identity Provider</title> - <meta name="description" content="NetIDMgr Concepts: Identity Provider"> - <meta name="keywords" content="identity provider, concepts"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> -<body> - -<h1>Network Identity Manager Concepts: Identity Provider</h1> - -<p> -Network Identity Manager relies on plug-ins to provide the majority -of its functionality. One of the requirements is that there be at -least one plug-in that is registered as an <strong>identity provider</strong>. The identity -provider:</p> - -<ul> - <li>defines the identity</li> - <li>provides the engine that drives the <i>Obtain New Credentials</i> dialog</li> - <li>performs the initial authentication which results in a network credential that - can be used in conjunction with subsequent credential providers</li> -</ul> - -<p>Naturally, the identity provider plug-in that is distributed with MIT Kerberos for Windows -is Kerberos v5 based and obtains Kerberos v5 ticket granting tickets as the network credential -that represents the identity.</p> -<img src="images/screen_config_ident_provider.png"> -<p></p> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/concept_identity.htm b/src/windows/identity/help/html/concept_identity.htm deleted file mode 100644 index ee84920bf..000000000 --- a/src/windows/identity/help/html/concept_identity.htm +++ /dev/null @@ -1,35 +0,0 @@ -<html> - -<head> -<title>Network Identity Manager Concepts: Identity</title> -<meta name="description" content="NetIDMgr Concepts: Identity"> -<meta name="keywords" content="identity,concepts"> -<link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> - -<body> - -<h1>Network Identity Manager Concepts: Identity</h1> -<p>While there are many approaches to defining what an identity is, as far as the -Network Identity Manager (NetIDMgr) is concerned, an identity is the unique user -identifier that is accepted by a network service. Each credential that is managed -by NetIDMgr is assumed to map to a single identity. The collection of credentials -that map to a single identity is considered to belong to that identity. </p> -<p></p> -<a name="default_identity"></a> -<h3>Default Identity</h3> -<p>The default identity is the identity that will be used by applications when a -specific identity is not requested. The Kerberos v5 plug-in will mark the -credential cache that contains the default identity as the default credentials cache -for the current logon session.</p> -<p>Most applications that implement GSS-API or Kerberos v5 authentication assume -that there is only one Kerberos v5 credential cache and one identity in use by -the user at a time.&nbsp; These applications use the default identity.&nbsp; In -general, if the application does not have a configuration option permitting the -specification of a Kerberos v5 principal, the default identity will be used.</p> -<p>&nbsp;</p> - - -</body> - -</html> diff --git a/src/windows/identity/help/html/concepts.htm b/src/windows/identity/help/html/concepts.htm deleted file mode 100644 index 194aeddfa..000000000 --- a/src/windows/identity/help/html/concepts.htm +++ /dev/null @@ -1,48 +0,0 @@ -<html> -<head> - <title>Network Identity Manager Concepts</title> - <meta name="description" content="NetIDMgr Concepts"> - <meta name="keywords" content="concepts"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> -<body> - -<h1>Network Identity Manager Concepts</h1> - -<p>The Network Identity Manager (NetIDMgr) organizes and manages credentials -based on how they identify the user to network services. To this end, it is assumed that each -<a href="concept_credential.htm">credential </a>will uniquely identify the user to a service as a single -<a href="concept_identity.htm">identity</a>. When using Kerberos v5 the -identity is the Kerberos principal name. -</p> - -<p>At it's core, NetIDMgr does not possess any knowledge about specific -credentials that might be available to the user or how to manage -them. It relies on several types of plug-ins to provide the -information it needs, and to carry out credentials management tasks. -One primary task is to identify and manage identities. These services -are provided by a plug-in called the <a -href="concept_ident_pro.htm">identity provider</a>. Information about -individual credentials are provided by <a -href="concept_cred_pro.htm">credential providers</a>. Other plug-ins -may extend the functionality of these plug-ins or provide additional -functionality for NetIDMgr. -</p> - -<p> -</p> - -<p>The following topics provider further details: </p> - -<ul> - <li><a href="concept_identity.htm">Identity</a></li> - - <li><a href="concept_ident_pro.htm">Identity Provider</a></li> - - <li><a href="concept_cred_pro.htm">Credentials Provider</a></li> - - <li><a href="concept_credential.htm">Credential</a></li> -</ul> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/copyright.htm b/src/windows/identity/help/html/copyright.htm deleted file mode 100644 index d31417df4..000000000 --- a/src/windows/identity/help/html/copyright.htm +++ /dev/null @@ -1,48 +0,0 @@ -<html> -<head> - <title>Network Identity Manager - License</title> - <meta name="description" content="License agreement"> - <meta name="keywords" content="license"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> -<body> - -<h1>Network Identity Manager - License</h1> - -<p>This software is being provided to you, the LICENSEE, by the -Massachusetts Institute of Technology (M.I.T) under the following -license. By obtaining, using and/or copying this software, you agree -that you have read, understood, and will comply with these terms and -conditions:</p> - -<p>Permission to use, copy, modify and distribute this software and its -documentation for any purpose and without fee or royalty is hereby -granted, provided that you agree to comply with the following -copyright notice and statements, including the disclaimer, and that -the same appear on ALL copies of the software and documentation, -including modifications that you make for internal use or for -distribution:</p> - -<p>Copyright 1992-2007 by the Massachusetts Institute of Technology. All -rights reserved.</p> - -<p>THIS SOFTWARE IS PROVIDED "AS IS", AND M.I.T. MAKES NO REPRESENTATIONS -OR WARRANTIES, EXPRESS OR IMPLIED. By way of example, but not -limitation, M.I.T. MAKES NO REPRESENTATIONS OR WARRANTIES OF -MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE -OF THE LICENSED SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD -PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.</p> - -<p>The name of the Massachusetts Institute of Technology or M.I.T. may -NOT be used in advertising or publicity pertaining to distribution of -the software. Title to copyright in this software and any associated -documentation shall at all times remain with M.I.T., and USER agrees -to preserve same.</p> - -<p>Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, -OLC, X Window System, and Zephyr are trademarks of the Massachusetts -Institute of Technology (MIT). No commercial use of these trademarks -may be made without prior written permission of MIT.</p> - -</body> -</html> diff --git a/src/windows/identity/help/html/howdoi.htm b/src/windows/identity/help/html/howdoi.htm deleted file mode 100644 index 4c49e0d89..000000000 --- a/src/windows/identity/help/html/howdoi.htm +++ /dev/null @@ -1,45 +0,0 @@ -<html> -<head> - <title>Network Identity Manager - How do I ...</title> - <meta name="description" content="How do I ..."> - <meta name="keywords" content="howto, how do I"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> -<body> - -<h1>Network Identity Manager - How do I ...</h1> - -<h3>Startup</h3> -<ul> - - <li><a href="use_start.htm">Start or Open the Network Identity Manager - window</a></li> - -</ul> - -<h3>Credentials related actions</h3> -<ul> - - <li><a href="act_new_creds.htm">Get new credentials</a></li> - - <li><a href="act_renew_creds.htm">Renew credentials</a></li> - - <li><a href="act_import_creds.htm">Import credentials from the MSLSA - cache</a></li> - - <li><a href="act_destroy_creds.htm">Destroy credentials</a></li> - - <li><a href="act_chpw.htm">Change password</a></li> - <li><a href="act_set_default.htm">Setting the default identity</a></li> - -</ul> - -<h3>Credentials view</h3> -<ul> - - <li><a href="use_layout.htm">Managing the advanced credentials view layout</a></li> - -</ul> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/images/appicon_empty.png b/src/windows/identity/help/html/images/appicon_empty.png deleted file mode 100644 index 1f509071d30fed359187261c64ce4a7dd1c800b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 878 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1SD^+kpz+qoCO|{#S9GMKnZan#`O7@K&seF zJbhi+ue0#5^6IDX%54A(xki*YmX>7X7cs0{cg6!K#8Uzka!D;tF3Kz@$;{7V5av`= z28wfm#GUgCDvL7HGfEiN@Sm{)it>R)i&7IoN)<{nb5j{izw>hfWjH}H!TD(=<%vb9 z46z0OLCU$ohG!Nh=OhA^7BOr;u%#a;%mES(Pb|vI%u8oDApNWzD8>%aUs{x$%JB7n z^J|zg=ltB<)VvagZ)c|M2a2(Ql!auL<fJmJcy~#ifq{|1)5S5QV$R&j)<G(UJZ<&% zSCYRoFWa@Ofr*Pr@8I4YjE0Qr57h(&g(gmLxM*<s?Y6ty%muikXTQ}d_S`QwKPAvh zb18>n(YYWmhCfI0yA6c|+dVady}UF7y%N8lJ$v@#$&)W%X5Rnq#F5M+$f<bk_15ok z*|xryKYlb6Y!xucUblYz`E%zwUc7j*V#+0x-mTL*dJGj=vfsXb{n~)XYh`LALk2^6 zdAYc_c<$|W*R$7_UN3byviIy~9~Xar|9jO-L%cdqXE3z4x6j#~d%L;0St2?1y33Rx zqhmI9c6Bv1S4#Kp-><*)$wHNew`H?~KHWPmF+DZW=CTQ=;-2pezxJsst=%f{h`lCZ zE-WnEx9Oa|eLLDKbJnscLds7&u4aXXPMxyp{cro(Qy82$6k8G{Bx=1n?;0MP5)>MG zY)0m+HCw$_%Fis;YcV*#xtOmZNUP<*+D{b>yVe;Wdorg!<*>n-&wF&dISy9qw_J!~ zUh!IrVezWhR>ywqP2qIl*m(P`oxS}}zM^xAEpt9w^f3f^1$nLgdhedx_fM+T_4VcF zJT=#Dt%+xt;T0Mhdwpt9kk|L`-|vg7Gxj{*aWm)K`SZ88-Oby6Zl}cKyzShIJ&%8U z`t)ed?!9~W?%DI?QT*$BIcC0>4K7J6-nuPw)~Zzu5!v(S&tJc8ot&H;!<sPddn#U< zQQ1mN2UKoM3A(>Sa+!e7s&yv7l%fbq7fzaAS=%0NXkdSw{loiAW%0Rq`M0xQ+RyyM b&)X2sQQ>5Mz}W(n)EGQn{an^LB{Ts5cE@Yf diff --git a/src/windows/identity/help/html/images/appicon_expired.png b/src/windows/identity/help/html/images/appicon_expired.png deleted file mode 100644 index 3aa90d6819fc50dc4d12473dd11b79c2f4ebca55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1071 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1SD^+kpz+qoCO|{#S9GMKnZan#`O7@K&seF zJbhi+ue0#5^6IDX%54A(xki*YmX>7X7cs0{cg6!K#8Uzka!D;tF3Kz@$;{7V5av`= z28wfm#GUgCDvL7HGfEiN@Sm{)it>R)i&7IoN)<{nb5j{izw>hfWjH}H!TD(=<%vb9 z46z0OLCU$ohG!Nh=OhA^7BOr;u%#a;%mES(Pb|vI%u8oDApNWzD8>%aUs{x$%JB7n z^J|zg=ltB<)VvagZ)c|M2a2(Ql!auL<fJmJcy~#ifq{|1)5S5QV$R&lz8Nv05^N8? z-}zkrex`N#vdJ@3qSly1N-lDm5H%|*R-?<ceBG`Kz6YDC9hY#2H;HV2<m4FQGo4F! z=@!wh=7e99!#=jRxm-$9yOxq>w0CFy^E<_Nd>%*b|I2*;_ovz;mhJ!TcpN$f&+3?c zm482P;?`q%2No}1zWC<M9a2{Nl_Fidq&4HB_SWS;o|){P^jv}=D(cCu;%9$7@7sU* z6Zj^7(Lw`3&-p>3H>aG~z%@Dj?$@W$*EtyuFgLWnoWA`2!fgq{i7PdvLJO98^By$m zS);wAuqrt-z4WPLe&~DMoj-q?tH;|pwmL2CI?kVzCY5>S^+M-&-0~|UUzaTNihlmp z6BuHUu;5;yXY|N6DJv!8gjbTe`^Qt~_m{8N*VmEBW%s(0bwR3cQpD<7Qw={`&+juN zRa(1#H|dtu{iw>^`Tow!?f!dzUOTz$efJ%PMR#*jt)?o8C|!CMxNXe^&soPK_iZY( zKdGB|aI5_EOJ@RjJz5u?So1X4_fnp<l)wi=?a6a%c1+Fx&VSzaq-~VMfycWHrW790 zT=9In)XXnQlTUU1+U|LM|ME+Ti#^g7y*hYOY>i|N@4r{M2N~xy?~DnIewe7eNk!ct zS?n37G~b?!8S@47^<=)gUbrt;`|;||+vV?^I9N6bY%vNvzxLT2!5xN|>+?D+Hhx_9 zs3`GY!RA|cB-6y#m)QM!vSO0E7BHne0;P-1@!{3C`5$$jJnr?#Gj!v%AM?!fE*Vw+ zf4}ehk;a!hclJ)?o52%W8nQ%OFa9n6_WKoIr%sQn*mh57`o7=a-rVdj&OV;g`=dSW z`LaIy>#7#@Pk*1y+b;k9RMpYIy2sbfezo3z=6v0+d+hRh^P+idAAVc6WJdie^Q&Cn z%=7=1eZTc~zK$mUmQ~Fu?UhHStW>{|y?*`++dB#(o|zgJ43Fky3r}KFI3dHu!XSEq z$75pgu|zNS=Rf1(rffJ9<;(G44l_Gb10&A|(F3Xr8akR8MZF{#m;y4M8$F&={N(@M am-b<^Lz~uDpLq)OErX}4pUXO@geCx#%-L%I diff --git a/src/windows/identity/help/html/images/appicon_good.png b/src/windows/identity/help/html/images/appicon_good.png deleted file mode 100644 index d8789da9935e224dc2c2301e0e0e0e0e5b7f8524..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1065 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1SD^+kpz+qoCO|{#S9GMKnZan#`O7@K&seF zJbhi+ue0#5^6IDX%54A(xki*YmX>7X7cs0{cg6!K#8Uzka!D;tF3Kz@$;{7V5av`= z28wfm#GUgCDvL7HGfEiN@Sm{)it>R)i&7IoN)<{nb5j{izw>hfWjH}H!TD(=<%vb9 z46z0OLCU$ohG!Nh=OhA^7BOr;u%#a;%mES(Pb|vI%u8oDApNWzD8>%aUs{x$%JB7n z^J|zg=ltB<)VvagZ)c|M2a2(Ql!auL<fJmJcy~#ifq{|1)5S5QV$R&lr~5@hMc6*P zw_BCBciAsPTW9AqC5=uci5eA~DLjowX3Y55Z;<%#|ANAWYE9h2u>xT%JPMpT6M4Cx zPEE++;W*KwGofW>;<D;xyLbIE+@5#UR&U0!t@Hls-#_`YNJ8-8{(hDP7vC!9AF8ST zS<!G|`=_N|xzE3p^|wwmR@=(GAmm%AS;VjE!u$7XTbDl9xqhN=?%!o5k+(N~z4~_c zve$KQq|~?rKdnBabw2cN&D!<tpZn#b%)DMF{rK6be<fv&#p+cXCv{xVj#<g{)cfT1 zlS{U3pJC&B`6|2rJIB5ot@ricT9zz`S^LXqj>zm+iLtxXN@Um~B91+g|IE*IzaTR9 z$MWs4uy}Il-)WN>8Wp$V-hVC4UR#{~@cQ@kv^i0_T%v|)2dfS{M)WBym62Q|v2p6P zTiae%+%TSgF21hf@%lBE9(^TtmY)js)_$;H*Kb!<i}7c>_ThOCvqs6aNZ&1H-QL=# zPkZ|1EiSCzI=5+eiln=t+>}#yx@U-=7TTQE{L;o$V%w!_eRuO&K1vwcU6AxJ&|Aam z&{d%m>Tqs`^r2h4+tTK3{XF%|<;l_NtG=$<T6ycOu8wW8kfdnkyyK1QJ3?#BrPaLp zrd^4frr@bLb)!{9hMQ)6>C)O?S9acicgDJJeM*XtVC6mqX_iw@(wc3v>|Tl;4zqt4 z^ydEOd(%E@&V6EDms#_+?&l?7O1T3{7ys{`+<E-$(QgZk3|$502}g=J_3BBoPu*gB zBWT_Jf2Xpa?VEOlb@JhP`-+}EPh0-=;v4qOo7o>n%-Q?nad^D^*)!eu<~_46&#iv_ zv^+<9_pi%apIs`t<$Y=@SNiL6sqN3--K{NuKYM=duct@l&n;+3NNV0|yRmw+?0liE z_RpV7nXebG3|#s1<${-54}-*v{yltnc<whQmgYnjMh2G_t_RGD4;XzI6<eGH8V-if z<JM!~aBy&#q^QIs=*Yl#fRRs6WJU|Kg@B%l0J9wf+rtK)!1)~=fA^dJWmjSJvk329 Rdl%?W22WQ%mvv4FO#twk&GY~O diff --git a/src/windows/identity/help/html/images/appicon_warnexp.png b/src/windows/identity/help/html/images/appicon_warnexp.png deleted file mode 100644 index becdf9e81084248ebcc2177d5b19add46b6ffcd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1036 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1SD^+kpz+qoCO|{#S9GMKnZan#`O7@K&seF zJbhi+ue0#5^6IDX%54A(xki*YmX>7X7cs0{cg6!K#8Uzka!D;tF3Kz@$;{7V5av`= z28wfm#GUgCDvL7HGfEiN@Sm{)it>R)i&7IoN)<{nb5j{izw>hfWjH}H!TD(=<%vb9 z46z0OLCU$ohG!Nh=OhA^7BOr;u%#a;%mES(Pb|vI%u8oDApNWzD8>%aUs{x$%JB7n z^J|zg=ltB<)VvagZ)c|M2a2(Ql!auL<fJmJcy~#ifq{|1)5S5QV$R&jXR~8MCEDws z-zh$4`~2LUopX=*to4nF5Ov*^$t@c0>Jreo``y*vU82AEcW7*>Z;IU+(428F%E@tp z#;y(WOSr-=nrW#us+{|NXJ+;J>#rBhee?CMz0IGB3Q56-`{x4#R<XRXcmMmC>{U&V z7HUkJQ8i_@>+7WxU1P8B;_Uym-QIkD{X^4Lo(v5V2fmiQyPIhyerxXX1l}(~X9T(0 z7VI=o;Qx}Fd;G5)H@n%l<KOnm@0n{-VttL(+&e>W+U5zfdYmVf_xLv5<vRE7-`1sk z8{R$p^+<WA(fK1@pIe0sdjG9B6)oHD!oVRM{<d+~oFgR>r<!v)dEfR#ocaH9x%9ex zcVGg6gvIOo{xxNf&SYK+(mwjY<<zT}CdRXlPjUBrz`rpufBoJGmDB19D!;zEwSKQ; z_2;|W?^iwNUCVH#Vd(=0O^wG&wGD*~HXiSuW`x|ke@AciDfexKzmFFggcWdV9q^tw zDZfcJN$v9i=boLC?zVHw&hM*eQ}y8poMtT7>3aMG^MzfaGe4@xR-XQI$IVvkTi3TQ zKPLa&`1Ej3qKVX-H#zEa_7pd43p=sp;FJ#qF=ui)Y!}t_G%LG*4iArGTfTPf+^ha} z`+uLVU3jZNYoe}-)x<7CvBNUmb@C?bRvVrF9K76L&UTwl%Ey~i*Xzap`ta`j?!%nQ z_ZZGUNIexS_?$84Nzm4c&{w;Q<bf$=KPX)+xtWwZ_iLWbJku`^_1D)~OHEzBevWN< z-qF^A+T6E?ev40T&YLE8UtTQo`Od_fJ3bv<e)ruzp<}l%7#v+Y+y3s3uV1yb_2<^V z|MSXSe)EIg6VL9hQh&2!^OqZ+j=jBqegDsOt0FGXD9l&rmGl3#wy);b&Bu%Hu`qJ} zIAhJAu!!kILklD40maQ?2`2fROLpcpF*99gXb|XP5)|w>;lNo?aKf#NCBcSKWCA18 p112SQ5e31{CUvEx|L=YOv;N;7axZDi8Bn5U@O1TaS?83{1OWW=%Od~) diff --git a/src/windows/identity/help/html/images/appicon_warning.png b/src/windows/identity/help/html/images/appicon_warning.png deleted file mode 100644 index e72901aebbfa1266fe11ba89c41ae2a05d2ec276..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1064 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1SD^+kpz+qoCO|{#S9GMKnZan#`O7@K&seF zJbhi+ue0#5^6IDX%54A(xki*YmX>7X7cs0{cg6!K#8Uzka!D;tF3Kz@$;{7V5av`= z28wfm#GUgCDvL7HGfEiN@Sm{)it>R)i&7IoN)<{nb5j{izw>hfWjH}H!TD(=<%vb9 z46z0OLCU$ohG!Nh=OhA^7BOr;u%#a;%mES(Pb|vI%u8oDApNWzD8>%aUs{x$%JB7n z^J|zg=ltB<)VvagZ)c|M2a2(Ql!auL<fJmJcy~#ifq{|1)5S5QV$Re_XR~8cMUKt? zeDC+Y>gRsX{EE_zIz5*s3T5k*Dy9WG9(BFb;Uu__>n=wm$GRnXE+6<cN)%gny>=2T zRNl2Qp>XD|4~r9A7I{Q@Uh$cAGDYok;r@HyWyI$;-M0HJfBt=eoRFYRl}Ll2g**EW z=9-yzYM&qW{-SbG>tedR&EIdUMOdG-n6UifIpE+XeCGJP_HTRN&aV7@JZQ>%`~9CH zSbG`HKE1W|^>q84AG^}dxQVP3%;73z*ufC<r>Nw6+3K6j|9NA79Bf?wQ0vFlMtS)? zWefLh{&wtn{2!CIej5)Z%sAN0)Npt9)>n!@^p$g0Jp3fgJuQG?`K;0loExrZe9<d4 z<!OM0#s1%)p1u9f#T?6}K8fSo!reN@zNRT$tw`Ld{eWS!acM{VgpH}^4j1kX)ivR{ z*_l%RyZx1y_u1p$me@;_E`Igc{{Bv;*9*Q_f9iX^vEv>8lCb<P1||j-r5&YQQ3m2k zY9}WA`x#yI`f{ArnfUt=F;=fxuSRT&oE6o+T`Vl_L_}n^D8rlYZr^XYM_XIS{5t0O zUcTn{*^J`N9&EoGmp{G#IAwePW2S4W%&s;Q&+O)GSspmezAdCY{PEG%^6Ft-n@?XZ z%YQJ#>qYyX{ib%Oy!4EkIn6FDH<b*Xv1js+v>GG3Yl7ALZvR}qdB+wm=~)w-i&R%! zDPj({-}6@H;&t=5tPgpM%VehmQ_5{nx>({b(9x17H)T$N*TKYZ5~6(PUi=h)d|ABL z>7a&-NQ3jCU&qQHpW4~D+hM82d6)FO!WfCiqUTB$O)q&ob4RIRdE&qQCx1T<e3kt6 z?D}0#pZ8sgbh;Xt_+si!tC_*;*Q_~jyVWpFLNP7n=8uQW5+@CE&rCVhGxz;{_x#(_ z6WMlbomT(sXU4y^jLbZ)r=++UzA$WVNZR&yWspq7o1EG!`TwPk_pbPub7#*4At45q zZIjejzW;T>MX9Ojp^=7Y4|Besu@+a#L_?hk46G9$HaVzpF|A<F?VtCbp=)mZWP8>f RCxPB%@O1TaS?83{1OSw-(OLii diff --git a/src/windows/identity/help/html/images/flag-critical.bmp b/src/windows/identity/help/html/images/flag-critical.bmp deleted file mode 100644 index d643fb31799d8d6ceac0eae8315e7bef993a5745..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcmbVKA#B_*6iqYfK*2N(RK-I>g@py>D;yXoC@4HoP!LcM5O~1gK!8Dj!2yGSfPjE# zI$&TB;7I`i1_l8J0RaZ5y~~fPk%8^&`{()nXUG5B_up<mM2p=be#Q8-j*IAe;UnaK zexyM}6#e=yd-|I_KE7w(H-6b}i=vq4c?xGgolXzUyvf7OApny#O#>M%Ns<I&<J}bx z&#i|5akCGvY6KR&g99+eNS|fdG)?za*svL{olVpTAo~HB$YvOD2GTRO8^>{Q_Io|W zJO5CJ*4b3MaXSA63}V$AAq43;=V@yiqph`vuJ<S+oXD~ErS8qpBPFFIeJ*&M+Bmb= zit8ajx){Er_fo5ErQwA<ta>Tpw1;0ZpX*_s*A@6Q19(eWCfD<{Z7b^PxR_81wWD1y zfc)5{vby6PmgMDn9;H-W*SwTpcHQPpr?o!zrn5t-b)0k{kwX8mADzb-!$ooV+Q2`* zDOr{`OkZVPS(TU)zZV?ak{-3ApIjT%i)H`=z|mn$0e;jTq;r<^-h0%Dmbm$RxoUKH i3~&INBBEE2k$!0ingLt*dBOwOcka)Npfu_KDgFjV+C<v` diff --git a/src/windows/identity/help/html/images/flag-warning.bmp b/src/windows/identity/help/html/images/flag-warning.bmp deleted file mode 100644 index edb3fc3c88595f8685a3188ff115b9131611ca2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcmbV~A#B?~6ox&G1w_+OHBeX$4HgU*RvH~B7zhXq2rLK~2nZ-J2rvi;FfcGMFeo@+ zO$7!91D<4X;DG}VJaFK^fz$r<RawEv_VnNLfA2n@{9bbN<@#;*9M{MnvEIF`H`&E= zJ;V8rxh^ea*{}bK<#O>?Ef(L-_4CE+^{On(5Q2{<rIfw~e-+Z_2>TMo7-0I!W^)gC z^!zELwPz5>;J=H5uY@3&{XSQIyW4v2Z)3XjC-p)gVQL|GEgGTY@u+;BKQOapcNgLZ zNp~T1LOUT2a^({$$c?jARVsft6dQJrb|j*bNrKmpjxplhmB{EUj+&-ceqWb!PIEb3 zbzlN^=GjYW$E7e-JT}Tdm}cf8bSbF-AO7%$E$-3NO>dO%x~>?WG!Aw|?-&;X&z$UP z8ZoySr|s~h{4n$wZ{C^rKFzG$6B(L*I;y5|W<82HLf}H>r*Ygj)qJogS*h9<ji95t zZL!t*uBrQ>S024%o`ti(TFjLh2AbGm3$q9TMdwI)5z!u96ilY~gdZ1z(JeBD226Rt TuS258AD|F|d0mHB{-5%1wIE^R diff --git a/src/windows/identity/help/html/images/flag_expired.bmp b/src/windows/identity/help/html/images/flag_expired.bmp deleted file mode 100644 index a3a40feecff222d6782d44a2e13ab4b51114b589..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 zcmX|;A&jFy6o%Q^WW|ZO&5F%t1>!_=L9AF&u>w)CVv{o`Dk>0&6%`0XMFpaw0<oe3 zQGq}p5Qqu{0zoba1i6gpB^4DF2m}IAQ9<q>-tGN)^ZMq!ZyqzRlOH$N%Ahg)cdT2i zuUJ>g1H7XAW{UEQ(;5<Re+JD4nTC{U8t<kF`yUvy8S+HJ&*$%!W$iw-TJ3CG8Uj)r z$IIms7#&&Ic3szf-)C8`jyiTPn3_qu7uX^RozG`r#IGC&Ti?I1yFGi}s;}{UUBJ}W z9eeVTL<xZBZHRYWH_uzf_o%Kt(Y76#w{6%{fDR}L(S|`lJPuB$HDKG#aWT@yJ25SU zz5L8@3P2P^#0S35A4~96btJhThXIZ@UR@L?dC8GTl7x6XpYi-r5BG!Ct{`~pcer-b zv}_bHUSwHDe3~YVr%VgVvUFA@0;WZPF_z2a(siAD1<&$4C%!0(Z=(bs)!*bP*v4zn znRqWa%95U;8}UL2%Ziygj6(Al%k+3W;To7yUNrnAVru9(X;oFk9}b5w44=oC#`eqD zpU$HXFAXALE=sQZ=rft@@J6&H9s|Uu+qO51UjDgSEN2cwaJRQC6s4M`As#QH+ag(2 dz2o${E)4;;BmlsOhyR!T{GqV`fDluf;J+)g&ISMg diff --git a/src/windows/identity/help/html/images/flag_renewable.bmp b/src/windows/identity/help/html/images/flag_renewable.bmp deleted file mode 100644 index 3a9dc386f2892cb8eb1d00d4f93c39a2ae953cc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1334 zcmeH^u}d3q6vw|7C2cI_2AdQmt+f?e^TR;UtJrcqLu(-+L{B(DVv#5ZJuodQ88T$J zA%nvWH{6gRLxv1D+;BsN8*aGah731k$dDm}!wnfSWXRx<_E+s7*gwGszu$Y02k*Vl z_ocGz3~r2_2Hw$#`S+&q__i>0>+b%m$|}T`2-CJuDwSaMEhN<>N{tfw{XTSE$7W*_ zrf;Hbm(d&b(DGWS89K`CG9;-0K@*@fst^nTqtOVC<DlJd<NEp<s(OiF5J2-ZG@DIW zt_9BI;Q1aDPeHL*M4?_ls>-406=B;p>h(GlTY>7UP)(Kg9K#>_7!HT%bUOInDnL;x zV09LXp}_N8$g%{nCc-jJY@6FiUMArNE;yA#tyZJESD>3Z-B&`vC}23Iz4{$YCKKqI zhF}=Lc5G-}4VtB)*Xu!cWUvYg%dt?V+O)1(C^yRpf&ewD3ukb!+cwprhN@5bbpdKq zg=mOyT^Ih9Pc@iO4O9#U0~m&Zl$C<-w{dn>gjAQ1zD&cR%*{pvRi_HAL+6_s#^W)% zgDzzrq1)|3wq;Zm1r@VGc|C}A%4%6iTWN3_hYIDBDcfi~x;gIzzwe&;A%0NczY36h z_K9K6lSwAYoHGn9E*7MV3;s=his$*~i-e@5r@sVV$e-|;48KLli@9&H*#1c@vmc8^ zmI>L4XU}r8`(NVgx%CeVge=d$3{7)9ADx}w4y_Tgn@BtfM`<44IX<R!n(u`rnnx0e z#79EJN2jOZIZ1jS{`z`jmypBf3rFmH<nzwV(ZbtPLVoN5OKW=@KbL@KhlGT(;aub( jmkUL5uMV<=#G`zQU&-fJ_!T;Xkmz6IGSl2maF6y6xZV)6 diff --git a/src/windows/identity/help/html/images/id-sm.bmp b/src/windows/identity/help/html/images/id-sm.bmp deleted file mode 100644 index 6edfb07d9514fc52ef00b7ce8bf79abbf1303028..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcmb7?p>Kmg6vkQh4@@qICr*&1qN3si0#Sh=*#x2zQHhwCKulIlR8&?@AdwY_$qEFb zk|q-s69`1bi4!L-`wl9aK)dzJ-OD@p@x8}`=`+8#T5-fD?1$67vmV>)*6DtC=;Ho% zoj-m(@4UfiNGe$$(qtZx9Wp|6iN>~#H6fcb2CUCln{+l}fPEtHoD4iM3H5lbgjCJp z6D1gVWEOb%yNqJr?ePk{7NRLOvBx<u@V5OP2HSKczRQdJ?rZM3=mGpk6dtQmi=$S0 zm_OF}YT-MM%h)=OV5_Axb@edc?6&dL<HS&+E_1Y}1o~8iJmy)XE0}|SdkN%Er91e7 zKlo)7wqvAZ7T^dT-^IkCezcI;;x!zPrVeGx#JuKTylUzy&x&l_nq$1if4F~?ysGng LBL9zW|Cjf_TVTQ7 diff --git a/src/windows/identity/help/html/images/logo.jpg b/src/windows/identity/help/html/images/logo.jpg deleted file mode 100644 index 1121f6416bf6f1d4bd107d84d10c94fe2dfc6ca0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2014 zcmbW!X;hPE76<S*WF;yXNCE*R$Qoo{1Q$wJL_peMt3*IiHf3o;5s{q;kpVJcC@A29 zK-f}5hzJ-qMV5#}t6<s1QZ_|Enjpl0kaxl?opbu3XQuZ#|4+|7&$++*fTQ3q!0zM6 zT#f+{2n2AJ9sqm|H~<J3907+R5O4$%i9n%uqtUXmXsn$4&fQ8_Wo0ES9<Q=jo2a6y zxd)F|H&EBq(be0pM<5!S7?Mo1NqVI1M<7Tf5{*JDqS1;Z6}$@R|1R(`fI$JlKrj@d z0mxt=Pz(g@0f+zqflH^|9{Aq{k%3C*MWSTUJERRwy8#&p6e<IQ!r?HOv^!aP55O>R zg?*-W2t|(oq(&6hEH#&f(zLJd#CZ+~w9Er9q{*W3O3DNkZ5>^b-hPV%mR1K39d<bC zc+AP!<+#_^C%h>qeSCw0L(ZKK4GWLH7;`B$E<S;NCH=1%nOTgytJm@i3a{U|Syo<A zS;hXL`p*4^#-<0{=9bp3?jGKg-lu*1S3eC74UdeDjZaO_%+9@iH~)S?xbkszP4r2; zzOn6s0MLK2ev|#qg^{{sU@#~Qx$T0;#7YCjz~K8#5ejx5$bcwC4YO1f);^b2-zlqU z?kT_pUKl{*wJfHzh1;}$%KkT4+MkmB2K%pT9M}nkNIwsX0m#5c6@yeN^G7Lt*p|kB z!*0zF%t~k=e*7^wuB1nF6MOVv*z!|;*X@)F5pMSING7N0N3UmXW>98Dc*Xu4TM~4z zT*x%f8y3|GgVWC?DT)JYd#Aquft7iutws=7q+q5NV<j&#NZp*sXg`tQo<woo9cg>B zkG3A$yD1L>wO(~)ev*?j5;zD9-@P8FevzCX{4&<!Y95n+d9&0V8OZ&HHg_Ea9(8OC z?OLwE6(zm{6bBqGq!dvMiCIpT!c?spF$i3tW!=en>!z1?&gfmW#S&_{@o(a$ugu0b zCNQ`zS*%*~0cr~fWK6DT&3CLVl<-^8wpb5GU_0?Yx9w9?ZzD)dH`AlP_vaxqmyM`Z zCt0bk=Jk&OBYnRf&!8S|_dxFoZic43TJz?7x9{`Tq!(rV>-V3q)dJ;8B|e+_&PHKc zebqYUta0Awqj5Hqr!riPFADIZBYZmFtC(FhGl}~!yi(aCYha*e<<5UBu$zxq5j_%b z-D)DN$<xQNg`P@r1<tXi66~cN>j2y;OrPi5Q^Tuin^<kJaV{#pOxYtg?dTsKuKgjy zn;}PGMV_e)?j+tOF^eCDX-2GBADPB?Sl*yjj*U4FwEu<cnSbzw9F|Cxf9JobK+QfW zheEUyXR1o}vNIb$XFjoBOd{UliZN&GLg$Pc7k#GpmFH>4Xf|tFxCR|u4o$KFfm~fj z5a4_*Inhrc3qU|}^tO`Zq1QUa&ga^Hb{99vTu$%EYO>P3@=eL-S<0a@jd0%-cBJX_ z+;LM7h{J4!O=5qw?!YaW82=oPNV(-05*IjIDS9qgh}$?(d%$+h+a^F*m{Hem%$ay! zNH-+#$>$vg(vxwYO~kKcH;q96)!vX<_iaVI2D2!h(W|T0tTlrC?0PHgKr&%QUzAJb zix;zd30o0Q4TD?jTNn#3eAJ80TePw>Lu^VJZ|W!yvI(5{1R`tU#-0JSv)9P%0DoCQ z$IP2--rd7A=IHCwrD$XOw}-wMm2aiFRVMyDx90u$+~w9+k?L*SfKSukb(QDxPKPtR z{LJa%4{ToSl<O`Rli;*pbP_+Dy+Ah6FBS(0$r8+K_^Y++mBmA+;?1i2vRq~{6LL*0 z!nCbGL2cDdw_lB@^i&C-UNXp7(KDnI6BO<@b8R}smlkzX8?EdKDg!9ZW{p;rS&8D# zBr`$t>Q5{X=!eJTrv^A;-67H-pA&I9WI=t*WjFK!a!bJ87}^nKdAr;{;$x1{6F&ZG zH0_xK6Mp7Y5&A>>`6-_YF}*rm=|Qad`11v!foXv^1e?^8NasaO5|*qzIC0cns@(~@ zmhL%EvA<0-x$_V!<3yYDwI3M?3`q=48mnHQv`T6XMdf-0@qSvxj3dAih?lY#)%0{o zVHZcWhfT{chHS9KLj~fX8EVwjvu+Sb0)gxp{&((^9@_mM*Ovy1I0)_|qWGn+0DsSD zm8)Po;TECuWwdegUU?R-pVq|@a%gh?DG?HjRq^Q=6FZx|?c`4{#lvWqBdn%m!V-B; zNT!(cC6{^DA^a5c(>d~{^IaM|&Wa*Teu~E^8`!Nc&z`v^FLH|BNRAl1YokhLY<^{& zY3-)k8QST+15dUbBKGEZUCl{ZTO9T-5Lxy`hAB9pckVBJj4NW7Ifvnr4plm`<`1V7 dQh8+!=>hf$-<QiYhL$xbdpKf&KN$!(_782gd@%q3 diff --git a/src/windows/identity/help/html/images/logo_shade.jpg b/src/windows/identity/help/html/images/logo_shade.jpg deleted file mode 100644 index 44f13a15473b5376cff2e7d4532ed9a0387d7f0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1641 zcmbW!do<K(7zgm*%x`Xf36o(o+Awb8){PN14O$F!L|fxlSxlrtxlF^79b#%W8`EUd zmZ97;B!<$FToTf@H0}x&MPeq>B+QQ8wmoP6*t6UFp6@yDInQ(6^L)-D>y-@yDy~j0 zP5=xB1E}%~$OeFI01AObArUAP5`{*iFpvraDJVcVC1phwJWfLck5gACe5J2N(9~U{ zuC8sWt!rRtWNfrr%WQ)gX@fq=h_w6(42?!Z7)TX@R7nJN0_lGr*<ApO0q6i7gb@Ka z76xKrvL-+a0ANV@w95m3IxsjWpBIf$fL6#Ggem|W27+(|h(sa~^6q$f9YA1_t8_Nn zqf|Zo(Zpl8O|0}BjIKj@z1pr0v7UKAM4|$uj@MXC&^It785vuUEjL?P+id&B(aD+W z;`;6GJv2`*Z=XQ=fuP`nA%`NPq8Z1TF|kP}lT+BIPII{Dc;_>IzL0tG%GKPw{DQ)w z;u{r}!m8?<w`v+1o9;E=Z)t7od@Snf?&<C8A9?ot#pu|}SK||sw==Wv=H5#`%rCoO z0Qe{Cv+N%(tlR}hAV36q*#(0imj}cmkUASttL#0{{>M~_n^+i}LwZhmy@Ia!F0oob zL<gj<XECBLS*HCV`){zsFOq$R{q5=p6hWALc_0>`0Q31AQa1eGl4((1znV*fl5Q2p zW)-YV{BCsA7MoC(7lE%i^S;OTfY~KFX$=HSczQXHS)JbBRAszJ6e$Bt>m<`l!hjG7 zzrw(Ndf;iL?zUG4LHlrXc}WIHCYU!3r4*k+PP}n0_qMe$70f4r^c_3JOO>sq-D(e5 zljf}@d7_%;YzzL=Nn_nxgB4ttsSwufkfYVKj-6{6)SQ$<K99sQV1Z>?_c~1g+2K4K zf#pQ@JWO@)pI$T}8}1g-Gd!VF3VK;6q_4=AaOwGC+4$b@GlHPn$Kix0EpOfCJQnPt z)jT{IxXbBPbyy4LG*^_lgZ{>x^;UUF$dFv;lB2Y*DJFi+`4C$>GgA9tkZDt&7tqc+ zXZYJja5jIkt8-ONu<M{sNzliFanG=+2*}WFtk~)H;Cg|cccYZ;{(Z<Be-`J)_4DOJ zS?HP4H+W-Z!O;^o)m}o)7+hc+lfo*qt1vOEbjwvcfY544aW!QoEZJrFy=$Q*2TMOc zsSTf&q_o+a=UntewfE(0$!nE$p;Lj8OO>INQx<oOehIr4sWH(`F@=iq+GueM;sx{e z=*u?y*1L22!>+aQr<Iy(@gpfh&GCf3aBc5^fVSMlVYkEJGrx=;#*v#daW^!_vrN)X z=OsF3sMFKk_V9)|o!uYK)of*h#N@>R)NJXBh9%oXDtE}oz?uy|x|KFRPna@WZ#JDh z6KdcRNNHk|Ef0GXMQw;X9>yKFd~cH4YB2Z_D+9XK_#<akWk9g+kG`T1BKn1Ymvcd9 z8M9&7;QY#Ji3`bp7UYkaq#b1Cm;rNIO4mb`?(tq|@RFpoWV&?wS;dfqcT@Z}VKM5j zHOH_ymt;VLBU3pDIN^|eHolhEf0A#iqH~1*Y-^H4P#f&ZkgR;zBz~ahW^c!#Zc!4Z zKDQ!oUnHAW4k+|#jQ(mltdw-IaJn#atjE)Q0v~SMh-X;Ot!>D14-jUH^Q*3oJq~&_ zvP9MqH&@F5yYaf65`ixb<TLHJ9P?bD2=>3)oE2T9$ewN*ioRbb?Pf0!=Z6--phZeE zkLl<A$R=v2Kq}e?>y?hAO>}n@Hn&u3HSxv8vFlP}N?egOlSvedcB=*3!$nDr!8Fl; zyQqsx1gOe;mHot}cQAp8<ezYuq#uByh|ar?1wMk*<k}KCFBuMxM|xf1q$lG%?2um= HEm`01u%@-< diff --git a/src/windows/identity/help/html/images/notification_icon_menu.png b/src/windows/identity/help/html/images/notification_icon_menu.png deleted file mode 100644 index e5b9a13ad3e183a74846e7da1561c481445c8c7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8069 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 Ch&!nO diff --git a/src/windows/identity/help/html/images/screen_app_icon.png b/src/windows/identity/help/html/images/screen_app_icon.png deleted file mode 100644 index 86bd210d87abfc971da5c04134c61a555bdb45fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10789 zcmaKy1yCKq(x?ya1a}MW?(R;4Td)({HE3{xyE`GcySuwvaCdiy|K$FUTd(R>y{fZv zdV8mKznPux>FyB4FH%VGc<=xK07*t#Tp0iW8v&i0!GeSKs9EwmpaYzpw3Z_PfQ|NV z12fH<25A9coMaRvU=|<|p}>ezOq2ruBa+Z`68Yg|X6pbbDj$^wi4dJYB5`9!LkDv^ zCv#gH06N@fGLRhppIpq=&dtHx)XWJ``e~FGBt`y@)WI0|PnE>U+}aqxasLSpbOr9; z6%|_(Cl{cDF+kVu{hvC*e;PM;G_(SOR2={fowZRQG3-CF2GGIA+{P5piN6;FlEM7% z{XZNGjRCjs{>L9`Vz$=S#x_oXyV1lBkPP~tnyR^zl`)|3Y?=xL10W+VqUxG{n&F|T zGuL+C;c+I0GbkJ@BZ(Ghp!}U#2`pl2m_!fSO}QlYN&D2pK@T>9%6-W(Ac>QQ2hKK) z8p_(^kAfaJN1HZ&@g6l;&S0-acy}+Q-yc*QG%-I}%9xRryWN+n{r=1p0Wkv~^5g4^ zi_y}yJME4(#*W9+Iwt+2rFU+c1lc@g^JgqVKb$%~q2t%BsEU`iF^7|tM}*q6J#O`A zDaJUa<PsKK+n0N9H}Xcv?$Lc)rg^~&gF~lpA|yJ2gS}jIm{+y&kDt6vZ-*(aC-iat zn5XV?ix4%*=Z8eK@LDU4hLfYf2FS(25~<TBkW-E}3pyU&rpOialYmbza3y}Q@D*;f zik5Exg9P`rTNHhq2Y$`q<yh@U$q!ojRzpK#ce_8ycRFK&<ZB1Vs+dN|D$q>}wkf-z zx{m#eZkEZ5Szd<xW#ZK7n>dLMWwaVNcz=HdBsg%IgeXy163iEcZg7PZ^cb3`ZiIKj zcR2(DRrDj(Cv5{q`JI&Ah^D&r-zXCXjg^~p7~_T>@|FkSkzVGZgv{c5DO6Z*YnP-+ z<Y~mj#8^|pvyd?)lrZ`Vq%JC9s)@&Ft*<?;ALg!}*Z)dWFy><5QEwTVF##p3$-OSl za_?-J+9YzOdIttd<}C7*i&SYb;h{#VSyQa+>@Kp6_1h*76UV=#*%-nFxbk>^`(RPD zJ(|L1Z*LC=2WL^IO?myS#`5X-M@3zGyzP7AwZy%0AP^@IsFk>@83>%uD$K*c8=U(+ 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 diff --git a/src/windows/identity/help/html/images/screen_chng_pwd.png b/src/windows/identity/help/html/images/screen_chng_pwd.png deleted file mode 100644 index 0f3704efa34ce71789aaf8da851a0b345bc3937a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10508 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 diff --git a/src/windows/identity/help/html/images/screen_config_appearance.png b/src/windows/identity/help/html/images/screen_config_appearance.png deleted file mode 100644 index e2ed86113c336241b3bff1f01600a35457833daf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20195 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 DmSnic diff --git a/src/windows/identity/help/html/images/screen_config_cred_provider.png b/src/windows/identity/help/html/images/screen_config_cred_provider.png deleted file mode 100644 index aedb90f3a48e120f33394985104b7318966036d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26005 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 diff --git a/src/windows/identity/help/html/images/screen_config_general.png b/src/windows/identity/help/html/images/screen_config_general.png deleted file mode 100644 index ce7e528144c5acf0911e62f2e2236d42bc16ea0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30809 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 diff --git a/src/windows/identity/help/html/images/screen_config_global_krb4.png b/src/windows/identity/help/html/images/screen_config_global_krb4.png deleted file mode 100644 index 90a5664f41cfa7e42fe5c3b0a00151fb73f40f9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20681 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 aZ*KiX?9tO7z3gOA;P->2okbPJE8%}yeEePj diff --git a/src/windows/identity/help/html/images/screen_config_global_krb5.png b/src/windows/identity/help/html/images/screen_config_global_krb5.png deleted file mode 100644 index d0e28d9cf7c102f853dc6531e1ac01fcacda1943..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21934 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 diff --git a/src/windows/identity/help/html/images/screen_config_ident.png b/src/windows/identity/help/html/images/screen_config_ident.png deleted file mode 100644 index ac6278ad025d1c1a05da1ad7b82351ea6b838958..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26360 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 diff --git a/src/windows/identity/help/html/images/screen_config_ident_krb4.png b/src/windows/identity/help/html/images/screen_config_ident_krb4.png deleted file mode 100644 index 5c4c6f4bdd2f311e5ebdba40dcf6e41f1f3713ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18158 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 diff --git a/src/windows/identity/help/html/images/screen_config_ident_krb5.png b/src/windows/identity/help/html/images/screen_config_ident_krb5.png deleted file mode 100644 index 484b94d629a498147b6d97eb352857ca7747ff5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22456 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 diff --git a/src/windows/identity/help/html/images/screen_config_ident_provider.png b/src/windows/identity/help/html/images/screen_config_ident_provider.png deleted file mode 100644 index 8c709046d84cd4cece1e1cab40590017ead7603a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28809 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 Q1p<8#lM^iyHu(I%0In8<m;e9( diff --git a/src/windows/identity/help/html/images/screen_config_idents.png b/src/windows/identity/help/html/images/screen_config_idents.png deleted file mode 100644 index a67fd1747c7b77dc15bf520acfaf4e7becc3a913..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23875 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 diff --git a/src/windows/identity/help/html/images/screen_config_notifications.png b/src/windows/identity/help/html/images/screen_config_notifications.png deleted file mode 100644 index e8069ba4c15fa3463ff4cee4c79f6a81817b435c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17223 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 J<i+cc{|7h;LxKPR diff --git a/src/windows/identity/help/html/images/screen_config_plug_in_krb4.png b/src/windows/identity/help/html/images/screen_config_plug_in_krb4.png deleted file mode 100644 index f763a9aa542f621606097164aeeb6f1e9ff3a0a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19313 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 Eg8Duzi~s-t diff --git a/src/windows/identity/help/html/images/screen_config_plug_in_krb5.png b/src/windows/identity/help/html/images/screen_config_plug_in_krb5.png deleted file mode 100644 index e3e651a882627128cf07b4002300fe5267b56b62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21145 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 UijG!Uh6wnbusnIZ(84|XKZxyF8~^|S diff --git a/src/windows/identity/help/html/images/screen_config_plug_in_krb5_ccache.png b/src/windows/identity/help/html/images/screen_config_plug_in_krb5_ccache.png deleted file mode 100644 index 206386bef46ee92350dc31466002101fd03f95c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18848 zcmb4rbzGERw=WDOsia6FAUTwP(nEJj4&6hFbW3-~&|T6sGzdyaN|%(<ND4?OaUb}- z=iYPP_xyAJn$JA!XYI9Dd{^u>M5rpu;9`+sAt52*%E?NqBO!sPkdTlg9)W--@+?)} zzz3?8n35P0Qe7POwFw#$lAN}jq?m?>;X!ui*Mp{sqg<3r^sg3KUfQkU$z|@%4koWK zkCBkoOSx+Wo{ISsS^J>1J0(<pbI4)|3HXj?=gtvtnoAo-fh$U{Mj#b2`QGG<ZX8Kp zoM_pVbtu8r``eqN_g!UU)OVLMH;f-8keQIs@{owqG`~N7e<=|kI{rB~?8fKj_uQ(_ zY3kcw0U%W*EC@1_Y9118Q1>TP{JaiK?VW9Ezsn!kBLDme35|pWa!C{Z$N&er^H|`l z=KW1n{h!}+Mt5eSXN>=M(F-DD!zZsFQ70?zn2w*6irz%DiZh1`)y(a^{J(3kh-l33 z*C;*(MW%mdObrRN#v%S%MAH;X|Ic2I&(ZenzBuoS3Me!O-1_)k)}B#k_w5^ZtA+*> z2f^Rpp5~6E5bg$-11tmQf~12+h)<|UM&ney1Qd3}>(~N^Qnycs_pVMaR(-F;Ta|8J zS{tg!t62T&F#<Ln@+bLIScxf%b}tft(6+k&BQd`07ea8q9X5efa<i6`zwSXK3aJI} zvo0@=T-dF|nVyY*PGa3o#A^IUQUTm(j~*-JKi@S&JTZ_*TF*BnU`0HUuY75aVw%>> zkya*7aL-t`9I<hY)C%*2(QWRX`Fo3+5WUR~66xWi)hnUxUQXF-(TgONK^VTZKRhXx zKm+?;1+}us(h7gVIk_M&&Ud{tXvDEw$w!D!$NX>%h{Q?x9i+cdzk10R0^@pf{gxUA zmCd;D85g{^%z>!|HPhezUA?{j5yQd-EhsCJ`=x068zH*$r>0^Mt|dcOl2~0aNo7?x zeK+U#A!&|SEF*KOYG2PqPt9w6O>6o|DI~yvc%VS4MV#KayU0auLOkpH`x8l|Yz7RB z>T#kjl~y8fzfBm-GZzxo+TpC_*O-R~#(Hb56%9XoEnMH-s0;O)#<FeDuSn(NEEi4J ztM6E}ZbnEo?6#Ux=Wt~Bn3Z~jI7|xU^iH*nY8gv`4x>&!wH7?e0-*`0``3z5VZIX= z2_*dUdAO3(z=h1s#RZ}`^}KkPRGTDk)8a_*w{RsXHXmdnY|5(Y`sX43R2Dd)!6HyG z&th%qvsP`D{sg3{X#@3j(hbk6-=?3mht)46m)R#GGdn)yxp+9fP&j2~=2?9Dmsne! zp(p_Kg(aR_!UxYX!h;hZ`l16q?Vcb+2U5zHsvhZ1%&_(&M4P(EKQs8EGN4r-vF(UO z{^scAJmIK)?GnD=nDln{m7urD*rp;6bigUXU{+dkd~Kw;I`lVm@|(PFu86M_aY-`Y z_|xXkBtwS7k|@Pn38B*j{07`sleIZ*XLZmR21^qu=ku@^WW(9dKO~h)uY@{$)}dxz zR`l0s4ypL0WVUQ4jBC2t<3}E*ZLo)vs$ZEBw^z=Rub&a&VET-q<x7U+JL|^6+t0bG zc}8gJ2w3pWfDQ@xQ2zRu)*|%WfE2vIW4?t^QIPwjkl*(vA!^l&Zno*q_!FZxMQq9q z{2B%U_Ssw&M9uFVifCVok(kDlElk@KyOC=t!>GaO%$M5Y`m;|GCq>{{J5c*&8j}>% z-U4(eE(qTgk(M`#F=Gzmz1hU6rk|}Vw5xJylHj;JCew3!lbB%FVVhhlAhB3uKCC1W zxK8N1u`D?;diH^uD#4-cs3?aFY&m_US|~`RmE!mGW4%{dX|YY>GiX9;VFe|w_cgQ4 zg{}FKuCug)8<K5x5$3#Y-G#Z!==Maxy0O;^Lx$~-5q{Q-<9F4{4wlop?A#)OByXeb zM7RS4P<sQ{`M4IeC5Tj*xvbJDeCVzi>wCLy4&L?|MYwReo+8(Em$!L6i_+DAj}&~U zrLrxuhtK<#Wtu1;E$0Uw>Q`jS_1~2izqvU1nsRFDv>N_t^C;*ItdmR1>!Lz?zDeL9 z1ERxVKAvgzrN<CniM|~82ey3jdjyeOAspS7&tfL7`?+tKhwHWTOsq7~Z7?XCrMqU$ zN>r%Nv?Jyh>R0oP@q*UpW6>5Uriq<>DZVuft_dP{msiWe_*;tCPsmOZC@7KX3XLZh zE3%!<GR3b1dxq4wy*;B^^Ucd?GJ}Z2oyQY!hc;{OE*Z*8(~QhauMLE9*`@VAGpB$1 zQ%_%45&br#U-~S`Hcv@z#*$iDJ8lYFgTlD??VFd|YsS{2u7qbif4|3EowM89Rpt-L z+-Xe86lA)*a-~`=DOyRXW{i5_OSxC`r8`)))d31UaM@UYM6{y@K+>$486ukB*#(X| zrC!63(L5&dvOg`~xzPaydUpCXzwiBoii31U5B{y8=G@FPY&4|zSUuArU6i`Mcnz?3 zkA=Mda)*)>#LgRqF|>M*&ddflQh=lD*r36VRF=~`+e|w@J<~@z0=WwP*iF92hz>7* zn8FGE>={fFtBdRY+whHWz^8YzZvF-1TD|*30m;6R6klyB<2*DR`*@(2T*UTkzo)}9 zuT{Y_S1>dWh>a)*$q-)Chu3QUu~tXW0voeB7bZtsG*U1t6+;?C;oP&9tL+K&(sbi) zYeKwhqRq@SZfR!EiksfXq*}c#xl_}$p<nxNd{Ad&k!WKTegk<Lu`A==NMr+{sd~)g zC$y?quEc)c+gMCV8*GWy_S0?il3RB07G^b+n3vm&ANHi1K|*0gH{=(~UtRW$mhGm( zKaIYat;PxJt#|xbw;Mu#6_w66{L<qW;~!a<sT=Y|uL=}zS9O)rt}gt+&zj?jSj4|W zUMx)781+=<5v%&&B(gy-N3Xbkj_Y23uWyaighZEc_2*zDttU%AH;X2@#ewCEdI&zf zf~^l@97x#?$X1}$E+c5Ux5H2|cIWTXs*DVM0tGh*->b@JE^>OtuMCzGC@ETVW}JnM zri+T+oOR}f)Ncw@@MAhl*hdh|@!4eaB}kY?DblX#pe#7Zw--5><cx`7h*~ft2;}s0 zKmNvyAdL{u^<QL&SP1>uPjHH;o#eIFmi8UBD65QqTkdMM?tp$Mi>qY1%1$u!J1WB| z_d_YQ?72k-=lk8Y4+mnovF>l=8s9KGqGFwW@bAbZpba*%N{2*wx^4a1cp-ya7qR_m zGIvLRBBok(yK(%LZh7?kt<D#oE6)W!zfVL<_^T?%fw3zo0{d_*YPl`{XT0XDl&Hx0 zJCAxnb#yivnO{m4KW_Ht1XcqpO1!o8g>O!Kuc`ltTS-Om>t(;6hG2F%;ufkTmlh@9 z@CUfRR(wf^MvqY~opvczq2uhLnU(Un-!io>>H3NmWMf^V*Axfa2zOAEInGU1krQsU z7DBjm$v$-kVG{=l8#G5aaN7^!f(;I4qW&2C?xn(I{W$`YORXn*Y-X3DAdUTatB$d^ zUWHr+V^{wpbT>(6Sd$}7_*-9W*8Hq+B<b*!OdZbT0LQx|b^gzdm6}j3j^9FB49R$C zd@S8CuCZA5Ywf4trATD3i|tj{C7T+gvb8hrwti#U#yW@z?tOBcmZA8nEY(YEkJKC$ zErS&T)5Ri|Q`vU%J=jWgK&~TDky1jWG4>Wspb|ZOQusFN{Dp*RVfXv@b)VXvVtOUh z@Kn%FbcOsK=B;w#_-)66g%t$)O+=$yS%{t6N6b}Q=c0Q%Hj*N5i;jrLep3@OfO(&+ zAfaWjKxVUc>w)}?p&Cso$)oLwG5p#)!`j-K6S>b5?6R7@%z%!Of1hUoxgDFjzdv`L zMPEDLYqWpf&w~^}{7JmTUCJ0k&i*UYM1X=5k-_JU873-qC0yb}=>H^Y+G_r4Yamm| zux1<a!2>;tGNf^*qCZUJ_rx6K(EQ;FZmeVvdEIMu<h)JU-)emKJAY5aLIS7mYw=(` zEGz;+h7*1k+CAiG48%xK_Jt}K(ZfPnfCk-+%)&h@0SYWg2>p7!38sgI30R8xA$;?f zKPzfhR#q%h%tZ(&*=lb0uB5joU$ktNQY4*pb&YQsE~#HBPG>A`rg)B%e0D9juMiV_ zqCFg6u9>#2U;k5S3ujD}=jR!lQvgU?+n5ZzWm9@X=vn9cV@RHFM7QFl+>O_J?D2vt zvgxTq0}8PZIT1WFq+qWE!<y3VHzqmjgXb_O6*IGhLs=X&hw|>%(Ch5KnVm^XL&S7% z^VI~!R624p$_j~3r1@O-+2T?vnm-Ejy%+ln_aU+Rj8&xEtE{vI*TT2&RD4Yc9MJ|V zy0DKNpPS=zN@ZDsx7)$!F*72YT?Rf9u>zH2V>t0EN@jw=2j%nGftcs0)i3e~wT++s zkCg$>t;k;1I|<W@gUX^P(@`xEHj88Uj)z8!wXdRx){lJo1iaP~w0Gd6oS|&Va)?~g z!7hvVhx$#&tT+n10Ig@_?+CA7Q`@$G<sAELqm9KK2vRi;0KI|LX=OGwx}36dX*&@T zd?mfQ?C<%8&-d}0KrbO_R70eh>d(+uu@)9!Wud)7&v=a&W27M~YMq3XBj@&mY_Vga zZ=7W|F?~BI?=F88#tttC1>xYDN|e|jy>=e+&622b6*M?|>m_Z@vsf!)QproGF>S_- z#jnf+Z%xv1<fmZ<tiY9sR7#;Ava_gi^lE_K*+X<M`kP~R*bm-1FM)4b87W<_F3`WG zY>p_A4$J3C8ZRup8+`8Zk;ZK8Wq&euM#PU^fy+PPDujh|7EDeH{MQi;s3`Kne~&`~ zgT0<W`skfkQZBls#ZwuSsK)q6Y5Cz+nVd7{^&hL9^J$&}mIi0y3?y;Q97!O_sib1F zi^ifpGJTVYnf+zfhVwA0UY<}U>sT{8oozykx!m5aw(_^id;toqFi?hHrEyvc599Hm zwgg3XKHj%pMgv0im&v|9c+9VD>2=kTB)}R?vGuyLixKc2Vl7f;bm7SC&;H0_1C@#& zR&-t;IUASNA>5f0=V~V=))#H-bvlXGGxi}Cv;2ZKsf6Z)XLfb1UrXZ9Jp1>pBeG+B z3Yo+i#Hh-DjIF+ZWn-B1THRQY4o9-CQq`?mMY4uIdP~1;NiynpnD{pDOP)?WX8z%2 zxm&THWiJ$CaDRz3CSLQ<-4}%v72QnGHCSBx8@S%^uS`|yn=!>iM)S4Ou}itt%6BS; z?y`ho$aP|0Ke1Rioj1_Dzgx^L9kuwZVFVEoAkrwwJCSg}gl<sgdHNEegI+Nh%R#bb zc{F?HC8KyZT1oT1+6XO1)9rnuLgDa8bSyvkIh4M?XI8@rpsPa}gbJLF5l~>Pd}j3o zZn9Tmc!q6-R~e(OvQs^5<FRNtz*2o4oPv{Us=kkDuZyE0EPX9B<oNU`t_3sg9c7CU zIOC3LgtRV{@J~@q5bQCHgCFNa0qu|NmzN1u2@xcBZ)DeM2Wh<n?SlA8rScGQPD+kc zwd!_iMyn^2(uMim30NEBYc=Pu=?NAV=nwO2?i~FVp{xxGPRBIyCnig88YIjmo~?S6 z3o*MNdrV6X$IlEXw)c(}cqaeC$XfG@eEybQnL%-Mr8F)A?u~8-yPVg>L>GT-+>-jr ze&Y}4qXzM^-2MVX2Bp}XE%lnE(6{*l^k3*RW4=kHP4tZlYrfk^39ZlXt|A)9XGnhr z|9~q~jox0!rXe&)5!$04Zd4o>q!FU~PSa)0gEE;$K$Mq@^DqI{rYH&{U)b5*Ev7}< zz$aH%5<)WdI;r0X7FpwCpz@E0tR$)>S=C#P^+=(CgOaZDH=G{TCHwQ|Rt-vZO+R<d z$zhdm7u<<k`}lE&H>O`afRM?5lUZdP^8@GshM@pn&;3+Epg-U>2mob57f?A+QX>(y zzyb7b{6kpvP>N?k0GLP3_GfvBM%BeYJgB;rw0$V-8C8*B{9=rGSPx)s%M5^dh3Ev? z1DInHAwiY@Ken4{+FHGQ*aJ@!35E>Cqx5H@0PvF)2oXqNZHhS<A;5STiz7K=T>ZE~ z@W^I}P3ip$aY}&#)z=S4T0Mp3j|%nQYI2skoj&f=`^$vH_w7&J)XgE?Zm1cyDt&sX z(F>k6CEYW;RFy8xIX(-n>W8@bg+(<OUYSp~V)xSj+|D*?_q}DQ;a%whI@is9FuYFu zDRJrxc79>&zhC00pB~%k-<X9F$%oyCTfkg$rA6ML)^GimS`-+H?fZe(?m}L35!T$U z`DYy7y4PHqet><DI)G-fs8rp(_;;IHRIozHLW=y24bILeMFa0I&y$a>B^r&M&*u(A z@2(!tL=zr|Cak>7uNRgSp4375JGc01^*V%=xm}{Iyd>n$0nGu)1=fh$oji{1gPiNI zG^B@FubwzqPMF4&HFnL0-kwce9M$LhzUY-)oNcReV|I=s5>YtFJai9ow_M&j1$s8P zZieN&d3|=_6;q|Wb^JKip;cQU5))5DLouunJ#{?rK`ZXK7r~eM*g|DG9jpy=$}I2q z<HdI$^sJ6J7H;twFm{3{-lgK)*dRDH=9}uT;Pp#v;V0l7)>iJC?I|7erjBc)#&rQ& z^J9$;2||?*oCfuT^eB;m8NHsd_zaK2F|m7MHhjs%gPi?clsZ7DiAelt)|{39rIASZ z^r`GNlrO&z>Jj_M!eOQ78GaPODK)tlw^85vyHg%MtQ1oSMrkOCQX#`TI*>nce#i|8 zMw(A6PIiFRr;Rs}BnqoEF_<iW%Bcj4R0SSPL=r|jEKf^WA18nyCN<@?5~GUDE$|?i z+<${4@p_n+{={sFC)A4ud;-M*Wp(oLo7*N1PoY<$^O1H)J!!zN0zkb*e^q|7jf<|8 z%oE`eFRNL6LOS~(7Bk}4#L#_&<ZDldk}?c(8<5N_q~glawK*rdpZc0KHI7#GxTOJC zSZ;n)rE4z?O<&QDhtGnQNXV3vf@>u_`=>VHWfJU1I-^019fVE3M`*nvmQtOG^4>uK z`}}+Xoki^}DY@i0%iLPM9WCdsWPZ*6H!efHn9Upn1eiXeG#Q0f22^N2BGIaMs82sZ z{W^`sZ2GIWk}s?P8&>w5mpcG7_XY{3Ytl33C!b<61WSkglt!d&b5e}~ok){{CI)Lh zz9unza@#avU#UjsN*k+dL+@#;qQnxR3=Dg%=U4)9pp=P3U+a^7_@&eD3hs^<<Kk2N zMY@qBW=Ge(GnHb@T(J$-E+D<Om*(cuqr)n=yD4x6n`2a3_sHg>mx|d3pAt)?(sev{ z4v^YA;z1+BA|~R|aV+}9QXE6Rhv=qFb+Y4yAl?aXlY+fUEN6c7{pmawly^Ab>mmpV zSi_-pkX4R9GZg<bDP87O`|3?>wAF8$<eg`lnmKq@SwbDmrRIpN$G(;mf(AR4+!MR% zxgS7hrT7OXxzpOlC0N?l_=U-WXt{dK<B!0C3##Usnt4NyND!Q|mxZh8qv*Z8RKHS9 zK9Sq%vtb5?t(rE|wfe?7e3(KS9v1Pkay;=Er^NY-;nHBY;$H7MFe|y5&nQKzg@#+l zHwTsT)4up5u=DrV^b_n;7xxyjbiJ$jZ|H0DZSCqHZ8lYoL~YNQcck(i7^M-!{gKkV zT<@Pi3$SV&65ObtU0It|;Ha59S)!5UqZukFU}-&bBm*lx9Zk`#2^r10psi%KNLqhu z+_=2`?5T*UeO4B!UZ-MmKa}0}Vp*a7MN>~5wU~lVQo?he{3iI?V>POyqoZVUQBd_k zi7I%HQH_$#4?P&iQU0?eq5B0KYpGkcQ?alEB~=pC_mMThpxe<Ort>3u+5#LoVY+8z zq4+#0mIxLMhle&g>HeV{9MU~XF-ZCKG@oHj9v|uxFI*fxzcy_<NR9dQc4C4)Gl%)} z`Gweq<6+1Nl&5nGyD=7&6m&~YY+|_oTkUm%0B`R#VSpGCowZBL2xAnrP55;=(_J4+ zMCMvq&jumV@F|h{j~H-<X2}qf)QeKhJbb9z36vi8-Kco!lg=s?xUB0lODbw_Kh7Uh zM6?Q8gSUyeiO{gA_U#X=v3`m|b%c(koVikD{6G%+NE+>Vgnj(zmzL|lwLP6ap%fx` ze8^jvo^(-!o?ySpmHL<O-dR!yj<aVkIq#Gb2a?isz^5|qgjr_+n@IC%eiZ4wa0^r# z25x?ZsWBEPU_UqmffGMe8f0oJaZt|ZC9;t7BzT~H4wU{rBg*Y1JBMKUk)?iUE1YTT z#hY1ce0_z`+y$|)hI$h&tMCK-2nUO0JU5p!6*(bJ4;L1~BZAzq$aq}FSTuq+DFv-0 zHzUpB+8RH)6IkA=Q9S9<AI>4UMtHswA4bg8TNXa;oQ-Po<m-L=)S(W$;@G_2=#_;I zr)X;EoL5ANN)TGgEA{f3T}|o5$O|Zas9Cbc#b*hg)r(lRNHd4ro6hS}mE4ZzAC|Q< z_;Xbg8?6n?vzK^od|Bns%7DiBTGUQ$O4`=3T=4iod|&y&Erk2aR|zgByb~@i&;9_} zwdU)=$ZqE&GVsJy&jel9AI!QP*XMC0Q?LGf3ZQx3TqH#X_7JZe>YF!v5i`zhuQAur zpX>f&`sZi9fX;%zY-P(PV@&4FbNL7oQ3t8;nN5vn;lU&)3MHZ%JuDWqN$6PNuV(Yu zcqalcpwOSb1@&b449iQ!-=sPGl4P3Q%wMl&R#%MGCLq15MP^uZa<!tYk!k%l-z;1= zbjecblu{orhk|y@=ZBJ@7R&^=^zTkM6U_^ep`~+{>qpj{tc8>`-nLe$JKF7~OOv*r zqyV5qBGRdX&>=>?HnOecOdeSj%#DoMoe`K6`e4KN4VgpSPh=SNgvlJA-$#tRNKnjp zebC(6H5R6QD_G~nXWhW`!T7mpLuQ$mg|*i#bSUW$NsAUMu)DVhIK=HdbWke}J?qi^ zP9F+@o%S~xm!6O_C{=TF$79|THEslmf@+FUF&if<sc>K8KR~=xfHW-qH?(#_0bKpv zAc^HEIsn(I#!>eSOp%!qkN!%j|He(@$o@d09eC`-(BpgCWJgUhfP7D(_MSq(+$4dl z9y;pRko)|^P8)C}D4AArqpuDP#zVe90sxE!M@=6)jWnz8L4B5AbM*hDTA!M-#d~_- z;O|X5Ve)Y?49)4G6JVzXkg{C0)x9|8I?9$&XuzrHAf0Rpi5Wd)ixvL)s7A2t!uHuh zVThY&`urz`6_hRPs%>gGImtw#>i^{Do=Bb0=2Jpk=fA$KX*w+qb$XmeRpxeT_(!`0 zRe}5Guml4`ml;gcURH${3!2f9B}z&=@q(sve1%}w2wR8rhOJ+12R$JE2gx@*=>5Xh zWV=V#e!Y1hCy|PHe?*qd8$^wHVatV+wo+)}FgWaye`|-2y9@`TfVRc&8!Ju!(pdd3 zFo&O=si|%}j<N(6`H_y|{sebtkb+xo+BII<!F>Jy6rEeO#XHD|2svLbV78zmlZ}D1 z9CkR}JCS<V`T3ew|Fqb+#vrUzgazcg{)52X0D%{OoFni?e^(o2^*u;7HRtY_iz}xn z9boL|+!7V%;je(&aJa{U2wObLgL3b6uD)tJnDLW`z}3aBoI$Oq5{zQ{N8gJq&Zp%* zR6p01%aG!&%>04rT%lJi_3b$q(Yzd>{<5P+B=CBM12t>^ywqdCON>sHK=|AqEqU}u zVZ%)&L-Q{Tzvgup))n@eKFDu^rR13$^MK7J2W<I!WnLTQFMgSNu0Tety{uaD40_x- z^)f*JY*-}7aQ>&%Os0~4u|q>K5g+bgUbp9caL}!>SY}PyZunXHVdDHpN?lt1+;az9 za06kw>!02AFL96mu9aW2#GP8i&Og%2$Uo15$txB(p4FmvjTL1M67%)e4KNRa<>~la zFz}2x^y0m7&!<XN_N%3EBZ7x!N4t-9eb}r;ij&>#4gv{!Dn7=gzWdCr6tB2tnz)F8 z1lT1xF~CLV>=VHd22lfsp)b8auFP;#dO)_Qd#V^LJ`AMWQ-b++OQ%mxI(}IFJX^v+ zi(>M#I4J2sxuUQRJr9>lBgr32f!EV+oz2={%qTc3C`|Lu%X@tfG17?mNLwDT&=&HD z$BGNl(p1p&wvySa$ScTHeAe#q8V%9BUcdsQ8hQSv%k0G@F*F#i5us*0FXifCoeg`@ z{~GHy2kLO#Il+U@<s>#gtDwp{s!GUOpv~t)R63?a#Py>;BOa`Vhi)|8@SednO4Z(Q z5jQtfHcA;Sf+&go;~7MHUAY|T-5%S$Pdi1kNhxHA97Vwp(O=97SXG+Whh)^WQi8<S z2tvM&9y3A7TnOSAkD)#({Vddl3~r^|4AL+;a&_pdcN0!35*rhVZ*+)QbM;uLabz*k zu!vvdL%%(n)f2I&7}R?$!n82|BwacxmP5&Gkh?FmtM_p6Njm?D%O}?JAo}aRXBo{# zj0HA>JRjKu4{Cxl>syPJNPk1^c+rg*?PY^M47R-s9!EoUg|Kaye)N*($}9GXr?YTH z!;{ALWHGyAiSPenzEqKrxc(fm^OVX{IPFX}q^;>|fe(F^L{yIJtCw862VGdt_>E|@ z9$QT@vz`^v(&+_f{+Y#Z`lR&h*DJjMf5VVgDXzA<ClpHUs`x!Te)I7@F6@<=Wh#GO z`(v@3@O*SDR}Xp9H{|_{IUizx7AvDLTcU*>Yr$NP2i_Z)CVN)Anew<Wkybs2Tpe(K zM+`Li{r=dgOEOxQRYo^1DTVVvGlAD;^1M>h!g)~R_a3)1_Dd%kdgb$)1J^MPt@azm z-DmjQU!v^~Cw&^P#ha2JAO0IP-SK)4Px<<K6sTg6A)hL(>^v`15ak=YeUW){2I^ZZ z6jQn@Sv8v|xOl}Xz3$a__GiyGTWJ{pk9Swi>vh<VCDDxu>Wa5kx^SSyupop!zX(ZX z$D<Z4R&8W6&PrE(mhK{VS|=FMy3CkqY^p@N8Pskbp1d8J3;_L-SO7tLogj3c=PP>e z&q9VsErv_xU(hw-kLZH$ZMy%HS%z`b<~W{q#gpfM*l9=((}24p<>F2fSNitW;iMkp zdfyYWF4I-#Aq@AyC(L8G%s^Sz5(Hv!E5wH)m`9b@InJR4VR1%db-V6<0({>X6b}w9 zwhpd#RaUOj+^wF)20wnpX&34XzOd*WS{nX$DrQCqqK|X+PSqC0KRR!%H-o%Q!}mMU z@lSxN`uhe}eANh9QqY9D!{-3FQ<c2>tT^_v`*#$e$Pp&aOXU)PV4vGEi-}k95KpLA z$PZuuZGtu|$6o6$6>3<z!`+bfiwnZW)2zLM5NXo;{#TYfGL{?{)U8VM!cbuwe(f?- z6AM4VNgx1TM8|?5_BED>ffR6I>np2<$aG2Rug#_pLJ~#6K>QB?L84wx&cKWImv)-V z{H_M7L*V<M?l!Up%%Qyz<~>V~&r3hGtjjuN-#Y<K6uu@GPv%?Uw4`cKQ-|1}=#vUl zX6WSd<Ea?M`eN-@$yYP`Hv-oklYXsuQRPn$9+$XtW_IW7<E!d4OKGyaWmY$oK+dyx zRTFX{{*+s>vN(4ku&=Ar=p*R8_TQFdBO%-I#KjxOS-h_=m}*YbuA1o949*9<gqM_0 z82CBLSM1hCq-}=x`1IuE+T*v%fgaDILl@)Mrly?RFMI7DG~<(;)%{565aR~SVdD;9 z_OX_0r*E<F0bBg$(3To^@uGEVQ9qw~VeAb?f|NPl0g5^#1?Q;qBZ9a9Exqrb;-!B? zYc@Y%c25;~6V#*APRxNn)Z~3_EiFEAz3WS^&Z4Uh(Go*#@uvr${cWPcXp(+`i-*6U zsGk=gjjL}oR(f8}8=ku03QD6!`PbdlNBv~Xtlvq2df<|_e~i*~NaV0KRdyLIO%MLt zG9NgPzI$W5&t)aBc(||b=UFMH&{Bkuj#|c?xWY~FY<#hp?q|5I^d*5wXTvQrnI}#r zBXece{rP)q5$8a6?j|k44|*AT(1Nd@v?ftFt_$R&U)h}tr8(udT;YHh-1)%(nj6kA z7(%Zei48deeI}x1n;K8@)rQ_reYa)WNfbg!323Jln`SG>Y)5_O6Di;UDA&S3Ulo*( zLT87bc#tpS!?meS5ZtBRbY(B+jy%xnk;(#U4^?OVkB)CY)9gD@8~e9h3u62jOJ5a; zFE0nRpN5wwS9GE42=oz9sNoJ8zh#Tmahpx+NHE>JiB0ZgMM9t&Dzv@9rd|jnaeM0V zd(Z=S$VJoaoJxG&T<fd$3#a)8_3TWN<U@>}Ea$INd>U-R?br2Xaqxs%MZ3b$<<=9k z<dp5a_z5LS#j6DL>|R!^4!HT)RfG|?LNsX-UlGD#tpGDE#fy1n^5;7}$vP$~9TA-P zdO^T;pI5YCg82^3L#l&G-kt<9XJL}*-Z6E}q>UB`8xPeawZSH6OFrNQ<ZraZxsln0 zk5G8FeJ2(aqt8YSpAS`*nn^5kGC*Bi-Cdge6Xyk9bM=fHy;7fyA85|3B$s(q_1xsY z#fOcH90C|~wykc%hg;47lhF%Fh~1=b1d6FRe%IfqT-|4GZiA95)4FT2l#LAvR~B!c zg1y$Vx9iNsrDU2nUMq1O>l2NIHS8wiVqdd`2(E4OFP)_*=I`|nZIFn5&&-TV9|V_M zk$_7~o3<XpMWr|Xj1o8IiP|Ce+r1}JcLhI-BU9Xk)!nL)#wS19np~KM>$l3l_V?Rv z%$tnm=*&Lx_#G#IJriMP-$=>Z?9MhAs!1<~F^>TO28n21<-tvh!*yRNX^7<A!&E#0 zR+bEMUhzOnO}Z`f&}B))5QjejBFm@wxyECxr8mfiYj3-nF6x9B&TXybS|eet+b?8c zya4?B=2?8Jt@gC2FD^T*s*Hr~R_%V^0G_)N?Vx~lu3D7erfz}|$-BWC0G36wjAKB@ z1Hi<vI1;~Y4u?WNn`(={&8e<|8QTmo8CvZ*68VJubL=kO?zCaT_Y{ty=R1Gvgcb|? zgjRj25O&SJtWL5yB9CW%btZ10lXZWB-=3VjImr~+9g?<oyBfl&IR0f?m{}f>q>=}r zhFQ~2V>yo(KrxcvAwfq9P<o;yt4C#i51cz`Z^TOtmwX+Q6WD63{NVV};p2Fpp@NwG ztFnM3Jyw9tpWfh~otq;HQB$3&2Lg7>3n7~ap>ShgSi_Egn<%A2z3bdSMcFU!N(rqF z*|_%gCW9UY#4oRtjxB~7S$h!?XLnn>DGY373|oW8TmqiY{LUm(TA>8qdFHj@t{O45 z<0cF~f2BKZm0MVvcqE6&Y<6bii?v@`>v%5u7%D$Eh!jn%mPP*SSC;_2l5jJkFMVlX z+fjm_`hg<Z8WBv#s1NIK)S%NfL;C|!@KyVqDcL;fxY)S2_o`eywmq*8I!3cYTo_WS z7mfdnGv2_LafqdLHMQ|`boMFVG{?reFI|9Y%l9)M(n$MKiy*@?D8~xn+dDG?1*r4M z_W}zE^&eu3S?Tq5WCp=KA2L75zYQ%SPIqOXa7DO?RoY1+cl``L_#$T5^)ca4>%D?W z7^DL%CA3H4>Mjt^g6nPmMms=cocph#!ui!Yb8%qQsQyo%m&7%46f3-^%ejUxuIL3T zrzr{B^DJg(-r&jn48)NsC>C1K9`FQT@s{^U{XMM+w5%ZeqrUrkFplB~fodCFUKyGl zkf<elqc8+GbheXiCGkS?dd0K8W>e3$3fK0ADrY}Kp24kV#}qC~*Dw2!a&Io0=0>cu z0Ql}~l_$9ouIfkEp_&Tn72Yqb$GMhaDUF@EqDQ2Nw05<p{0sQt1Tz7L@xs4nv~Jqr z-O(8PBz1TmaNfMKIfDA6K%ZMn(Qh=o`izV6ECDs2(ocn`@_57GWzKYM6@C;QjZO&J z>;QP1w(IHAAIR{$GC1?xR&9|9+$NC~I!=3kSU%ve>@=3RM13xynOf3*mMJ?tG$rD& zPq?lyuAnqx1-?-Dj%Q;6IerXeC~IF>^jp!IP&H9!IB(4>3ehL8(o96&>o5xbhPvoZ z?V0bTKhBQ(m@Tipm9vt}B=Rb8;=EANU-wblWg1+ez^Z<<A_FIhG~*`FUuSu^UDE;Z zQ|+2Q3~(s(8(-Wa_i!`VuZvcU{aST*#C{-&)w?kJoI-0KzB8ei{L<u?nZk^^33XGY zBTLa0dXaTZaHBn_$~p$&vRS}X%a)(r?#wOaWPxC&Nr3&z*f*jt*y}2(ePZ7xT<d%I ziNEq?p6;Kl5N?+^E4;PLPBI|~AulM%=vhJC{glRal~9PTzC01P#KH`CndLUL>0pj~ zsXKHk|FBy3P`b3K2=U_k2TCm#T=djYLs)tZLk=W+j!8MemjNbg&M<?F*koW6MY(Cw zZy3&=z<_1|a|DlxmqDinFIV@9r!LiG=|A!xIJZ!Qk@PrpuxoSM^oFHjcYpkB<)d&? z9glvaBi8%10e}{u-Qv2;=N#6;J~fr?N&{6cMPoq)(lnL_kE*eV(CKpzSKt<Y2hH2; z%?>IT3lO<SB&%Q0KRZ)Zji}HjmhjX3?gL`rVT0lDn)ZvgtG@_ANMKUR`|gEC-ebhH zk%V2LU8)ErtkvbB;GJq-2!NNxAp}f4K(I7syYG9b0e%9iu`qkZAwUV!rGH8QOykDi z!({AHs~|WM13@9WqKd*a-U`~5`lld)QL$6;?r(F!U2PE*t-Dm?>L&iQ*i4RZ(UfE0 zc5~C1vAZGI3Ve#fNZ`Ths48ie@kx2>WE3>^if-cZMBkG%JZ0AmwwUTx(^(hI%+&=R z1l{n?tjGGUXM|X8W>7F2?aRvW!^A=Emio)dgbGe%aBAn$1SiwDd_WX1opF*3q*>GC zJKt__OPgqtdu{42ex2DgOEyckL4lD!c%4gj<;7vj=8wnvu{bbm*WdXROpdx}Ux5nY zX=0bEXpwhw<r3EZftW6u9!rXy*v<`3L;h6ancE_?@hFE%EeG5xb(5%caZVix8NMYe zL}hY(2fPi}xOJ(vV1VwU6I{g{w@eRK{o?jUBe5?|MTuV655G`2@rKGaOx?d1|Nq`Q zj3rs=`AX_W{5cV#iP-gO;mrw<tkpK=oDscd0cMDn^_g&yC$)OizzwwO75R@42z9be zNWd_Qqc=k5BADjKQfLJDQIb8fMS<bbI`@7VmCE|#F~Y}>65bVG)VOjr_nc3lK-s-p z3r$q>Qb48B3O~HTwjk50vx7Q{yy7p06509PWkjzzphFfQ=ujhz93~?9Log3uAc{<Y zl533=hQ)9Y2n})zF<_tscv4bqbUL)bAlRT@=nt0{e@@QiXapGK@XtO2tz3^){9l{c z<4)TvGK={T;(J3)DS4hG4kSS0`SCbFMZk5x)@Ix6cZ53?7i2iwo7z4Mq<L?*ni*b> zFRJF04OjK^EIQrp=R1%qfDoyB;8Q8`&c);MDeb6jB16S51!)L2J3r9=aVP}-%&+Dy zi5(K6(5W~>2z=ovU;%jF|JREnAD<-oI<}@g`5|!aRr9pHg`sA4KZ|^UHuT)zGfhfA zhhrUi5Iyy3S^xat#^>-+IAy-TP%tP}9q^5P`m2n&ONpAknnCKL-`th-(wf`6r-h?m zc4)p#jg()F<#yd2(&{w^x3}(3pGVjQz|S)ZC7B!_PAFZ&u)G!$S1CEXA&@ewRHqlb ztNSc8?5+kmj%LX3YPa-A#@*RkWX&JGl~@R2a^$@ii*k95B=%8x!5oY7w%Wc{azC?4 z|44qHH~;!#$N{|=yIx*#{yY;Fmi`;SC+jC{pY63N!G6f5E}nYW9FeRXdwjFaH)3>i zwiY_`hxZ2-zGiY1exTd-Rw@eHtCg8>VJwZ&I9yOD=55Kr_V{OHuH2QkkDA^zY}cbf zw}?I;0iqkZSGzLMRW+7G2EW=d=fVF+nhSD4yoSTdn*48?Aj9ciD6Rn@gL`}U-iV;k zhbSmCs*w=26y2v=jJtIc3R*gO7Nx&J?ee>Q@0Ba)307#oTJ-kuhZm!u>;g$%`2AzX z-6rq&O})HL`gPnHf6&dp2o{lzPage_&X5R5df?{ytlMAZ=<DMjt-{n_^W`0^UqFWC z`pL_Y(f()xn#vlrP0)-SjWmfv`=Eo0A}8dgb$&V7h77(j?EJt_^tuY*YLot?uIAXs zCr>KMTF&Qg``CAuQa21<XE(K^HH{17AKVe=&FfD2FJ7rdED7%}j{}SgMuqjZF{;i? z6U=U1yqjB+oq9d^`DjRr6DZ89p6bQx{n_jZ8sf3S=f9@ne6gL3WxYJv(Bh&C-vXL# z`ku^W$aSm+KVaBIuO;u5mc*m5+J7M%zD%@*dfE@QPxV(4U3_;nLme?Ci)YEN@JZ!T z%A;SwP#RV@1JqKNY@zURHSL@zbf_EI+W``+C7FLz|6^+Eu3A!o`*Dp@hnuQL)L>25 zEwtnijc<Q;fG^paOjv<hv2DPCiv;>7-@lAGy}sc!M&72#oG26v&F#Uur!QS$`Q(4? zAa?s@Rir|g1O--|pm?U5K5+%9c_-N5oc&>CxDQ~I>$nTz0e|oHpydsoqHG0$7p$)b zw&RaeyQSGardvLiFlUYzr|wf(38qQ#DUeB@vi31}CBjPh<kXL}1O8Y43dT${ulaC# z)V=Wn#{R1x>q}W-QSNojsThG4;vyOID#GM<m+6BtN<awzyYMJY@%M1h1W&-{gl4;4 zp_m#>jGF&$Or<AK%UsSwVdQbA+&yY=2uScgQoGq)+td`hdnnFP!xpSNX!V#JsR8T9 z?tsHNQJ{y;H-*Kj#*7dC5My*PWUj#aURL*ioDaAZJDeJgf?^@q60suy8<o8eoja{? zpwtJ?NbBAY;++MMc!0qe)Z>%t_Q_~y>}B^5Wa#Dfa`V?U@N<&5n!#IMB<T4ZDFY-R z>R)L(8F39`r}Cwb()pPf%u{&uGdv~%9ie|+Aak16eS4q({SkP?vTxJ<{^kqEODT!~ zlC`0APyc3A#5DEW0eq|_ML>Am2aRmLq4O?vQhmU{(o@Gi<NnGB@tnYb7^PGCt{(?C zr*XNX?(L?Le^XvQlY6V5_hZieJlwoBwHu#nu-C$?vkN!E`iip}r30R6kOE^T+A+MR z3O=1o{kbsm{`!*ZOdGwSx_iCqqmzTjTvD#zA4AS~xw{Z2=WPKurr?eovCEha!i(lR z%K%ePRD{d>h<s$#@3Hsn*WqekUJ4+dQ16_53OH5{U6ttbWch0LXxnmNjMGoCc6&(C z%L(#`Zv)9<%Y{fSy7_F?$XrZLJH06u8)WK^K!v>|`cMu?a-qle2W0BILeZ^QFk#)% zIR#z<T7LQ9Sq>9_H!0llm^H%plWm#6Qo=K!g0sJO)&^&A&4xtvNOGWQeN~ikp^C(# z;q2FeSSp2sXTW^{c2GLOItB)lN_j1I;I0=6*uEMi8Mvo{Xx<xwpJCMK0_1ZmZv6y@ z$_YkJ<Z7VBhH-pOsoWC1D8?s6W{U4abmnOz+M{UDay)l)V3HF;4!o$~TT>j<<_iyO zg^T>fZ43o5-n-QF1yp$&t+WDb+^LOSEF=%|_FvZWh4{Z)3vdlp|5nMczK4tl3uaBj z9qA96)A}bD+yB<tR^<vA=DTscAN(`|tXH7C81&!K6}Y}0{)F-012Q}FjWszMBCE+( zm5XUS>K=iC8>o+wqIJ<}hTX64%FQ@#I*M{2!vu}-BtQg?zF$#Oy>4-8v5+!Sab!70 z)Rn1#F#ctjA|Paxw|UGC0giceuh#`&EJE04#CC3xvbkTYR-5(UVr8c9HwHAaSX>+k zz$f>Mc31QoK8S2G4NF3s(s-kjTz`)iq^Pvt%#Gakr;-^$hKt(>V*)@j_XzUyXigmZ z_y-5|?+hL6liwYWje&X9YRP0wH1^_u)Sqw=95xef1%LKY!4U`6I?WK<4+)?nYGH-$ zH<(By5BK-3Y5rPhcy?YTYMl9pF0}V)-sY19H725#M3B3b!hYVdz8~muV=AX`(LObC z`y|o;0u9#cfl=tGYWyDUFcN-~a?p&LSG@XBVl=;7?tYGH5}&agecY+wD?~F7k_-5{ z@A+a*BRce4<Ef`a001NSh)QpZ6B6N$js(cC)2Jglpc`QP6@uM{s0Nf{Ae=x>)RGU( zb>Ry7mJC9$`%!@f<ito&J}i$<Qvq;nH<k=kv~NHU3^CIlHt7$i^1^ft29;_7175Bd z6zcr{?+B3L6t4zlJ%6}>!1Jd}j%GmOMDBhoI~70@jR^>x51?U3bR1ZU0)D!$!Gno~ z0LHnjE8HI!BZGy{2!1|7QwBONPCpO%i<}_CwDpCmOpXiy4c6b5*-c1bR~Jck)$jel z5nmnpD6SWt-Zxu-wu%L{f%jKpLxr)<ur`T+H%v%~tO9anP0YMajpcwLNB|XZ7O(wA z-#r|}eg%h980Zx+o7O7E$YJ+<yk3=)9%wAn0EhXM77i@rd;#3e&VN7}uUG5F&cQ?I z*S?vcXByW6x;IrT!pZ1}vvGwFbVRQk0fCjZZ^sWIgTn@5#q)vSiv+En&UF0-LQGHK zw?YEQfg)t7<y0mE4`HnMP>TSp7WzLG0?HNR(gHcvyedHadY#@(xUk*)R8<)!M;qX< zZ`{XdQ&6CI36vq?0j&3Pb7img04pdfqywgwUjdA^zS}k<qt1Q|6jLIAF#hg*bFMyy zdL0T+Q(|R_10#7v%Z}ypNZ`_+cpB)yct6m@GOIbzv&yqD@=XvVY61Gz!?*&TCWHa- zkU&~~K-+a7K<$#1NaKNA$N*JofQ=ZC;jv5JW?**Y3$cJEU>p12hxt5t#bJixlt9i6 zNJ@EGI7|Z%#xLncgoRdJ1Sqa}rE-cSuQ)b#01azN2VkT>TXfPT56uh&IBpC;gB-2n z`z~Y{O^{eA5M&R~`1W&I!WyFRxHDKlJm3u=u&g$3yfTV$r|^9yA}oD5fQEdhZYj8N zT-*$s`aWr{Kw2oQ<ht6*?25jj-=&VjD9*q8IM^((h1*I|3L!>NX!|DP0B6tz)bVwa z(CUK>F(TP2@Zlmv9@ztIReOpto$r&Jij#1%1oY(~0fJ1brmvnn5$rxYGBE#-s~04& z_u>`G2?zBOgG7<gtNX_PcRZ}*dEC5Bq^U0Vg#Wl{K}PJ`Z$BRB@^SpPE&Smqigzng z@PEG?LLaYh&K9M)JNab5Eji>YArBn$Fb@*3j0DBwyzzdjE7HOk`sgP3{e4x_;r8(& z#K-QoH<U{OgrHdD4NEb^2J<u>2Y}qQj7=%QZ9_X)T|db<Q6J}Ra$@^^3uG<WMA%FA z<v~!;<j2+hT3wR~VAh;%e^?8AP*pH`Uqd4w6Sdr1;%piXjoTC}2-a%-rEsAU(2hU+ zn_2nxwLd(^`?0HN0$?Nn&iwH3(DaA*v?CF>gg!ipNzgAPhA2={CJY}C&xZq7%2yuV ze}~>v)o5QedfLe=uCMy-Z=*6%C#Us)K?(#BVrf8z*ROgWi;go`bFO!#8s*Crqe2}G z%!!z&V<Fh+Pl#Y4B;STE`uw>*jx7E)y89K?!rPNeB6@xqL~wn5<L(kDcjZ%iddf%7 zc{`q|q~$mGwB()u&>KKeHReEL@c@g^^y3)A9nGU_e;sz|C3o!OM`dlV-`r#;PT-3t z#P@rM#(e>9fSv1avS@*LLObL7G33>YWE?|<Im(!!qbdj*A{d#Ak|e6@rT4sy=M${~ z0~3z0gmntaFhbst9x9b9O`}8t*n&6AHU0hI_zxb4LMmmne6xDqbLc!>x=a*W<Zlfe z&D+~%(cz6Qq>@hv-0?}9a92&d@kveh{Q7N8U}5-E9;Je^c=X<Rx~t1ybPPPJ_BtaW z6Z`l%Uitd;iEzVxv9pn}1rMWA7gKZ?|52V$ttDhQV6AY6m01-T+@l{A7VM?WmeFtJ zag6#gBp@Gu^ykZ953*G?8R6Lx>y2^@Xf+RLYzFuVr~XaAH<yZTX+*M7gp~qjP4OaE zyH($C81okNd>><Dx%0sQj6H`AWzO5sk-&Q{J-Vti>i5&Oj%ql7>yqN$54->tpl(59 zKu?&r`J6Jsk^+EhzzT)Y$23I7ok~_91_A&+AwvbIKF(ACcB#F5L4FVj+Qb^)<aZOB zP~pk<oq3NK+}G*hiZNP-T_l(gBhDr?rU|h2Yr5yrr1~$uQRi9QeVWn4)ErmO!F;%m zWkvhm=z<pPl>(;T{5Kyw*&ZmGc)z-#CrlWY6|0u_zxbS4<z030|K@WQ38F7f{}-Q& zt-Ec9L+^cVpqf`m=rjU@b$CWE`Q-S;YCh<o-F1SrMbR{G6Hoh1Nz5jl2N`&C?DitX z$xCz2={HGnk>5{+;zJv6*=BY!lvFt!U_SX}kS7T^wUyLG0<TUi8m{ouGf|pyvWn5# zd))>J3`jIl?fVmQQ~)+^@pflB$z8u*2ax2U0b=}Wo&9qT3szRMD+~AqAZaA<D9+bU zXvpAEfqOA~iAOC=2`+C63aM|d@%N$|aMQru7W(nNCH|mYZma9e2I3bG1|)`ol>5S` zqjS?A86nwef$9mkr=M(n*X??0KU`M(`!Ap3;?$%(P79OzN<4@{!w=+#*RU62<Ia=F z<ntJUNXCq9H!~+g96&{qr#Hw5o|ns39FOi<3?m^t^XeRcUA2GzzOn?JJd<5kIEY_d zBu3^Mg>oMry*(N+n+P*_R>BKLk^MT_bK7t9IeANelyQ)ANU3O+VdxVA7Hd+HK0lQ` z%+Sb9T)1+vlGb9X>2)3NP$kIiJ&1e1O9%-$u9+=tUi?J_?zk}q_1KuGUu>*ueOu}h zEgy^yD&9wA7G36s7bCZBY_@@$%p=EUH*)vVb)-2>XF@-<m?&2^mxrrojD$#YaCVTS zm->@=hFleuXp!Dt?1-Tg3IKJ^`BIBd@tStXoo{ofT6v-7)ePa${BOIze(H!aok-Og z3=kM0t?A+jbRI?nCM8G@^mYoq#O}pn|0IFyRD215TbhFaGD-QH*3rp6`gW4!N_kSh zbzrf}lEb~x8ko@ecl0tQkIadMg1%Ju>r5~tnKR$1he->*Vy&bfuNOzSmIBr=95McR zEL1K&m`<p_|7yXSTw;)-wQ-KyF*VSjzj&OsmuZ$L{m2e7l6Ld}XWMO)OX5*S&!H^G zDVWZ?f%GnL%<zR+WrgW6>|;`$xpl~}fO6$)Y(R+0!SJ0GEgUSa(3>=sT#+li-OGW< z3DI{$fCSg|vFXIN4#L6`Q*u+|q8E0OVqJCzeYTnCO<tAYiQ?x``^Ii9Hkhzm1}X1a zx?f&_cw^qK+hw(g$5BsKxyo2_v?4z+@02sV^@JP&0&lBTMrBY;Rv9q8=}deuUUQ<? zz39l`8C?D3d-HTJ{F*NMVAGIc{;D@OP-O6LUdlmyfKz`UiAev%-$IjDtc&sBA|Sxx zUSm8(Meyt)J-CKH+!B5Jdm!*ZdH)-L%yDs)o$@=XIGKjMc<h2Y4^6JIsp|9PZyrS1 zMX!N3fd9|XCSP-7?UQ1tH*$)oe%HLx@XvF&x8ci&tF{IJ<p4&xz0+xsft+ZVNGAe* z_kF4rwAoYiKZhyAxYXMkOM$fG6?AfY59nPq?MpB-3;PZw(rM-)f#2NjEm=vq|Hoj3 zG&*>!RF|`w6E1nb8f%I!UCZAklWw?%wXN_!pz8#ti;5&Re7DvhiA>P?1ZY43YjU^i z)TU8^q$QS!rjW<p3PAQ(T~|u8{g_b8x7`U4)><^MneQi0c%cP8BA)bq^p6IsQc@up zx!&SBBDMj%?mzE2@F_*^&O3+9>Gx14iNR^z$9SRPiH8gc5+F<j4DXOEa7zz+=2R36 zjh~|Jz8`xdQ9fvcP@Pju@{0=y6avz2e*n{?3#2M*b?Pb&W(|iuaolBK>Dk%Odfb|f z;OM<W7+Ck%jf6HtOe!_pwJ)>(^e)}cA3g)I*u|PiBo;lO1O|b2=<X+6{xWk$lKAO` zh?sV5gx?lSaEIoefBDh@Kj%$nN+{0ECf?vFyIk-?hMu=;#J~L4)*&lfNpU({zVTfs z;EH#RkH85hX2QTl=wsje49!>+EplAk&HfuaW?9#YGMf*>Gu{8J%U+&?*@72pDc7~? zDE1Xdryv0YXz~-EUDD5?m)iB^*7a>N{Wuo|>gDG3A9`hTXJF6vu-`pb5TLRKih_Gi zYmvaZFUwI(S@-v|RTcu_T+2_MEFP&p5K9KqR|@G@z`4?%-=E8uIbLSCpv>BjJXe{2 zMD{|Llexd5L+QQF;>lP+h~Xcy$`4>*StnDx7<T8rQp0KpcCnhgU)}oY_E<<M%`;X= zWJ(8NLxG^zGoKHPz)EdRnjm-uA2AS7A9&{j4A$O7n)%@iIZ!DqeQ21_0EB*D<^%I4 z0)<5PU%F#}RM=s9;nmxp+L!xf-Mu>*-dHDCT}ccfASjSvZ=Ih@k21D<p^>|N<cr6r zwJ*iB9qfs}DapqWv6`5CyC-jx0~Bsc15GO(Wzq1&Jyh!<V&hEpKsff}E^)+?JV4{~ za!d&t)+1=1f)tuR2>~H6m!|$JLtHBx;A(%u<UYu0A{h=-rIMcr6$0f4Rp)&$13tA$ zPWGjNx+tz108bL&lNH<3tq`cbWV8W5!5**wk`f}+u9hc==rA1nvM%R6o2|Q6J)y4f z<5XpR&SrOBwU_5MokM-v-Uv<k{{)r;Y5a~B;)uM__;|iZi@nW36}g+C<@Fl$d3zXr zwts3V+!!rCfB)U{@%Falwxd={ftKx~4mn&+fit6pxFVK<49B~%8?+4(ycRbIjXrPh zfBnZV{P*kekndZDX)T2tqlK#d(SFKBsMS)SWy^TOxz|+Sv}hrg5LmRCU_&70fNt1{ zHRX1sW&btsTI@}FrupLMu{bOjF^HYN$IEy&%xO7d(%3)sDceJit<l1x!`zKH@0Kw0 zPz`7HL`Up7_8!J76OFnp!v+DdE$ZRiz7;qvTGBg8YY^WDz?_vUG$0zFh3(-4S*?|2 zv+3-nv%AWYddxW2CxZ9Jk=+t40$Oe(aZ&4I??UXz@rn&cTw<e@4Y#^48{5vO11(i# zL?&G-&?Q>l=raU@PN;h$wB+U$#04>4h;s6*-3;757e@0g3p+8+1TUGfC=UlkDS3sV zD%~eHBI4}oTN6HLJH<T!5*^{Y7USf3_oYg$fR-vUB9kr^I4xSH17aM)IIZFh(30xo z;4$2o#~>L+O9+x$GY~Dk7X7$~iTj0fa<gbL(pji5U}}vkprw|Q$frLAPKy?EwNFmt zOH}=YqBlT`(<hw9*HmEjf+Nmr8KxF|K+HwV20x}NuZ5ot<H-`s*R<g!NBH@&n)fR} z%L%VdRH=~yXGRNK&*9-?Yddu4gP$2|q|}mP+Mp%U$ITY_iR(|FKIx|(v~)UXW~O6Q zOe~_&l19gAn|Upfn>F|-{!s-Ep9am8BPv9eeJrA`0$4+Ai=H^QCk0N9mY$?kb!~>0 zGwag~Em;xLu-<f_Pv-wCN(!%~qL|34GX;Q_Jvt0%Ayqp=OVtT{9#lZf9v2t#>_Y*d zWsiOWS`J6c9^JY$PoQO~Vn}}-1%Q@4`VwdXTHv+pab+RTZWI7o_UJ001!w_U_PDZ; zXEzD}Eqino&;qmoEqh#9$g>*-7%gN9@vp7|^q47WJ24I_zKed&(RS=K{uwmET+11H z0d+V=0rToIKKm#zi<Y`DJ7I35>oi<XSm(M`iWI<mEytKSl-gbac_9&B_E2D=L-)bi z>2ievS^=P?y@^AKPyh-*fr~2uv|PM{(L5*s1)xBC1!A;(`|Y=<^D|K)C;$bZ02Js- z0YV8qzCl%fW60nG1)u;FfC5mUiUJNTT|p6*g#u6j3P6FgEAamTUV3JDE0an300000 LNkvXXu0mjfTsjyr diff --git a/src/windows/identity/help/html/images/screen_config_plug_in_krb5_realm.png b/src/windows/identity/help/html/images/screen_config_plug_in_krb5_realm.png deleted file mode 100644 index e016aa10b5555ff9cd8dc849bd6c30a1e0df86f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25097 zcmYg%WmucR(l$_Nk+yhncL^@V-Q6L$1PNB$S|~+|mSQOm#odE@kwTE-4#gdc6fN+D zp6|TZ`IB6mXJ>bIpPhT|nVm#xsw=$0B*jERLVBg7D65TxghGjggdB;Eg7`(5wITrV zg=#0ICWVAl6NmNJ5)BE-vP(%;O4rxy=zV)7P|*FjqpPj!eGC~}+ElYl-_RvnM(^|2 z7Lql2&&r)ptdU-*U!X>j$M}dc)#PHJqCYPme4ZlN_=7gOZ`Jl{-?lE`J(eAx<CRrn zU)<qsOO(y@;|<*W;jB>n@r?5^_p#T98VU6S5)KkdH2U9jiAN9J@ZvCulgslh_*aR) zYpa1>FVK;YpZZ9?K#?VpB_F1iW_ImiyEvb%G7tLx--lhws1f23vZ1CgVLz!n_lmLu zb4wp?XFDIPBrcf5C6WF!1}Qq1IgT67drfXjA{pRn(4*KnW-|5m&Gq#)F4ceapg_j~ zKXu}2#rc-P@Q%mmM{0k5PqOFrj3(-ThGCTMs`M6}dB|(^q}m-D5L_+4SMcHX;p)~5 zlVuABJsfmCMEikhGpI2U%R<b3LDSVHJ@dWv4=$^Q4@T=3&S=H0#(|B-xPixq8;PL1 zScv02FIb#XH|uzP#C(`TmN^)-8`r^+L+~H@;V>j_)ICqoZ^OH9t-EH&F>A>|w@$@< zwJNg`9Dg;k_sl9oi|IA7I4g(I2=kGjrbG%BM~$GINr+0)C<&V@_+%kklF}0eicl`+ zwxO^xY&<b6k;Z*maaTTi^)#)W^2OK39f>~kdB~cXP+3^XR<`*0`_TwX+SA7+jShO9 zXvt@gR8OcR`#%|0)D+Meu%{QfwpwHL90ddRrMbJ!>R~?4l1Pq5Rmeqdz+8|`AalwJ zdcE554NSAQvXMFZJKZZ+k0P+}chKLv&cJhdX<cJJ=`_4JlhRN3Qt(c-1Uvssixim_ zwS2l`tK!G1`=8XVjvu)M8;$3(yPahYLedwhX<U#|KGACC1J($wP#9A(Ox+<gS-*m6 z={_7ML<bw#N3MP~Q31+34osajO98h}IUH_AJ_tj!E}#Z|QwiopKrHr=g_%S%!^|!J z_J)wizxggo=i+1Djsf+CS!j3Lr&7_bP6V!9YW@S!zNC$E$N~hvYId_T$kMuilE0+U zah$)%NsH1@eZ#-)vD8m7^&}DStd~)(lN;sWH#3p~QeC#|bbgPjwLnXH*Yr*c?n+6i zHPQ!Y2HAdj4&ysMIz&4ddPQO5tRnwGXCC`po0Ie%FZ<m}@g0Mq+gAhrBn|9J8)q@G zSirz~)3(2?Gzs-v4iq7~h>>m+T7arF@KqT@qiOzVXfSAsR>L-5X@sZq^yA)@=56IY zQ$CwfU!6!;a!Dh}VeB@);Yvg%IM4CdZDvRHl{-TkNYNwGY(`nOxUa+&7!CuuI}}uC zWQz+0m*jh06tq{z)=p3C<|t-aD2l}|7P#Az_Ukm7C6?-^1QQO=Q$jqUFXW2VW!1`G zEr%@-vn<7g=w5~O{i@`4(N~wLIkRkyT`sHi3ICc=m0abhMW|V+YMnwX?{>`1xMafN z&0}_rk8VN~oB`qsvmY~z2Q4LDj|d9c*)N8b6c~n2z5B`P|B1L_?;uX}?+j^8%XDk_ z^*FfUr#fW~DB&RY{zg8aTw&JY!dg>MAD&JzQ);Mo&!8V&GF8SqE4`rqR>^@(#l^F| z!S>7B<Tt$uuR$+qakL@a>gle!Un7h6IE&sER9{jM7EDZsYyCdvpE)dKcxLq8o}ju# zTBI@`uBMQC5X*gLoBPXFeo7+_RZz^Ewx|%md(c)kZW<?7uo`Ag(!MmIoj_2iZ?$D# zljsm9fp&DjIzO9~QBv?Gn7?WhZ4Od%VskP4wM6c&`=UjqcBUuUL(k>hO^LCQXP=LV zh3XriD#l5y_5&%o)wq{&%0-za!I*aLC?@~4`k6+4<l`yTqt;<EDiK|}PlOz3dJxQK zYhYX(mAm906F*~=dnG6E9f-U49C^7NAgB}bs3B9dvX#lQ)4f@P8wOtu(Xy}L?z=cP zh^s#G66eFM#{6N==Qz8e1uaE!i5Deptj!3^s-3f(LDPar8ilKTD&ZDVv0~!I3_=Nx zrtMNVjixfQ;+~Oj|DZ#{02yzi4d{=0&0VrGkt{Zwkgh24a21!m{F$q0J;d=xfP4Lm zn52&^uG!v|v0j+dCj@K(gNGZy{qU%gaHm%Q>Po2qfnun{!``f{x>l!r-*uyJhiOt% zlMd#@Z9{%Fe*cy9r2JXpK@L#Ks_s=$-^Q6V>t~Bz7ag`8D+`BVFQN;cfa?BtL9^Zh zeVWsGLHi_h-D=_K&*RK>+z*uDgE@nSMb`&HKaooLR2}<9?ZhjQg4t-hrnKwlQb3S? z@@0n6`Xz|c%u#eee~Rs{S*&pmpnX+n=9=mv(Kz1LCp5@lx>gwc4ZUl%$7X+N^|R6Y zSJ6}J0-^!;+Iavgit*0R(9I(leFa^QFpMjfutbh{G?Bz>gai{Lik)a=zy+DAVnFRU z^=T&Z0tIV&W@%#GmG>C859o4QR8u9q%ISqAzx7rR)_t!oWTNLB<Evk7kp}WjkJ3N& zcjyHM7H94I^Pz~+z%sw0fSHUZGN>hIqg{cKbLi05sK>!bI`Hrc)K?Ie;}>N$SXx*T zF@INiU_V_6d{i&u1N`rm!+n9nI?8div&!W&*ACeHa|SB6ItQd$t??i&*IM<8H)1rb z({o4|Xv%r&zZ%EbKWHnd(>XXKt`xA==GXPADhb=i2(2mr$=Wf0lO{B{F8Q=hR0MgI zsS$=5vzM!pFyg_(;F%*-^d;s~^%!Hnx?N-9e-#c0PX7VCXxNuk|I`_T%aTy0sq$Kv z2aq;66ZIY&_R$Opxj`jrs)uREv0TRIv>$v<!1jq4XgzfqGU&xhm&IKOctC}GlX#OE z{jUCOEBf*q|FGgXilHlrD78)|H`?<kNOk`!c1QQ}*)NIW{0bmD<)&+GsoaJRrgGv# zHUIg}PWB`Fl=O7%Fhs4VP19IjsX)!YNY94ZiA9IFW=3izeS$L{Sb2{7_P2`uddUWu zy>47xD>|6D0i(%WJH@N`nB6Vwxqdh!)sRhjGf*$NMvdR4d}*Y&LeU=cE)ZAK#bhcW zKt^36{?Ib5DUf76|71L6=2MBnAvvZAGKzt$<Y*y1LC=5@>6F#wXq!Y6JW{5-hKl_$ z@|bXG7sE>*>wTgo_%H8H+NM|ZCg!6OsqBhOL7PcF*-frx*duo;+n!A4ME1m&%3!!+ zG>EvBk03BPt@-70PZk@n&ilpbpWON-k;+dUKTVY^EA?lyJvEm&*)7kM_LF$DX^4J5 z|FmcO@xxS?Rd1LCa}<AoL7(B?p%ZsZ=G0g^dT|kkOCNV`DqR!9v+f{mF)?@dSzpMW zTRhD+3RL&yk;6Rccbi-7G!W=;MC$(7e}j;a&BhioC}R{ArWNfzIMtKb+#pllwD_i3 z@#<_+IhzNz^e0#-*WBqxq>ET?Bq(zw8q6Gfh}X!hXVnz1z2$5wH|n7!eIWTu3Bd-2 zSH_bcFAD(2aybBh*k3YnM;shym({!=V~+zDFdZj!(a-lY{SgO3X!-ebLge5zbR1YY z10jpXRc)I<b3PXJjCDzI7@$r@Rah-_o!sieS<i)sKmh&ky}?2G9kt{bN~k`6?_DEL z=aOc87443u=1*drIc((hNaw>IpBn0LC-&CzN4pv20>NO=kI?z5xMGa|u(fbn$%Tx0 z@R3A|iYgX}@$^s{wQhU$JG+X?r%26=Y3Y;YK6dUVbku(&RMLVF<%xa?WWc(C|D}z1 zsI-u86uFK-mZTT|$Q3em4lXq-#*|gubZCZ^%==LLm;agT_#=`|q(?+B=$NN`_r()? z`=yF13AD?NYY2YgxQ((%Q|@p}xuSoQ+0i0Fgz(?jzj~Uxi2)@CYW$i_811R`1|L}y zp1Pao{Eu$|agkt4?uO$m|5~Z&A3&qBRL;+k5lxp!q~a~;_b7Gbr`D)!jvO$_V#BBN zZh3LhE;3=*AR+pGJxFwA*G&22Vi5crLxIQ=%PP!g2>GvWYtUozWSfNXm}@7uRVzke z09eP`eT0uT0HY1J@g8T98Oh}till`B>cW(jF7}qjro~-ugrNKPcl$DI$0?>L=`PZD z8@$}nxtqXb=IJW%;-{}ihUnJKCKno*ZQl~9u*W(As2ik^mQWBplN)`iq|Y&1uxvPM zi;(W#Y5)6=M3C0s+lTz_(^Iabzb`R-%_7z0;TLx}NO66yy{9i7lzNX>K@A2UMG$+J zf)^|d^F5L$)%InWg)S83SCDk5?|I%F%`NQ`R?cBY{;A7lmGeS#E;Ac6X6+cJ{p^}w z#9zX`%<7svk?;=dO1;CwvS=i%fo*7+P@T_}u^I~emO&j7W@?mO8L}`~h&FT2b6D&! z(L9nt=y+?p%fbW6!{wAtiuv3whTnB#dfr`e<v28eC5;?xAcxrHa!jhg_Y7Ofh6)k0 zE7W`M%}<~PhIa%+0w$SdWthUtWr}W=a;1~^ARg+oWO{%|ab37>%|s07)W<Dd7B7@$ z<CmW3z1}vxAO>NHU?KQ;1g@5G(s8FQGWl|`FHj&LIycDCXy3RgJd{yxv}<V#cPxCc z!)llDWdJzB0U6JG&5Y>wPboIn?JLx6*&Jmc+6ZB%Y{2wk2J2~bgAP?U3qk9wY^S|z z`n4UP^sH(vi_@wT&<P%>nvi4CcK*gNo)0dude$SgMmilR5%=to-i1R$1T@7Z(S+qZ zU_cf+%<7JZX`?UYh}7JCmQw4G3{2+!FvuK=>nfR~Uw{)(Y3?Cz{RI=fjT(gzqQ!Z5 zt0&lYU!=QsZ(5F%2^x=H+mlw&^e!tM!itu@xCJ?VEM)7nSVH}jEZEj#+<c^~wxJMZ z>|y*-Mq37~#K>4Wk#YE(#_hnbor<&GH#q3wW^8Xg5%A_ToZ&)~_*C&MWpRD*7aA8y z^E^aX-}WOA+oiyq^ZIWtT+%`tm31ni%{<^S&VQS&)aa%o*XvL<R(O*B{0sAd*4w<T zBM8yg(x~^E-8$w1SSU9)UWXsCOQ)q=7*7{B&GLrz(H*%C+3>NH#y*1~r{V>y=rwy# z-;5|n`ZE;VilYH6AjbGM7I1Gg3{!UeHWu_5&)D0#lkt5oH2}v~4z+YDq2pUCk>R{f z5{J*g5Vt>!z{}h+LQiiiOogny{Fo>^(6WSqSBfWW<qNBWRx&$~jQ&9BcI=F@qSh~; z%oK@+t|B41%iTWMng|+`Ry6#vnVO8-YR3?1l_&!BGvJ7>H|t=QO}ulL7bk@vm<LAS z&CH;lvN^U}A+b0IdV5c#52rZw)F;%}k=84jtH~W3<P3y={sYPjso9Tfe8$YMVyJ~~ zt8<E^)+U{2KLPBDaALqYlf$)R=nXp$1JGCxyzr;SqgP?0Me`WoB$C4^2uYv?a3&X= z=l{g?=F%uNrk+uu)64}t{w`9W!~f3U;bZR-VeqZumg_D*7bw%6VyLCpjZc_ya(c<s zNXKT5UFFFIE-cjD<6wkop3L~xh5?SGlry9U$yML^chKz<D>E9q8D*7?RD|Z_{J~Uq zP%x3UrHv#}K^8E#XL%jEu>EWQRAi>7bZ$Ga{X!>Z^jYv84zreu<y!Y1vp2Vc9L~(} z^aP|94-Vm*zey7=N#dDkjhQHwHS&iJy;DA2nOSFZt_Vq0P;{LhnT7hzKT15@oA>z{ z8jfM7*R}vaJ*bf|k2R!1dDZN=JtKRiLkyCaVDpwhj1T+oUUFVDz5Albe3&9huREYa zYxLP&)sTG2yR$H$mKq1g*8vqL>#X2Y=Ndgb^LxpEXuT_gG&S*Qk}YY7;=_*oM?bXT zaRutPItb(!q?l7%R-W-ymU<~L9i5Iqc3*D9&zu6kb~*mJ2VX>Mz&Zx-&mnMzBfz}x zIr%ag3c~l0$01t2G2<xzI`-ip!P@3N<hA~b?l%w~fjo{Ig!I(0jTqrNh{)c05<PjL zx1xyF2Dd!czm7x*)!e@$KVtn$f&}Xz<UWAZGe6jqBXR^H2nU1=TXHkY(?E32i0XoC zVucNWl6fJ{H>t$?QzT*i|J+uPQ6XSxQR}WTL>Q)|AU#?WE*+#jJL_^~q_MsP76{Up zAXHlWtMZIa9XroTQk$dp3+fieTkfiV!aKA-<$!WPg?Hznm*<TjQ`N`2jqE`Ful+hI z730oRv=J9eS%2<ZPdbdd?Yu6=GPUg~o|aL~1bb(GQ&0S()L@98IDx86wJW24y!!J{ zg=6aODI&8oUHGB?<nOk@9Rs(Np-&>q@5>uRK1J(T8D9rN`m=;AI^kMa2(8M2Kk?|R zc_7VT6Vl*TLH$|Z9<|yk5b5tC)x&RB_I&km`<86M{YktR5xQ6075`u3YF^ko8>-xN zIY`aWRBh<=Hvx%byF3?|5-$1&ZGv?3JruoTmar4dm*5VgthcY30`8tNITU0Lskv!+ zXU+5t;hOz7RSU1V<ubIO=F>*D;yQloVH*J(pYzpu<1#%TmsrAP{>{}s)pPRejAmr` zHTS)__C<P0m{OP*TbZi^yy7GC;>V7O*1rQAmV7*pW)D@$o9YC3?1Yc<*&M~X^YC~R z4kb{Lp#Y2%N-0Lvf3wlvCHra=X@Y>^W(|L6k2%EQAF+5t6l?|=1jfCq*kVB}Cqqm+ z?CX`UT(5TIO`MllYL(R~u|g_cLJY`iM|W4t#p8NA%2rm^!gR_i!;~J()#t8kJ%LfE zSAR_qsl{TQ5tU{1fA5G37dF=zP$#F{+CYo)<!j(N9^R6}#tW^qWi$&HyQ{CptBQxj zjWOQ@@)=moD#B7oqY{$#UzUl-E8!m9M+x*49Nn6+PR0r)^fBv1GvVRt0o=L%`wF-S zVZVhN*~dk)Q`%zcHh%C#fv^o+5Bk7=Ee770IuSE396On6tb3osPyFj7ztGQ~Wj!-& z_?4tHai-lVC>sjoSLw6)ex)4NC!fgERuz0A?4$h6>xn=~62UyP9Ou_@9D%2+yMiM@ z13p-jr2kBZ0|h=cQH3D|<S)00Gn7anQ;wqWI8Ks2D5ACiP_0s#cLs_T{MjJAzxMS3 z{2dr@tH{}2Mwpb-&$YVM+B<fsunpXwy50MK+DnYF3jjLJtF?-wo0j%-z_k9vwo<v4 z=#Y0f<7ZbkAqPbo*?g~fJzL`5nG7GY){c6(n9`M}E81-MudF;%rZR~h`10U8COc6) zLmzMUTUAm1?@x?s%pi_7UKjzk+Gu5@E7NMY-v?t`8A-k{JwEvUpEo19e_Bm1$rON@ z@5how&>C{$w)0a;>99C8Rh%xzy-YQ<WmZDDG~H(#R|DayGfK~IGz)vkwsSSU5uK-0 z1Zb<s$erL5ZhMoz)%;{TnefH#8Opw%@b9R=bAE-^a`zg}!E7V!vjeVy^tYT1E?=X> zFbjuTCGIH!1`lg(8h?kztnf2`cHH!O+N;o-FkcA_E%HKO-rrx7>V@Dk?nTSbk<i$B z6!1_a(Q>eErAad-#;bi%?5xYg7yK4W2JKz~550N4OCKTti=fYhIj01)F7ZTwUQc{0 zZiwjO;C+@HBlV$;<3>WCYTMaho(<H;w$9C2oh2ulHz#)B*=E2@!|CdHewB812{e2& z=weTRswhF)e|D*Cj8~+Qsav>Bn80-8FJ7#8usKTyHq{%>dyY!;<8PmNz+nCNsH#>r zCuc5E<rFLYG!XIMUdny?XEfs`cxsnN3sL8gf#`g{1?(Txkl<;a1hj!&+4@>6l#BWu z51Hbg6nZm>Lec?8j+v~~eR?o4Kym5vb|_sWF={%zAE~s$`FBDb)3-Nf^7|R5uD9y& zMtaKy<_5M*)~m{TXDR#-jNA3$F<zt%(y=sADpFFm@PV{MeNC0^w8>~0)#;;!*LrV6 z9g1?GGIxGXTQ_@&){BeZE=_eQSxG`9k62!j4y6%b`0WyH0$@}8x|QXrTBK2C8P?I1 zWC9d#ShYL)H4jy4mVs02?;Rg(3@vdxijx*I-795})e9nRG<z}GFLTkQ#moEHFs7%E zg<ViIWPvY?fc`PxS$<F?)s>=5xi7tx8wt9B)53n+(x<H~u+&Qep|J~Fa1O>+QEG99 zY32N!`Hpds8BG71(}$aLJ2O{9Xxmh!eh1irx2(@{t8v01dyZFM#lobn%Sx@SJTgPk z#@k0*MdKCeaIdXZO~0r%z81V=!R&M8C*m$dRN{Z|dgWx1xEMU_^nO|&P{Lr3Uo^9x ze3Z~yzAG~s{UVrmibuTcWD~r~8|%uqNd1LfMfO$~NZ@c{LaS7<yxDFBv6wYdw{51# zNp>ZI$!fWoD$2k>)+FNI_e%KDy<dK0tB_59QK3DB92CD^q!hq~)mK1)k!A@?Owvq{ zb6?<OWYi1mkgDnm$H|tr<$;a<{mpukz^c-Vfs5817798H5Hd<8`i1I(6#Uv*#tP2; zP}^@X9_EaEr;b}-V5Hcci<WG{a-SM=#h=nJGb1FS>GT}cKWl<yGxVjTB+hPXeMm8b z#&NB2E>ZU8xE%Ut{PxW~y%Z;#Rm-FgJZ~0QPnjF{Z@aJ7NSbg^#5DH8TApc{BL`<G zi9~=d8$rs0AC9yv$=(><4R{7tD>Dwf`D7?&Fk}%mx3I*fdc1g1v%}J^W;Y%mK>d@~ z;e{4_9R%OMND}`V`8m~G@gn!$_A)>t6;hd0(GvLk{Z&c_=R|Z?(S=-&q+r!Y$+3J2 z#2GLI77q1nTYIUNr^rU1r$uP61Fdzsbv+7R7DiNzn1Vk_t4rtXu%Ky5TCk$}GagYx zgnA(JrM@RYtGabKJ@vS|e#*f#I4PL_(fV~Q=y(h--T%!rdni{9U^qCP2H`)tAoIPr zWUejqq8&ayi2Vtm`><mA`bi>s`lBo-nM1y(@uTX<ap0m>On|{3IA`b2wH;3Lj=w)o zzgfW&Ct`~(R*)!XMf4#afgDW6TB)iC&HHfDJuWji2#dj8I5;p(^cS=-Sq;U+gl2b1 z+9Ok#;$=A06$ASL)27y#=2{J~MExNROW1{I2J>WGmp{bPI_$ymVf?w!gX_cI*R@NA zRM2f}GvY%5pTTb+Qxop=VM$)V5O|OMP@#M&p;fy0*&x)yU6y_8*9L;5U1-$BGq~n; zD12;yCNSj!nDgV&FEo@nr+KP02TMx8z64s|0KzP=YnlrSL}$32vP&M+ihRqixA-Rh z*iuVP7N}4Gn?tgqsee$s7jrYdkCV*=VIJHdJaSxK_>$0fzK7~?Q5$~9&HYJGHt&ep zRIbeALGQ^uUEp29E6AD?hj3X<&UhiTJ)(%2EUrWyCVi6-Exm2s_|>8s#N&1B(V4n? zb?u9KJFT!xqc7<Z39{#MDs~vsw3wVpV-0usYf8%F%8IRA{_`9cGS1f3%l20Z8s_s2 zkomrMU6lDm=g~9mn@tEv5jV(A!Y_QA!prknC@IXoL@~j&^IpG*%|*8<Z?3Go9c~Cr zKZ8ZA)B4^!)>@M`qB<wZ28R8~gn!uNv*1=x5edP%A1YfiBh(UoY+7!Lq;!TEq&_gc z%Z33OD4ZL}o-e(`*q|ltOi~zlv0NjE52Iun-y`SIaI&R#8fAQ_#WdjkEaqLU3D<a_ zYwI!J6n;M+4PvJA&jsjxWZ_LUnr&L+LQ09|qk5Cx!j@xO$dS#q^bpCXF$jSDUaH4v zH~b|kMdEPdlRcTW6Gz`jRBl4eoNZs*d7@VqhFV)o5+CEcjh)GoYD*ud{!>?cwIJWc zaX2(9zMU0TPjw8u0cG&G&$nc7{2s$&<0s<E=Jmf}qv|XWGEGn%lxG5o8EPsebTf=1 zTh|Y_a;!R8CFd^cHU(AQ?f(H`nICvXkffkl_Az`mkyg}H5$*V3GxBZK;Q~0-zl&jw z`$}r{OY?<jpz^h<i<oG9&#-tDBMaiD4KpY1xAIwL&~g~a@MNz1vpO%P<s0Cj5RM+i zGOwuoc|B&b4ylN{m0W7lNw&}=w7f)daERR~HZT7N@+({Wkled<UKL2WCuB2_8Ij2J zkPdnsg12M4y_U$A<joi=h>>P77I&yu0)Bi4yp1(PIaDyi6|fyX-yno`;_W!PLDbGd zwu7(k$pm*GvC>zIx04nRrESe&<~uI}Z+BV%QCH-Gy~E^I+h`JcoeQd`KQ@Kj=d$?X zjyEjb_qj3;S}wW>PuX876Gs@v#HLmpEh;%5hJtn@iOk}WRtA&Xi~Bkq(`AdzW@QII z;bCKx<tySdB(9?Hv!6OY4lkM17Sf`nGH+F@Kb9xpt5{YX@HZ@qYQ2JR3n)9$r?Q>W zH(ppTJ+lgvbr%<`H7J16l>=&C_0h+O-FZO<JzALIj0I71c&vXx`A{8vol6NQ39SBk zY152$9Vq4Y=-o*1tTE?h=8dJZ_&L8-Nhs(x+({5(WDVoW#Q91eNpq3>zC@1Pr1_&t z<?k|Kre2Ry*7p>FB#_g{K|1US-KllGSRUqfD%E!6>Y6^(M9rK)IYX5|gdX?S5k`-J zn(|NuyntNag3PME*Dl>0CAM#CWX#+nVC^geX<T$AeHZk`j<~$>vp~!g<87M5Iqh#% zn}Fy`tKMx}2xW=+pD(cDzNAF2njxQqYU9?Kgd)<RszYg@zEQE<M<46o@%4vin9(mV z{6tqIf*ytg-yNZpCZA-BdO+Dr6<5d@C2K_BT$P~jT;i{*x-}4YYf>>W^krWU(^JS4 zR#@mbYIhVaOQ&i(r}0WC%QENg83KVudg_(G59-~6;whbW>>ch)DL4zj?=HVNd;V}@ z$a%1P@GFy>wqOiACewvm&;aYvdS4nDK6lK2aYR{bR|1}VU1K@ba~p5o^1a1HG!^b0 zW02Dqc3|)}VymA#5!3DE#?9U&Q{x#yx(^+N)y*Ap>knDcz(kxfcsqGDS*)*}17rPk z58^lml@%0w>vWJb-FUIRB6nN0g{&DZUX#-t$sJ5N0;3OWqo*e%%BxJ=lcUIAPC478 z+n=94=wlTZe0F$z=Ai`>51Gq>J~#-}ZaPn0DgG?3&}%{<ZAdwkM0XUG=R#u$BecB~ zT@`ryTlwy;L6Y<0<;E%q^-apqLTi6gXNHp;m<Jce4g&s|t<8%<gB_yVR<Py*K-{^q z>|(5uQCc@J4VDs`cOSZ%(aSUIwF5OZ@AIr8UTM-0IiXDPSp1A&Elz&WwIC~II6%XL zy&^W`!=>R8fmt-kBZ6>}50@#r7H$fXz-P|^Y9>)23s_7>^<pvD!6)VBy$vU$s|xh= z@v^bgt=JkvX)v1OG9vd*)4ZVqW{C5p*!isat=*{w?0S6UifYww3I2Xj73f?n2_(%9 zp6WSF_^UF2nRo7weH%eJrU<ktnR+-vij<&AlJ^720sZnzOszDIezq5tBEdw_%vVRm zrf9?AllpL!D$V;GXos6ji5I%6GO$nmaGRX1_J;rjSIS_y!zHFanNk6$#3}&4QlhM; z7bu8^;q|F$4w~lT1h{!>QCSYI7hBOdnn+Nt&m^MHXemN4-^}Bmt3?hdta|0VXpwH; z{RX`!w-PY|79f+7vsx`#e}G;}T6jaot8|56PQ$ag4%E@h3AWeOVR`gy`oP;_3>t!z zj&=N~ImK;pR*dOhaKFOay$sfk;xMgP{2+#)!r)vXLw8|s@$x`Y0wzuLWvOO96khO} z#~}fFaFnU)mZ4~RY#u>L3x#d}+f>YN&c>vQz-F0pE?j6i6eoNqRMt5Y-$$>8U&~Kl zFQ$hy7_Os2$r^HPYZ>!>vNE@IF*@OOZ^y6OrYpAuLItvN9oDQGWwG2<ecM!0e!EXv z(P6PxL~<o_!>g>=hBO<JrAuN#NviTK{cioLHa2;b@55_Q1M=+K{@^d>u;*8-Rggyt zx%!+AeTr4O_0@z8aBl2OO{A+0P`k<I3f$?+aT-1>kG2Qj2nuEMD#@$F!bX#ehN=c7 z$H`PYrxJa>dv6y&ZB}tDvv*wPQ!v?gLQ)hzx^5ov4iNe@1cfQOe`aAIt*P_##f0j4 zc;mn#1R9re$0z-|v>`Pe<u-55aG+KM!dBOJRlS(K7a1I?KiImgbdCEj_QgVsZ7idl zzS@K)A{DYLtwaY;@z~`G+<#2ohHSiG`W+cG&voGvtDkro^@20#+?ap1IlQ3F*|AL4 zPs+j!Vu?#cVWnXNjI7H|p{8e>w1(MWGPGfjsd9xB%NfOTgu4yTgT*+e@LpsCfQc;+ z^V(~V!c-B&oXXFV*eSW?g}h;J)?13f-Ex=QUqG7}X^dKAMU+1;aCW{$nNiGHTySVu zhxp?U%!>_{^$WDG3@<iRC@;yOw+X<Ce;?XT0PsVniscI1+I-5``ZhT@z<T4)cn56A zWq|8=r)4@&q&E4&s#hmE1ovh|S}gR`)vitATEta3vL&A>wpnF^e35^jMX1r8{7|ah z)N=&t8)QiVEB5qE9EDi5(g!jy7#Z+fqeB}}|ES}%Pi)b_)-XO!*CN*+8`~BEmgCoX z9w225*WMN2qsHg+dd4RiC0q2L`KawgehPDU<gQeQ)_>$VqWl(*rl1M8Vim~NVH3dp zTWUCbaeUus?`Qbw1+Y`amZ*-P$^^LnqVAcVVZVl$>E#Grew5{>DE2k_DpK&Woxd9f zgnOMTu~@Cs!i_Q>lAsw)6RaBOD)H86|G;J!7EpJ&JhPD6=)5`UQ`f*)03G!JlFfo# z1j6sU>`-C(d|!&9z4zuX{F4#TsiRgGLcjd0tZ_4J#J8b%l!J7K)XNcW8yvc9&+kDW zXpJ8IRvLICu=_=4^pL3OB`iX((K=V4Y%-6ioOtXblMyefj@r@4*nLY99)U>j<s@-z znr%Mx;d2P+wq~CNL7oBD?HBbAwBUXnEcqR|!WrG=j7-p%D)6S~ygZPOp-sv-q-5)P z#5XJhSp)(&ShpaE1K|ru#BdH2nJWbJ{6h?*x&q?KJg^DAr)VyPqzV6^g#vqtM531Q zx$AJsU09Nn0SQ6)-~LZ$M6B)}^#Sxe=M{tmi6`w1Meuydmgfg;<iA2GN_ii|KFtb1 zjFvvs6Cj-meXH`mvVe5&nmB)4l3kg9ayWfdVQ-%q3OU;aCTB~N1i81m8SrppCJ&2v z3FxS_s^kD-$9xeI!*@TH4QihxHY+MmFtN=<1;2jcaf+VPkiPTr@`}xYPJgNBw1hy6 z_)QH6&9DiMoA^-bbl~gF(DjFnnJ;rYG?A;6MFut861Dm4<N$V5IqxFa_dP4|-lJzb z^KXuf7{bC+_MM1ji7>daMa3aev3bx@U5l_E7RXpqi}Fhtr*FYA($w!u>^>s7<Uo@r zQ~T#XQJS}T_%KOzCR%GXEMpC`FJ`Q<+<mfuJG_&)@%-yep~lmj{G-U>UEgkmw4^s% zV1~ae?ExX_1hS&jPkgdpn;F9#8^r}SA`RNXV2_@zLi7+?&_c@1er_zw`gh8*cS-mD zr9rfnEEteIh3HkvhWyb*c<#QB`^6QcDuEX+AOYJH0$n8A6*FuGC`!{~G_q@{Fs#Ja zNhGM!w+K=AvW~s@e&L~P`_*!awlGhC9iSa7hi$`RQWIr;G!#CI{&fo8H@A8)zoI+F zU)&ce-tf-J{C!N|SBZ*vpj))i283X<BEFPuYI{BSxlE`0ja<T8P_hnXin7=7v%sB2 zCIY9TMC(aa-^;>OaC$aqVOK&9ICG*KvD%ReIuxnvoqy$)q}Nc!&QcY5VW!A$`zres zl{W$;P>7=A@vYKjy&Oox|1FNP*}LL!en6r#C=jCM?ZNv8n)cg?lY`y?rX!3=NMV91 zKw^)3xL_Diia#2SS9Jt|h0?n>EYv1iKc?2|TKjrnHn-cwI|o9HOdRL&bS2uTn&%eu zJ{e{u$(_pX<LJ~0`Py3LvWoPsvqLW|vXke*I55<lS_+@bB4yTUJlOSgxwg1Mp<STJ zHmC00O?tmw5%fXV6!d=4&t)Z%w4}ZEjE{EkE|Hj9>o#O5r^J^a*HgUJS9~KJlUJu^ z1CQ|V{%*K-L<9H<1a#4&SD(ZyI{u+u-HYMl72(<%!)bf%PWe^368DdKeVkCIJ5Ss< zfELw(b}&D=6{TRNYS;?{JK_M<ZuZU*bznxGWK6VtWgRW7oaJOBsW5n@K~rTPmci$= zRrlpu*G~YJLB6;jv|Z`zKgO{5_lZWH4I8f9ui#GAaucS6iJxT`6W;wIVFqrT7thyK z?kuu*ntlMyJz5`y+wNENs+zN#yGH=YcF~NBJhxTnTLY=Kwb!APA#}72g^AW}?kPqM zH&1p6{`;~?J({kV;XTHYD%!U8$C)!9LP4ql*<9!=b&B|#3P7vb*3~S@J(+i*O?234 zA)&%!^4Y$@3E2;xkUp8bS0-?il`N2F#JpOXi$P1_mxZf^B*ntA%!)8N)S}_ye+TA? zfz_v%fVtCt{4i5pnR&8wRdEIvmX$*VMxqMnv;w26P>hHdgba2#bzP>*n*uUJ)4%ZG zLA5P<V*6?Wh*E%O5E3qO1cFiLMNZ<TWP;RR>=vLR!Cn#{Q$lWT|FE5uGWqR(SYIge zl;r%0iepb#?LDD<b9LoYn)-0Zxca$^R3DC8JhLyF1`6!j`9viNq$}cE5XM5_7#NkK zFZP^{G^_HJCLHPb8BA61gyttQ`mj3i&KT&=%Rn`Kj5sR^FJ4Z6U~NPsfS%J2&hkjQ zjji@tK=!CIk?~)uwY`4Ap$9tL?5<K&^!d(tm8qsw&_eq&n0*hK1~4<vBa#J^rs^XC zUu%6U!GE?lF3=C`UgM-@p+#fMyV<x>NZBX6WV;*XMW~Qxhd?;+*DBVw6ID6qNje0% ztw(+*e&!}kOtbW!e3dV@>*QI}!kc3|Tf=#ukFojCE7z5k4!>&FqLawg?ewcF*S}S| zA6B?_HO^O=Z`TC*kX89lDk(V_FLKg<W_17g*)=HVv2HT05%f+6hb5^>DYx!R<lF=z z-hu38)(`nClj-wG6s#^97Gxw_(&%p|syTJMx1FzaC+&p7z;v+UE<(IPjz$o~;Ou}2 zp@S$eTJUuqpv>k~z)zWUd$R{#nn+1tl+e2x&A5)TxzJM4mIJDXHL8@vsH5#dRc-d> z_{dK!`sEd$K=fIHuO<`I<NC;q(pj~F^}>IY_K?{^BI?Xl$0p0&IOm<jOm9X7J%0}x z+d>i6FEj;lOJ)i_+AVFj;?V)G9hX(|>da!0=x1eQ3?6+i-m)|bGehtD#caQmJFT4q zm}qBY1#8RHV2l`>e5m}noGt!-As$4_%XZMmUkuLDwct}Yub)&eqa`#{;JAG6CF|o{ zC(;X;1!ci!t=#Y+7!Dz(W_dXIrsEppX-2PqEr`)G0m$WnPF2Jq;*)JscWkR)jShw= ztlss_SPU}M;zg<1L%s#<6(TZgZwwYeWpb_CN%Rw;x*gp#-j&ll2CQ6<q4G*A!&7cb zT=AGrLPU2Y!eDO*i7o7{tyi{G@6Jti{M=1l6RU@Ec=G$5VPXibc=eFjbuW*Pep^F) ziK}xVJ!KsTKe91)atWfo&_~n%(MwxJ{G&TT(AUZ9G777@0u=bUwqtE1k--;C_AzVY z(dFi<b>?XS5!j(C%<217JF!#i4UbRkH^7<fp4{C!?cX#QU_es0;u;1~qn|<$@0gqX z66RI$Y6SDDkcnY0+VrTL#zPs~VFR45+#~KI>{6G62o1r>4Ca*@OAD=)u<CAEz0qVB zl|OF6^JZ=p;MlCM<?+IQHq$UU^t}<4<o!US_F3^7yK;albCaoEAEP_%pbrirQ=COA zizg6XZzLb8Af_<`Dy##s3#!Irs<xSZjQ?VW4fB0$7^OD2Hw)0Fi;`xoCd7QD567%_ zG517*ZMGOEAyU$t>2cGLSNM7rk#bhQGEMt$9Mn?J!nteQl^1g|PxwyH20zQPK{{e2 z(x-WpSh?IZ6(TEBxd0_-C0)aO4de3aw+KUzb_ABisb-;GFr+Q30;9)eo9>$J_Ry+g z8bQJeJ9s(-(q?D~s3>TkaVJbd6io?0_D+_u@RU}zy7g5acXQ}*=5U{&WS}y)R1R?w z{p^Qp^>po<U1lWI&rg9^@U(kx@$5b-ET#wmntS6}0p9#8WsFE)BcN=Qs<hpkJ8Lx& zjPbb;3dS(Y>HRf%&G~`3<qaJQuQrwuD=bJvlGt^)h)}(CBmaR!4QLyZw`y-QMuz<t z!O1@SA16~PDTsiJk8-y=$6L$QOE77|9gLs<L#+J1XKO_g&*{*JRe{8r@gdO-h29a< z%=DdROMa?EL=`w>3`(a_LO5%$`G{-Re)(Wy`mNPAzm>%ys)&G8ef3E{Hg*0?Z}TZI z!e@^aH!(7Xkb~V^J*6PMqyWfPEVsd%1>zEB5>??`-Go&@ou&SC-W|6_7}N`3e`C!v zOm<qDo9xCWlU^kQ`1z4NrjUHkq<HPdyQ{nzh_z-tCFmCMXS;aL6)yyI`MnmTgAG$8 z<}Tgx3fadde#z%XjB>86V)X+b#R<0i=#mFme^E-0nL?FW?hTDn#{zVC<mB^jNsxA5 zisj+l*;F?F5n|2CV%R8_8@PW7O~-r=GC^irE*NtX;Zc8=QXo+=&x)~pE!LIMy>q~G z6+_T1{pSRqvA>mtyl)-+`@N+RFre3<SXxu%N>uOQGZtHJ$I#!TKp*R^kKWf`FrA)7 zA+%XZ&6RQT(7d-$*(_r@)qV`-zK%)A{S>|cztGLfv-<wKvJLzaHdn-7&Q!x-&{o`6 zwL+M~oA#r-<g{E%C1ZVXt~OS5#wd(NOqUicBEGRmR$Snt9~IlVW;Ev*ne=|+<YC0M z3KBqL4^1~}5c;lD338lQ1qyWHbjG0)LCFR&VZH(oD5p>_>AXp?dTslKV|;*wj!V7i zwxtFGU2#D%Bfv|cS<-ecGN?8V<m6^X5y18w_9{zFk7jl2*_-~R26G)JmDwC<iFWW7 z)|V#$B-Rf8!z^HKivu%!l=B_aGm5Rtco8UAtuAcDR@FxPuq-<FCu}P*R66M~fAU53 z^M$Zl#6*gz(W0PMHrVAbV+3D)z%pbF%*!zrQb}PoUir#FQBj?VhR_86lcCk~c@{wl zm}(Mc%=<XM6uA&y?cnBmZAG-1vS)W=Fef9&z2tR5_^Vv#(p}@O9W#L0#6$r|F1C{C zJOrdH>2&IY0=@$(pa|a5qHE!#*B>2!^OOF2<C{F;?31Q%zaMbh!JmUL>L<n!1pRf* zs8o?v4m7abU-@$m)M}#Ztj`xW?=AYC(WexnPecL5zf{l3x|6eVtNcThAmJR^a6)pc zZdoTECd(xm?cm60P;C`KeJPoOGu^Q|5TRtAlx`}?*HbSd+d-aYyqRbKl{9dRFyKH* zdG^w4z0eBzfGC~<CmH-Vr7>froOz^|XrJ|K&x{2AidG*J;9MuIPYhZ;K;!KK9aPc| z9%t=X71&#)anDe3Jsu|u@zA`J!m4Na^eheAkxv70$il4BGeHZc^X@k8Xm2<TJYT|o zf9E)P5GJwk*JAtlxpnF_ItJ8wZ|E#x5ob86LkdXqQ{A&FBU^7+OWSX}-?J8?J2~^a z1r?@R`;z1cWtP5X7e|JbD<8%2;AEuRRABYm{avlicfgH&UZ^H*+4it6#E3jc?<|iC zXIJXig1(9dwpJlku(Q5O&^@yf`pZIq#cNb`si&~f>77%@X_941z7`^I3`S6}{|OvL z(5q){lPP44iV=66qW#sN=N2)HqyM7KC$Sn~#(96IligsDf4qOBdo{?+D#g4b5y6~f zpCuiwyB6VKC4_(&N&C*_kYO1T&%gZged2&4{R8X4DeL`PfM0vBeFzQAcl@;iY)tcU zyZ~|M9Vtx`$I%X&-s{kiJxU3T{4nR&HGQuXf6V3%yyb#fcs>`Gv}dJ8a42#<edEuk z1NzZL$jQxRp1M8c3pkJxIWf!<OZ6z?HLVp@;E^Q?EJFo>kRem(rOr=6q7JZ47PIRi zd5F^I<(fX+9hX7u-2%5y>yu^z(pD@;t0a?vDITOhrwF$MG1_V~)$>KFwYOq?(mSMj zK@sTw#W<UK?A$}Ko^1;g3s?3mq<4l*;8}M}9#pjCEA5`U|Hvl5*z5%qv$>5F_Yaoq zv+-a*qSAzD*ulIozZB3ozV0fSD!ZuEX}NsEIGyEd(V<BBUSE_Q)cN6ek_HF}8~2L> z9sZp`K2OZ=%}qGe)g50*#G%XbMIZyfZnguhUo)B^jNT;WHD9WYpZ6_&a~R#)0l8Y3 ziJ6cLyID<7^O8*t^zuS@7D6)JvI*d{+nv9{Ffm#juI+|kH1|fhE}U@Q^3Rk~f90l) z)aY|t*t6DKMS)ez41YaY_H1x}ehHwG0w(91B?%TR+^hrj>wX8N9AGuK0U|?#SxA_* zGKQ?g+H(rGDlK6dS(wAGl`R*e+g-To$t(|b02<`358<97#tK8rL^H}>F)EWSd~OTs z8IfRw1u)ivvNCcEn%<+rQkXicje~ERE>sw#E8Z6mHMi*t^(xP|K+hw^xYN#c-~=UI zy?6PF>hF-Ykn%41Y1;A*?Pk89+u&o>(5o>w?E=9U>KP7Cqh|Sr8aKMQMNrTWsZPJn zg^CiUe6S$W)&9t`j~-N$40lYQwwj)lE*)Z$clL$|@e>+$@tf;tv3=EpXt8<EloqG= zl*wz3bxGqFaU_khE*?&yl!2$|e%q|!PEExBVe|ORe=Zb7l2n|PTUYkUN%&ws>d)a+ z&m!sdmI%`y+4#OefR4C2L@_z1?blb`b6bc*Tayz-E&8WYZcn`KDS7(+LyTHPn3&Ea zb0<&l&$7-N3c@Vuic!Y&?{^*1uH?NdB(C^7TTk5l!?Si#QKh!SsZ6C+Z;W#_^hlCW za0R+2Bmv7v#bgiEiYQN9f{c^#i;>)}>B!{0sJd(yOBm0HCs{wC;UpegITK!oD%GxM z89nU_;$B%lW{HiELIzmAl2>jn5Rj)bUC`*FKti!$O#1Sh34o?6c*aO&zGW$e=)lik z+~gxjT?K7M16W~WZnV&dg7F8O%D&KX+WW?jN&Spkl@75rXBQzcnEKS!h{RQ1WI4|I zvE0B@;_BD~(*J;1V>L*AG|hR6N4tlto<9ZT@`1SJt=yCGuvvki%`LZ$CDE-@P(2jL zJRk9a3kt0KJ61teBqEIB$(&A5VBRCY*0cHI8m9zenQ71$&{Wx(I|99&s%6V4cG7+t zro;k%#e(=7M`tVuaz6%Hq$MlfirGVh2tD(v7b1PiVo{fY;oBSjP4O?}2sSEe0t4jH zdE!ral!pxO)%kye%I15E8&uqiiCamgj^ZYSEQV)PA9TIN3Vl*@Z4c-h`{K1cC*MZA z@_j(CK1q4}qNi|;9Q7x3^4edaEduP93qbzp!_Z<540~&VXLm5iCZH_KydeM=Ah#lq zudLpvCb9f@QkzdW<gn&^*zP=4+k}j91G?aQ4kN$N%v&gVqKH}bAn(!H1geW^Rx=W2 zavNIVnW6}K@;&C{!MMm~HdbR**WbN!wvc6TAL7E|Naz)!7*Vz05A`t8KOCZ-vw{)O zCDBhM?6{1_b798gY<yp9uE9ee%zpWmP0Ki0leu7+yE_(&fejI|?+6AxM~Y@Fl>UeI zuzIZ(Szt0cgH)d#E;Rue$z8Wl@A_`EoIBo*u{^zr1|+CSFAKs<&=D;YukgAi<)&Xt z#g3KhpgUS)%7g2i{arq#t7BPmU8oT}4)X5m(_`Pq7^}LX=et>ZJ^tiYh(fR}8|*0{ z=#}wZl6rv^^{^xDQ|#{N{|1BmJYuL3i>4_SG)(J@_btDAJN|j<ZzBdz`*KZ2S`0n1 z7Z-Z)>o9Vz?uY81MYT7I#4VJWZmC~SO&Ok1Sn0c76`<5<hrKgj8l=wyi6d%W#3?fv z%5gXZNyOVjX9Og(6^UkKfC;kbQ|>esC|dkaF}$um{HSOYy$r0z%2jqFk$V`pJk@gr z;&C_X@y-K`y=`YRJ8eUhdOiqAzrc7pKRHqhPB3!%G5YDxIe^nYeeXH)QSkAU-9KCz z0sWxWUWl3k!{aoLn365Te`#r}X4gMOb<+q8P9k&bKV4gOA(ELH8URXJU}j0z$3|sm z?cD~@8=f{1R^3*|beUm)D#0QwIta~t$GaQp*MogQx-mml@0GJNo;OjTi^g>=C<SE0 zpz9@rJIL*xuMmVxgfPWS7?b7atY);SVU$PxrlYl77M!KXbHnx%v6jl&P5M0n6L#^| z#Ml%ZQvz{TZD4JOzKtT{p`aE77fhe`f1Ow;OWS@_4{~Q6a(v4Ozx1?pLe#qcez`*S zwBVK9v6)uxDXS%==#nn&*5KK*k(Ju&8^h5r;mjfxq6y^J)XJ%5bH8>R->{n^Dvuf* zu>Jlw2wFk}ST$zymsV#DlE6f4oZiK!&<gxjU0hGex!|fqnW^2645qq}YSf1U8y4pI z;;8X-itj4`YJ``nzP#nu<Pl(vO`?6;7n*Ov#7j*PDU<vcnktWPa_Mo1BaxgV^A*aM z*TEVa2ZW{=HPb(t?F@n5mfch$R5?fQ@b43yax{G$F{dUZMl{cC(Gg`X&ShYg1ws`< zZ@JkQ?>50;D%1VApxflU$hQE%XERj^k3*Jo$GUeJu)Z+fc)f!kIFYZh(>(CVomMI6 zBtj-`cTSft?z<j7fNqOOlviE`M-~^{|8N!39m6f44PYqtnmJH<O~~TZWWl`?H3I8X z7Z{+3k`||ozl*Iaeyin$^nG>d4ahf!^)P#2p#BjL_VIrPg1!x_a(#+<TEyat;ENei ze)`fc2O2-sSm$Pzgtf7^h;ALx){Y~Sggn=au{xwlHlM)Yg__>()G!A39a$o1&>9M& zIEFW=jRXZz8iuPMosasuzfU_WISDkA<RioojcVN#>LGuN-aD~&@TM1#YF*Q%V#wB! zm;+5OQSmIILM#XDRw36D2PfhIgG!Zk8~AaZ-Y&6^DYr$d(vAg;>DRp*q}g7wD9Gv5 zWx^n5z_Q$v0tzyaYpQfIN)P@kP9nF1RX;EqB=eF%_JZ#*J5Q7M4jGR;d&Wy#C!@v| z)}4u+Gkcr6mpFY20AY4>Hx%ae*0o<o;Q^ecgIyzSXn9}u*fKVKtiNoMzzfq}ll<DB zO{7^dGh{YNZT(+8gUYrFPkLHC%Yvfl9f3zPbcnzM7vKT$%LCFQpYOGuU8K2)tOg|g zGTISjV{#fzkGShH7Wmt~Pe||I{zZ+r^!I8|!4A{lL^urkP!g6PC~rXvnO}v>%e`2w zPk0b&M`R@K&FEe>VjCBnmqL?9yb0}WkF7U{@<gq_8L-B5o@w+~!25g3-+K5T+QZoU zHx-bnxyVp1-m1FU;OWB^0V2U5`coyAKl)jtD$=S$uZ6X)KAQ-a6r|Xx2Cz)V5*mF3 zC}}oKcr_Ct(x$}rSm=ilT?A9L_Au(Bp=z30d@I4Sf)pLNF|VI+RoXNy34I<)<OFA( z`rtNmbyyJq)(>r2{=0JO9h%i%T<|D{#1PyShC@uS3w|WF5`nBQ>P<^LB7jUN541Q2 ze4$RHvS8|E^8o+c;rTU__GSA%<yp)hkzQF=?|O!KinOA5N#OnDO9peCV5up0ks~p$ zPl(g5KDFNHwxch-r3{DEfL1cpr`e7`aFxuNHgq@KdPlZU1w*s`uh!M$X^#m(FaKj` zXt>0(Pu|{L>rpf?3M7qL#m8t|U(jSTknad=Qxn>b<AGhj|L#za=IkxopqNy}?u4e} zJkM%M)bA>OOvRprib5o9fdh-tEw?WVdSIBUB|bo#!$hh6XDc1lC?UmL%w-Hh97Ugd z!cZIct=8)QQY3>PMLVodUi`uMA0-sTj%T8CH8$nclRcdUFbv-%X%@{cO2lap{b@n@ zj}8AD4t#0?Zx|Wab88;5on&W)dl7=ZZr-0al?fBD()`w*l2*{(D>yost-9C2VlXF1 zY|zAvy79+-o!A?<<^-9T%U2{jbJBqu#wBA9Lhs95;*N&Lr>yFmg@bM%PRAw6`x3}@ zrCj#f8tdl5KVQtMipU-|yp#$3D`q71_hK)xP^nT#D*ae+an+eX6snJvldgE%^QW!- zQ}^vJP|qd4cJu#h<h!Hc>fW}M(R&*tdI-S~y?27>ok1`%#3*@?h~A>NAPh<LI+ze; zbdiV}L>nb)h#Erl&U@tfecyW5`o8t9*MH95XV1RR-gnvezV53`Yc$T4@8Qwnzqn?c zjUH$GlNk?Yb;$XetB9N_+#p3MWq9iT*{&~Z_(m?NBWCwK^tK9Q-q615K)&U`AVEFX z2T}PA=GxUO;ZjJL8kPzgjTYtA7J*nA-CIlLJ>-^H)+2_U@iuSHJZ*>H-Q<2*z}*ok zN+;_&gLC+(fxG}f1tB{;n<8t8`6*W3*V#<Jx#|mJg}vkL&_awfo3&jB-~HWpE7>k0 zHsFM3u5C(j9?mG8@vLf%zvvm%*stwCK&gErp1=@omoX`Pez~Nry@5BhT(k-b!+QL9 zG_8Kyz&O5&4@1k6>`C`Fp(&JE!le6@R<18k4{|e$O$&mSj8;KRT2g;H)l#g0+XnTl z6GUt#@v@dXAL*l+Ose~{mJvh$g>rRgL%cz${f#>6ZV0GFUDwe0;nT-gL!!}g*<TQ5 zRq;~-^+m@6zNK;FNgoL-NcGH`9!xlyyuT`Nuhy5Jp|Peq?4ouSitXZ5RUY!uQDvhb zP(@()UeP&!r*2No^YMzuAF7fZe>;qYMQ_xu?maixVTloTpvfU|M=(?Or{+Y~=QIgo zisV1%KmF<W!b73kPjba_)=l?Ai+mn(j&o38HU+x()fJmsrsaz2yh5(Wk)|V`$hw4Y z@Eff_jqW0<%|j{`OdJI=#OPizkK~}<zqVQC6=c*wXnFQqmO2PvnYb85e^p7b@8drF zp!dGgt*4U^A>)5_2X!?<YyiC`M#M6{i7%b?6G@<&-*l%x04rDFVm1#rx|*ghj6x{t z5els$Men395>FRPx!rWNft!6W_^}<LFB*LUoi>1^KniReBzXEKln2dwcfM}gX+R`) zbBe(`_-ScDO>B0c`hVi(e%fc~^6Sy}PFcN{dInT)-Zi__jF*UkE<MhcjC^(r-DRW` zc+}gBg<#Suy)z%LmOlg|8#%x5)%y-Ex>Q+EDZ$%od`*nveZ#z77!D$0dqYhE1;QOD z*ea(YaXk;!Jy4cP;GoNi!c~j%40K{R(?fY-%k44m;PxoBgp9|JYhU`zDgYQWQ5NjC zQ}#;_1sB!R%Te3uY#^gS!9{W?BGK<Qbk2Uks}l}Qnpk{2v7q#{z6yi2;?^eWqwhc@ zeh)9aHCd_YdFUF@T{v;Mod6`-5)mdgYvi3u&P#eK5YM#wKaaNd5&cW8^-Kp`xb3a` zT!Ay3$ktUNpXwymHiriDc1Hpq5In$#jDG$22jQ-2NMR&+($lVXyyHk+1+Ea)@47Oh z0Xao3^gaczTTN6K0h#MwxDb;;$I{_ok6R(HSXf5<gB;mrS`3i0lqo|fS)=Jt#hFza zEU=wdUXmY1pHFObDnC{*rMlw+j>Th(ro;bMVJ?4>)@AgqOD-FFMzqVuvp=2`aIlGN z126_z@8fnRg0J1?2N6~U$On@5702G5jUnbCNJ~I=*p802MV{A5pOh)MP*Ec3k?RI~ zXFwVVWAlVX1@hu&!ndn~p^-V11~Z>Vbf&j=nMTS7lh#Jd8ZC$}lh;%Ddmg)I@9%=G zZE9mji2hHgk%!bb3v7U0?)&m0cFR63sVC}NtZ^GH=SSR@EsG3tt{ZIEf+$4i@-Kbn zoKT84+#3e~zq5&Avgcz;Be^$ca?263=i(UY<4oK5SCdM$-uhR6UPFaSOjtL9KS);i z_1-{!|3)?c_ot-u!9{qRxup20Vml_lU$k(1(p*0*Md>O-TJnP09@ZQ6cV3E9O6diN zfy|lIAOL<@*`6Hl$TTz`Jja59!@8tx>Sm1k{{hL}0<L&23u9B2e=vi@F?E|^<D>bU z+m=Nk{&UsGFV8@Tja(-_KN29*|MFSS^LHD$J(ItGZUD)vn+Wg`9#C?;0fqbE0={xf z;f>|TT`bpURU1R3*q;880VJ)J1t=_wJse~yI2>}>qMnh5tr_-z_v1Y;1wVX53B2s& z{)b=cXlNq>I*r50klDRvgUIJh!c*+V6*#Apo46T;Gp&^Z7{$UNX7F+=cQX$;$dRiL z=~>BUVODDhsVrC?0g9U?U0+%>Rfmu&YC~jIGf1qe3Li|bFXUgzvu6y3ERt%iGd>S4 zra7|w)|i?3xJ&KCY9)2jb{o?)FTkut=b}UBOpDkspj^e<d9j=g!W<~6yx=E6_%TFH z%?@2{T#;k`!Q*2DGK%e^t>iSkWsg{;Q?Cd1Jb5;nYG%m3Lj_+=#W)=8@A_i7FlpW) zT_Y!IF&XuBCdN84*KyjBX8JCzk~@#D1y%b3IB*c((Oz~d-B+<!Aj}EVVRIbc8FFZN zMLM+Y%t%pazv1B!gHgP5A)js$w_Ta!Eh*&MRk=~T9%&wv0MbVhAtS!SjYeMauIuxt zK&m>Z-<^L~nrkr85s7jXQDejy4fU+_7PFAa7$3V8HQIEMVAfG-iXm{Vh}jROrj?BD zVKVWWsR@H>5VbvhApFkFlS>C-+{~M*yd1BeErdb0YCxrim{Xg}UmD21k!f}-MIjCT zvT<5#+9c>6`Y;i7BIC#-K6dXn3lM3b`A9&LfJp!OQdXF3=n_`2HO;tpdxh0hwz0_i z&oQ@3!?etMk7KfXE{*3!BT$hpcH<^*Gy^1aifJ@}PI@rFlcQVs=P{MQL%cAGo3*T% zy;)0h1r^AI90M<v{>0*(|GAf<5Z%-iv%+V-lml1_J354UL3p(Bt2Gv8>rUZ9wjsE{ z=7@^S@wvdq`$GMrx2L(OKvc!|tHok!Q7+Ihsfc~_sD;W>1}#W2MQ)qI*uVBOPQj^6 zNpHut(wbp>u*YhJ3|p`t3m<)Ji-i)N2jO6by_2Y@r5S;38egMTJ@fA7Che?r1P9R< z;kU_11q7Tzz;u1WcJHRU6(Zj~3pSNfh7=}0ko&hv|ML4ZA#iV>0stzzNiQcaYExzl zvfja5Dc2?5`bq#ARVBIf{wf?wI1m+vrS;VyzPrN_9!<$~a0CC`3xE0Ow<rKka%0kh ze0${bhxG7R9C42=hxI<r6Bsd|5S;hzifC>!)3WLRLj9Mde#-><I7F@q_<f8r`>D{_ zWL7h1!GslE$jss$xq&UQO%%6&+dTY%Br?|7rWQDO?($44zgewp<x}>%#g`?Lyba}^ z%~C&Q`v3rvHX)2u1OP2rpYg0nXe>mNc=BV=)lg{_9N>T;o~%xANTljs$EK*y?Z#Q^ z=k?o#f+LvKlh^r@VGc}$E2`Hl>=d{xo#v4=G^5B?`Ay5r+V89)6+~J>`@AZ>)ApWJ z#*6Y7ie0?k0XxmgGKT#Ggf5ve0Pew%stDXR(V?(e45oX`Arpw8iui@fQ@Xxbqdxr3 z4{K5l3A(;KHt)Y(sHu^k<jB)#t;*yYk~U70Zm31P@afWC#;uSg^qa^-S|%)Eu>Cjd z%7<sJcLX!D$WGIZz3V4cLIrybd$MW<OtlC`JU8n!lp$l3gCyaA$jc1r{%=Z$jCVqh z41=5D6Mi%YiHcKj7H`2;j%X>@&t{m8_URH;>w@=O@ZGxG&K#J`%DtSQ-H*SzJuJSI zFdv{U82p)609JNf7~U!RYAee!aW$PZyk1tW+WS%}T~l*Ld9=C4cPdn?_K^O|yCX9m zkzhAUB35!P_3++zt|T9RaU%0nDz@KZ?xWxnDKcu6G}sQ|n(zDU7bix1+M`BBs(pN9 z@!nRQR`<kK80HF$2DQ1GG8XRWjGAw5F=50|#XROCwpO)J--EA4D%mm)tj;@ka}pgG zBtqTX)vd5zFqBC=M*qT+mz*)Wh^)}$F}-G7WO=<2nKK<f2=ptHypk9VF7}sZVZJ=p z`*?UKHr1Q!A5zRzj~&nXSG6TEOJ=&qQchjd;0N!Zf${x*-R4OvJgBaNd)BVncrP9# zaljXbeQSzU>r_3e`B*XjPw)S#TctJu8^idk$pd$sDl}e|RX$wjO!Pza6;7}$Dl4^k zAVle?GF-m2b8YPSK)qweogbN->wi+|a=?(|ozV_vDMS2fgg3RMD3OnMbUQ%Bx5;+8 zJZq}3>t#iF`!C_fam9W~Gtb6F1~T%Ie;(LsStp}EMN9a(KLeW-1j$dixQrPG@V;Xu zZc7kOC}{uFnH(TxLMD8x*eue`C3sCWxOg>WKRfRDZrZxK37Jn!x;P~oNeS`7aPb=I z3}dZej^~Yp;bpQVOSg}`Vw$AB${F@AZU3nl9K&C>6?c%ENyAQOuk2WpoA(Fx_yi3B zXhnsQ-Hw1%MV(@<B=)OciE_sAUh9mr$D4~Qa)j0p>#o4+^PEC(by(KoA?yc33mM|G zATe=52@<%9TN-T(KGBg9x@%5C$tD>Iu8Va`i$fP+%{~U7g+eDBqX4oOpv2qX(I>0( z4ywx|%Av=<Ibm_`pk}7gx30s#oYbmg^tq`}iG|6sWv-#lMa6tzmSlF;UI2_-8DbC` zZ7uu~cwbaaLV0))i}y76dL1|jR;%`H0+8~i?Wy0wr;>>8c1hNg#E7QDKLy@^lO`+a zsC9)X|HFXyvJ5_wC&>23X8aC4A)X8#P?AMz*gq_DKL<KJhmRp=y~=PQ$L@)$&5amI zcgiaJ*Z1m}^p6qg=W4JYzf#4)ijr;!)ZHMQ9%ht+S^FQmN6-Qmj9F5XE)OZw?Lc`C z*ov*E6%Tgyuv~3(pXhFTSP=-38URy<zs=87PX5o7ZKI%q6!d#fzHdr?sE$~SbL5LC z)Zu^P2qwQSGyHt{PvNpQV3_ssg1<VcK=7kh9%7BZ7BX}YX6Pl0OB&?db8P_e;y)nM zbJM`V)-W{5%}a$tQ^!su@iV>{x80S(kB5K%GHP<{vOKMd=anlvK%gVs)d=a4X>jKe zZAtahuN~!XqQ%s`oM9~ExgF29s>+6>5UP<w(Eg%Bt(4%mlv&?FMS|id!_;U$q^I!o zOOfhDUbJY-@)PK3j}<q`(sHw2!%t-b+fDUr_n2mLp{bZlH%kYMo4>5E4=@A_-v`xL zY8c;#*BzxJg_#QH53pPuv}l6gN?yUj=u+UH2aP59zh*r&b9v!|NWsZE)&Bqzy4UBp zrYXW5H}qsa%}bk2&41ncZinoFOq=>j9#V&VjDyo4AN;L9t%TI$M0=0ho+sK;CfBkL zWYsHU*<8%w4Uw>te0H1<&aE44Br<vHDR7Z0BB*_>(KQxf|8iCOEpr604AjFJPgVsH z4gtlByhd+(5h80|yNlbm<<pkwDvWe!ry8vsdJ|FbZ^duB0f)mH9NS02SrrLvIq1*l z=(<v)_~)pLMXKvnnZh*Pt{1jXy4#NsHTRZGUL*nc()Cenh*-FgmIM)oMb6Psjv58T z7N4=i#93O9B2=Fy`|P&F%A<ZZq%iB+X=mM7l$`tP2F;1ob~Y{jN_yHDnK!4&(c-=1 z%|+W@-y0OCIHOJ}fXiHf&VY35wWMq~^rBe{h%%onN6jT0C$;geake*1t+I>}9nVJL z7F7Q+32uS5dfs!{@A?gvxo5zNf{*r5Rwn_w#7pqwWO<Mn=F__crC}fw^S{-YJfzt_ z`F}KkdT*O&KPYK#oA+~m=uQWG{$Fr1Fzy+(F82)v+5QIKasycYAD(^s>%*hAHvJP+ zAasMiF<v(;4qx)x?7IMX%AAFvjw%GWWw_j1>8E04=YIeMJ;jV!{?w-)f9p%GE-$k` z<XwO4YiM!U_rJsiViRxgXV<$N9qTUfaYl<60~doqK70_RhW+m%0t|~R3$KM@IJCnh zaQ{)N^jJZb?OAebV)s>#(j@|S&vR!k*8etsJ2FRy+Kg!H_wMDxF>P7l0E^U<eo)lz zqTuh8;CFrlQS`63=~G|%X=eh(khid-uNWSFyHV$yYH7Pvz`e;@MqiY7hm$+-l=Z$? z2x2r2Osiq{=p#2L--Xe3XukQFszfHzBW<U>o)!x+cVsl|Kc!=({SVJY)mX=4EbKtS zn*Xi=_a!IumsG3+lJo1mE|!z@A3e+%Exr8r=v4p`o98gC^^nWS$(*dK%I0EN?*p`Q zA4g?06bD66>);?sUmEkk-7{SgGVF@^;J3d!1LQ`1&w-f3c?p^PQpZ~9V~6TP5#c8? zVwPOmB7K=2SmY2ZtQeg(u5|^&2=2wjW|Jd6<NNCYLER)vgJV(7AVOregP9!i8KvZQ z9m%vLtP!2w@QBUnIrpoEAtj=czSIPgvS);g4P>gVgs%gEYBsW<;Op~+ea6#ufjp$6 zlPp4k1qeJBsqIi<8>mQzI?w3p)sW<%PxU%)pnGXBf`jzYSMR}Xlm_I>mV;87?OruC zZ7eXQ%LBS<;*fQ@kW^q8G6h9yvpawa1rihMsz6eiyKd9gh3*_h1<9`m)Y$dIXX7%4 z$8>FK^y%K*-Hi%g;dT_-oot2&&as}`qQTRay6lUo%W~JGh|l|eMu2dPtc_}&Y$}jo zx({35A#P0Zw36l77Dw|R40N9=CN*RgV~q#MC-Ru<WB0fnG3c}$0{DLQH)&=dS&ZFV zRO%4A(5M^(){v8qHJ$BWt`cAkoe)+DhhD7Ylo_UIupVcJ&>0tM<<Dnj{Af;q?TUPw z%)B)bDl|1BrXgfZR;>lAy5I8&A>)l2KB5E6d=AczPXnM)<SvO&+5iHea7u8v(-UY& z`f}ti0YLi`m{D+?-X}}X00By=KC1(%PeO9S|KBr{c$UXj7vajn_=E&{TS>q+eW4|6 zv-nr->X}GZJCffsW}Ac=ae-w+n@(Q+t>D`5&;N&rdWty=^BSyj_<}98tbDT+$t_88 zwWXQIzU-r2!1Go<o@Tz}tv&VX^BYE%Z<fNxb#|MFYuZJoaasH+imWaSyb#rMOxy^! z)Q@2*AnNz~TF{9GL~vq#Bewi&(*M$rwv0WC-_z`>Ld<^w@j61-xSx>aOob3LAW6Yt zpahtKVDz?Kjos$^6_R{pyX_w}`~|@Fj1|=1U3k@+7NO?Gu*WCQ1nemLPo*A}cAv*l zkx6Nc0esle*F}%(MP18^3GpV!s6^4ovRp9nBtSYAPC`q)KIyLuAtBP@KrhQyV3!~U zHN^eN*T;Q`_`OLM7zw2W^|W8xSxWSHIPVcHFkc}N-Iozt7XQc?2$q|EEDqr{Gte$i zJ|bSe{@v8jK2R`T69+q2i5eGuGGF)xANUw7IKSW(Ta*4I2E<kLhnRZk8H2w;UkcXP zhP!+hPD3r-DRll=`Oi2owz-<m&)XBmIwB&l;MR*Htg*aNu5&U7Gkfw~Ws(+H+e}*A zFbuY%)GTg;W`$Qfy;t}o-c!$<0c8cL;I|SSNHfgh3$%Svk4uaqpqkmdIksk3Kib}a zA~v+0c(gS=bRpXE7Zf)F^@v{W$v=oC0cNOspLi^0xavnHuX!1Enk@M0Yx^%!_QRp; zmhx1eMU4tLL)X#E1o(wZ4moknE#LzqdOZTw+9w2zb>z$nK1Q1QiR_OrX$;~fc956} znp+EUs8$vrZxR1aOS$a*f@s>s_bsgi*x$t84jmQWtV?kUzvnn)ruRo)3m~l?IT|A` zr{Z~ivvq8o(McKf*wMW1ZqZ=g;xK4ZZpRY`Fd%zvLMOQwx&YagXx5CA+g&P<4fQRD zaZ3_yeN~z*yQ0Et8@NBj`2`2)im&`pm+lffnmZ7eCc0KzF!W04sxk8d(SgV9^ZR1; zW?Rj-CbV17p@@jL;+5}|l#3r+UFqL?eFHBSDpcWoLJ$^IN`sK24+F~o4RH-+s4e4x z`hNn<Y;xX&K7E=J%}s;)?yxv@FAcz2kOwv-%gGkIsqG(1qjJX&BL`~r$$*RdA0sk! zH(hm4ha~~&W|Mg&pOXxAMBYgH<O2u)9e{@b2#Sp7y%!>g04m)B`C`Ujl<GkQ0CfNa z1@}NsanJp~%mrk?mTn<|J3aWpHg>GxKeC_pk(hpc)$E2qfdH|HQ>SzgBy9=_I*Thb zjlf|wx6{4;=pbDws>119I&(`IH>`|$N((~Y8NRQ07>ME~x?aDRAWDK4F~fy%V@fJ> z;*4;)GrXUMr^a!g0Z-v|y*&nfqjRtcPa8C+viO)bq=L_{=a0F`;A#u0n1eb?3<w0K z;V8xib6Xga@yu039yv-v193HR6F-Szjc=1x?pH!jkeATI`Opq!dp3}yv5qQ!>VQPk zw`Mm<ghNjMwH!mk`vNe;&t0&wA7K0wr3M)PDkGK05mv?hnb6hm;u;;pSK$}!`&wG5 zZYAJbZzad<TuD`-0CmlFv~oIBoh%+K@C)va87OQNRtGS^MiSFPNn~i`xkAA@4Rs?I zo*81XPOG3DVU?;3c}J3-zgdLjx;kACg;t(Wt2%M~qXbZv0h+ab=S-(^UHC2Z?DYYw zZH*I#Wp2CtjJdf>Lq_QJOFI_8v|q9r9S{@S(1h`0*0Hq(U3-CbfFXKTKvq?N1f5RD z{I?;SQIQ8w>x}VvbbQpe%y^c&9M?OU69G^F{~50v((V$+1~3%<0|EJ$MSd@K$NZ@( zGTVopKPtPoZT5c4xUU>c7YHOM+y&QV(MVT?;AAlIEJGLr*4VUgnzLSI=;Iz_$WVtu z%CO&--SmKr*oF+yPM0l0MAJkeo(n*ww62+_3#mYsoQf;XdA&{j==3FmNz>0YglXoA zO8@8aP%w~MRsO*NBE_mkx49e!h{!WD=A{OH_}RlAvein^#e}PhUeg_jT9kfLnRoNC zLzQ{)2oM{sbX|YBxd4JJdLZ(%hXLGFK;x%xfEDv0q#yswyLc0Oc>jlF+~)ys4iU>k zc|bwI(L*W3;@v?mjLWRSyn3V{alp2_NN|E?m~lrdUJN_zABLq7JIt7)72a`HSw~3* z0+7z<0h4$9ZrqjgW#q3CjnJ~<H5rvR!5~XOKl|(Ge)@fuEn7K_DtV8K75zP|{NW1? zHA1Gf*aCrrRV}=M(6o-Kz53V<OfM;u22fWW8eHklB;Q%XwS=2zObmu(C<3fk=j%w> zzsJXzd^`Xqp$yTKw?gfU{_Vp5-@ANTL9P7!xqEe$m-SpsEzkw=oow+mWB2%%i#tDz zIb=1OzJ@ja(=t|7o{RU^0y}#|*T^q>#>Qx){vORwYrp4y>|ZzwM-Z9x-%w<+?>v3# z`bh5R*FDtAsa5o??Wj)!Sk+dpx8d|X&V^EZ6f|hC6bXgm)7<NmQoGZgSH~|-uLi{D z$QD0iRbc?##3jepxQSuE*gnPaJYASeS!82Gj79~CIjDegJu<to#O_rBOFOQ4e2}*A zGrKK$!staVO4!ex%P*Fa17luYY1JXWtaDz-B$a@3SXbRUts2zDcFKPaDD*J|yb6lm z?d7iBe&d24JteljIPZGrJ_NJ;G|ikdm=Yu=P&FLEqzpk*-5x+-1S|APrLyPE-eSiR z#DZw|g1wwx6@fXS+jn*gx_drGPQCd_LuO&)@G|{*L$k2KQT9_J%og4q{w8j`j3T7e z8Ax+DqLHcqIocea$<a+}^dM*aUCQ^h*(dXl9qx3O{g4m<UvB3WaceS7!%vnq)Dvtk z5gm-b^BO5Q`WS*;MIPix+4-c9Vr$3}P|K;rx;hZ|Xr`9?B^rT1g~5sR9<lK1y%f_j zp1Y}S<{S^85dW6w-SaM2uXrphuePWIR6E&<huMnc{?){WH)b5~H~p^vWXUX-`T!TZ z^d~lBS3=;v{|JLKCZd>NhuWL1*1pH)D`K(Dq16(0DzW1`#4vAHzjjWFf_FI6aZ#w+ zJ0To?GfT2t&*j^)w>rB~8@s+`R)dfzdSE^Y+k~7QXz%zB54)7Uu}U&htd2;WcqR*x z8$f6epzRA!-ji-ACN|%*NQ*}|LSS|vYPBt9dC#46>dY)?C8#*{ITL0eVdy^MUU+iL z;dGLs)%606u_Z(<JhoiuhA=M%7av1i&RB@FW&Go34ERysM#D7;!0)h#=;tBF%2r|= zY^`}wa0rYqgdOminh89B0^n7w#PE_me?$n_5gIiDKyLu$@U1aiga3Wg^v2NvWB=Qw z1Z*66(jbgiH<<Rpec&bQP{EMQ%s1QaTwFRdX5c<)@*)dpU<4kRq+*`}J>sb)alK<R zvn-oGa2}V&5$X+DL&?<1vf;`k#|Ue33^NTouDdlu!$JW|A^NB*U*oSq83e4$Y+&e! z!r%XVLB@#F#c1}DS}{)Q8v;NaVjEK20@~@1DqQU%eLwI)|5_z`Mi2|eCXSv{@ZU}Y bNuREX66@0e+-y@g4)CX~p|4)4Y9IbzPMo{q diff --git a/src/windows/identity/help/html/images/screen_config_plug_ins.png b/src/windows/identity/help/html/images/screen_config_plug_ins.png deleted file mode 100644 index ec9c749e6c8326ec32cadec8d6a75bf827d70aab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23714 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 V-Z~teaXJA0^v@feE7!6O`!7QEi_ZW6 diff --git a/src/windows/identity/help/html/images/screen_main_wnd.png b/src/windows/identity/help/html/images/screen_main_wnd.png deleted file mode 100644 index b520c858f54c2c226e9066b875be908057e10a3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49149 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 diff --git a/src/windows/identity/help/html/images/screen_main_wnd_basic.png b/src/windows/identity/help/html/images/screen_main_wnd_basic.png deleted file mode 100644 index 488fff33b9d3ab87a7db08c463a80daa40550c52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24630 zcmZ6y1yCH%7d48zOR&WuxCL8W10lddaCi4bf&>fh65JuUdvJGm_r=}aK7Rl2)vH%; zs-~v8XS#cO`u3UA_w)@_1WBW#5TigrL7~fhlT?C&g8ub!;vm6%<ir(1#y>95PD;|^ zP!;2V!;b`<xtP2d6jXII>Wd-#N1DR;o02>fl*eZ%DBl1msHcxC-vcNp7j`J9BLgTX z{$wa90*CbGAA(R&`gJmrVk&NWry1xvDynbq(yL{==QS;N&yTW9%Qj9U!_&h&T9&mn zo>aNLvoOYEXs9E9hEa4`8u}cyZ7g#?C20MlmH3)3`8O{W4;vdU0T17B^2d)%1VV=g zpK+o4b-w%Yj1&Rbp6#Z}Yd-<kaUsmCU*pf-6ZfmX3O1(mWzk3fIp4>7zdmh?YLE2o zIJ|p9l3-aWp9$`HU&=aiZeiZ;jyF0^#nW=;%r34uABfO+7!uSxH`5kSur43>@?l=f z^fCt(tc^*??%3#QEDN$I&Y}G4=h#ILPSr$ue6wPWgVb=e;M8<x&DdY$LS8r}WYcmU zcTgL8*);DO^byc{a~d0guptr+-f^f{2!gskm))pItac>L5dqfgR?llKwz=z;B)8t$ zlN&OG&zLx8Z=IIe*lrgfXoBvm%2meAjJ+4;F;Jv`UB`$I12h13%m0fn2~y{vuemn5 zD*>?-(MrH+rO#{WH$YYYd8l${<VGzwL5GQi3K75hdp$bzYSWg`FDPFN1I#P03MlpL zU`AgI5G;$xTH$848RD)lz#-=K8#*4JqA!I`>n4ofRyBW*Zs1P{;n@(k91E|Y((-xn z3{p_x#5B~?O|;!XM<)sbkzVVhk0A-n+JOEe#aa#`Vyl6FsHE{#C;ov6{F9LNc9#IW zL%svm>0X_{%p}|J(Y=b(yZh~HR>>i6OBdD;>tu$P4At;xNbJ%a0x_A0#2aMA(yYh0 zP^J?*Kw5$DjO9y&5c4uH02p^iXhv2ae8DKO!|<KlAs9iNobI=0_?MxrV&eE{#Q!>k z$aGQ2`HGz>xOOhXi6Dv;l%g6mAV(utiU+GG-a|bglk9<(vk~7D6pDn1jtQWE7U&!! zZ9z}+0)-e8w)uOaLj;u=5yHrz`M<bI_Uxx<`2%Q_k@T^7s?&1~w!28+K}2NxznLcS zQK0BcM7JPNc%ck9nw@yW^hTWoaE<o;d!f*c(B@cguH~YDfM1SV!(b@@|FRLHPW+c0 zB)J^Av7ifOn(Wd^9A&JJFSLo`mf!i6lWG5L+j)2C(~-km#};$CY)j^SXsdlYy<C+} zL83mMht1hWDdU8j-k%OY+d+k((Q?EWobHH+X?D*x(e#Z13+zI_dawy(Fy2s9`K!^e zg$j{w&268nGb2S>vF89Pe39+Ob<gTtA%?o18%MR}oj~NwdYxQoy<lUbp^jXSS0xu* z$G2`>wit)w+FPUs$vJ)A!nYE-@wK~~>h3HnFso{ITWDv4K*DCf$IHcG0$Zks?aw*X z8Mz<IjQheGmphGNB5Uf{*bxqp%NDHR9y{8tSnVkJrn8Gzb$mg`l_vi{r+3Hr%^)1} zMIOIYUtTmqo!ANE>z6ZgTYz}FzBF<!V=}v+LT~`x7)07?VNeR)dckc<@qt0-H^z_b z{o0^z7%BPD0r_)V3vZFO$MSbBmZwIBC;tNX%SfjU>j<4W!b_0x!*D;5y>|C{jhwDo z%7sVIS~#)PL}lCFC2oV@8|+DJl#Haqa5jzkdL-Zd(64>v^-7TE@l8wks81-*yZd@E zt&>6<nfujTNL*!5mJV00m0>c2ht+N?GJfs3FpsTs*Ms$!&udDS|H632BL%oaBoGW7 zcCqL%y5wJ$%e8szU-#1Ny<aW|{QUf25itNl9(6S}S0_ug_4W1T<>hoyS%VvG6Bm=9 z+i&0Z$I_)|RI(-b^|Ivi2(b5y?}<egr_&$uZ!3$(!WVd0<ZL|7$bCUG%0ASS?pJI5 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 diff --git a/src/windows/identity/help/html/images/screen_menu_bar.png b/src/windows/identity/help/html/images/screen_menu_bar.png deleted file mode 100644 index 00b775b0a2666c3970ded2c9910279ac2e709775..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 871 zcmeAS@N?(olHy`uVBq!ia0y~yVB`U^g*ljj<SWS~c0h`=z$3Dlfk9jdgc;N4UjnLP zU@!6Xb!ETK!o$kS_h4_!Gq8|rM2TZ*Nk)DV!^(AMJb*$xB|ssU)Z*l#%z~24{5%F> zPDN#)I2TCVIlrK?C^J2ygkcT;87rVDA6T>~H4&s#p(HammBI8oKPOOz6C@LypH@<y zSd_{TTks#GoEvO-W^r;(B2Z}&!}bGP`hmh6AmQ-DqP)z!bcO@c&)R`v>=6B>MaiiQ zU;j71hADH-&&^HED`EI{X4-zB7#m1gNM=b+D#MC*m(+oQ!QkoQ7*a9k?W~KvhYdK| zE(g1>xFWjize%KGP}>f6Z?QuTIZPIrKTG&CqYl2mU&eFM_FHc3B$bChXX`3>uJg;A zq+*#+F?r8Dd4Ab87L7goI6b?ouFadf@mp@~Ui&&;9-pdKvy;giQqB}zz8dZ5zc(yp z{-Q{~w<?`CRJfC8PF7A`mGB|*-Qhh4nVK$7ocI02jEsvedKV`v?B0L%Z&A_#Yhn3g z_K$XQe(`j=bS`6V(bl7fv{sgK^qfz9a_a22?*=-5R^3t5p3o2^@asV4wDqMs6}G-| z7E?^z<l1gmEO<t68keONW7Xs>*?ro}Zf83O+&H&2=;-(Vb@#)rNKA0N)&GoT$Es-; zA8T;mhJ{7)#f9g?>Q2S($a%ctWXaA@G2TDIE;=EKiA@jE&fd6rxYy3cgZFu((UX(W zKR)R^xEuBV$-FO-x%s<Yc9!0MB_F$s`Kg%FKhqZ(ZrZIAmEYEHwfH#4(mC3xI>9>i zm#>h$^I}O~k)o}0gv(>TFFv4lA#=~RMD_i5yENslRM@ONJwbG0V17YRgMfY8E%vt5 zki~aYQg*HpyC~dsy5rs9rW*kZLs=vpi+9)f>%FKeescEmFMaOr%oS_g!YxAcX6`xN z+`e80sC1TV-h3G?6>A$2#ftem!jzqq-f3TIT$pB?)6jLX(57x7hhN){m)ebfB8y-D zy}$No`eknZXYXe(@8)TU6chla6e&=;_$HRy&|||=Z2Vcp)1Y#aLeXTElZ^kFm-%+~ TXK+3Ns$%eT^>bP0l+XkK^9X6e diff --git a/src/windows/identity/help/html/images/screen_menu_credential.png b/src/windows/identity/help/html/images/screen_menu_credential.png deleted file mode 100644 index 588117c4e39ee6c9a22eeae23335c4c2dbc63e34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9870 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 diff --git a/src/windows/identity/help/html/images/screen_menu_file.png b/src/windows/identity/help/html/images/screen_menu_file.png deleted file mode 100644 index 5836662e01da256b9d6648e7d3b8d3089317e8e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2952 zcmZvec{tQv8^?bp!(a%7jHQ(Id2D5k#!e<gvPG6@h_MXM7^#poQlxA}m}DQaPqd7g z?8``&keyIMjBTuWN6+h@_j><0=UnG=e}Cuto$q~L_jO_|E??wihp__yz=<$6uw<;C z7{dSpV$4Q1nR1MU&CmFnKL7~u9t<XTe9wW36^Af0WF26Jf|=D-g->byL56lX-2j}2 zFBT{&r5ZC36vsdYZvH4N+7E~J#Q?|H#Lh4{`vKSY^}B;byL;e(lA}}&2Icxgv2Mr% z=_wrA#|==SA7x`i*bX9BeQ)9dkytmt(Qp4i&hh7Pv_Hxl$&g}!8cKBn149n5EfR}C zW849X&}<BYvHtsg02bv2tnWw8AIkK7eSF+7IADXCN@g&Y1DO>X=j{d*{_2qe044xo zplfwIV=*(-L%4;nWn8AlvZU}$#B_swQiEOPeU3}gRVucT-*)t?mHEIz5m)a^8a)s! z-)Do+%fNFwYYE3AP5fL~&*UZ+^5tuB6S5~?^2)sSyHy^kqx(?2&x`18@@`W+s^_kp z&;IkB5UFuQ&5)+U>el={D(Q~W&ZwF%hCce%=;FnXm|!jZqAFNH0|TfBZ<fdN4-5?W zR7>7Q7yeaqBqB26NjgRBVT%14tsyHbty1>!q@RU#<Rl@7&tvga)o>a$^&lilCd0$W zwJ*ToqrFO~7<WPjB`4ZMtyW)wMtde-gyV2<DAu(m1ui`bNkpqZPZw6H{Wd+QE}j|p z=+KLI-_IwZM@s8P?l|cWjgIB7k?P}xxI=c!lQH$W)?zEmdtWw=nKPX#A!IitY<&x< zpC=8DA1x<Ux^uK7;4k|5-$Hf<fl^cJT*LfYc9uR=Sw8Ii5EV(NfAZUS6;ozh>`&g$ zeibnm+P#yJkgTQgUFJjBN}kfUqVe&uv0rpLw5yM=x23=TFO*{NeopS24|{tB#YR>t zC#>M2T?N@qKmF7T?_Q{s4Z7gzQ32a*o2Io^F04A{0CQ!_s=MACgsj_&kdvcB_HM~g z==D{RB+N)H&ru*Y>}mCN@v;v+54hvBpC4hA0_5XqGjNKqId55Uc9W+l_|e>D`^+5X zM(-=thh9X#R|u-H1t{L$bDvdQWQDn$$oCxO)ZZmb;b$|C8FQp%^)v*}o&^DRx!3Of zTB8M9qNaQDOxnO}|0t_C&(b+UNf+V+;K$kb?o1EFRo<wq$;(p^?4+|uKpi?dY(t&Y z;Q0o-bW}9*hX#xcKS$Dn=W~CSYfzMw@<oQl4;t9K$ORwl-b?41^aw@~OG_P+5~zXW z@HS1F(}EhbK@sX0^J&;0OzH%f+(xX~A+!N3{A;0a3flD+lJi8;&NPj1rc5jLtWJTs zsLWu)?(Ff2xYSOf&$)O&r_&;ytjT{elXr8NJX6x`(<qr(mFr~`j7#(9<zkfy*Pa~b z9y;`57xhIEDl)iGZ-3=TL1Uol)X&L+yT7+sTi5*yj+HEfU?IEQ6Ba9GEI5i9<)n5{ zKi^Z@WPE&m>FQT1`=(uk6z~Rl&%Zsa?zjIQTh(99F5+V|eN8v9L&~}Y&U(!?VJ_Ap zJ(dv+5GHRm_(eJ0t8A^iVs3oX9oVTE*o;k^k0tM5Sw*wJ0E<X%tfgu~0q~@z5iEZe z-AS}ngwEDE3%o#d^6EXeph$aNR{iPVb}G|-W^(5wkxmcFuFVB|C6Sv(_Wjh2=eSm# zGw>Osp<lzR-v=&5>t$O=D{GB?wU7Fg?lm07uYoUD-D;hlbicFpb8OhP!nmk@^KC0h z&lz**Mb5WUMIi@`@`_FRz9L01%`IPQQ7Q`*K_i@J|3MrWGt${t*@sWOa?R8{zxv{; z(Ta4cspH=L;*JjU{7{XcH(3gmK{dpfEpya>rG8wT;k08&qqp}*7%q#HChTr!-7BO# z@TM*Kb5oqHC2QE(_O4G<Rn0_+`RSF$6@_nL%IDD#2}iXpxbBZod@u;2qO5$1`RaJ% z?y#YpHLdL}yuL~r9e^<vYimkZBA+)-$}tvljFyVKlCflEpX;gUt@`FkYjt$|RC7km zjalu6F5z2JDs!LP@bM$A2C?o~!_eMY(qNfaGwXNQ)=HU9b8e$QvMGh?^c}AKQDb={ z(6d@+{m=`3rxqY!U7&JkdZ{&t2etk2ZL?+|KLA{IfzqlYhrh}(($nYe`3{4Hv)PLH zl=>745@`E{U;xm?cUzghN=+ATtWCN&9z6W{_2!1sQ$?AFR66Ii922^M*ot4ENhvLU z+a^uAQkG0>egU0?FKy%1_Rrs&B~HLZM2LH^!rBohjSKqqu~9`gWX8<@L0+2RK22Z~ z)-zBE*M}6b3D<K@-82e6Q%m0YbT4!CJ^lWosxwAwcX<!{zI>^6(j~4cQ4qHMVMKmG zGf_PDy4eJ`o+l`V+wz!t)IraU>SN}*647@;LjIXJB2oP9b*7tmb3sS$cXf4HcTe3$ zf+E?|5516)BOv8q@#*>KIkWb<OH4?!h7G4;KJ_>=4r#p*<rSA1Cb48o+Y7A{^-e!! zvXdK+Aa}F&tb|rt%KE2#rua|fxw=f)>+2uMMo-F-;6RSJ=rzN^V(*2gu$=0nYNYjQ zm^72?H5&yGzXha6u2(sr)1tOgdPg^qs%+-J!hZz>wbO}p={RTB+ta<d_|(qFAsrl5 z(f=jjZ&<u11aR^9mwCUZwx7#v#`wo{jR;@H=`NR&U=p01oQdKx(ARsvNZXw<l%b%4 zekS0A5^n;J-t+R<Z5zrDf!Fc?5T&em0>!enb=zXaF-LhNV7)i_zOYjWZ-=LLXudtm z9-<k0=*6pA5EPi4!psUJv%SC);Zl}t9QkN_o2C19+2^*Y8xV^!w`(>n&pU|D4#&dH z7KWdRK-!Xb=Y|^q%849U`x71%bB?p9Hr~7Hj51O7H+_A3VI$769k3`9>@7dLWBrfe z;|Oed=y-9qlOyV(Nuv1uRt@J7UXD_e*dH*hTMMR@oL%!MqEDKtV*dm4M92}K@HIT^ z%kOU5D$gt9L~#*MSIGX)mL{9Wkao(%gnO#e4_Nci&``SmC`nyC5YiqqyvT3M!OZn^ zDdzYFTa-%Y+cD;p=m-B>9AdeWeh=bAe&|Y%7726NXWK{jaScs?WqGJ6hhAJh&2RB< zG3purzxoo(O^uZH9Xq*DgfUm3QZZN0&&<W;f0${C2wHyFU42)OpPQ&;h%#?VMyIFd z&AcU&ZxDI}CFCXQ|28t~?F(PjJ3aT%z;0k$dPb$M8nML37jAfC3Dgdf7eKH;1+wFK z^=xfydVcnG@PM;k(?VlS+d;^<tk-VVU8{uc*zNxBLi%<Wqb!YN^fgmT*s&D_)9N%$ zmV&zhoDdX6+U@tw$yM#4qM{<im!fBR@|*KKM%{BIFXy!qufXwz1cmF5*db`0<FiY3 z*V&kM3_sR^lNFL7sQ4{$=cbf)q<V#2wGHF-_5I+jwZ5AnYi<qaSa$6TjAzwGB;K|% zGM0VuzWKL^hlD6g6t`PwTE(rM3a5@KvSNKC9-R&|0%Ttr;6wt(M0te1OjS5~GPaVP z2m_Ce=;Tz|cL(mCm#Yh%u34=fr`<<LwzN@-!!s3Wt8@k9hPvyWhLW>VAo)DRl3`f+ zV~wsc)4ahpjrB@z4uHEK*SRcFw_vfUjk#&lB>>K0ALp!1a49*PXZr09(?6VC_auKk zkX6vv$CKA$bas8iDd!K`!9m6$V*hO~e=>^UPHE-~6GzP4LXK}~8;hA)(?zLXj4J~O M!^;MxdM*+F0d-Vj_W%F@ diff --git a/src/windows/identity/help/html/images/screen_menu_help.png b/src/windows/identity/help/html/images/screen_menu_help.png deleted file mode 100644 index d39b257e4995cd655f5c267724c3794e46badea2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5812 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 diff --git a/src/windows/identity/help/html/images/screen_menu_options.png b/src/windows/identity/help/html/images/screen_menu_options.png deleted file mode 100644 index 528e01e940d8135fe403c83aedd322f91c2284ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4877 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 Xd>~fw6B0`VaX|O7p;obmZP>p6ftwXg diff --git a/src/windows/identity/help/html/images/screen_menu_view.png b/src/windows/identity/help/html/images/screen_menu_view.png deleted file mode 100644 index f977bda45a62207ce1ad1732d07c76984e86f8c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6386 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 RpawJm&{EfhRjOJ&`#<%;*>eB@ diff --git a/src/windows/identity/help/html/images/screen_menu_view_cols.png b/src/windows/identity/help/html/images/screen_menu_view_cols.png deleted file mode 100644 index 79954d2b6866aa2408b18f6fb58be491c47790ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14875 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 diff --git a/src/windows/identity/help/html/images/screen_new_creds.png b/src/windows/identity/help/html/images/screen_new_creds.png deleted file mode 100644 index eb461bf7606a2f43385ab76811284a519569c934..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11571 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 b-Xk022&wd2a)Bo=0YK)BqGXlCyO93{>SU9I diff --git a/src/windows/identity/help/html/images/screen_new_creds_err01.png b/src/windows/identity/help/html/images/screen_new_creds_err01.png deleted file mode 100644 index 4999db898bb7c6d81fa6e383688f1f207a1f4d65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11757 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 X{V}Q4^Z`7!2LNKiQbOed+P?n-G;up} diff --git a/src/windows/identity/help/html/images/screen_new_creds_exp.png b/src/windows/identity/help/html/images/screen_new_creds_exp.png deleted file mode 100644 index f533c977a501675de050882271b614f44481a1e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23631 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 diff --git a/src/windows/identity/help/html/images/screen_tb_standard.png b/src/windows/identity/help/html/images/screen_tb_standard.png deleted file mode 100644 index 5d2f070b34c93d902ba22d59348fbc39dc398884..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10327 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 diff --git a/src/windows/identity/help/html/images/screen_tray_icon.png b/src/windows/identity/help/html/images/screen_tray_icon.png deleted file mode 100644 index 6d935d61761d656557fee2e1eaba8743bc0f0ad2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5846 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 Z^G!;aMtRBW)$QT|6-7;jN;&h;{{zA6HLL&t diff --git a/src/windows/identity/help/html/images/wdg_collapsed_hi.bmp b/src/windows/identity/help/html/images/wdg_collapsed_hi.bmp deleted file mode 100644 index cb06b8acbffb74d8fc7208bcf2044038cf4230b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 zcmZ?rWn*Rl12Z700mK48%n!tj3=%++f#CuZ1H%zM2nGuPiR*(Bz+8ug#&j=G(U0x( za3M@T0!4luSr12;Tr?|y3VvTY0!Nr!O!a^6T!bT_dN>=%0CF+a|9$xoD2@pr;+X3H hBLSc;B;J1@cVN{cI|j(cbPv#Zm_CJzpgEpYE&$N+^RoZ| diff --git a/src/windows/identity/help/html/images/wdg_expanded_hi.bmp b/src/windows/identity/help/html/images/wdg_expanded_hi.bmp deleted file mode 100644 index 8180b33337d8a120782268a15105acd581e7e1d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 zcmZ?rWn*Rl12Z700mK48%n!tj3=%++f#CuZ1H%zM2nGuPiR*(Bz+8ug#&j=G(U0x( za3M@T0!4luS&s{0RsZ|a5nKqX`agFr;zC%}|9$xoD2@pr;%Ht5D*KNc0A&ZcdZ6<# MeF_&rb3CbB0NpSIU;qFB diff --git a/src/windows/identity/help/html/images/wdg_stick_hi.bmp b/src/windows/identity/help/html/images/wdg_stick_hi.bmp deleted file mode 100644 index 8857fec2207fad491c611187501d8dd5e2bcf147..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 zcmZ?rWn*Rl12Z700mK48%n!tj3=%++f#CuZm_i}04+H?ZfOu<xihpdM2XQnpx_~Nw z9a#_8g<lI$+3!n7AX<RBAR2*O2*A_}6#sMQB9H{?!bCuEG%Y}pzb_v`bOAM@A&7b) zi46Y#{}1E>bzvf)IHvg!^*|C6&_X@3Q_&m);Q|!^T>>YuszDZns{}HT#qqH5s009^ C@cUl? diff --git a/src/windows/identity/help/html/images/wdg_stuck_hi.bmp b/src/windows/identity/help/html/images/wdg_stuck_hi.bmp deleted file mode 100644 index 3b780712914f23410e4d6925e485edb8cda6f6a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 zcmZ?rWn*Rl12Z700mK48%n!tj3=%++f#CuZm_i}0Qv<+FBxo2!<&W+2APB<6qYJ3u z*OB#b1k?o-!Kxl&)bC42FcGE}pa{gMKX)!-BCP6xZUBn^efba*p{WOQ;cfu3|Dysl z#X!FRMc{4#vVj1u1Hwh~FHjK84G?7zaUhAN9%2RDOk@UD#bl_5XaSlAHyp?Y0!){n Oi9nPQqY_OcE-nE4K?Gj_ diff --git a/src/windows/identity/help/html/menu_all.htm b/src/windows/identity/help/html/menu_all.htm deleted file mode 100644 index c5efbb216..000000000 --- a/src/windows/identity/help/html/menu_all.htm +++ /dev/null @@ -1,41 +0,0 @@ -<html> -<head> - <title>Network Identity Manager - The Menu Bar</title> - <meta name="description" content="The Menu Bar"> - <meta name="keywords" content="menu bar"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> -<body> -<h1>Network Identity Manager - The Menu Bar</h1> - -<p> -Click an item on the menu to go to the description of the submenu, or -choose from the list below. You can activate the menu bar using <span -class="pre">F10</span>. Alternatively, you can activate each -individual submenu by pressing <span class="pre">Alt + -&lt;key&gt;</span> where <span class="pre">key</span> is the -highlighted character on the submenu. -</p> - -<map id="menu_bar_map"> -<area shape = "rect" coords = "0,1,34,20" href = "menu_file.htm"> -<area shape = "rect" coords = "37,2,110,20" href = "menu_credential.htm"> -<area shape = "rect" coords = "117,1,156,20" href = "menu_view.htm"> -<area shape = "rect" coords = "161,1,221,20" href = "menu_options.htm"> -<area shape = "rect" coords = "226,0,269,20" href = "menu_help.htm"> -</map> - -<p> -<img src="images/screen_menu_bar.png" usemap="#menu_bar_map"/> -</p> - -<ul> - <li><a href="menu_file.htm">File menu</li> - <li><a href="menu_credential.htm">Credential menu</li> - <li><a href="menu_view.htm">View menu</li> - <li><a href="menu_options.htm">Options menu</li> - <li><a href="menu_help.htm">Help menu</li> -</ul> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/menu_credential.htm b/src/windows/identity/help/html/menu_credential.htm deleted file mode 100644 index 9a83af039..000000000 --- a/src/windows/identity/help/html/menu_credential.htm +++ /dev/null @@ -1,81 +0,0 @@ -<html> -<head> - <title>Network Identity Manager - Credential Menu</title> - <meta name="description" content="credential menu"> - <meta name="keywords" content="credential menu"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> -<body> - -<h1>Network Identity Manager - Credential Menu</h1> - -<p> -Click an item on the menu to go to the description of the action, or -choose from the list below. You can activate the by pressing <span -class="pre">Alt + C</span> and you can activate each action by -pressing the highlighted character. -</p> - -<p> -Actions which have an associated hot key show this hot key to the -right of the action. You can use the hot key to trigger the action -without invoking the <span class="pre">Credential</span> menu. -</p> - -<p> -<map name="FPMap0"> -<area href="#new" shape="rect" coords="29, 18, 220, 44"> -<area href="#renew" shape="rect" coords="29, 42, 219, 67"> -<area href="#renew" shape="rect" coords="213, 44, 464, 113"> -<area href="#destroy" shape="rect" coords="29, 65, 220, 83"> -<area href="#import" shape="rect" coords="29, 81, 217, 104"> -<area href="#chpw" shape="rect" coords="28, 131, 218, 156"> -<area href="#def" shape="rect" coords="28, 102, 216, 133"> -</map> -<img src="images/screen_menu_credential.png" usemap="#FPMap0"/> -</p> - -<ul> - <li><a name="new"></a> <span class="title">New Credentials ...</span>: - Opens the new credentials acquisition dialog box. If an identity - was selected, then that identity would be made the default for the - new credentials acquisition. However, it can easily be changed in - the dialog. - <p> - See <span class="pre"><a href="act_new_creds.htm">New Credentials - Action</a></span> for more information. - </p></li> - - <li><a name="renew"></a> <span class="title">Renew credentials</span>: - Renews the selected credentials or identity. This action requires - that the selected credentials be renewable. - <p> - See <span class="pre"><a href="act_renew_creds.htm">Renew - Credentials Action</a></span> for more information.</p></li> - - <li><a name="destroy"></a> <span class="title">Destroy - credentials...</span>: Destroys the selected credentials.</li> - - <li><a name="def"></a> <span class="title">Set as default</span>: Sets - the selected identity as the default, if it is not already the - default. The implications of this operation is dependent on the - current <a href="concept_ident_pro.htm">identity provider</a>. - <p> - See <span class="pre"><a href="act_set_default.htm">Set As Default - Action</a></span> for more information.</p></li> - - <li><a name="chpw"></a> <span class="title">Change password...</span>: - Changes the password for the selected identity. However, once the - new password dialog opens, you can change the identity for which the - password is getting changed.</li> - - <li><a name="import"></a> <span class="title">Import - Credentials</span>: Import any existing credentials from external - sources. With the Kerberos v5 <a - href="concept_cred_pro.htm">credentials provider</a>, the Windows logon - identity stored in the Microsoft Windows LSA cache will be imported.</li> - -</ul> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/menu_file.htm b/src/windows/identity/help/html/menu_file.htm deleted file mode 100644 index f82490efa..000000000 --- a/src/windows/identity/help/html/menu_file.htm +++ /dev/null @@ -1,45 +0,0 @@ -<html> -<head> - <title>Network Identity Manager - File Menu</title> - <meta name="description" content="File menu"> - <meta name="keywords" content="file menu"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> -<body> - -<h1>Network Identity File Menu</h1> - -<p> -Click an item on the menu to go to the description of the action, or -choose from the list below. You can activate the by pressing <span -class="pre">Alt + F</span> and you can activate each action by -pressing the highlited character. -</p> - -<p> -Actions which have an associated hot key show this hot key to the -right of the action. You can use the hot key to trigger the action -without invoking the <span class="pre">File</span> menu. -</p> - -<p> -<map name="FPMap0"> -<area href="#properties" shape="rect" coords="1, 21, 131, 42"> -<area href="#exit" shape="rect" coords="1, 40, 129, 65"> -</map> -<img src="images/screen_menu_file.png" usemap="#FPMap0"/> -</p> - -<ul> - - <li><a name="properties"></a> - <span class="title">Properties...</span>: Displays a property - sheet for the selected credential, identity or credential type.</li> - - <li><a name="exit"></a> - <span class="title">Exit</span>: Exits Network Identity Manager</li> - -</ul> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/menu_help.htm b/src/windows/identity/help/html/menu_help.htm deleted file mode 100644 index 8f65c71b8..000000000 --- a/src/windows/identity/help/html/menu_help.htm +++ /dev/null @@ -1,54 +0,0 @@ -<html> -<head> - <title>Network Identity Manager - Help Menu</title> - <meta name="description" content="Help Menu"> - <meta name="keywords" content="help menu"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> -<body> - -<h1>Network Identity Manager - Help Menu</h1> - -<p> -You can activate the menu by pressing <span class="pre">Alt + H</span> -and you can activate each action by pressing the highlighted character. -</p> - -<p> -You can invoke help anytime by pressing the <span -class="pre">F1</span> key or if you are in a dialog box, by clicking -the question mark icon in the title bar and then clicking on the -dialog box control that you want help with. -</p> - - -<p> -<map name="FPMap0"> -<area href="#contents" shape="rect" coords="173, 22, 373, 43"> -<area href="#index" shape="rect" coords="173, 43, 373, 68"> -<area href="#about" shape="rect" coords="172, 103, 373, 128"> -<area href="#plug-in" shape="rect" coords="173, 67, 372, 102"> -</map> -<img src="images/screen_menu_help.png" usemap="#FPMap0"/> -</p> - -<ul> - - - - <li><a name="contents"></a><span class="title">Contents</span>: Opens - the table of contents for the user documentation</li> - - <li><a name="index"></a><span class="title">Index</span>: Opens the - index for the user documentation</li> - - <li><a name="plug-in"></a><span class="title">Plug-in specific help</span>: - Plug-ins can register their own on-line help.</li> - <li><a name="about"></a><span class="title">About</span>: Opens a - dialog box containing information about this version of NetIDMgr as - well as the modules that are currently loaded.</li> - -</ul> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/menu_options.htm b/src/windows/identity/help/html/menu_options.htm deleted file mode 100644 index 1022a320d..000000000 --- a/src/windows/identity/help/html/menu_options.htm +++ /dev/null @@ -1,65 +0,0 @@ -<html> -<head> - <title>Network Identity Manager - Options Menu</title> - <meta name="description" content="options menu"> - <meta name="keywords" content="options menu"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> -<body> - -<h1>Network Identity Manager - Options Menu</h1> - -<p> -Click an item on the menu to go to the description of the action, or -choose from the list below. You can activate the menu by pressing <span -class="pre">Alt + O</span> and you can activate each action by -pressing the highlighted character. -</p> - - -<p> -<map name="FPMap0"> -<area href="#general" shape="rect" coords="124, 20, 239, 40"> -<area href="#appearance" shape="rect" coords="124, 38, 239, 56"> -<area href="#identities" shape="rect" coords="122, 54, 239, 73"> -<area href="#notifications" shape="rect" coords="123, 71, 239, 93"> -<area href="#plugins" shape="rect" coords="123, 91, 239, 112"> -<area href="#pluginspec" shape="rect" coords="124, 110, 239, 169"> -</map> -<img src="images/screen_menu_options.png" usemap="#FPMap0"/> -</p> - -<ul> - -<li><a name="general"></a><span class="title">General ...</span>: Opens -the NetIDMgr general configuration panel. This panel allows you to -configure settings related to the startup/shutdown of NetIDMgr in -addition to debugging and monitoring options.</li> - -<li><a name="appearance"></a><span class="title">Appearance ...</span>: -Provides options for customizing the appearance of the credentials -window. Currently, the only options provided are for selecting the -font used for the credentials list.</li> - -<li><a name="identities"></a><span class="title">Identities ...</span>: -Opens the identities configuration panel. These options control -credentials defaults for all identities or for specific identities.</li> - -<li><a name="notifications"></a><span class="title">Notifications -...</span>: The notifications configuration panel controls the -settings used by the NetIDMgr timer that triggers warnings and -identity renewals.</li> - -<li><a name="plugins"></a><span class="title">plug-ins ...</span>: -Options for enabling or disabling specific plug-ins and also for -viewing information about loaded plug-ins.</li> - -<li><a name="pluginspec"></a><span class="title">Plugin specific -configuration panels</span>: Each registered plugin can register one -or more configuration panels which will appear on the <span -class="pre">Options</span> menu.</li> - -</ul> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/menu_view.htm b/src/windows/identity/help/html/menu_view.htm deleted file mode 100644 index 2e231457a..000000000 --- a/src/windows/identity/help/html/menu_view.htm +++ /dev/null @@ -1,99 +0,0 @@ -<html> -<head> - <title>Network Identity Manager - View Menu</title> - <meta name="description" content="View menu"> - <meta name="keywords" content="view menu"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> -<body> - -<h1>Network Identity Manager - View Menu</h1> - -<p> -Click an item on the menu to go to the description of the action, or choose from -the list below. You can activate the View Menu by pressing <span -class="pre">Alt + V</span> and you can activate each action by pressing the -highlighted character. -</p> - -<p> -Actions which have an associated hot key show this hot key to the -right of the action. You can use the hot key to trigger the action -without invoking the <span class="pre">View</span> menu. -</p> - -<p> -<map name="menumap"> -<area href="#advanced" shape="rect" coords="91, 20, 230, 39"> -<area href="#choosecol" shape="rect" coords="89, 38, 230, 57"> -<area href="#layout" shape="rect" coords="89, 52, 229, 76"> -<area href="#layout" shape="rect" coords="225, 54, 319, 125"> -<area href="#refresh" shape="rect" coords="91, 77, 226, 101"> -</map> -<img src="images/screen_menu_view.png" usemap="#menumap" /> -</p> - -<ul> - -<li><a name="advanced"></a> <span class="title">Advanced F7</span>: - -Toggles the display mode between <b>basic</b> and <b>advanced</b> modes. -In basic mode, the Network Identity Manager displays a list of identities -and their current status. In the advanced mode, NetIdMgr provides a -customizable list of all discovered credentials. -</li> - -<li><a name="all_ids"></a> <span class="title">All identities</span>: Toggles -the inclusion of all configured identities in the NetIdMgr identity lists.&nbsp; -If all identities is unchecked, only the default identity, pinned identities, -and identities with credentials are included in the NetIdMgr identity lists.</li> - -<li><a name="choosecol"></a> <span class="title">View columns</span>: - -<i>Only available in Advanced mode.</i> -Invokes a submenu from which you can choose the columns that are -displayed in the credentials window. If you change the columns, or -their order, a new custom layout will be created for you which you can -later use using the <span class="pre">Layout</span> submenu later. For -more information about managing layouts, see the <a href="use_layout.htm">Layout</a> topic.</li> - -<li><a name="layout"></a> <span class="title">Layout</span>: -<i>Only available in Advanced mode.</i> Opens a -submenu where you can select the layout for the credentials -display. - <ul> - - <li><span class="title">By Identity</span>: A predefined layout - where the credentials will be grouped by identity and by - credentials type, in that order.</li> - - <li><span class="title">By Type</span>: <b>Not implemented in - this release.</b> A predefined layout - where the credentials are grouped by credentials type</li> - - <li><span class="title">By Location</span>: A predefined layout - where the credentials are grouped by the location where they are - stored in. For Kerberos 5, the location is the name of the - credentials cache in which the tickets are stored, and for AFS, - the location is always the cache manager. Individual <a - href="concept_cred_pro.htm">credential providers</a> choose the - interpretation of the <span class="pre">location</span> property - as the concept of location changes from type to type.</li> - - <li><span class="title">Custom</span>: If you customize any of - the above layouts by adding, removing, reordering or changing - the sort or outline columns, then NetIDMgr will store your new - layout settings under this layout. Invoking this menu item - restores your customizations.</ul> - -</li> - -<li><a name="refresh"></a> <span class="title">Refresh view F5</span>: Refresh -the contents of the credentials view. This queries each <a -href="concept_cred_pro.htm">credential provider</a> for any -credentials and redraws the credentials view.</li> - -</ul> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/nidmgr.css b/src/windows/identity/help/html/nidmgr.css deleted file mode 100644 index 0fb975eb7..000000000 --- a/src/windows/identity/help/html/nidmgr.css +++ /dev/null @@ -1,122 +0,0 @@ - body { - font-family: helvetica,sans-serif; - font-size: 9pt; - font-style: normal; - background-color: white; - margin-top: 0pt; - margin-left: 0pt; - margin-right: 0pt; - } - - h1 { border-bottom: 1px solid black; - padding: 1em; - font-size: 12pt; - background-color: rgb(247, 247, 247); - } - - h2 { } - - h3 { border-bottom: 1px solid lightgrey; - padding: 1em; - font-size: 11pt; - } - - h4 { border-bottom: 1px dashed lightgrey; - font-size: 10pt; - font-style: italic; - margin-left: 2em; - } - - p { margin-left: 1em; - margin-right: 1em; - } - - p.caption { margin-left: 1em; - margin-right: 1em; - font-style: italic; - } - - div.inline { float: left; - } - - div.sidebar { border: 1px solid rgb(255, 255, 0); - float: right; - background-color: rgb(255, 255, 185); - } - - a.external { } - - a.mail { } - - img { border: 0pt none ; - } - - span.pre { font-family: monospace; - } - - span.title { font-weight: bold; - } - - div.schema-space { border-left: 1px solid rgb(230, 206, 142); - padding: 0pt; - margin-left: 1em; - margin-top: 0.5em; - margin-bottom: 0.5em; - } - - div.schema-templ { border-left: 1px solid rgb(98, 161, 143); - background-color: rgb(208, 242, 233); - } - - div.schema-space-doc { margin: 1em 3em; - } - - p.schema-space { border-top: 1px solid rgb(230, 206, 142); - margin: 0pt; - padding: 1em; - font-weight: bold; - font-size: 10pt; - background-color: rgb(242, 233, 208); - } - - p.schema-reg { margin: 0pt; - padding-top: 0.4em; - padding-bottom: 0.4em; - background-color: rgb(247, 247, 247); - } - - span.schema-label { display: block; - float: left; - margin-left: 2em; - width: 10em; - } - - span.schema-value { width: 100%; - background-color: rgb(255, 255, 255); - padding-top: 0.3em; - padding-bottom: 0.3em; - } - - div.schema-value { border: 1px solid rgb(153, 171, 94); - background-color: rgb(234, 242, 208); - margin-left: 1em; - margin-right: 1em; - margin-bottom: 1em; - } - - p.schema-value-name { margin: 0.5em 1em; - padding: 0.5em 1em; - } - - span.schema-value-name { font-size: 10pt; - font-weight: bold; - } - - p.schema-value-type { } - - p.schema-value-def { } - - div.schema-value-doc { padding: 1em; - } - - diff --git a/src/windows/identity/help/html/tb_standard.htm b/src/windows/identity/help/html/tb_standard.htm deleted file mode 100644 index 69df96a62..000000000 --- a/src/windows/identity/help/html/tb_standard.htm +++ /dev/null @@ -1,80 +0,0 @@ -<html> -<head> - <title>Network Identity Manager - Standard Toolbar</title> - <meta name="description" content="Standard Toolbar"> - <meta name="keywords" content="standard toolbar"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> - <Object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> -<param name="Keyword" value="Changing Passwords"> -<param name="Keyword" value="New Credentials"> -<param name="Keyword" value="Renew Credentials"> -<param name="Keyword" value="Import Credentials"> -<param name="Keyword" value="Destroy Credentials"> -<param name="Keyword" value="Change Password"> -<param name="Keyword" value="Refresh View"> -<param name="Keyword" value="Help"> -<param name="Keyword" value="Toolbar"> -</OBJECT> - -</head> -<body> - -<h1>Network Identity Manager - Standard Toolbar</h1> - -<p>The standard toolbar appears below along with descriptions of what -each button does. -</p> - -<p> -<img src="images/screen_tb_standard.png" /> -</p> - -<ol> - - <li><span class="title">New credentials</span>: Equivalent to - selecting <span class="pre"><a href="menu_credential.htm#new">New - credentials...</a></span> from the <span class="pre"><a - href="menu_credential.htm">Credential</a></span> menu. - <p> - See <a href="act_new_creds.htm">New Credentials Action</a> for more - information.</p></li> - - <li><span class="title">Renew credentials</span>: Equivalent to - selecting <span class="pre"><a - href="menu_credential.htm#renew">Renew Credentials</a></span> from - the <span class="pre"><a - href="menu_credential.htm">Credential</a></span> menu. - <p> - See <a href="act_renew_creds.htm">Renew Credentials Action</a> for - more information.</li> - - <li><span class="title">Import credentials</span>: Equivalent to - selecting <span class="pre"><a - href="menu_credential.htm#import">Import Credentials</a></span> from - the <span class="pre"><a - href="menu_credential.htm">Credential</a></span> menu. - </li> - - <li><span class="title">Destroy credentials</span>: Equivalent to - selecting <span class="pre"><a - href="menu_credential.htm#destroy">Destroy Credentials</a></span> - from the <span class="pre"><a - href="menu_credential.htm">Credential</a></span> menu.</li> - - <li><span class="title">Change password</span>: Equivalent to - selecting <span class="pre"><a - href="menu_credential.htm#chpw">Change Password ...</a></span> from - the <span class="pre"><a - href="menu_credential.htm">Credential</a></span> menu.</li> - - <li><span class="title">Refresh view</span>: Equivalent to selecting - <span class="pre"><a href="menu_credential.htm#refresh">Refresh - View</a></span> from the <span class="pre"><a - href="menu_credential.htm">Credential</a></span> menu.</li> - - <li><span class="title">Help</span>: Displays documentation</li> - -</ol> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/template.htm b/src/windows/identity/help/html/template.htm deleted file mode 100644 index 4e33fab94..000000000 --- a/src/windows/identity/help/html/template.htm +++ /dev/null @@ -1,11 +0,0 @@ -<html> -<head> - <title>Network Identity Manager - title</title> - <meta name="description" content=""> - <meta name="keywords" content=""> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> -<body> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/use_config.htm b/src/windows/identity/help/html/use_config.htm deleted file mode 100644 index 02e22a641..000000000 --- a/src/windows/identity/help/html/use_config.htm +++ /dev/null @@ -1,306 +0,0 @@ -<html> - -<head> -<title>Network Identity Manager - Configuration</title> -<meta name="description" content> -<meta name="keywords" content="configuration"> -<link rel="stylesheet" type="text/css" href="nidmgr.css"> -<Object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> -<param name="Keyword" value="Configuration"> -<param name="Keyword" value="General Options"> -<param name="Keyword" value="Appearance Options"> -<param name="Keyword" value="Notification Options"> -<param name="Keyword" value="Plug-in Management"> -<param name="Keyword" value="Kerberos v5 Configuration"> -<param name="Keyword" value="Kerberos v4 Configuration"> -<param name="Keyword" value="Identity Default Configuration"> -<param name="Keyword" value="Identity Configuration"> -</OBJECT> -<style> -<!-- - li.MsoNormal - {mso-style-parent:""; - margin-bottom:.0001pt; - text-autospace:none; - font-size:10.0pt; - font-family:"Times New Roman"; - margin-left:0pt; margin-right:0pt; margin-top:0pt} ---> -</style> -</head> - -<body> - -<h1>Network Identity Manager - Configuration</h1> -<p>All Network Identity Manager configuration options can be accessed via the -<span class="pre">Options</span> menu. The available configuration panels are: -</p> -<ul> - <li> - <p><span class="title">General</span>: General application options for NetIDMgr.</p> - </li> - <li> - <p><span class="title">Appearance</span>: Allows you to set the font used by - NetIDMgr.</p> - </li> - <li> - <p><span class="title">Identities</span>: Default settings for all identities - and settings for each identity. Details <a href="#cfg_idents">below</a>.</p> - </li> - <li> - <p><span class="title">Notifications</span>: Notification and timer options. - NetIDMgr can issue warnings when credentials are about to expire. This configuration - panel allows you to set the thresholds at which these warnings are issued. For - example, if the warning timeout is set for 10 minutes, NetIDMgr will issue a - warning 10 minutes before a credential expires.</p> - <p>The panel also allows you to control the credentials renew timer. If the - timer is disabled, NetIDMgr will not automatically attempt to renew credentials. - If the <span class="pre">Renew at half life intervals when possible</span> option - is set, then the timer will expire after the credential has less than half its - lifetime left. If the renewal operation fails, it will attempt another renwal - after half of the remaining liftime is over (i.e. when the credential has less - than 1/4 of its original lifetime left) and so on. </p> - </li> - <li> - <p><span class="title">Plug-ins</span>: Enable/disable and check the status of - registered plug-ins. Enabling or disabling a plug-in only takes effect after - a restart of NetIDMgr.</p> - </li> - <li> - <p><span class="title">Kerberos v5</span>: Kerberos v5 Credential Provider Configuration</p> - </li> - <li> - <p><span class="title">Kerberos v4</span>: Kerberos v4 Credential Provider Configuration</p> - </li> -</ul> -<p></p> -<h3>General Options</h3> -<p>The General options dialog, accessed via the Options menu, allows you to configure -operational properties specific to the NetIdMgr application.</p> -<p><img src="images/screen_config_general.png" /> </p> -<p>The <b>Obtain new credentials at startup (if none are present)</b> checkbox will -determine whether or not NetIdMgr will display the New Credentials dialog at startup -when no valid credentials exist.</p> -<p>The <b>Destroy all credentials on exit </b>option can be used to empty all of -the credential caches when the NetIdMgr is terminated.</p> -<p>The <b>Run NetIdMgr in taskbar notification area after window close </b>checkbox -determines the behavior of the window close button. When checked, NetIdMgr will -close the window but will continue running and can be accessed from the taskbar -notification area. When unchecked, NetIdMgr will behave as if File-&gt;Exit was selected -from the menu.</p> -<p><b>Clicking on the notification icon</b> can be configured to either Show Network -Identity Manager or Obtain New Credentials. This option controls which menu item -on the notification icon menu is the default action.</p> -<p>The <b>Monitor network connectivity</b> option determines whether or not NetIdMgr -monitors the configuration of IP addresses on the machine. When IP addresses are -added or removed and this feature is activated, the NetIdMgr will probe the identity -management servers (e.g., Kerberos Key Distribution Centers) to determine if they -are reachable and if so will automatically obtain credentials.</p> -<p>The <b>Log trace events to trace log at the following location</b> option is -used to activate a log file that can be used to help debug the behavior of NetIdMgr -and its plug-ins. Press the <b>Show log</b> button to view the log file in Windows -Notepad. </p> - -<h3>Appearance Options</h3> -<p>The Appearance Options page can be used to select an alternate typeface to be -used when displaying credentials in the NetIdMgr.</p> -<p><img src="images/screen_config_appearance.png" /> </p> - - -<a name="cfg_idents"></a> -<h3>Configuration of default settings for all identities</h3> -<p>The <span class="pre">Identities</span> configuration panel allows you to set -the defaults that will be used for all identities. However, most of the settings -displayed here can be overridden with specific per-identity settings. </p> -<p>The panel will have a number of sub panels (or tabs) corresponding to each plug-in -that maintains per-identity configuration. </p> -<p>A list of identities for which configuration information is maintained will be -shown under the main <span class="pre">Identities</span> configuration panel name. -Each of these correspond to a <a href="#cfg_ident">per identity</a> configuration -panel. </p> -<p>Note that adding or removing an identity in the configuration panel only has -the effect of adding or removing the identity to or from the list of identities -for which configuration information is maintained. </p> - -<h4>Global Identity Settings</h4> -<p><img src="images/screen_config_idents.png" /> </p> -<p class="MsoNormal">There are three general settings that can be used to set -global defaults.</p> -<p class="MsoNormal">The <b>Monitor credential expiration</b> setting determines -whether or not NetIdMgr should monitor the credential lifetimes and issue -expiration notifications.&nbsp;&nbsp; This value is used as the default for all new -identities.</p> -<p class="MsoNormal">The <b>Automatically renew</b> setting determines if <i> -renewable</i> credentials are automatically renewed prior to expiration.&nbsp; This -value is used as the default for all new identities.</p> -<p class="MsoNormal">The <b>Always show in the credentials list (Pinned)</b> -setting determines whether new identities are always pinned within the -credentials list.&nbsp; A pinned identity will always be displayed regardless of -whether or not there are credentials associated with it.</p> - -<h4>Global Kerberos v5 Identity Settings</h4> -<p><img src="images/screen_config_global_krb5.png" /> </p> -<p class="MsoNormal">The global Kerberos v5 settings define default credential -lifetimes and minimum and maximum values for use in constructing the slider -controls used to set the lifetimes.&nbsp; </p> -<p class="MsoNormal">There are two expiration times associated with Kerberos -tickets.&nbsp; The first specifies the length of the time period during which the -tickets are valid for use.&nbsp; The second specifies the length of the renewable -lifetime.&nbsp; Valid Kerberos tickets may have their valid use lifetime repeatedly -extended up until the renewable lifetime expires.&nbsp; The settings on this page are -used to configure default lifetime values for NetIdMgr to use when requesting -Kerberos tickets from the Kerberos server (key distribution center).&nbsp; The -Kerberos server may issue tickets with shorter lifetimes than were requested.</p> -<p class="MsoNormal">The <b>Renewable</b>, <b>Forwardable</b>, and <b> -Addressless</b> options determine whether or not new identities default to -obtaining Kerberos v5 tickets with these options.</p> -<p class="MsoNormal">When <b>Forwardable </b>tickets are received from the -Kerberos Server, these tickets can be forwarded to a remote host when you -connect via telnet, ssh, ftp, rlogin, or similar applications.&nbsp; When tickets are -forwarded, there is no need to obtain Kerberos tickets again to access -Kerberized services on the remote host.&nbsp;&nbsp; <b>Forwardable</b> tickets are often -required when authenticating to a remote host using ssh or ftp when the remote -host requires the ability to authenticate to a remote file system such as AFS.</p> -<p class="MsoNormal">When <b>Renewable</b> tickets are received from the -Kerberos Server, the ticket lifetimes may be renewed without prompting the user -for her password.&nbsp; This allows Kerberos tickets to be issued with short -lifetimes allowing compromised accounts to be disabled on short notice without -requiring the user to enter a password every few hours.&nbsp; When combined with <b> -Automatic Ticket Renewal</b>, NetIdMgr can maintain valid tickets for a week, a -month, or longer by automatically renewing tickets prior to their expiration.&nbsp; -The ability to renew tickets without a password is limited by the ticket’s -renewable lifetime as issued by the Kerberos Server.</p> -<p class="MsoNormal">When <b>Addressless</b> is selected, the tickets do not -contain IP address information.&nbsp; This enables the tickets to be used from behind -Network Address Translators which are frequently found in Cable and DSL Modems.</p> -<p class="MsoNormal">The minimum and maximum ranges are used by the ticket -initialization dialog box when constructing the Lifetime and Renewable Lifetime -sliders.&nbsp; These sliders can be used to modify the requested ticket lifetimes -when Kerberos tickets are initialized.</p> - -<h4>Global Kerberos v4 Identity Settings</h4> -<p><img src="images/screen_config_global_krb4.png" /> </p> -<p class="MsoNormal">When the <b>Obtain Kerberos v4 credentials</b> button is -checked, NetIdMgr will attempt to retrieve Kerberos v4 credentials when ticket -initialization, renewal, or importation is performed. &nbsp;Kerberos realms are -increasingly configured to support only Kerberos v5 (e.g., Windows Active -Directory Domains.)&nbsp; If the realms you use do not support Kerberos v4 it is -suggested that this button be unchecked.</p> -<p class="MsoNormal">Be aware that only the default identity can obtain Kerberos -v4 credentials.&nbsp;&nbsp; This limitation is due to the inability of Kerberos v4 -applications on Microsoft Windows to specify a credentials cache. </p> - - -<a name="cfg_ident"></a> -<h3>Per identity configuration</h3> -<p>You can access the per-identity configuration panel for a specific identity by -selecting the identity name from the list of configuration panels in the configuration -dialog. </p> -<p>These panels are similar to the <span class="pre">Identities</span> configuration -panel, but they change per-identity settings. Changes you make in these panels will -override the defaults set in the <span class="pre">Identities</span> panel. </p> -<h4>Per identity General Configuration</h4> -<p><img src="images/screen_config_ident.png" /> </p> -<p class="MsoNormal">The General page contains a <b>Remove Identity</b> button -that can be used to delete this Identity from the Network Identity Manager.</p> - -<h4>Per identity Kerberos v5 Configuration</h4> - -<p><img src="images/screen_config_ident_krb5.png" /> </p> -<p class="MsoNormal">The Kerberos v5 page displays the name of the credential -cache currently associated with the Identity.</p> - -<h4>Per identity Kerberos v4 Configuration</h4> - -<p><img src="images/screen_config_ident_krb4.png" /></p> -<p class="MsoNormal">The Kerberos v4 page is optional and may not appear on all -systems.&nbsp; Only one identity can obtain Kerberos v4 credentials at a time.&nbsp; </p> - -<h3>Notification Configuration</h3> - -<p><img src="images/screen_config_notifications.png" /> </p> -<p class="MsoNormal">The <b>Renew automatically at</b> check box determines -whether or not renewable tickets will be renewed by NetIdMgr when they reach the -specified time remaining.&nbsp;&nbsp; </p> -<p class="MsoNormal">The <b>Initial warning at</b> check box determines whether -or not a warning will be issued when the specified time remaining is reached.</p> -<p class="MsoNormal">The <b>Final warning at</b> check box determines whether or -not a warning will be issued when the specified time remaining is reached.</p> -<p class="MsoNormal">Notifications are performed in two ways.&nbsp; First, icons are -displayed next to the affected credentials in the flags column of the display.&nbsp; -Second, a balloon tip is displayed off of the NetIdMgr taskbar notification area -icon.</p> - -<h3>Plug-in Configuration</h3> -<p><img src="images/screen_config_plug_ins.png" /> </p> -<p><span style="font-size: 10.0pt; font-family: Times New Roman">The Plug-ins -and Modules page provides status information on the currently loaded plug-ins -and modules include a description of their purpose; whether or not it was loaded -properly; which other modules are required; and what organization developed it. -</span> </p> - -<h4>Kerberos v5 Plug-in Configuration</h4> - -<p><img src="images/screen_config_plug_in_krb5.png" /> </p> -<p class="MsoNormal">The <b>Kerberos v5 Configuration</b> tab allows you to -alter the behavior of&nbsp; the Kerberos v5 identity provider.&nbsp; </p> -<p class="MsoNormal">In the <b>Default Realm</b> field, select a Kerberos realm -from the dropdown list.</p> -<p class="MsoBodyTextIndent2" style="text-indent:0pt">The <b>Include all -configured realms in New Credentials realm list</b> determines whether all of -the realms declared in the Kerberos v5 Configuration file are included in the -realms list of the <b>Obtain New Credentials</b> dialog.&nbsp; If disabled, only the -realms previously used to obtain credentials are displayed.</p> -<p class="MsoBodyTextIndent2" style="text-indent:0pt">The <b>Configuration File -</b>field displays the path to the Kerberos v5 configuration file, krb5.ini.</p> -<p class="MsoNormal"><span style="display: none">The Kerberos libraries depend -on configuration files for their proper operation.&nbsp; When <b>Create file if -missing </b>is checked, NetIdMgr will construct replacements for missing -configuration files upon startup.&nbsp; This is performed by extracting Kerberos -configuration information from the local Windows registry and the Domain Name -System.&nbsp; The contents of the created file may then be edited using the <b> -Kerberos Properties Dialog</b>.&nbsp; [This functionality is not available in this -release.]</span></p> -<p class="MsoNormal">The field labeled <b>Host Name</b> displays the name of -your local machine.&nbsp; The <b>Domain Name</b> field displays the domain to which -your local machine currently belongs.&nbsp;</p> -<p class="MsoNormal">The <b>Import Tickets</b> listbox allows you to configure -how NetIdMgr interacts with the Microsoft Kerberos Authentication Provider.&nbsp; -NetIdMgr will automatically import Kerberos Tickets from the Microsoft LSA at -startup depending upon the selected option and whether or not the Kerberos -Authentication Provider was used for Windows Logon authorization.&nbsp; </p> -<ul style="margin-top: 0pt; margin-bottom: 0pt" type="disc"> - <li class="MsoNormal"><b>Never</b> means do not import tickets from the - MSLSA; </li> - <li class="MsoNormal"><b>Always</b> means do import tickets from the MSLSA; - and </li> - <li class="MsoNormal"><b>Only when the Principal matches</b> means import - tickets from the MSLSA only if the MSLSA Kerberos principal belongs to the - Default Realm.</li> -</ul> -<p class="MsoNormal">When the Windows Logon identity is imported and is -configured as the default identity, the MIT credential cache will be used in -preference to the MSLSA credential cache.</p> - -<h4>Kerberos v5 Realm Configuration</h4> -<p><img src="images/screen_config_plug_in_krb5_realm.png" /> </p> - -<h4>Kerberos v5 Credential Cache Configuration</h4> -<p><img src="images/screen_config_plug_in_krb5_ccache.png" /> </p> -<p class="MsoNormal">The Kerberos Realm Configuration dialog can be used to -manage the contents of the [Realms] and [Domain_Realm] sections of the Kerberos -v5 configuration file.</p> - -<h4>Kerberos v4 Plug-in Configuration</h4> -<p><img src="images/screen_config_plug_in_krb4.png" /> </p> -<p class="MsoBodyTextIndent2" style="text-indent:0pt">Here, you can specify the -name of the in-memory cache used to store the Kerberos v4 tickets.&nbsp; The format -of the name is “API:” followed by the cache name.&nbsp; Disk caches are not supported -by Kerberos for Windows.</p> -<p class="MsoNormal">The paths to the Kerberos v4 configuration files: krb.con -and krbrealm.con may be viewed from this dialog.&nbsp; The default is to store the -configuration files in the Windows directory.</p> - -</body> - -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/use_icon.htm b/src/windows/identity/help/html/use_icon.htm deleted file mode 100644 index bb8af5225..000000000 --- a/src/windows/identity/help/html/use_icon.htm +++ /dev/null @@ -1,74 +0,0 @@ -<html> -<head> - <title>Network Identity Manager Notification Icon</title> - <meta name="description" content="NetIDMgr Notification Icon"> - <meta name="keywords" content="icon, netidmgr, notification, tray"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> -<body> - -<h1>Network Identity Manager Notification Icon</h1> -<h3>Visual Representation of Identity State Information</h3> - -<p>When Network Identity Manager is running, an icon will appear in the taskbar notification area.&nbsp; The icon will change to reflect the current state of -the managed credentials.</p> - -<p>The icons and their meanings are described below:</p> - -<table width="100%" border="1"> - -<tr> -<td><img src="images/appicon_empty.png" /></td> -<td>There are no managed credentials for any identity.</td> -</tr> - -<tr> -<td><img src="images/appicon_good.png" /></td> -<td>There are valid credentials for all the identities.</td> -</tr> - -<tr> -<td><img src="images/appicon_warnexp.png" /></td> <td>Some of the -credentials will expire in the next few minutes. This icon will be -displayed even if automatic renewals are enabled. In this case, the -credentials in question may get renewed before they expire, and the -icon will change to reflect this change.</td> </tr> - -<tr> -<td><img src="images/appicon_expired.png" /></td> -<td>At least one identity's credentials have expired.</td> -</tr> - -<tr> -<td><img src="images/appicon_warning.png" /></td> <td>A warning -message is waiting to be displayed. Click the icon to view the -warning message.</td> </tr> - -</table> - -<h3>Notification Icon Menu</h3> -<p>Clicking on the notification with the second mouse button displays a menu -(see right) which contains the most commonly used Network Identity Manager -operations.&nbsp; </p> - -<ul> - <li><a href="act_new_creds.htm">Obtaining new credentials</a></li> - <li><a href="act_renew_creds.htm">Renew credentials</a></li> - <li><a href="act_import_creds.htm">Import credentials from the Microsoft Logon - Session cache</a></li> - <li><a href="act_destroy_creds.htm">Destroying credentials</a></li> - <li><a href="act_set_default.htm">Setting the Default Identity</a></li> - <li><a href="act_chpw.htm">Change password</a></li> -</ul> - -<div class="sidebar"> -<img src="images/notification_icon_menu.png" /> -<p class="caption">Figure 1. Notification Icon Menu</p> -</div> -<p></p> -<h3>Notification Icon Default Action</h3> - -<p>Clicking on the icon with the first mouse button will open or close the Network Identity Manager application window or open the Obtain New Credentials dialog based upon the current configuration. The behavior can be adjusted from the Options-&gt;General page. Clicking with the second mouse button will display a menu of commands.</p> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/use_layout.htm b/src/windows/identity/help/html/use_layout.htm deleted file mode 100644 index 351cafd5f..000000000 --- a/src/windows/identity/help/html/use_layout.htm +++ /dev/null @@ -1,91 +0,0 @@ -<html> -<head> - <title>Network Identity Manager - Managing the credentials view layout</title> - <meta name="description" content="Managing the credentials view layout"> - <meta name="keywords" content="view, layout"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> - <Object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> -<param name="Keyword" value="Credential View Layouts"> -<param name="Keyword" value="Sorting credentials by a column"> -<param name="Keyword" value="Grouping credentials by a column"> -<param name="Keyword" value="Selecting Columns"> -</OBJECT> -</head> -<body> - -<h1>Network Identity Manager - Managing the credentials view layout</h1> - -<p>The credentials view layout provides an outlined view of the -credentials that are being managed by NetIDMgr. The columns that are -displayed in the window, the columns that are used for grouping and -sorting the list of credentials can be customized. </p> - -<p>The following sections provide more details on the types of -customizations that can be performed:</p> - -<ul> - <li><a href="#predef">Predefined layouts</a></li> - <li><a href="#addcol">Adding and removing columns.</a></li> - <li><a href="#sort">Sorting by a column.</a></li> - <li><a href="#group">Grouping by a column.</a></li> -</ul> - -<a name="predef"></a> -<h3>Pre-defined layouts</h3> - -<p>The predefined layouts in NetIDMgr are:</p> - -<ul> - - <li><span class="title">By Identity</span>: Credentials grouped by - identity, credentials type and location, and finally sorted by - credential name.</li> - - <li><span class="title">By Type</span>: Credentials grouped by - credentials type and then by identity.</li> - - <li><span class="title">By Location</span>: Credentials grouped by - location, identity and then by credentials type. The location is - reported by individual credentials providers that indicate where - each credential is stored. For Kerberos 5 and Kerberos 4, this is a - credentials cache name.</li> - -</ul> - -<a name="addcol"></a> -<h3>Adding and removing columns</h3> - -<p>The <span class="pre">View Columns</span> menu lists all the -columns that are available for display. Each column that is already -displayed will have a check mark next to it. Selecting a column that -is not currently being displayed will add that column to the display. -Selecting a column that is is being displayed will remove it from the -display.</p> - -<p>This menu can be reached either by right-clicking the column header -area or by invoking the <span class="pre">View</span> menu. The menu -is shown below.</p> - -<p><img src="images/screen_menu_view_cols.png"/> </p> - -<a name="sort"></a> -<h3>Sorting by a column</h3> - -<p>Clicking on a column header will change the sort order of the -column if it is already being used as a sort key. If the colunm is -not currently being used as a sort key, clicking on the column header -will start sorting in increasing order by that column.</p> - -<p>Double-clicking a column that is not used for grouping will stop -sorting by that column.</p> - -<a name="group"></a> -<h3>Grouping by a column</h3> - -<p>Double-clicking on a column header will start grouping by that -column if the column is currently not being used as a sort key. If -the column is currently being used for grouping, then double-clicking -will stop it from being used for grouping.</p> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/use_start.htm b/src/windows/identity/help/html/use_start.htm deleted file mode 100644 index 3e7b5fa82..000000000 --- a/src/windows/identity/help/html/use_start.htm +++ /dev/null @@ -1,70 +0,0 @@ -<html> -<head> - <title>Network Identity Manager - Starting Network Identity Manager</title> - <meta name="description" content="starting NetIDMgr"> - <meta name="keywords" content="starting"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> -<body> - -<h1>Network Identity Manager - Starting Network Identity Manager</h1> - -<h3>Opening the Network Identity Manager window from the notification icon</h3> - -<p>Depending on how Network Identity Manager was installed, it may be configured -with a shortcut in the Startup Folder, or it may require a manual start. NetIDMgr is a -notification tray application and therefore it is not listed in the Microsoft -Windows task bar.&nbsp; This design is based on the assumption that most users -rarely interact directly with the application.</p> - -<div class="sidebar"> -<img src="images/screen_tray_icon.png"/> -<p class="caption">Figure 1: NetIDMgr notification icon</p> -</div> - -<p>When NetIDMgr is running, it places an icon in the system -notification area (sometimes referred to as the "system tray") as -shown in figure 1. Details about the state information represented by -the icon can be found <a href="use_icon.htm">here</a>.</p> - -<p>Left clicking on this icon executes the default action which either changes -the view state of the credential list or displays the <i>Obtain New Credentials</i> -dialog. Right clicking on the icon displays a menu.</p> - -<h3>Starting Network Identity Manager from the Start Menu or command line</h3> - -<div class="sidebar"> -<img src="images/screen_app_icon.png" /> -<p class="caption">Figure 2: NetIDMgr application shortcut</p> -</div> - -<p>If NetIDMgr was not configured to start automatically when you -login to Windows, then you need to start it either from the -commandline or the start menu. The start menu application icon is -under "Kerberos for Windows" as shown in figure 2.</p> - -<p>Alternatively, you can type 'netidmgr' at a command shell to start -NetIDMgr as well. When starting this way, you may specify additional -<a href="cmdline_netidmgr.htm">command line options</a>.</p> - -<h3>Configuring startup options</h3> - -<p> -Note that you can configure options related to the startup of NetIDMgr -by using the NetIDMgr configuration dialog box. You can use the menu -items under the <span class="pre">Options</span> menu to invoke the -configuration dialog. -</p> - -<p> -Only one instance of NetIDMgr can be running at any one time. -Attempting to start NetIDMgr while it is still running will not do -anything, unless you provide any command line options that trigger -some action in the running application instance. If more than one -version of NetIDMgr is installed on the system, and the older version -is running at the time the newer version is started, the older version -will exit allowing the newer version to take over. -</p> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/using.htm b/src/windows/identity/help/html/using.htm deleted file mode 100644 index 7b5520147..000000000 --- a/src/windows/identity/help/html/using.htm +++ /dev/null @@ -1,58 +0,0 @@ -<html> -<head> - <title>Using Network Identity Manager</title> - <meta name="description" content="Using NetIDMgr"> - <meta name="keywords" content="using"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> -</head> -<body> - -<h1>Using Network Identity Manager</h1> - -<p> -Depending on how Network Identity Manager was installed, it might already be running -in the Windows taskbar notification area or it might need to be started -manually. See the topic <a href="use_start.htm">Starting -Network Identity Manager</a> for details.&nbsp; -</p> -<p> -To open the NetIDMgr window when the <a href="use_icon.htm">application -icon</a> is displayed in the Windows taskbar notification area, click on the -icon with the 2nd mouse button (usually the right mouse button) and select <b>Show Network Identity Manager window</b> from the menu. -</p> -<p> -If NetIdMgr is not displayed in the Windows taskbar notification area, it can be -started from the -Start Menu, or type 'netidmgr' at a command prompt. -</p> - -<p> -Once the NetIDMgr window is visible, you will be presented with a view -of your existing identities, or a message notifying you that you -don't have any.&nbsp;&nbsp; Details of the credentials view objects <a -href="wnd_main.htm">can be found here.</a> -</p> - -<p> -Brief overviews of how to perform common tasks are linked below: -</p> - -<ul> - <li><a href="act_new_creds.htm">Obtaining new credentials</a></li> - <li><a href="act_renew_creds.htm">Renew credentials</a></li> - <li><a href="act_import_creds.htm">Import credentials from the Microsoft Logon - Session cache</a></li> - <li><a href="act_destroy_creds.htm">Destroying credentials</a></li> - <li><a href="act_chpw.htm">Change password</a></li> - <li><a href="act_set_default.htm">Setting the default identity</a></li> - <li><a href="use_layout.htm">Customizing the advanced credentials view layout</a></li> - <li><a href="use_config.htm">Configuring Network Identity Manager</a></li> - <li><a href="tb_standard.htm">Using the Toolbar</a></li> -</ul> - -<p> -A more comprehensive list of how-to topics can be found in the -<a href="howdoi.htm">How do I...</a> section.</p> - -</body> -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/welcome.htm b/src/windows/identity/help/html/welcome.htm deleted file mode 100644 index a12c1d37d..000000000 --- a/src/windows/identity/help/html/welcome.htm +++ /dev/null @@ -1,130 +0,0 @@ -<html> -<head> - <title>Welcome to the Network Identity Manager</title> - <meta name="description" content="Welcome"> - <meta name="keywords" content="welcome"> - <link rel="stylesheet" type="text/css" href="nidmgr.css"> - <style> -</style> -</head> - -<h1>Welcome to the Network Identity Manager</h1> - -<div class="inline"> -<img src="images/logo.jpg" width="100" height="100"/> -</div> - -<p>Network Identity Manager (NetIdMgr) is a graphical -tool designed to simplify the management of network identities and their credentials -which are used by network authentication protocols while providing -secure access to network services.&nbsp; When NetIDMgr is used with Kerberos v5 each -network identity is a unique Kerberos principal name and the credentials -are Kerberos v5 tickets.&nbsp; Kerberos v5 tickets can be used by NetIDMgr to -obtain Andrew File System (AFS) tokens and X.509 public key certificates if the -appropriate plug-ins are installed.</p> -<p>When you log into Microsoft Windows with a domain account, -your account name and the Windows Domain name when combined form a Kerberos -principal name.&nbsp; As an example, “WINDOWS\jaltman” is actually a short form -representation of -jaltman@WINDOWS.SECURE-ENDPOINTS.COM.&nbsp;&nbsp; Microsoft Windows uses -Kerberos-based network identities for all domain-based network authentications.&nbsp; -</p> -<p>Since Microsoft Windows already provides a network -identity, why do you need NetIdMgr?&nbsp; Here are some examples:</p> -<ol> - <li>Your only network identity is your Windows Domain - account but you have third-party applications that rely on MIT Kerberos for - authentication for access to remote files, e-mail, web data, or other - services.&nbsp; In this scenario, NetIdMgr will automatically import your Windows - Domain credentials into a form that can be used by applications that rely on - MIT Kerberos.</li> - <li>You do not have a Windows Domain account but you must - obtain network credentials in order to securely access a network service.&nbsp; - In this scenario, NetIdMgr can be used to obtain new credentials for network - identities and can automatically renew them before they expire.</li> - <li>You have Kerberos credentials for a network identity - and you have third-party applications that require an alternative form of - network credential, such as an AFS token or a X.509 certificate, which can - be obtained via a Kerberos authentication.&nbsp; In this scenario, NetIdMgr can - automatically use your existing credentials to obtain and renew the - additional network credentials types.</li> - <li>You have a Windows Domain account but you need to - authenticate to a service belonging to a Kerberos realm outside the Windows - Domain.&nbsp; In this scenario, NetIdMgr can be used to manage multiple network - identities, the Windows Domain identity as well as the additional Kerberos - identity required for the external network services.&nbsp; </li> - <li>You have multiple network identities within the same - Kerberos realm which are used for different roles.&nbsp; For example, an - unprivileged user identity and a privileged identity that is only meant to - be used for system administration.&nbsp; In this scenario, NetIdMgr can be used - to obtain credentials for all of your identities and automatically renew - them as necessary.</li> -</ol> -<p>NetIdMgr’s automated credential acquisition and renewal -makes it an invaluable tool which provides users with a Single Sign-on -experience. </p> -<p>NetIdMgr is most commonly configured as a StartUp item that runs an icon in the Taskbar Notification Area until you logout.&nbsp; -While running, NetIDMgr automatically renews your credentials, notifies you of -pending expirations and prompts you when a Kerberized application requires -credentials that have not already been obtained.&nbsp; </p> -<p>When configured to do so, NetIdMgr will prompt you -immediately after it starts to obtain Kerberos credentials.&nbsp; This is often -referred to as logging on to Kerberos.&nbsp; NetIdMgr does not perform a logon in the -sense of the Windows Logon Service.&nbsp; A logon service would do more than manage -Kerberos tickets. A logon service would authenticate you to the local machine, -validate access to your local file system and performs additional set-up tasks. -These are beyond the scope of NetIdMgr. NetIdMgr simply allows you to manage -Kerberos identities on behalf of compatible applications and to change your -Kerberos password.</p> -<p> -NetIDMgr is distributed as a part of MIT Kerberos for Windows -along with the Kerberos v5 and Kerberos v4 plug-ins. Plug-ins for additional -credential types including AFS tokens and KCA certificates are available as -separate distributions.&nbsp; The OpenAFS plug-in, which is required for supporting AFS tokens, is -distributed as part of <a href="http://www.openafs.org/windows.html">OpenAFS for -Windows</a>.&nbsp; The KCA plug-in is distributed by -<a href="http://www.secure-endpoints.com/">Secure Endpoints Inc.</a></p> - -<ul> -<li><a href="copyright.htm">Legal information</a></li> -<li><a href="bugs.htm">Reporting problems</a></li> -</ul> - -<h3>Getting started</h3> - -<ul> -<li><a href="concepts.htm">Network Identity Manager concepts</a></li> -<li><a href="using.htm">Using Network Identity Manager</a></li> -<li><a href="howdoi.htm">How do I ...</a></li> -<li><a href="menu_all.htm">All Menus</a></li> -</ul> - -<h3>Information for developers</h3> - -<p> -If you are interested in developing plug-ins or extending the features -of NetIDMgr, your first stop should be the NetIDMgr SDK which is included in the -MIT Kerberos for Windows SDK.</p> - -<p> -Contact the <a -href="mailto:netidmgr@secure-endpoints.com">netidmgr@secure-endpoints.com</a> -mailing list with questions or comments.</p> - -<h3>External links</h3> - -<ul> -<li><a class="external" href="http://web.mit.edu/kerberos">http://web.mit.edu/kerberos</a>: - -MIT Kerberos distribution -</li> -<li><a class="external" href="http://www.openafs.org/windows.html">http://www.openafs.org/windows.html</a>: - -OpenAFS for Windows -</li> -<li> -<a class="external" href="http://www.secure-endpoints.com/">http://www.secure-endpoints.com/</a>: -Secure Endpoints Inc.</li> -</ul> - -</html> \ No newline at end of file diff --git a/src/windows/identity/help/html/wnd_main.htm b/src/windows/identity/help/html/wnd_main.htm deleted file mode 100644 index 85707cd6e..000000000 --- a/src/windows/identity/help/html/wnd_main.htm +++ /dev/null @@ -1,114 +0,0 @@ -<html> - -<head> -<title>Network Identity Manager - Application Window</title> -<meta name="description" content="Main Window"> -<meta name="keywords" content="main window"> -<link rel="stylesheet" type="text/css" href="nidmgr.css"> -<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> -<param name="Keyword" value="Application Window Basic View"> -<param name="Keyword" value="Application Windows Advanced View"> -<param name="Keyword" value="Identity Views"> -</object> -<style> -v\:* { behavior: url(#default#VML) } -o\:* { behavior: url(#default#VML) } -</style> -<!--[if gte mso 9]><xml><o:shapedefaults v:ext="edit" spidmax="1027"/> - -</xml><![endif]--> -</head> - -<body> - -<h1>Network Identity Manager - Application Window</h1> -<p>The application window of Network Identity Manager can be displayed in two modes: -<b>basic</b> and <b>advanced</b>.</p> -<p>The basic view provides status information of the currently available identities -whereas the advanced view provides more detailed information of all the active credentials.</p> -<div> -<img src="images/screen_main_wnd_basic.png" /> -<p class="caption">Figure 1. Network Identity Manager Basic View</p> -</div> -<div> -<img src="images/screen_main_wnd.png" /> -<p class="caption">Figure 2. Network Identity Manager Advanced View</p> -</div> -<ol> -<li>Menu bar</li> -<li>Tool bar</li> -<li>Credentials list</li> -</ol> -<h3>Identity views</h3> -<p>The advanced credentials view organizes them grouped by identity name and then -by credential type. Each credential is then shown under each group heading sorted -by the credential name. The default headings for the credential view provides you -with a minimal amount of information to reduce clutter. If you wish you can add -columns to the display using the <span class="pre">Choose columns...</span> action -on the <span class="pre"><a href="menu_view.htm">View</a></span> menu. </p> -<p>The header backgrounds and the credential rows change color if the credentials -are about to expire or are expired. </p> -<ul> -<li><span style="background-color:#fbc74d">Headers</span> mean that credentials -at that level will expire unless renewed. Credentials will have a warning icon -next to them.<br /> -The threshold for this can be set as the <span class="pre">Warn</span> parameter -in the <span class="pre">Notifications</span> configuration panel.</li> -<li><span style="background-color:#f08575">Headers</span> mean that credentials -at that level will expire in a few minutes. Credentials will have a critical -icon next to them.<br /> -The threshold for this can be set as the <span class="pre">Warn again</span> -parameter in the <span class="pre">Notifications</span> configuration panel. -</li> -<li><span style="background-color:#ff9090">Headers</span> mean that the credentials -at that level have expired. Credentials will have an expired icon next to them.<br /> -The threshold for this is always zero. </li> -</ul> -<p class="MsoNormal">In its default configuration, the NetIdMgr advanced view displays -a list of network identity names (aka Kerberos principals, user@REALM).&nbsp; Each -entry appears with a -<img border="0" width="16" height="15" src="images\wdg_collapsed_hi.bmp"> -or <img border="0" width="16" height="15" src="images\wdg_expanded_hi.bmp"> -button, a pushpin <img border="0" width="16" height="15" src="images\wdg_stuck_hi.bmp"> -or <img border="0" width="16" height="15" src="images\wdg_stick_hi.bmp">&nbsp; -button and an Identity icon <img border="0" width="16" height="15" src="images\id-sm.bmp"> -to its left.&nbsp; </p> -<p class="MsoNormal">Click on the -<img border="0" width="16" height="15" src="images\wdg_collapsed_hi.bmp"> -button of an identity to expand the branch, displaying a <img border="0" width="16" height="15" src="images\wdg_expanded_hi.bmp"> - -button.&nbsp; Click on the <img border="0" width="16" height="15" src="images\wdg_expanded_hi.bmp"> -button to hide the branch.</p> -<p class="MsoNormal">Click on the pushpin <img border="0" width="16" height="15" src="images\wdg_stuck_hi.bmp"> -or <img border="0" width="16" height="15" src="images\wdg_stick_hi.bmp">&nbsp; -button to pin the identity to the display.&nbsp; A pinned identity will be -displayed in the identity list regardless of whether or not it has matching -credentials.</p> -<p class="MsoNormal">Click on the Identity icon <img border="0" width="16" height="15" src="images\id-sm.bmp"> -to view the identity's properties dialog.</p> -<p class="MsoNormal">To the right of each credential is a flag icon representing -one of the following states: </p> -<p class="MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = credentials are valid</p> -<p class="MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<img border="0" width="16" height="15" src="images\flag_renewable.bmp"> -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -= credentials are valid and renewable</p> -<p class="MsoNormal" style="text-indent:36.0pt"><img border="0" width="16" height="15" src="images\flag-warning.bmp"> -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -= credentials are valid and the initial expiration warning has been issued </p> -<p class="MsoNormal" style="text-indent:36.0pt"> -<img border="0" width="16" height="15" src="images\flag-critical.bmp"> -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -= credentials are valid and the final expiration warning has been issued</p> -<p class="MsoNormal" style="text-indent:36.0pt"> -<img border="0" width="16" height="15" src="images\flag_expired.bmp"> -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -= credentials are invalid or expired</p> -<p class="MsoNormal">&nbsp;</p> -<p>&nbsp;</p> -<p></p> - -</body> - -</html> diff --git a/src/windows/identity/help/khhelp.h b/src/windows/identity/help/khhelp.h deleted file mode 100644 index f6fbd3f78..000000000 --- a/src/windows/identity/help/khhelp.h +++ /dev/null @@ -1,33 +0,0 @@ -#define IDH_WELCOME 1000 -#define IDH_WIN_MAIN 1001 - -#define IDH_MENU_FILE 1501 -#define IDH_MENU_CRED 1502 -#define IDH_MENU_VIEW 1503 -#define IDH_MENU_OPTIONS 1504 -#define IDH_MENU_HELP 1505 - -#define IDH_ACTION_PROPERTIES 2000 -#define IDH_ACTION_EXIT 2001 -#define IDH_ACTION_NEW_ID 2002 -#define IDH_ACTION_SET_DEF_ID 2003 -#define IDH_ACTION_SET_SRCH_ID 2004 -#define IDH_ACTION_DESTROY_ID 2005 -#define IDH_ACTION_RENEW_ID 2006 -#define IDH_ACTION_PASSWD_ID 2007 -#define IDH_ACTION_NEW_CRED 2008 -#define IDH_ACTION_CHOOSE_COLS 2009 -#define IDH_ACTION_DEBUG_WINDOW 2010 -#define IDH_ACTION_VIEW_REFRESH 2011 -#define IDH_ACTION_OPT_KHIM 2012 -#define IDH_ACTION_OPT_INIT 2013 -#define IDH_ACTION_OPT_NOTIF 2014 - -#define IDH_NC_CREDWND 3000 -#define IDH_NC_OK 3001 -#define IDH_NC_CANCEL 3002 -#define IDH_NC_HELP 3003 -#define IDH_NC_TABBUTTON 3004 -#define IDH_NC_ADVANCED 3005 -#define IDH_NC_TABMAIN 3006 -#define IDH_NC_SETDEF 3007 diff --git a/src/windows/identity/help/netidmgr.hhp b/src/windows/identity/help/netidmgr.hhp deleted file mode 100644 index b22e07a0a..000000000 --- a/src/windows/identity/help/netidmgr.hhp +++ /dev/null @@ -1,35 +0,0 @@ -[OPTIONS] -Auto Index=Yes -Compatibility=1.1 or later -Compiled file=netidmgr.chm -Contents file=toc.hhc -Default Window=MainHelpWnd -Default topic=html/welcome.htm -Display compile progress=No -Index file=Index.hhk -Language=0x409 English (United States) -Title=NetIDMgr - -[WINDOWS] -MainHelpWnd="NetIDMgr Help","toc.hhc","Index.hhk","html/welcome.htm","html/welcome.htm",,,,,0x42120,,0x384e,[271,372,593,566],0x830000,,,,,,0 - - -[ALIAS] -IDH_ACTION_NEW_ID=html\act_new_creds.htm -IDH_ACTION_PASSWD_ID=html\act_chpw.htm -IDH_WELCOME=html\welcome.htm - -[MAP] -#include khhelp.h - -[TEXT POPUPS] -khhelp.h -popups_newcreds.txt -popups_password.txt - -[INFOTYPES] -Category:Concepts -CategoryDesc:Authentication, authorization and related concepts. -Category:Usage -CategoryDesc:Usage instructions for NetIDMgr - diff --git a/src/windows/identity/help/popups.txt b/src/windows/identity/help/popups.txt deleted file mode 100644 index 564d4ddac..000000000 --- a/src/windows/identity/help/popups.txt +++ /dev/null @@ -1 +0,0 @@ -foo diff --git a/src/windows/identity/help/popups_newcreds.txt b/src/windows/identity/help/popups_newcreds.txt deleted file mode 100644 index 1ab97f378..000000000 --- a/src/windows/identity/help/popups_newcreds.txt +++ /dev/null @@ -1,30 +0,0 @@ -.topic IDH_NC_TABMAIN -Opens the identity selection panel. - -.topic IDH_NC_TABBUTTON -Opens the option panel for this credentials type. - -.topic IDH_NC_OK -Obtains new credentials using the information that you provided. - -.topic IDH_NC_CANCEL -Cancels the new credentials operation. - -.topic IDH_NC_HELP -Provides help for this dialog box. - -.topic IDH_NC_ADVANCED -Expands the dialog and allows you to set additional -options for the credentials that will be obtained -by this dialog. - -.topic IDH_NC_CREDWND -Provides an overview of the credentials that will be obtained -after the successful completion of the new credentials dialog. -Clicking on the hyperlinks will take you to the corresponding -credentials option panels where you will be able to set -additional options for each type. - -.topic IDH_NC_SETDEF -If checked, once the credentials acquisition operation completes, the -identity will be set as the default. diff --git a/src/windows/identity/help/popups_password.txt b/src/windows/identity/help/popups_password.txt deleted file mode 100644 index 567236391..000000000 --- a/src/windows/identity/help/popups_password.txt +++ /dev/null @@ -1,19 +0,0 @@ -.topic IDH_NC_TABMAIN -Switches to the identity selection panel. - -.topic IDH_NC_TABBUTTON -Switches to the options pangel for this credential type. - -.topic IDH_NC_OK -Change the password for the selected identity. - -.topic IDH_NC_CANCEL -Cancel the change password operation. - -.topic IDH_NC_ADVANCED -Expand the dialog and make the option pages visible for the credential -types for which you will be changing the password for. - -.topic IDH_NC_CREDWND -A brief overview of the credential types and the identities for which -the password will be changed. diff --git a/src/windows/identity/help/toc.hhc b/src/windows/identity/help/toc.hhc deleted file mode 100644 index 34d0f0a4d..000000000 --- a/src/windows/identity/help/toc.hhc +++ /dev/null @@ -1,144 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> -<HTML> -<HEAD> -<meta name="GENERATOR" content="Microsoft&reg; HTML Help Workshop 4.1"> -<!-- Sitemap 1.0 --> -</HEAD><BODY> -<OBJECT type="text/site properties"> - <param name="Category" value="Concepts"> - <param name="CategoryDesc" value="Authentication, authorization and related concepts."> - <param name="Category" value="Usage"> - <param name="CategoryDesc" value="Usage instructions for Network Identity Manager"> - <param name="Window Styles" value="0x800025"> -</OBJECT> -<UL> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Welcome to Network Identity Manager"> - <param name="Local" value="html\welcome.htm"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="How do I ..."> - <param name="Local" value="html\howdoi.htm"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="About NetIDMgr"> - <param name="Local" value="html\about_netidmgr.htm"> - </OBJECT> - <UL> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Reporting bugs"> - <param name="Local" value="html\bugs.htm"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="License agreement"> - <param name="Local" value="html\copyright.htm"> - </OBJECT> - </UL> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Concepts"> - <param name="Local" value="html\concepts.htm"> - </OBJECT> - <UL> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Identities"> - <param name="Local" value="html\concept_identity.htm"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Identity Provider"> - <param name="Local" value="html\concept_ident_pro.htm"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Credentials Provider"> - <param name="Local" value="html\concept_cred_pro.htm"> - </OBJECT> - </UL> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Using NetIDMgr"> - <param name="Local" value="html\using.htm"> - </OBJECT> - <UL> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Starting"> - <param name="Local" value="html\use_start.htm"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Notification icon"> - <param name="Local" value="html\use_icon.htm"> - </OBJECT> - - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Managing the credentials view layout"> - <param name="Local" value="html\use_layout.htm"> - </OBJECT> - - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Configuring NetIDMgr and identities"> - <param name="Local" value="html\use_config.htm"> - </OBJECT> - </UL> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Menus and Toolbars"> - <param name="Local" value="html\menu_all.htm"> - </OBJECT> - <UL> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="File Menu"> - <param name="Local" value="html\menu_file.htm"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Credential menu"> - <param name="Local" value="html\menu_credential.htm"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="View Menu"> - <param name="Local" value="html\menu_view.htm"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Options Menu"> - <param name="Local" value="html\menu_options.htm"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Help Menu"> - <param name="Local" value="html\menu_help.htm"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Standard Toolbar"> - <param name="Local" value="html\tb_standard.htm"> - </OBJECT> - </UL> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Actions"> - </OBJECT> - <UL> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="New Credentials"> - <param name="Local" value="html\act_new_creds.htm"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Renew Credentials"> - <param name="Local" value="html\act_renew_creds.htm"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Destroy Credentials"> - <param name="Local" value="html\act_destroy_creds.htm"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Set As Default"> - <param name="Local" value="html\act_set_default.htm"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Change Password"> - <param name="Local" value="html\act_chpw.htm"> - </OBJECT> - </UL> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Windows and dialogs"> - </OBJECT> - <UL> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Main Window"> - <param name="Local" value="html\wnd_main.htm"> - </OBJECT> - </UL> -</UL> -</BODY></HTML> diff --git a/src/windows/identity/include/Makefile b/src/windows/identity/include/Makefile deleted file mode 100644 index 70fe8c408..000000000 --- a/src/windows/identity/include/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -# -# Copyright (c) 2004 Massachusetts Institute of Technology -# -# 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. - - -MODULE=include -!include <../config/Makefile.w32> - -INCFILES= \ - $(INCDIR)\khdefs.h \ - $(INCDIR)\kherror.h \ - $(INCDIR)\khlist.h \ - $(INCDIR)\khmsgtypes.h \ - $(INCDIR)\netidmgr.h - -all: $(INCFILES) - -clean:: - if exist "$(INCDIR)" $(RM) $(INCFILES) diff --git a/src/windows/identity/include/khdefs.h b/src/windows/identity/include/khdefs.h deleted file mode 100644 index e1246c4ae..000000000 --- a/src/windows/identity/include/khdefs.h +++ /dev/null @@ -1,243 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KHDEFS_H__ -#define __KHIMAIRA_KHDEFS_H__ - -/*! \defgroup khdef Core definitions - - Key type definitions used throughout NetIDMgr. - */ -/*@{*/ -#include<stddef.h> -#include<limits.h> -#include<wchar.h> - -/*!\typedef khm_octet - \brief A byte (8 bit unsigned)*/ - -/*!\typedef khm_int16 - \brief A signed 16 bit quantity */ - -/*!\typedef khm_ui_2 - \brief An unsigned 16 bit quantity */ - -/*!\typedef khm_int32 - \brief A signed 32 bit quantity */ - -/*!\typedef khm_ui_4 - \brief An unsigned 32 bit quantity */ - -/*!\typedef khm_int64 - \brief A signed 64 bit quantity */ - -/*!\typedef khm_ui_8 - \brief An unsigned 64 bit quantity */ - -typedef unsigned __int8 khm_octet; - -typedef __int16 khm_int16; -typedef unsigned __int16 khm_ui_2; - -typedef __int32 khm_int32; -typedef unsigned __int32 khm_ui_4; - -typedef __int64 khm_int64; -typedef unsigned __int64 khm_ui_8; - -#define VALID_INT_BITS INT_MAX -#define VALID_UINT_BITS UINT_MAX - -#define KHM_UINT32_MAX 4294967295 - -#define KHM_INT32_MAX 2147483647 -/* this strange form is necessary since - is a unary operator, not a sign - indicator */ -#define KHM_INT32_MIN (-KHM_INT32_MAX-1) - -#define KHM_UINT16_MAX 65535 - -#define KHM_INT16_MAX 32767 -/* this strange form is necessary since - is a unary operator, not a sign - indicator */ -#define KHM_INT16_MIN (-KHM_INT16_MAX-1) - -/*! \brief Generic handle type. - - Handles in NetIDMgr are generic pointers. -*/ -typedef void * khm_handle; - -/*! \brief The invalid handle - - Just used to indicate that this handle does not point to anything useful. - Usually returned by a function that returns a handle as a signal that the - operation failed. -*/ -#define KHM_INVALID_HANDLE ((khm_handle) NULL) - -/*! \brief Boolean. -*/ -typedef khm_int32 khm_boolean; - -/*! \brief A size - */ -typedef size_t khm_size; - -/*! \typedef ssize_t - \brief Signed size specifier - - Just a signed version of size_t - */ - -#ifndef _SSIZE_T_DEFINED -#ifdef _WIN64 -typedef __int64 ssize_t; -#else -typedef _W64 int ssize_t; -#endif -#define _SSIZE_T_DEFINED -#endif - -typedef ssize_t khm_ssize; - -#if defined(_WIN64) -typedef unsigned __int64 khm_wparm; -/*TODO: is this enough? */ -typedef unsigned __int64 khm_lparm; -#elif defined(_WIN32) -typedef unsigned __int32 khm_wparm; -typedef unsigned __int64 khm_lparm; -#else -#error khm_wparm and khm_lparm need to be defined for this platform -#endif - -/*!\def KHMAPI - \brief Calling convention for NetIDMgr exported functions - - The caling convention for all NetIDMgr exported functions is \b - __stdcall , unless otherwise noted. - */ - -/*!\def KHMEXP - \brief Export prefix for NetIDMgr exported functions - - When compiling source that exports functions, those exported - function declarations will be done as follows: - - \code - __declspec(dllexport) khm_int32 __stdcall function_name(arguments...); - \endcode - - This eliminates the need for a separate exports definition file. - However, it doesn't preserve ordinals, but we aren't guaranteeing - that anyway. - - On the other hand, if a particular function is going to be imported - from a DLL, it should declared as follows: - - \code - __declspec(dllimport) khm_int32 __stdcall function_name(arguments...); - \endcode - - This allows the compiler to properly instrument the import. If the - function is not declared this way, there will be a stub function - generated that will just jump to the proper import, generating - redundant instructions and wasting execution time. - - This macro encapsulates the proper declaration specifier. - */ - -#ifdef _WIN32 -#define KHMAPI __stdcall - -#define KHMEXP_EXP __declspec(dllexport) -#define KHMEXP_IMP __declspec(dllimport) - -#ifdef _NIMLIB_ -#define KHMEXP KHMEXP_EXP -#else -#define KHMEXP KHMEXP_IMP -#endif - -#endif - -/* Generic permission values */ -/*! \brief Generic read permission or request */ -#define KHM_PERM_READ 0x100 - -/*! \brief Generic write permission or request */ -#define KHM_PERM_WRITE 0x200 - -/* Generic flags */ -/*! \brief Generic create request - - For most lookup functions, specifying this flag indicates that if - the requested object is not found it should be created. -*/ -#define KHM_FLAG_CREATE 0x1000 - -/*! \brief Wrap to DWORD boundary - - Returns the smallest integer greater than or equal to the - parameter that is a multiple of 4. - - \note Only use with positive integers. */ -#define UBOUND32(d) ((((d)-1)&~3) + 4) - -/*! \brief Offset a pointer by a number of bytes - - Given a pointer, returns a void pointer that is a given number of - bytes offset from the pointer. - */ -#define BYTEOFFSET(p,off) ((void *)(((char *) (p)) + (off))) - -/*! \brief Check for powers of 2 - - Return TRUE if the operand is a positive power of 2 or 0*/ -#define IS_POW2(d) ((d)>=0 && !((d) & ((d) - 1))) - -/*! \brief Wrap to upper bound based on start and step size - - Return the smallest element in the series <tt>s, s+t, s+2*t, - s+3*t, ...</tt> that is greater than or equal to \c v. -*/ -#define UBOUNDSS(v,start,step) (((v)<=(start))?(start):(start)+((((v)-((start)+1))/(step))+1)*(step)) - -/* \brief Length of an array -*/ -#define ARRAYLENGTH(x) (sizeof(x)/sizeof(x[0])) - -/*! \brief Generic version type*/ -typedef struct tag_khm_version { - khm_ui_2 major; /*!< Major version number */ - khm_ui_2 minor; /*!< Minor version number */ - khm_ui_2 patch; /*!< Patch level */ - khm_ui_2 aux; /*!< Auxilary level (usually carries a build number) */ -} khm_version; - -/*@}*/ -#endif diff --git a/src/windows/identity/include/kherror.h b/src/windows/identity/include/kherror.h deleted file mode 100644 index 1250e9cfd..000000000 --- a/src/windows/identity/include/kherror.h +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -/* Exported */ -#ifndef __KHIMAIRA_KHERROR_H -#define __KHIMAIRA_KHERROR_H - -/*! \defgroup kherror NetIDMgr errors - -@{*/ -/*! \brief Base for error codes - - NetIDMgr errors range from \a KHM_ERROR_BASE to KHM_ERROR_BASE + - KHM_ERROR_RANGE, with the exception of KHM_ERROR_SUCCESS and - KHM_ERROR_NONE. - */ -#define KHM_ERROR_BASE 0x40000000L - -/*! \brief Range for error codes - - NetIDMgr errors range from \a KHM_ERROR_BASE to - KHM_ERROR_BASE + KHM_ERROR_RANGE. -*/ -#define KHM_ERROR_RANGE 256L - -/*! \defgroup kherror_codes Error codes - @{*/ - -/*! \brief No error */ -#define KHM_ERROR_NONE 0x00000000L - -/*! \brief Success. Same as \a KHM_ERROR_NONE */ -#define KHM_ERROR_SUCCESS KHM_ERROR_NONE - -/*! \brief The supplied name was invalid */ -#define KHM_ERROR_INVALID_NAME (KHM_ERROR_BASE + 1) - -/*! \brief Too much data - - A supplied buffer was invalid, was of insufficient size, or a - buffer was of a larger size than expected - */ -#define KHM_ERROR_TOO_LONG (KHM_ERROR_BASE + 2) - -/*! \brief One or more parameters supplied to a function were invalid */ -#define KHM_ERROR_INVALID_PARAM (KHM_ERROR_BASE + 3) - -/*! \brief A duplicate. - - Usually means that something that should have been unique was - found to be not. - */ -#define KHM_ERROR_DUPLICATE (KHM_ERROR_BASE + 4) - -/*! \brief An object was not found - - An object referenced in a parameter was not found. - */ -#define KHM_ERROR_NOT_FOUND (KHM_ERROR_BASE + 5) - -/*! \brief The relevant subsystem is not ready - - Indicates that initialization has not been completed for a - subsystem. - */ -#define KHM_ERROR_NOT_READY (KHM_ERROR_BASE + 6) - -/*! \brief No more resources - - A limited resource has been exhausted. - */ -#define KHM_ERROR_NO_RESOURCES (KHM_ERROR_BASE + 7) - -/*! \brief Type mismatch - */ -#define KHM_ERROR_TYPE_MISMATCH (KHM_ERROR_BASE + 8) - -/*! \brief Already exists - - Usually indicates that an exclusive create operation failed due to - the existence of a similar object. Subtly different from - ::KHM_ERROR_DUPLICATE - */ -#define KHM_ERROR_EXISTS (KHM_ERROR_BASE + 9) - -/*! \brief Operation timed out - */ -#define KHM_ERROR_TIMEOUT (KHM_ERROR_BASE + 10) - -/*! \brief An EXIT message was received - */ -#define KHM_ERROR_EXIT (KHM_ERROR_BASE + 11) - -/*! \brief Unknown or unspecified error - */ -#define KHM_ERROR_UNKNOWN (KHM_ERROR_BASE + 12) - -/*! \brief General error - */ -#define KHM_ERROR_GENERAL KHM_ERROR_UNKNOWN - -/*! \brief An index was out of bounds - */ -#define KHM_ERROR_OUT_OF_BOUNDS (KHM_ERROR_BASE + 13) - -/*! \brief Object already deleted - - One or more objects that were referenced were found to have been - already deleted. - */ -#define KHM_ERROR_DELETED (KHM_ERROR_BASE + 14) - -/*! \brief Invalid operation - - The operation was not permitted to continue for some reason. - Usually because the necessary conditions for the operation haven't - been met yet or the operation can only be performed at certain - times during the execution of NetIDMgr. - */ -#define KHM_ERROR_INVALID_OPERATION (KHM_ERROR_BASE + 15) - -/*! \brief Signature check failed - */ -#define KHM_ERROR_INVALID_SIGNATURE (KHM_ERROR_BASE + 16) - -/*! \brief Not implemented yet - - The operation that was attempted involved invoking functionality - that has not been implemented yet. - */ -#define KHM_ERROR_NOT_IMPLEMENTED (KHM_ERROR_BASE + 17) - -/*! \brief The objects were equivalent - */ -#define KHM_ERROR_EQUIVALENT (KHM_ERROR_BASE + 18) - -/*! \brief No provider exists to service the request -*/ -#define KHM_ERROR_NO_PROVIDER (KHM_ERROR_BASE + 19) - -/*! \brief The operation succeeded, but with errors -*/ -#define KHM_ERROR_PARTIAL (KHM_ERROR_BASE + 20) - -/*! \brief An incompatibility was found */ -#define KHM_ERROR_INCOMPATIBLE (KHM_ERROR_BASE + 21) - -/*! \brief The operation was put on hold - - A request was put on hold or postponed. */ -#define KHM_ERROR_HELD (KHM_ERROR_BASE + 22) - -/*@}*/ /*kherror_codes*/ - -/*! \brief Tests whether a return value indicates success */ -#define KHM_SUCCEEDED(rv) ((rv)==KHM_ERROR_NONE) - -/*! \brief Tests whether a return value indicates failure */ -#define KHM_FAILED(rv) ((rv)!=KHM_ERROR_NONE) - -/*@}*/ -#endif diff --git a/src/windows/identity/include/khlist.h b/src/windows/identity/include/khlist.h deleted file mode 100644 index ab60ca37d..000000000 --- a/src/windows/identity/include/khlist.h +++ /dev/null @@ -1,214 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -/* Not exported */ -#ifndef _KHIMAIRA_KHLIST_H -#define _KHIMAIRA_KHLIST_H - -/* Note that most of these are "unsafe" macros. Not for general use */ - -/* LIFO lists */ -#define LDCL(type) \ - type * next; \ - type * prev - -#define LINIT(pe) \ - do { \ - (pe)->next = NULL; \ - (pe)->prev = NULL; } while(0) - -#define LPUSH(pph,pe) \ - do { \ - (pe)->next = *pph; \ - (pe)->prev = NULL; \ - if(*(pph)) (*(pph))->prev = (pe); \ - (*(pph)) = (pe); } while(0) - -#define LPOP(pph,ppe) \ - do { \ - *(ppe) = *(pph); \ - if(*(pph)) *(pph) = (*(pph))->next; \ - if(*(pph)) (*(pph))->prev = NULL; \ - if(*(ppe)) (*(ppe))->next = NULL; \ - } while(0) - -#define LDELETE(pph,pe) \ - do { \ - if((pe)->prev) (pe)->prev->next = (pe)->next; \ - if((pe)->next) (pe)->next->prev = (pe)->prev; \ - if(*(pph) == (pe)) *(pph) = (pe)->next; \ - (pe)->next = (pe)->prev = NULL; \ - } while(0) - -#define LEMPTY(pph) (*(pph) == NULL) - -#define LNEXT(pe) ((pe)?(pe)->next:NULL) - -#define LPREV(pe) ((pe)?(pe)->prev:NULL) - -/* Trees with LIFO child lists */ -#define TDCL(type) \ - LDCL(type); \ - type * children; \ - type * parent - -#define TINIT(pe) \ - do { \ - (pe)->children = NULL; \ - (pe)->parent = NULL; } while(0) - -#define TADDCHILD(pt,pe) \ - do { \ - LPUSH(&((pt)->children),(pe)); \ - (pe)->parent = (pt); } while(0) - -#define TFIRSTCHILD(pt) ((pt)?(pt)->children:NULL) - -#define TPOPCHILD(pt, ppe) \ - do { \ - LPOP(&((pt)->children), ppe); \ - if(*(ppe)) (*(ppe))->parent = NULL; \ - } while(0) - -#define TDELCHILD(pt, pe) \ - do { \ - LDELETE(&((pt)->children), (pe)); \ - (pe)->parent = NULL; } while(0) - -#define TPARENT(pe) ((pe)?(pe)->parent:NULL) - -/* FIFO lists */ -#define QDCL(type) \ - type * head; \ - type * tail - -#define QINIT(pq) \ - do { \ - (pq)->head = (pq)->tail = NULL; \ - } while(0) - -#define QPUT(pq, pe) \ - do { \ - LPUSH(&(pq)->tail, (pe)); \ - if(!(pq)->head) (pq)->head = (pe); \ - } while(0) - -#define QPUSH(pq, pe) \ - do { \ - (pe)->next = NULL; \ - (pe)->prev = (pq)->head; \ - if((pq)->head) (pq)->head->next = (pe); \ - if(!(pq)->tail) (pq)->tail = (pe); \ - (pq)->head = (pe); \ - } while (0) - -#define QGET(pq, ppe) \ - do { \ - *(ppe) = (pq)->head; \ - if(*(ppe)) { \ - (pq)->head = (*(ppe))->prev; \ - if( (*(ppe))->prev ) (*(ppe))->prev->next = NULL; \ - (*(ppe))->prev = NULL; \ - if( (pq)->tail == *(ppe)) (pq)->tail = NULL; \ - } \ - } while(0) - -#define QDEL(pq, pe) \ - do { \ - if((pq)->head == (pe)) (pq)->head = LPREV(pe); \ - LDELETE(&((pq)->tail), (pe)); \ - } while(0) - - -#define QGETT(pq,ppe) \ - do { \ - *(ppe) = (pq)->tail; \ - if(*(ppe)) { \ - (pq)->tail = (*(ppe))->next; \ - if( (*(ppe))->next ) (*(ppe))->next->prev = NULL; \ - (*(ppe))->next = NULL; \ - if( (pq)->head == *(ppe)) (pq)->head = NULL; \ - } \ - } while(0) - -#define QTOP(pq) ((pq)->head) -#define QBOTTOM(pq) ((pq)->tail) -#define QNEXT(pe) ((pe)->prev) -#define QPREV(pe) ((pe)->next) - -#define QINSERT(pt, pre, pe) \ - do { \ - if ((pre) == NULL || \ - QNEXT(pre) == NULL) { QPUT(pt, pe); } \ - else { \ - (pe)->prev = (pre)->prev; \ - (pe)->next = (pre); \ - (pre)->prev->next = (pe); \ - (pre)->prev = (pe); \ - }} while(0) - -/* Trees with FIFO child lists */ -#define TQDCL(type) \ - LDCL(type); \ - QDCL(type); \ - type * parent - -#define TQINIT(pe) \ - do { \ - LINIT(pe); \ - QINIT(pe); \ - (pe)->parent = NULL; } while(0) - -#define TQPUTCHILD(pt,pe) \ - do { \ - QPUT((pt), (pe)); \ - (pe)->parent = (pt); } while(0) - -#define TQINSERT(pt, pre, pe) \ - do { \ - QINSERT(pt, pre, pe); \ - (pe)->parent = (pt); } while(0) - -#define TQGETCHILD(pt,ppe) \ - do { \ - QGET(pt, ppe); \ - if (*(ppe)) { *(ppe)->parent = NULL; } \ - } while(0) - -#define TQDELCHILD(pt, pe) \ - do { \ - QDEL(pt, pe); \ - (pe)->parent = NULL; } while(0) - -#define TQFIRSTCHILD(pt) ((pt)?QTOP(pt):NULL) - -#define TQNEXTCHILD(pe) QNEXT(pe) - -#define TQPREVCHILD(pe) QPREV(pe) - -#define TQPARENT(pe) ((pe)?(pe)->parent:NULL) - -#endif diff --git a/src/windows/identity/include/khmsgtypes.h b/src/windows/identity/include/khmsgtypes.h deleted file mode 100644 index d4737f7ff..000000000 --- a/src/windows/identity/include/khmsgtypes.h +++ /dev/null @@ -1,817 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KHMSGTYPES_H -#define __KHIMAIRA_KHMSGTYPES_H - -/*! \addtogroup kmq -@{*/ -/*! \defgroup kmq_msg Message Types -@{*/ - -/*! \name Global message types -@{*/ - -/*! \brief System messages. - - All subscribers are subscribed to the system message class by default. - - \see \ref kmq_msg_system -*/ -#define KMSG_SYSTEM 0 - -/*! \brief Ad-hoc messages. - - These are messages that are sent through add hoc publishers and - subscribers. -*/ -#define KMSG_ADHOC 1 - -/*! \brief NetIDMgr Credentials Database messages - - These messages notify subscribers of events related to the - credentials database, such as the registration, unregistration and - modification of identities, attributes, attribute types and - credential types. It also provides notifications of changes to - the root crednetial set. - - \see \ref kmq_msg_kcdb -*/ -#define KMSG_KCDB 2 - -/*! \brief NetIDMgr Module Manager messages - - \see \ref kmq_msg_kmm -*/ -#define KMSG_KMM 3 - -/*! \brief NetIDMgr Credential messages - - Notifications of crednetial events. These are the most important - events that a credentials provider should respond to. The - notifications provide co-oridination between credential providers - for performing basic credentials management tasks such as - obtaining new credentials for an identity, deleting credentials - for an identity, obtaining or deleting credentials of a particular - type for an identity etc. - - \see \ref cred_msgs - \see \ref kmq_msg_cred - */ -#define KMSG_CRED 4 - -/*! \brief Action list messages - - Notifications of changes in action state and firing of custom - actions. - - \see \ref kmq_msg_act - */ -#define KMSG_ACT 5 - -/*! \brief Alert messages - - Notifier is the component which displays alerts and error messages - when the NetIDMgr window is normally in operation and which - displays balloon prompts when the window is minimized to alert the - user to important messages such as credentials expiring etc. - - \note This is an internal message class. Components that are not - the notifier should not be subscribing to alert messages. - - \see \ref kmq_msg_alert - */ -#define KMSG_ALERT 6 - -/*! \brief Identity messages - - These are messages that are sent to the identity provider. These - are generally dispatched through a specific subscription object - and are not broadcast. - - \see \ref kmq_msg_ident - */ -#define KMSG_IDENT 7 - -/*! \brief Base message type ID for customized message types - */ -#define KMSGBASE_USER 16 - -/*@}*/ - -/*! \defgroup kmq_msg_system KMSG_SYSTEM subtypes -@{*/ -/*! \brief Generic initialization message - - This message is used by specific components to signal that the - recipient is to perform initialization tasks. As a convention, - the recipient should return KHM_ERROR_SUCCESS if it successfully - performed the initlization tasks or some other value if it failed - to do so. Failure to successfully initialize is usually taken to - mean that the recipient component is not able to perform its - function. - - Usually this is the first message to be received by the recipient. - - \see \ref pi_pt_cred_init - */ -#define KMSG_SYSTEM_INIT 1 - -/*! \brief Generic uninitialization message - - Used by specific components to signal that the recipient should - perform uninitilization tasks in preparation of termination. The - return value of this message is not used. - - Usually this is the last message to be received by the recipient. - - \see \ref pi_pt_cred_exit - */ -#define KMSG_SYSTEM_EXIT 2 - -/*! \brief Message completion - - This is an internal message - */ -#define KMSG_SYSTEM_COMPLETION 3 -/*@}*/ - -/*! \defgroup kmq_msg_kcdb KMSG_KCDB subtypes -@{*/ -#define KMSG_KCDB_IDENT 1 -#define KMSG_KCDB_CREDTYPE 2 -#define KMSG_KCDB_ATTRIB 3 -#define KMSG_KCDB_TYPE 4 - -/*! \brief Generic credentials request - - \see ::kcdb_cred_request for more information - */ -#define KMSG_KCDB_REQUEST 256 -/*@}*/ - -/*! \defgroup kmq_msg_kmm KMSG_KMM subtypes -@{*/ -#define KMSG_KMM_I_REG 1 - -#define KMSG_KMM_I_DONE 2 -/*@}*/ - -/*! \defgroup kmq_msg_act KMSG_ACT subtypes - @{*/ - -/*! \brief One or more actions changed state - - This message is sent in response to a call to - khui_enable_actions() or khui_enable_action() and indicates that - one or more actions have changed their state. - */ -#define KMSG_ACT_ENABLE 1 - -/*! \brief One or more actions changed check state - - Sent in response to khui_check_radio_action() or - khui_check_action() and indicates that one or more actions have - either been checked or unchecked. - */ -#define KMSG_ACT_CHECK 2 - -/*! \brief Refresh action states - - Sent after a batch of modifications were made to action states. - */ -#define KMSG_ACT_REFRESH 3 - -/*! \brief A new action was created - - Sent when a new custom action was created. The \a uparam - parameter of the message contains the identifier of the newly - created action. -*/ -#define KMSG_ACT_NEW 4 - -/*! \brief A custom action was deleted - - Sent after a custom action is deleted. The \a uparam parameter of - the message contains the identifier of the deleted action. - */ -#define KMSG_ACT_DELETE 5 - -/*! \brief A custom action has been activated - - When a custom action is activated, then the listener of that - custom action receives this message. Note that only the listener - for that custom action will receive this notification. - - \a uparam of the message is set to the identifier of the custom - action. - */ -#define KMSG_ACT_ACTIVATE 6 - -/*! \brief Internal */ -#define KMSG_ACT_BEGIN_CMDLINE 128 - -/*! \brief Internal */ -#define KMSG_ACT_CONTINUE_CMDLINE 129 - -/*! \brief Internal */ -#define KMSG_ACT_SYNC_CFG 130 - -/*! \brief Internal */ -#define KMSG_ACT_END_CMDLINE 131 - -/*@}*/ - -/*! \defgroup kmq_msg_cred KMSG_CRED subtypes - @{*/ -/*! \brief Root credential set changed - - This message is issued when the root credential set successfully - collected credentials from another credential set. - - \a uparam of the message is set to a bitmask indicating the change - that occured. It is a combination of ::KCDB_DELTA_ADD, - ::KCDB_DELTA_DEL and ::KCDB_DELTA_MODIFY. - */ -#define KMSG_CRED_ROOTDELTA 1 - -/*! \brief Re-enumerate credentials - - A notice to all credential providers to re-enumerate their - respective credentials. - - \note May be sent to individual credential subscriptions. - */ -#define KMSG_CRED_REFRESH 2 - -/*! \brief Change the password - - This message notifies credentials providers that a password change - request has been received. - - A plug-in handling this message that wishes to participate in the - password change operation is expected to add a - ::khui_new_creds_by_type to the list of participants in the - ::khui_new_creds structure by calling khui_cw_add_type(). - - The password change operation requires user interaction. Any - plug-ins that are participating in the operation need to provide a - user-interface. - - Message parameters: - - \b vparam : pointer to a ::khui_new_creds structure - - \see khui_cw_add_type(), ::khui_new_creds, ::khui_new_creds_by_type - */ -#define KMSG_CRED_PASSWORD 16 - -/*! \brief Initiate the process of obtaining new credentials - - The UI sends this message to start the process of obtaining new - credentials. See \ref cred_acq for more information about - handling this message. - - A plug-in handling this message that wishes to participate in the - new credentials acquisition operation is expected to add a - ::khui_new_creds_by_type to hte list of participants in the - ::khui_new_creds structure by calling khui_cw_add_type(). - - Message parameters: - - \b vparam : pointer to a ::khui_new_creds structure - - \see \ref cred_acq, khui_cw_add_type(), ::khui_new_creds, - ::khui_new_creds_by_type - */ -#define KMSG_CRED_NEW_CREDS 17 - -/*! \brief Renew credentials - - This is a notification sent to individual credentials providers - that a specified identity's credentials should be renewed. - - A plug-in handling this message that wishes to participate in the - renew credentials operation is expected to add a - ::khui_new_creds_by_type to the list of participants in the - ::khui_new_creds structure by calling khui_cw_add_type(). - - Message parameters: - - \b vparam : Pointer to a khui_new_creds object - - \see khui_cw_add_type(), ::khui_new_creds, - ::khui_new_creds_by_type - */ -#define KMSG_CRED_RENEW_CREDS 18 - -/*! \brief Dialog setup - - Once ::KMSG_CRED_NEW_CREDS has been responded to by all the - credential types, the UI creates the dialog windows using the data - supplied in the ::khui_new_creds_by_type structures and issues - this message. Each credentials provider is expected to respond by - finalizing dialog creation operations. - - Message parameters: - - \b vparam : pointer to a ::khui_new_creds structure - - \note May be sent to individual credential subscriptions. - */ -#define KMSG_CRED_DIALOG_SETUP 19 - -/*! \brief Dialog pre-start - - Sent after all the credentials providers have responded to - ::KMSG_CRED_DIALOG_SETUP and all the initialization has been - completed. Credentials providers are expected to respond to this - message by loading any default data into the dialog controls for - each credential type. - - Message parameters: - - \b vparam : pointer to a ::khui_new_creds structure - - \note May be sent to individual credential subscriptions. - */ -#define KMSG_CRED_DIALOG_PRESTART 20 - -/*! \brief Dialog start - - A notification that the dialog is now in progress. - - Message parameters: - - \b vparam : pointer to a ::khui_new_creds structure - - \note May be sent to individual credential subscriptions. - */ -#define KMSG_CRED_DIALOG_START 21 - -/*! \brief The primary identity of the new credentials dialog has changed - - This message is not sent out by the UI, but is reserved here for - use by individual credentials providers. The message may be sent - from the dialog procedure to the plugin. - - Message parameters: - - \b vparam : pointer to a ::khui_new_creds structure - - \note Be careful when sending this message. All messages that are - not sent by the system should not be sent via broadcast. - Instead, create a subscription using kmq_create_subscription() - for the individual plugin that you want to send the message - and use one of the per-subscription message functions to send - the actual message. - */ -#define KMSG_CRED_DIALOG_NEW_IDENTITY 22 - -/*! \brief New credentials options have changed. - - This message is not sent out by the UI, but is reserved here for - use by individual credentials providers. The message may be sent - from the dialog procedure to the plugin. - - Message parameters: - - \b vparam : pointer to a ::khui_new_creds structure - - \note Be careful when sending this message. All messages that are - not sent by the system should not be sent via broadcast. - Instead, create a subscription using kmq_create_subscription() - for the individual plugin that you want to send the message - and use one of the per-subscription message functions to send - the actual message. - */ -#define KMSG_CRED_DIALOG_NEW_OPTIONS 23 - -/*! \brief Process dialog - - Sent to all the credential providers to look at the contents of - the given ::khui_new_creds structure and do any required - processing. - - If the \a result field in the structure is set to - ::KHUI_NC_RESULT_PROCESS, then new credentials should be - obtained using the given data. - - Set the \a response field in the structure to indicate how the UI - should proceed from here. - - Message parameters: - - \b vparam : pointer to a ::khui_new_creds structure - - \note May be sent to individual credential subscriptions. - */ -#define KMSG_CRED_PROCESS 24 - -/*! \brief End a credentials acquisition operation - - A notification that the credentials acquisition operation has - ended. - - Message parameters: - - \b vparam : pointer to a ::khui_new_creds structure - - \note May be sent to individual credential subscriptions. - */ -#define KMSG_CRED_END 25 - -/*! \brief Import credentials from the operating system - - Notification to all credentials providers to import any available - credentials from the operating system. - - Message parameters: - - This message does not have any parameters -*/ -#define KMSG_CRED_IMPORT 26 - -/*! \brief Destroy credentials - - Notification that the specified credentials should be destroyed. - Once this message has completed processing a ::KMSG_CRED_REFRESH - message will be issued. - - The credentials that should be destroyed are specified by a - ::khui_action_context structure. The context that should be used - is the selection context. Hence, the credentials that must be - destroyed are the ones lised in the credential set (\a credset). - - Message parameters: - - - \b upram : Unused. Zero. - - - \b vparam : pointer to a ::khui_action_context structure which - describes which credentials need to be destroyed. - - */ -#define KMSG_CRED_DESTROY_CREDS 32 - -#if 0 -/*! \brief Parse an identity - - \note May be sent to individual credential subscriptions. - */ -#define KMSG_CRED_IDENT_PARSE 65 -#endif - -/*! \brief A property page is being launced - - Handlers of this message should determine whether or not they - should participate in the property sheet and if so, add a - ::khui_property_page structure to the property sheet. - - Message parameters: - - \b vparam : pointer to a ::khui_property_sheet structure - */ -#define KMSG_CRED_PP_BEGIN 128 - -/*! \brief A property page is about to be created - - Message parameters: - - \b vparam : pointer to a ::khui_property_sheet structure - - \note This message is merely a notification that the property - sheet is being created. Handlers should not modify the state - of the property sheet or pages at this time. - */ -#define KMSG_CRED_PP_PRECREATE 129 - -/*! \brief A property page has finished processing - - Handlers of this message should remove any ::khui_property_page - structures they added when processing ::KMSG_CRED_PP_BEGIN. - - Message parameters: - - \b vparam : pointer to a ::khui_property_sheet structure - */ -#define KMSG_CRED_PP_END 130 - -/*! \brief A property page has been destroyed - - Message parameters: - - \b vparam : pointer to a ::khui_property_sheet structure - - \note This is a notification that the property sheet processing - has been completed and that the property sheet data structures - should be freed. Any property page data structures should - have already been freed while processing KMSG_CRED_PP_END. - The validity of the ::khui_property_sheet structure should not - be relied upon while processing this message. - */ -#define KMSG_CRED_PP_DESTROY 131 - -/*! \brief An IP address change occurred - - There are no parameters for this message. The NetIDMgr - application handles this message and depending on configuration, - posts message for the individual credentials providers to either - obtain new credentials or renew old ones. - */ -#define KMSG_CRED_ADDR_CHANGE 140 - -/*! \brief Check if a KMSG_CRED subtype is a credentials acquisition message - - Dialog messages are those that deal with the new or initial - credentials acquisition dialog, from initial announcement to - dialog completion. - - Currently, the dialog messages are: - - ::KMSG_CRED_NEW_CREDS - - ::KMSG_CRED_RENEW_CREDS - - ::KMSG_CRED_DIALOG_SETUP - - ::KMSG_CRED_DIALOG_PRESTART - - ::KMSG_CRED_DIALOG_START - - ::KMSG_CRED_DIALOG_NEW_IDENTITY - - ::KMSG_CRED_DIALOG_NEW_OPTIONS - - ::KMSG_CRED_PROCESS - - ::KMSG_CRED_END - - All dialog message numbers are allocated in a contigous block. - - Note that while ::KMSG_CRED_PROCESS and ::KMSG_CRED_END are not - specific to dialogs, they are still included in this predicate - because they are also part of the dialog message sequence. - */ -#define IS_CRED_ACQ_MSG(msg) ((msg) >= 16 && (msg) <=31) - -/*@}*/ /* /KMSG_CRED subtypes */ - -/*! \defgroup kmq_msg_alert KMSG_ALERT Subtypes - @{*/ - -/*! \brief Show an alert - - Message parameters: - - \b vparam : held pointer to a ::khui_alert object - - \note The ::khui_alert object will be released when the processing - of this message completes. - */ -#define KMSG_ALERT_SHOW 1 - -/*! \brief Add an alert to the alert queue - - Message parameters: - - \b vparam : held pointer to a ::khui_alert object - - \note the ::khui_alert object will be released when the queued - messages are displayed. - */ -#define KMSG_ALERT_QUEUE 2 - -/*! \brief Show the next queued alert - - There are no message parameters - */ -#define KMSG_ALERT_SHOW_QUEUED 3 - -/*! \brief Check if there are any queued messages and, if so, update the statusbar - - There are no message parameters - */ -#define KMSG_ALERT_CHECK_QUEUE 4 - -/*! \brief Show a modal alert - - Message parameters: - - \b vparam : held pointer to a ::khui_alert object. - - \note the ::khui_alert object will be released when the queued - messages are displayed. - */ -#define KMSG_ALERT_SHOW_MODAL 5 - -/*@}*/ - -/*! \defgroup kmq_msg_ident KMSG_IDENT Subtypes - @{*/ - -/*! \brief Initialize and start the identity provider - - - Sent by the KCDB to notify the identity provider that it is now - the current identity provider. - - Note that unlike regular plugins, an identity provider can be - loaded and inert (not provide any services). Also, the user may - switch between multiple identity providers on the fly. - */ -#define KMSG_IDENT_INIT 1 - -/*! \brief Stop the identity provider - - Sent by the KCDB as notificaton that the identity provider is no - longer the current provider. - */ -#define KMSG_IDENT_EXIT 2 - -/*! \brief Check if an identity name is valid - - This message is sent to the identity provider to verify the syntax - of an identity name. Note that only the syntax of the name is to - be verfied and not the actual physical existence of said identity. - - Message parameters: - - - \b vparam : pointer to ::kcdb_ident_name_xfer object. The - name to be validated will be in the \a name_src member. The - buffer will be NULL terminated with a maximum limit of - KCDB_IDENT_MAXCCH_NAME characters including the terminating - NULL, consisting only of characters in KCDB_IDENT_VALID_CHARS - The \a result member should be set to one of the following - depending on the result of the validation: - - - KHM_ERROR_SUCCESS : The name was valid - - KHM_ERROR_INVALID_NAME : The name was invalid - */ -#define KMSG_IDENT_VALIDATE_NAME 3 - -/*! \brief Check if an identity is valid - - Sent to the identity provider to verify the validity of the given - identity. The provider should verify that the identity exists and - is in a state where it can be actively used. - - Depending on the result of the validation, the flags of the - identity should be updated. - - Message parameters: - - \b vparam : Handle to an identity cast as a void pointer. - */ -#define KMSG_IDENT_VALIDATE_IDENTITY 4 - -/*! \brief Canonicalize identity name - - The identity provider will be given a name, which it should put in - canonical form, adjusting case and any character replacement or - doing any relevant expansions if applicable, and place it in the - supplied buffer. - - Message parameters: - - - \b vparam : Pointer to a ::kcdb_ident_name_xfer structure - which provides the identity name to canonicalize in the \a - name_src member, and the buffer to store the canonical name - in the \a name_dest member. The \a name_dest buffer is - guaranteed to be at least KCDB_IDENT_MAXCCH_NAME characters - in size. - - If the name cannot be canonicalized for some reason, the - destination buffer should be set to a zero-length string and the - \a result member of the ::kcdb_ident_name_xfer structure should be - set to the error code. If the destination buffer is set to a - zero-length string and \a result is KHM_ERROR_SUCCESS, then the - original name provided in \a name_src is assumed to be already in - canonical form. - */ -#define KMSG_IDENT_CANON_NAME 5 - -/*! \brief Compare names - - Compare two identity names. The names that are given aren't - guaranteed to be in canonical form. The return value should be - akin to strcmp(). - - Message parameters: - - - \b vparam : A pointer to a ::kcdb_ident_name_xfer structure. - The \a name_src member points at the first name, and the \a - name_alt member specifies the second name. The result of the - comparison should be place in \a result. - */ -#define KMSG_IDENT_COMPARE_NAME 6 - -/*! \brief Set the default identity - - Set or unset the default identity. To set the default identity, - the \a uparam parameter will be set to a non-zero value and a - handle to the identity will be specified in \a vparam. To unset - the default identity (i.e. not have a default identity), a zero - value will be specified in \a uparam and no identities will be - specified in \a vparam. - - When setting a default identity, the identity provider will - receive this message prior to the ::KCDB_IDENT_FLAG_DEFAULT bit - being set or reset on any identity. It should return - KHM_ERROR_SUCCESS if the requested operation can be performed. - Returning any other value will abort the operation and will leave - the default identity unchanged. - - When resetting the default identity, this message should be - treated only as a notification. - - Message parameters: - - - \a uparam : Is non-zero if an identity is being made default. If - this is zero, then identity should be the default. - - - \a vparam : A handle to the identity to be made default if \a - uparam is non-zero. NULL otherwise. - - Return value: - - - KHM_ERROR_SUCCESS : The identity should be marked as default - - Any other value : The identity should not be marked as default - - */ -#define KMSG_IDENT_SET_DEFAULT 7 - -/*! \brief Set an identity as searchable - - Set or reset the searchable bit on an identity. If the \a uparam - parameter is non-zero, then the searchable bit is being set. - Otherwise it is being reset. The identity provider should return - KHM_ERROR_SUCCESS in order to indicate that the identity should be - marked as searchable. Any other value will result in the - searchable bit being reset on the identity. - - Message parameters: - - - \a uparam : Is non-zero if the searchable bit is being set. Zero - otherwise. - - - \a vparam : Handle to the identity - - Return value: - - - KHM_ERROR_SUCCESS: The identity should be marked as searchable - - Any other value : The identity should not be marked as default - */ -#define KMSG_IDENT_SET_SEARCHABLE 8 - -/*! \brief Get information about an identity - - */ -#define KMSG_IDENT_GET_INFO 9 - -/*! \brief Enumerate known and accessible identities - */ -#define KMSG_IDENT_ENUM_KNOWN 10 - -/*! \brief Update information about an identity - */ -#define KMSG_IDENT_UPDATE 11 - -/*! \brief Retrieve the user interface callback function - - When obtaining new credentials, the user interface needs to obtain - a callback function which will provide identity selection - controls. - - Message parameters: - - - \a uparam : Not used - - - \a vparam : pointer to a ::khui_ident_new_creds_cb which will - receive the call back. - */ -#define KMSG_IDENT_GET_UI_CALLBACK 12 - -/*! \brief Notification of the creation of an identity - - This should be considered just a notification. The identit - provider does not have an opportunity to veto the creation of an - identity whose name has been found to be valid. However, when - handing this notification, the identity provider can: - - - Change the flags of the identity and/or marking the identity as - invalid. - - - Change the default identity. - - Note that this notification is sent before the general :;KMSG_KCDB - notification of the identity creation is sent. - - Message parameters: - - - \a uparam : Not used. - - - \p vparam : handle to the identity - */ -#define KMSG_IDENT_NOTIFY_CREATE 13 - -/*@}*/ /* /KMSG_IDENT subtypes */ - -/*@}*/ /* / message types */ -/*@}*/ /* / kmq */ - -#endif diff --git a/src/windows/identity/include/netidmgr.h b/src/windows/identity/include/netidmgr.h deleted file mode 100644 index cc680fcad..000000000 --- a/src/windows/identity/include/netidmgr.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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_H -#define __NETIDMGR_H - -#include "khdefs.h" - -#include "utils.h" -#include "khuidefs.h" -#include "kmq.h" -#include "khmsgtypes.h" -#include "kcreddb.h" -#include "kherr.h" -#include "kherror.h" -#include "kconfig.h" -#include "kmm.h" -#include "kplugin.h" - -#endif diff --git a/src/windows/identity/kconfig/Makefile b/src/windows/identity/kconfig/Makefile deleted file mode 100644 index bc4667954..000000000 --- a/src/windows/identity/kconfig/Makefile +++ /dev/null @@ -1,51 +0,0 @@ -# -# Copyright (c) 2004 Massachusetts Institute of Technology -# -# 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. - - -MODULE=kconfig -!include <../config/Makefile.w32> - -INCFILES= \ - $(INCDIR)\kconfig.h - -OBJFILES= \ - $(OBJ)\kconfigmain.obj \ - $(OBJ)\api.obj - -all: mkdirs $(INCFILES) $(OBJFILES) - -clean:: - if exist "$(INCDIR)" $(RM) $(INCFILES) - -# Tests - -test:: util_test - -util_test: $(OBJ)\utiltest.exe - $(OBJ)\utiltest.exe - -$(OBJ)\utiltest.exe: $(OBJ)\utiltest.obj - $(EXECONLINK) $(OBJFILES) - -$(OBJ)\utiltest.obj: test\utiltest.c - $(C2OBJ) diff --git a/src/windows/identity/kconfig/api.c b/src/windows/identity/kconfig/api.c deleted file mode 100644 index c219a6207..000000000 --- a/src/windows/identity/kconfig/api.c +++ /dev/null @@ -1,2661 +0,0 @@ -/* -* Copyright (c) 2005 Massachusetts Institute of Technology -* -* 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<shlwapi.h> -#include<kconfiginternal.h> -#include<netidmgr_intver.h> -#include<assert.h> - -kconf_conf_space * conf_root = NULL; -kconf_handle * conf_handles = NULL; -kconf_handle * conf_free_handles = NULL; - -CRITICAL_SECTION cs_conf_global; -CRITICAL_SECTION cs_conf_handle; -LONG conf_init = 0; -LONG conf_status = 0; - -void init_kconf(void) { - if(InterlockedIncrement(&conf_init) == 1L) { - /* we are the first */ - InitializeCriticalSection(&cs_conf_global); - EnterCriticalSection(&cs_conf_global); - conf_root = khcint_create_empty_space(); - conf_root->name = PWCSDUP(L"Root"); - conf_root->regpath = PWCSDUP(CONFIG_REGPATHW); - conf_root->refcount++; - conf_status = 1; - InitializeCriticalSection(&cs_conf_handle); - LeaveCriticalSection(&cs_conf_global); - } - /* else assume we are already initialized */ -} - -void exit_kconf(void) { - if(khc_is_config_running()) { - kconf_handle * h; - - EnterCriticalSection(&cs_conf_global); - - conf_init = 0; - conf_status = 0; - - khcint_free_space(conf_root); - - LeaveCriticalSection(&cs_conf_global); - DeleteCriticalSection(&cs_conf_global); - - EnterCriticalSection(&cs_conf_handle); - while(conf_free_handles) { - LPOP(&conf_free_handles, &h); - if(h) { - PFREE(h); - } - } - - while(conf_handles) { - LPOP(&conf_handles, &h); - if(h) { - PFREE(h); - } - } - LeaveCriticalSection(&cs_conf_handle); - DeleteCriticalSection(&cs_conf_handle); - } -} - -#if defined(DEBUG) && (defined(KH_BUILD_PRIVATE) || defined(KH_BUILD_SPECIAL)) - -#include<stdio.h> - -static void -khcint_dump_space(FILE * f, kconf_conf_space * sp) { - - kconf_conf_space * sc; - - fprintf(f, "c12\t[%S]\t[%S]\t%d\t0x%x\tWin(%s|%s)|%s\n", - ((sp->regpath) ? sp->regpath : L"!No Reg path"), - sp->name, - (int) sp->refcount, - (int) sp->flags, - ((sp->regkey_user)? "HKCU" : ""), - ((sp->regkey_machine)? "HKLM" : ""), - ((sp->schema)? "Schema" : "")); - - - sc = TFIRSTCHILD(sp); - while(sc) { - - khcint_dump_space(f, sc); - - sc = LNEXT(sc); - } -} - -KHMEXP void KHMAPI -khcint_dump_handles(FILE * f) { - if (khc_is_config_running()) { - kconf_handle * h, * sh; - - EnterCriticalSection(&cs_conf_handle); - EnterCriticalSection(&cs_conf_global); - - fprintf(f, "c00\t*** Active handles ***\n"); - fprintf(f, "c01\tHandle\tName\tFlags\tRegpath\n"); - - h = conf_handles; - while(h) { - kconf_conf_space * sp; - - sp = h->space; - - if (!khc_is_handle(h) || sp == NULL) { - - fprintf(f, "c02\t!!INVALID HANDLE!!\n"); - - } else { - - fprintf(f, "c02\t0x%p\t[%S]\t0x%x\t[%S]\n", - h, - sp->name, - h->flags, - sp->regpath); - - sh = khc_shadow(h); - - while(sh) { - - sp = sh->space; - - if (!khc_is_handle(sh) || sp == NULL) { - - fprintf(f, "c02\t0x%p:Shadow:0x%p\t[!!INVALID HANDLE!!]\n", - h, sh); - - } else { - - fprintf(f, "c02\t0x%p:Shadow:0x%p,[%S]\t0x%x\t[%S]\n", - h, sh, - sp->name, - sh->flags, - sp->regpath); - - } - - sh = khc_shadow(sh); - } - - } - - h = LNEXT(h); - } - - fprintf(f, "c03\t------ End ---------\n"); - - fprintf(f, "c10\t*** Active Configuration Spaces ***\n"); - fprintf(f, "c11\tReg path\tName\tRefcount\tFlags\tLayers\n"); - - khcint_dump_space(f, conf_root); - - fprintf(f, "c13\t------ End ---------\n"); - - LeaveCriticalSection(&cs_conf_global); - LeaveCriticalSection(&cs_conf_handle); - - } else { - fprintf(f, "c00\t------- KHC Configuration not running -------\n"); - } -} - -#endif - -/* obtains cs_conf_handle/cs_conf_global */ -kconf_handle * -khcint_handle_from_space(kconf_conf_space * s, khm_int32 flags) -{ - kconf_handle * h; - - EnterCriticalSection(&cs_conf_handle); - LPOP(&conf_free_handles, &h); - if(!h) { - h = PMALLOC(sizeof(kconf_handle)); - assert(h != NULL); - } - ZeroMemory((void *) h, sizeof(kconf_handle)); - - h->magic = KCONF_HANDLE_MAGIC; - khcint_space_hold(s); - h->space = s; - h->flags = flags; - - LPUSH(&conf_handles, h); - LeaveCriticalSection(&cs_conf_handle); - - return h; -} - -/* obtains cs_conf_handle/cs_conf_global */ -void -khcint_handle_free(kconf_handle * h) -{ - kconf_handle * lower; - - EnterCriticalSection(&cs_conf_handle); -#ifdef DEBUG - /* check if the handle is actually in use */ - { - kconf_handle * a; - a = conf_handles; - while(a) { - if(h == a) - break; - a = LNEXT(a); - } - - if(a == NULL) { - DebugBreak(); - - /* hmm. the handle was not in the in-use list */ - LeaveCriticalSection(&cs_conf_handle); - return; - } - } -#endif - while(h) { - LDELETE(&conf_handles, h); - if(h->space) { - khcint_space_release(h->space); - h->space = NULL; - } - lower = h->lower; - h->magic = 0; - LPUSH(&conf_free_handles, h); - h = lower; - } - LeaveCriticalSection(&cs_conf_handle); -} - -/* obains cs_conf_handle/cs_conf_global */ -kconf_handle * -khcint_handle_dup(kconf_handle * o) -{ - kconf_handle * h; - kconf_handle * r; - - r = khcint_handle_from_space(o->space, o->flags); - h = r; - - while(o->lower) { - h->lower = khcint_handle_from_space(o->lower->space, o->lower->flags); - - o = o->lower; - h = h->lower; - } - - return r; -} - -/* obtains cs_conf_global */ -void -khcint_space_hold(kconf_conf_space * s) { - EnterCriticalSection(&cs_conf_global); - s->refcount ++; - LeaveCriticalSection(&cs_conf_global); -} - -/* called with cs_conf_global */ -void -khcint_try_free_space(kconf_conf_space * s) { - - if (TFIRSTCHILD(s) == NULL && - s->refcount == 0 && - s->schema == NULL) { - - kconf_conf_space * p; - - p = TPARENT(s); - - if (p == NULL) - return; - - TDELCHILD(p, s); - - khcint_free_space(s); - - khcint_try_free_space(p); - } -} - -/* obtains cs_conf_global */ -void -khcint_space_release(kconf_conf_space * s) { - khm_int32 l; - - EnterCriticalSection(&cs_conf_global); - - l = -- s->refcount; - if (l == 0) { - if(s->regkey_machine) - RegCloseKey(s->regkey_machine); - if(s->regkey_user) - RegCloseKey(s->regkey_user); - s->regkey_machine = NULL; - s->regkey_user = NULL; - - if (s->flags & - (KCONF_SPACE_FLAG_DELETE_M | - KCONF_SPACE_FLAG_DELETE_U)) { - khcint_remove_space(s, s->flags); - } else { -#ifdef USE_TRY_FREE - /* even if the refcount is zero, we shouldn't free a - configuration space just yet since that doesn't play - well with the configuration space enumeration mechanism - which expects the spaces to dangle around if there is a - corresponding registry key or schema. */ - khcint_try_free_space(s); -#endif - } - } - - LeaveCriticalSection(&cs_conf_global); -} - -/* case sensitive replacement for RegOpenKeyEx */ -LONG -khcint_RegOpenKeyEx(HKEY hkey, LPCWSTR sSubKey, DWORD ulOptions, - REGSAM samDesired, PHKEY phkResult) { - int i; - wchar_t sk_name[KCONF_MAXCCH_NAME]; - FILETIME ft; - size_t cch; - HKEY hkp = NULL; - const wchar_t * t; - LONG rv = ERROR_SUCCESS; - - hkp = hkey; - t = sSubKey; - - /* check for case insensitive prefix first */ - if (!_wcsnicmp(sSubKey, CONFIG_REGPATHW, ARRAYLENGTH(CONFIG_REGPATHW) - 1)) { - HKEY hkt; - - t = sSubKey + (ARRAYLENGTH(CONFIG_REGPATHW) - 1); - -#ifdef DEBUG - assert(*t == L'\0' || *t == L'\\'); -#endif - - rv = RegOpenKeyEx(hkp, - CONFIG_REGPATHW, - ulOptions, - samDesired, - &hkt); - - if (rv != ERROR_SUCCESS) - return rv; - - if (*t == L'\0') { - *phkResult = hkt; - return rv; - } - - t++; - hkp = hkt; - } - - /* descend down the components of the subkey */ - while(TRUE) { - wchar_t * slash; - HKEY hkt; - - slash = wcschr(t, L'\\'); - if (slash == NULL) - break; - - if (FAILED(StringCchCopyN(sk_name, ARRAYLENGTH(sk_name), - t, slash - t))) { - rv = ERROR_CANTOPEN; - goto _cleanup; - } - - sk_name[slash - t] = L'\0'; - t = slash+1; - - if (khcint_RegOpenKeyEx(hkp, sk_name, ulOptions, samDesired, &hkt) == - ERROR_SUCCESS) { - - if (hkp != hkey) - RegCloseKey(hkp); - hkp = hkt; - - } else { - - rv = ERROR_CANTOPEN; - goto _cleanup; - - } - } - - /* by now hkp is a handle to the parent of the last component in - the subkey. t is a pointer to the last component. */ - - if (FAILED(StringCchLength(t, KCONF_MAXCCH_NAME, &cch))) { - rv = ERROR_CANTOPEN; - goto _cleanup; - } - - /* go through and find the case sensitive match for the key */ - - for (i=0; ;i++) { - LONG l; - DWORD dw; - - dw = ARRAYLENGTH(sk_name); - l = RegEnumKeyEx(hkp, i, sk_name, &dw, - NULL, NULL, NULL, &ft); - - if (l != ERROR_SUCCESS) { - rv = ERROR_CANTOPEN; - goto _cleanup; - } - - if (!(wcsncmp(sk_name, t, cch))) { - /* bingo! ?? */ - if (cch < KCONF_MAXCCH_NAME && - (sk_name[cch] == L'\0' || - sk_name[cch] == L'~')) { - rv = RegOpenKeyEx(hkp, sk_name, ulOptions, - samDesired, phkResult); - goto _cleanup; - } - } - } - - _cleanup: - if (hkp != hkey && hkp != NULL) - RegCloseKey(hkp); - - return rv; -} - -/*! \internal - - \note This function is not a good replacement for RegDeleteKey since - it deletes all the subkeys in addition to the key being deleted. - */ -LONG -khcint_RegDeleteKey(HKEY hKey, - LPCWSTR lpSubKey) { - int i; - wchar_t sk_name[KCONF_MAXCCH_NAME]; - FILETIME ft; - size_t cch; - LONG rv = ERROR_SUCCESS; - - /* go through and find the case sensitive match for the key */ - - if (FAILED(StringCchLength(lpSubKey, KCONF_MAXCCH_NAME, &cch))) - return ERROR_BADKEY; - - for (i=0; ;i++) { - LONG l; - DWORD dw; - - dw = ARRAYLENGTH(sk_name); - l = RegEnumKeyEx(hKey, i, sk_name, &dw, - NULL, NULL, NULL, &ft); - - if (l != ERROR_SUCCESS) { - rv = ERROR_BADKEY; - goto _cleanup; - } - - if (!(wcsncmp(sk_name, lpSubKey, cch))) { - /* bingo! ?? */ - if ((sk_name[cch] == L'\0' || - sk_name[cch] == L'~')) { - - /* instead of calling RegDeleteKey we call SHDeleteKey - because we want to blow off all the subkeys as - well. This is different from the behavior of - RegDeleteKey making khcint_RegDeleteKey not a very - good case sensitive replacement for - RegDeleteKey. */ - - rv = SHDeleteKey(hKey, sk_name); - goto _cleanup; - } - } - } - - _cleanup: - return rv; -} - -LONG -khcint_RegCreateKeyEx(HKEY hKey, - LPCWSTR lpSubKey, - DWORD Reserved, - LPWSTR lpClass, - DWORD dwOptions, - REGSAM samDesired, - LPSECURITY_ATTRIBUTES lpSecurityAttributes, - PHKEY phkResult, - LPDWORD lpdwDisposition) { - LONG l; - int i; - long index = 0; - wchar_t sk_name[KCONF_MAXCCH_NAME]; /* hard limit in Windows */ - FILETIME ft; - size_t cch; - const wchar_t * t; - LONG rv = ERROR_SUCCESS; - HKEY hkp = NULL; - - hkp = hKey; - t = lpSubKey; - - /* check for case insensitive prefix first */ - if (!_wcsnicmp(lpSubKey, CONFIG_REGPATHW, ARRAYLENGTH(CONFIG_REGPATHW) - 1)) { - HKEY hkt; - - t = lpSubKey + (ARRAYLENGTH(CONFIG_REGPATHW) - 1); - -#ifdef DEBUG - assert(*t == L'\0' || *t == L'\\'); -#endif - - rv = RegCreateKeyEx(hkp, - CONFIG_REGPATHW, - Reserved, - lpClass, - dwOptions, - samDesired, - lpSecurityAttributes, - &hkt, - lpdwDisposition); - - if (rv != ERROR_SUCCESS) - return rv; - - if (*t == L'\0') { - *phkResult = hkt; - return rv; - } - - t++; - hkp = hkt; - } - - while(TRUE) { - wchar_t * slash; - HKEY hkt; - - slash = wcschr(t, L'\\'); - if (slash == NULL) - break; - - if (FAILED(StringCchCopyN(sk_name, ARRAYLENGTH(sk_name), - t, slash - t))) { - rv = ERROR_CANTOPEN; - goto _cleanup; - } - - sk_name[slash - t] = L'\0'; - t = slash+1; - - if (khcint_RegOpenKeyEx(hkp, sk_name, 0, samDesired, &hkt) == - ERROR_SUCCESS) { - - if (hkp != hKey) - RegCloseKey(hkp); - hkp = hkt; - } else { - - rv = RegCreateKeyEx(hKey, - lpSubKey, - Reserved, - lpClass, - dwOptions, - samDesired, - lpSecurityAttributes, - phkResult, - lpdwDisposition); - goto _cleanup; - } - } - - if (FAILED(StringCchLength(t, KCONF_MAXCCH_NAME, &cch))) { - rv = ERROR_CANTOPEN; - goto _cleanup; - } - - for (i=0; ;i++) { - DWORD dw; - - dw = ARRAYLENGTH(sk_name); - l = RegEnumKeyEx(hkp, i, sk_name, &dw, - NULL, NULL, NULL, &ft); - - if (l != ERROR_SUCCESS) - break; - - if (!(wcsncmp(sk_name, t, cch))) { - /* bingo! ?? */ - if (sk_name[cch] == L'\0' || - sk_name[cch] == L'~') { - l = RegOpenKeyEx(hkp, sk_name, 0, - samDesired, phkResult); - if (l == ERROR_SUCCESS && lpdwDisposition) - *lpdwDisposition = REG_OPENED_EXISTING_KEY; - rv = l; - goto _cleanup; - } - } - - if (!_wcsnicmp(sk_name, t, cch) && - (sk_name[cch] == L'\0' || - sk_name[cch] == L'~')) { - long new_idx; - - if (sk_name[cch] == L'\0') - new_idx = 1; - else if (cch + 1 < KCONF_MAXCCH_NAME) - new_idx = wcstol(sk_name + (cch + 1), NULL, 10); - else - return ERROR_BUFFER_OVERFLOW; - - assert(new_idx > 0); - - if (new_idx > index) - index = new_idx; - } - } - - if (index != 0) { - if (FAILED(StringCbPrintf(sk_name, sizeof(sk_name), - L"%s~%d", t, index))) - return ERROR_BUFFER_OVERFLOW; - } else { - StringCbCopy(sk_name, sizeof(sk_name), t); - } - - rv = RegCreateKeyEx(hkp, - sk_name, - Reserved, - lpClass, - dwOptions, - samDesired, - lpSecurityAttributes, - phkResult, - lpdwDisposition); - - _cleanup: - - if (hkp != hKey && hkp != NULL) - RegCloseKey(hkp); - - return rv; -} - -/* obtains cs_conf_global */ -HKEY -khcint_space_open_key(kconf_conf_space * s, khm_int32 flags) { - HKEY hk = NULL; - int nflags = 0; - DWORD disp; - if(flags & KCONF_FLAG_MACHINE) { - if(s->regkey_machine) - return s->regkey_machine; - if((khcint_RegOpenKeyEx(HKEY_LOCAL_MACHINE, s->regpath, 0, - KEY_READ | KEY_WRITE, &hk) != - ERROR_SUCCESS) && - !(flags & KHM_PERM_WRITE)) { - - if(khcint_RegOpenKeyEx(HKEY_LOCAL_MACHINE, s->regpath, 0, - KEY_READ, &hk) == ERROR_SUCCESS) { - nflags = KHM_PERM_READ; - } - - } - if(!hk && (flags & KHM_FLAG_CREATE)) { - - khcint_RegCreateKeyEx(HKEY_LOCAL_MACHINE, - s->regpath, - 0, - NULL, - REG_OPTION_NON_VOLATILE, - KEY_READ | KEY_WRITE, - NULL, - &hk, - &disp); - } - if(hk) { - EnterCriticalSection(&cs_conf_global); - s->regkey_machine = hk; - s->regkey_machine_flags = nflags; - LeaveCriticalSection(&cs_conf_global); - } - - return hk; - } else { - if(s->regkey_user) - return s->regkey_user; - if((khcint_RegOpenKeyEx(HKEY_CURRENT_USER, s->regpath, 0, - KEY_READ | KEY_WRITE, &hk) != - ERROR_SUCCESS) && - !(flags & KHM_PERM_WRITE)) { - if(khcint_RegOpenKeyEx(HKEY_CURRENT_USER, s->regpath, 0, - KEY_READ, &hk) == ERROR_SUCCESS) { - nflags = KHM_PERM_READ; - } - } - if(!hk && (flags & KHM_FLAG_CREATE)) { - khcint_RegCreateKeyEx(HKEY_CURRENT_USER, - s->regpath, 0, NULL, - REG_OPTION_NON_VOLATILE, - KEY_READ | KEY_WRITE, - NULL, &hk, &disp); - } - if(hk) { - EnterCriticalSection(&cs_conf_global); - s->regkey_user = hk; - s->regkey_user_flags = nflags; - LeaveCriticalSection(&cs_conf_global); - } - - return hk; - } -} - -/* obtains cs_conf_handle/cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_shadow_space(khm_handle upper, khm_handle lower) -{ - kconf_handle * h; - - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - - if(!khc_is_handle(upper)) { -#ifdef DEBUG - DebugBreak(); -#endif - return KHM_ERROR_INVALID_PARAM; - } - - h = (kconf_handle *) upper; - - EnterCriticalSection(&cs_conf_handle); - if(h->lower) { - EnterCriticalSection(&cs_conf_global); - khcint_handle_free(h->lower); - LeaveCriticalSection(&cs_conf_global); - h->lower = NULL; - } - - if(khc_is_handle(lower)) { - kconf_handle * l; - kconf_handle * lc; - - l = (kconf_handle *) lower; - lc = khcint_handle_dup(l); - h->lower = lc; - } - LeaveCriticalSection(&cs_conf_handle); - - return KHM_ERROR_SUCCESS; -} - -/* no locks */ -kconf_conf_space * -khcint_create_empty_space(void) { - kconf_conf_space * r; - - r = PMALLOC(sizeof(kconf_conf_space)); - assert(r != NULL); - ZeroMemory(r,sizeof(kconf_conf_space)); - - return r; -} - -/* called with cs_conf_global */ -void -khcint_free_space(kconf_conf_space * r) { - kconf_conf_space * c; - - if(!r) - return; - - TPOPCHILD(r, &c); - while(c) { - khcint_free_space(c); - TPOPCHILD(r, &c); - } - - if(r->name) - PFREE(r->name); - - if(r->regpath) - PFREE(r->regpath); - - if(r->regkey_machine) - RegCloseKey(r->regkey_machine); - - if(r->regkey_user) - RegCloseKey(r->regkey_user); - - PFREE(r); -} - -/* obtains cs_conf_global */ -khm_int32 -khcint_open_space(kconf_conf_space * parent, - const wchar_t * sname, size_t n_sname, - khm_int32 flags, kconf_conf_space **result) { - kconf_conf_space * p; - kconf_conf_space * c; - HKEY pkey = NULL; - HKEY ckey = NULL; - wchar_t buf[KCONF_MAXCCH_NAME]; - size_t cb_regpath = 0; - - if(!parent) - p = conf_root; - else - p = parent; - - if(n_sname >= KCONF_MAXCCH_NAME || n_sname <= 0) - return KHM_ERROR_INVALID_PARAM; - - StringCchCopyN(buf, ARRAYLENGTH(buf), sname, n_sname); - - /* see if there is already a config space by this name. if so, - return it. Note that if the configuration space is specified - in a schema, we would find it here. */ - EnterCriticalSection(&cs_conf_global); - c = TFIRSTCHILD(p); - while(c) { - if(c->name && !wcscmp(c->name, buf)) - break; - - c = LNEXT(c); - } - LeaveCriticalSection(&cs_conf_global); - - if(c) { - - if (c->flags & KCONF_SPACE_FLAG_DELETED) { - if (flags & KHM_FLAG_CREATE) { - c->flags &= ~(KCONF_SPACE_FLAG_DELETED | - KCONF_SPACE_FLAG_DELETE_M | - KCONF_SPACE_FLAG_DELETE_U); - } else { - *result = NULL; - return KHM_ERROR_NOT_FOUND; - } - } - - khcint_space_hold(c); - *result = c; - return KHM_ERROR_SUCCESS; - } - - if(!(flags & KHM_FLAG_CREATE)) { - - /* we are not creating the space, so it must exist in the form of a - registry key in HKLM or HKCU. If it existed as a schema, we - would have already retured it above. */ - - if (flags & KCONF_FLAG_USER) - pkey = khcint_space_open_key(p, KHM_PERM_READ | KCONF_FLAG_USER); - - if((!pkey || - (khcint_RegOpenKeyEx(pkey, buf, 0, KEY_READ, &ckey) != - ERROR_SUCCESS)) - && (flags & KCONF_FLAG_MACHINE)) { - - pkey = khcint_space_open_key(p, KHM_PERM_READ | KCONF_FLAG_MACHINE); - if(!pkey || - (khcint_RegOpenKeyEx(pkey, buf, 0, KEY_READ, &ckey) != - ERROR_SUCCESS)) { - *result = NULL; - - return KHM_ERROR_NOT_FOUND; - } - } - - if(ckey) { - RegCloseKey(ckey); - ckey = NULL; - } - } - - c = khcint_create_empty_space(); - - /*SAFE: buf: is of known length < KCONF_MAXCCH_NAME */ - c->name = PWCSDUP(buf); - - /*SAFE: p->regpath: is valid since it was set using this same - function. */ - /*SAFE: buf: see above */ - cb_regpath = (wcslen(p->regpath) + wcslen(buf) + 2) * sizeof(wchar_t); - c->regpath = PMALLOC(cb_regpath); - - assert(c->regpath != NULL); - - /*SAFE: c->regpath: allocated above to be big enough */ - /*SAFE: p->regpath: see above */ - StringCbCopy(c->regpath, cb_regpath, p->regpath); - StringCbCat(c->regpath, cb_regpath, L"\\"); - - /*SAFE: buf: see above */ - StringCbCat(c->regpath, cb_regpath, buf); - - khcint_space_hold(c); - - EnterCriticalSection(&cs_conf_global); - TADDCHILD(p,c); - LeaveCriticalSection(&cs_conf_global); - - *result = c; - return KHM_ERROR_SUCCESS; -} - -/* obtains cs_conf_handle/cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_open_space(khm_handle parent, const wchar_t * cspace, khm_int32 flags, - khm_handle * result) { - kconf_handle * h; - kconf_conf_space * p; - kconf_conf_space * c = NULL; - size_t cbsize; - const wchar_t * str; - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(!khc_is_config_running()) { - return KHM_ERROR_NOT_READY; - } - - if(!result || (parent && !khc_is_handle(parent))) { -#ifdef DEBUG - DebugBreak(); -#endif - return KHM_ERROR_INVALID_PARAM; - } - - if(!parent) - p = conf_root; - else { - h = (kconf_handle *) parent; - p = khc_space_from_handle(parent); - } - - khcint_space_hold(p); - - /* if none of these flags are specified, make it seem like all of - them were */ - if(!(flags & KCONF_FLAG_USER) && - !(flags & KCONF_FLAG_MACHINE) && - !(flags & KCONF_FLAG_SCHEMA)) - flags |= KCONF_FLAG_USER | KCONF_FLAG_MACHINE | KCONF_FLAG_SCHEMA; - - if(cspace == NULL) { - *result = (khm_handle) khcint_handle_from_space(p, flags); - khcint_space_release(p); - return KHM_ERROR_SUCCESS; - } - - if(FAILED(StringCbLength(cspace, KCONF_MAXCB_PATH, &cbsize))) { - khcint_space_release(p); - *result = NULL; - return KHM_ERROR_INVALID_PARAM; - } - - str = cspace; - while(TRUE) { - const wchar_t * end = NULL; - - if (!(flags & KCONF_FLAG_NOPARSENAME)) { - - end = wcschr(str, L'\\'); /* safe because cspace was - validated above */ - } - - if(!end) { - if(flags & KCONF_FLAG_TRAILINGVALUE) { - /* we are at the value component */ - c = p; - khcint_space_hold(c); - break; - } else - end = str + wcslen(str); /* safe because cspace was - validated above */ - } - - rv = khcint_open_space(p, str, end - str, flags, &c); - - if(KHM_SUCCEEDED(rv) && (*end == L'\\')) { - khcint_space_release(p); - p = c; - c = NULL; - str = end+1; - } - else - break; - } - - khcint_space_release(p); - if(KHM_SUCCEEDED(rv)) { - *result = khcint_handle_from_space(c, flags); - } else - *result = NULL; - - if (c) - khcint_space_release(c); - - return rv; -} - -/* obtains cs_conf_handle/cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_close_space(khm_handle csp) { - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - - if(!khc_is_handle(csp)) { -#ifdef DEBUG - DebugBreak(); -#endif - return KHM_ERROR_INVALID_PARAM; - } - - khcint_handle_free((kconf_handle *) csp); - return KHM_ERROR_SUCCESS; -} - -/* obtains cs_conf_handle/cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_read_string(khm_handle pconf, - const wchar_t * pvalue, - wchar_t * buf, - khm_size * bufsize) -{ - kconf_conf_space * c; - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - - do { - HKEY hku = NULL; - HKEY hkm = NULL; - const wchar_t * value = NULL; - int free_space = 0; - khm_handle conf = NULL; - DWORD size; - DWORD type; - LONG hr; - - int i; - - if((value = wcsrchr(pvalue, L'\\')) != NULL) { - - if(KHM_FAILED(khc_open_space( - pconf, - pvalue, - KCONF_FLAG_TRAILINGVALUE | (pconf?khc_handle_flags(pconf):0), - &conf))) - goto _shadow; - - free_space = 1; - - if (value) { - value++; - } else { -#ifdef DEBUG - assert(FALSE); -#endif - } - } else { - value = pvalue; - conf = pconf; - free_space = 0; - } - - if(!khc_is_handle(conf)) - goto _shadow; - - c = khc_space_from_handle(conf); - - if(khc_is_user_handle(conf)) - hku = khcint_space_open_key(c, KHM_PERM_READ); - - if(khc_is_machine_handle(conf)) - hkm = khcint_space_open_key(c, KHM_PERM_READ | KCONF_FLAG_MACHINE); - - size = (DWORD) *bufsize; - if(hku) { - hr = RegQueryValueEx(hku, value, NULL, &type, (LPBYTE) buf, &size); - if(hr == ERROR_SUCCESS) { - if(type != REG_SZ) { - rv = KHM_ERROR_TYPE_MISMATCH; - goto _exit; - } - else { - *bufsize = size; - /* if buf==NULL, RegQueryValueEx will return success and just return the - required buffer size in 'size' */ - rv = (buf)? KHM_ERROR_SUCCESS: KHM_ERROR_TOO_LONG; - goto _exit; - } - } else { - if(hr == ERROR_MORE_DATA) { - *bufsize = size; - rv = KHM_ERROR_TOO_LONG; - goto _exit; - } - } - } - - size = (DWORD) *bufsize; - if(hkm) { - hr = RegQueryValueEx(hkm, value, NULL, &type, (LPBYTE) buf, &size); - if(hr == ERROR_SUCCESS) { - if(type != REG_SZ) { - rv = KHM_ERROR_TYPE_MISMATCH; - goto _exit; - } - else { - *bufsize = size; - rv = (buf)? KHM_ERROR_SUCCESS: KHM_ERROR_TOO_LONG; - goto _exit; - } - } else { - if(hr == ERROR_MORE_DATA) { - *bufsize = size; - rv = KHM_ERROR_TOO_LONG; - goto _exit; - } - } - } - - if(c->schema && khc_is_schema_handle(conf)) { - for(i=0;i<c->nSchema;i++) { - if(c->schema[i].type == KC_STRING && !wcscmp(value, c->schema[i].name)) { - /* found it */ - size_t cbsize = 0; - - if(!c->schema[i].value) { - rv = KHM_ERROR_NOT_FOUND; - goto _exit; - } - - if(FAILED(StringCbLength((wchar_t *) c->schema[i].value, KCONF_MAXCB_STRING, &cbsize))) { - rv = KHM_ERROR_NOT_FOUND; - goto _exit; - } - cbsize += sizeof(wchar_t); - - if(!buf || *bufsize < cbsize) { - *bufsize = cbsize; - rv = KHM_ERROR_TOO_LONG; - goto _exit; - } - - StringCbCopy(buf, *bufsize, (wchar_t *) c->schema[i].value); - *bufsize = cbsize; - rv = KHM_ERROR_SUCCESS; - goto _exit; - } - } - } - -_shadow: - if(free_space && conf) - khc_close_space(conf); - - if(khc_is_shadowed(pconf)) { - pconf = khc_shadow(pconf); - continue; - } else { - rv = KHM_ERROR_NOT_FOUND; - break; - } - -_exit: - if(free_space && conf) - khc_close_space(conf); - break; - - } while(TRUE); - - return rv; -} - -/* obtains cs_conf_handle/cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_read_int32(khm_handle pconf, const wchar_t * pvalue, khm_int32 * buf) { - kconf_conf_space * c; - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - - if(!buf || !pvalue) - return KHM_ERROR_INVALID_PARAM; - - do { - DWORD size; - DWORD type; - LONG hr; - HKEY hku = NULL; - HKEY hkm = NULL; - - const wchar_t * value = NULL; - int free_space = 0; - khm_handle conf = NULL; - - int i; - - if((value = wcsrchr(pvalue, L'\\')) != NULL) { - if(KHM_FAILED(khc_open_space( - pconf, - pvalue, - KCONF_FLAG_TRAILINGVALUE | (pconf?khc_handle_flags(pconf):0), - &conf))) - goto _shadow; - free_space = 1; - - if (value) { - value++; - } else { -#ifdef DEBUG - assert(FALSE); -#endif - } - } else { - value = pvalue; - conf = pconf; - free_space = 0; - } - - if(!khc_is_handle(conf) || !buf) - goto _shadow; - - c = khc_space_from_handle(conf); - - if(khc_is_user_handle(conf)) - hku = khcint_space_open_key(c, KHM_PERM_READ); - - if(khc_is_machine_handle(conf)) - hkm = khcint_space_open_key(c, KHM_PERM_READ | KCONF_FLAG_MACHINE); - - size = sizeof(DWORD); - if(hku) { - hr = RegQueryValueEx(hku, value, NULL, &type, (LPBYTE) buf, &size); - if(hr == ERROR_SUCCESS) { - if(type != REG_DWORD) { - rv = KHM_ERROR_TYPE_MISMATCH; - goto _exit; - } - else { - rv = KHM_ERROR_SUCCESS; - goto _exit; - } - } - } - - size = sizeof(DWORD); - if(hkm) { - hr = RegQueryValueEx(hkm, value, NULL, &type, (LPBYTE) buf, &size); - if(hr == ERROR_SUCCESS) { - if(type != REG_DWORD) { - rv= KHM_ERROR_TYPE_MISMATCH; - goto _exit; - } - else { - rv= KHM_ERROR_SUCCESS; - goto _exit; - } - } - } - - if(c->schema && khc_is_schema_handle(conf)) { - for(i=0;i<c->nSchema;i++) { - if(c->schema[i].type == KC_INT32 && !wcscmp(value, c->schema[i].name)) { - *buf = (khm_int32) c->schema[i].value; - rv = KHM_ERROR_SUCCESS; - goto _exit; - } - } - } -_shadow: - if(free_space && conf) - khc_close_space(conf); - - if(khc_is_shadowed(pconf)) { - pconf = khc_shadow(pconf); - continue; - } else { - rv = KHM_ERROR_NOT_FOUND; - break; - } -_exit: - if(free_space && conf) - khc_close_space(conf); - break; - } - while(TRUE); - - return rv; -} - -/* obtains cs_conf_handle/cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_read_int64(khm_handle pconf, const wchar_t * pvalue, khm_int64 * buf) { - kconf_conf_space * c; - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - - do { - DWORD size; - DWORD type; - LONG hr; - HKEY hku = NULL; - HKEY hkm = NULL; - - const wchar_t * value = NULL; - int free_space = 0; - khm_handle conf = NULL; - - int i; - - if((value = wcsrchr(pvalue, L'\\')) != NULL) { - if(KHM_FAILED(khc_open_space( - pconf, - pvalue, - KCONF_FLAG_TRAILINGVALUE | (pconf?khc_handle_flags(pconf):0), - &conf))) - goto _shadow; - free_space = 1; - - if (value) { - value++; - } else { -#ifdef DEBUG - assert(FALSE); -#endif - } - } else { - value = pvalue; - conf = pconf; - free_space = 0; - } - - if(!khc_is_handle(conf) || !buf) - goto _shadow; - - c = khc_space_from_handle(conf); - - if(khc_is_user_handle(conf)) - hku = khcint_space_open_key(c, KHM_PERM_READ); - - if(khc_is_machine_handle(conf)) - hkm = khcint_space_open_key(c, KHM_PERM_READ | KCONF_FLAG_MACHINE); - - size = sizeof(khm_int64); - if(hku) { - hr = RegQueryValueEx(hku, value, NULL, &type, (LPBYTE) buf, &size); - if(hr == ERROR_SUCCESS) { - if(type != REG_QWORD) { - rv= KHM_ERROR_TYPE_MISMATCH; - goto _exit; - } - else { - rv = KHM_ERROR_SUCCESS; - goto _exit; - } - } - } - - size = sizeof(khm_int64); - if(hkm) { - hr = RegQueryValueEx(hkm, value, NULL, &type, (LPBYTE) buf, &size); - if(hr == ERROR_SUCCESS) { - if(type != REG_QWORD) { - rv = KHM_ERROR_TYPE_MISMATCH; - goto _exit; - } - else { - rv = KHM_ERROR_SUCCESS; - goto _exit; - } - } - } - - if(c->schema && khc_is_schema_handle(conf)) { - for(i=0;i<c->nSchema;i++) { - if(c->schema[i].type == KC_INT64 && !wcscmp(value, c->schema[i].name)) { - *buf = (khm_int64) c->schema[i].value; - rv = KHM_ERROR_SUCCESS; - goto _exit; - } - } - } - -_shadow: - if(free_space && conf) - khc_close_space(conf); - if(khc_is_shadowed(pconf)) { - pconf = khc_shadow(pconf); - continue; - } else { - rv = KHM_ERROR_NOT_FOUND; - break; - } - -_exit: - if(free_space && conf) - khc_close_space(conf); - break; - - } while(TRUE); - return rv; -} - -/* obtaincs cs_conf_handle/cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_read_binary(khm_handle pconf, const wchar_t * pvalue, - void * buf, khm_size * bufsize) { - kconf_conf_space * c; - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - - do { - DWORD size; - DWORD type; - LONG hr; - HKEY hku = NULL; - HKEY hkm = NULL; - - const wchar_t * value = NULL; - int free_space = 0; - khm_handle conf = NULL; - - if((value = wcsrchr(pvalue, L'\\')) != NULL) { - if(KHM_FAILED(khc_open_space( - pconf, - pvalue, - KCONF_FLAG_TRAILINGVALUE | (pconf?khc_handle_flags(pconf):0), - &conf))) - goto _shadow; - free_space = 1; - - if (value) { - value++; - } else { -#ifdef DEBUG - assert(FALSE); -#endif - } - } else { - value = pvalue; - conf = pconf; - free_space = 0; - } - - if(!khc_is_handle(conf)) - goto _shadow; - - c = khc_space_from_handle(conf); - - if(khc_is_user_handle(conf)) - hku = khcint_space_open_key(c, KHM_PERM_READ); - - if(khc_is_machine_handle(conf)) - hkm = khcint_space_open_key(c, KHM_PERM_READ | KCONF_FLAG_MACHINE); - - size = (DWORD) *bufsize; - if(hku) { - hr = RegQueryValueEx(hku, value, NULL, &type, (LPBYTE) buf, &size); - if(hr == ERROR_SUCCESS) { - if(type != REG_BINARY) { - rv = KHM_ERROR_TYPE_MISMATCH; - goto _exit; - } - else { - *bufsize = size; - rv = KHM_ERROR_SUCCESS; - goto _exit; - } - } else { - if(hr == ERROR_MORE_DATA) { - *bufsize = size; - rv = KHM_ERROR_TOO_LONG; - goto _exit; - } - } - } - - size = (DWORD) *bufsize; - if(hkm) { - hr = RegQueryValueEx(hkm, value, NULL, &type, (LPBYTE) buf, &size); - if(hr == ERROR_SUCCESS) { - if(type != REG_BINARY) { - rv = KHM_ERROR_TYPE_MISMATCH; - goto _exit; - } - else { - *bufsize = size; - rv = KHM_ERROR_SUCCESS; - goto _exit; - } - } else { - if(hr == ERROR_MORE_DATA) { - *bufsize = size; - rv = KHM_ERROR_TOO_LONG; - goto _exit; - } - } - } - - /* binary values aren't supported in schema */ -_shadow: - if(free_space && conf) - khc_close_space(conf); - if(khc_is_shadowed(pconf)) { - pconf = khc_shadow(pconf); - continue; - } else { - rv = KHM_ERROR_NOT_FOUND; - break; - } - -_exit: - if(free_space && conf) - khc_close_space(conf); - break; - - }while (TRUE); - - return rv; -} - -/* obtains cs_conf_handle/cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_write_string(khm_handle pconf, - const wchar_t * pvalue, - wchar_t * buf) -{ - HKEY pk = NULL; - kconf_conf_space * c; - khm_int32 rv = KHM_ERROR_SUCCESS; - LONG hr; - size_t cbsize; - const wchar_t * value = NULL; - int free_space = 0; - khm_handle conf = NULL; - - - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - - if(pconf && !khc_is_machine_handle(pconf) && !khc_is_user_handle(pconf)) - return KHM_ERROR_INVALID_OPERATION; - - if(FAILED(StringCbLength(buf, KCONF_MAXCB_STRING, &cbsize))) { - rv = KHM_ERROR_INVALID_PARAM; - goto _exit; - } - - cbsize += sizeof(wchar_t); - - if (khc_handle_flags(pconf) & KCONF_FLAG_WRITEIFMOD) { - wchar_t tmpbuf[512]; - wchar_t * buffer; - size_t tmpsize = cbsize; - khm_boolean is_equal = FALSE; - - if (cbsize <= sizeof(tmpbuf)) { - buffer = tmpbuf; - } else { - buffer = PMALLOC(cbsize); - } - - if (KHM_SUCCEEDED(khc_read_string(pconf, pvalue, buffer, &tmpsize)) && - tmpsize == cbsize) { - if (khc_handle_flags(pconf) & KCONF_FLAG_IFMODCI) - is_equal = !_wcsicmp(buffer, buf); - else - is_equal = !wcscmp(buffer, buf); - } - - if (buffer != tmpbuf) - PFREE(buffer); - - if (is_equal) { - return KHM_ERROR_SUCCESS; - } - } - - if((value = wcsrchr(pvalue, L'\\')) != NULL) { - if(KHM_FAILED(khc_open_space(pconf, pvalue, - KCONF_FLAG_TRAILINGVALUE | (pconf?khc_handle_flags(pconf):0), - &conf))) - return KHM_ERROR_INVALID_PARAM; - free_space = 1; - - if (value) { - value ++; - } else { -#ifdef DEBUG - assert(FALSE); -#endif - } - } else { - value = pvalue; - conf = pconf; - free_space = 0; - } - - if(!khc_is_handle(conf) || !buf) { - rv = KHM_ERROR_INVALID_PARAM; - goto _exit; - } - - c = khc_space_from_handle(conf); - - if(khc_is_user_handle(conf)) { - pk = khcint_space_open_key(c, KHM_PERM_WRITE | KHM_FLAG_CREATE); - } else { - pk = khcint_space_open_key(c, KHM_PERM_WRITE | KCONF_FLAG_MACHINE | KHM_FLAG_CREATE); - } - - hr = RegSetValueEx(pk, value, 0, REG_SZ, (LPBYTE) buf, (DWORD) cbsize); - - if(hr != ERROR_SUCCESS) - rv = KHM_ERROR_INVALID_OPERATION; - -_exit: - if(free_space) - khc_close_space(conf); - return rv; -} - -/* obtaincs cs_conf_handle/cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_write_int32(khm_handle pconf, - const wchar_t * pvalue, - khm_int32 buf) -{ - HKEY pk = NULL; - kconf_conf_space * c; - khm_int32 rv = KHM_ERROR_SUCCESS; - LONG hr; - const wchar_t * value = NULL; - int free_space = 0; - khm_handle conf = NULL; - - - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - - if(pconf && !khc_is_machine_handle(pconf) && !khc_is_user_handle(pconf)) - return KHM_ERROR_INVALID_OPERATION; - - if (khc_handle_flags(pconf) & KCONF_FLAG_WRITEIFMOD) { - khm_int32 tmpvalue; - - if (KHM_SUCCEEDED(khc_read_int32(pconf, pvalue, &tmpvalue)) && - tmpvalue == buf) { - return KHM_ERROR_SUCCESS; - } - } - - if((value = wcsrchr(pvalue, L'\\')) != NULL) { - if(KHM_FAILED(khc_open_space( - pconf, - pvalue, - KCONF_FLAG_TRAILINGVALUE | (pconf?khc_handle_flags(pconf):0), - &conf))) - return KHM_ERROR_INVALID_PARAM; - free_space = 1; - - if (value) { - value ++; - } else { -#ifdef DEBUG - assert(FALSE); -#endif - } - } else { - value = pvalue; - conf = pconf; - free_space = 0; - } - - if(!khc_is_handle(conf)) - return KHM_ERROR_INVALID_PARAM; - - c = khc_space_from_handle( conf); - - if(khc_is_user_handle(conf)) { - pk = khcint_space_open_key(c, KHM_PERM_WRITE | KHM_FLAG_CREATE); - } else { - pk = khcint_space_open_key(c, KHM_PERM_WRITE | KCONF_FLAG_MACHINE | KHM_FLAG_CREATE); - } - - hr = RegSetValueEx(pk, value, 0, REG_DWORD, (LPBYTE) &buf, sizeof(khm_int32)); - - if(hr != ERROR_SUCCESS) - rv = KHM_ERROR_INVALID_OPERATION; - - if(free_space) - khc_close_space(conf); - - return rv; -} - -/* obtains cs_conf_handle/cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_write_int64(khm_handle pconf, const wchar_t * pvalue, khm_int64 buf) { - HKEY pk = NULL; - kconf_conf_space * c; - khm_int32 rv = KHM_ERROR_SUCCESS; - LONG hr; - const wchar_t * value = NULL; - int free_space = 0; - khm_handle conf = NULL; - - - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - - if(pconf && !khc_is_machine_handle(pconf) && !khc_is_user_handle(pconf)) - return KHM_ERROR_INVALID_OPERATION; - - if (khc_handle_flags(pconf) & KCONF_FLAG_WRITEIFMOD) { - khm_int64 tmpvalue; - - if (KHM_SUCCEEDED(khc_read_int64(pconf, pvalue, &tmpvalue)) && - tmpvalue == buf) { - return KHM_ERROR_SUCCESS; - } - } - - if((value = wcsrchr(pvalue, L'\\')) != NULL) { - if(KHM_FAILED(khc_open_space( - pconf, - pvalue, - KCONF_FLAG_TRAILINGVALUE | (pconf?khc_handle_flags(pconf):0), - &conf))) - return KHM_ERROR_INVALID_PARAM; - free_space = 1; - - if (value) { - value ++; - } else { -#ifdef DEBUG - assert(FALSE); -#endif - } - } else { - value = pvalue; - conf = pconf; - free_space = 0; - } - - if(!khc_is_handle(conf)) - return KHM_ERROR_INVALID_PARAM; - - c = khc_space_from_handle( conf); - - if(khc_is_user_handle(conf)) { - pk = khcint_space_open_key(c, KHM_PERM_WRITE | KHM_FLAG_CREATE); - } else { - pk = khcint_space_open_key(c, KHM_PERM_WRITE | KCONF_FLAG_MACHINE | KHM_FLAG_CREATE); - } - - hr = RegSetValueEx(pk, value, 0, REG_QWORD, (LPBYTE) &buf, sizeof(khm_int64)); - - if(hr != ERROR_SUCCESS) - rv = KHM_ERROR_INVALID_OPERATION; - - if(free_space) - khc_close_space(conf); - - return rv; -} - -/* obtains cs_conf_handle/cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_write_binary(khm_handle pconf, - const wchar_t * pvalue, - void * buf, khm_size bufsize) { - HKEY pk = NULL; - kconf_conf_space * c; - khm_int32 rv = KHM_ERROR_SUCCESS; - LONG hr; - const wchar_t * value = NULL; - int free_space = 0; - khm_handle conf = NULL; - - - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - - if(pconf && !khc_is_machine_handle(pconf) && !khc_is_user_handle(pconf)) - return KHM_ERROR_INVALID_OPERATION; - - if((value = wcsrchr(pvalue, L'\\')) != NULL) { - if(KHM_FAILED(khc_open_space( - pconf, - pvalue, - KCONF_FLAG_TRAILINGVALUE | (pconf?khc_handle_flags(pconf):0), - &conf))) - return KHM_ERROR_INVALID_PARAM; - free_space = 1; - - if (value) { - value ++; - } else { -#ifdef DEBUG - assert(FALSE); -#endif - } - } else { - value = pvalue; - conf = pconf; - free_space = 0; - } - - if(!khc_is_handle(conf)) - return KHM_ERROR_INVALID_PARAM; - - c = khc_space_from_handle(conf); - - if(khc_is_user_handle(conf)) { - pk = khcint_space_open_key(c, KHM_PERM_WRITE | KHM_FLAG_CREATE); - } else { - pk = khcint_space_open_key(c, KHM_PERM_WRITE | KCONF_FLAG_MACHINE | KHM_FLAG_CREATE); - } - - hr = RegSetValueEx(pk, value, 0, REG_BINARY, buf, (DWORD) bufsize); - - if(hr != ERROR_SUCCESS) - rv = KHM_ERROR_INVALID_OPERATION; - - if(free_space) - khc_close_space(conf); - - return rv; -} - -/* no locks */ -KHMEXP khm_int32 KHMAPI -khc_get_config_space_name(khm_handle conf, - wchar_t * buf, khm_size * bufsize) { - kconf_conf_space * c; - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - - if(!khc_is_handle(conf)) - return KHM_ERROR_INVALID_PARAM; - - c = khc_space_from_handle(conf); - - if(!c->name) { - if(buf && *bufsize > 0) - buf[0] = L'\0'; - else { - *bufsize = sizeof(wchar_t); - rv = KHM_ERROR_TOO_LONG; - } - } else { - size_t cbsize; - - if(FAILED(StringCbLength(c->name, KCONF_MAXCB_NAME, &cbsize))) - return KHM_ERROR_UNKNOWN; - - cbsize += sizeof(wchar_t); - - if(!buf || cbsize > *bufsize) { - *bufsize = cbsize; - rv = KHM_ERROR_TOO_LONG; - } else { - StringCbCopy(buf, *bufsize, c->name); - *bufsize = cbsize; - } - } - - return rv; -} - -/* obtains cs_conf_handle/cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_get_config_space_parent(khm_handle conf, khm_handle * parent) { - kconf_conf_space * c; - - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - - if(!khc_is_handle(conf)) - return KHM_ERROR_INVALID_PARAM; - - c = khc_space_from_handle(conf); - - if(c == conf_root || c->parent == conf_root) - *parent = NULL; - else - *parent = khcint_handle_from_space(c->parent, khc_handle_flags(conf)); - - return KHM_ERROR_SUCCESS; -} - -/* obtains cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_get_type(khm_handle conf, const wchar_t * value) { - HKEY hkm = NULL; - HKEY hku = NULL; - kconf_conf_space * c; - khm_int32 rv; - LONG hr = ERROR_SUCCESS; - DWORD type = 0; - - if(!khc_is_config_running()) - return KC_NONE; - - if(!khc_is_handle(conf)) - return KC_NONE; - - c = khc_space_from_handle(conf); - - if(!khc_is_machine_handle(conf)) - hku = khcint_space_open_key(c, KHM_PERM_READ); - hkm = khcint_space_open_key(c, KHM_PERM_READ | KCONF_FLAG_MACHINE); - - if(hku) - hr = RegQueryValueEx(hku, value, NULL, &type, NULL, NULL); - if(!hku || hr != ERROR_SUCCESS) - hr = RegQueryValueEx(hkm, value, NULL, &type, NULL, NULL); - if(((!hku && !hkm) || hr != ERROR_SUCCESS) && c->schema) { - int i; - - for(i=0; i<c->nSchema; i++) { - if(!wcscmp(c->schema[i].name, value)) { - return c->schema[i].type; - } - } - - return KC_NONE; - } - - switch(type) { - case REG_MULTI_SZ: - case REG_SZ: - rv = KC_STRING; - break; - case REG_DWORD: - rv = KC_INT32; - break; - case REG_QWORD: - rv = KC_INT64; - break; - case REG_BINARY: - rv = KC_BINARY; - break; - default: - rv = KC_NONE; - } - - return rv; -} - -/* obtains cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_value_exists(khm_handle conf, const wchar_t * value) { - HKEY hku = NULL; - HKEY hkm = NULL; - kconf_conf_space * c; - khm_int32 rv = 0; - DWORD t; - int i; - - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - - if(!khc_is_handle(conf)) - return KHM_ERROR_INVALID_PARAM; - - do { - c = khc_space_from_handle(conf); - - if (khc_is_user_handle(conf)) - hku = khcint_space_open_key(c, KHM_PERM_READ); - if (khc_is_machine_handle(conf)) - hkm = khcint_space_open_key(c, KHM_PERM_READ | KCONF_FLAG_MACHINE); - - if(hku && (RegQueryValueEx(hku, value, NULL, &t, NULL, NULL) == ERROR_SUCCESS)) - rv |= KCONF_FLAG_USER; - if(hkm && (RegQueryValueEx(hkm, value, NULL, &t, NULL, NULL) == ERROR_SUCCESS)) - rv |= KCONF_FLAG_MACHINE; - - if(c->schema && khc_is_schema_handle(conf)) { - for(i=0; i<c->nSchema; i++) { - if(!wcscmp(c->schema[i].name, value)) { - rv |= KCONF_FLAG_SCHEMA; - break; - } - } - } - - /* if the value is not found at this level and the handle is - shadowed, try the next level down. */ - if (rv == 0 && khc_is_shadowed(conf)) - conf = khc_shadow(conf); - else - break; - } while (conf); - - return rv; -} - -/* obtains cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_remove_value(khm_handle conf, const wchar_t * value, khm_int32 flags) { - HKEY hku = NULL; - HKEY hkm = NULL; - kconf_conf_space * c; - khm_int32 rv = KHM_ERROR_NOT_FOUND; - DWORD t; - LONG l; - - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - - if(!khc_is_handle(conf)) - return KHM_ERROR_INVALID_PARAM; - - c = khc_space_from_handle(conf); - - if(khc_is_user_handle(conf)) - hku = khcint_space_open_key(c, KHM_PERM_READ); - hkm = khcint_space_open_key(c, KHM_PERM_READ | KCONF_FLAG_MACHINE); - - if((flags == 0 || - (flags & KCONF_FLAG_USER)) && - hku && (RegQueryValueEx(hku, value, NULL, - &t, NULL, NULL) == ERROR_SUCCESS)) { - l = RegDeleteValue(hku, value); - if (l == ERROR_SUCCESS) - rv = KHM_ERROR_SUCCESS; - else - rv = KHM_ERROR_UNKNOWN; - } - if((flags == 0 || - (flags & KCONF_FLAG_MACHINE)) && - hkm && (RegQueryValueEx(hkm, value, NULL, - &t, NULL, NULL) == ERROR_SUCCESS)) { - l = RegDeleteValue(hkm, value); - if (l == ERROR_SUCCESS) - rv = (rv == KHM_ERROR_UNKNOWN)?KHM_ERROR_PARTIAL: - KHM_ERROR_SUCCESS; - else - rv = (rv == KHM_ERROR_SUCCESS)?KHM_ERROR_PARTIAL: - KHM_ERROR_UNKNOWN; - } - - return rv; -} - -/* called with cs_conf_global held */ -khm_int32 -khcint_remove_space(kconf_conf_space * c, khm_int32 flags) { - kconf_conf_space * cc; - kconf_conf_space * cn; - kconf_conf_space * p; - khm_boolean free_c = FALSE; - - /* TODO: if this is the last child space and the parent is marked - for deletion, delete the parent as well. */ - - p = TPARENT(c); - - /* We don't allow deleting top level keys. They are - predefined. */ -#ifdef DEBUG - assert(p); -#endif - if (!p) - return KHM_ERROR_INVALID_OPERATION; - - cc = TFIRSTCHILD(c); - while (cc) { - cn = LNEXT(cc); - - khcint_remove_space(cc, flags); - - cc = cn; - } - - cc = TFIRSTCHILD(c); - if (!cc && c->refcount == 0) { - TDELCHILD(p, c); - free_c = TRUE; - } else { - c->flags |= (flags & - (KCONF_SPACE_FLAG_DELETE_M | - KCONF_SPACE_FLAG_DELETE_U)); - - /* if all the registry spaces have been marked as deleted and - there is no schema, we should mark the space as deleted as - well. Note that ideally we only need to check for stores - which have data corresponding to this configuration space, - but this is a bit problematic since we don't monitor the - registry for changes. */ - if ((c->flags & - (KCONF_SPACE_FLAG_DELETE_M | - KCONF_SPACE_FLAG_DELETE_U)) == - (KCONF_SPACE_FLAG_DELETE_M | - KCONF_SPACE_FLAG_DELETE_U) && - (!c->schema || c->nSchema == 0)) - - c->flags |= KCONF_SPACE_FLAG_DELETED; - } - - if (c->regpath && p->regpath) { - HKEY hk; - - if (flags & KCONF_SPACE_FLAG_DELETE_U) { - hk = khcint_space_open_key(p, KCONF_FLAG_USER); - - if (hk) - khcint_RegDeleteKey(hk, c->name); - } - if (flags & KCONF_SPACE_FLAG_DELETE_M) { - hk = khcint_space_open_key(p, KCONF_FLAG_MACHINE); - - if (hk) - khcint_RegDeleteKey(hk, c->name); - } - } - - if (free_c) { - khcint_free_space(c); - } - - return KHM_ERROR_SUCCESS; -} - -/* obtains cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_remove_space(khm_handle conf) { - - /* - - mark this space as well as all child spaces as - 'delete-on-close' using flags. Mark should indicate which - repository to delete the space from. (user/machine) - - - When each subspace is released, check if it has been marked - for deletion. If so, delete the marked spaces as well as - removing the space from kconf space tree. - - - When removing a subspace from a space, check if the parent - space has any children left. If there are none, check if the - parent space is also marked for deletion. - */ - kconf_conf_space * c; - khm_int32 rv = KHM_ERROR_SUCCESS; - khm_int32 flags = 0; - - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - - if(!khc_is_handle(conf)) - return KHM_ERROR_INVALID_PARAM; - - c = khc_space_from_handle(conf); - - EnterCriticalSection(&cs_conf_global); - - if (khc_is_machine_handle(conf)) - flags |= KCONF_SPACE_FLAG_DELETE_M; - if (khc_is_user_handle(conf)) - flags |= KCONF_SPACE_FLAG_DELETE_U; - - rv = khcint_remove_space(c, flags); - - LeaveCriticalSection(&cs_conf_global); - - return rv; -} - -/* no locks */ -khm_boolean -khcint_is_valid_name(wchar_t * name) -{ - size_t cbsize; - if(FAILED(StringCbLength(name, KCONF_MAXCB_NAME, &cbsize))) - return FALSE; - return TRUE; -} - -/* no locks */ -khm_int32 -khcint_validate_schema(const kconf_schema * schema, - int begin, - int *end) -{ - int i; - int state = 0; - int end_found = 0; - - i=begin; - while(!end_found) { - switch(state) { - case 0: /* initial. this record should start a config space */ - if(!khcint_is_valid_name(schema[i].name) || - schema[i].type != KC_SPACE) - return KHM_ERROR_INVALID_PARAM; - state = 1; - break; - - case 1: /* we are inside a config space, in the values area */ - if(!khcint_is_valid_name(schema[i].name)) - return KHM_ERROR_INVALID_PARAM; - if(schema[i].type == KC_SPACE) { - if(KHM_FAILED(khcint_validate_schema(schema, i, &i))) - return KHM_ERROR_INVALID_PARAM; - state = 2; - } else if(schema[i].type == KC_ENDSPACE) { - end_found = 1; - if(end) - *end = i; - } else { - if(schema[i].type != KC_STRING && - schema[i].type != KC_INT32 && - schema[i].type != KC_INT64 && - schema[i].type != KC_BINARY) - return KHM_ERROR_INVALID_PARAM; - } - break; - - case 2: /* we are inside a config space, in the subspace area */ - if(schema[i].type == KC_SPACE) { - if(KHM_FAILED(khcint_validate_schema(schema, i, &i))) - return KHM_ERROR_INVALID_PARAM; - } else if(schema[i].type == KC_ENDSPACE) { - end_found = 1; - if(end) - *end = i; - } else { - return KHM_ERROR_INVALID_PARAM; - } - break; - - default: - /* unreachable */ - return KHM_ERROR_INVALID_PARAM; - } - i++; - } - - return KHM_ERROR_SUCCESS; -} - -/* obtains cs_conf_handle/cs_conf_global; called with cs_conf_global */ -khm_int32 -khcint_load_schema_i(khm_handle parent, const kconf_schema * schema, - int begin, int * end) -{ - int i; - int state = 0; - int end_found = 0; - kconf_conf_space * thisconf = NULL; - khm_handle h = NULL; - - i=begin; - while(!end_found) { - switch(state) { - case 0: /* initial. this record should start a config space */ - LeaveCriticalSection(&cs_conf_global); - if(KHM_FAILED(khc_open_space(parent, schema[i].name, - KHM_FLAG_CREATE, &h))) { - EnterCriticalSection(&cs_conf_global); - return KHM_ERROR_INVALID_PARAM; - } - EnterCriticalSection(&cs_conf_global); - thisconf = khc_space_from_handle(h); - thisconf->schema = schema + (begin + 1); - thisconf->nSchema = 0; - state = 1; - break; - - case 1: /* we are inside a config space, in the values area */ - if(schema[i].type == KC_SPACE) { - thisconf->nSchema = i - (begin + 1); - if(KHM_FAILED(khcint_load_schema_i(h, schema, i, &i))) - return KHM_ERROR_INVALID_PARAM; - state = 2; - } else if(schema[i].type == KC_ENDSPACE) { - thisconf->nSchema = i - (begin + 1); - end_found = 1; - if(end) - *end = i; - LeaveCriticalSection(&cs_conf_global); - khc_close_space(h); - EnterCriticalSection(&cs_conf_global); - } - break; - - case 2: /* we are inside a config space, in the subspace area */ - if(schema[i].type == KC_SPACE) { - if(KHM_FAILED(khcint_load_schema_i(h, schema, i, &i))) - return KHM_ERROR_INVALID_PARAM; - } else if(schema[i].type == KC_ENDSPACE) { - end_found = 1; - if(end) - *end = i; - LeaveCriticalSection(&cs_conf_global); - khc_close_space(h); - EnterCriticalSection(&cs_conf_global); - } else { - return KHM_ERROR_INVALID_PARAM; - } - break; - - default: - /* unreachable */ - return KHM_ERROR_INVALID_PARAM; - } - i++; - } - - return KHM_ERROR_SUCCESS; -} - -/* obtains cs_conf_handle/cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_load_schema(khm_handle conf, const kconf_schema * schema) -{ - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - - if(conf && !khc_is_handle(conf)) - return KHM_ERROR_INVALID_PARAM; - - if(KHM_FAILED(khcint_validate_schema(schema, 0, NULL))) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_conf_global); - rv = khcint_load_schema_i(conf, schema, 0, NULL); - LeaveCriticalSection(&cs_conf_global); - - return rv; -} - -/* obtains cs_conf_handle/cs_conf_global; called with cs_conf_global */ -khm_int32 -khcint_unload_schema_i(khm_handle parent, const kconf_schema * schema, - int begin, int * end) -{ - int i; - int state = 0; - int end_found = 0; - kconf_conf_space * thisconf = NULL; - khm_handle h = NULL; - - i=begin; - while(!end_found) { - switch(state) { - case 0: /* initial. this record should start a config space */ - LeaveCriticalSection(&cs_conf_global); - if(KHM_FAILED(khc_open_space(parent, schema[i].name, 0, &h))) { - EnterCriticalSection(&cs_conf_global); - return KHM_ERROR_INVALID_PARAM; - } - EnterCriticalSection(&cs_conf_global); - thisconf = khc_space_from_handle(h); - if(thisconf->schema == (schema + (begin + 1))) { - thisconf->schema = NULL; - thisconf->nSchema = 0; - } - state = 1; - break; - - case 1: /* we are inside a config space, in the values area */ - if(schema[i].type == KC_SPACE) { - if(KHM_FAILED(khcint_unload_schema_i(h, schema, i, &i))) - return KHM_ERROR_INVALID_PARAM; - state = 2; - } else if(schema[i].type == KC_ENDSPACE) { - end_found = 1; - if(end) - *end = i; - LeaveCriticalSection(&cs_conf_global); - khc_close_space(h); - EnterCriticalSection(&cs_conf_global); - } - break; - - case 2: /* we are inside a config space, in the subspace area */ - if(schema[i].type == KC_SPACE) { - if(KHM_FAILED(khcint_unload_schema_i(h, schema, i, &i))) - return KHM_ERROR_INVALID_PARAM; - } else if(schema[i].type == KC_ENDSPACE) { - end_found = 1; - if(end) - *end = i; - LeaveCriticalSection(&cs_conf_global); - khc_close_space(h); - EnterCriticalSection(&cs_conf_global); - } else { - return KHM_ERROR_INVALID_PARAM; - } - break; - - default: - /* unreachable */ - return KHM_ERROR_INVALID_PARAM; - } - i++; - } - - return KHM_ERROR_SUCCESS; -} - -/* obtains cs_conf_handle/cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_unload_schema(khm_handle conf, const kconf_schema * schema) -{ - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - - if(conf && !khc_is_handle(conf)) - return KHM_ERROR_INVALID_PARAM; - - if(KHM_FAILED(khcint_validate_schema(schema, 0, NULL))) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_conf_global); - rv = khcint_unload_schema_i(conf, schema, 0, NULL); - LeaveCriticalSection(&cs_conf_global); - - return rv; -} - -/* obtaincs cs_conf_handle/cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_enum_subspaces(khm_handle conf, - khm_handle prev, - khm_handle * next) -{ - kconf_conf_space * s; - kconf_conf_space * c; - kconf_conf_space * p; - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - - if(!khc_is_handle(conf) || next == NULL || - (prev != NULL && !khc_is_handle(prev))) - return KHM_ERROR_INVALID_PARAM; - - s = khc_space_from_handle(conf); - - if(prev == NULL) { - /* first off, we enumerate all the registry spaces regardless of - whether the handle is applicable for some registry space or not. - See notes for khc_begin_enum_subspaces() for reasons as to why - this is done (notes are in kconfig.h)*/ - - /* go through the user hive first */ - { - HKEY hk_conf; - - hk_conf = khcint_space_open_key(s, 0); - if(hk_conf) { - wchar_t name[KCONF_MAXCCH_NAME]; - khm_handle h; - int idx; - - idx = 0; - while(RegEnumKey(hk_conf, idx, - name, ARRAYLENGTH(name)) == ERROR_SUCCESS) { - wchar_t * tilde; - tilde = wcschr(name, L'~'); - if (tilde) - *tilde = 0; - if(KHM_SUCCEEDED(khc_open_space(conf, name, 0, &h))) - khc_close_space(h); - idx++; - } - } - } - - /* go through the machine hive next */ - { - HKEY hk_conf; - - hk_conf = khcint_space_open_key(s, KCONF_FLAG_MACHINE); - if(hk_conf) { - wchar_t name[KCONF_MAXCCH_NAME]; - khm_handle h; - int idx; - - idx = 0; - while(RegEnumKey(hk_conf, idx, - name, ARRAYLENGTH(name)) == ERROR_SUCCESS) { - wchar_t * tilde; - tilde = wcschr(name, L'~'); - if (tilde) - *tilde = 0; - - if(KHM_SUCCEEDED(khc_open_space(conf, name, - KCONF_FLAG_MACHINE, &h))) - khc_close_space(h); - idx++; - } - } - } - - /* don't need to go through schema, because that was already - done when the schema was loaded. */ - } - - /* at last we are now ready to return the results */ - EnterCriticalSection(&cs_conf_global); - if(prev == NULL) { - c = TFIRSTCHILD(s); - rv = KHM_ERROR_SUCCESS; - } else { - p = khc_space_from_handle(prev); - if(TPARENT(p) == s) - c = LNEXT(p); - else - c = NULL; - } - LeaveCriticalSection(&cs_conf_global); - - if(prev != NULL) - khc_close_space(prev); - - if(c) { - *next = khcint_handle_from_space(c, khc_handle_flags(conf)); - rv = KHM_ERROR_SUCCESS; - } else { - *next = NULL; - rv = KHM_ERROR_NOT_FOUND; - } - - return rv; -} - -/* obtains cs_conf_handle/cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_write_multi_string(khm_handle conf, const wchar_t * value, wchar_t * buf) -{ - size_t cb; - wchar_t vbuf[KCONF_MAXCCH_STRING]; - wchar_t *tb; - khm_int32 rv; - - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - if(!khc_is_handle(conf) || buf == NULL || value == NULL) - return KHM_ERROR_INVALID_PARAM; - - if(multi_string_to_csv(NULL, &cb, buf) != KHM_ERROR_TOO_LONG) - return KHM_ERROR_INVALID_PARAM; - - if (cb < sizeof(vbuf)) - tb = vbuf; - else - tb = PMALLOC(cb); - - assert(tb != NULL); - - multi_string_to_csv(tb, &cb, buf); - rv = khc_write_string(conf, value, tb); - - if (tb != vbuf) - PFREE(tb); - return rv; -} - -/* obtains cs_conf_handle/cs_conf_global */ -KHMEXP khm_int32 KHMAPI -khc_read_multi_string(khm_handle conf, const wchar_t * value, - wchar_t * buf, khm_size * bufsize) -{ - wchar_t vbuf[KCONF_MAXCCH_STRING]; - wchar_t * tb; - khm_size cbbuf; - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(!khc_is_config_running()) - return KHM_ERROR_NOT_READY; - - if(!bufsize) - return KHM_ERROR_INVALID_PARAM; - - rv = khc_read_string(conf, value, NULL, &cbbuf); - if(rv != KHM_ERROR_TOO_LONG) - return rv; - - if (cbbuf < sizeof(vbuf)) - tb = vbuf; - else - tb = PMALLOC(cbbuf); - - assert(tb != NULL); - - rv = khc_read_string(conf, value, tb, &cbbuf); - - if(KHM_FAILED(rv)) - goto _exit; - - rv = csv_to_multi_string(buf, bufsize, tb); - -_exit: - if (tb != vbuf) - PFREE(tb); - - return rv; -} diff --git a/src/windows/identity/kconfig/kconfig.h b/src/windows/identity/kconfig/kconfig.h deleted file mode 100644 index 25411eebd..000000000 --- a/src/windows/identity/kconfig/kconfig.h +++ /dev/null @@ -1,960 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KCONFIG_H -#define __KHIMAIRA_KCONFIG_H - -#include<khdefs.h> -#include<mstring.h> - -/*! \defgroup kconf NetIDMgr Configuration Provider */ -/*@{*/ - -/*! \brief Configuration schema descriptor record - - The schema descriptor is a convenient way to provide a default set - of configuration options for a part of an application. It - describes the configuration spaces and the values and subspaces - contained in each space. - - \see kconf_load_schema() -*/ -typedef struct tag_kconf_schema { - wchar_t * name; /*!< name of the object being described. - Optional for KC_ENDSPACE type object, - but required for everything else. - Names can be upto KCONF_MAXCCH_NAME - characters in length. */ - khm_int32 type; /*!< type of the object. Can be one of - KC_SPACE, KC_ENDSPACE, KC_INT32, - KC_INT64, KC_STRING or KC_BINARY */ - khm_ui_8 value; /*!< the value of the object. It is not - used for KC_SPACE and KC_ENDSPACE - typed objects. For a KC_STRING, this - contains a pointer to the string - value. The string should not be - longer than KCONF_MAXCCH_STRING - characters. KC_INT32 and KC_INT64 - objects store the value directly in - this field, while KC_BINARY objects do - not support defining a default value - here. */ - wchar_t * description;/*!< a friendly description of the value - or configuration space. */ -} kconf_schema; - -/*! \name Configuration data types - @{*/ -/*! \brief Not a known type */ -#define KC_NONE 0 - -/*! \brief When used as ::kconf_schema \a type, defines the start of a configuration space. - - There should be a subsequent KC_ENDSPACE record in the schema - which defines the end of this configuration space. - - \a name specifies the name of the configuration space. Optionally - use \a description to provide a description.*/ -#define KC_SPACE 1 - -/*! \brief Ends a configuration space started with KC_SPACE */ -#define KC_ENDSPACE 2 - -/*! \brief A 32 bit integer - - Specifies a configuration parameter named \a name which is of this - type. Use \a description to provide an optional description of - the value. - - \a value specifies a default value for this parameter in the lower - 32 bits. -*/ -#define KC_INT32 3 - -/*! \brief A 64 bit integer - - Specifies a configuration parameter named \a name which is of this - type. Use \a description to provide an optional description of - the value. - - \a value specifies a default value for this parameter. -*/ -#define KC_INT64 4 - -/*! \brief A unicode string - - Specifies a configuration parameter named \a name which is of this - type. Use \a description to provide an optional description of - the value. - - \a value specifies a default value for this parameter which should - be a pointer to a NULL terminated unicode string of no more than - ::KCONF_MAXCCH_STRING characters. -*/ -#define KC_STRING 5 - -/*! \brief An unparsed binary stream - - Specifies a configuration parameter named \a name which is of this - type. Use \a description to provide an optional description of - the value. - - Default values are not supported for binary streams. \a value is - ignored. -*/ -#define KC_BINARY 6 -/*@}*/ - -/*! \brief This is the root configuration space */ -#define KCONF_FLAG_ROOT 0x00000001 - -/*! \brief Indicates the configuration store which stores user-specific information */ -#define KCONF_FLAG_USER 0x00000002 - -/*! \brief Indicates the configuration store which stores machine-specific information */ -#define KCONF_FLAG_MACHINE 0x00000004 - -/*! \brief Indicates the configuration store which stores the schema */ -#define KCONF_FLAG_SCHEMA 0x00000008 - -/*! \brief Indicates that the last component of the given configuration path is to be considered to be a configuration value */ -#define KCONF_FLAG_TRAILINGVALUE 0x00000020 - -/*! \brief Only write values back there is a change - - Any write operations using the handle with check if the value - being written is different from the value being read from the - handle. It will only be written if the value is different. - - \note Note that the value being read from a handle takes schema and - shadowed configuration handles into consideration while the value - being written is only written to the topmost layer of - configuration that can be written to. - - \note Note also that this flag does not affect binary values. - */ -#define KCONF_FLAG_WRITEIFMOD 0x00000040 - -/*! \brief Use case-insensitive comparison for KCONF_FLAG_WRITEIFMOD - - When used in combination with \a KCONF_FLAG_WRITEIFMOD , the - string comparison used when determining whether the string read - from the configuration handle is the same as the string being - written will be case insensitive. If this flag is not set, the - comparison will be case sensitive. - */ -#define KCONF_FLAG_IFMODCI 0x00000080 - -/*! \brief Do not parse the configuration space name - - If set, disables the parsing of the configuration space for - subspaces. The space name is taken verbatim to be a configuration - space name. This can be used when there can be forward slashes or - backslahes in the name which are not escaped. - - By default, the configuration space name, - - \code - L"foo\\bar" - \endcode - - is taken to mean the configuration space \a bar which is a - subspace of \a foo. If ::KCONF_FLAG_NOPARSENAME is set, then this - is taken to mean configuration space \a foo\\bar. - */ -#define KCONF_FLAG_NOPARSENAME 0x00000040 - -/*! \brief Maximum number of allowed characters (including terminating NULL) in a name - - \note This is a hard limit in Windows, since we are mapping - configuration spaces to registry keys. -*/ -#define KCONF_MAXCCH_NAME 256 - -/*! \brief Maximum number of allowed bytes (including terminating NULL) in a name */ -#define KCONF_MAXCB_NAME (KCONF_MAXCCH_NAME * sizeof(wchar_t)) - -/*! \brief Maximum level of nesting for configuration spaces - */ -#define KCONF_MAX_DEPTH 16 - -/*! \brief Maximum number of allowed characters (including terminating NULL) in a configuration path */ -#define KCONF_MAXCCH_PATH (KCONF_MAXCCH_NAME * KCONF_MAX_DEPTH) - -/*! \brief Maximum number of allowed bytes (including terminating NULL) in a configuration path */ -#define KCONF_MAXCB_PATH (KCONF_MAXCCH_PATH * sizeof(wchar_t)) - -/*! \brief Maximum number of allowed characters (including terminating NULL) in a string */ -#define KCONF_MAXCCH_STRING KHM_MAXCCH_STRING - -/*! \brief Maximum number of allowed bytes (including terminating NULL) in a string */ -#define KCONF_MAXCB_STRING (KCONF_MAXCCH_STRING * sizeof(wchar_t)) - -/*! \brief Open a configuration space - - Opens the configuration space specified by \a cspace. By default, - the opened space includes user,machine and schema configuration - stores. However, you can specify a subset of these. - - If the configuration space does not exist and the \a flags specify - KHM_FLAG_CREATE, then the configuration space is created. The - stores that are affected by the create operation depend on \a - flags. If the \a flags only specifies ::KCONF_FLAG_MACHINE, then - the configuration space is created in the machine store. If \a - flags specifies any combination of stores including \a - ::KCONF_FLAG_USER, then the configuration space is created in the - user store. Note that ::KCONF_FLAG_SCHEMA is readonly. - - Once opened, use khc_close_space() to close the configuration - space. - - \param[in] parent The parent configuration space. The path - specified in \a cspace is relative to the parent. Set this to - NULL to indicate the root configuration space. - - \param[in] cspace The configuration path. This can be up to - ::KCONF_MAXCCH_PATH characters in length. Use backslashes to - specify hiearchy. Set this to NULL to reopen the parent - configuration space. - - \param[in] flags Flags. This can be a combination of KCONF_FLAG_* - constants and KHM_FLAG_CREATE. If none of ::KCONF_FLAG_USER, - ::KCONF_FLAG_MACHINE or ::KCONF_FLAG_SCHEMA is specified, then - it defaults to all three. - - \param[out] result Pointer to a handle which receives the handle - to the opened configuration space if the call succeeds. - - \note You can re-open a configuration space with different flags - such as ::KCONF_FLAG_MACHINE by specifying NULL for \a cspace - and settings \a flags to the required flags. - -*/ -KHMEXP khm_int32 KHMAPI -khc_open_space(khm_handle parent, const wchar_t * cspace, khm_int32 flags, - khm_handle * result); - -/*! \brief Set the shadow space for a configuration handle - - The handle specified by \a lower becomes a shadow for the handle - specified by \a upper. Any configuration value that is queried in - \a upper that does not exist in \a upper will be queried in \a - lower. - - If \a upper already had a shadow handle, that handle will be - replaced by \a lower. The handle \a lower still needs to be - closed by a call to khc_close_space(). However, closing \a lower - will not affect \a upper which will still treat the configuration - space pointed to by \a lower to be it's shadow. - - Shadows are specific to handles and not configuration spaces. - Shadowing a configuration space using one handle does not affect - any other handles which may be obtained for the same configuration - space. - - Specify NULL for \a lower to remove any prior shadow. - */ -KHMEXP khm_int32 KHMAPI -khc_shadow_space(khm_handle upper, khm_handle lower); - -/*! \brief Close a handle opened with khc_open_space() -*/ -KHMEXP khm_int32 KHMAPI -khc_close_space(khm_handle conf); - -/*! \brief Read a string value from a configuration space - - The \a value_name parameter specifies the value to read from the - configuration space. This can be either a value name or a value - path consisting of a series nested configuration space names - followed by the value name all separated by backslashes or forward - slashes. - - For example: If \a conf is a handle to the configuration space \c - 'A/B/C', then the value name \c 'D/E/v' refers to the value named - \c 'v' in the configuration space \c 'A/B/C/D/E'. - - The specific configuration store that is used to access the value - depends on the flags that were specified in the call to - khc_open_space(). The precedence of configuration stores are as - follows: - - - If KCONF_FLAG_USER was specified, then the user configuration - space. - - - Otherwise, if KCONF_FLAG_MACHINE was specified, then the machine - configuration space. - - - Otherwise, if KCONF_FLAG_SCHEMA was specified, the the schema - store. - - Note that not specifying any of the configuration store specifiers - in the call to khc_open_space() is equivalent to specifying all - three. - - If the value is not found in the configuration space and any - shadowed configuration spaces, the function returns \a - KHM_ERROR_NOT_FOUND. In this case, the buffer is left unmodified. - - \param[in] buf Buffer to copy the string to. Specify NULL to just - retrieve the number of required bytes. - - \param[in,out] bufsize On entry, specifies the number of bytes of - space available at the location specified by \a buf. On exit - specifies the number of bytes actually copied or the size of - the required buffer if \a buf is NULL or insufficient. - - \retval KHM_ERROR_NOT_READY The configuration provider has not started - \retval KHM_ERROR_INVALID_PARAM One or more of the supplied parameters are not valid - \retval KHM_ERROR_TYPE_MISMATCH The specified value is not a string - \retval KHM_ERROR_TOO_LONG \a buf was NULL or the size of the buffer was insufficient. The required size is in bufsize. - \retval KHM_ERROR_SUCCESS Success. The number of bytes copied is in bufsize. - \retval KHM_ERROR_NOT_FOUND The value was not found. - - \see khc_open_space() -*/ -KHMEXP khm_int32 KHMAPI -khc_read_string(khm_handle conf, - const wchar_t * value_name, - wchar_t * buf, - khm_size * bufsize); - -/*! \brief Read a multi-string value from a configuration space - - The \a value_name parameter specifies the value to read from the - configuration space. This can be either a value name or a value - path consisting of a series nested configuration space names - followed by the value name all separated by backslashes or forward - slashes. - - For example: If \a conf is a handle to the configuration space \c - 'A/B/C', then the value name \c 'D/E/v' refers to the value named - \c 'v' in the configuration space \c 'A/B/C/D/E'. - - The specific configuration store that is used to access the value - depends on the flags that were specified in the call to - khc_open_space(). The precedence of configuration stores are as - follows: - - - If KCONF_FLAG_USER was specified, then the user configuration - space. - - - Otherwise, if KCONF_FLAG_MACHINE was specified, then the machine - configuration space. - - - Otherwise, if KCONF_FLAG_SCHEMA was specified, the the schema - store. - - A multi-string is a pseudo data type. The value in the - configuration store should contain a CSV string. Each comma - separated value in the CSV string is considered to be a separate - value. Empty values are not allowed. The buffer pointed to by \a - buf will receive these values in the form of a series of NULL - terminated strings terminated by an empty string (or equivalently, - the last string will be terminated by a double NULL). - - Note that not specifying any of the configuration store specifiers - in the call to khc_open_space() is equivalent to specifying all - three. - - If the value is not found in the configuration space and any - shadowed configuration spaces, the function returns \a - KHM_ERROR_NOT_FOUND. In this case, the buffer is left unmodified. - - \param[in] buf Buffer to copy the multi-string to. Specify NULL - to just retrieve the number of required bytes. - - \param[in,out] bufsize On entry, specifies the number of bytes of - space available at the location specified by \a buf. On exit - specifies the number of bytes actually copied or the size of - the required buffer if \a buf is NULL or insufficient. - - \retval KHM_ERROR_NOT_READY The configuration provider has not started - \retval KHM_ERROR_INVALID_PARAM One or more of the supplied parameters are not valid - \retval KHM_ERROR_TYPE_MISMATCH The specified value is not a string - \retval KHM_ERROR_TOO_LONG \a buf was NULL or the size of the buffer was insufficient. The required size is in bufsize. - \retval KHM_ERROR_SUCCESS Success. The number of bytes copied is in bufsize. - \retval KHM_ERROR_NOT_FOUND The value was not found. - - \see khc_open_space() -*/ -KHMEXP khm_int32 KHMAPI -khc_read_multi_string(khm_handle conf, - const wchar_t * value_name, - wchar_t * buf, - khm_size * bufsize); - -/*! \brief Read a 32 bit integer value from a configuration space - - The \a value_name parameter specifies the value to read from the - configuration space. This can be either a value name or a value - path consisting of a series nested configuration space names - followed by the value name all separated by backslashes or forward - slashes. - - For example: If \a conf is a handle to the configuration space \c - 'A/B/C', then the value name \c 'D/E/v' refers to the value named - \c 'v' in the configuration space \c 'A/B/C/D/E'. - - The specific configuration store that is used to access the value - depends on the flags that were specified in the call to - khc_open_space(). The precedence of configuration stores are as - follows: - - - If KCONF_FLAG_USER was specified, then the user configuration - space. - - - Otherwise, if KCONF_FLAG_MACHINE was specified, then the machine - configuration space. - - - Otherwise, if KCONF_FLAG_SCHEMA was specified, the the schema - store. - - Note that not specifying any of the configuration store specifiers - in the call to khc_open_space() is equivalent to specifying all - three. - - If the value is not found in the configuration space and any - shadowed configuration spaces, the function returns \a - KHM_ERROR_NOT_FOUND. In this case, the buffer is left unmodified. - - \param[in] conf Handle to a configuration space - \param[in] value The value to query - \param[out] buf The buffer to receive the value - - \retval KHM_ERROR_NOT_READY The configuration provider has not started. - \retval KHM_ERROR_SUCCESS Success. The value that was read was placed in \a buf - \retval KHM_ERROR_NOT_FOUND The specified value was not found - \retval KHM_ERROR_INVALID_PARAM One or more parameters were invalid - \retval KHM_ERROR_TYPE_MISMATCH The specified value was found but was not of the correct type. - \see khc_open_space() -*/ -KHMEXP khm_int32 KHMAPI -khc_read_int32(khm_handle conf, - const wchar_t * value_name, - khm_int32 * buf); - -/*! \brief Read a 64 bit integer value from a configuration space - - The \a value_name parameter specifies the value to read from the - configuration space. This can be either a value name or a value - path consisting of a series nested configuration space names - followed by the value name all separated by backslashes or forward - slashes. - - For example: If \a conf is a handle to the configuration space \c - 'A/B/C', then the value name \c 'D/E/v' refers to the value named - \c 'v' in the configuration space \c 'A/B/C/D/E'. - - The specific configuration store that is used to access the value - depends on the flags that were specified in the call to - khc_open_space(). The precedence of configuration stores are as - follows: - - - If KCONF_FLAG_USER was specified, then the user configuration - space. - - - Otherwise, if KCONF_FLAG_MACHINE was specified, then the machine - configuration space. - - - Otherwise, if KCONF_FLAG_SCHEMA was specified, the the schema - store. - - Note that not specifying any of the configuration store specifiers - in the call to khc_open_space() is equivalent to specifying all - three. - - If the value is not found in the configuration space and any - shadowed configuration spaces, the function returns \a - KHM_ERROR_NOT_FOUND. In this case, the buffer is left unmodified. - - \param[in] conf Handle to a configuration space - \param[in] value_name The value to query - \param[out] buf The buffer to receive the value - - \retval KHM_ERROR_NOT_READY The configuration provider has not started - \retval KHM_ERROR_SUCCESS Success. The value that was read was placed in \a buf - \retval KHM_ERROR_NOT_FOUND The specified value was not found - \retval KHM_ERROR_INVALID_PARAM One or more parameters were invalid - \retval KHM_ERROR_TYPE_MISMATCH The specified value was found but was not the correct data type. - - \see khc_open_space() -*/ -KHMEXP khm_int32 KHMAPI -khc_read_int64(khm_handle conf, - const wchar_t * value_name, - khm_int64 * buf); - -/*! \brief Read a binary value from a configuration space - - The \a value_name parameter specifies the value to read from the - configuration space. This can be either a value name or a value - path consisting of a series nested configuration space names - followed by the value name all separated by backslashes or forward - slashes. - - For example: If \a conf is a handle to the configuration space \c - 'A/B/C', then the value name \c 'D/E/v' refers to the value named - \c 'v' in the configuration space \c 'A/B/C/D/E'. - - The specific configuration store that is used to access the value - depends on the flags that were specified in the call to - khc_open_space(). The precedence of configuration stores are as - follows: - - - If KCONF_FLAG_USER was specified, then the user configuration - space. - - - Otherwise, if KCONF_FLAG_MACHINE was specified, then the machine - configuration space. - - Note that not specifying any of the configuration store specifiers - in the call to khc_open_space() is equivalent to specifying all - three. Also note that the schema store (KCONF_FLAG_SCHEMA) does - not support binary values. - - If the value is not found in the configuration space and any - shadowed configuration spaces, the function returns \a - KHM_ERROR_NOT_FOUND. In this case, the buffer is left unmodified. - - \param[in] buf Buffer to copy the string to. Specify NULL to just - retrieve the number of required bytes. - - \param[in,out] bufsize On entry, specifies the number of bytes of - space available at the location specified by \a buf. On exit - specifies the number of bytes actually copied or the size of - the required buffer if \a buf is NULL or insufficient. - - \retval KHM_ERROR_SUCCESS Success. The data was copied to \a buf. The number of bytes copied is stored in \a bufsize - \retval KHM_ERROR_NOT_FOUND The specified value was not found - \retval KHM_ERROR_INVALID_PARAM One or more parameters were invalid. - - \see khc_open_space() -*/ -KHMEXP khm_int32 KHMAPI -khc_read_binary(khm_handle conf, - const wchar_t * value_name, - void * buf, - khm_size * bufsize); - -/*! \brief Write a string value to a configuration space - - The \a value_name parameter specifies the value to write to the - configuration space. This can be either a value name or a value - path consisting of a series nested configuration space names - followed by the value name all separated by backslashes or forward - slashes. - - For example: If \a conf is a handle to the configuration space \c - 'A/B/C', then the value name \c 'D/E/v' refers to the value named - \c 'v' in the configuration space \c 'A/B/C/D/E'. - - The specific configuration store that is used to write the value - depends on the flags that were specified in the call to - khc_open_space(). The precedence of configuration stores are as - follows: - - - If \a KCONF_FLAG_USER was specified, then the user configuration - space. - - - Otherwise, if \a KCONF_FLAG_MACHINE was specified, then the - machine configuration space. - - Note that not specifying any of the configuration store specifiers - in the call to khc_open_space() is equivalent to specifying all - three. Also note that the schema store (KCONF_FLAG_SCHEMA) is - readonly. - - If the \a KCONF_FLAG_WRITEIFMOD flag is specified in the call to - khc_open_space() for obtaining the configuration handle, the - specified string will only be written if it is different from the - value being read from the handle. - - If the \a KCONF_FLAG_IFMODCI flag is specified along with the \a - KCONF_FLAG_WRITEIFMOD flag, then the string comparison used will - be case insensitive. - - \param[in] conf Handle to a configuration space - \param[in] value_name Name of value to write - \param[in] buf A NULL terminated unicode string not exceeding KCONF_MAXCCH_STRING in characters including terminating NULL - - \see khc_open_space() -*/ -KHMEXP khm_int32 KHMAPI -khc_write_string(khm_handle conf, - const wchar_t * value_name, - wchar_t * buf); - -/*! \brief Write a multi-string value to a configuration space - - The \a value_name parameter specifies the value to write to the - configuration space. This can be either a value name or a value - path consisting of a series nested configuration space names - followed by the value name all separated by backslashes or forward - slashes. - - For example: If \a conf is a handle to the configuration space \c - 'A/B/C', then the value name \c 'D/E/v' refers to the value named - \c 'v' in the configuration space \c 'A/B/C/D/E'. - - The specific configuration store that is used to write the value - depends on the flags that were specified in the call to - khc_open_space(). The precedence of configuration stores are as - follows: - - A multi-string is a pseudo data type. The buffer pointed to by \a - buf should contain a sequence of NULL terminated strings - terminated by an empty string (or equivalently, the last string - should terminate with a double NULL). This will be stored in the - value as a CSV string. - - - If KCONF_FLAG_USER was specified, then the user configuration - space. - - - Otherwise, if KCONF_FLAG_MACHINE was specified, then the machine - configuration space. - - Note that not specifying any of the configuration store specifiers - in the call to khc_open_space() is equivalent to specifying all - three. Also note that the schema store (KCONF_FLAG_SCHEMA) is - readonly. - - If the \a KCONF_FLAG_WRITEIFMOD flag is specified in the call to - khc_open_space() for obtaining the configuration handle, the - specified string will only be written if it is different from the - value being read from the handle. - - If the \a KCONF_FLAG_IFMODCI flag is specified along with the \a - KCONF_FLAG_WRITEIFMOD flag, then the string comparison used will - be case insensitive. - - \see khc_open_space() -*/ -KHMEXP khm_int32 KHMAPI -khc_write_multi_string(khm_handle conf, - const wchar_t * value_name, - wchar_t * buf); - -/*! \brief Write a 32 bit integer value to a configuration space - - The \a value_name parameter specifies the value to write to the - configuration space. This can be either a value name or a value - path consisting of a series nested configuration space names - followed by the value name all separated by backslashes or forward - slashes. - - For example: If \a conf is a handle to the configuration space \c - 'A/B/C', then the value name \c 'D/E/v' refers to the value named - \c 'v' in the configuration space \c 'A/B/C/D/E'. - - The specific configuration store that is used to write the value - depends on the flags that were specified in the call to - khc_open_space(). The precedence of configuration stores are as - follows: - - - If KCONF_FLAG_USER was specified, then the user configuration - space. - - - Otherwise, if KCONF_FLAG_MACHINE was specified, then the machine - configuration space. - - Note that not specifying any of the configuration store specifiers - in the call to khc_open_space() is equivalent to specifying all - three. Also note that the schema store (KCONF_FLAG_SCHEMA) is - readonly. - - If the \a KCONF_FLAG_WRITEIFMOD flag is specified in the call to - khc_open_space() for obtaining the configuration handle, the - specified string will only be written if it is different from the - value being read from the handle. - - \see khc_open_space() -*/ -KHMEXP khm_int32 KHMAPI -khc_write_int32(khm_handle conf, - const wchar_t * value_name, - khm_int32 buf); - -/*! \brief Write a 64 bit integer value to a configuration space - - The \a value_name parameter specifies the value to write to the - configuration space. This can be either a value name or a value - path consisting of a series nested configuration space names - followed by the value name all separated by backslashes or forward - slashes. - - For example: If \a conf is a handle to the configuration space \c - 'A/B/C', then the value name \c 'D/E/v' refers to the value named - \c 'v' in the configuration space \c 'A/B/C/D/E'. - - The specific configuration store that is used to write the value - depends on the flags that were specified in the call to - khc_open_space(). The precedence of configuration stores are as - follows: - - - If KCONF_FLAG_USER was specified, then the user configuration - space. - - - Otherwise, if KCONF_FLAG_MACHINE was specified, then the machine - configuration space. - - Note that not specifying any of the configuration store specifiers - in the call to khc_open_space() is equivalent to specifying all - three. Also note that the schema store (KCONF_FLAG_SCHEMA) is - readonly. - - If the \a KCONF_FLAG_WRITEIFMOD flag is specified in the call to - khc_open_space() for obtaining the configuration handle, the - specified string will only be written if it is different from the - value being read from the handle. - - \see khc_open_space() -*/ -KHMEXP khm_int32 KHMAPI -khc_write_int64(khm_handle conf, - const wchar_t * value_name, - khm_int64 buf); - -/*! \brief Write a binary value to a configuration space - - The \a value_name parameter specifies the value to write to the - configuration space. This can be either a value name or a value - path consisting of a series nested configuration space names - followed by the value name all separated by backslashes or forward - slashes. - - For example: If \a conf is a handle to the configuration space \c - 'A/B/C', then the value name \c 'D/E/v' refers to the value named - \c 'v' in the configuration space \c 'A/B/C/D/E'. - - The specific configuration store that is used to write the value - depends on the flags that were specified in the call to - khc_open_space(). The precedence of configuration stores are as - follows: - - - If KCONF_FLAG_USER was specified, then the user configuration - space. - - - Otherwise, if KCONF_FLAG_MACHINE was specified, then the machine - configuration space. - - Note that not specifying any of the configuration store specifiers - in the call to khc_open_space() is equivalent to specifying all - three. Also note that the schema store (KCONF_FLAG_SCHEMA) is - readonly. - - \see khc_open_space() -*/ -KHMEXP khm_int32 KHMAPI -khc_write_binary(khm_handle conf, - const wchar_t * value_name, - void * buf, - khm_size bufsize); - -/*! \brief Get the type of a value in a configuration space - - \return The return value is the type of the specified value, or - KC_NONE if the value does not exist. - */ -KHMEXP khm_int32 KHMAPI -khc_get_type(khm_handle conf, const wchar_t * value_name); - -/*! \brief Check which configuration stores contain a specific value. - - Each value in a configuration space can be contained in zero or - more configuration stores. Use this function to determine which - configuration stores contain the specific value. - - The returned bitmask always indicates a subset of the - configuration stores that were specified when opening the - configuration space corresponding to \a conf. - - If the specified handle is shadowed (see khc_shadow_space()) and - the value is not found in any of the visible stores for the - topmost handle, each of the shadowed handles will be tried in turn - until the value is found. The return value will correspond to the - handle where the value is first found. - - \return A combination of ::KCONF_FLAG_MACHINE, ::KCONF_FLAG_USER - and ::KCONF_FLAG_SCHEMA indicating which stores contain the - value. - */ -KHMEXP khm_int32 KHMAPI -khc_value_exists(khm_handle conf, const wchar_t * value); - -/*! \brief Remove a value from a configuration space - - Removes a value from one or more configuration stores. - - A value can exist in multiple configuration stores. Only the - values that are stored in writable stores can be removed. When - the function searches for values to remove, it will only look in - configuration stores that are specified in the handle. In - addition, the configuration stores affected can be further - narrowed by specifying them in the \a flags parameter. If \a - flags is zero, then all the stores visible to the handle are - searched. If \a flags specifies ::KCONF_FLAG_USER or - ::KCONF_FLAG_MACHINE or both, then only the specified stores are - searched, provided that the stores are visible to the handle. - - This function only operates on the topmost configuration space - visible to the handle. If the configuration handle is shadowed, - the shadowed configuration spaces are unaffected by the removal. - - \param[in] conf Handle to configuration space to remove value from - - \param[in] value_name Value to remove - - \param[in] flags Specifies which configuration stores will be - affected by the removal. See above. - - \retval KHM_ERROR_SUCCESS The value was removed from all the - specified configuration stores. - - \retval KHM_ERROR_NOT_FOUND The value was not found. - - \retval KHM_ERROR_UNKNOWN An unknown error occurred while trying - to remove the value. - - \retval KHM_ERROR_PARTIAL The value was successfully removed from - one or more stores, but the operation failed on one or more - other stores. - */ -KHMEXP khm_int32 KHMAPI -khc_remove_value(khm_handle conf, const wchar_t * value_name, khm_int32 flags); - -/*! \brief Get the name of a configuration space - - \param[in] conf Handle to a configuration space - - \param[out] buf The buffer to receive the name. Set to NULL if - only the size of the buffer is required. - - \param[in,out] bufsize On entry, holds the size of the buffer - pointed to by \a buf. On exit, holds the number of bytes - copied into the buffer including the NULL terminator. - */ -KHMEXP khm_int32 KHMAPI -khc_get_config_space_name(khm_handle conf, - wchar_t * buf, - khm_size * bufsize); - -/*! \brief Get a handle to the parent space - - \param[in] conf Handle to a configuration space - - \param[out] parent Handle to the parent configuration space if the - call succeeds. Receives NULL otherwise. The returned handle - must be closed using khc_close_space() - */ -KHMEXP khm_int32 KHMAPI -khc_get_config_space_parent(khm_handle conf, - khm_handle * parent); - -/*! \brief Load a configuration schema into the specified configuration space - - \param[in] conf Handle to a configuration space or NULL to use the - root configuration space. - - \param[in] schema The schema to load. The schema is assumed to be - well formed. - - \see khc_unload_schema() - */ -KHMEXP khm_int32 KHMAPI -khc_load_schema(khm_handle conf, - const kconf_schema * schema); - -/*! \brief Unload a schema from a configuration space - */ -KHMEXP khm_int32 KHMAPI -khc_unload_schema(khm_handle conf, - const kconf_schema * schema); - -/*! \brief Enumerate the subspaces of a configuration space - - Prepares a configuration space for enumeration and returns the - child spaces in no particular order. - - \param[in] conf The configuration space to enumerate child spaces - - \param[in] prev The previous configuration space returned by - khc_enum_subspaces() or NULL if this is the first call. If - this is not NULL, then the handle passed in \a prev will be - freed. - - \param[out] next If \a prev was NULL, receives the first sub space - found in \a conf. You must \b either call - khc_enum_subspaces() again with the returned handle or call - khc_close_space() to free the returned handle if no more - subspaces are required. \a next can point to the same handle - specified in \a prev. - - \retval KHM_ERROR_SUCCESS The call succeeded. There is a valid - handle to a configuration space in \a first_subspace. - - \retval KHM_ERROR_INVALID_PARAM Either \a conf or \a prev was not a - valid configuration space handle or \a first_subspace is NULL. - Note that \a prev can be NULL. - - \retval KHM_ERROR_NOT_FOUND There were no subspaces in the - configuration space pointed to by \a conf. - - \note The configuration spaces that are enumerated directly belong - to the configuration space given by \a conf. This function - does not enumerate subspaces of shadowed configuration spaces - (see khc_shadow_space()). Even if \a conf was obtained on a - restricted domain (i.e. you specified one or more - configuration stores when you openend the handle and didn't - include all the configuration stores. See khc_open_space()), - the subspaces that are returned are the union of all - configuration spaces in all the configuration stores. This is - not a bug. This is a feature. In NetIDMgr, a configuartion - space exists if some configuration store defines it (or it was - created with a call to khc_open_space() even if no - configuration store defines it yet). This is the tradeoff you - make when using a layered configuration system. - - However, the returned handle has the same domain restrictions - as \a conf. - */ -KHMEXP khm_int32 KHMAPI -khc_enum_subspaces(khm_handle conf, - khm_handle prev, - khm_handle * next); - -/*! \brief Remove a configuration space - - The configuration space will be marked for removal. Once all the - handles for the space have been released, it will be deleted. The - configuration stores that will be affected are the write enabled - configuration stores for the handle. - */ -KHMEXP khm_int32 KHMAPI -khc_remove_space(khm_handle conf); -/*@}*/ - -#endif diff --git a/src/windows/identity/kconfig/kconfiginternal.h b/src/windows/identity/kconfig/kconfiginternal.h deleted file mode 100644 index cd65877b3..000000000 --- a/src/windows/identity/kconfig/kconfiginternal.h +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KCONFIGINTERNAL_H -#define __KHIMAIRA_KCONFIGINTERNAL_H - -#define _NIMLIB_ - -#include<windows.h> -#include<kconfig.h> -#include<khlist.h> -#include<kherror.h> -#include<utils.h> -#include<strsafe.h> - -/* TODO: Implement configuration provider interfaces - -typedef struct kconf_provider_t { - -} kconf_provider; -*/ - -typedef struct kconf_conf_space_t { - wchar_t * name; - - /* kconf_provider * provider; */ - - /* the regpath is the cumulative path starting from a hive root */ - wchar_t * regpath; - HKEY regkey_user; - khm_int32 regkey_user_flags; - HKEY regkey_machine; - khm_int32 regkey_machine_flags; - - khm_int32 refcount; - khm_int32 flags; - - const kconf_schema * schema; - khm_int32 nSchema; - - TDCL(struct kconf_conf_space_t); -} kconf_conf_space; - -#define KCONF_SPACE_FLAG_DELETE_U 0x00000040 -#define KCONF_SPACE_FLAG_DELETE_M 0x00000080 -#define KCONF_SPACE_FLAG_DELETED 0x00000100 - -typedef struct kconf_conf_handle_t { - khm_int32 magic; - khm_int32 flags; - kconf_conf_space * space; - - struct kconf_conf_handle_t * lower; - - LDCL(struct kconf_conf_handle_t); -} kconf_handle; - -#define KCONF_HANDLE_MAGIC 0x38eb49d2 -#define khc_is_handle(h) ((h) && ((kconf_handle *)h)->magic == KCONF_HANDLE_MAGIC) -#define khc_shadow(h) (((kconf_handle *)h)->lower) -#define khc_is_shadowed(h) (khc_is_handle(h) && khc_shadow(h) != NULL) - -extern kconf_conf_space * conf_root; -extern kconf_handle * conf_handles; -extern kconf_handle * conf_free_handles; -extern CRITICAL_SECTION cs_conf_global; -extern LONG conf_init; -extern LONG conf_status; - -#define khc_is_config_running() (conf_init && conf_status) - -#define CONFIG_REGPATHW L"Software\\MIT\\NetIDMgr" - -void init_kconf(void); -void exit_kconf(void); - -/* handle operations */ -#define khc_space_from_handle(h) (((kconf_handle *) h)->space) -#define khc_is_schema_handle(h) (((kconf_handle *) h)->flags & KCONF_FLAG_SCHEMA) -#define khc_is_user_handle(h) (((kconf_handle *) h)->flags & KCONF_FLAG_USER) -#define khc_is_machine_handle(h) (((kconf_handle *) h)->flags & KCONF_FLAG_MACHINE) -#define khc_handle_flags(h) (((kconf_handle *) h)->flags) - -kconf_handle * -khcint_handle_from_space(kconf_conf_space * s, khm_int32 flags); - -void -khcint_handle_free(kconf_handle * h); - -kconf_conf_space * -khcint_create_empty_space(void); - -void -khcint_free_space(kconf_conf_space * r); - -void -khcint_space_hold(kconf_conf_space * s); - -void -khcint_space_release(kconf_conf_space * s); - -HKEY -khcint_space_open_key(kconf_conf_space * s, khm_int32 flags); - -khm_int32 -khcint_remove_space(kconf_conf_space * c, khm_int32 flags); - -#endif diff --git a/src/windows/identity/kconfig/kconfigmain.c b/src/windows/identity/kconfig/kconfigmain.c deleted file mode 100644 index bcf14625e..000000000 --- a/src/windows/identity/kconfig/kconfigmain.c +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<kconfiginternal.h> - -void -kconfig_process_attach(void) { - init_kconf(); -} - -void -kconfig_process_detach(void) { - exit_kconf(); -} diff --git a/src/windows/identity/kconfig/registry.c b/src/windows/identity/kconfig/registry.c deleted file mode 100644 index 3a3f1cd68..000000000 --- a/src/windows/identity/kconfig/registry.c +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<kconfiginternal.h> diff --git a/src/windows/identity/kconfig/test/utiltest.c b/src/windows/identity/kconfig/test/utiltest.c deleted file mode 100644 index 4131d07cf..000000000 --- a/src/windows/identity/kconfig/test/utiltest.c +++ /dev/null @@ -1,207 +0,0 @@ -#include<stdio.h> -#include<kconfig.h> -#include<strsafe.h> - -struct string_pair { - wchar_t * ms; - wchar_t * csv; -}; - -struct string_pair strings[] = { - {L"foo\0bar\0baz,quux\0ab\"cd\0", L"foo,bar,\"baz,quux\",\"ab\"\"cd\""}, - {L"a\0b\0c\0d\0e\0", L"a,b,c,d,e"}, - {L"1\0", L"1"}, - {L"\0", L""}, - {L"b\0a\0", L"b,a"}, - {L"c\0a\0b\0", L"c,a,b"}, - {L"c\0a\0B\0", L"c,a,B"}, - {L"sdf\0Bar\0Foo\0BBB\0", L"sdf,Bar,Foo,BBB"} -}; - -int n_strings = ARRAYLENGTH(strings); - -void print_ms(wchar_t * ms) { - wchar_t * s; - size_t cch; - - s = ms; - while(*s) { - printf("%S\\0", s); - StringCchLength(s, 512, &cch); - s += cch + 1; - } -} - -int ms_to_csv_test(void) { - wchar_t wbuf[512]; - int i; - khm_int32 code = 0; - size_t cbbuf; - size_t cbr; - size_t cbnull; - - printf("khc_multi_string_to_csv() test:\n"); - - for(i=0; i<n_strings; i++) { - cbbuf = sizeof(wbuf); - printf("Multi string:["); - print_ms(strings[i].ms); - printf("]->"); - code = khc_multi_string_to_csv(NULL, &cbnull, strings[i].ms); - code = khc_multi_string_to_csv(wbuf, &cbbuf, strings[i].ms); - if(code) { - printf(" returned %d\n", code); - return code; - } - printf("CSV[%S]", wbuf); - if(wcscmp(wbuf, strings[i].csv)) { - printf(" MISMATCH!"); - return 1; - } - - StringCbLength(wbuf, sizeof(wbuf), &cbr); - cbr+= sizeof(wchar_t); - - if(cbr != cbbuf) { - printf(" Length mismatch"); - return 1; - } - - if(cbnull != cbr) { - printf(" NULL length mismatch"); - return 1; - } - - printf("\n"); - } - - return code; -} - -int csv_to_ms_test(void) { - wchar_t wbuf[512]; - int i; - khm_int32 code = 0; - size_t cbbuf; - size_t cbr; - size_t cbnull; - - printf("khc_csv_to_multi_string() test:\n"); - - for(i=0; i<n_strings; i++) { - cbbuf = sizeof(wbuf); - printf("CSV:[%S]->", strings[i].csv); - code = khc_csv_to_multi_string(NULL, &cbnull, strings[i].csv); - code = khc_csv_to_multi_string(wbuf, &cbbuf, strings[i].csv); - if(code) { - printf(" returned %d\n", code); - return code; - } - printf("MS["); - print_ms(wbuf); - printf("]"); - - if(cbnull != cbbuf) { - printf(" NULL length mismatch"); - return 1; - } - - printf("\n"); - - printf(" Byte length:%d\n", cbbuf); - } - - return code; -} - -int ms_append_test(void) -{ - wchar_t wbuf[512]; - size_t cbbuf; - khm_int32 code; - int i; - - printf("khc_multi_string_append() test:\n"); - - for(i=0; i<n_strings; i++) { - cbbuf = sizeof(wbuf); - khc_csv_to_multi_string(wbuf, &cbbuf, strings[i].csv); - - printf("MS["); - print_ms(wbuf); - printf("] + [foo]=["); - - cbbuf = sizeof(wbuf); - code = khc_multi_string_append(wbuf, &cbbuf, L"foo"); - - if(code) { - printf(" returned %d\n", code); - return code; - } - - print_ms(wbuf); - printf("]\n"); - - printf(" byte length: %d\n", cbbuf); - } - return code; -} - -int ms_delete_test(void) -{ - int code = 0; - wchar_t wbuf[512]; - int i; - size_t cbs; - - printf("khc_multi_string_delete() test:\n"); - for(i=0; i<n_strings; i++) { - cbs = sizeof(wbuf); - khc_csv_to_multi_string(wbuf, &cbs, strings[i].csv); - - printf("MS["); - print_ms(wbuf); - printf("] - [b]=["); - - printf("cs:"); - code = khc_multi_string_delete(wbuf, L"b", KHC_CASE_SENSITIVE); - if(code) { - printf("ci:"); - code = khc_multi_string_delete(wbuf, L"b", 0); - } - if(code) { - printf("pcs:"); - code = khc_multi_string_delete(wbuf, L"b", KHC_CASE_SENSITIVE | KHC_PREFIX); - } - if(code) { - printf("pci:"); - code = khc_multi_string_delete(wbuf, L"b", KHC_PREFIX); - } - - if(!code) - print_ms(wbuf); - else - printf(" returned %d\n", code); - - printf("]\n"); - } - - return code; -} - -int main(int argc, char ** argv) { - - if(ms_to_csv_test()) - return 1; - - if(csv_to_ms_test()) - return 1; - - if(ms_append_test()) - return 1; - - if(ms_delete_test()) - return 1; - - return 0; -} diff --git a/src/windows/identity/kcreddb/Makefile b/src/windows/identity/kcreddb/Makefile deleted file mode 100644 index abf5efa0a..000000000 --- a/src/windows/identity/kcreddb/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -# -# 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 -# (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. - - -MODULE=kcreddb -!include <../config/Makefile.w32> - -INCFILES= \ - $(INCDIR)\kcreddb.h - -OBJFILES= \ - $(OBJ)\buf.obj \ - $(OBJ)\attrib.obj \ - $(OBJ)\credential.obj \ - $(OBJ)\credset.obj \ - $(OBJ)\credtype.obj \ - $(OBJ)\identity.obj \ - $(OBJ)\init.obj \ - $(OBJ)\kcreddbmain.obj \ - $(OBJ)\type.obj \ - $(OBJ)\kcdbconfig.obj - -$(OBJ)\kcdbconfig.c: kcdbconfig.csv $(CONFDIR)\csvschema.cfg - $(CCSV) $** $@ - -$(OBJ)\kcredres.res: lang\en_us\kcredres.rc - $(RC2RES) - -all: mkdirs $(INCFILES) $(OBJ)\kcredres.res $(OBJFILES) - -clean:: - if exist ..\obj $(RM) $(INCFILES) diff --git a/src/windows/identity/kcreddb/attrib.c b/src/windows/identity/kcreddb/attrib.c deleted file mode 100644 index f4291778c..000000000 --- a/src/windows/identity/kcreddb/attrib.c +++ /dev/null @@ -1,878 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<kcreddbinternal.h> -#include<assert.h> - -CRITICAL_SECTION cs_attrib; -hashtable * kcdb_attrib_namemap = NULL; -kcdb_attrib_i ** kcdb_attrib_tbl = NULL; -kcdb_attrib_i ** kcdb_property_tbl = NULL; -kcdb_attrib_i * kcdb_attribs = NULL; - -void -kcdb_attrib_add_ref_func(const void * key, void * va) -{ - kcdb_attrib_hold((kcdb_attrib_i *) va); -} - -void -kcdb_attrib_del_ref_func(const void * key, void * va) -{ - kcdb_attrib_release((kcdb_attrib_i *) va); -} - -void -kcdb_attrib_msg_completion(kmq_message * m) -{ - if(m && m->vparam) { - kcdb_attrib_release((kcdb_attrib_i *) m->vparam); - } -} - -khm_int32 -kcdb_attrib_hold(kcdb_attrib_i * ai) -{ - if(!ai) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_attrib); - ai->refcount++; - LeaveCriticalSection(&cs_attrib); - return KHM_ERROR_SUCCESS; -} - -khm_int32 -kcdb_attrib_release(kcdb_attrib_i * ai) -{ - if(!ai) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_attrib); - ai->refcount--; - LeaveCriticalSection(&cs_attrib); - return KHM_ERROR_SUCCESS; -} - -void -kcdb_attrib_post_message(khm_int32 op, kcdb_attrib_i * ai) -{ - kcdb_attrib_hold(ai); - kmq_post_message(KMSG_KCDB, KMSG_KCDB_ATTRIB, op, (void *) ai); -} - -khm_int32 KHMAPI -kcdb_attr_sys_cb(khm_handle vcred, - khm_int32 attr, - void * buf, - khm_size * pcb_buf) -{ - kcdb_cred * c; - - c = (kcdb_cred *) vcred; - - switch(attr) { - case KCDB_ATTR_NAME: - return kcdb_cred_get_name(vcred, buf, pcb_buf); - - case KCDB_ATTR_ID: - if(buf && *pcb_buf >= sizeof(khm_ui_8)) { - *pcb_buf = sizeof(khm_int64); - *((khm_ui_8 *) buf) = (khm_ui_8) c->identity; - return KHM_ERROR_SUCCESS; - } else { - *pcb_buf = sizeof(khm_ui_8); - return KHM_ERROR_TOO_LONG; - } - - case KCDB_ATTR_ID_NAME: - return kcdb_identity_get_name((khm_handle) c->identity, - (wchar_t *) buf, pcb_buf); - - case KCDB_ATTR_TYPE: - if(buf && *pcb_buf >= sizeof(khm_int32)) { - *pcb_buf = sizeof(khm_int32); - *((khm_int32 *) buf) = c->type; - return KHM_ERROR_SUCCESS; - } else { - *pcb_buf = sizeof(khm_int32); - return KHM_ERROR_TOO_LONG; - } - - case KCDB_ATTR_TYPE_NAME: - return kcdb_credtype_describe(c->type, buf, - pcb_buf, KCDB_TS_SHORT); - - case KCDB_ATTR_TIMELEFT: - { - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(!buf || *pcb_buf < sizeof(FILETIME)) { - *pcb_buf = sizeof(FILETIME); - rv = KHM_ERROR_TOO_LONG; - } else if(!kcdb_cred_buf_exist(c,KCDB_ATTR_EXPIRE)) { - *pcb_buf = sizeof(FILETIME); - /* setting the timeleft to _I64_MAX has the - interpretation that this credential does not - expire, which is the default behavior if the - expiration time is not known */ - *((FILETIME *) buf) = IntToFt(_I64_MAX); - } else { - FILETIME ftc; - khm_int64 iftc; - - GetSystemTimeAsFileTime(&ftc); - iftc = FtToInt(&ftc); - - *((FILETIME *) buf) = - IntToFt(FtToInt((FILETIME *) - kcdb_cred_buf_get(c,KCDB_ATTR_EXPIRE)) - - iftc); - *pcb_buf = sizeof(FILETIME); - } - - return rv; - } - - case KCDB_ATTR_RENEW_TIMELEFT: - { - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(!buf || *pcb_buf < sizeof(FILETIME)) { - *pcb_buf = sizeof(FILETIME); - rv = KHM_ERROR_TOO_LONG; - } else if(!kcdb_cred_buf_exist(c,KCDB_ATTR_RENEW_EXPIRE)) { - *pcb_buf = sizeof(FILETIME); - /* setting the timeleft to _I64_MAX has the - interpretation that this credential does not - expire, which is the default behavior if the - expiration time is not known */ - *((FILETIME *) buf) = IntToFt(_I64_MAX); - } else { - FILETIME ftc; - khm_int64 i_re; - khm_int64 i_ct; - - GetSystemTimeAsFileTime(&ftc); - - i_re = FtToInt(((FILETIME *) - kcdb_cred_buf_get(c, KCDB_ATTR_RENEW_EXPIRE))); - i_ct = FtToInt(&ftc); - - if (i_re > i_ct) - *((FILETIME *) buf) = - IntToFt(i_re - i_ct); - else - *((FILETIME *) buf) = - IntToFt(0); - - *pcb_buf = sizeof(FILETIME); - } - - return rv; - } - - case KCDB_ATTR_FLAGS: - if(buf && *pcb_buf >= sizeof(khm_int32)) { - *pcb_buf = sizeof(khm_int32); - *((khm_int32 *) buf) = c->flags; - return KHM_ERROR_SUCCESS; - } else { - *pcb_buf = sizeof(khm_int32); - return KHM_ERROR_TOO_LONG; - } - - default: - return KHM_ERROR_NOT_FOUND; - } -} - -void -kcdb_attrib_init(void) -{ - kcdb_attrib attrib; - wchar_t sbuf[256]; - - InitializeCriticalSection(&cs_attrib); - kcdb_attrib_namemap = - hash_new_hashtable(KCDB_ATTRIB_HASH_SIZE, - hash_string, - hash_string_comp, - kcdb_attrib_add_ref_func, - kcdb_attrib_del_ref_func); - - kcdb_attrib_tbl = - PMALLOC(sizeof(kcdb_attrib_i *) * (KCDB_ATTR_MAX_ID + 1)); - assert(kcdb_attrib_tbl != NULL); - ZeroMemory(kcdb_attrib_tbl, - sizeof(kcdb_attrib_i *) * (KCDB_ATTR_MAX_ID + 1)); - - kcdb_property_tbl = - PMALLOC(sizeof(kcdb_attrib_i *) * KCDB_ATTR_MAX_PROPS); - assert(kcdb_property_tbl != NULL); - ZeroMemory(kcdb_property_tbl, - sizeof(kcdb_attrib_i *) * KCDB_ATTR_MAX_PROPS); - - kcdb_attribs = NULL; - - /* register standard attributes */ - - /* Name */ - attrib.id = KCDB_ATTR_NAME; - attrib.name = KCDB_ATTRNAME_NAME; - attrib.type = KCDB_TYPE_STRING; - LoadString(hinst_kcreddb, IDS_NAME, sbuf, ARRAYLENGTH(sbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = NULL; - attrib.flags = - KCDB_ATTR_FLAG_REQUIRED | - KCDB_ATTR_FLAG_COMPUTED | - KCDB_ATTR_FLAG_SYSTEM; - attrib.compute_cb = kcdb_attr_sys_cb; - attrib.compute_min_cbsize = sizeof(wchar_t); - attrib.compute_max_cbsize = KCDB_MAXCB_NAME; - - kcdb_attrib_register(&attrib, NULL); - - /* ID */ - attrib.id = KCDB_ATTR_ID; - attrib.name = KCDB_ATTRNAME_ID; - attrib.type = KCDB_TYPE_INT64; - LoadString(hinst_kcreddb, IDS_IDENTITY, sbuf, ARRAYLENGTH(sbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = NULL; - attrib.flags = - KCDB_ATTR_FLAG_REQUIRED | - KCDB_ATTR_FLAG_COMPUTED | - KCDB_ATTR_FLAG_SYSTEM | - KCDB_ATTR_FLAG_HIDDEN; - attrib.compute_cb = kcdb_attr_sys_cb; - attrib.compute_min_cbsize = sizeof(khm_int32); - attrib.compute_max_cbsize = sizeof(khm_int32); - - kcdb_attrib_register(&attrib, NULL); - - /* ID Name */ - attrib.id = KCDB_ATTR_ID_NAME; - attrib.alt_id = KCDB_ATTR_ID; - attrib.name = KCDB_ATTRNAME_ID_NAME; - attrib.type = KCDB_TYPE_STRING; - LoadString(hinst_kcreddb, IDS_IDENTITY, sbuf, ARRAYLENGTH(sbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = NULL; - attrib.flags = - KCDB_ATTR_FLAG_REQUIRED | - KCDB_ATTR_FLAG_COMPUTED | - KCDB_ATTR_FLAG_ALTVIEW | - KCDB_ATTR_FLAG_SYSTEM; - attrib.compute_cb = kcdb_attr_sys_cb; - attrib.compute_min_cbsize = sizeof(wchar_t); - attrib.compute_max_cbsize = KCDB_IDENT_MAXCB_NAME; - - kcdb_attrib_register(&attrib, NULL); - - /* Type */ - attrib.id = KCDB_ATTR_TYPE; - attrib.name = KCDB_ATTRNAME_TYPE; - attrib.type = KCDB_TYPE_INT32; - LoadString(hinst_kcreddb, IDS_TYPE, sbuf, ARRAYLENGTH(sbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = NULL; - attrib.flags = - KCDB_ATTR_FLAG_REQUIRED | - KCDB_ATTR_FLAG_COMPUTED | - KCDB_ATTR_FLAG_SYSTEM | - KCDB_ATTR_FLAG_HIDDEN; - attrib.compute_cb = kcdb_attr_sys_cb; - attrib.compute_min_cbsize = sizeof(khm_int32); - attrib.compute_max_cbsize = sizeof(khm_int32); - - kcdb_attrib_register(&attrib, NULL); - - /* Type Name */ - attrib.id = KCDB_ATTR_TYPE_NAME; - attrib.alt_id = KCDB_ATTR_TYPE; - attrib.name = KCDB_ATTRNAME_TYPE_NAME; - attrib.type = KCDB_TYPE_STRING; - LoadString(hinst_kcreddb, IDS_TYPE, sbuf, ARRAYLENGTH(sbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = NULL; - attrib.flags = - KCDB_ATTR_FLAG_REQUIRED | - KCDB_ATTR_FLAG_COMPUTED | - KCDB_ATTR_FLAG_ALTVIEW | - KCDB_ATTR_FLAG_SYSTEM; - attrib.compute_cb = kcdb_attr_sys_cb; - attrib.compute_min_cbsize = sizeof(wchar_t); - attrib.compute_max_cbsize = KCDB_MAXCB_NAME; - - kcdb_attrib_register(&attrib, NULL); - - /* Parent Name */ - attrib.id = KCDB_ATTR_PARENT_NAME; - attrib.name = KCDB_ATTRNAME_PARENT_NAME; - attrib.type = KCDB_TYPE_STRING; - LoadString(hinst_kcreddb, IDS_PARENT, sbuf, ARRAYLENGTH(sbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = NULL; - attrib.flags = KCDB_ATTR_FLAG_SYSTEM | KCDB_ATTR_FLAG_HIDDEN; - attrib.compute_cb = NULL; - attrib.compute_min_cbsize = 0; - attrib.compute_max_cbsize = 0; - - kcdb_attrib_register(&attrib, NULL); - - /* Issed On */ - attrib.id = KCDB_ATTR_ISSUE; - attrib.name = KCDB_ATTRNAME_ISSUE; - attrib.type = KCDB_TYPE_DATE; - LoadString(hinst_kcreddb, IDS_ISSUED, sbuf, ARRAYLENGTH(sbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = NULL; - attrib.flags = KCDB_ATTR_FLAG_SYSTEM; - attrib.compute_cb = NULL; - attrib.compute_min_cbsize = 0; - attrib.compute_max_cbsize = 0; - - kcdb_attrib_register(&attrib, NULL); - - /* Expires On */ - attrib.id = KCDB_ATTR_EXPIRE; - attrib.name = KCDB_ATTRNAME_EXPIRE; - attrib.type = KCDB_TYPE_DATE; - LoadString(hinst_kcreddb, IDS_EXPIRES, sbuf, ARRAYLENGTH(sbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = NULL; - attrib.flags = KCDB_ATTR_FLAG_SYSTEM; - attrib.compute_cb = NULL; - attrib.compute_min_cbsize = 0; - attrib.compute_max_cbsize = 0; - - kcdb_attrib_register(&attrib, NULL); - - /* Renewable Time Expires On */ - attrib.id = KCDB_ATTR_RENEW_EXPIRE; - attrib.name = KCDB_ATTRNAME_RENEW_EXPIRE; - attrib.type = KCDB_TYPE_DATE; - LoadString(hinst_kcreddb, IDS_RENEW_EXPIRES, - sbuf, ARRAYLENGTH(sbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = NULL; - attrib.flags = KCDB_ATTR_FLAG_SYSTEM; - attrib.compute_cb = NULL; - attrib.compute_min_cbsize = 0; - attrib.compute_max_cbsize = 0; - - kcdb_attrib_register(&attrib, NULL); - - /* Time Left */ - attrib.id = KCDB_ATTR_TIMELEFT; - attrib.alt_id = KCDB_ATTR_EXPIRE; - attrib.name = KCDB_ATTRNAME_TIMELEFT; - attrib.type = KCDB_TYPE_INTERVAL; - LoadString(hinst_kcreddb, IDS_TIMELEFT, sbuf, ARRAYLENGTH(sbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = NULL; - attrib.flags = KCDB_ATTR_FLAG_SYSTEM | - KCDB_ATTR_FLAG_COMPUTED | - KCDB_ATTR_FLAG_ALTVIEW | - KCDB_ATTR_FLAG_VOLATILE; - attrib.compute_cb = kcdb_attr_sys_cb; - attrib.compute_min_cbsize = sizeof(FILETIME); - attrib.compute_max_cbsize = sizeof(FILETIME); - - kcdb_attrib_register(&attrib, NULL); - - /* Renewable Time Left */ - attrib.id = KCDB_ATTR_RENEW_TIMELEFT; - attrib.alt_id = KCDB_ATTR_RENEW_EXPIRE; - attrib.name = KCDB_ATTRNAME_RENEW_TIMELEFT; - attrib.type = KCDB_TYPE_INTERVAL; - LoadString(hinst_kcreddb, - IDS_RENEW_TIMELEFT, sbuf, ARRAYLENGTH(sbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = NULL; - attrib.flags = KCDB_ATTR_FLAG_SYSTEM | - KCDB_ATTR_FLAG_COMPUTED | - KCDB_ATTR_FLAG_ALTVIEW | - KCDB_ATTR_FLAG_VOLATILE; - attrib.compute_cb = kcdb_attr_sys_cb; - attrib.compute_min_cbsize = sizeof(FILETIME); - attrib.compute_max_cbsize = sizeof(FILETIME); - - kcdb_attrib_register(&attrib, NULL); - - /* Location of Credential */ - attrib.id = KCDB_ATTR_LOCATION; - attrib.name = KCDB_ATTRNAME_LOCATION; - attrib.type = KCDB_TYPE_STRING; - LoadString(hinst_kcreddb, IDS_LOCATION, sbuf, ARRAYLENGTH(sbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = NULL; - attrib.flags = KCDB_ATTR_FLAG_SYSTEM; - attrib.compute_cb = NULL; - attrib.compute_min_cbsize = 0; - attrib.compute_max_cbsize = 0; - - kcdb_attrib_register(&attrib, NULL); - - /* Lifetime */ - attrib.id = KCDB_ATTR_LIFETIME; - attrib.name = KCDB_ATTRNAME_LIFETIME; - attrib.type = KCDB_TYPE_INTERVAL; - LoadString(hinst_kcreddb, IDS_LIFETIME, sbuf, ARRAYLENGTH(sbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = NULL; - attrib.flags = KCDB_ATTR_FLAG_SYSTEM; - attrib.compute_cb = NULL; - attrib.compute_min_cbsize = 0; - attrib.compute_max_cbsize = 0; - - kcdb_attrib_register(&attrib, NULL); - - /* Renewable Lifetime */ - attrib.id = KCDB_ATTR_RENEW_LIFETIME; - attrib.name = KCDB_ATTRNAME_RENEW_LIFETIME; - attrib.type = KCDB_TYPE_INTERVAL; - LoadString(hinst_kcreddb, - IDS_RENEW_LIFETIME, sbuf, ARRAYLENGTH(sbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = NULL; - attrib.flags = KCDB_ATTR_FLAG_SYSTEM; - attrib.compute_cb = NULL; - attrib.compute_min_cbsize = 0; - attrib.compute_max_cbsize = 0; - - kcdb_attrib_register(&attrib, NULL); - - /* Flags */ - attrib.id = KCDB_ATTR_FLAGS; - attrib.name = KCDB_ATTRNAME_FLAGS; - attrib.type = KCDB_TYPE_INT32; - LoadString(hinst_kcreddb, IDS_FLAGS, sbuf, ARRAYLENGTH(sbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = NULL; - attrib.flags = - KCDB_ATTR_FLAG_REQUIRED | - KCDB_ATTR_FLAG_COMPUTED | - KCDB_ATTR_FLAG_SYSTEM | - KCDB_ATTR_FLAG_HIDDEN; - attrib.compute_cb = kcdb_attr_sys_cb; - attrib.compute_min_cbsize = sizeof(khm_int32); - attrib.compute_max_cbsize = sizeof(khm_int32); - - kcdb_attrib_register(&attrib, NULL); -} - -void -kcdb_attrib_exit(void) -{ - DeleteCriticalSection(&cs_attrib); - - if(kcdb_attrib_tbl) - PFREE(kcdb_attrib_tbl); - - if(kcdb_property_tbl) - PFREE(kcdb_property_tbl); -} - -KHMEXP khm_int32 KHMAPI -kcdb_attrib_get_id(const wchar_t *name, khm_int32 * id) -{ - kcdb_attrib_i * ai; - - if(!name) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_attrib); - ai = hash_lookup(kcdb_attrib_namemap, (void *) name); - LeaveCriticalSection(&cs_attrib); - - if(ai) { - *id = ai->attr.id; - return KHM_ERROR_SUCCESS; - } else { - *id = KCDB_ATTR_INVALID; - return KHM_ERROR_NOT_FOUND; - } -} - -KHMEXP khm_int32 KHMAPI -kcdb_attrib_register(const kcdb_attrib * attrib, khm_int32 * new_id) -{ - kcdb_attrib_i * ai; - size_t cb_name; - size_t cb_short_desc; - size_t cb_long_desc; - khm_int32 attr_id; - khm_boolean prop = FALSE; - - if(!attrib || - KHM_FAILED(kcdb_type_get_info(attrib->type, NULL)) || - !attrib->name) - return KHM_ERROR_INVALID_PARAM; - - if(FAILED(StringCbLength(attrib->name, KCDB_MAXCB_NAME, &cb_name))) - return KHM_ERROR_TOO_LONG; - cb_name += sizeof(wchar_t); - - if(attrib->short_desc) { - if(FAILED(StringCbLength(attrib->short_desc, KCDB_MAXCB_SHORT_DESC, &cb_short_desc))) - return KHM_ERROR_TOO_LONG; - cb_short_desc += sizeof(wchar_t); - } else - cb_short_desc = 0; - - if(attrib->long_desc) { - if(FAILED(StringCbLength(attrib->long_desc, KCDB_MAXCB_LONG_DESC, &cb_long_desc))) - return KHM_ERROR_TOO_LONG; - cb_long_desc += sizeof(wchar_t); - } else - cb_long_desc = 0; - - if((attrib->flags & KCDB_ATTR_FLAG_COMPUTED) && - (!attrib->compute_cb || - attrib->compute_min_cbsize <= 0 || - attrib->compute_max_cbsize < attrib->compute_min_cbsize)) - return KHM_ERROR_INVALID_PARAM; - - if ((attrib->flags & KCDB_ATTR_FLAG_ALTVIEW) && - KHM_FAILED(kcdb_attrib_get_info(attrib->alt_id, - NULL))) - return KHM_ERROR_INVALID_PARAM; - - prop = !!(attrib->flags & KCDB_ATTR_FLAG_PROPERTY); - - EnterCriticalSection(&cs_attrib); - - if(!prop && - (attrib->id < 0 || attrib->id > KCDB_ATTR_MAX_ID)) - { - if(KHM_FAILED(kcdb_attrib_next_free_id(&attr_id))) { - LeaveCriticalSection(&cs_attrib); - return KHM_ERROR_NO_RESOURCES; - } - } else if (prop && - (attrib->id < KCDB_ATTR_MIN_PROP_ID || - attrib->id > KCDB_ATTR_MAX_PROP_ID)) { - - if(KHM_FAILED(kcdb_attrib_next_free_prop_id(&attr_id))) { - LeaveCriticalSection(&cs_attrib); - return KHM_ERROR_NO_RESOURCES; - } - - } else { - attr_id = attrib->id; - } - -#ifdef DEBUG - assert(!prop || (attr_id >= KCDB_ATTR_MIN_PROP_ID && attr_id <= KCDB_ATTR_MAX_PROP_ID)); - assert(prop || (attr_id >= 0 && attr_id <= KCDB_ATTR_MAX_ID)); -#endif - - if((!prop && kcdb_attrib_tbl[attr_id]) || - (prop && kcdb_property_tbl[attr_id - KCDB_ATTR_MIN_PROP_ID])) { - - LeaveCriticalSection(&cs_attrib); - return KHM_ERROR_DUPLICATE; - - } - - ai = PMALLOC(sizeof(kcdb_attrib_i)); - ZeroMemory(ai, sizeof(kcdb_attrib_i)); - - ai->attr.type = attrib->type; - ai->attr.id = attr_id; - ai->attr.alt_id = attrib->alt_id; - ai->attr.flags = attrib->flags; - ai->attr.compute_cb = attrib->compute_cb; - ai->attr.compute_max_cbsize = attrib->compute_max_cbsize; - ai->attr.compute_min_cbsize = attrib->compute_min_cbsize; - ai->attr.name = PMALLOC(cb_name); - StringCbCopy(ai->attr.name, cb_name, attrib->name); - if(cb_short_desc) { - ai->attr.short_desc = PMALLOC(cb_short_desc); - StringCbCopy(ai->attr.short_desc, cb_short_desc, attrib->short_desc); - } - if(cb_long_desc) { - ai->attr.long_desc = PMALLOC(cb_long_desc); - StringCbCopy(ai->attr.long_desc, cb_long_desc, attrib->long_desc); - } - - LINIT(ai); - - if(!prop) - kcdb_attrib_tbl[attr_id] = ai; - else - kcdb_property_tbl[attr_id - KCDB_ATTR_MIN_PROP_ID] = ai; - - LPUSH(&kcdb_attribs, ai); - - hash_add(kcdb_attrib_namemap, (void *) ai->attr.name, ai); - - LeaveCriticalSection(&cs_attrib); - - kcdb_attrib_post_message(KCDB_OP_INSERT, ai); - - if(new_id) - *new_id = attr_id; - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI kcdb_attrib_get_info( - khm_int32 id, - kcdb_attrib ** attrib) -{ - kcdb_attrib_i * ai; - khm_boolean prop; - - if(id >= 0 && id <= KCDB_ATTR_MAX_ID) - prop = FALSE; - else if(id >= KCDB_ATTR_MIN_PROP_ID && id <= KCDB_ATTR_MAX_PROP_ID) - prop = TRUE; - else - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_attrib); - if(prop) - ai = kcdb_property_tbl[id - KCDB_ATTR_MIN_PROP_ID]; - else - ai = kcdb_attrib_tbl[id]; - LeaveCriticalSection(&cs_attrib); - - if(ai) { - if(attrib) { - *attrib = &(ai->attr); - kcdb_attrib_hold(ai); - } - return KHM_ERROR_SUCCESS; - } else { - if(attrib) - *attrib = NULL; - return KHM_ERROR_NOT_FOUND; - } -} - -KHMEXP khm_int32 KHMAPI kcdb_attrib_release_info(kcdb_attrib * attrib) -{ - if(attrib) - kcdb_attrib_release((kcdb_attrib_i *) attrib); - return KHM_ERROR_SUCCESS; -} - - -KHMEXP khm_int32 KHMAPI kcdb_attrib_unregister(khm_int32 id) -{ - /*TODO: implement this */ - return KHM_ERROR_NOT_IMPLEMENTED; -} - -KHMEXP khm_int32 KHMAPI kcdb_attrib_describe( - khm_int32 id, - wchar_t * buffer, - khm_size * cbsize, - khm_int32 flags) -{ - kcdb_attrib_i * ai; - size_t cb_size = 0; - khm_boolean prop = FALSE; - - if(!cbsize) - return KHM_ERROR_INVALID_PARAM; - - if(id >= 0 && id <= KCDB_ATTR_MAX_ID) - prop = FALSE; - else if(id >= KCDB_ATTR_MIN_PROP_ID && id <= KCDB_ATTR_MAX_PROP_ID) - prop = TRUE; - else - return KHM_ERROR_INVALID_PARAM; - - if(prop) - ai = kcdb_property_tbl[id - KCDB_ATTR_MIN_PROP_ID]; - else - ai = kcdb_attrib_tbl[id]; - - if(!ai) - return KHM_ERROR_NOT_FOUND; - - if((flags & KCDB_TS_SHORT) && - ai->attr.short_desc) - { - if(FAILED(StringCbLength(ai->attr.short_desc, KCDB_MAXCB_SHORT_DESC, &cb_size))) - return KHM_ERROR_UNKNOWN; - cb_size += sizeof(wchar_t); - - if(!buffer || *cbsize < cb_size) { - *cbsize = cb_size; - return KHM_ERROR_TOO_LONG; - } - - StringCbCopy(buffer, *cbsize, ai->attr.short_desc); - - *cbsize = cb_size; - - return KHM_ERROR_SUCCESS; - } else { - if(FAILED(StringCbLength(ai->attr.long_desc, KCDB_MAXCB_LONG_DESC, &cb_size))) - return KHM_ERROR_UNKNOWN; - cb_size += sizeof(wchar_t); - - if(!buffer || *cbsize < cb_size) { - *cbsize = cb_size; - return KHM_ERROR_TOO_LONG; - } - - StringCbCopy(buffer, *cbsize, ai->attr.long_desc); - - *cbsize = cb_size; - - return KHM_ERROR_SUCCESS; - } -} - -khm_int32 kcdb_attrib_next_free_prop_id(khm_int32 * id) -{ - int i; - - if(!id) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_attrib); - for(i=0;i < KCDB_ATTR_MAX_PROPS; i++) { - if(!kcdb_property_tbl[i]) - break; - } - LeaveCriticalSection(&cs_attrib); - - if(i < KCDB_ATTR_MAX_PROPS) { - *id = i + KCDB_ATTR_MIN_PROP_ID; - return KHM_ERROR_SUCCESS; - } else { - *id = KCDB_ATTR_INVALID; - return KHM_ERROR_NO_RESOURCES; - } -} - -khm_int32 kcdb_attrib_next_free_id(khm_int32 * id) -{ - int i; - - if(!id) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_attrib); - for(i=0;i<= KCDB_ATTR_MAX_ID; i++) { - if(!kcdb_attrib_tbl[i]) - break; - } - LeaveCriticalSection(&cs_attrib); - - if(i <= KCDB_ATTR_MAX_ID) { - *id = i; - return KHM_ERROR_SUCCESS; - } else { - *id = KCDB_ATTR_INVALID; - return KHM_ERROR_NO_RESOURCES; - } -} - -KHMEXP khm_int32 KHMAPI kcdb_attrib_get_count( - khm_int32 and_flags, - khm_int32 eq_flags, - khm_size * pcount) -{ - khm_int32 rv = KHM_ERROR_SUCCESS; - khm_size count = 0; - int i; - - if(pcount == NULL) - return KHM_ERROR_INVALID_PARAM; - - eq_flags &= and_flags; - - EnterCriticalSection(&cs_attrib); - for(i = 0; i <= KCDB_ATTR_MAX_ID; i++) { - if(kcdb_attrib_tbl[i] && - (kcdb_attrib_tbl[i]->attr.flags & and_flags) == eq_flags) - count++; - } - - for(i = 0; i < KCDB_ATTR_MAX_PROPS; i++) { - if(kcdb_property_tbl[i] && - (kcdb_property_tbl[i]->attr.flags & and_flags) == eq_flags) - count++; - } - LeaveCriticalSection(&cs_attrib); - - *pcount = count; - - return rv; -} - -KHMEXP khm_int32 KHMAPI kcdb_attrib_get_ids( - khm_int32 and_flags, - khm_int32 eq_flags, - khm_int32 * plist, - khm_size * pcsize) -{ - khm_int32 rv = KHM_ERROR_SUCCESS; - khm_size count = 0; - int i; - - if(plist == NULL || pcsize == NULL) - return KHM_ERROR_INVALID_PARAM; - - eq_flags &= and_flags; - - EnterCriticalSection(&cs_attrib); - for(i = 0; i <= KCDB_ATTR_MAX_ID; i++) { - if(kcdb_attrib_tbl[i] && - (kcdb_attrib_tbl[i]->attr.flags & and_flags) == eq_flags) { - if(count >= *pcsize) { - rv = KHM_ERROR_TOO_LONG; - count++; - } else - plist[count++] = i; - } - } - - for(i = 0; i < KCDB_ATTR_MAX_PROPS; i++) { - if(kcdb_property_tbl[i] && - (kcdb_property_tbl[i]->attr.flags & and_flags) == eq_flags) { - if(count >= *pcsize) { - rv = KHM_ERROR_TOO_LONG; - count++; - } else - plist[count++] = i + KCDB_ATTR_MIN_PROP_ID; - } - } - LeaveCriticalSection(&cs_attrib); - - *pcsize = count; - - return rv; -} diff --git a/src/windows/identity/kcreddb/attrib.h b/src/windows/identity/kcreddb/attrib.h deleted file mode 100644 index 2f0cc0f8e..000000000 --- a/src/windows/identity/kcreddb/attrib.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KCDB_ATTRIB_H -#define __KHIMAIRA_KCDB_ATTRIB_H - -/* Attributes */ - -typedef struct kcdb_attrib_i_t { - kcdb_attrib attr; - - khm_int32 refcount; - - struct kcdb_attrib_i_t * next; - struct kcdb_attrib_i_t * prev; -} kcdb_attrib_i; - -#define KCDB_ATTRIB_HASH_SIZE 31 - -void kcdb_attrib_init(void); -void kcdb_attrib_exit(void); -void kcdb_attrib_add_ref_func(const void * key, void * va); -void kcdb_attrib_del_ref_func(const void * key, void * va); -void kcdb_attrib_msg_completion(kmq_message * m); -khm_int32 kcdb_attrib_next_free_prop_id(khm_int32 * id); -khm_int32 kcdb_attrib_next_free_id(khm_int32 * id); -khm_int32 kcdb_attrib_hold(kcdb_attrib_i * ai); -khm_int32 kcdb_attrib_release(kcdb_attrib_i * ai); -void kcdb_attrib_post_message(khm_int32 op, kcdb_attrib_i * ai); -khm_int32 KHMAPI kcdb_attr_sys_cb(khm_handle cred, khm_int32 attr, void * buf, khm_size * pcb_buf); - -#endif diff --git a/src/windows/identity/kcreddb/buf.c b/src/windows/identity/kcreddb/buf.c deleted file mode 100644 index 14038decf..000000000 --- a/src/windows/identity/kcreddb/buf.c +++ /dev/null @@ -1,390 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<kcreddbinternal.h> -#include<assert.h> - -void kcdb_buf_new(kcdb_buf * buf, khm_size n_fields) -{ - buf->buffer = PMALLOC(KCDB_BUF_CBBUF_INITIAL); - buf->cb_buffer = KCDB_BUF_CBBUF_INITIAL; - buf->cb_used = 0; - - if(n_fields == KCDB_BUF_DEFAULT) - n_fields = KCDB_BUF_FIELDS_INITIAL; - - assert(n_fields < KCDB_BUF_MAX_SLOTS); - - buf->n_fields = n_fields; - buf->nc_fields = UBOUNDSS(n_fields, KCDB_BUF_FIELDS_INITIAL, KCDB_BUF_FIELDS_GROWTH); - buf->fields = PMALLOC(sizeof(buf->fields[0]) * buf->n_fields); - ZeroMemory(buf->fields, sizeof(buf->fields[0]) * buf->n_fields); -} - -void kcdb_buf_delete(kcdb_buf * buf) -{ - buf->cb_buffer = 0; - buf->cb_used = 0; - if(buf->buffer) - PFREE(buf->buffer); - buf->buffer = NULL; - - buf->n_fields = 0; - buf->nc_fields = 0; - if(buf->fields) - PFREE(buf->fields); - buf->fields = NULL; -} - -static void kcdb_buf_assert_size(kcdb_buf * buf, khm_size cbsize) -{ - khm_size new_size; - void * new_buf; - - /* should be less than or equal to the max signed 32 bit int */ - assert(cbsize <= KHM_INT32_MAX); - if(cbsize <= buf->cb_buffer) - return; - - new_size = UBOUNDSS(cbsize, KCDB_BUF_CBBUF_INITIAL, KCDB_BUF_CBBUF_GROWTH); - - assert(new_size > buf->cb_buffer && new_size > 0); - - new_buf = PMALLOC(new_size); - assert(new_buf != NULL); - - memcpy(new_buf, buf->buffer, buf->cb_used); - PFREE(buf->buffer); - buf->buffer = new_buf; -} - -void kcdb_buf_alloc(kcdb_buf * buf, khm_size slot, khm_ui_2 id, khm_size cbsize) -{ - khm_size cbnew; - khm_ssize cbdelta; - khm_size cbold; - kcdb_buf_field * f; - - cbnew = UBOUND32(cbsize); - - assert(slot <= KCDB_BUF_APPEND); - - if(slot == KCDB_BUF_APPEND) { - slot = kcdb_buf_slot_by_id(buf, id); - if(slot == KCDB_BUF_INVALID_SLOT) - slot = buf->n_fields; - } - - assert(slot < KCDB_BUF_MAX_SLOTS); - - if((slot + 1) > buf->nc_fields) { - kcdb_buf_field * nf; - khm_size ns; - - ns = UBOUNDSS((slot + 1), KCDB_BUF_FIELDS_INITIAL, KCDB_BUF_FIELDS_GROWTH); - - nf = PMALLOC(sizeof(buf->fields[0]) * ns); - memcpy(nf, buf->fields, sizeof(buf->fields[0]) * buf->n_fields); - - if(ns > buf->n_fields) - memset(&(nf[buf->n_fields]), 0, sizeof(buf->fields[0]) * (ns - buf->n_fields)); - - PFREE(buf->fields); - buf->fields = nf; - buf->nc_fields = ns; - } - - if((slot + 1) > buf->n_fields) - buf->n_fields = slot + 1; - - f = &(buf->fields[slot]); - - if(f->flags & KCDB_CREDF_FLAG_ALLOCD) { - /* there's already an allocation. we have to resize it to - accomodate the new size */ - cbold = UBOUND32(f->cbsize); - /* demote before substraction */ - cbdelta = ((khm_ssize) cbnew) - (khm_ssize) cbold; - - if(cbnew > cbold) { - kcdb_buf_assert_size(buf, buf->cb_used + cbdelta); - } - - if(buf->cb_used > f->offset + cbold) { - khm_size i; - - memmove( - ((BYTE *) buf->buffer) + (f->offset + cbnew), - ((BYTE *) buf->buffer) + (f->offset + cbold), - buf->cb_used - (f->offset + cbold)); - - for(i=0; i < (int) buf->n_fields; i++) { - if(i != slot && - (buf->fields[i].flags & KCDB_CREDF_FLAG_ALLOCD) && - buf->fields[i].offset > f->offset) - { - buf->fields[i].offset = - (khm_ui_4)(((khm_ssize) buf->fields[i].offset) + cbdelta); - } - } - } - - /* demote integer before adding signed quantity */ - buf->cb_used = (khm_size)(((khm_ssize) buf->cb_used) + cbdelta); - - f->cbsize = (khm_ui_4) cbsize; - - } else { - kcdb_buf_assert_size(buf, buf->cb_used + cbnew); - f->offset = (khm_ui_4) buf->cb_used; - f->cbsize = (khm_ui_4) cbsize; - buf->cb_used += cbnew; - } - - if(cbsize == 0) { - f->flags &= ~KCDB_CREDF_FLAG_ALLOCD; - f->flags &= ~KCDB_CREDF_FLAG_DATA; - f->id = KCDB_BUFF_ID_INVALID; - } else { - f->flags |= KCDB_CREDF_FLAG_ALLOCD; - f->id = id; - } -} - -void kcdb_buf_dup(kcdb_buf * dest, const kcdb_buf * src) -{ - khm_size cb_buf; - khm_size nc_fields; - - cb_buf = UBOUNDSS(src->cb_used, KCDB_BUF_CBBUF_INITIAL, KCDB_BUF_CBBUF_GROWTH); -#if 0 - /* replaced by UBOUNDSS() above */ - (src->cb_used <= kcdb_cred_initial_size)? kcdb_cred_initial_size: - kcdb_cred_initial_size + - (((src->cb_used - (kcdb_cred_initial_size + 1)) / kcdb_cred_growth_factor + 1) * kcdb_cred_growth_factor); -#endif - - kcdb_buf_delete(dest); - - dest->cb_buffer = cb_buf; - dest->cb_used = src->cb_used; - dest->buffer = PMALLOC(cb_buf); - memcpy(dest->buffer, src->buffer, src->cb_used); - - nc_fields = UBOUNDSS(src->n_fields, KCDB_BUF_FIELDS_INITIAL, KCDB_BUF_FIELDS_GROWTH); - dest->nc_fields = nc_fields; - dest->n_fields = src->n_fields; - dest->fields = PMALLOC(nc_fields * sizeof(dest->fields[0])); - memcpy(dest->fields, src->fields, src->n_fields * sizeof(dest->fields[0])); - if(dest->n_fields < dest->nc_fields) - memset(&(dest->fields[dest->n_fields]), 0, (src->nc_fields - src->n_fields) * sizeof(dest->fields[0])); -} - -void kcdb_buf_set_value(kcdb_buf * buf, khm_size slot, khm_ui_2 id, void * src, khm_size cb_src) -{ - void * dest; - kcdb_buf_alloc(buf, slot, id, cb_src); - if(slot == KCDB_BUF_APPEND) { - slot = kcdb_buf_slot_by_id(buf, id); - if(slot == KCDB_BUF_INVALID_SLOT) { -#ifdef DEBUG - assert(FALSE); -#else - return; -#endif - } - } - if(kcdb_buf_exist(buf, slot)) { - dest = kcdb_buf_get(buf, slot); - memcpy(dest, src, cb_src); - - buf->fields[slot].flags |= KCDB_CREDF_FLAG_DATA; - } -} - -int kcdb_buf_exist(kcdb_buf * buf, khm_size slot) -{ - if(slot >= buf->n_fields) - return 0; - return (buf->fields[slot].flags & KCDB_CREDF_FLAG_ALLOCD); -} - -int kcdb_buf_val_exist(kcdb_buf * buf, khm_size slot) -{ - if(slot >= buf->n_fields) - return 0; - return (buf->fields[slot].flags & KCDB_CREDF_FLAG_DATA); -} - -void * kcdb_buf_get(kcdb_buf * buf, khm_size slot) -{ - if(slot >= buf->n_fields || - !(buf->fields[slot].flags & KCDB_CREDF_FLAG_ALLOCD)) - return NULL; - return (((BYTE *) buf->buffer) + buf->fields[slot].offset); -} - -khm_size kcdb_buf_size(kcdb_buf * buf, khm_size slot) -{ - if(slot >= buf->n_fields || - !(buf->fields[slot].flags & KCDB_CREDF_FLAG_ALLOCD)) - return 0; - return (buf->fields[slot].cbsize); -} - -void kcdb_buf_set_value_flag(kcdb_buf * buf, khm_size slot) -{ - if(slot >= buf->n_fields || - !(buf->fields[slot].flags & KCDB_CREDF_FLAG_ALLOCD)) - return; - - (buf->fields[slot].flags |= KCDB_CREDF_FLAG_DATA); -} - -khm_size kcdb_buf_slot_by_id(kcdb_buf * buf, khm_ui_2 id) -{ - int i; - - for(i=0; i < (int) buf->n_fields; i++) { - if(buf->fields[i].id == id) - break; - } - - if(i < (int) buf->n_fields) - return i; - else - return KCDB_BUF_INVALID_SLOT; -} - -/* API for accessing generic buffers */ - -KHMEXP khm_int32 KHMAPI kcdb_buf_get_attr( - khm_handle record, - khm_int32 attr_id, - khm_int32 * attr_type, - void * buffer, - khm_size * pcb_buf) -{ - if(kcdb_cred_is_active_cred(record)) - return kcdb_cred_get_attr(record, attr_id, attr_type, buffer, pcb_buf); - else if(kcdb_is_active_identity(record)) - return kcdb_identity_get_attr(record, attr_id, attr_type, buffer, pcb_buf); - else - return KHM_ERROR_INVALID_PARAM; -} - -KHMEXP khm_int32 KHMAPI kcdb_buf_get_attrib( - khm_handle record, - const wchar_t * attr_name, - khm_int32 * attr_type, - void * buffer, - khm_size * pcb_buf) -{ - if(kcdb_cred_is_active_cred(record)) - return kcdb_cred_get_attrib(record, attr_name, attr_type, buffer, pcb_buf); - else if(kcdb_is_active_identity(record)) - return kcdb_identity_get_attrib(record, attr_name, attr_type, buffer, pcb_buf); - else - return KHM_ERROR_INVALID_PARAM; -} - -KHMEXP khm_int32 KHMAPI kcdb_buf_get_attr_string( - khm_handle record, - khm_int32 attr_id, - wchar_t * buffer, - khm_size * pcbbuf, - khm_int32 flags) -{ - if(kcdb_cred_is_active_cred(record)) - return kcdb_cred_get_attr_string(record, attr_id, buffer, pcbbuf, flags); - else if(kcdb_is_active_identity(record)) - return kcdb_identity_get_attr_string(record, attr_id, buffer, pcbbuf, flags); - else - return KHM_ERROR_INVALID_PARAM; -} - -KHMEXP khm_int32 KHMAPI kcdb_buf_get_attrib_string( - khm_handle record, - const wchar_t * attr_name, - wchar_t * buffer, - khm_size * pcbbuf, - khm_int32 flags) -{ - if(kcdb_cred_is_active_cred(record)) - return kcdb_cred_get_attrib_string(record, attr_name, buffer, pcbbuf, flags); - else if(kcdb_is_active_identity(record)) - return kcdb_identity_get_attrib_string(record, attr_name, buffer, pcbbuf, flags); - else - return KHM_ERROR_INVALID_PARAM; -} - -KHMEXP khm_int32 KHMAPI kcdb_buf_set_attr( - khm_handle record, - khm_int32 attr_id, - void * buffer, - khm_size cbbuf) -{ - if(kcdb_cred_is_active_cred(record)) - return kcdb_cred_set_attr(record, attr_id, buffer, cbbuf); - else if(kcdb_is_active_identity(record)) - return kcdb_identity_set_attr(record, attr_id, buffer, cbbuf); - else - return KHM_ERROR_INVALID_PARAM; -} - -KHMEXP khm_int32 KHMAPI kcdb_buf_set_attrib( - khm_handle record, - const wchar_t * attr_name, - void * buffer, - khm_size cbbuf) -{ - if(kcdb_cred_is_active_cred(record)) - return kcdb_cred_set_attrib(record, attr_name, buffer, cbbuf); - else if(kcdb_is_active_identity(record)) - return kcdb_identity_set_attrib(record, attr_name, buffer, cbbuf); - else - return KHM_ERROR_INVALID_PARAM; -} - -KHMEXP khm_int32 KHMAPI kcdb_buf_hold(khm_handle record) -{ - if(kcdb_cred_is_active_cred(record)) - return kcdb_cred_hold(record); - else if(kcdb_is_active_identity(record)) - return kcdb_identity_hold(record); - else - return KHM_ERROR_INVALID_PARAM; -} - -KHMEXP khm_int32 KHMAPI kcdb_buf_release(khm_handle record) -{ - if(kcdb_cred_is_active_cred(record)) - return kcdb_cred_release(record); - else if(kcdb_is_active_identity(record)) - return kcdb_identity_release(record); - else - return KHM_ERROR_INVALID_PARAM; -} diff --git a/src/windows/identity/kcreddb/buf.h b/src/windows/identity/kcreddb/buf.h deleted file mode 100644 index 723253036..000000000 --- a/src/windows/identity/kcreddb/buf.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KCDB_BUF_H -#define __KHIMAIRA_KCDB_BUF_H - -typedef struct tag_kcdb_buf_field { - khm_ui_2 id; - khm_ui_2 flags; - khm_ui_4 offset; - khm_ui_4 cbsize; -} kcdb_buf_field; - -#define KCDB_CREDF_FLAG_EMPTY 0 -#define KCDB_CREDF_FLAG_DATA 1 -#define KCDB_CREDF_FLAG_INLINE 2 -#define KCDB_CREDF_FLAG_ALLOCD 4 - -#define KCDB_BUFF_ID_INVALID 0xffff - -typedef struct tag_kcdb_buf { - void * buffer; - khm_size cb_buffer; - khm_size cb_used; - - kcdb_buf_field * fields; - khm_size n_fields; - khm_size nc_fields; -} kcdb_buf; - -#define KCDB_BUF_CBBUF_INITIAL 4096 -#define KCDB_BUF_CBBUF_GROWTH 4096 -#define KCDB_BUF_FIELDS_INITIAL 16 -#define KCDB_BUF_FIELDS_GROWTH 16 - -#define KCDB_BUF_APPEND 0x8000 - -#define KCDB_BUF_INVALID_SLOT 0xf0000000 -#define KCDB_BUF_DEFAULT 0xe0000000 - -#define KCDB_BUF_MAX_SLOTS 0x00004000 - -void kcdb_buf_new(kcdb_buf * buf, khm_size n_slots); -void kcdb_buf_delete(kcdb_buf * buf); -void kcdb_buf_alloc(kcdb_buf * buf, khm_size slot, khm_ui_2 id, khm_size cbsize); -void kcdb_buf_dup(kcdb_buf * dest, const kcdb_buf * src); -void kcdb_buf_set_value(kcdb_buf * buf, khm_size slot, khm_ui_2 id, void * src, khm_size cb_src); -int kcdb_buf_exist(kcdb_buf * buf, khm_size slot); -int kcdb_buf_val_exist(kcdb_buf * buf, khm_size slot); -void * kcdb_buf_get(kcdb_buf * buf, khm_size slot); -khm_size kcdb_buf_size(kcdb_buf * buf, khm_size slot); -void kcdb_buf_set_value_flag(kcdb_buf * buf, khm_size slot); -khm_size kcdb_buf_slot_by_id(kcdb_buf * buf, khm_ui_2 id); - -#endif diff --git a/src/windows/identity/kcreddb/credential.c b/src/windows/identity/kcreddb/credential.c deleted file mode 100644 index 12618f237..000000000 --- a/src/windows/identity/kcreddb/credential.c +++ /dev/null @@ -1,1092 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<kcreddbinternal.h> -#include<assert.h> - -/* cs_creds protects the *collection* of credentials, while l_creds - protects the *contents* of individual credentials. */ -CRITICAL_SECTION cs_creds; -kcdb_cred * kcdb_creds = NULL; - -/* a read lock must be obtained when querying any existing credential. - a write lock must be obtained when modifying any existing credential. - */ -RWLOCK l_creds; - -/* serial number */ -khm_ui_8 kcdb_cred_id = 0; - -void kcdb_cred_init(void) -{ - InitializeCriticalSection(&cs_creds); - InitializeRwLock(&l_creds); - kcdb_cred_id = 0; -} - -void kcdb_cred_exit(void) -{ - /*TODO: Free the credentials */ - DeleteCriticalSection(&cs_creds); - DeleteRwLock(&l_creds); -} - -/*! \internal - - can be called by kcdb_cred_dup with a write lock on l_creds and in other - places with a read lock on l_creds. New credentials must be creatable while - holding either lock. */ -KHMEXP khm_int32 KHMAPI -kcdb_cred_create(const wchar_t * name, - khm_handle identity, - khm_int32 cred_type, - khm_handle * result) -{ - kcdb_cred * cred; - size_t cb_name; - - if(!name || !result || - FAILED(StringCbLength(name, KCDB_CRED_MAXCB_NAME, &cb_name)) || - KHM_FAILED(kcdb_credtype_get_info(cred_type, NULL)) || - KHM_FAILED(kcdb_identity_hold(identity))) { - return KHM_ERROR_INVALID_PARAM; - } - - cb_name += sizeof(wchar_t); - - cred = PMALLOC(sizeof(kcdb_cred)); - ZeroMemory(cred, sizeof(kcdb_cred)); - - cred->magic = KCDB_CRED_MAGIC; - cred->identity = identity; - cred->name = PMALLOC(cb_name); - StringCbCopy(cred->name, cb_name, name); - cred->type = cred_type; - - cred->refcount = 1; /* initially held */ - - LINIT(cred); - - kcdb_buf_new(&cred->buf, KCDB_ATTR_MAX_ID + 1); - - /* Not obtaining a write lock on l_cred on purpose. - Well, because no one should be referencing this credential until - this function returns. */ - EnterCriticalSection(&cs_creds); - cred->id = kcdb_cred_id++; - LPUSH(&kcdb_creds, cred); - LeaveCriticalSection(&cs_creds); - - *result = cred; - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI kcdb_cred_update(khm_handle vdest, - khm_handle vsrc) -{ - khm_int32 rv = KHM_ERROR_EQUIVALENT; - kcdb_cred * src; - kcdb_cred * dest; - kcdb_type * t; - kcdb_attrib * a; - void * srcbuf; - void * destbuf; - khm_size cbsrcbuf; - khm_size cbdestbuf; - - int i; - - kcdb_cred_lock_write(); - - if(!kcdb_cred_is_active_cred(vsrc) || - !kcdb_cred_is_active_cred(vdest)) - goto _exit; - - src = (kcdb_cred *) vsrc; - dest = (kcdb_cred *) vdest; - - for(i=0;i<KCDB_ATTR_MAX_ID;i++) { - if(kcdb_cred_val_exist(src, i)) { - /*NOTE: the logic here has to reflect the logic in - kcdb_cred_set_attr() */ - if(KHM_FAILED(kcdb_attrib_get_info(i, &a))) - continue; - - if((a->flags & KCDB_ATTR_FLAG_COMPUTED) || - KHM_FAILED(kcdb_type_get_info(a->type, &t))) { - kcdb_attrib_release_info(a); - continue; - } - - srcbuf = kcdb_cred_buf_get(src,i); - cbsrcbuf = kcdb_cred_buf_size(src, i); - - if(kcdb_cred_val_exist(dest, i)) { - destbuf = kcdb_cred_buf_get(dest, i); - cbdestbuf = kcdb_cred_buf_size(dest, i); - - if(!t->comp(srcbuf, cbsrcbuf, destbuf, cbdestbuf)) - goto _skip_copy; - } - - kcdb_buf_set_value(&dest->buf, i, (khm_ui_2) i, srcbuf, cbsrcbuf); - rv = KHM_ERROR_SUCCESS; - - _skip_copy: - kcdb_attrib_release_info(a); - kcdb_type_release_info(t); - } else { - if (KHM_FAILED(kcdb_attrib_get_info(i, &a))) - continue; - - if (!(a->flags & KCDB_ATTR_FLAG_COMPUTED) && - (a->flags & KCDB_ATTR_FLAG_TRANSIENT) && - kcdb_cred_val_exist(dest, i)) { - kcdb_buf_set_value(&dest->buf, i, (khm_ui_2) i, NULL, 0); - - rv = KHM_ERROR_SUCCESS; - } - - kcdb_attrib_release_info(a); - } - } - - if (dest->flags != src->flags) { - khm_int32 old_flags; - - old_flags = dest->flags; - - dest->flags = (src->flags & ~KCDB_CRED_FLAGMASK_ADDITIVE) | - ((src->flags | dest->flags) & KCDB_CRED_FLAGMASK_ADDITIVE); - - if (dest->flags != old_flags) - rv = KHM_ERROR_SUCCESS; - } - - _exit: - kcdb_cred_unlock_write(); - return rv; -} - -KHMEXP khm_int32 KHMAPI kcdb_cred_dup( - khm_handle vcred, - khm_handle * pnewcred) -{ - khm_int32 code = KHM_ERROR_SUCCESS; - kcdb_cred * cred; - kcdb_cred * newcred; - khm_handle vnewcred; - - if(!pnewcred) - return KHM_ERROR_INVALID_PARAM; - - *pnewcred = NULL; - - kcdb_cred_lock_write(); - - if(!kcdb_cred_is_active_cred(vcred)) { - code = KHM_ERROR_INVALID_PARAM; - goto _exit; - } - - cred = (kcdb_cred *) vcred; - - if(KHM_FAILED(kcdb_cred_create(cred->name, - cred->identity, - cred->type, - &vnewcred))) - { - code = KHM_ERROR_UNKNOWN; - goto _exit; - } - - newcred = (kcdb_cred *) vnewcred; - - newcred->flags = cred->flags; - - kcdb_buf_dup(&newcred->buf, &cred->buf); - - /* newcred is already held from the call to kcdb_cred_create */ - *pnewcred = (khm_handle) newcred; - -_exit: - kcdb_cred_unlock_write(); - return code; -} - -KHMEXP khm_int32 KHMAPI kcdb_cred_get_serial( - khm_handle vcred, - khm_ui_8 * pserial) -{ - kcdb_cred * c; - - if(!pserial) - return KHM_ERROR_INVALID_PARAM; - - kcdb_cred_lock_read(); - - if(!kcdb_cred_is_active_cred(vcred)) { - kcdb_cred_unlock_read(); - return KHM_ERROR_INVALID_PARAM; - } - - c = (kcdb_cred *) vcred; - - *pserial = c->id; - - kcdb_cred_unlock_read(); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI kcdb_cred_set_identity( - khm_handle vcred, - khm_handle id) -{ - kcdb_cred * c; - - if(!kcdb_is_identity(id)) - return KHM_ERROR_INVALID_PARAM; - - kcdb_cred_lock_write(); - if(!kcdb_cred_is_active_cred(vcred)) { - kcdb_cred_unlock_write(); - return KHM_ERROR_INVALID_PARAM; - } - - c = (kcdb_cred *) vcred; - - if(c->identity) { - kcdb_identity_release((khm_handle) c->identity); - } - kcdb_identity_hold(id); - c->identity = (kcdb_identity *) id; - - kcdb_cred_unlock_write(); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI kcdb_cred_get_type( - khm_handle vcred, - khm_int32 * type) -{ - kcdb_cred * c; - - if(!type) - return KHM_ERROR_INVALID_PARAM; - - kcdb_cred_lock_read(); - - if(!kcdb_cred_is_active_cred(vcred)) { - kcdb_cred_unlock_read(); - return KHM_ERROR_INVALID_PARAM; - } - - c = (kcdb_cred *) vcred; - - *type = c->type; - - kcdb_cred_unlock_read(); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI kcdb_cred_set_attrib( - khm_handle cred, - const wchar_t * name, - void * buffer, - khm_size cbbuf) -{ - khm_int32 attr_id = -1; - - if(KHM_FAILED(kcdb_attrib_get_id(name, &attr_id))) - return KHM_ERROR_INVALID_PARAM; - - return kcdb_cred_set_attr( - cred, - attr_id, - buffer, - cbbuf); -} - -KHMEXP khm_int32 KHMAPI kcdb_cred_set_attr( - khm_handle vcred, - khm_int32 attr_id, - void * buffer, - khm_size cbbuf) -{ - kcdb_cred * cred; - kcdb_type * type = NULL; - kcdb_attrib * attrib = NULL; - khm_size cbdest; - khm_int32 code = KHM_ERROR_SUCCESS; - - if(attr_id < 0 || attr_id > KCDB_ATTR_MAX_ID) - return KHM_ERROR_INVALID_PARAM; - - kcdb_cred_lock_write(); - - if(!kcdb_cred_is_active_cred(vcred)) { - kcdb_cred_unlock_write(); - return KHM_ERROR_INVALID_PARAM; - } - - cred = (kcdb_cred *) vcred; - - if(KHM_FAILED(kcdb_attrib_get_info(attr_id, &attrib))) { - kcdb_cred_unlock_write(); - return KHM_ERROR_INVALID_PARAM; - } - - if(attrib->flags & KCDB_ATTR_FLAG_COMPUTED) - { - kcdb_cred_unlock_write(); - kcdb_attrib_release_info(attrib); - return KHM_ERROR_INVALID_OPERATION; - } - - if (buffer == 0) { - /* we are removing the value */ - kcdb_buf_alloc(&cred->buf, attr_id, (khm_ui_2) attr_id, 0); - code = KHM_ERROR_SUCCESS; - goto _exit; - } - - if(KHM_FAILED(kcdb_type_get_info(attrib->type, &type))) { - kcdb_cred_unlock_write(); - kcdb_attrib_release_info(attrib); - return KHM_ERROR_INVALID_PARAM; - } - - if(!(type->isValid(buffer,cbbuf))) { - code = KHM_ERROR_TYPE_MISMATCH; - goto _exit; - } - - if((type->dup(buffer, cbbuf, NULL, &cbdest)) != KHM_ERROR_TOO_LONG) { - code = KHM_ERROR_INVALID_PARAM; - goto _exit; - } - - kcdb_buf_alloc(&cred->buf, attr_id, (khm_ui_2) attr_id, cbdest); - if(!kcdb_cred_buf_exist(cred, attr_id)) { - code = KHM_ERROR_NO_RESOURCES; - goto _exit; - } - - if(KHM_FAILED(code = - type->dup(buffer, cbbuf, kcdb_cred_buf_get(cred,attr_id), &cbdest))) - { - kcdb_buf_alloc(&cred->buf, attr_id, (khm_ui_2) attr_id, 0); - goto _exit; - } - - kcdb_buf_set_value_flag(&cred->buf, attr_id); - -_exit: - kcdb_cred_unlock_write(); - - if(attrib) - kcdb_attrib_release_info(attrib); - if(type) - kcdb_type_release_info(type); - - return code; -} - -KHMEXP khm_int32 KHMAPI kcdb_cred_get_attrib( - khm_handle cred, - const wchar_t * name, - khm_int32 * attr_type, - void * buffer, - khm_size * cbbuf) -{ - khm_int32 attr_id = -1; - - if(KHM_FAILED(kcdb_attrib_get_id(name, &attr_id))) - return KHM_ERROR_NOT_FOUND; - - return kcdb_cred_get_attr( - cred, - attr_id, - attr_type, - buffer, - cbbuf); -} - -KHMEXP khm_int32 KHMAPI kcdb_cred_get_attrib_string( - khm_handle cred, - const wchar_t * name, - wchar_t * buffer, - khm_size * cbbuf, - khm_int32 flags) -{ - khm_int32 attr_id = -1; - - if(KHM_FAILED(kcdb_attrib_get_id(name, &attr_id))) - return KHM_ERROR_NOT_FOUND; - - return kcdb_cred_get_attr_string( - cred, - attr_id, - buffer, - cbbuf, - flags); -} - -KHMEXP khm_int32 KHMAPI -kcdb_cred_get_attr(khm_handle vcred, - khm_int32 attr_id, - khm_int32 * attr_type, - void * buffer, - khm_size * pcbbuf) -{ - khm_int32 code = KHM_ERROR_SUCCESS; - kcdb_cred * cred = NULL; - kcdb_attrib * attrib = NULL; - kcdb_type * type = NULL; - - if(attr_id < 0 || attr_id > KCDB_ATTR_MAX_ID) - return KHM_ERROR_INVALID_PARAM; - - if(KHM_FAILED(kcdb_attrib_get_info(attr_id, &attrib))) { - return KHM_ERROR_INVALID_PARAM; - } - - if(KHM_FAILED(kcdb_type_get_info(attrib->type, &type))) { - kcdb_attrib_release_info(attrib); - return KHM_ERROR_UNKNOWN; - } - - if(attr_type) - *attr_type = attrib->type; - - kcdb_cred_lock_read(); - if(!kcdb_cred_is_active_cred(vcred)) { - code = KHM_ERROR_INVALID_PARAM; - goto _exit; - } - - cred = (kcdb_cred *) vcred; - - if(!buffer && !pcbbuf) { - /* in this case the caller is only trying to determine if the - field contains data. We assume that computed fields are - always non-null. */ - code = (kcdb_cred_val_exist(cred, attr_id) || - (attrib->flags & KCDB_ATTR_FLAG_COMPUTED))?KHM_ERROR_SUCCESS:KHM_ERROR_NOT_FOUND; - goto _exit; - } - - if(attrib->flags & KCDB_ATTR_FLAG_COMPUTED) { - code = attrib->compute_cb( - vcred, - attr_id, - buffer, - pcbbuf); - } else if (kcdb_cred_val_exist(cred, attr_id)) { - code = type->dup( - kcdb_cred_buf_get(cred, attr_id), - kcdb_cred_buf_size(cred, attr_id), - buffer, - pcbbuf); - } else { - code = KHM_ERROR_NOT_FOUND; - } - -_exit: - kcdb_cred_unlock_read(); - if(type) - kcdb_type_release_info(type); - if(attrib) - kcdb_attrib_release_info(attrib); - - return code; -} - -KHMEXP khm_int32 KHMAPI kcdb_cred_get_attr_string( - khm_handle vcred, - khm_int32 attr_id, - wchar_t * buffer, - khm_size * pcbbuf, - khm_int32 flags) -{ - khm_int32 code = KHM_ERROR_SUCCESS; - kcdb_cred * cred = NULL; - kcdb_attrib * attrib = NULL; - kcdb_type * type = NULL; - - if(attr_id < 0 || attr_id > KCDB_ATTR_MAX_ID) - return KHM_ERROR_INVALID_PARAM; - - if(KHM_FAILED(kcdb_attrib_get_info(attr_id, &attrib))) { - code = KHM_ERROR_INVALID_PARAM; - goto _exit_nolock; - } - - if(KHM_FAILED(kcdb_type_get_info(attrib->type, &type))) { - code = KHM_ERROR_UNKNOWN; - goto _exit_nolock; - } - - kcdb_cred_lock_read(); - if(!kcdb_cred_is_active_cred(vcred)) { - code = KHM_ERROR_INVALID_PARAM; - goto _exit; - } - - cred = (kcdb_cred *) vcred; - - if(!buffer && !pcbbuf) { - /* in this case the caller is only trying to determine if the - field contains data. We assume that computed fields are - always non-null. */ - code = (kcdb_cred_val_exist(cred, attr_id) || - (attrib->flags & KCDB_ATTR_FLAG_COMPUTED))?KHM_ERROR_SUCCESS:KHM_ERROR_NOT_FOUND; - goto _exit; - } - - if(attrib->flags & KCDB_ATTR_FLAG_COMPUTED) { - void * buf; - khm_size cbbuf; - - code = attrib->compute_cb(vcred, - attr_id, - NULL, - &cbbuf); - if(code == KHM_ERROR_TOO_LONG) { - wchar_t vbuf[KCDB_MAXCCH_NAME]; - - if (cbbuf < sizeof(vbuf)) - buf = vbuf; - else - buf = PMALLOC(cbbuf); - - code = attrib->compute_cb(vcred, - attr_id, - buf, - &cbbuf); - if(KHM_SUCCEEDED(code)) { - code = type->toString(buf, - cbbuf, - buffer, - pcbbuf, - flags); - } - - if (buf != vbuf) - PFREE(buf); - } - } else { - if(kcdb_cred_buf_exist(cred, attr_id)) { - code = type->toString( - kcdb_cred_buf_get(cred, attr_id), - kcdb_cred_buf_size(cred, attr_id), - buffer, - pcbbuf, - flags); - } else - code = KHM_ERROR_NOT_FOUND; - } - - _exit: - kcdb_cred_unlock_read(); - _exit_nolock: - if(type) - kcdb_type_release_info(type); - if(attrib) - kcdb_attrib_release_info(attrib); - - return code; -} - - -KHMEXP khm_int32 KHMAPI kcdb_cred_get_name( - khm_handle vcred, - wchar_t * buffer, - khm_size * cbbuf) -{ - khm_int32 code = KHM_ERROR_SUCCESS; - kcdb_cred * cred = NULL; - size_t cbsize; - - if(!cbbuf) - return KHM_ERROR_INVALID_PARAM; - - kcdb_cred_lock_read(); - - if(!kcdb_cred_is_active_cred(vcred)) { - code = KHM_ERROR_INVALID_PARAM; - goto _exit; - } - - cred = (kcdb_cred *) vcred; - - if(FAILED(StringCbLength(cred->name, KCDB_CRED_MAXCB_NAME, &cbsize))) { - code = KHM_ERROR_UNKNOWN; - goto _exit; - } - - cbsize += sizeof(wchar_t); - - if(!buffer || *cbbuf < cbsize) { - *cbbuf = cbsize; - code = KHM_ERROR_TOO_LONG; - goto _exit; - } - - StringCbCopy(buffer, *cbbuf, cred->name); - - *cbbuf = cbsize; - -_exit: - - kcdb_cred_unlock_read(); - return code; -} - -KHMEXP khm_int32 KHMAPI kcdb_cred_get_identity( - khm_handle vcred, - khm_handle * identity) -{ - khm_int32 code = KHM_ERROR_SUCCESS; - kcdb_cred * cred; - - if(!identity) - return KHM_ERROR_INVALID_PARAM; - - kcdb_cred_lock_read(); - - if(!kcdb_cred_is_active_cred(vcred)) { - code = KHM_ERROR_INVALID_PARAM; - goto _exit; - } - - cred = (kcdb_cred *) vcred; - - kcdb_identity_hold((khm_handle) cred->identity); - - *identity = cred->identity; - -_exit: - kcdb_cred_unlock_read(); - return code; -} - -KHMEXP khm_int32 KHMAPI kcdb_cred_hold(khm_handle vcred) -{ - khm_int32 code = KHM_ERROR_SUCCESS; - kcdb_cred * cred; - - kcdb_cred_lock_write(); - - if(!kcdb_cred_is_cred(vcred)) { - code = KHM_ERROR_INVALID_PARAM; - goto _exit; - } - - cred = (kcdb_cred *) vcred; - - cred->refcount++; - -_exit: - kcdb_cred_unlock_write(); - return code; -} - -KHMEXP khm_int32 KHMAPI kcdb_cred_release(khm_handle vcred) -{ - khm_int32 code = KHM_ERROR_SUCCESS; - kcdb_cred * cred; - - kcdb_cred_lock_write(); - - if(!kcdb_cred_is_cred(vcred)) { - code = KHM_ERROR_INVALID_PARAM; - goto _exit; - } - - cred = (kcdb_cred *) vcred; - - cred->refcount--; - -_exit: - kcdb_cred_unlock_write(); - - kcdb_cred_check_and_delete(vcred); - - return code; -} - -void kcdb_cred_check_and_delete(khm_handle vcred) -{ - kcdb_cred * cred; - - kcdb_cred_lock_read(); - if(!kcdb_cred_is_cred(vcred)) { - goto _exit; - } - - cred = (kcdb_cred *) vcred; - - if(cred->refcount) - goto _exit; - - kcdb_cred_unlock_read(); - kcdb_cred_lock_write(); - if(!kcdb_cred_is_cred(vcred)) { - /* did we lose the race? */ - goto _exit2; - } - - cred->magic = 0; /* no longer a cred */ - kcdb_identity_release(cred->identity); - - EnterCriticalSection(&cs_creds); - LDELETE(&kcdb_creds, cred); - LeaveCriticalSection(&cs_creds); - - kcdb_buf_delete(&cred->buf); - PFREE(cred->name); - PFREE(cred); - - /*TODO: notifications */ - -_exit2: - kcdb_cred_unlock_write(); - return; - -_exit: - kcdb_cred_unlock_read(); -} - -KHMEXP khm_int32 KHMAPI kcdb_cred_delete(khm_handle vcred) -{ - khm_int32 code = KHM_ERROR_SUCCESS; - kcdb_cred * cred; - - kcdb_cred_lock_write(); - - if(!kcdb_cred_is_active_cred(vcred)) { - code = KHM_ERROR_INVALID_PARAM; - goto _exit; - } - - cred = (kcdb_cred *) vcred; - - cred->flags |= KCDB_CRED_FLAG_DELETED; - -_exit: - kcdb_cred_unlock_write(); - - kcdb_cred_check_and_delete(vcred); - - return code; -} - -KHMEXP khm_int32 KHMAPI -kcdb_creds_comp_attrib(khm_handle cred1, - khm_handle cred2, - const wchar_t * name) -{ - khm_int32 attr_id; - - if(KHM_FAILED(kcdb_attrib_get_id(name, &attr_id))) - return 0; - - return kcdb_creds_comp_attr(cred1, cred2, attr_id); -} - -KHMEXP khm_int32 KHMAPI -kcdb_creds_comp_attr(khm_handle vcred1, - khm_handle vcred2, - khm_int32 attr_id) -{ - khm_int32 code = 0; - kcdb_cred * cred1; - kcdb_cred * cred2; - kcdb_attrib * attrib = NULL; - kcdb_type * type = NULL; - - if(attr_id < 0 || attr_id > KCDB_ATTR_MAX_ID) - return 0; - - cred1 = (kcdb_cred *) vcred1; - cred2 = (kcdb_cred *) vcred2; - - kcdb_cred_lock_read(); - if( - !kcdb_cred_is_active_cred(vcred1) || - !kcdb_cred_is_active_cred(vcred2)) - goto _exit; - - cred1 = (kcdb_cred *) vcred1; - cred2 = (kcdb_cred *) vcred2; - - if(KHM_FAILED(kcdb_attrib_get_info(attr_id, &attrib))) - goto _exit; - - if(!(attrib->flags & KCDB_ATTR_FLAG_COMPUTED)) { - int nc = 0; - - if(!kcdb_cred_val_exist(cred1, attr_id)) { - code = -1; - nc = 1; - } - if(!kcdb_cred_val_exist(cred2, attr_id)) { - code += 1; - nc = 1; - } - - if(nc) - goto _exit; - } - - if(KHM_FAILED(kcdb_type_get_info(attrib->type, &type))) - goto _exit; - - if(attrib->flags & KCDB_ATTR_FLAG_COMPUTED) { - khm_octet vbuf[KCDB_MAXCB_NAME * 2]; - void * buf1 = NULL; - void * buf2 = NULL; - khm_size cb1; - khm_size cb2; - - code = 0; - - if(attrib->compute_cb(vcred1, attr_id, - NULL, &cb1) != KHM_ERROR_TOO_LONG) - goto _exit_1; - - if(attrib->compute_cb(vcred2, attr_id, - NULL, &cb2) != KHM_ERROR_TOO_LONG) - goto _exit_1; - - if(cb1) { - if (cb1 < sizeof(vbuf)) - buf1 = vbuf; - else - buf1 = PMALLOC(cb1); - - if(KHM_FAILED(attrib->compute_cb(vcred1, attr_id, buf1, &cb1))) - goto _exit_1; - } - - if(cb2) { - if (cb1 + cb2 < sizeof(vbuf)) - buf2 = vbuf + cb1; - else - buf2 = PMALLOC(cb2); - - if(KHM_FAILED(attrib->compute_cb(vcred2, attr_id, buf2, &cb2))) - goto _exit_1; - } - - code = type->comp(buf1, cb1, - buf2, cb2); -_exit_1: - if(buf1 && (buf1 < (void *)vbuf || - buf1 >= (void*)(vbuf + sizeof(vbuf)))) - PFREE(buf1); - if(buf2 && (buf2 < (void *)vbuf || - buf2 >= (void *)(vbuf + sizeof(vbuf)))) - PFREE(buf2); - } else { - code = type->comp( - kcdb_cred_buf_get(cred1, attr_id), - kcdb_cred_buf_size(cred1, attr_id), - kcdb_cred_buf_get(cred2, attr_id), - kcdb_cred_buf_size(cred2, attr_id)); - } - -_exit: - kcdb_cred_unlock_read(); - if(attrib) - kcdb_attrib_release_info(attrib); - if(type) - kcdb_type_release_info(type); - return code; -} - -KHMEXP khm_int32 KHMAPI -kcdb_creds_is_equal(khm_handle vcred1, - khm_handle vcred2) -{ - khm_int32 code = 0; - kcdb_cred * cred1; - kcdb_cred * cred2; - - kcdb_cred_lock_read(); - if(!kcdb_cred_is_active_cred(vcred1) || - !kcdb_cred_is_active_cred(vcred2)) { - - code = FALSE; - goto _exit; - - } - - if(vcred1 == vcred2) { - - code = TRUE; - goto _exit; - - } - - cred1 = vcred1; - cred2 = vcred2; - - if(cred1->identity == cred2->identity && - cred1->type == cred2->type && - !wcscmp(cred1->name, cred2->name)) { - - kcdb_credtype * type; - - code = TRUE; - - if (KHM_SUCCEEDED(kcdb_credtype_get_info(cred1->type, &type))) { - if (type->is_equal && - (*type->is_equal)(vcred1, vcred2, NULL)) - code = 0; - - kcdb_credtype_release_info(type); - } - } - -_exit: - kcdb_cred_unlock_read(); - return code; -} - -KHMEXP khm_int32 KHMAPI -kcdb_cred_get_flags(khm_handle vcred, - khm_int32 * pflags) -{ - khm_int32 f; - khm_int32 rv = KHM_ERROR_SUCCESS; - kcdb_cred * cred; - int release_lock = TRUE; - - if (pflags == NULL) - return KHM_ERROR_INVALID_PARAM; - - kcdb_cred_lock_read(); - if (!kcdb_cred_is_active_cred(vcred)) { - *pflags = 0; - rv = KHM_ERROR_INVALID_PARAM; - goto _exit; - } - - cred = vcred; - f = cred->flags; - - /* Update flags if necessary */ - - if (!(f & KCDB_CRED_FLAG_EXPIRED) && - kcdb_cred_buf_exist(cred, KCDB_ATTR_EXPIRE)) { - - FILETIME ftc; - - GetSystemTimeAsFileTime(&ftc); - if (CompareFileTime(&ftc, ((FILETIME *) - kcdb_cred_buf_get(cred, KCDB_ATTR_EXPIRE))) - >= 0) - f |= KCDB_CRED_FLAG_EXPIRED; - } - -#if 0 - /* Commented out: if the credential has expired, then checking the - renewable time is not useful */ - if (!(f & KCDB_CRED_FLAG_INVALID)) { - if (f & KCDB_CRED_FLAG_RENEWABLE) { - if (kcdb_cred_buf_exist(cred, KCDB_ATTR_RENEW_EXPIRE)) { - FILETIME ftc; - - GetSystemTimeAsFileTime(&ftc); - if (CompareFileTime(&ftc, ((FILETIME *) - kcdb_cred_buf_get(cred, KCDB_ATTR_RENEW_EXPIRE))) >= 0) - f |= KCDB_CRED_FLAG_INVALID; - } - } else { - if (f & KCDB_CRED_FLAG_EXPIRED) - f |= KCDB_CRED_FLAG_INVALID; - } - } - - /* Commented out: this is a read operation. We shouldn't attempt - to lock for writing */ - if (f != cred->flags) { - kcdb_cred_unlock_read(); - kcdb_cred_lock_write(); - /* Did we lose a race? */ - if (kcdb_cred_is_active_cred(vcred)) - cred->flags = f; - else { - rv = KHM_ERROR_INVALID_PARAM; - f = 0; - } - kcdb_cred_unlock_write(); - release_lock = FALSE; - } -#endif - - *pflags = f; - - _exit: - if (release_lock) - kcdb_cred_unlock_read(); - - return rv; -} - -KHMEXP khm_int32 KHMAPI kcdb_cred_set_flags( - khm_handle vcred, - khm_int32 flags, - khm_int32 mask) -{ - khm_int32 rv = KHM_ERROR_SUCCESS; - kcdb_cred * cred; - - kcdb_cred_lock_write(); - if(!kcdb_cred_is_active_cred(vcred)) { - rv = KHM_ERROR_INVALID_PARAM; - goto _exit; - } - - cred = vcred; - - flags &= ~(KCDB_CRED_FLAG_DELETED); - mask &= ~(KCDB_CRED_FLAG_DELETED); - - cred->flags = - (cred->flags & (~mask)) | - (flags & mask); - - _exit: - kcdb_cred_unlock_write(); - return rv; -} diff --git a/src/windows/identity/kcreddb/credential.h b/src/windows/identity/kcreddb/credential.h deleted file mode 100644 index 49b3953c9..000000000 --- a/src/windows/identity/kcreddb/credential.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KCDB_CREDENTIAL_H -#define __KHIMAIRA_KCDB_CREDENTIAL_H - -/* Credentials */ - -typedef struct kcdb_cred_t { - khm_int32 magic; - khm_ui_8 id; /* serial number */ - kcdb_identity * identity; - khm_int32 type; - wchar_t * name; - - khm_int32 flags; - khm_int32 refcount; - - kcdb_buf buf; - - LDCL(struct kcdb_cred_t); -} kcdb_cred; - -#define KCDB_CRED_MAGIC 0x38fb84a6 - -extern CRITICAL_SECTION cs_creds; -extern kcdb_cred * kcdb_creds; -extern RWLOCK l_creds; -extern khm_ui_8 kcdb_cred_id; - -#define kcdb_cred_val_exist(c,a) kcdb_buf_val_exist(&(c)->buf, a) -#define kcdb_cred_buf_exist(c,a) kcdb_buf_exist(&(c)->buf, a) -#define kcdb_cred_buf_get(c,a) kcdb_buf_get(&(c)->buf, a) -#define kcdb_cred_buf_size(c,a) kcdb_buf_size(&(c)->buf, a) - -#define kcdb_cred_is_cred(c) ((c) && ((kcdb_cred *) c)->magic == KCDB_CRED_MAGIC) -#define kcdb_cred_is_active_cred(c) (kcdb_cred_is_cred(c) && !(((kcdb_cred *) c)->flags & KCDB_CRED_FLAG_DELETED)) - -#define kcdb_cred_lock_read() (LockObtainRead(&l_creds)) -#define kcdb_cred_unlock_read() (LockReleaseRead(&l_creds)) -#define kcdb_cred_lock_write() (LockObtainWrite(&l_creds)) -#define kcdb_cred_unlock_write() (LockReleaseWrite(&l_creds)) - -void kcdb_cred_init(void); -void kcdb_cred_exit(void); -void kcdb_cred_check_and_delete(khm_handle vcred); - -#endif diff --git a/src/windows/identity/kcreddb/credset.c b/src/windows/identity/kcreddb/credset.c deleted file mode 100644 index 007a54b23..000000000 --- a/src/windows/identity/kcreddb/credset.c +++ /dev/null @@ -1,1166 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<kcreddbinternal.h> -#include<assert.h> - -CRITICAL_SECTION cs_credset; -kcdb_credset * kcdb_credsets = NULL; -kcdb_credset * kcdb_root_credset = NULL; - -void -kcdb_credset_init(void) -{ - khm_handle rc; - - InitializeCriticalSection(&cs_credset); - kcdb_credsets = NULL; - - kcdb_credset_create(&rc); - kcdb_root_credset = (kcdb_credset *) rc; - kcdb_root_credset->flags |= KCDB_CREDSET_FLAG_ROOT; -} - -void -kcdb_credset_exit(void) -{ - /*TODO: free the credsets */ - DeleteCriticalSection(&cs_credset); -} - -/* called on an unreleased credset, or with credset::cs held */ -void -kcdb_credset_buf_new(kcdb_credset * cs) -{ - cs->clist = PMALLOC(KCDB_CREDSET_INITIAL_SIZE * - sizeof(kcdb_credset_credref)); - ZeroMemory(cs->clist, - KCDB_CREDSET_INITIAL_SIZE * - sizeof(kcdb_credset_credref)); - cs->nc_clist = KCDB_CREDSET_INITIAL_SIZE; - cs->nclist = 0; -} - -/* called on an unreleased credset, or with credset::cs held */ -void -kcdb_credset_buf_delete(kcdb_credset * cs) -{ - PFREE(cs->clist); - cs->nc_clist = 0; - cs->nclist = 0; -} - -void -kcdb_credset_buf_assert_size(kcdb_credset * cs, khm_int32 nclist) -{ - if(cs->nc_clist < nclist) { - kcdb_credset_credref * new_clist; - - /* nclist had better be greater than KCDB_CREDSET_INITIAL_SIZE */ - nclist = KCDB_CREDSET_INITIAL_SIZE + - (((nclist - (KCDB_CREDSET_INITIAL_SIZE + 1)) / KCDB_CREDSET_GROWTH_FACTOR) + 1) * - KCDB_CREDSET_GROWTH_FACTOR; - - new_clist = PCALLOC(nclist, sizeof(kcdb_credset_credref)); - - memcpy(new_clist, cs->clist, cs->nclist * sizeof(kcdb_credset_credref)); - - PFREE(cs->clist); - - cs->clist = new_clist; - } -} - -KHMEXP khm_int32 KHMAPI -kcdb_credset_create(khm_handle * result) -{ - kcdb_credset * cs; - - cs = PMALLOC(sizeof(kcdb_credset)); - ZeroMemory(cs, sizeof(kcdb_credset)); - - cs->magic = KCDB_CREDSET_MAGIC; - InitializeCriticalSection(&(cs->cs)); - LINIT(cs); - kcdb_credset_buf_new(cs); - cs->version = 0; - cs->seal_count = 0; - - EnterCriticalSection(&cs_credset); - LPUSH(&kcdb_credsets, cs); - LeaveCriticalSection(&cs_credset); - - *result = (khm_handle) cs; - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -kcdb_credset_delete(khm_handle vcredset) -{ - kcdb_credset * cs; - int i; - - if(!kcdb_credset_is_credset(vcredset)) { - return KHM_ERROR_INVALID_PARAM; - } - - cs = (kcdb_credset *) vcredset; - - EnterCriticalSection(&cs_credset); - LDELETE(&kcdb_credsets, cs); - LeaveCriticalSection(&cs_credset); - - EnterCriticalSection(&(cs->cs)); - cs->magic = 0; - - for(i=0;i<cs->nclist;i++) { - if(cs->clist[i].cred) { - kcdb_cred_release((khm_handle) cs->clist[i].cred); - } - } - kcdb_credset_buf_delete(cs); - - LeaveCriticalSection(&(cs->cs)); - DeleteCriticalSection(&(cs->cs)); - - PFREE(cs); - - return KHM_ERROR_SUCCESS; -} - -/*! \internal - -Collect credentials from cs2 to cs1 which have already been selected into -cl1 and cl2. - -- Credentials in cl2 that are not in cl1 will get added to cs1 -- Credentials in cl1 that are not in cl2 will get removed from cs1 -- Credentials in cl1 and cl2 will be updated in cs1 - -cl1 and cl2 will be modified. -*/ -khm_int32 -kcdb_credset_collect_core(kcdb_credset * cs1, - kcdb_cred ** cl1, - khm_int32 ncl1, - kcdb_credset * cs2, - kcdb_cred ** cl2, - khm_int32 ncl2, - khm_int32 * delta) -{ - int i, j; - int ldelta = 0; - khm_int32 rv; - - /* find matching creds and update them */ - for(i=0; i<ncl1; i++) - if(cl1[i]) { - for(j=0; j<ncl2; j++) - if(cl2[j] && kcdb_creds_is_equal((khm_handle) cl1[i], (khm_handle) cl2[j])) { - /* they are equivalent. make them equal */ - - /* depending on whether any changes were made, - update ldelta with the proper bit flag */ - - rv = kcdb_cred_update(cl1[i], cl2[j]); - if (rv == KHM_ERROR_SUCCESS) { - kcdb_credset_update_cred_ref((khm_handle) cs1, (khm_handle) cl1[i]); - ldelta |= KCDB_DELTA_MODIFY; - } - - cl2[j] = NULL; - cl1[i] = NULL; - break; - } - } - - /* all the creds that are left in cl1 need to be removed */ - for(i=0; i<ncl1; i++) - if(cl1[i]) { - kcdb_credset_del_cred_ref((khm_handle) cs1, (khm_handle) cl1[i]); - cl1[i] = NULL; - ldelta |= KCDB_DELTA_DEL; - } - - /* all the creds in cl2 need to be added to cs1 */ - for(j=0; j<ncl2; j++) - if(cl2[j]) { - /* duplicate the credential and add it if we are adding it to the - root credential store. */ - if(cs1 == kcdb_root_credset) { - khm_handle h; - - if(KHM_SUCCEEDED(kcdb_cred_dup((khm_handle) cl2[j], &h))) { - kcdb_credset_add_cred((khm_handle) cs1, h, -1); - kcdb_cred_release(h); - } - } else - kcdb_credset_add_cred((khm_handle) cs1, cl2[j], -1); - cl2[j] = NULL; - ldelta |= KCDB_DELTA_ADD; - } - - if(delta) - *delta = ldelta; - - if((cs1 == kcdb_root_credset) && ldelta) { - /* something changed in the root credential set */ - kmq_post_message(KMSG_CRED,KMSG_CRED_ROOTDELTA,ldelta,NULL); - } - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -kcdb_credset_collect(khm_handle cs_dest, - khm_handle cs_src, - khm_handle identity, - khm_int32 type, - khm_int32 * delta) -{ - kcdb_credset * cs; - kcdb_credset * rcs; - khm_int32 code = KHM_ERROR_SUCCESS; - kcdb_cred ** r_sel = NULL; - kcdb_cred ** c_sel = NULL; - int nr_sel, nc_sel; - int i; - - if((cs_src && !kcdb_credset_is_credset(cs_src)) || - (cs_dest && !kcdb_credset_is_credset(cs_dest)) || - (cs_src == cs_dest)) /* works because credsets use shared - handles */ - return KHM_ERROR_INVALID_PARAM; - - if(identity && !kcdb_is_active_identity(identity)) - return KHM_ERROR_INVALID_PARAM; - - if(cs_src) - cs = (kcdb_credset *) cs_src; - else - cs = kcdb_root_credset; - - if(cs_dest) - rcs = (kcdb_credset *) cs_dest; - else - rcs = kcdb_root_credset; - - if (kcdb_credset_is_sealed(rcs)) - return KHM_ERROR_INVALID_OPERATION; - - EnterCriticalSection(&(cs->cs)); - EnterCriticalSection(&(rcs->cs)); - - /* enumerate through the root and given credential sets and select - the ones we want */ - - if(rcs->nclist > 0) - r_sel = PMALLOC(sizeof(kcdb_cred *) * rcs->nclist); - if(cs->nclist > 0) - c_sel = PMALLOC(sizeof(kcdb_cred *) * cs->nclist); - nr_sel = 0; - nc_sel = 0; - - for(i=0; i<rcs->nclist; i++) { - if(rcs->clist[i].cred && - (!identity || rcs->clist[i].cred->identity == identity) && - (type==KCDB_CREDTYPE_ALL || rcs->clist[i].cred->type == type)) - { - r_sel[nr_sel++] = rcs->clist[i].cred; - } - } - - for(i=0; i<cs->nclist; i++) { - if(cs->clist[i].cred && - (!identity || cs->clist[i].cred->identity == identity) && - (type==KCDB_CREDTYPE_ALL || cs->clist[i].cred->type == type)) - { - c_sel[nc_sel++] = cs->clist[i].cred; - } - } - - rcs->version++; - - code = kcdb_credset_collect_core( - rcs, - r_sel, - nr_sel, - cs, - c_sel, - nc_sel, - delta); - - LeaveCriticalSection(&(rcs->cs)); - LeaveCriticalSection(&(cs->cs)); - - if(r_sel) - PFREE(r_sel); - if(c_sel) - PFREE(c_sel); - - if (cs_dest == NULL) { - kcdb_identity_refresh_all(); - } - - return code; -} - -KHMEXP khm_int32 KHMAPI -kcdb_credset_collect_filtered(khm_handle cs_dest, - khm_handle cs_src, - kcdb_cred_filter_func filter, - void * rock, - khm_int32 * delta) -{ - kcdb_credset * cs; - kcdb_credset * rcs; - khm_int32 code = KHM_ERROR_SUCCESS; - kcdb_cred ** r_sel = NULL; - kcdb_cred ** c_sel = NULL; - int nr_sel, nc_sel; - int i; - khm_int32 cs_f = 0; - khm_int32 rcs_f = 0; - - if((cs_src && !kcdb_credset_is_credset(cs_src)) || - (cs_dest && !kcdb_credset_is_credset(cs_dest)) || - (cs_src == cs_dest)) /* works because credsets use shared - handles */ - return KHM_ERROR_INVALID_PARAM; - - if(cs_src) - cs = (kcdb_credset *) cs_src; - else { - cs = kcdb_root_credset; - cs_f = KCDB_CREDCOLL_FILTER_ROOT; - } - - if(cs_dest) - rcs = (kcdb_credset *) cs_dest; - else { - rcs = kcdb_root_credset; - rcs_f = KCDB_CREDCOLL_FILTER_ROOT; - } - - if (kcdb_credset_is_sealed(rcs)) - return KHM_ERROR_INVALID_OPERATION; - - EnterCriticalSection(&(cs->cs)); - EnterCriticalSection(&(rcs->cs)); - -#ifdef DEBUG - assert(!(rcs->flags & KCDB_CREDSET_FLAG_ENUM)); - assert(!(cs->flags & KCDB_CREDSET_FLAG_ENUM)); -#endif - - if(rcs->nclist) - r_sel = PMALLOC(sizeof(kcdb_cred *) * rcs->nclist); - if(cs->nclist) - c_sel = PMALLOC(sizeof(kcdb_cred *) * cs->nclist); - nr_sel = 0; - nc_sel = 0; - - rcs->flags |= KCDB_CREDSET_FLAG_ENUM; - - for(i=0; i<rcs->nclist; i++) { - if(rcs->clist[i].cred && - (*filter)((khm_handle)rcs->clist[i].cred, - KCDB_CREDCOLL_FILTER_DEST | rcs_f, - rock)) - { - r_sel[nr_sel++] = rcs->clist[i].cred; - } - } - - rcs->flags &= ~KCDB_CREDSET_FLAG_ENUM; - cs->flags |= KCDB_CREDSET_FLAG_ENUM; - - for(i=0; i<cs->nclist; i++) { - if(cs->clist[i].cred && filter((khm_handle)rcs->clist[i].cred, KCDB_CREDCOLL_FILTER_SRC | cs_f, rock)) - { - c_sel[nc_sel++] = cs->clist[i].cred; - } - } - - cs->flags &= ~KCDB_CREDSET_FLAG_ENUM; - - rcs->version++; - - code = kcdb_credset_collect_core( - rcs, - r_sel, - nr_sel, - cs, - c_sel, - nc_sel, - delta); - - LeaveCriticalSection(&(rcs->cs)); - LeaveCriticalSection(&(cs->cs)); - - if(r_sel) - PFREE(r_sel); - if(c_sel) - PFREE(c_sel); - - if (cs_dest == NULL) { - kcdb_identity_refresh_all(); - } - - return code; -} - -KHMEXP khm_int32 KHMAPI -kcdb_credset_flush(khm_handle vcredset) -{ - int i; - kcdb_credset * cs; - - if(!kcdb_credset_is_credset(vcredset)) - return KHM_ERROR_INVALID_PARAM; - - cs = (kcdb_credset *) vcredset; - - if (kcdb_credset_is_sealed(cs)) - return KHM_ERROR_INVALID_OPERATION; - - EnterCriticalSection(&(cs->cs)); - -#ifdef DEBUG - assert(!(cs->flags & KCDB_CREDSET_FLAG_ENUM)); -#endif - - for(i=0;i<cs->nclist;i++) { - if(cs->clist[i].cred) { - kcdb_cred_release((khm_handle) cs->clist[i].cred); - } - } - cs->nclist = 0; - LeaveCriticalSection(&(cs->cs)); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -kcdb_credset_extract(khm_handle destcredset, - khm_handle sourcecredset, - khm_handle identity, - khm_int32 type) -{ - khm_int32 code = KHM_ERROR_SUCCESS; - kcdb_credset * dest; - kcdb_credset * src; - int isRoot = 0; - khm_size srcSize = 0; - int i; - - if(!kcdb_credset_is_credset(destcredset)) - return KHM_ERROR_INVALID_PARAM; - - if(sourcecredset) { - if(!kcdb_credset_is_credset(sourcecredset)) - return KHM_ERROR_INVALID_PARAM; - } else { - sourcecredset = kcdb_root_credset; - } - - if (sourcecredset == kcdb_root_credset) - isRoot = 1; - - src = (kcdb_credset *) sourcecredset; - dest = (kcdb_credset *) destcredset; - - if (kcdb_credset_is_sealed(dest)) - return KHM_ERROR_INVALID_OPERATION; - - EnterCriticalSection(&(src->cs)); - EnterCriticalSection(&(dest->cs)); - -#ifdef DEBUG - assert(!(dest->flags & KCDB_CREDSET_FLAG_ENUM)); -#endif - - if(KHM_FAILED(kcdb_credset_get_size(sourcecredset, &srcSize))) { - code = KHM_ERROR_UNKNOWN; - goto _exit; - } - - kcdb_cred_lock_read(); - - for(i=0; i < (int) srcSize; i++) { - kcdb_cred * c; - - c = src->clist[i].cred; - if(kcdb_cred_is_active_cred((khm_handle) c) && - (!identity || c->identity == identity) && - (type < 0 || c->type == type)) - { - if(isRoot) { - khm_handle newcred; - - kcdb_cred_unlock_read(); - kcdb_cred_dup((khm_handle) c, &newcred); - kcdb_credset_add_cred(destcredset, newcred, -1); - kcdb_cred_release(newcred); - kcdb_cred_lock_read(); - } else { - kcdb_cred_unlock_read(); - kcdb_credset_add_cred(destcredset, (khm_handle) c, -1); - kcdb_cred_lock_read(); - } - } - } - - kcdb_cred_unlock_read(); - -_exit: - LeaveCriticalSection(&(dest->cs)); - LeaveCriticalSection(&(src->cs)); - - return code; -} - -KHMEXP khm_int32 KHMAPI -kcdb_credset_extract_filtered(khm_handle destcredset, - khm_handle sourcecredset, - kcdb_cred_filter_func filter, - void * rock) -{ - khm_int32 code = KHM_ERROR_SUCCESS; - kcdb_credset * dest; - kcdb_credset * src; - int isRoot = 0; - khm_size srcSize = 0; - int i; - - if(!kcdb_credset_is_credset(destcredset)) - return KHM_ERROR_INVALID_PARAM; - - if(sourcecredset) { - if(!kcdb_credset_is_credset(sourcecredset)) - return KHM_ERROR_INVALID_PARAM; - } else { - sourcecredset = kcdb_root_credset; - isRoot = 1; - } - - src = (kcdb_credset *) sourcecredset; - dest = (kcdb_credset *) destcredset; - - if (kcdb_credset_is_sealed(dest)) - return KHM_ERROR_INVALID_OPERATION; - - EnterCriticalSection(&(src->cs)); - EnterCriticalSection(&(dest->cs)); - -#ifdef DEBUG - assert(!(dest->flags & KCDB_CREDSET_FLAG_ENUM)); -#endif - - if(KHM_FAILED(kcdb_credset_get_size(sourcecredset, &srcSize))) { - code = KHM_ERROR_UNKNOWN; - goto _exit; - } - - kcdb_cred_lock_read(); - - dest->flags |= KCDB_CREDSET_FLAG_ENUM; - - for(i=0; i < (int) srcSize; i++) { - kcdb_cred * c; - - c = src->clist[i].cred; - if(kcdb_cred_is_active_cred((khm_handle) c) && - filter(c, 0, rock)) - { - if(isRoot) { - khm_handle newcred; - - kcdb_cred_unlock_read(); - kcdb_cred_dup((khm_handle) c, &newcred); - kcdb_credset_add_cred(destcredset, newcred, -1); - kcdb_cred_release(newcred); - kcdb_cred_lock_read(); - } else { - kcdb_cred_unlock_read(); - kcdb_credset_add_cred(destcredset, (khm_handle) c, -1); - kcdb_cred_lock_read(); - } - } - } - - dest->flags &= ~KCDB_CREDSET_FLAG_ENUM; - - kcdb_cred_unlock_read(); - -_exit: - LeaveCriticalSection(&(dest->cs)); - LeaveCriticalSection(&(src->cs)); - - return code; -} - -KHMEXP khm_int32 KHMAPI -kcdb_credset_apply(khm_handle vcredset, kcdb_cred_apply_func f, - void * rock) -{ - kcdb_credset * cs; - khm_int32 rv = KHM_ERROR_SUCCESS; - int i; - - if(vcredset != NULL && !kcdb_credset_is_credset(vcredset)) - return KHM_ERROR_INVALID_PARAM; - - if(vcredset == NULL) { - cs = kcdb_root_credset; - } else { - cs = (kcdb_credset *) vcredset; - } - - EnterCriticalSection(&cs->cs); - -#ifdef DEBUG - assert(!(cs->flags & KCDB_CREDSET_FLAG_ENUM)); -#endif - - cs->flags |= KCDB_CREDSET_FLAG_ENUM; - - for(i=0; i<cs->nclist; i++) { - if(!kcdb_cred_is_active_cred(cs->clist[i].cred)) - continue; - - if(KHM_FAILED(f((khm_handle) cs->clist[i].cred, rock))) - break; - } - - cs->flags &= ~KCDB_CREDSET_FLAG_ENUM; - - LeaveCriticalSection(&cs->cs); - - if(i<cs->nclist) - rv = KHM_ERROR_EXIT; - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kcdb_credset_get_cred(khm_handle vcredset, - khm_int32 idx, - khm_handle * cred) -{ - kcdb_credset * cs; - khm_int32 code = KHM_ERROR_SUCCESS; - - if(!kcdb_credset_is_credset(vcredset)) - return KHM_ERROR_INVALID_PARAM; - - cs = (kcdb_credset *) vcredset; - - *cred = NULL; - - EnterCriticalSection(&(cs->cs)); - if(idx < 0 || idx >= cs->nclist) - code = KHM_ERROR_OUT_OF_BOUNDS; - else if(!cs->clist[idx].cred || !kcdb_cred_is_active_cred((khm_handle) cs->clist[idx].cred)) { - code = KHM_ERROR_DELETED; - if(cs->clist[idx].cred) { - kcdb_cred_release((khm_handle) cs->clist[idx].cred); - cs->clist[idx].cred = NULL; - } - } - else { - kcdb_cred_hold((khm_handle) cs->clist[idx].cred); - *cred = cs->clist[idx].cred; - } - LeaveCriticalSection(&(cs->cs)); - return code; -} - -KHMEXP khm_int32 KHMAPI -kcdb_credset_find_filtered(khm_handle credset, - khm_int32 idx_start, - kcdb_cred_filter_func f, - void * rock, - khm_handle * cred, - khm_int32 * idx) -{ - kcdb_credset * cs; - khm_int32 rv = KHM_ERROR_SUCCESS; - int i; - - if((credset && !kcdb_credset_is_credset(credset)) || !f) - return KHM_ERROR_INVALID_PARAM; - - if(credset) - cs = (kcdb_credset *) credset; - else - cs = kcdb_root_credset; - - EnterCriticalSection(&cs->cs); - - if(idx_start < 0) - i = 0; - else - i = idx_start + 1; - -#ifdef DEBUG - assert(!(cs->flags & KCDB_CREDSET_FLAG_ENUM)); -#endif - - cs->flags |= KCDB_CREDSET_FLAG_ENUM; - - for(; i < cs->nclist; i++) { - if(kcdb_cred_is_active_cred(cs->clist[i].cred) && - (*f)((khm_handle) cs->clist[i].cred, 0, rock) != 0) - break; - } - - cs->flags &= ~KCDB_CREDSET_FLAG_ENUM; - - if(i < cs->nclist) { - if (cred) { - *cred = (khm_handle) cs->clist[i].cred; - kcdb_cred_hold(*cred); - } - - if(idx) { - *idx = i; - } - } else { - rv = KHM_ERROR_NOT_FOUND; - } - - LeaveCriticalSection(&cs->cs); - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kcdb_credset_find_cred(khm_handle vcredset, - khm_handle vcred_src, - khm_handle *cred_dest) { - kcdb_credset * cs; - khm_handle cred = NULL; - int idx; - - if (!kcdb_credset_is_credset(vcredset)) - return KHM_ERROR_INVALID_PARAM; - - if (!kcdb_cred_is_active_cred(vcred_src)) - return KHM_ERROR_INVALID_PARAM; - - cs = (kcdb_credset *) vcredset; - - EnterCriticalSection(&cs->cs); - for (idx = 0; idx < cs->nclist; idx++) { - if (cs->clist[idx].cred && - kcdb_creds_is_equal(vcred_src, cs->clist[idx].cred)) { - cred = cs->clist[idx].cred; - break; - } - } - - if (cred) - kcdb_cred_hold(cred); - - LeaveCriticalSection(&cs->cs); - - if (cred) { - if (cred_dest) - *cred_dest = cred; - else - kcdb_cred_release(cred); - - return KHM_ERROR_SUCCESS; - } else { - return KHM_ERROR_NOT_FOUND; - } -} - -KHMEXP khm_int32 KHMAPI -kcdb_credset_del_cred(khm_handle vcredset, - khm_int32 idx) -{ - kcdb_credset * cs; - khm_int32 code = KHM_ERROR_SUCCESS; - - if(!kcdb_credset_is_credset(vcredset)) - return KHM_ERROR_INVALID_PARAM; - - cs = (kcdb_credset *) vcredset; - - if (kcdb_credset_is_sealed(cs)) - return KHM_ERROR_INVALID_OPERATION; - - EnterCriticalSection(&(cs->cs)); - if(idx < 0 || idx >= cs->nclist) { - code = KHM_ERROR_INVALID_PARAM; - goto _exit; - } - - if(cs->clist[idx].cred) - kcdb_cred_release((khm_handle) cs->clist[idx].cred); - - if (!(cs->flags & KCDB_CREDSET_FLAG_ENUM)) { - - if(idx + 1 < cs->nclist) - memmove(&(cs->clist[idx]), - &(cs->clist[idx+1]), - sizeof(kcdb_credset_credref) * - (cs->nclist - (idx + 1))); - - cs->nclist--; - } else { - cs->clist[idx].cred = NULL; - } - -_exit: - LeaveCriticalSection(&(cs->cs)); - - return code; -} - -khm_int32 -kcdb_credset_update_cred_ref(khm_handle credset, - khm_handle cred) -{ - kcdb_credset * cs; - khm_int32 code = KHM_ERROR_SUCCESS; - int i; - - if(!kcdb_credset_is_credset(credset)) - return KHM_ERROR_INVALID_PARAM; - - cs = (kcdb_credset *) credset; - - EnterCriticalSection(&(cs->cs)); - - for(i=0; i<cs->nclist; i++) { - if(cs->clist[i].cred == cred) - break; - } - - if(i<cs->nclist) { - cs->clist[i].version = cs->version; - } else { - code = KHM_ERROR_NOT_FOUND; - } - - LeaveCriticalSection(&(cs->cs)); - return code; -} - -KHMEXP khm_int32 KHMAPI -kcdb_credset_del_cred_ref(khm_handle credset, - khm_handle cred) -{ - kcdb_credset * cs; - khm_int32 code = KHM_ERROR_SUCCESS; - int i; - - if(!kcdb_credset_is_credset(credset)) - return KHM_ERROR_INVALID_PARAM; - - cs = (kcdb_credset *) credset; - - if (kcdb_credset_is_sealed(cs)) - return KHM_ERROR_INVALID_OPERATION; - - EnterCriticalSection(&(cs->cs)); - - for(i=0; i<cs->nclist; i++) { - if(cs->clist[i].cred == cred) - break; - } - - if(i<cs->nclist) { - code = kcdb_credset_del_cred(credset, i); - } else { - code = KHM_ERROR_NOT_FOUND; - } - - LeaveCriticalSection(&(cs->cs)); - return code; -} - -KHMEXP khm_int32 KHMAPI -kcdb_credset_add_cred(khm_handle credset, - khm_handle cred, - khm_int32 idx) -{ - int new_idx; - kcdb_credset * cs; - khm_int32 code = KHM_ERROR_SUCCESS; - - if(!kcdb_credset_is_credset(credset)) - return KHM_ERROR_INVALID_PARAM; - - cs = (kcdb_credset *) credset; - - if (kcdb_credset_is_sealed(cs)) - return KHM_ERROR_INVALID_OPERATION; - - EnterCriticalSection(&(cs->cs)); - - kcdb_credset_buf_assert_size(cs, cs->nclist + 1); - - if(idx < 0 || idx > cs->nclist) - new_idx = cs->nclist; - else if(idx < cs->nclist){ -#ifdef DEBUG - assert(!(cs->flags & KCDB_CREDSET_FLAG_ENUM)); -#endif - memmove(&(cs->clist[idx+1]), &(cs->clist[idx]), (cs->nclist - idx)*sizeof(cs->clist[0])); - new_idx = idx; - } else - new_idx = idx; - - kcdb_cred_hold(cred); - - cs->clist[new_idx].cred = (kcdb_cred *) cred; - cs->clist[new_idx].version = cs->version; - cs->nclist++; - - LeaveCriticalSection(&(cs->cs)); - return code; -} - -KHMEXP khm_int32 KHMAPI -kcdb_credset_get_size(khm_handle credset, - khm_size * size) -{ - kcdb_credset * cs; - - *size = 0; - - /* we don't rely on this working, since we can't purge a sealed - credset, although we can measure its size. */ - kcdb_credset_purge(credset); - - if (credset == NULL) - cs = kcdb_root_credset; - else - cs = (kcdb_credset *) credset; - - EnterCriticalSection(&(cs->cs)); - /* while it may seem a bit redundant to get a lock, it ensures that - that the size that we return is consistent with the current state - of the credential set */ - *size = cs->nclist; - LeaveCriticalSection(&(cs->cs)); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -kcdb_credset_purge(khm_handle credset) -{ - khm_int32 code = KHM_ERROR_SUCCESS; - kcdb_credset * cs; - int i,j; - - if(!kcdb_credset_is_credset(credset)) - return KHM_ERROR_INVALID_PARAM; - - cs = (kcdb_credset *) credset; - - if (kcdb_credset_is_sealed(cs)) - return KHM_ERROR_INVALID_OPERATION; - - EnterCriticalSection(&(cs->cs)); - - /* we can't purge a credset while an enumeration operation is in - progress. */ - if (cs->flags & KCDB_CREDSET_FLAG_ENUM) { - code = KHM_ERROR_INVALID_OPERATION; - goto _exit; - } - - for(i=0,j=0; i < cs->nclist; i++) { - if(cs->clist[i].cred) { - if(!kcdb_cred_is_active_cred((khm_handle) cs->clist[i].cred)) { - kcdb_cred_release((khm_handle) cs->clist[i].cred); - } else if(i != j) { - cs->clist[j++] = cs->clist[i]; - } else - j++; - } - } - cs->nclist = j; - - _exit: - LeaveCriticalSection(&(cs->cs)); - return code; -} - -KHMEXP khm_int32 KHMAPI -kcdb_credset_seal(khm_handle credset) { - kcdb_credset * cs; - - if (!kcdb_credset_is_credset(credset)) - return KHM_ERROR_INVALID_PARAM; - - cs = (kcdb_credset *) credset; - - EnterCriticalSection(&cs->cs); - cs->seal_count++; - LeaveCriticalSection(&cs->cs); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -kcdb_credset_unseal(khm_handle credset) { - kcdb_credset * cs; - khm_int32 rv; - - if (!kcdb_credset_is_credset(credset)) - return KHM_ERROR_INVALID_PARAM; - - cs = (kcdb_credset *) credset; - - EnterCriticalSection(&cs->cs); - if (cs->seal_count > 0) { - cs->seal_count--; - rv = KHM_ERROR_SUCCESS; - } else { - rv = KHM_ERROR_INVALID_OPERATION; - } - LeaveCriticalSection(&cs->cs); - - return rv; -} - -/* These are protected with cs_credset */ -static void * _creds_comp_rock = NULL; -static kcdb_cred_comp_func _creds_comp_func = NULL; - -/* Need cs_credset when calling this function. */ -int __cdecl -kcdb_creds_comp_wrapper(const void * a, const void * b) -{ - return (*_creds_comp_func)((khm_handle) ((kcdb_credset_credref *)a)->cred, - (khm_handle) ((kcdb_credset_credref *)b)->cred, - _creds_comp_rock); -} - -KHMEXP khm_int32 KHMAPI -kcdb_credset_sort(khm_handle credset, - kcdb_cred_comp_func comp, - void * rock) -{ - khm_int32 code = KHM_ERROR_SUCCESS; - kcdb_credset * cs; - - if(!kcdb_credset_is_credset(credset)) - return KHM_ERROR_INVALID_PARAM; - - cs = (kcdb_credset *) credset; - - if (kcdb_credset_is_sealed(cs)) - return KHM_ERROR_INVALID_OPERATION; - - EnterCriticalSection(&(cs->cs)); - -#ifdef DEBUG - assert(!(cs->flags & KCDB_CREDSET_FLAG_ENUM)); -#endif - - EnterCriticalSection(&cs_credset); - - _creds_comp_rock = rock; - _creds_comp_func = comp; - - qsort(cs->clist, cs->nclist, - sizeof(kcdb_credset_credref), kcdb_creds_comp_wrapper); - - LeaveCriticalSection(&cs_credset); - - LeaveCriticalSection(&(cs->cs)); - return code; -} - -KHMEXP khm_int32 KHMAPI -kcdb_cred_comp_generic(khm_handle cred1, - khm_handle cred2, - void * rock) -{ - kcdb_cred_comp_order * o = (kcdb_cred_comp_order *) rock; - int i; - khm_int32 r = 0; - khm_int32 f1, f2; - khm_int32 t1, t2; - khm_int32 pt; - - for(i=0; i<o->nFields; i++) { - if (o->fields[i].order & KCDB_CRED_COMP_INITIAL_FIRST) { - - if (o->fields[i].attrib == KCDB_ATTR_TYPE_NAME || - o->fields[i].attrib == KCDB_ATTR_TYPE) { - - kcdb_cred_get_type(cred1, &t1); - kcdb_cred_get_type(cred2, &t2); - kcdb_identity_get_type(&pt); - - if (t1 == t2) - r = 0; - else if (t1 == pt) - r = -1; - else if (t2 == pt) - r = 1; - else - r = 0; - - } else { - - kcdb_cred_get_flags(cred1, &f1); - kcdb_cred_get_flags(cred2, &f2); - - if (((f1 ^ f2) & KCDB_CRED_FLAG_INITIAL) == 0) - r = 0; - else if (f1 & KCDB_CRED_FLAG_INITIAL) - r = -1; - else - r = 1; - - } - - } else { - r = 0; - } - - if (r == 0) - r = kcdb_creds_comp_attr(cred1,cred2,o->fields[i].attrib); - - if(r != 0) { - if(o->fields[i].order & KCDB_CRED_COMP_DECREASING) - r = -r; - break; - } - } - - return r; -} diff --git a/src/windows/identity/kcreddb/credset.h b/src/windows/identity/kcreddb/credset.h deleted file mode 100644 index ba8ec419e..000000000 --- a/src/windows/identity/kcreddb/credset.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KCDB_CREDSET_H -#define __KHIMAIRA_KCDB_CREDSET_H - -/* credset */ - -typedef struct kcdb_credset_credref_t { - khm_int32 version; - kcdb_cred * cred; -} kcdb_credset_credref; - -typedef struct kcdb_credset_t { - khm_int32 magic; - khm_int32 flags; - CRITICAL_SECTION cs; - - kcdb_credset_credref * clist; - khm_int32 nc_clist; /* total capacity */ - khm_int32 nclist; /* current load */ - - khm_int32 version; /* data version */ - - khm_int32 seal_count; /* number of seals applied to the - credset */ - - struct kcdb_credset_t * next; - struct kcdb_credset_t * prev; -} kcdb_credset; - -#define KCDB_CREDSET_MAGIC 0x63a84f8b - -#define KCDB_CREDSET_FLAG_ROOT 1 - -/* the credset is in the process of being enumerated */ -#define KCDB_CREDSET_FLAG_ENUM 2 - -#define kcdb_credset_is_credset(c) ((c) && ((kcdb_credset *)c)->magic == KCDB_CREDSET_MAGIC) - -#define kcdb_credset_is_sealed(c) ((c)->seal_count != 0) - -#define KCDB_CREDSET_INITIAL_SIZE 256 -#define KCDB_CREDSET_GROWTH_FACTOR 256 - -void kcdb_credset_init(void); -void kcdb_credset_exit(void); -khm_int32 kcdb_credset_update_cred_ref( - khm_handle credset, - khm_handle cred); - -#endif diff --git a/src/windows/identity/kcreddb/credtype.c b/src/windows/identity/kcreddb/credtype.c deleted file mode 100644 index 176d1b350..000000000 --- a/src/windows/identity/kcreddb/credtype.c +++ /dev/null @@ -1,408 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<kcreddbinternal.h> - -CRITICAL_SECTION cs_credtype; -kcdb_credtype_i ** kcdb_credtype_tbl = NULL; -kcdb_credtype_i * kcdb_credtypes = NULL; - -void kcdb_credtype_init(void) -{ - InitializeCriticalSection(&cs_credtype); - kcdb_credtypes = NULL; - - kcdb_credtype_tbl = PMALLOC(sizeof(kcdb_credtype_i *) * (KCDB_CREDTYPE_MAX_ID+1)); - ZeroMemory(kcdb_credtype_tbl, sizeof(kcdb_credtype_i *) * (KCDB_CREDTYPE_MAX_ID+1)); -} - -void kcdb_credtype_exit(void) -{ - /*TODO:Free up the cred types */ - PFREE(kcdb_credtype_tbl); - DeleteCriticalSection(&cs_credtype); -} - -/* Called with cs_credtype held */ -void kcdb_credtype_check_and_delete(khm_int32 id) -{ - kcdb_credtype_i * ict; - ict = kcdb_credtype_tbl[id]; - if(!ict) - return; - - if((ict->flags & KCDB_CTI_FLAG_DELETED) && - !ict->refcount) - { - kcdb_credtype_tbl[id] = NULL; - LDELETE(&kcdb_credtypes, ict); - - PFREE(ict->ct.name); - if(ict->ct.short_desc) - PFREE(ict->ct.short_desc); - if(ict->ct.long_desc) - PFREE(ict->ct.long_desc); - if(ict->ct.sub) - kmq_delete_subscription(ict->ct.sub); - - PFREE(ict); - } -} - -KHMEXP khm_int32 KHMAPI -kcdb_credtype_register(const kcdb_credtype * type, khm_int32 * new_id) -{ - khm_int32 id; - kcdb_credtype_i * ict; - size_t cb_name; - size_t cb_short_desc; - size_t cb_long_desc; - int i; - - if(!type) - return KHM_ERROR_INVALID_PARAM; - - if(type->id >= KCDB_CREDTYPE_MAX_ID) - return KHM_ERROR_INVALID_PARAM; - - if(type->name) { - if(FAILED(StringCbLength(type->name, KCDB_MAXCB_NAME, &cb_name))) - return KHM_ERROR_TOO_LONG; - cb_name += sizeof(wchar_t); - } else - return KHM_ERROR_INVALID_PARAM; - - if(type->short_desc) { - if(FAILED(StringCbLength(type->short_desc, KCDB_MAXCB_SHORT_DESC, &cb_short_desc))) - return KHM_ERROR_TOO_LONG; - cb_short_desc += sizeof(wchar_t); - } else - cb_short_desc = 0; - - if(type->long_desc) { - if(FAILED(StringCbLength(type->long_desc, KCDB_MAXCB_LONG_DESC, &cb_long_desc))) - return KHM_ERROR_TOO_LONG; - cb_long_desc += sizeof(wchar_t); - } else - cb_long_desc = 0; - - if(type->sub == NULL) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_credtype); - - if(type->id < 0) { - if(KHM_FAILED(kcdb_credtype_get_next_free_id(&id))) { - LeaveCriticalSection(&cs_credtype); - return KHM_ERROR_NO_RESOURCES; - } - } - else - id = type->id; - - if(kcdb_credtype_tbl[id]) { - LeaveCriticalSection(&cs_credtype); - return KHM_ERROR_DUPLICATE; - } - - for(i=0;i<=KCDB_CREDTYPE_MAX_ID;i++) { - if(kcdb_credtype_tbl[i] && !wcscmp(kcdb_credtype_tbl[i]->ct.name, type->name)) { - LeaveCriticalSection(&cs_credtype); - return KHM_ERROR_DUPLICATE; - } - } - - ict = PMALLOC(sizeof(kcdb_credtype_i)); - ZeroMemory(ict, sizeof(kcdb_credtype_i)); - - ict->ct.name = PMALLOC(cb_name); - StringCbCopy(ict->ct.name, cb_name, type->name); - - if(cb_short_desc) { - ict->ct.short_desc = PMALLOC(cb_short_desc); - StringCbCopy(ict->ct.short_desc, cb_short_desc, type->short_desc); - } - - if(cb_long_desc) { - ict->ct.long_desc = PMALLOC(cb_long_desc); - StringCbCopy(ict->ct.long_desc, cb_long_desc, type->long_desc); - } - - ict->ct.id = id; - - ict->ct.icon = type->icon; - - ict->ct.sub = type->sub; - - ict->ct.is_equal = type->is_equal; - - kcdb_credtype_tbl[id] = ict; - - LPUSH(&kcdb_credtypes, ict); - - LeaveCriticalSection(&cs_credtype); - - kcdb_credtype_post_message(KCDB_OP_INSERT, &(ict->ct)); - - if (new_id) - *new_id = id; - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI kcdb_credtype_get_info( - khm_int32 id, - kcdb_credtype ** type) -{ - int found = 0; - - if(id < 0 || id > KCDB_CREDTYPE_MAX_ID) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_credtype); - if(kcdb_credtype_tbl[id] && - !(kcdb_credtype_tbl[id]->flags & KCDB_CTI_FLAG_DELETED)) - { - found = 1; - if(type) { - *type = &(kcdb_credtype_tbl[id]->ct); - kcdb_credtype_hold(kcdb_credtype_tbl[id]); - } - } else { - if(type) - *type = NULL; - } - LeaveCriticalSection(&cs_credtype); - - if(found) - return KHM_ERROR_SUCCESS; - else - return KHM_ERROR_NOT_FOUND; -} - -KHMEXP khm_int32 KHMAPI kcdb_credtype_release_info(kcdb_credtype * type) -{ - kcdb_credtype_i * ict; - - if(!type) - return KHM_ERROR_INVALID_PARAM; - - ict = (kcdb_credtype_i *) type; - return kcdb_credtype_release(ict); -} - -KHMEXP khm_int32 KHMAPI kcdb_credtype_unregister(khm_int32 id) -{ - kcdb_credtype_i * ict; - - if(id < 0 || id > KCDB_CREDTYPE_MAX_ID) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_credtype); - ict = kcdb_credtype_tbl[id]; - ict->flags |= KCDB_CTI_FLAG_DELETED; - kcdb_credtype_check_and_delete(id); - LeaveCriticalSection(&cs_credtype); - - //kcdb_credtype_post_message(KCDB_OP_DELETE, &(ict->ct)); - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_handle KHMAPI kcdb_credtype_get_sub(khm_int32 id) -{ - kcdb_credtype_i * t; - khm_handle s; - - if(id < 0 || id > KCDB_CREDTYPE_MAX_ID) - return NULL; - - EnterCriticalSection(&cs_credtype); - t = kcdb_credtype_tbl[id]; - if(t) - s = t->ct.sub; - else - s = NULL; - LeaveCriticalSection(&cs_credtype); - - return s; -} - -KHMEXP khm_int32 KHMAPI kcdb_credtype_describe( - khm_int32 id, - wchar_t * buf, - khm_size * cbbuf, - khm_int32 flags) -{ - size_t s; - size_t maxs; - wchar_t * str; - kcdb_credtype_i * t; - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(!cbbuf || id < 0 || id > KCDB_CREDTYPE_MAX_ID) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_credtype); - t = kcdb_credtype_tbl[id]; - if(t) { - if(flags & KCDB_TS_SHORT) { - str = (t->ct.short_desc)?t->ct.short_desc:t->ct.name; - maxs = (t->ct.short_desc)?KCDB_MAXCB_SHORT_DESC:KCDB_MAXCB_NAME; - } else { - str = (t->ct.long_desc)?t->ct.long_desc:((t->ct.short_desc)?t->ct.short_desc:t->ct.name); - maxs = (t->ct.long_desc)?KCDB_MAXCB_LONG_DESC:((t->ct.short_desc)?KCDB_MAXCB_SHORT_DESC:KCDB_MAXCB_NAME); - } - StringCbLength(str, maxs, &s); - s += sizeof(wchar_t); - if(!buf || *cbbuf < s) { - *cbbuf = s; - rv = KHM_ERROR_TOO_LONG; - } else { - StringCbCopy(buf, *cbbuf, str); - *cbbuf = s; - } - } else { - if(buf && *cbbuf > 0) - *buf = L'\0'; - *cbbuf = 0; - rv = KHM_ERROR_NOT_FOUND; - } - LeaveCriticalSection(&cs_credtype); - - return rv; -} - - -KHMEXP khm_int32 KHMAPI kcdb_credtype_get_name( - khm_int32 id, - wchar_t * buf, - khm_size * cbbuf) -{ - size_t s; - kcdb_credtype_i * t; - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(!cbbuf || id < 0 || id > KCDB_CREDTYPE_MAX_ID) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_credtype); - t = kcdb_credtype_tbl[id]; - if(t) { - StringCbLength(t->ct.name, KCDB_MAXCB_NAME, &s); - s += sizeof(wchar_t); - if(!buf || *cbbuf < s) { - *cbbuf = s; - rv = KHM_ERROR_TOO_LONG; - } else { - StringCbCopy(buf, *cbbuf, t->ct.name); - *cbbuf = s; - } - } else { - *cbbuf = 0; - rv = KHM_ERROR_NOT_FOUND; - } - LeaveCriticalSection(&cs_credtype); - - return rv; -} - -KHMEXP khm_int32 KHMAPI kcdb_credtype_get_id( - const wchar_t * name, - khm_int32 * id) -{ - int i; - - *id = 0; - if(!name) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_credtype); - for(i=0;i <= KCDB_CREDTYPE_MAX_ID; i++) { - if(kcdb_credtype_tbl[i] && !wcscmp(name, kcdb_credtype_tbl[i]->ct.name)) - break; - } - LeaveCriticalSection(&cs_credtype); - - if(i <= KCDB_CREDTYPE_MAX_ID) { - *id = i; - return KHM_ERROR_SUCCESS; - } else - return KHM_ERROR_NOT_FOUND; -} - -khm_int32 kcdb_credtype_get_next_free_id(khm_int32 * id) -{ - int i; - - EnterCriticalSection(&cs_credtype); - for(i=0;i <= KCDB_CREDTYPE_MAX_ID; i++) { - if(!kcdb_credtype_tbl[i]) - break; - } - LeaveCriticalSection(&cs_credtype); - - if(i <= KCDB_CREDTYPE_MAX_ID) { - *id = i; - return KHM_ERROR_SUCCESS; - } else { - *id = -1; - return KHM_ERROR_NO_RESOURCES; - } -} - -khm_int32 kcdb_credtype_hold(kcdb_credtype_i * ict) { - - if(!ict) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_credtype); - ict->refcount++; - LeaveCriticalSection(&cs_credtype); - return KHM_ERROR_SUCCESS; -} - -khm_int32 kcdb_credtype_release(kcdb_credtype_i * ict) { - - if(!ict) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_credtype); - ict->refcount--; - kcdb_credtype_check_and_delete(ict->ct.id); - LeaveCriticalSection(&cs_credtype); - return KHM_ERROR_SUCCESS; -} - -void kcdb_credtype_msg_completion(kmq_message * m) -{ - kcdb_credtype_release((kcdb_credtype_i *) m->vparam); -} - -void kcdb_credtype_post_message(khm_int32 op, kcdb_credtype * type) -{ - kcdb_credtype_hold((kcdb_credtype_i *) type); - kmq_post_message(KMSG_KCDB, KMSG_KCDB_CREDTYPE, op, (void *) type); -} diff --git a/src/windows/identity/kcreddb/credtype.h b/src/windows/identity/kcreddb/credtype.h deleted file mode 100644 index 1aeab81f0..000000000 --- a/src/windows/identity/kcreddb/credtype.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KCDB_CREDTYPE_H -#define __KHIMAIRA_KCDB_CREDTYPE_H - -/* credtype */ -typedef struct kcdb_credtype_i_t { - kcdb_credtype ct; - khm_int32 refcount; - khm_int32 flags; - - struct kcdb_credtype_i_t * next; - struct kcdb_credtype_i_t * prev; -} kcdb_credtype_i; - -#define KCDB_CTI_FLAG_DELETED 8 - -extern CRITICAL_SECTION cs_credtype; -extern kcdb_credtype_i * kcdb_credtypes; -extern kcdb_credtype_i ** kcdb_credtype_tbl; - -void kcdb_credtype_init(void); -void kcdb_credtype_exit(void); -void kcdb_credtype_check_and_delete(khm_int32 id); -khm_int32 kcdb_credtype_hold(kcdb_credtype_i * ict); -khm_int32 kcdb_credtype_release(kcdb_credtype_i * ict); -void kcdb_credtype_msg_completion(kmq_message * m); -void kcdb_credtype_post_message(khm_int32 op, kcdb_credtype * type); -khm_int32 kcdb_credtype_get_next_free_id(khm_int32 * id); - -#endif diff --git a/src/windows/identity/kcreddb/identity.c b/src/windows/identity/kcreddb/identity.c deleted file mode 100644 index c6d443eed..000000000 --- a/src/windows/identity/kcreddb/identity.c +++ /dev/null @@ -1,1599 +0,0 @@ -/* - * 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 - * 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<kcreddbinternal.h> -#include<assert.h> - -static CRITICAL_SECTION cs_ident; -hashtable * kcdb_identities_namemap = NULL; -khm_int32 kcdb_n_identities = 0; -kcdb_identity * kcdb_identities = NULL; -kcdb_identity * kcdb_def_identity = NULL; -khm_handle kcdb_ident_sub = NULL; /* identity provider */ -khm_int32 kcdb_ident_cred_type = KCDB_CREDTYPE_INVALID; -/* primary credentials type */ -khm_ui_4 kcdb_ident_refresh_cycle = 0; -khm_boolean kcdb_checked_config = FALSE; -khm_boolean kcdb_checking_config = FALSE; - -KHMEXP khm_boolean KHMAPI -kcdb_identity_is_equal(khm_handle identity1, - khm_handle identity2) -{ - - return (identity1 == identity2); - -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_set_provider(khm_handle sub) -{ - EnterCriticalSection(&cs_ident); - if (sub != kcdb_ident_sub) { - if(kcdb_ident_sub != NULL) { - kmq_send_sub_msg(kcdb_ident_sub, - KMSG_IDENT, - KMSG_IDENT_EXIT, - 0, - 0); - kmq_delete_subscription(kcdb_ident_sub); - } - kcdb_ident_sub = sub; - - if (kcdb_ident_sub) - kmq_send_sub_msg(kcdb_ident_sub, - KMSG_IDENT, - KMSG_IDENT_INIT, - 0, - 0); - } - LeaveCriticalSection(&cs_ident); - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_provider(khm_handle * sub) -{ - khm_int32 rv = KHM_ERROR_SUCCESS; - - EnterCriticalSection(&cs_ident); - if(kcdb_ident_sub != NULL) - rv = KHM_ERROR_SUCCESS; - else - rv = KHM_ERROR_NOT_FOUND; - if(sub != NULL) - *sub = kcdb_ident_sub; - LeaveCriticalSection(&cs_ident); - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_set_type(khm_int32 cred_type) -{ - EnterCriticalSection(&cs_ident); - kcdb_ident_cred_type = cred_type; - LeaveCriticalSection(&cs_ident); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_type(khm_int32 * ptype) -{ - if (!ptype) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_ident); - *ptype = kcdb_ident_cred_type; - LeaveCriticalSection(&cs_ident); - - if (*ptype >= 0) - return KHM_ERROR_SUCCESS; - else - return KHM_ERROR_NOT_FOUND; -} - -/* message completion routine */ -void -kcdbint_ident_msg_completion(kmq_message * m) { - kcdb_identity_release(m->vparam); -} - -void -kcdbint_ident_add_ref(const void * key, void * vid) { - /* References in the hashtable are not refcounted */ - - // kcdb_identity_hold(vid); -} - -void -kcdbint_ident_del_ref(const void * key, void * vid) { - /* References in the hashtable are not refcounted */ - - // kcdb_identity_release(vid); -} - -void -kcdbint_ident_init(void) { - InitializeCriticalSection(&cs_ident); - kcdb_identities_namemap = hash_new_hashtable( - KCDB_IDENT_HASHTABLE_SIZE, - hash_string, - hash_string_comp, - kcdbint_ident_add_ref, - kcdbint_ident_del_ref); -} - -void -kcdbint_ident_exit(void) { - EnterCriticalSection(&cs_ident); - hash_del_hashtable(kcdb_identities_namemap); - LeaveCriticalSection(&cs_ident); - DeleteCriticalSection(&cs_ident); -} - -/* NOT called with cs_ident held */ -KHMEXP khm_boolean KHMAPI -kcdb_identity_is_valid_name(const wchar_t * name) -{ - khm_int32 rv; - - /* special case. Note since the string we are comparing with is - of a known length we don't need to check the length of name. */ - if (!wcscmp(name, L"_Schema")) - return FALSE; - - rv = kcdb_identpro_validate_name(name); - - if(rv == KHM_ERROR_NO_PROVIDER || - rv == KHM_ERROR_NOT_IMPLEMENTED) - return TRUE; - else - return KHM_SUCCEEDED(rv); -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_create(const wchar_t *name, - khm_int32 flags, - khm_handle * result) { - kcdb_identity * id = NULL; - kcdb_identity * id_tmp = NULL; - size_t namesize; - - if(!result || !name) - return KHM_ERROR_INVALID_PARAM; - - *result = NULL; - - /* is it there already? */ - EnterCriticalSection(&cs_ident); - id = hash_lookup(kcdb_identities_namemap, (void *) name); - if(id) - kcdb_identity_hold((khm_handle) id); - LeaveCriticalSection(&cs_ident); - - if(id) { - *result = (khm_handle) id; - return KHM_ERROR_SUCCESS; - } else if(!(flags & KCDB_IDENT_FLAG_CREATE)) { - return KHM_ERROR_NOT_FOUND; - } - - flags &= ~KCDB_IDENT_FLAG_CREATE; - - /* nope. create it */ - if((flags & ~KCDB_IDENT_FLAGMASK_RDWR) || - (flags & (KCDB_IDENT_FLAG_DEFAULT | - KCDB_IDENT_FLAG_SEARCHABLE | - KCDB_IDENT_FLAG_STICKY))) { - /* can't specify this flag in create */ - return KHM_ERROR_INVALID_PARAM; - } - - if(!kcdb_identity_is_valid_name(name)) { - return KHM_ERROR_INVALID_NAME; - } - - /* we expect the following will succeed since the above - test passed */ - StringCbLength(name, KCDB_IDENT_MAXCB_NAME, &namesize); - namesize += sizeof(wchar_t); - - id = PMALLOC(sizeof(kcdb_identity)); - ZeroMemory(id, sizeof(kcdb_identity)); - id->magic = KCDB_IDENT_MAGIC; - id->name = PMALLOC(namesize); - StringCbCopy(id->name, namesize, name); - - id->flags = (flags & KCDB_IDENT_FLAGMASK_RDWR); - id->flags |= KCDB_IDENT_FLAG_ACTIVE | KCDB_IDENT_FLAG_EMPTY; - LINIT(id); - - EnterCriticalSection(&cs_ident); - id_tmp = hash_lookup(kcdb_identities_namemap, (void *) id->name); - if(id_tmp) { - /* lost a race */ - kcdb_identity_hold((khm_handle) id_tmp); - *result = (khm_handle) id_tmp; - - PFREE(id->name); - PFREE(id); - - id = NULL; - } else { - khm_handle h_cfg; - - kcdb_identity_hold((khm_handle) id); - hash_add(kcdb_identities_namemap, - (void *) id->name, - (void *) id); - LPUSH(&kcdb_identities, id); - - if(KHM_SUCCEEDED(kcdb_identity_get_config((khm_handle) id, - 0, - &h_cfg))) { - /* don't need to set the KCDB_IDENT_FLAG_CONFIG flags - since kcdb_identity_get_config() sets it for us. */ - khm_int32 sticky; - - if (KHM_SUCCEEDED(khc_read_int32(h_cfg, L"Sticky", &sticky)) && - sticky) { - id->flags |= KCDB_IDENT_FLAG_STICKY; - } - - khc_close_space(h_cfg); - } - } - LeaveCriticalSection(&cs_ident); - - if(id != NULL) { - *result = (khm_handle) id; - - kcdb_identpro_notify_create((khm_handle) id); - - kcdbint_ident_post_message(KCDB_OP_INSERT, id); - } - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_delete(khm_handle vid) { - kcdb_identity * id; - khm_int32 code = KHM_ERROR_SUCCESS; - - EnterCriticalSection(&cs_ident); - if(!kcdb_is_identity(vid)) { - code = KHM_ERROR_INVALID_PARAM; - goto _exit; - } - - id = (kcdb_identity *) vid; - - if (kcdb_is_active_identity(vid)) { - - id->flags &= ~KCDB_IDENT_FLAG_ACTIVE; - - hash_del(kcdb_identities_namemap, (void *) id->name); - - LeaveCriticalSection(&cs_ident); - - kcdbint_ident_post_message(KCDB_OP_DELETE, id); - - /* Once everybody finishes dealing with the identity deletion, - we will get called again. */ - return KHM_ERROR_SUCCESS; - } else if (id->refcount == 0) { - /* If the identity is not active, it is not in the hashtable - either */ - LDELETE(&kcdb_identities, id); - - if (id->name) - PFREE(id->name); - PFREE(id); - } - /* else, we have an identity that is not active, but has - outstanding references. We have to wait until those references - are freed. Once they are released, kcdb_identity_delete() will - be called again. */ - - _exit: - LeaveCriticalSection(&cs_ident); - - return code; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_set_flags(khm_handle vid, - khm_int32 flag, - khm_int32 mask) { - kcdb_identity * id; - khm_int32 oldflags; - khm_int32 newflags; - khm_int32 delta = 0; - khm_int32 rv; - - if (mask == 0) - return KHM_ERROR_SUCCESS; - - if(!kcdb_is_active_identity(vid)) - return KHM_ERROR_INVALID_PARAM; - - id = (kcdb_identity *) vid; - - flag &= mask; - - if((mask & ~KCDB_IDENT_FLAGMASK_RDWR) || - ((flag & KCDB_IDENT_FLAG_INVALID) && (flag & KCDB_IDENT_FLAG_VALID))) - return KHM_ERROR_INVALID_PARAM; - - if((mask & KCDB_IDENT_FLAG_DEFAULT) && - (flag & KCDB_IDENT_FLAG_DEFAULT)) { - /* kcdb_identity_set_default already does checking for - redundant transitions */ - rv = kcdb_identity_set_default(vid); - - if(KHM_FAILED(rv)) - return rv; - - mask &= ~KCDB_IDENT_FLAG_DEFAULT; - flag &= ~KCDB_IDENT_FLAG_DEFAULT; - } - - EnterCriticalSection(&cs_ident); - - if(mask & KCDB_IDENT_FLAG_SEARCHABLE) { - if(!(flag & KCDB_IDENT_FLAG_SEARCHABLE)) { - if(id->flags & KCDB_IDENT_FLAG_SEARCHABLE) { - LeaveCriticalSection(&cs_ident); - rv = kcdb_identpro_set_searchable(vid, FALSE); - EnterCriticalSection(&cs_ident); - if(rv == KHM_ERROR_NO_PROVIDER || - KHM_SUCCEEDED(rv)) { - id->flags &= ~KCDB_IDENT_FLAG_SEARCHABLE; - delta |= KCDB_IDENT_FLAG_SEARCHABLE; - } - } - } else { - if(!(id->flags & KCDB_IDENT_FLAG_SEARCHABLE)) { - LeaveCriticalSection(&cs_ident); - rv = kcdb_identpro_set_searchable(vid, TRUE); - EnterCriticalSection(&cs_ident); - if(rv == KHM_ERROR_NO_PROVIDER || - KHM_SUCCEEDED(rv)) { - id->flags |= KCDB_IDENT_FLAG_SEARCHABLE; - delta |= KCDB_IDENT_FLAG_SEARCHABLE; - } - } - } - - flag &= ~KCDB_IDENT_FLAG_SEARCHABLE; - mask &= ~KCDB_IDENT_FLAG_SEARCHABLE; - } - - if (mask & KCDB_IDENT_FLAG_STICKY) { - if ((flag ^ id->flags) & KCDB_IDENT_FLAG_STICKY) { - khm_handle h_conf; - - if (KHM_SUCCEEDED(kcdb_identity_get_config(vid, - KHM_FLAG_CREATE, - &h_conf))) { - khc_write_int32(h_conf, L"Sticky", - !!(flag & KCDB_IDENT_FLAG_STICKY)); - khc_close_space(h_conf); - } - - id->flags = - ((id->flags & ~KCDB_IDENT_FLAG_STICKY) | - (flag & KCDB_IDENT_FLAG_STICKY)); - - delta |= KCDB_IDENT_FLAG_STICKY; - } - - flag &= ~KCDB_IDENT_FLAG_STICKY; - mask &= ~KCDB_IDENT_FLAG_STICKY; - } - - /* deal with every other flag */ - - oldflags = id->flags; - - id->flags = (id->flags & ~mask) | (flag & mask); - - if (flag & KCDB_IDENT_FLAG_VALID) { - id->flags &= ~(KCDB_IDENT_FLAG_INVALID | KCDB_IDENT_FLAG_UNKNOWN); - } - if (flag & KCDB_IDENT_FLAG_INVALID) { - id->flags &= ~(KCDB_IDENT_FLAG_VALID | KCDB_IDENT_FLAG_UNKNOWN); - } - - newflags = id->flags; - - LeaveCriticalSection(&cs_ident); - - delta |= newflags ^ oldflags; - - if((delta & KCDB_IDENT_FLAG_HIDDEN)) { - kcdbint_ident_post_message( - (newflags & KCDB_IDENT_FLAG_HIDDEN)?KCDB_OP_HIDE:KCDB_OP_UNHIDE, - vid); - } - - if((delta & KCDB_IDENT_FLAG_SEARCHABLE)) { - kcdbint_ident_post_message( - (newflags & KCDB_IDENT_FLAG_SEARCHABLE)?KCDB_OP_SETSEARCH:KCDB_OP_UNSETSEARCH, - vid); - } - - if(delta != 0) - kcdbint_ident_post_message(KCDB_OP_MODIFY, vid); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_flags(khm_handle vid, - khm_int32 * flags) { - kcdb_identity * id; - - *flags = 0; - - if(!kcdb_is_active_identity(vid)) - return KHM_ERROR_INVALID_PARAM; - - id = (kcdb_identity *) vid; - - EnterCriticalSection(&cs_ident); - *flags = id->flags; - LeaveCriticalSection(&cs_ident); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_name(khm_handle vid, - wchar_t * buffer, - khm_size * pcbsize) { - size_t namesize; - kcdb_identity * id; - - if(!kcdb_is_active_identity(vid) || !pcbsize) - return KHM_ERROR_INVALID_PARAM; - - id = (kcdb_identity *) vid; - - if(FAILED(StringCbLength(id->name, KCDB_IDENT_MAXCB_NAME, &namesize))) - return KHM_ERROR_UNKNOWN; - - namesize += sizeof(wchar_t); - - if(!buffer || namesize > *pcbsize) { - *pcbsize = namesize; - return KHM_ERROR_TOO_LONG; - } - - StringCbCopy(buffer, *pcbsize, id->name); - *pcbsize = namesize; - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_default(khm_handle * pvid) { - khm_handle def; - - if (pvid == NULL) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_ident); - def = kcdb_def_identity; - if (def != NULL) - kcdb_identity_hold(def); - LeaveCriticalSection(&cs_ident); - - *pvid = def; - - if (def != NULL) - return KHM_ERROR_SUCCESS; - else - return KHM_ERROR_NOT_FOUND; -} - -static khm_int32 -kcdbint_ident_set_default(khm_handle vid, - khm_boolean invoke_identpro) { - kcdb_identity * new_def; - kcdb_identity * old_def; - khm_int32 rv; - - if (vid != NULL && !kcdb_is_active_identity(vid)) - return KHM_ERROR_INVALID_PARAM; - - new_def = (kcdb_identity *)vid; - - if (new_def != NULL && (new_def->flags & KCDB_IDENT_FLAG_DEFAULT)) - return KHM_ERROR_SUCCESS; - - if ((new_def == NULL && kcdb_def_identity == NULL) || - (new_def == kcdb_def_identity)) - return KHM_ERROR_SUCCESS; - - /* first check with the identity provider if this operation - is permitted. */ - if (invoke_identpro) { - rv = kcdb_identpro_set_default(vid); - if(rv != KHM_ERROR_NO_PROVIDER && KHM_FAILED(rv)) - return rv; - } - - EnterCriticalSection(&cs_ident); - - old_def = kcdb_def_identity; - kcdb_def_identity = new_def; - - if(old_def != new_def) { - if(old_def) { - old_def->flags &= ~KCDB_IDENT_FLAG_DEFAULT; - kcdb_identity_release((khm_handle) old_def); - } - - if(new_def) { - new_def->flags |= KCDB_IDENT_FLAG_DEFAULT; - kcdb_identity_hold((khm_handle) new_def); - } - - LeaveCriticalSection(&cs_ident); - - /* if (invoke_identpro) */ - kcdbint_ident_post_message(KCDB_OP_NEW_DEFAULT, new_def); - } else { - LeaveCriticalSection(&cs_ident); - } - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_set_default(khm_handle vid) { - return kcdbint_ident_set_default(vid, TRUE); -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_set_default_int(khm_handle vid) { - return kcdbint_ident_set_default(vid, FALSE); -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_config(khm_handle vid, - khm_int32 flags, - khm_handle * result) { - khm_handle hkcdb; - khm_handle hidents = NULL; - khm_handle hident = NULL; - khm_int32 rv; - kcdb_identity * id; - - if(kcdb_is_active_identity(vid)) { - id = (kcdb_identity *) vid; - } else { - return KHM_ERROR_INVALID_PARAM; - } - - hkcdb = kcdb_get_config(); - if(hkcdb) { - rv = khc_open_space(hkcdb, L"Identity", 0, &hidents); - if(KHM_FAILED(rv)) - goto _exit; - - rv = khc_open_space(hidents, - id->name, - flags | KCONF_FLAG_NOPARSENAME, - &hident); - - if(KHM_FAILED(rv)) { - khm_int32 oldflags; - EnterCriticalSection(&cs_ident); - oldflags = id->flags; - id->flags &= ~KCDB_IDENT_FLAG_CONFIG; - LeaveCriticalSection(&cs_ident); - if (oldflags & KCDB_IDENT_FLAG_CONFIG) - kcdbint_ident_post_message(KCDB_OP_DELCONFIG, id); - goto _exit; - } - - EnterCriticalSection(&cs_ident); - id->flags |= KCDB_IDENT_FLAG_CONFIG; - LeaveCriticalSection(&cs_ident); - - *result = hident; - } else - rv = KHM_ERROR_UNKNOWN; - -_exit: - if(hidents) - khc_close_space(hidents); - if(hkcdb) - khc_close_space(hkcdb); - return rv; -} - -/*! \note cs_ident must be available. */ -void -kcdbint_ident_post_message(khm_int32 op, kcdb_identity * id) { - kcdb_identity_hold(id); - kmq_post_message(KMSG_KCDB, KMSG_KCDB_IDENT, op, (void *) id); -} - -/*! \note cs_ident must be available. */ -KHMEXP khm_int32 KHMAPI -kcdb_identity_hold(khm_handle vid) { - kcdb_identity * id; - - EnterCriticalSection(&cs_ident); - if(kcdb_is_active_identity(vid)) { - id = vid; - id->refcount++; - } else { - LeaveCriticalSection(&cs_ident); - return KHM_ERROR_INVALID_PARAM; - } - LeaveCriticalSection(&cs_ident); - return ERROR_SUCCESS; -} - -/*! \note cs_ident must be available. */ -KHMEXP khm_int32 KHMAPI -kcdb_identity_release(khm_handle vid) { - kcdb_identity * id; - khm_int32 refcount; - - EnterCriticalSection(&cs_ident); - if(kcdb_is_identity(vid)) { - id = vid; - refcount = --id->refcount; - if(refcount == 0) { - /* We only delete identities which do not have a - configuration. */ - if (id->refcount == 0 && - !(id->flags & KCDB_IDENT_FLAG_CONFIG)) - kcdb_identity_delete(vid); - } - } else { - LeaveCriticalSection(&cs_ident); - return KHM_ERROR_INVALID_PARAM; - } - LeaveCriticalSection(&cs_ident); - return ERROR_SUCCESS; -} - -struct kcdb_idref_result { - kcdb_identity * ident; - khm_int32 flags; - khm_size count; -}; - -static khm_int32 KHMAPI -kcdbint_idref_proc(khm_handle cred, void * r) { - khm_handle vid; - struct kcdb_idref_result *result; - khm_int32 flags; - - result = (struct kcdb_idref_result *) r; - - if (KHM_SUCCEEDED(kcdb_cred_get_identity(cred, &vid))) { - if (result->ident == (kcdb_identity *) vid) { - - result->count++; - kcdb_cred_get_flags(cred, &flags); - - if (flags & KCDB_CRED_FLAG_RENEWABLE) { - result->flags |= KCDB_IDENT_FLAG_CRED_RENEW; - if (flags & KCDB_CRED_FLAG_INITIAL) { - result->flags |= KCDB_IDENT_FLAG_RENEWABLE; - } - } - - if (flags & KCDB_CRED_FLAG_EXPIRED) { - result->flags |= KCDB_IDENT_FLAG_CRED_EXP; - if (flags & KCDB_CRED_FLAG_INITIAL) { - result->flags |= KCDB_IDENT_FLAG_EXPIRED; - } - } - - if (flags & KCDB_CRED_FLAG_INITIAL) { - result->flags |= KCDB_IDENT_FLAG_VALID; - } - } - - kcdb_identity_release(vid); - } - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_refresh(khm_handle vid) { - kcdb_identity * ident; - khm_int32 code = KHM_ERROR_SUCCESS; - struct kcdb_idref_result result; - - EnterCriticalSection(&cs_ident); - - if (!kcdb_is_active_identity(vid)) { - code = KHM_ERROR_INVALID_PARAM; - goto _exit; - } - - ident = (kcdb_identity *) vid; - - result.ident = ident; - result.flags = 0; - result.count = 0; - - LeaveCriticalSection(&cs_ident); - - kcdb_credset_apply(NULL, kcdbint_idref_proc, &result); - - if (result.count == 0) - result.flags |= KCDB_IDENT_FLAG_EMPTY; - - kcdb_identity_set_flags(vid, result.flags, - KCDB_IDENT_FLAGMASK_RDWR & - ~(KCDB_IDENT_FLAG_DEFAULT | - KCDB_IDENT_FLAG_SEARCHABLE | - KCDB_IDENT_FLAG_STICKY)); - - EnterCriticalSection(&cs_ident); - ident->refresh_cycle = kcdb_ident_refresh_cycle; - - _exit: - LeaveCriticalSection(&cs_ident); - - if (code == 0) - code = kcdb_identpro_update(vid); - - return code; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_refresh_all(void) { - kcdb_identity * ident; - kcdb_identity * next; - khm_int32 code = KHM_ERROR_SUCCESS; - int hit_count; - - EnterCriticalSection(&cs_ident); - - kcdb_ident_refresh_cycle++; - - /* The do-while loop is here to account for race conditions. We - release cs_ident in the for loop, so we don't actually have a - guarantee that we traversed the whole identity list at the end. - We repeat until all the identities are uptodate. */ - - do { - hit_count = 0; - - for (ident = kcdb_identities; - ident != NULL; - ident = next) { - - if (!kcdb_is_active_identity(ident) || - ident->refresh_cycle == kcdb_ident_refresh_cycle) { - next = LNEXT(ident); - continue; - } - - kcdb_identity_hold((khm_handle) ident); - - LeaveCriticalSection(&cs_ident); - - kcdb_identity_refresh((khm_handle) ident); - - EnterCriticalSection(&cs_ident); - - next = LNEXT(ident); - kcdb_identity_release((khm_handle) ident); - - hit_count++; - } - - } while (hit_count > 0); - - LeaveCriticalSection(&cs_ident); - - return code; -} - -/*****************************************/ -/* Custom property functions */ - -KHMEXP khm_int32 KHMAPI -kcdb_identity_set_attr(khm_handle vid, - khm_int32 attr_id, - void * buffer, - khm_size cbbuf) -{ - kcdb_identity * id = NULL; - kcdb_attrib * attrib = NULL; - kcdb_type * type = NULL; - khm_size slot; - khm_size cbdest; - khm_int32 code = KHM_ERROR_SUCCESS; - - EnterCriticalSection(&cs_ident); - if(!kcdb_is_active_identity(vid)) { - LeaveCriticalSection(&cs_ident); - return KHM_ERROR_INVALID_PARAM; - } - - id = (kcdb_identity *) vid; - - if(!(id->flags & KCDB_IDENT_FLAG_ATTRIBS)) { - kcdb_buf_new(&id->buf, KCDB_BUF_DEFAULT); - id->flags |= KCDB_IDENT_FLAG_ATTRIBS; - } - - if(KHM_FAILED(kcdb_attrib_get_info(attr_id, &attrib))) { - LeaveCriticalSection(&cs_ident); - return KHM_ERROR_INVALID_PARAM; - } - -#if 0 - /* actually, even if an attribute is computed, we still allow - those values to be set. This is because computing values - is only for credentials. If a computed value is used as a - property in any other object, it is treated as a regular value - */ - if(attrib->flags & KCDB_ATTR_FLAG_COMPUTED) - { - LeaveCriticalSection(&cs_ident); - kcdb_attrib_release_info(attrib); - return KHM_ERROR_INVALID_OPERATION; - } -#endif - - if (buffer == NULL) { - /* we are removing a value */ - slot = kcdb_buf_slot_by_id(&id->buf, (khm_ui_2) attr_id); - if (slot != KCDB_BUF_INVALID_SLOT && - kcdb_buf_exist(&id->buf, slot)) - kcdb_buf_alloc(&id->buf, slot, (khm_ui_2) attr_id, 0); - code = KHM_ERROR_SUCCESS; - goto _exit; - } - - if(KHM_FAILED(kcdb_type_get_info(attrib->type, &type))) { - LeaveCriticalSection(&cs_ident); - kcdb_attrib_release_info(attrib); - return KHM_ERROR_INVALID_PARAM; - } - - if(!(type->isValid(buffer,cbbuf))) { - code = KHM_ERROR_TYPE_MISMATCH; - goto _exit; - } - - if((type->dup(buffer, cbbuf, NULL, &cbdest)) != KHM_ERROR_TOO_LONG) { - code = KHM_ERROR_INVALID_PARAM; - goto _exit; - } - - kcdb_buf_alloc(&id->buf, KCDB_BUF_APPEND, (khm_ui_2) attr_id, cbdest); - slot = kcdb_buf_slot_by_id(&id->buf, (khm_ui_2) attr_id); - if(slot == KCDB_BUF_INVALID_SLOT || !kcdb_buf_exist(&id->buf, slot)) { - code = KHM_ERROR_NO_RESOURCES; - goto _exit; - } - - if(KHM_FAILED(code = - type->dup(buffer, cbbuf, kcdb_buf_get(&id->buf, slot), &cbdest))) - { - kcdb_buf_alloc(&id->buf, slot, (khm_ui_2) attr_id, 0); - goto _exit; - } - - kcdb_buf_set_value_flag(&id->buf, slot); - -_exit: - LeaveCriticalSection(&cs_ident); - - if(attrib) - kcdb_attrib_release_info(attrib); - if(type) - kcdb_type_release_info(type); - - return code; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_set_attrib(khm_handle vid, - const wchar_t * attr_name, - void * buffer, - khm_size cbbuf) -{ - khm_int32 attr_id = -1; - - if(KHM_FAILED(kcdb_attrib_get_id(attr_name, &attr_id))) - return KHM_ERROR_INVALID_PARAM; - - return kcdb_identity_set_attr( - vid, - attr_id, - buffer, - cbbuf); -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_attr(khm_handle vid, - khm_int32 attr_id, - khm_int32 * attr_type, - void * buffer, - khm_size * pcbbuf) -{ - khm_int32 code = KHM_ERROR_SUCCESS; - kcdb_identity * id = NULL; - kcdb_attrib * attrib = NULL; - kcdb_type * type = NULL; - khm_size slot; - - if(KHM_FAILED(kcdb_attrib_get_info(attr_id, &attrib))) { - return KHM_ERROR_INVALID_PARAM; - } - - if(KHM_FAILED(kcdb_type_get_info(attrib->type, &type))) { - kcdb_attrib_release_info(attrib); - return KHM_ERROR_UNKNOWN; - } - - if(attr_type) - *attr_type = attrib->type; - - EnterCriticalSection(&cs_ident); - - if(!kcdb_is_active_identity(vid)) { - code = KHM_ERROR_INVALID_PARAM; - goto _exit; - } - - id = (kcdb_identity *) vid; - - if(!(id->flags & KCDB_IDENT_FLAG_ATTRIBS) || - (slot = kcdb_buf_slot_by_id(&id->buf, (khm_ui_2) attr_id)) == KCDB_BUF_INVALID_SLOT || - !kcdb_buf_val_exist(&id->buf, slot)) - { - code = KHM_ERROR_NOT_FOUND; - goto _exit; - } - - if(!buffer && !pcbbuf) { - /* in this case the caller is only trying to determine if the field - contains data. If we get here, then the value exists. */ - code = KHM_ERROR_SUCCESS; - goto _exit; - } - -#if 0 - if(attrib->flags & KCDB_ATTR_FLAG_COMPUTED) { - /* we should never hit this case */ -#ifdef DEBUG - assert(FALSE); -#endif - code = KHM_ERROR_INVALID_OPERATION; - } else { -#endif - code = type->dup( - kcdb_buf_get(&id->buf, slot), - kcdb_buf_size(&id->buf, slot), - buffer, - pcbbuf); -#if 0 - } -#endif - -_exit: - LeaveCriticalSection(&cs_ident); - if(type) - kcdb_type_release_info(type); - if(attrib) - kcdb_attrib_release_info(attrib); - - return code; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_attrib(khm_handle vid, - const wchar_t * attr_name, - khm_int32 * attr_type, - void * buffer, - khm_size * pcbbuf) -{ - khm_int32 attr_id = -1; - - if(KHM_FAILED(kcdb_attrib_get_id(attr_name, &attr_id))) - return KHM_ERROR_NOT_FOUND; - - return kcdb_identity_get_attr(vid, - attr_id, - attr_type, - buffer, - pcbbuf); -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_attr_string(khm_handle vid, - khm_int32 attr_id, - wchar_t * buffer, - khm_size * pcbbuf, - khm_int32 flags) -{ - khm_int32 code = KHM_ERROR_SUCCESS; - kcdb_identity * id = NULL; - kcdb_attrib * attrib = NULL; - kcdb_type * type = NULL; - khm_size slot; - - if(KHM_FAILED(kcdb_attrib_get_info(attr_id, &attrib))) { - return KHM_ERROR_INVALID_PARAM; - } - - if(KHM_FAILED(kcdb_type_get_info(attrib->type, &type))) { - kcdb_attrib_release_info(attrib); - return KHM_ERROR_UNKNOWN; - } - - EnterCriticalSection(&cs_ident); - - if(!kcdb_is_active_identity(vid)) { - code = KHM_ERROR_INVALID_PARAM; - goto _exit; - } - - id = (kcdb_identity *) vid; - - if(!(id->flags & KCDB_IDENT_FLAG_ATTRIBS) || - (slot = kcdb_buf_slot_by_id(&id->buf, (khm_ui_2) attr_id)) == KCDB_BUF_INVALID_SLOT || - !kcdb_buf_val_exist(&id->buf, slot)) - { - code = KHM_ERROR_NOT_FOUND; - goto _exit; - } - - if(!buffer && !pcbbuf) { - /* in this case the caller is only trying to determine if the field - contains data. If we get here, then the value exists */ - code = KHM_ERROR_SUCCESS; - goto _exit; - } - -#if 0 - if(attrib->flags & KCDB_ATTR_FLAG_COMPUTED) { -#ifdef DEBUG - assert(FALSE); -#endif - code = KHM_ERROR_INVALID_OPERATION; - } else { -#endif - if(kcdb_buf_exist(&id->buf, slot)) { - code = type->toString( - kcdb_buf_get(&id->buf, slot), - kcdb_buf_size(&id->buf, slot), - buffer, - pcbbuf, - flags); - } else - code = KHM_ERROR_NOT_FOUND; -#if 0 - } -#endif - -_exit: - LeaveCriticalSection(&cs_ident); - if(type) - kcdb_type_release_info(type); - if(attrib) - kcdb_attrib_release_info(attrib); - - return code; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_attrib_string(khm_handle vid, - const wchar_t * attr_name, - wchar_t * buffer, - khm_size * pcbbuf, - khm_int32 flags) -{ - khm_int32 attr_id = -1; - - if(KHM_FAILED(kcdb_attrib_get_id(attr_name, &attr_id))) - return KHM_ERROR_NOT_FOUND; - - return kcdb_identity_get_attr_string( - vid, - attr_id, - buffer, - pcbbuf, - flags); -} - -/*****************************************/ -/* Identity provider interface functions */ - -/* NOT called with cs_ident held */ -KHMEXP khm_int32 KHMAPI -kcdb_identpro_validate_name(const wchar_t * name) -{ - kcdb_ident_name_xfer namex; - khm_handle sub; - khm_size cch; - khm_int32 rv = KHM_ERROR_SUCCESS; - - /* we need to verify the length and the contents of the string - before calling the identity provider */ - if(FAILED(StringCchLength(name, KCDB_IDENT_MAXCCH_NAME, &cch))) - return KHM_ERROR_TOO_LONG; - - /* We can't really make an assumption about the valid characters - in an identity. So we let the identity provider decide */ -#ifdef VALIDATE_IDENTIY_CHARACTERS - if(wcsspn(name, KCDB_IDENT_VALID_CHARS) != cch) - return KHM_ERROR_INVALID_NAME; -#endif - - EnterCriticalSection(&cs_ident); - if(kcdb_ident_sub != NULL) { - sub = kcdb_ident_sub; - } else { - sub = NULL; - rv = KHM_ERROR_NO_PROVIDER; - } - LeaveCriticalSection(&cs_ident); - - if(sub != NULL) { - ZeroMemory(&namex, sizeof(namex)); - - namex.name_src = name; - namex.result = KHM_ERROR_NOT_IMPLEMENTED; - - kmq_send_sub_msg(sub, - KMSG_IDENT, - KMSG_IDENT_VALIDATE_NAME, - 0, - (void *) &namex); - - rv = namex.result; - } - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identpro_validate_identity(khm_handle identity) -{ - khm_int32 rv = KHM_ERROR_SUCCESS; - khm_handle sub; - - if(!kcdb_is_active_identity(identity)) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_ident); - if(kcdb_ident_sub != NULL) { - sub = kcdb_ident_sub; - } else { - sub = NULL; - rv = KHM_ERROR_NO_PROVIDER; - } - LeaveCriticalSection(&cs_ident); - - if(sub != NULL) { - rv = kmq_send_sub_msg(sub, - KMSG_IDENT, - KMSG_IDENT_VALIDATE_IDENTITY, - 0, - (void *) identity); - } - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identpro_canon_name(const wchar_t * name_in, - wchar_t * name_out, - khm_size * cb_name_out) -{ - khm_handle sub; - kcdb_ident_name_xfer namex; - wchar_t name_tmp[KCDB_IDENT_MAXCCH_NAME]; - khm_int32 rv = KHM_ERROR_SUCCESS; - khm_size cch; - - if(cb_name_out == 0 || - FAILED(StringCchLength(name_in, KCDB_IDENT_MAXCCH_NAME, &cch))) - return KHM_ERROR_INVALID_NAME; - - EnterCriticalSection(&cs_ident); - if(kcdb_ident_sub != NULL) { - sub = kcdb_ident_sub; - } else { - sub = NULL; - rv = KHM_ERROR_NO_PROVIDER; - } - LeaveCriticalSection(&cs_ident); - - if(sub != NULL) { - ZeroMemory(&namex, sizeof(namex)); - ZeroMemory(name_tmp, sizeof(name_tmp)); - - namex.name_src = name_in; - namex.name_dest = name_tmp; - namex.cb_name_dest = sizeof(name_tmp); - namex.result = KHM_ERROR_NOT_IMPLEMENTED; - - rv = kmq_send_sub_msg(sub, - KMSG_IDENT, - KMSG_IDENT_CANON_NAME, - 0, - (void *) &namex); - - if(KHM_SUCCEEDED(namex.result)) { - const wchar_t * name_result; - khm_size cb; - - if(name_in[0] != 0 && name_tmp[0] == 0) - name_result = name_tmp; - else - name_result = name_in; - - if(FAILED(StringCbLength(name_result, KCDB_IDENT_MAXCB_NAME, &cb))) - rv = KHM_ERROR_UNKNOWN; - else { - cb += sizeof(wchar_t); - if(name_out == 0 || *cb_name_out < cb) { - rv = KHM_ERROR_TOO_LONG; - *cb_name_out = cb; - } else { - StringCbCopy(name_out, *cb_name_out, name_result); - *cb_name_out = cb; - rv = KHM_ERROR_SUCCESS; - } - } - } - } - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identpro_compare_name(const wchar_t * name1, - const wchar_t * name2) -{ - khm_handle sub; - kcdb_ident_name_xfer namex; - khm_int32 rv = 0; - - /* Generally in kcdb_identpro_* functions we don't emulate - any behavior if the provider is not available, but lacking - a way to make this known, we emulate here */ - rv = wcscmp(name1, name2); - - EnterCriticalSection(&cs_ident); - if(kcdb_ident_sub != NULL) { - sub = kcdb_ident_sub; - } else { - sub = NULL; - } - LeaveCriticalSection(&cs_ident); - - if(sub != NULL) { - ZeroMemory(&namex, sizeof(namex)); - namex.name_src = name1; - namex.name_alt = name2; - namex.result = rv; - - kmq_send_sub_msg(sub, - KMSG_IDENT, - KMSG_IDENT_COMPARE_NAME, - 0, - (void *) &namex); - - rv = namex.result; - } - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identpro_set_default(khm_handle identity) -{ - khm_handle sub; - khm_int32 rv = KHM_ERROR_SUCCESS; - - if((identity != NULL) && - !kcdb_is_active_identity(identity)) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_ident); - if(kcdb_ident_sub != NULL) { - sub = kcdb_ident_sub; - } else { - sub = NULL; - rv = KHM_ERROR_NO_PROVIDER; - } - LeaveCriticalSection(&cs_ident); - - if(sub != NULL) { - rv = kmq_send_sub_msg(sub, - KMSG_IDENT, - KMSG_IDENT_SET_DEFAULT, - (identity != NULL), - (void *) identity); - } - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identpro_set_searchable(khm_handle identity, - khm_boolean searchable) -{ - khm_handle sub; - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(!kcdb_is_active_identity(identity)) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_ident); - if(kcdb_ident_sub != NULL) { - sub = kcdb_ident_sub; - } else { - sub = NULL; - rv = KHM_ERROR_NO_PROVIDER; - } - LeaveCriticalSection(&cs_ident); - - if(sub != NULL) { - rv = kmq_send_sub_msg( - sub, - KMSG_IDENT, - KMSG_IDENT_SET_SEARCHABLE, - searchable, - (void *) identity); - } - - return rv; -} - - -KHMEXP khm_int32 KHMAPI -kcdb_identpro_update(khm_handle identity) -{ - khm_handle sub; - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(!kcdb_is_active_identity(identity)) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_ident); - if(kcdb_ident_sub != NULL) { - sub = kcdb_ident_sub; - } else { - sub = NULL; - rv = KHM_ERROR_NO_PROVIDER; - } - LeaveCriticalSection(&cs_ident); - - if(sub != NULL) { - rv = kmq_send_sub_msg(sub, - KMSG_IDENT, - KMSG_IDENT_UPDATE, - 0, - (void *) identity); - } - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identpro_notify_create(khm_handle identity) -{ - khm_handle sub; - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(!kcdb_is_active_identity(identity)) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_ident); - if(kcdb_ident_sub != NULL) { - sub = kcdb_ident_sub; - } else { - sub = NULL; - rv = KHM_ERROR_NO_PROVIDER; - } - LeaveCriticalSection(&cs_ident); - - if(sub != NULL) { - rv = kmq_send_sub_msg( - sub, - KMSG_IDENT, - KMSG_IDENT_NOTIFY_CREATE, - 0, - (void *) identity); - } - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identpro_get_ui_cb(void * rock) -{ - khm_handle sub; - khm_int32 rv = KHM_ERROR_SUCCESS; - - EnterCriticalSection(&cs_ident); - if(kcdb_ident_sub != NULL) { - sub = kcdb_ident_sub; - } else { - sub = NULL; - rv = KHM_ERROR_NO_PROVIDER; - } - LeaveCriticalSection(&cs_ident); - - if(sub != NULL) { - rv = kmq_send_sub_msg( - sub, - KMSG_IDENT, - KMSG_IDENT_GET_UI_CALLBACK, - 0, - rock); - } - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kcdb_identity_enum(khm_int32 and_flags, - khm_int32 eq_flags, - wchar_t * name_buf, - khm_size * pcb_buf, - khm_size * pn_idents) -{ - kcdb_identity * id; - khm_int32 rv = KHM_ERROR_SUCCESS; - khm_size cb_req = 0; - khm_size n_idents = 0; - size_t cb_curr; - size_t cch_curr; - size_t cch_left; - HRESULT hr; - - if ((name_buf == NULL && pcb_buf == NULL && pn_idents == NULL) || - (name_buf != NULL && pcb_buf == NULL)) - return KHM_ERROR_INVALID_PARAM; - - eq_flags &= and_flags; - - EnterCriticalSection(&cs_ident); - - if (!kcdb_checked_config) { - khm_handle h_kcdb = NULL; - khm_handle h_idents = NULL; - khm_handle h_ident = NULL; - - kcdb_checked_config = TRUE; - kcdb_checking_config = TRUE; - - h_kcdb = kcdb_get_config(); - if (!h_kcdb) - goto _config_check_cleanup; - if(KHM_FAILED(khc_open_space(h_kcdb, L"Identity", 0, &h_idents))) - goto _config_check_cleanup; - - while(KHM_SUCCEEDED(khc_enum_subspaces(h_idents, - h_ident, - &h_ident))) { - - wchar_t wname[KCDB_IDENT_MAXCCH_NAME]; - khm_size cb; - khm_handle t_id; - - cb = sizeof(wname); - if (KHM_FAILED(khc_get_config_space_name(h_ident, - wname, - &cb))) - continue; - - LeaveCriticalSection(&cs_ident); - - if (KHM_SUCCEEDED(kcdb_identity_create(wname, - KCDB_IDENT_FLAG_CREATE, - &t_id))) - kcdb_identity_release(t_id); - - EnterCriticalSection(&cs_ident); - } - - _config_check_cleanup: - if (h_kcdb) - khc_close_space(h_kcdb); - if (h_idents) - khc_close_space(h_idents); - - kcdb_checking_config = FALSE; - } - - for ( id = kcdb_identities; - id != NULL; - id = LNEXT(id) ) { - if (((id->flags & KCDB_IDENT_FLAG_ACTIVE) == - KCDB_IDENT_FLAG_ACTIVE) && - ((id->flags & and_flags) == eq_flags)) { - n_idents ++; - hr = StringCbLength(id->name, KCDB_IDENT_MAXCB_NAME, &cb_curr); -#ifdef DEBUG - assert(SUCCEEDED(hr)); -#endif - cb_req += cb_curr + sizeof(wchar_t); - } - } - - cb_req += sizeof(wchar_t); - - if (pn_idents != NULL) - *pn_idents = n_idents; - - if (pcb_buf != NULL && (name_buf == NULL || *pcb_buf < cb_req)) { - *pcb_buf = cb_req; - - rv = KHM_ERROR_TOO_LONG; - } else if(name_buf != NULL) { - cch_left = (*pcb_buf) / sizeof(wchar_t); - - for (id = kcdb_identities; - id != NULL; - id = LNEXT(id)) { - if (((id->flags & KCDB_IDENT_FLAG_ACTIVE) == - KCDB_IDENT_FLAG_ACTIVE) && - ((id->flags & and_flags) == eq_flags)) { - StringCchLength(id->name, KCDB_IDENT_MAXCCH_NAME, - &cch_curr); - cch_curr++; - StringCchCopy(name_buf, cch_left, id->name); - cch_left -= cch_curr; - name_buf += cch_curr; - } - } - - *name_buf = L'\0'; - *pcb_buf = cb_req; - } - - LeaveCriticalSection(&cs_ident); - - return rv; -} diff --git a/src/windows/identity/kcreddb/identity.h b/src/windows/identity/kcreddb/identity.h deleted file mode 100644 index ba55a201b..000000000 --- a/src/windows/identity/kcreddb/identity.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KCDB_IDENTITY_H -#define __KHIMAIRA_KCDB_IDENTITY_H - -/* Identity */ - -#define KCDB_IDENT_HASHTABLE_SIZE 31 - -typedef struct kcdb_identity_t { - khm_int32 magic; - wchar_t * name; - khm_int32 flags; - khm_int32 refcount; - kcdb_buf buf; - khm_ui_4 refresh_cycle; - LDCL(struct kcdb_identity_t); -} kcdb_identity; - -#define KCDB_IDENT_MAGIC 0x31938d4f - -extern hashtable * kcdb_identities_namemap; -extern khm_int32 kcdb_n_identities; -extern kcdb_identity * kcdb_identities; /* all identities */ -extern kcdb_identity * kcdb_def_identity; /* default identity */ -extern khm_ui_4 kcdb_ident_refresh_cycle; - -void kcdbint_ident_init(void); -void kcdbint_ident_exit(void); -void kcdbint_ident_msg_completion(kmq_message * m); -void kcdbint_ident_post_message(khm_int32 op, kcdb_identity * id); - -#define kcdb_is_identity(id) ((id) && ((kcdb_identity *)(id))->magic == KCDB_IDENT_MAGIC) -#define kcdb_is_active_identity(id) (kcdb_is_identity(id) && (((kcdb_identity *)(id))->flags & KCDB_IDENT_FLAG_ACTIVE)) - -#endif diff --git a/src/windows/identity/kcreddb/init.c b/src/windows/identity/kcreddb/init.c deleted file mode 100644 index cea97a8c7..000000000 --- a/src/windows/identity/kcreddb/init.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<kcreddbinternal.h> - -/* set to TRUE when the configuration is loaded */ -static int kcdb_config_loaded = 0; - -/* global state cs */ -static CRITICAL_SECTION cs_kcdb_global; - -/* forward dcl */ -void KHMAPI kcdb_msg_completion(kmq_message * m); - -void kcdb_init(void) { - /* setup the critical sections */ - InitializeCriticalSection(&cs_kcdb_global); - - kmq_set_completion_handler(KMSG_KCDB, kcdb_msg_completion); - - kcdb_credtype_init(); - kcdbint_ident_init(); - kcdb_credset_init(); - kcdb_cred_init(); - kcdb_type_init(); - kcdb_attrib_init(); -} - -void kcdb_exit(void) { - - kcdb_attrib_exit(); - kcdb_type_exit(); - kcdb_cred_exit(); - kcdb_credset_exit(); - kcdbint_ident_exit(); - kcdb_credtype_exit(); - - kmq_set_completion_handler(KMSG_KCDB, NULL); - - DeleteCriticalSection(&cs_kcdb_global); -} - -khm_handle kcdb_get_config(void) { - khm_handle space = NULL; - - EnterCriticalSection(&cs_kcdb_global); - if(!kcdb_config_loaded) { - khc_load_schema(NULL, schema_kcdbconfig); - kcdb_config_loaded = 1; - } - khc_open_space(NULL, L"KCDB", 0, &space); - LeaveCriticalSection(&cs_kcdb_global); - - return space; -} - -void KHMAPI kcdb_msg_completion(kmq_message * m) { - if(!m) - return; - if(m->subtype == KMSG_KCDB_IDENT) - kcdbint_ident_msg_completion(m); - else if(m->subtype == KMSG_KCDB_ATTRIB) - kcdb_attrib_msg_completion(m); - else if(m->subtype == KMSG_KCDB_TYPE) - kcdb_type_msg_completion(m); - else if(m->subtype == KMSG_KCDB_CREDTYPE) - kcdb_credtype_msg_completion(m); -} diff --git a/src/windows/identity/kcreddb/kcdbconfig.csv b/src/windows/identity/kcreddb/kcdbconfig.csv deleted file mode 100644 index f4b52eea2..000000000 --- a/src/windows/identity/kcreddb/kcdbconfig.csv +++ /dev/null @@ -1,15 +0,0 @@ -Name,Type,Value,Description -KCDB,KC_SPACE,0,Khimaira Configuration DB - Identity,KC_SPACE,0,Configuration space for identities - _Schema,KC_SPACE,0,Schema for identities - Sticky,KC_INT32,0,Boolean. Is this a sticky identity? - Monitor,KC_INT32,1,Boolean. Enables monitoring the identity - WarnThreshold,KC_INT32,900,In seconds - AllowWarn,KC_INT32,1,Boolean. Allow warning. - CriticalThreshold,KC_INT32,60,In seconds - AllowCritical,KC_INT32,1,Boolean. Allow critical. - AutoRenewThreshold,KC_INT32,60,In seconds - AllowAutoRenew,KC_INT32,1,Boolean. - _Schema,KC_ENDSPACE,0, - Identity,KC_ENDSPACE,0, -KCDB,KC_ENDSPACE,0, diff --git a/src/windows/identity/kcreddb/kcreddb.h b/src/windows/identity/kcreddb/kcreddb.h deleted file mode 100644 index e58c8ffa3..000000000 --- a/src/windows/identity/kcreddb/kcreddb.h +++ /dev/null @@ -1,3329 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KCREDDB_H__ -#define __KHIMAIRA_KCREDDB_H__ - -#include<khdefs.h> -#include<time.h> - - -/*! \defgroup kcdb NetIDMgr Credentials Database */ -/*@{*/ - -/*! \brief Maximum length in characters of short description - - The length includes the terminating \a NULL character. - */ -#define KCDB_MAXCCH_SHORT_DESC 256 - -/*! \brief Maximum length in bytes of short description - - The length includes the terminating \a NULL character. - */ -#define KCDB_MAXCB_SHORT_DESC (sizeof(wchar_t) * KCDB_MAXCCH_SHORT_DESC) - -/*! \brief Maximum length in characters of long description - - The length includes the terminating \a NULL character. - */ -#define KCDB_MAXCCH_LONG_DESC 8192 - -/*! \brief Maximum length in characters of long description - - The length includes the terminating \a NULL character. - */ -#define KCDB_MAXCB_LONG_DESC (sizeof(wchar_t) * KCDB_MAXCCH_LONG_DESC) - -/*! \brief Maximum length in characters of name - - The length includes the terminating \a NULL character. - */ -#define KCDB_MAXCCH_NAME 256 - -/*! \brief Maximum length in bytes of short description - - The length includes the terminating \a NULL character. - */ -#define KCDB_MAXCB_NAME (sizeof(wchar_t) * KCDB_MAXCCH_NAME) - -/*! \brief Automatically determine the number of bytes required - - Can be used in most places where a count of bytes is required. - For many objects, the number of bytes that are required can be - determined through context and may be ommited. In such cases you - can use the \a KCDB_CBSIZE_AUTO value to specify that the function - is to determine the size automatically. - - \note Not all functions that take a count of bytes support the \a - KCDB_CBSIZE_AUTO value. -*/ -#define KCDB_CBSIZE_AUTO ((khm_size) -1) - -/*! -\defgroup kcdb_ident Identities - -Functions, macros etc. for manipulating identities. -*/ - -/*@{*/ - -/*! \brief The maximum number of characters (including terminator) that can - be specified as an identity name */ -#define KCDB_IDENT_MAXCCH_NAME 256 - -/*! \brief The maximum number of bytes that can be specified as an identity - name */ -#define KCDB_IDENT_MAXCB_NAME (sizeof(wchar_t) * KCDB_IDENT_MAXCCH_NAME) - -/*! \brief Valid characters in an identity name */ -#define KCDB_IDENT_VALID_CHARS L"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ._@-/" - -/*! -\name Flags for identities */ -/*@{*/ - -/*! \brief Create the identity if it doesn't already exist. - \note Only to be used with kcdb_identity_create() */ -#define KCDB_IDENT_FLAG_CREATE 0x10000000L - -/*! \brief Has configuration information - - Indicates that the identity has persistent configuration - information associated with it. - */ -#define KCDB_IDENT_FLAG_CONFIG 0x00800000L - -/*! \brief Marks the identity as active. - - An active identity is one that is in active use within NetIDMgr. - - \note This flag is readonly and cannot be specified when creating - or modifying an identity. Once an identity is deleted, it will - no longer have this flag. */ -#define KCDB_IDENT_FLAG_ACTIVE 0x02000000L - - -/*! \brief The identity has custom attributes assigned - */ -#define KCDB_IDENT_FLAG_ATTRIBS 0x08000000L - -/*! \brief This is the default identity. - - At most one identity will have this flag set at any given time. - To set or reset the flag, use kcdb_identity_set_default() */ -#define KCDB_IDENT_FLAG_DEFAULT 0x00000001L - -/*! \brief This identity can be searched. - - The meaning of this flag is left to be interpreted by individual - plugins. */ -#define KCDB_IDENT_FLAG_SEARCHABLE 0x00000002L - -/*! \brief Hidden identity. - - The identity will not show up in the identity list window. Once - the hidden is switched off, the identity (and all associated - credentials) will re-appear in the window */ -#define KCDB_IDENT_FLAG_HIDDEN 0x00000004L - -/*! \brief Invalid identity - - For one reason or another, this identity is invalid. This flag - can be set by an identity provider to indicate that this identity - does not correspond to an actual identity because an external - entity (such as a KDC) has denied it's existence. - - The absence of this flag does not imply that the identity is - valid. The ::KCDB_IDENT_FLAG_VALID bit must be set for that to be - the case. If neither flag is set, then the status of the identity - is not known. -*/ -#define KCDB_IDENT_FLAG_INVALID 0x00000008L - -/*! \brief Valid identity - - The identity has been validated through an external entity, or - it's validity implied through the existence of credentials for the - identity. - - The absence of this flag does not imply that the identity is - invalid. The ::KCDB_IDENT_FLAG_INVALID bit must be set for that - to be the case. If neither flag is set, then the status of the - identity is not known. - */ -#define KCDB_IDENT_FLAG_VALID 0x00000010L - -/*! \brief Expired identity - - This identity has expired and can not be actively used to obtain - credentials. This determination is made based on the input of - some external entity. This flag may only be set by an identity - provider. -*/ -#define KCDB_IDENT_FLAG_EXPIRED 0x00000020L - -/*! \brief Empty identity - - The identity does not have actual credentials associated with it. - */ -#define KCDB_IDENT_FLAG_EMPTY 0x00000040L - -/*! \brief Renewable identity - - The initial credentials associated with this identity are - renewable. Thus making the whole identity renewable. - */ -#define KCDB_IDENT_FLAG_RENEWABLE 0x00000080L - -/*! \brief Required user interaction - - The identity is in a state which requires user interaction to - activate. Currently, the identity may not be in a state where it - can be used to obtain credentials. - - A typical example of this is when the primary password for an - identity has expired. - */ -#define KCDB_IDENT_FLAG_INTERACT 0x00000100L - -/*! \brief Has expired credentials - - The identity has expired credentials associated with it. - */ -#define KCDB_IDENT_FLAG_CRED_EXP 0x00000200L - -/*! \brief Has renewable credentials - - The identity has renewable credentials associated with it. If the - initial credentials of the identity are renewable, then identity - is renewable. Hence the ::KCDB_IDENT_FLAG_RENEWABLE should also - be set. - */ -#define KCDB_IDENT_FLAG_CRED_RENEW 0x00000400L - -/*! \brief Sticky identity - - Sticky identities are identities that are always visible in the - credentials display even if no credentials are associated with it. - */ -#define KCDB_IDENT_FLAG_STICKY 0x00000800L - -/*! \brief Unknown state - - The validity of the identity cannot be determined. This usually - means that an authority could not be contacted. This flag is to - be treated as transient. If ::KCDB_IDENT_FLAG_INVALID or - ::KCDB_IDENT_FLAG_VALID is set for the identity, this flag is to - be ignored. - */ -#define KCDB_IDENT_FLAG_UNKNOWN 0x00001000L - -/*! \brief Read/write flags mask. - - A bitmask that correspond to all the read/write flags in the mask. -*/ -#define KCDB_IDENT_FLAGMASK_RDWR 0x00001fffL - -/*@}*/ - -/*! \name Identity Provider Data Structures -@{*/ - -/*! \brief Name transfer structure - - Used when the KCDB is communicating with the identity provider to - exchange string names of identities. See individual ::KMSG_IDENT - message subtypes for the usage of this structure. - */ -typedef struct tag_kcdb_ident_name_xfer { - const wchar_t * name_src; /*!< An identity name. Does not - exceed KCDB_IDENT_MAXCCH_NAME - characters including terminating - NULL. */ - const wchar_t * name_alt; /*!< An identity name. Does not - exceed KCDB_IDENT_MAXCCH_NAME - characters including terminating - NULL. */ - wchar_t * name_dest; /*!< Pointer to a buffer that is to - receive a response string. The - size of the buffer in bytes is - specified in \a cb_name_dest. */ - khm_size cb_name_dest; /*!< Size of buffer pointed to by \a - name_dest in bytes. */ - khm_int32 result; /*!< Receives a result value, which is - usually an error code defined in - kherror.h, though it is not - always. */ -} kcdb_ident_name_xfer; - -typedef struct tag_kcdb_ident_info { - khm_handle identity; - khm_int32 fields; - - FILETIME expiration; -} kcdb_ident_info; - -/*@}*/ - -/*! \name Identity provider interface functions - - These functions encapsulate safe calls to the current identity - provider. While these functions are exported, applications should - not call these functions directly. They are provided for use by - the NetIDMgr core application. -@{*/ - -/*! \brief Validate an identity name - - The name that is provided will be passed through sets of - validations. One set, which doesn't depend on the identity - provider checks whether the length of the identity name and - whether there are any invalid characters in the identity name. If - the name passes those tests, then the name is passed down to the - identity provider's name validation handler. - - \retval KHM_ERROR_SUCCESS The name is valid - \retval KHM_ERROR_TOO_LONG Too many characters in name - \retval KHM_ERROR_INVALID_NAME There were invalid characters in the name. - \retval KHM_ERROR_NO_PROVIDER There is no identity provider; - however the name passed the length and character tests. - \retval KHM_ERROR_NOT_IMPLEMENTED The identity provider doesn't - implement a name validation handler; however the name passed - the length and character tests. - - \see ::KMSG_IDENT_VALIDATE_NAME - */ -KHMEXP khm_int32 KHMAPI -kcdb_identpro_validate_name(const wchar_t * name); - -/*! \brief Validate an identity - - The identity itself needs to be validated. This may involve - communicating with an external entity. - - \see ::KMSG_IDENT_VALIDATE_IDENTITY - */ -KHMEXP khm_int32 KHMAPI -kcdb_identpro_validate_identity(khm_handle identity); - -/*! \brief Canonicalize the name - - - \see ::KMSG_IDENT_CANON_NAME -*/ -KHMEXP khm_int32 KHMAPI -kcdb_identpro_canon_name(const wchar_t * name_in, - wchar_t * name_out, - khm_size * cb_name_out); - -/*! \brief Compare two identity names - - \see ::KMSG_IDENT_COMPARE_NAME -*/ -KHMEXP khm_int32 KHMAPI -kcdb_identpro_compare_name(const wchar_t * name1, - const wchar_t * name2); - -/*! \brief Set the specified identity as the default - - \see ::KMSG_IDENT_SET_DEFAULT -*/ -KHMEXP khm_int32 KHMAPI -kcdb_identpro_set_default(khm_handle identity); - -/*! \brief Set the specified identity as searchable - - \see ::KMSG_IDENT_SET_SEARCHABLE -*/ -KHMEXP khm_int32 KHMAPI -kcdb_identpro_set_searchable(khm_handle identity, - khm_boolean searchable); - -/*! \brief Update the specified identity - - \see ::KMSG_IDENT_UPDATE -*/ -KHMEXP khm_int32 KHMAPI -kcdb_identpro_update(khm_handle identity); - -/*! \brief Obtain the UI callback - - \a rock is actually a pointer to a ::khui_ident_new_creds_cb which - is to receive the callback. - - \see ::KMSG_IDENT_GET_UI_CALLBACK - */ -KHMEXP khm_int32 KHMAPI -kcdb_identpro_get_ui_cb(void * rock); - -/*! \brief Notify an identity provider of the creation of a new identity - - \see ::KMSG_IDENT_NOTIFY_CREATE -*/ -KHMEXP khm_int32 KHMAPI -kcdb_identpro_notify_create(khm_handle identity); - -/*@}*/ - -/*! \brief Check if the given name is a valid identity name - - \return TRUE or FALSE to the question, is this valid? -*/ -KHMEXP khm_boolean KHMAPI -kcdb_identity_is_valid_name(const wchar_t * name); - -/*! \brief Create or open an identity. - - If the KCDB_IDENT_FLAG_CREATE flag is specified in the flags - parameter a new identity will be created if one does not already - exist with the given name. If an identity by that name already - exists, then the existing identity will be opened. The result - parameter will receive a held reference to the opened identity. - Use kcdb_identity_release() to release the handle. - - \param[in] name Name of identity to create - \param[in] flags If KCDB_IDENT_FLAG_CREATE is specified, then the - identity will be created if it doesn't already exist. - Additional flags can be set here which will be assigned to the - identity if it is created. Additional flags have no effect if - an existing identity is opened. - \param[out] result If the call is successful, this receives a held - reference to the identity. The caller should call - kcdb_identity_release() to release the identity once it is no - longer needed. - */ -KHMEXP khm_int32 KHMAPI -kcdb_identity_create(const wchar_t *name, - khm_int32 flags, - khm_handle * result); - -/*! \brief Mark an identity for deletion. - - The identity will be marked for deletion. The - KCDB_IDENT_FLAG_ACTIVE will no longer be present for this - identity. Once all references to the identity are released, it - will be removed from memory. All associated credentials will also - be removed. */ -KHMEXP khm_int32 KHMAPI -kcdb_identity_delete(khm_handle id); - -/*! \brief Set or unset the specified flags in the specified identity. - - Only flags that are in KCDB_IDENT_FLAGMASK_RDWR can be specifed in - the \a flags parameter or the \a mask parameter. The flags set in - the \a mask parameter of the identity will be set to the - corresponding values in the \a flags parameter. - - If ::KCDB_IDENT_FLAG_INVALID is set using this function, then the - ::KCDB_IDENT_FLAG_VALID will be automatically reset, and vice - versa. Resetting either bit does not undo this change, and will - leave the identity's validity unspecified. Setting either of - ::KCDB_IDENT_FLAG_INVALID or ::KCDB_IDENT_FLAG_VALID will - automatically reset ::KCDB_IDENT_FLAG_UNKNOWN. - - Note that setting or resetting certain flags have other semantic - side-effects: - - - ::KCDB_IDENT_FLAG_DEFAULT : Setting this is equivalent to - calling kcdb_identity_set_default() with \a id. Resetting this - is equivalent to calling kcdb_identity_set_default() with NULL. - - - ::KCDB_IDENT_FLAG_SEARCHABLE : Setting this will result in the - identity provider getting notified of the change. If the - identity provider indicates that searchable flag should not be - set or reset on the identity, then kcdb_identity_set_flags() - will return an error. - - \note kcdb_identity_set_flags() is not atomic. Even if the - function returns a failure code, some flags in the identity may - have been set. When calling kcdb_identity_set_flags() always - check the flags in the identity using kcdb_identity_get_flags() to - check which flags have been set and which have failed. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_identity_set_flags(khm_handle id, - khm_int32 flags, - khm_int32 mask); - -/*! \brief Return all the flags for the identity - - The returned flags may include internal flags. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_flags(khm_handle id, - khm_int32 * flags); - -/*! \brief Return the name of the identity - - \param[out] buffer Buffer to copy the identity name into. The - maximum size of an identity name is \a KCDB_IDENT_MAXCB_NAME. - If \a buffer is \a NULL, then the required size of the buffer - is returned in \a pcbsize. - - \param[in,out] pcbsize Size of buffer in bytes. */ -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_name(khm_handle id, - wchar_t * buffer, - khm_size * pcbsize); - -/*! \brief Set the specified identity as the default. - - Specifying NULL effectively makes none of the identities the - default. - - \see kcdb_identity_set_flags() -*/ -KHMEXP khm_int32 KHMAPI -kcdb_identity_set_default(khm_handle id); - -/*! \brief Mark the specified identity as the default. - - This API is reserved for use by identity providers as a means of - specifying which identity is default. The difference between - kcdb_identity_set_default() and kcdb_identity_set_default_int() is - in semantics. - - - kcdb_identity_set_default() is used to request the KCDB to - designate the specified identity as the default. When - processing the request, the KCDB invokes the identity provider - to do the necessary work to make the identity the default. - - - kcdb_identity_set_default_int() is used by the identity provider - to notify the KCDB that the specified identity is the default. - This does not result in the invocation of any other semantics to - make the identity the default other than releasing the previous - defualt identity and making the specified one the default. - */ -KHMEXP khm_int32 KHMAPI -kcdb_identity_set_default_int(khm_handle id); - -/*! \brief Get the default identity - - Obtain a held handle to the default identity if there is one. The - handle must be freed using kcdb_identity_release(). - - If there is no default identity, then the handle pointed to by \a - pvid is set to \a NULL and the function returns - KHM_ERROR_NOT_FOUND. */ -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_default(khm_handle * pvid); - -/*! \brief Get the configuration space for the identity. - - If the configuration space for the identity does not exist and the - flags parameter does not specify ::KHM_FLAG_CREATE, then the - function will return a failure code as specified in - ::khc_open_space(). Depending on whether or not a configuration - space was found, the ::KCDB_IDENT_FLAG_CONFIG flag will be set or - reset for the identity. - - \param[in] id Identity for which the configuraiton space is requested - - \param[in] flags Flags used when calling khc_open_space(). If \a - flags specifies KHM_FLAG_CREATE, then the configuration space - is created. - - \param[out] result The resulting handle. If the call is - successful, this receives a handle to the configuration space. - Use khc_close_space() to close the handle. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_config(khm_handle id, - khm_int32 flags, - khm_handle * result); - -/*! \brief Hold a reference to an identity. - - A reference to an identity (a handle) is only valid while it is - held. \note Once the handle is released, it can not be - revalidated by calling kcdb_identity_hold(). Doing so would lead - to unpredictable consequences. */ -KHMEXP khm_int32 KHMAPI -kcdb_identity_hold(khm_handle id); - -/*! \brief Release a reference to an identity. - \see kcdb_identity_hold() */ -KHMEXP khm_int32 KHMAPI -kcdb_identity_release(khm_handle id); - -/*! \brief Set the identity provider subscription - - If there was a previous subscription, that subscription will be - automatically deleted. - - \param[in] sub New identity provider subscription -*/ -KHMEXP khm_int32 KHMAPI -kcdb_identity_set_provider(khm_handle sub); - -/*! \brief Set the primary credentials type - - The primary credentials type is designated by the identity - provider. As such, this function should only be called by an - identity provider. - */ -KHMEXP khm_int32 KHMAPI -kcdb_identity_set_type(khm_int32 cred_type); - -/*! \brief Retrieve the identity provider subscription - - \param[out] sub Receives the current identity provider - subscription. Set to NULL if only the existence of an - identity provider needs to be checked. - - \retval KHM_ERROR_SUCCESS An identity provider exists. If \a sub - was not NULL, the subscription has been copied there. - - \retval KHM_ERROR_NOT_FOUND There is currently no registered - identity provider. If \a sub was not NULL, the handle it - points to has been set to NULL. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_provider(khm_handle * sub); - -/*! \brief Retrieve the identity provider credentials type - - This is the credentials type that the identity provider has - designated as the primary credentials type. - */ -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_type(khm_int32 * ptype); - -/*! \brief Returns TRUE if the two identities are equal - - Also returns TRUE if both identities are NULL. - */ -KHMEXP khm_boolean KHMAPI -kcdb_identity_is_equal(khm_handle identity1, - khm_handle identity2); - -/*! \brief Set an attribute in an identity by attribute id - - \param[in] buffer A pointer to a buffer containing the data to - assign to the attribute. Setting \a buffer to NULL has the - effect of removing any data that is already assigned to the - attribute. If \a buffer is non-NULL, then \a cbbuf should - specify the number of bytes in \a buffer. - - \param[in] cbbuf Number of bytes of data in \a buffer. The - individual data type handlers may copy in less than this many - bytes in to the credential. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_identity_set_attr(khm_handle identity, - khm_int32 attr_id, - void * buffer, - khm_size cbbuf); - -/*! \brief Set an attribute in an identity by name - - The attribute name has to be a KCDB registered attribute or - property. - - \param[in] cbbuf Number of bytes of data in \a buffer. The - individual data type handlers may copy in less than this many - bytes in to the credential. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_identity_set_attrib(khm_handle identity, - const wchar_t * attr_name, - void * buffer, - khm_size cbbuf); - -/*! \brief Get an attribute from an identity by attribute id. - - \param[in] buffer The buffer that is to receive the attribute - value. Set this to NULL if only the required buffer size is - to be returned. - - \param[in,out] cbbuf The number of bytes available in \a buffer. - If \a buffer is not sufficient, returns KHM_ERROR_TOO_LONG and - sets this to the required buffer size. - - \param[out] attr_type Receives the data type of the attribute. - Set this to NULL if the type is not required. - - \note Set both \a buffer and \a cbbuf to NULL if only the - existence of the attribute is to be checked. If the attribute - exists in this identity then the function will return - KHM_ERROR_SUCCESS, otherwise it returns KHM_ERROR_NOT_FOUND. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_attr(khm_handle identity, - khm_int32 attr_id, - khm_int32 * attr_type, - void * buffer, - khm_size * pcbbuf); - -/*! \brief Get an attribute from an identity by name. - - \param[in] buffer The buffer that is to receive the attribute - value. Set this to NULL if only the required buffer size is - to be returned. - - \param[in,out] cbbuf The number of bytes available in \a buffer. - If \a buffer is not sufficient, returns KHM_ERROR_TOO_LONG and - sets this to the required buffer size. - - \note Set both \a buffer and \a cbbuf to NULL if only the - existence of the attribute is to be checked. If the attribute - exists in this identity then the function will return - KHM_ERROR_SUCCESS, otherwise it returns KHM_ERROR_NOT_FOUND. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_attrib(khm_handle identity, - const wchar_t * attr_name, - khm_int32 * attr_type, - void * buffer, - khm_size * pcbbuf); - -/*! \brief Get the string representation of an identity attribute. - - A shortcut function which generates the string representation of - an identity attribute directly. - - \param[in] identity A handle to an identity - - \param[in] attr_id The attribute to retrieve - - \param[out] buffer A pointer to a string buffer which receives the - string form of the attribute. Set this to NULL if you only - want to determine the size of the required buffer. - - \param[in,out] pcbbuf A pointer to a #khm_int32 that, on entry, - holds the size of the buffer pointed to by \a buffer, and on - exit, receives the actual number of bytes that were copied. - - \param[in] flags Flags for the string conversion. Can be set to - one of KCDB_TS_LONG or KCDB_TS_SHORT. The default is - KCDB_TS_LONG. - - \retval KHM_ERROR_SUCCESS Success - \retval KHM_ERROR_NOT_FOUND The given attribute was either invalid - or was not defined for this identity - \retval KHM_ERROR_INVALID_PARAM One or more parameters were invalid - \retval KHM_ERROR_TOO_LONG Either \a buffer was NULL or the - supplied buffer was insufficient -*/ -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_attr_string(khm_handle identity, - khm_int32 attr_id, - wchar_t * buffer, - khm_size * pcbbuf, - khm_int32 flags); - -/*! \brief Get the string representation of an identity attribute by name. - - A shortcut function which generates the string representation of - an identity attribute directly. - - \param[in] identity A handle to an identity - - \param[in] attrib The name of the attribute to retrieve - - \param[out] buffer A pointer to a string buffer which receives the - string form of the attribute. Set this to NULL if you only - want to determine the size of the required buffer. - - \param[in,out] pcbbuf A pointer to a #khm_int32 that, on entry, - holds the size of the buffer pointed to by \a buffer, and on - exit, receives the actual number of bytes that were copied. - - \param[in] flags Flags for the string conversion. Can be set to - one of KCDB_TS_LONG or KCDB_TS_SHORT. The default is - KCDB_TS_LONG. - - \see kcdb_identity_get_attr_string() -*/ -KHMEXP khm_int32 KHMAPI -kcdb_identity_get_attrib_string(khm_handle identity, - const wchar_t * attr_name, - wchar_t * buffer, - khm_size * pcbbuf, - khm_int32 flags); - -/*! \brief Enumerate identities - - Enumerates all the active identities that match the criteria - specified using \a and_flags and \a eq_flags. The condition is - applied to all active identities as follows: - - \code - (identity->flags & and_flags) == (eq_flags & and_flags) - \endcode - - Essentially, if a flag is set in \a and_flags, then that flag in - the identity should equal the setting in \a eq_flags. - - \param[in] and_flags See above - - \param[in] eq_flags See above - - \param[out] name_buf Buffer to receive the list of identity names. - Can be NULL if only the required size of the buffer or the - number of matching identities is required. The list is - returned as a multi string. - - \param[in,out] pcb_buf Number of bytes in buffer pointed to by \a - name_buf on entry. On exit, will receive the number of bytes - copied. Can be NULL only if \a name_buf is also NULL. If \a - name_buf is NULL or if \a pcb_buf indicates that the buffer is - insufficient, this will receive the number of bytes required - and the return value of the function will be - KHM_ERROR_TOO_LONG - - \param[out] pn_idents Receives the number of identities that match - the given criteria. - - \retval KHM_ERROR_SUCCESS If \a name_buf was valid, the buffer now - contains a multi string of identities that matched. If \a - pn_idents was valid, it contains the number of identities - matched. - - \retval KHM_ERROR_TOO_LONG No buffer was supplied or the supplied - buffer was insufficient. If \a pn_idents was valid, it - contains the number of identities. - - \retval KHM_ERROR_INVALID_PARAM None of the parameters \a name_buf, - \a pcb_buf and \a pn_idents were supplied, or \a pcb_buf was - NULL when \a name_buf was not. - - \note Calling this function to obtain the required size of the - buffer and then calling it with a that sized buffer is not - guaranteed to work since the list of identities may change - between the two calls. - */ -KHMEXP khm_int32 KHMAPI -kcdb_identity_enum(khm_int32 and_flags, - khm_int32 eq_flags, - wchar_t * name_buf, - khm_size * pcb_buf, - khm_size * pn_idents); - -/*! \brief Refresh identity attributes based on root credential set - - Several flags in an identity are dependent on the credentials that - are associated with it in the root credential set. In addition, - other flags in an identity depend on external factors that need to - be verfied once in a while. This API goes through the root - credential set as well as consulting the identity provider to - update an identity. - - \see kcdb_identity_refresh() - */ -KHMEXP khm_int32 KHMAPI -kcdb_identity_refresh(khm_handle vid); - -/*! \brief Refresh all identities - - Equivalent to calling kcdb_identity_refresh() for all active - identities. - - \see kcdb_identityt_refresh() - */ -KHMEXP khm_int32 KHMAPI -kcdb_identity_refresh_all(void); - -/* KSMG_KCDB_IDENT notifications are structured as follows: - type=KMSG_KCDB - subtype=KMSG_KCDB_IDENT - uparam=one of KCDB_OP_* - blob=handle to identity in question */ - -/*@}*/ - - -/*********************************************************************/ - - -/*! -\defgroup kcdb_creds Credential sets and individual credentials - -@{ -*/ - - -/*! \brief Credentials process function - - This function is called for each credential in a credential set - when supplied to kcdb_credset_apply(). It should return - KHM_ERROR_SUCCESS to continue the operation, or any other value to - terminate the processing. - - \see kcdb_credset_apply() -*/ -typedef khm_int32 -(KHMAPI *kcdb_cred_apply_func)(khm_handle cred, - void * rock); - -/*! \brief Credentials filter function. - - Should return non-zero if the credential passed as \a cred is to - be "accepted". The precise consequence of a non-zero return value - is determined by the individual function that this call back is - passed into. - - This function should not call any other function which may modify - \a cred. - - \see kcdb_credset_collect_filtered() - \see kcdb_credset_extract_filtered() -*/ -typedef khm_int32 -(KHMAPI *kcdb_cred_filter_func)(khm_handle cred, - khm_int32 flags, - void * rock); - -/*! \brief Credentials compare function. - - Asserts a weak ordering on the credentials that are passed in as - \a cred1 and \a cred2. It should return: - - - a negative value if \a cred1 < \a cred2 - - zero if \a cred1 == \a cred2 - - a postive value if \a cred1 > \a cred2 - \see kcdb_credset_sort() - \see ::kcdb_credtype -*/ -typedef khm_int32 -(KHMAPI *kcdb_cred_comp_func)(khm_handle cred1, - khm_handle cred2, - void * rock); - -/*! \defgroup kcdb_credset Credential sets */ -/*@{*/ - -/*! \brief Create a credential set. - - Credential sets are temporary containers for credentials. These - can be used by plug-ins to store credentials while they are being - enumerated from an external source. Once all the credentials have - been collected into the credential set, the plug-in may call - kcdb_credset_collect() to collect the credentials into the root - credential store. - - The user interface will only display credentials that are in the - root credential store. No notifications are generated for changes - to a non-root credential set. - - Use kcdb_credset_delete() to delete the credential set once it is - created. - - \see kcdb_credset_delete() - \see kcdb_credset_collect() -*/ -KHMEXP khm_int32 KHMAPI -kcdb_credset_create(khm_handle * result); - -/** \brief Delete a credential set - - \see kcdb_credset_create() -*/ -KHMEXP khm_int32 KHMAPI -kcdb_credset_delete(khm_handle credset); - -/** \brief Collect credentials from a credential set to another credential set. - - Collecting a subset of credentials from credential set \a cs_src - into credential set \a cs_dest involves the following steps: - - - Select all credentials from \a cs_src that matches the \a - identity and \a type specified in the function call and add them - to the \a cs_dest credential set if they are not there already. - Note that if neither credential set is not the root credential - store, then the credentials will be added by reference, while if - it is the root credential store, the credentials will be - duplicated, and the copies will be added to \a cs_dest. - - - If a selected credential in \a cs_src already exists in \a - cs_dest, then update the credential in \a cs_dest with the - credential fields in \a cs_src. In other words, once a - credential is found to exist in both \a cs_src and \a cs_dest, - all the non-null fields from the credential in \a cs_src will be - copied to the credential in \a cs_dest. Fields which are null - (undefined) in \a cs_src and are non-null in \a cs_dest will be - left unmodified in \a cs_dest. - - One notable exception is the credentials' flags. All flags in - \a cs_src which are not included in - ::KCDB_CRED_FLAGMASK_ADDITIVE will be copied to the - corresponding bits in the flags of \a cs_dest. However, flags - that are included in ::KCDB_CRED_FLAGMASK_ADDITIVE will be added - to the corresponding bits in \a cs_dest. - - (See notes below) - - - Remove all credentials from \a cs_dest that match the \a - identity and \a type that do not appear in \a cs_src. (see notes - below) - - For performance reasons, plugins should use kcdb_credset_collect() - to update the root credentials store instead of adding and - removing individual credentials from the root store. - - Only credentials that are associated with active identities are - affected by kcdb_credset_collect(). - - \param[in] cs_dest A handle to the destination credential set. If - this is \a NULL, then it is assumed to refer to the root - credential store. - - \param[in] cs_src A handle to the source credential set. If this - is NULL, then it is assumed to refer to the root credential - store. - - \param[in] identity A handle to an identity. Setting this to NULL - collects all identities in the credential set. - - \param[in] type A credentials type. Setting this to - KCDB_CREDTYPE_ALL collects all credential types in the set. - - \param[out] delta A bit mask that indicates the modifications that - were made to \a cs_dest as a result of the collect operation. - This is a combination of KCDB_DELTA_* values. This parameter - can be \a NULL if the value is not required. - - \warning If \a identity and \a type is set to a wildcard, all - credentials in the root store that are not in this credentials - set will be deleted. - - \note Two credentials \a A and \a B are considered equal if: - - They refer to the same identity - - Both have the same credential type - - Both have the same name - - \note This is the only supported way of modifying the root - credential store. - - \note \a cs_src and \a cs_dest can not refer to the same - credentials set. - - \note The destination credential set cannot be sealed. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_credset_collect(khm_handle cs_dest, - khm_handle cs_src, - khm_handle identity, - khm_int32 type, - khm_int32 * delta); - -/*! \brief Credentials were added - \see kcdb_credset_collect() */ -#define KCDB_DELTA_ADD 1 - -/*! \brief Credentials were deleted - \see kcdb_credset_collect() */ -#define KCDB_DELTA_DEL 2 - -/*! \brief Credentials were modified - \see kcdb_credset_collect() */ -#define KCDB_DELTA_MODIFY 4 - -/*! \brief Indicates that the credential to be filtered is from the root store. - - \see kcdb_credset_collect_filtered() -*/ -#define KCDB_CREDCOLL_FILTER_ROOT 1 - -/*! \brief Indicates that the credential to be filtered is from the source - credential set - - \see kcdb_credset_collect_filtered() */ -#define KCDB_CREDCOLL_FILTER_SRC 2 - -/*! \brief Indicates that the credential to be filtered is from the destination - credential set - - \see kcdb_credset_collect_filtered() */ -#define KCDB_CREDCOLL_FILTER_DEST 4 - -/*! \brief Collect credentials from one credential set to another using a filter. - - Similar to kcdb_credset_collect() except instead of selecting - credentials by matching against an identity and/or type, a filter - function is called. If the filter function returns non-zero for a - credential, that credential is selected. - - Credentials in the source and destination credential sets are - passed into the filter function. Depending on whether the - credential is in the source credential set or destination - credential set, the \a flag parameter may have either \a - KCDB_CREDCOLL_FILTER_SRC or \a KCDB_CREDCOLL_FILTER_DEST bits set. - Also, if either one of the credential sets is the root credential - store, then additionally \a KCDB_CREDCOLL_FILTER_ROOT would also - be set. - - See the kcdb_credset_collect() documentation for explanations of - the \a cs_src, \a cs_dest and \a delta parameters which perform - identical functions. - - \param[in] filter The filter of type ::kcdb_cred_filter_func - \param[in] rock A custom argument to be passed to the filter function. - - \see kcdb_credset_collect() -*/ -KHMEXP khm_int32 KHMAPI -kcdb_credset_collect_filtered(khm_handle cs_dest, - khm_handle cs_src, - kcdb_cred_filter_func filter, - void * rock, - khm_int32 * delta); - -/*! \brief Flush all credentials from a credential set - - Deletes all the crednetials from the credential set. - - \param[in] credset A handle to a credential set. Cannot be NULL. - - \note The credential set cannot be sealed -*/ -KHMEXP khm_int32 KHMAPI -kcdb_credset_flush(khm_handle credset); - -/*! \brief Extract credentials from one credential set to another - - Credentials from the source credential set are selected based on - the \a identity and \a type arguements. If a credential is - matched, then it is added to the \a destcredset. - - If the \a sourcecredset is the root credential set, the added - credentials are copies of the actual credentials in the root - credential set. Otherwise the credentials are references to the - original credentials in the \a sourcecredset . - - \param[in] destcredset Destination credential set. Must be valid. - - \param[in] sourcecredset The source credential set. If set to - NULL, extracts from the root credential set. - - \param[in] identity The identity to match in the source credential - set. If set to NULL, matches all identities. - - \param[in] type The credential type to match in the source credential set. - If set to KCDB_CREDTYPE_INVALID, matches all types. - - \note This function does not check for duplicate credentials. - - \note The destination credential set cannot be sealed. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_credset_extract(khm_handle destcredset, - khm_handle sourcecredset, - khm_handle identity, - khm_int32 type); - -/*! \brief Extract credentials from one credential set to another using a filter. - - Similar to kcdb_credset_extract() except a filter function is used - to determine which credentials should be selected. - - \param[in] rock A custom argument to be passed in to the filter function. - - \note The destination credential set cannot be sealed. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_credset_extract_filtered(khm_handle destcredset, - khm_handle sourcecredset, - kcdb_cred_filter_func filter, - void * rock); - -/*! \brief Retrieve a held reference to a credential in a credential set based on index. - - \param[in] idx The index of the credential to retrieve. This is a - zero based index which goes from 0 ... (size of credset - 1). - - \param[out] cred The held reference to a credential. Call - kcdb_cred_release() to release the credential. - - \retval KHM_ERROR_SUCCESS Success. \a cred has a held reference to the credential. - \retval KHM_ERROR_OUT_OF_BOUNDS The index specified in \a idx is out of bounds. - \retval KHM_ERROR_DELETED The credential at index \a idx has been marked as deleted. - - \see kcdb_cred_release() -*/ -KHMEXP khm_int32 KHMAPI -kcdb_credset_get_cred(khm_handle credset, - khm_int32 idx, - khm_handle * cred); - -/*! \brief Search a credential set for a specific credential - - The credential set indicated by \a credset is searched for a - credential that satisfies the predicate function \a f. Each - credential starting at \a idx_start is passed into the predicate - function until it returns a non-zero value. At this point, that - credential is passed in to the \a cred parameter, and the index of - the credential is passed into the \a idx parameter. - - \param[in] credset The credential set to search on. Specify NULL - if you want to search teh root credential set. - - \param[in] idx_start The index at which to start the search after. - The first credential passed to the predicate function will be - at \a idx_start + 1. Specify -1 to start from the beginning - of the credential set. - - \param[in] f The predicate function. The \a flags parameter of - the predicate function will always receive 0. - - \param[in] rock An opaque parameter to be passed to the predicate - function \a f. - - \param[out] cred A held reference to the credential that satisfied - the predicate function or NULL if no such credential was - found. Note that if a valid credential is returned, the - calling function must release the credential using - kcdb_cred_release(). - - \param[out] idx The index of the credential passed in \a cred. - Specify NULL if the index is not required. - - \retval KHM_ERROR_SUCCESS A credential that satisfied the - predicate function was found and was assigned to \a cred. - - \retval KHM_ERROR_NOT_FOUND No credential was found that matched - the predicate function. - - \note When querying credential sets that are shared between - threads, it is possible that another thread modifies the - credential set between successive calls to - kcdb_credset_find_filtered(). Therefore a continued sequences of - searches are not guaranteed to exhastively cover the - credential set nor to not return duplicate matches. Duplicate - matches are possible if the order of the credentials in the - set was changed. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_credset_find_filtered(khm_handle credset, - khm_int32 idx_start, - kcdb_cred_filter_func f, - void * rock, - khm_handle * cred, - khm_int32 * idx); - -/*! \brief Find matching credential - - Searches a credential set for a credential that matches the - specified credential. For a credential to be a match, it must - have the same identity, credential type and name. - - \param[in] credset Credential set to search - - \param[in] cred_src Credetial to search on - - \param[out] cred_dest receieves the matching credential if the - search is successful. If a handle is returend, the - kcdb_cred_release() must be used to release the handle. If - the matching credential is not required, you can pass in NULL. - - \retval KHM_ERROR_SUCCESS The search was successful. A credential - was assigned to \a cred_dest - - \retval KHM_ERROR_NOT_FOUND A matching credential was not found. - */ -KHMEXP khm_int32 KHMAPI -kcdb_credset_find_cred(khm_handle credset, - khm_handle cred_src, - khm_handle *cred_dest); - - -/*! \brief Delete a credential from a credential set. - - The credential at index \a idx will be deleted. All the - credentials that are at indices \a idx + 1 and above will be moved - down to fill the gap and the size of the credential set will - decrease by one. - - Use kcdb_credset_del_cred_ref() to delete a credential by - reference. Using kcdb_credset_del_cred() is faster than - kcdb_credset_del_cred_ref(). - - If you call kcdb_credset_del_cred() or kcdb_credset_del_cred_ref() - from within kcdb_credset_apply(), the credential will only be - marked as deleted. They will not be removed. This means that the - size of the credential set will not decrease. To purge the - deleted credentials from the set, call kcdb_credset_purge() after - kcdb_credset_apply() completes. - - \note The credential set cannot be sealed. - - \see kcdb_credset_del_cred_ref() -*/ -KHMEXP khm_int32 KHMAPI -kcdb_credset_del_cred(khm_handle credset, - khm_int32 idx); - -/*! \brief Delete a credential from a credential set by reference. - - See kcdb_credset_del_cred() for description of what happens when a - credential is deleted from a credential set. - - \note The credential set cannot be sealed. - - \see kcdb_credset_del_cred() -*/ -KHMEXP khm_int32 KHMAPI -kcdb_credset_del_cred_ref(khm_handle credset, - khm_handle cred); - -/*! \brief Add a credential to a credential set. - - The credential is added by reference. In other words, no copy of - the credential is made. - - \param[in] idx Index of the new credential. This must be a value - in the range 0..(previous size of credential set) or -1. If - -1 is specifed, then the credential is appended at the end of - the set. - - \note The credential set cannot be sealed. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_credset_add_cred(khm_handle credset, - khm_handle cred, - khm_int32 idx); - -/*! \brief Get the number of credentials in a credential set. - - Credentials in a credential set may be volatile. When - kcdb_credeset_get_size() is called, the credential set is - compacted to only include credentials that are active at the time. - However, when you are iterating through the credential set, it - might be the case that some credentials would get marked as - deleted. These credentials will remain in the credential set - until the credential set is discarded or another call to - kcdb_credset_get_size() or kdcb_credset_purge() is made. - - If the credential set is sealed, then it will not be compacted and - will include deleted credentials as well. - - \see kcdb_credset_purge() - \see kcdb_credset_get_cred() -*/ -KHMEXP khm_int32 KHMAPI -kcdb_credset_get_size(khm_handle credset, - khm_size * size); - -/*! \brief Removes credentials that have been marked as deleted from a credential set. - - See description of \a kcdb_credset_purge() for a description of - what happens when credntials that are contained in a credential - set are deleted by an external entity. - - \note The credential set cannot be sealed. - - \see kcdb_credset_get_size() - \see kcdb_credset_get_cred() -*/ -KHMEXP khm_int32 KHMAPI -kcdb_credset_purge(khm_handle credset); - -/*! \brief Applies a function to all the credentials in a credentials set - - The given function is called for each credential in a credential - set. With each iteration, the function is called with a handle to - the credential and the user defined parameter \a rock. If the - function returns anything other than KHM_ERROR_SUCCESS, the - processing stops. - - \param[in] credset The credential set to apply the function to, or - NULL if you want to apply this to the root credential set. - - \param[in] f Function to call for each credential - - \param[in] rock An opaque parameter which is to be passed to 'f' - as the second argument. - - \retval KHM_ERROR_SUCCESS All the credentials were processed. - - \retval KHM_ERROR_EXIT The supplied function signalled the - processing to be aborted. - - \retval KHM_ERROR_INVALID_PARAM One or more parameters were invalid. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_credset_apply(khm_handle credset, - kcdb_cred_apply_func f, - void * rock); - -/*! \brief Sort the contents of a credential set. - - \param[in] rock A custom argument to be passed in to the \a comp function. - - \note The credential set cannot be sealed. - - \see kcdb_cred_comp_generic() -*/ -KHMEXP khm_int32 KHMAPI -kcdb_credset_sort(khm_handle credset, - kcdb_cred_comp_func comp, - void * rock); - -/*! \brief Seal a credential set - - Sealing a credential set makes it read-only. To unseal a - credential set, call kcdb_credset_unseal(). - - Sealing is an additive operation. kcdb_credset_seal() can be - called muliple times. However, for every call to - kcdb_credset_seal() a call to kcdb_credset_unseal() must be made - to undo the seal. The credential set will become unsealed when - all the seals are released. - - Once sealed, the credential set will not allow any operation that - might change its contents. However, a selaed credential set can - still be delted. - - \see kcdb_credset_unseal() - */ -KHMEXP khm_int32 KHMAPI -kcdb_credset_seal(khm_handle credset); - -/*! \brief Unseal a credential set - - Undoes what kcdb_credset_seal() did. This does not guarantee that - the credential set is unsealed since there may be other seals. - - \see kcdb_credset_seal() - */ -KHMEXP khm_int32 KHMAPI -kcdb_credset_unseal(khm_handle credset); - -/*! \brief Defines a sort criterion for kcdb_cred_comp_generic() - - \see kcdb_cred_comp_generic() -*/ -typedef struct tag_kcdb_cred_comp_field { - khm_int32 attrib; /*!< a valid attribute ID */ - khm_int32 order; /*!< one of KCDB_CRED_COMP_INCREASING or - KCDB_CRED_COMP_DECREASING. Optionally, - KCDB_CRED_COMP_INITIAL_FIRST may be combined - with either. */ -} kcdb_cred_comp_field; - -/*! \brief Defines the sort order for a field in ::kcdb_cred_comp_field - - Sorts lexicographically ascending by string representation of field. -*/ -#define KCDB_CRED_COMP_INCREASING 0 - -/*! \brief Defines the sort order for a field in ::kcdb_cred_comp_field - - Sorts lexicographically descending by string representation of - field. - */ -#define KCDB_CRED_COMP_DECREASING 1 - -/*! \brief Defines the sort order for a field in ::kcdb_cred_comp_field - - Any credentials which have the ::KCDB_CRED_FLAG_INITIAL will be - grouped above any that don't. - - If that does not apply, then credentials from the primary - credentials type will be sorted before others. -*/ -#define KCDB_CRED_COMP_INITIAL_FIRST 2 - -/*! \brief Defines the sort criteria for kcdb_cred_comp_generic() - - \see kcdb_cred_comp_generic() -*/ -typedef struct tag_kcdb_cred_comp_order { - khm_int32 nFields; - kcdb_cred_comp_field * fields; -} kcdb_cred_comp_order; - -/*! \brief A generic compare function for comparing credentials. - - This function can be passed as a parameter to kcdb_credset_sort(). - - The \a rock parameter to this function should be a pointer to a - ::kcdb_cred_comp_order object. The \a fields member of the - ::kcdb_cred_comp_order object should point to an array of - ::kcdb_cred_comp_field objects, each of which specifies the sort - order in decreasing order of priority. The number of - ::kcdb_cred_comp_field objects in the array should correspond to - the \a nFields member in the ::kcdb_cred_comp_order object. - - The array of ::kcdb_cred_comp_field objects define the sort - criteria, in order. The \a attrib member should be a valid - attribute ID, while the \a order member determines whether the - sort order is increasing or decreasing. The exact meaning or - increasing or decreasing depends on the data type of the - attribute. - - \param[in] rock a pointer to a ::kcdb_cred_comp_order object -*/ -KHMEXP khm_int32 KHMAPI -kcdb_cred_comp_generic(khm_handle cred1, - khm_handle cred2, - void * rock); - -/*@}*/ - -/*! \defgroup kcdb_cred Credentials */ -/*@{*/ - -/*! \brief Maximum number of characters in a credential name */ -#define KCDB_CRED_MAXCCH_NAME 256 - -/*! \brief Maximum number of bytes in a credential name */ -#define KCDB_CRED_MAXCB_NAME (sizeof(wchar_t) * KCDB_CRED_MAXCCH_NAME) - -/*! \brief Marked as deleted */ -#define KCDB_CRED_FLAG_DELETED 0x00000008 - -/*! \brief Renewable */ -#define KCDB_CRED_FLAG_RENEWABLE 0x00000010 - -/*! \brief Initial - - Initial credentials form the basis of an identity. Some - properties of an initial credential, such as being renewable, are - directly inherited by the identity. An identity is also - automatically considered valid if it contains a valid initial - credential. - */ -#define KCDB_CRED_FLAG_INITIAL 0x00000020 - -/*! \brief Expired - - The credential's lifetime has ended. - */ -#define KCDB_CRED_FLAG_EXPIRED 0x00000040 - -/*! \brief Invalid - - The credential can no longer serve its intended function. This - may be because it is expired and is not renewable, or its - renewable time period has also expired, or for some other reason. - */ -#define KCDB_CRED_FLAG_INVALID 0x00000080 - -/*! \brief Credential is selected - - Indicates that the credential is selected. Note that using this - flag may be subject to race conditions. - */ -#define KCDB_CRED_FLAG_SELECTED 0x00000100 - -/*! \brief Bitmask indicating all known credential flags - */ -#define KCDB_CRED_FLAGMASK_ALL 0x0000ffff - -/*! \brief External flags - - These are flags that are provided by the credentials providers. - The other flags are internal to KCDB and should not be modified. - */ -#define KCDB_CRED_FLAGMASK_EXT (KCDB_CRED_FLAG_INITIAL | KCDB_CRED_FLAG_EXPIRED | KCDB_CRED_FLAG_INVALID | KCDB_CRED_FLAG_RENEWABLE) - -/*! \brief Bitmask indicating dditive flags - - Additive flags are special flags which are added to exiting - credentials based on new credentials when doing a collect - operation. See details on kcdb_credset_collect() - - \see kcdb_credset_collect() -*/ -#define KCDB_CRED_FLAGMASK_ADDITIVE KCDB_CRED_FLAG_SELECTED - -/*! \brief Generic credentials request - - This data structure is used as the format for a generic - credentials reqeust for a ::KMSG_KCDB_REQUEST message. A plugin - typically publishes this message so that a credentials provider - may handle it and in response, obtain the specified credential. - - While the \a identity, \a type and \a name members of the - structure are all optional, typically one would specify all three - or at least two for a credential provider to be able to provide - the credential unambigously. - - Credential providers do not need to respond to ::KMSG_KCDB_REQUEST - messages. However, if they do, they should make sure that they - are the only credential provider that is responding by setting the - \a semaphore member to a non-zero value. The \a semaphore is set - to zero when a request is initially sent out. When incrementing - the semaphore, the plugin should use a thread safe mechanism to - ensure that there are no race conditions that would allow more - than one provider to respond to the message. - */ -typedef struct tag_kcdb_cred_request { - khm_handle identity; /*!< Identity of the credential. Set - to NULL if not specified. */ - khm_int32 type; /*!< Type of the credential. Set to - KCDB_CREDTYPE_INVALID if not - specified. */ - wchar_t * name; /*!< Name of the credential. Set to - NULL if not specified. */ - - khm_handle dest_credset; /*!< If non-NULL, instructs whoever is - handling the request that the - credential thus obtained be placed - in this credential set in addition - to whereever it may place newly - acquired credentials. Note that - while this can be NULL if the new - credential does not need to be - placed in a credential set, it can - not equal the root credential - set. */ - - void * vparam; /*!< An unspecified - parameter. Specific credential types - may specify how this field is to be - used. */ - - long semaphore; /*!< Incremented by one when this - request is answered. Only one - credential provider is allowed to - answer a ::KMSG_KCDB_REQUEST - message. Initially, when the - message is sent out, this member - should be set to zero. */ -} kcdb_cred_request; - -/*! \brief Create a new credential - - \param[in] name Name of credential. \a name cannot be NULL and cannot - exceed \a KCDB_CRED_MAXCCH_NAME unicode characters including the - \a NULL terminator. - \param[in] identity A reference to an identity. - \param[in] cred_type A credentials type identifier for the credential. - \param[out] result Gets a held reference to the newly created credential. - Call kcdb_cred_release() or kcdb_cred_delete() to release the - reference. - \see kcdb_cred_release() -*/ -KHMEXP khm_int32 KHMAPI -kcdb_cred_create(const wchar_t * name, - khm_handle identity, - khm_int32 cred_type, - khm_handle * result); - -/*! \brief Duplicate an existing credential. - - \param[out] newcred A held reference to the new credential if the call - succeeds. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_cred_dup(khm_handle cred, - khm_handle * newcred); - -/*! \brief Updates one credential using field values from another - - All fields that exist in \a vsrc will get copied to \a vdest and will - overwrite any values that are already there in \a vdest. However any - values that exist in \a vdest taht do not exist in \a vsrc will not be - modified. - - \retval KHM_ERROR_SUCCESS vdest was successfully updated - \retval KHM_ERROR_EQUIVALENT all fields in vsrc were present and equivalent in vdest -*/ -KHMEXP khm_int32 KHMAPI -kcdb_cred_update(khm_handle vdest, - khm_handle vsrc); - -/*! \brief Set an attribute in a credential by name - - - - \param[in] cbbuf Number of bytes of data in \a buffer. The - individual data type handlers may copy in less than this many - bytes in to the credential. For some data types where the - size of the buffer is fixed or can be determined from its - contents, you can specify ::KCDB_CBSIZE_AUTO for this - parameter. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_cred_set_attrib(khm_handle cred, - const wchar_t * name, - void * buffer, - khm_size cbbuf); - -/*! \brief Set an attribute in a credential by attribute id - - \param[in] buffer A pointer to a buffer containing the data to - assign to the attribute. Setting this to NULL has the effect - of removing any data that is already assigned to the - attribute. If \a buffer is non-NULL, then \a cbbuf should - specify the number of bytes in \a buffer. - - \param[in] cbbuf Number of bytes of data in \a buffer. The - individual data type handlers may copy in less than this many - bytes in to the credential. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_cred_set_attr(khm_handle cred, - khm_int32 attr_id, - void * buffer, - khm_size cbbuf); - -/*! \brief Get an attribute from a credential by name. - - \param[in] buffer The buffer that is to receive the attribute - value. Set this to NULL if only the required buffer size is - to be returned. - - \param[in,out] cbbuf The number of bytes available in \a buffer. - If \a buffer is not sufficient, returns KHM_ERROR_TOO_LONG and - sets this to the required buffer size. - - \note Set both \a buffer and \a cbbuf to NULL if only the - existence of the attribute is to be checked. If the attribute - exists in this credential then the function will return - KHM_ERROR_SUCCESS, otherwise it returns KHM_ERROR_NOT_FOUND. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_cred_get_attrib(khm_handle cred, - const wchar_t * name, - khm_int32 * attr_type, - void * buffer, - khm_size * cbbuf); - -/*! \brief Get an attribute from a credential by attribute id. - - \param[in] buffer The buffer that is to receive the attribute - value. Set this to NULL if only the required buffer size is - to be returned. - - \param[in,out] cbbuf The number of bytes available in \a buffer. - If \a buffer is not sufficient, returns KHM_ERROR_TOO_LONG and - sets this to the required buffer size. - - \param[out] attr_type Receives the data type of the attribute. - Set this to NULL if the type is not required. - - \note Set both \a buffer and \a cbbuf to NULL if only the - existence of the attribute is to be checked. If the attribute - exists in this credential then the function will return - KHM_ERROR_SUCCESS, otherwise it returns KHM_ERROR_NOT_FOUND. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_cred_get_attr(khm_handle cred, - khm_int32 attr_id, - khm_int32 * attr_type, - void * buffer, - khm_size * cbbuf); - -/*! \brief Get the name of a credential. - - \param[in] buffer The buffer that is to receive the credential - name. Set this to NULL if only the required buffer size is to - be returned. - - \param[in,out] cbbuf The number of bytes available in \a buffer. - If \a buffer is not sufficient, returns KHM_ERROR_TOO_LONG and - sets this to the required buffer size. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_cred_get_name(khm_handle cred, - wchar_t * buffer, - khm_size * cbbuf); - -/*! \brief Get the string representation of a credential attribute. - - A shortcut function which generates the string representation of a - credential attribute directly. - - \param[in] vcred A handle to a credential - - \param[in] attr_id The attribute to retrieve - - \param[out] buffer A pointer to a string buffer which receives the - string form of the attribute. Set this to NULL if you only - want to determine the size of the required buffer. - - \param[in,out] pcbbuf A pointer to a #khm_int32 that, on entry, - holds the size of the buffer pointed to by \a buffer, and on - exit, receives the actual number of bytes that were copied. - - \param[in] flags Flags for the string conversion. Can be set to - one of KCDB_TS_LONG or KCDB_TS_SHORT. The default is - KCDB_TS_LONG. - - \retval KHM_ERROR_SUCCESS Success - \retval KHM_ERROR_NOT_FOUND The given attribute was either invalid - or was not defined for this credential - \retval KHM_ERROR_INVALID_PARAM One or more parameters were invalid - \retval KHM_ERROR_TOO_LONG Either \a buffer was NULL or the - supplied buffer was insufficient -*/ -KHMEXP khm_int32 KHMAPI -kcdb_cred_get_attr_string(khm_handle vcred, - khm_int32 attr_id, - wchar_t * buffer, - khm_size * pcbbuf, - khm_int32 flags); - -/*! \brief Get the string representation of a credential attribute by name. - - A shortcut function which generates the string representation of a - credential attribute directly. - - \param[in] vcred A handle to a credential - - \param[in] attrib The name of the attribute to retrieve - - \param[out] buffer A pointer to a string buffer which receives the - string form of the attribute. Set this to NULL if you only - want to determine the size of the required buffer. - - \param[in,out] pcbbuf A pointer to a #khm_int32 that, on entry, - holds the size of the buffer pointed to by \a buffer, and on - exit, receives the actual number of bytes that were copied. - - \param[in] flags Flags for the string conversion. Can be set to - one of KCDB_TS_LONG or KCDB_TS_SHORT. The default is - KCDB_TS_LONG. - - \see kcdb_cred_get_attr_string() -*/ -KHMEXP khm_int32 KHMAPI -kcdb_cred_get_attrib_string(khm_handle cred, - const wchar_t * name, - wchar_t * buffer, - khm_size * cbbuf, - khm_int32 flags) ; - - -/*! \brief Get a held reference to the identity associated with a credential - - Use kcdb_identity_release() to release the reference that is - returned. - - \see kcdb_identity_relase() -*/ -KHMEXP khm_int32 KHMAPI -kcdb_cred_get_identity(khm_handle cred, - khm_handle * identity); - -/*! \brief Set the identity of a credential - - While it is ill-advised to change the identity of a credential - that has been placed in one or more credential sets, there can be - legitimate reasons for doing so. Only change the identity of a - credential that is not placed in a credential set or placed in a - credential set that is only used by a single entity. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_cred_set_identity(khm_handle vcred, - khm_handle id); - -/*! \brief Get the serial number for the credential. - - Each credential gets assigned a serial number at the time it is - created. This will stay with the credential for its lifetime. - - \param[out] pserial Receives the serial number. Cannot be NULL. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_cred_get_serial(khm_handle cred, - khm_ui_8 * pserial); - -/*! \brief Get the type of the credential. - - The returned type is a credential type. Doh. - - \param[out] type Receives the type. Cannot be NULL. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_cred_get_type(khm_handle cred, - khm_int32 * type); - -/*! \brief Retrieve flags from a credential - - The flags returned will be place in the location pointed to by \a - flags. Note that the specified credential must be an active - credential for the operation to succeed. This means the - ::KCDB_CRED_FLAG_DELETED will never be retured by this function. - */ -KHMEXP khm_int32 KHMAPI -kcdb_cred_get_flags(khm_handle cred, - khm_int32 * flags); - -/*! \brief Set the flags of a credential - - The flags specified in the \a mask parameter will be set to the - values specified in the \a flags parameter. The flags that are - not included in \a mask will not be modified. - - This function can not be used to set the ::KCDB_CRED_FLAG_DELETED - flag. If this bit is specified in either \a flags or \a mask, it - will be ignored. - - \see ::KCDB_CRED_FLAGMASK_ALL - */ -KHMEXP khm_int32 KHMAPI -kcdb_cred_set_flags(khm_handle cred, - khm_int32 flags, - khm_int32 mask); - -/*! \brief Hold a reference to a credential. - - Use kcdb_cred_release() to release the reference. - - \see kcdb_cred_release() -*/ -KHMEXP khm_int32 KHMAPI -kcdb_cred_hold(khm_handle cred); - -/*! \brief Release a held reference to a credential. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_cred_release(khm_handle cred); - -/*! \brief Delete a credential. - - The credential will be marked for deletion and will continue to - exist until all held references are released. If the credential - is bound to a credential set or the root credential store, it will - be removed from the respective container. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_cred_delete(khm_handle cred); - -/*! \brief Compare an attribute of two credentials by name. - - \return The return value is dependent on the type of the attribute - and indicate a weak ordering of the attribute values of the two - credentials. If one or both credentials do not contain the - attribute, the return value is 0, which signifies that no ordering - can be determined. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_creds_comp_attrib(khm_handle cred1, - khm_handle cred2, - const wchar_t * name); - -/*! \brief Compare an attribute of two credentials by attribute id. - - \return The return value is dependent on the type of the attribute - and indicate a weak ordering of the attribute values of the two - credentials. If one or both credentials do not contain the - attribute, the return value is 0, which signifies that no ordering - can be determined. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_creds_comp_attr(khm_handle cred1, - khm_handle cred2, - khm_int32 attr_id); - -/*! \brief Compare two credentials for equivalence - - \return Non-zero if the two credentials are equal. Zero otherwise. - \note Two credentials are considered equal if all the following hold: - - Both refer to the same identity. - - Both have the same name. - - Both have the same type. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_creds_is_equal(khm_handle cred1, - khm_handle cred2); - -/*@}*/ -/*@}*/ - -/********************************************************************/ - -/*! \defgroup kcdb_type Credential attribute types - -@{*/ - -/*! \brief Convert a field to a string - - Provides a string representation of a field in a credential. The - data buffer can be assumed to be valid. - - On entry, \a s_buf can be NULL if only the required size of the - buffer is to be returned. \a pcb_s_buf should be non-NULL and - should point to a valid variable of type ::khm_size that will, on - entry, contain the size of the buffer pointed to by \a s_buf if \a - s_buf is not \a NULL, and on exit will contain the number of bytes - consumed in \a s_buf, or the required size of the buffer if \a - s_buf was NULL or the size of the buffer was insufficient. - - The implementation should verify the parameters that are passed in - to the function. - - The data pointed to by \a data should not be modified in any way. - - \param[in] data Valid pointer to a block of data - - \param[in] cb_data Number of bytes in data block pointed to by \a - data - - \param[out] s_buf Buffer to receive the string representation of - data. If the data type flags has KCDB_TYPE_FLAG_CB_AUTO, then - this parameter could be set to KCDB_CBSIZE_AUTO. In this - case, the function should compute the size of the input buffer - assuming that the input buffer is valid. - - \param[in,out] pcb_s_buf On entry, contains the size of the buffer - pointed to by \a s_buf, and on exit, contains the number of - bytes used by the string representation of the data including - the NULL terminator - - \param[in] flags Flags for formatting the string - - \retval KHM_ERROR_SUCCESS The string representation of the data - field was successfully copied to \a s_buf and the size of the - buffer used was copied to \a pcb_s_buf. - - \retval KHM_ERROR_INVALID_PARAM One or more parameters were invalid - - \retval KHM_ERROR_TOO_LONG Either \a s_buf was \a NULL or the size - indicated by \a pcb_s_buf was too small to contain the string - representation of the value. The required size of the buffer - is in \a pcb_s_buf. - - \note This documents the expected behavior of this prototype function - - \see ::kcdb_type - */ -typedef khm_int32 -(KHMAPI *kcdb_dtf_toString)(const void * data, - khm_size cb_data, - wchar_t * s_buf, - khm_size * pcb_s_buf, - khm_int32 flags); - -/*! \brief Verifies whetehr the given buffer contains valid data - - The function should examine the buffer and the size of the buffer - and determine whether or not the buffer contains valid data for - this data type. - - The data field pointed to by \a data should not be modified in any - way. - - \param[in] data A pointer to a data buffer - - \param[in] cb_data The number of bytes in the data buffer. If the - data type flags has KCDB_TYPE_FLAG_CB_AUTO, then this - parameter could be set to KCDB_CBSIZE_AUTO. In this case, the - function should compute the size of the input buffer assuming - that the input buffer is valid. - - \return TRUE if the data is valid, FALSE otherwise. - - \note This documents the expected behavior of this prototype function - - \see ::kcdb_type -*/ -typedef khm_boolean -(KHMAPI *kcdb_dtf_isValid)(const void * data, - khm_size cb_data); - -/*! \brief Compare two fields - - Compare the two data fields and return a value indicating their - relative ordering. The return value follows the same - specification as strcmp(). - - Both data buffers that are passed in can be assumed to be valid. - - None of the data buffers should be modified in any way. - - \param[in] data_l Valid pointer to first data buffer - - \param[in] cb_data_l Number of bytes in \a data_l. If the data - type flags has KCDB_TYPE_FLAG_CB_AUTO, then this parameter - could be set to KCDB_CBSIZE_AUTO. In this case, the function - should compute the size of the input buffer assuming that the - input buffer is valid. - - \param[in] data_r Valid pointer to second data buffer - - \param[in] cb_data_r Number of bytes in \a data_r. If the data - type flags has KCDB_TYPE_FLAG_CB_AUTO, then this parameter - could be set to KCDB_CBSIZE_AUTO. In this case, the function - should compute the size of the input buffer assuming that the - input buffer is valid. - - \return The return value should be - - Less than zero if \a data_l &lt; \a data_r - - Equal to zero if \a data_l == \a data_r or if this data type can not be compared - - Greater than zero if \a data_l &gt; \a data_r - - \note This documents the expected behavior of this prototype function - - \see ::kcdb_type -*/ -typedef khm_int32 -(KHMAPI *kcdb_dtf_comp)(const void * data_l, - khm_size cb_data_l, - const void * data_r, - khm_size cb_data_r); - -/*! \brief Duplicate a data field - - Duplicates a data field. The buffer pointed to by \a data_src - contains a valid field. The function should copy the field with - appropriate adjustments to \a data_dst. - - The \a data_dst parameter can be NULL if only the required size of - the buffer is needed. In this case, teh function should set \a - pcb_data_dst to the number of bytes required and then return - KHM_ERROR_TOO_LONG. - - \param[in] data_src Pointer to a valid data buffer - - \param[in] cb_data_src Number of bytes in \a data_src. If the data - type flags has KCDB_TYPE_FLAG_CB_AUTO, then this parameter - could be set to KCDB_CBSIZE_AUTO. In this case, the function - should compute the size of the input buffer assuming that the - input buffer is valid. - - \param[out] data_dst Poitner to destination buffer. Could be NULL - if only the required size of the destination buffer is to be - returned. - - \param[in,out] pcb_data_dst On entry specifies the number of bytes - in \a data_dst, and on exit should contain the number of bytes - copied. - - \retval KHM_ERROR_SUCCESS The data was successfully copied. The - number of bytes copied is in \a pcb_data_dst - - \retval KHM_ERROR_INVALID_PARAM One or more parameters is incorrect. - - \retval KHM_ERROR_TOO_LONG Either \a data_dst was NULL or the size - of the buffer was insufficient. The required size is in \a - pcb_data_dst - - \note This documents the expected behavior of this prototype function - - \see ::kcdb_type - */ -typedef khm_int32 -(KHMAPI *kcdb_dtf_dup)(const void * data_src, - khm_size cb_data_src, - void * data_dst, - khm_size * pcb_data_dst); - -/*! \brief A data type descriptor. - - Handles basic operation for a specific data type. - - \see \ref cred_data_types -*/ -typedef struct tag_kcdb_type { - wchar_t * name; - khm_int32 id; - khm_int32 flags; - - khm_size cb_min; - khm_size cb_max; - - kcdb_dtf_toString toString; - /*!< Provides a string representation for a value. */ - - kcdb_dtf_isValid isValid; - /*!< Returns true of the value is valid for this data type */ - - kcdb_dtf_comp comp; - /*!< Compare two values and return \a strcmp style return value */ - - kcdb_dtf_dup dup; - /*!< Duplicate a value into a secondary buffer */ -} kcdb_type; - -/*! \name Flags for kcdb_type::toString -@{*/ -/*! \brief Specify that the short form of the string representation should be returned. - - Flags for #kcdb_type::toString. The flag specifies how long the - string representation should be. The specific length of a short - or long description is not restricted and it is up to the - implementation to choose how to interpret the flags. - - Usually, KCDB_TS_SHORT is specified when the amount of space that - is available to display the string is very restricted. It may be - the case that the string is truncated to facilitate displaying in - a constrainted space. -*/ -#define KCDB_TS_SHORT 1 - -/*! \brief Specify that the long form of the string representation should be returned - - Flags for #kcdb_type::toString. The flag specifies how long the - string representation should be. The specific length of a short - or long description is not restricted and it is up to the - implementation to choose how to interpret the flags. - -*/ -#define KCDB_TS_LONG 0 -/*@}*/ - -/*! \brief The maximum number of bytes allowed for a value of any type */ -#define KCDB_TYPE_MAXCB 16384 - -/*! \name Flags for kcdb_type -@{*/ - -/*! \brief The type supports KCDB_CBSIZE_AUTO. - - Used for types where the size of the object can be determined - through context or by the object content. Such as for objects - that have a fixed size or unicode strings that have a terminator. - - This implies that ALL the object manipulation callbacks that are - defined in this type definition support the KCDB_CBSIZE_AUTO - value. -*/ -#define KCDB_TYPE_FLAG_CB_AUTO 16 - -/*! \brief The \a cb_min member is valid. - - The \a cb_min member defines the minimum number of bytes that an - object of this type will consume. - - \note If this flag is used in conjunction with \a - KCDB_TYPE_FLAG_CB_MAX then, \a cb_min must be less than or equal - to \a cb_max. -*/ -#define KCDB_TYPE_FLAG_CB_MIN 128 - -/*! \brief The \a cb_max member is valid. - - The \a cb_max member defines the maximum number of bytes that an - object of this type will consume. - - \note If this flag is used in conjunction with \a - KCDB_TYPE_FLAG_CB_MIN then, \a cb_min must be less than or - equal to \a cb_max. */ -#define KCDB_TYPE_FLAG_CB_MAX 256 - -/*! \brief Denotes that objects of this type have a fixed size. - - If this flags is specified, then the type definition must also - specify cb_min and cb_max, which must both be the same value. - - \note Implies \a KCDB_TYPE_FLAG_CB_AUTO, \a KCDB_TYPE_FLAG_CB_MIN - and \a KCDB_TYPE_FLAG_CB_MAX. Pay special attention to the - implication of \a KCDB_TYPE_FLAG_AUTO. -*/ -#define KCDB_TYPE_FLAG_CB_FIXED (KCDB_TYPE_FLAG_CB_AUTO|KCDB_TYPE_FLAG_CB_MIN|KCDB_TYPE_FLAG_CB_MAX) - -/*@}*/ - -KHMEXP khm_int32 KHMAPI -kcdb_type_get_id(const wchar_t *name, khm_int32 * id); - -/*! \brief Return the type descriptor for a given type id - - \param[out] info Receives a held reference to a type descriptor. - Use kcdb_type_release_info() to release the handle. If the \a - info parameter is NULL, the function returns KHM_ERROR_SUCCESS - if \a id is a valid type id, and returns KHM_ERROR_NOT_FOUND - otherwise. - - \see kcdb_type_release_info() -*/ -KHMEXP khm_int32 KHMAPI -kcdb_type_get_info(khm_int32 id, kcdb_type ** info); - -/*! \brief Release a reference to a type info structure - - Releases the reference to the type information obtained with a - prior call to kcdb_type_get_info(). - */ -KHMEXP khm_int32 KHMAPI -kcdb_type_release_info(kcdb_type * info); - -/*! \brief Get the name of a type - - Retrieves the non-localized name of the specified type. - */ -KHMEXP khm_int32 KHMAPI -kcdb_type_get_name(khm_int32 id, - wchar_t * buffer, - khm_size * cbbuf); - -/*! \brief Register a credentials attribute type - - The credentials type record pointed to by \a type defines a new - credential attribute type. The \a id member of \a type may be set - to KCDB_TYPE_INVALID to indicate that an attribute ID is to be - generated automatically. - - \param[in] type The type descriptor - \param[out] new_id Receives the identifier for the credential attribute type. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_type_register(const kcdb_type * type, - khm_int32 * new_id); - -/*! \brief Unregister a credential attribute type - - Removes the registration for the specified credentials attribute - type. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_type_unregister(khm_int32 id); - -KHMEXP khm_int32 KHMAPI -kcdb_type_get_next_free(khm_int32 * id); - -/*! \name Conversion functions -@{*/ -/*! \brief Convert a time_t value to FILETIME -*/ -KHMEXP void KHMAPI -TimetToFileTime( time_t t, LPFILETIME pft ); - -/*! \brief Convert a time_t interval to a FILETIME interval -*/ -KHMEXP void KHMAPI -TimetToFileTimeInterval(time_t t, LPFILETIME pft); - -/*! \brief Convert a FILETIME interval to seconds -*/ -KHMEXP long KHMAPI -FtIntervalToSeconds(LPFILETIME pft); - -/*! \brief Convert a FILETIME interval to milliseconds -*/ -KHMEXP long KHMAPI -FtIntervalToMilliseconds(LPFILETIME pft); - -/*! \brief Compare two FILETIME values - - The return value is similar to the return value of strcmp(), based - on the comparison of the two FILETIME values. - */ -KHMEXP long KHMAPI -FtCompare(LPFILETIME pft1, LPFILETIME pft2); - -/*! \brief Convert a FILETIME to a 64 bit int -*/ -KHMEXP khm_int64 KHMAPI FtToInt(LPFILETIME pft); - -/*! \brief Convert a 64 bit int to a FILETIME -*/ -KHMEXP FILETIME KHMAPI IntToFt(khm_int64 i); - -/*! \brief Calculate the difference between two FILETIMEs - - Returns the value of ft1 - ft2 - */ -KHMEXP FILETIME KHMAPI FtSub(LPFILETIME ft1, LPFILETIME ft2); - -/*! \brief Calculate the sum of two FILETIMEs - - Return the value of ft1 + ft2 - */ -KHMEXP FILETIME KHMAPI FtAdd(LPFILETIME ft1, LPFILETIME ft2); - -/*! \brief Convert a FILETIME inverval to a string -*/ -KHMEXP khm_int32 KHMAPI -FtIntervalToString(LPFILETIME data, - wchar_t * buffer, - khm_size * cb_buf); - -/*! \brief Parse a string representing an interval into a FILETIME interval - - The string is a localized string which should look like the - following: - - \code - [number unit] [number unit]... - \endcode - - where \a number is an integer while \a unit is a localized - (possibly abbreviated) unit specification. The value of the - described interval is calculated as the sum of each \a number in - \a units. For example : - - \code - 1 hour 36 minutes - \endcode - - would result in an interval specification that's equivalent to 1 - hour and 36 minutes. Of course there is no restriction on the - order in which the \a number \a unit specifications are given and - the same unit may be repeated multiple times. - - \retval KHM_ERROR_INVALID_PARAM The given string was invalid or had - a token that could not be parsed. It can also mean that \a - pft was NULL or \a str was NULL. - - \retval KHM_ERROR_SUCCESS The string was successfully parsed and - the result was placed in \a pft. -*/ -KHMEXP khm_int32 KHMAPI -IntervalStringToFt(FILETIME * pft, wchar_t * str); - -/*! \brief Return number of milliseconds till next representation change - - Returns the number of milliseconds that must elapse away from the - interval specified in pft \a for the representation of pft to change - from whatever it is right now. - - Returns 0 if the representation is not expected to change. -*/ -KHMEXP long KHMAPI -FtIntervalMsToRepChange(LPFILETIME pft); - -/*! \brief Convert a safe ANSI string to a Unicode string - - The resulting string is guaranteed to be NULL terminated and - within the size limit set by \a cbwstr. - - If the whole string cannot be converted, \a wstr is set to an - empty string. - - \return the number of characters converted. This is always either - the length of the string \a astr or 0. -*/ -KHMEXP int KHMAPI -AnsiStrToUnicode( wchar_t * wstr, size_t cbwstr, const char * astr); - -/*! \brief Convert a Unicode string to ANSI - - The resulting string is guaranteed to be NULL terminated and - within the size limit set by \a cbdest. - - \return the number of characters converted. This is always either - the length of the string \a src or 0. -*/ -KHMEXP int KHMAPI -UnicodeStrToAnsi( char * dest, size_t cbdest, const wchar_t * src); -/*@}*/ - -/*! \name Standard type identifiers and names -@{*/ - -/*! Maximum identifier number */ -#define KCDB_TYPE_MAX_ID 255 - -/*! \brief Invalid type - - Used by functions that return a type identifier to indicate that - the returned type identifier is invalid. Also used to indicate - that a type identifier is not available */ -#define KCDB_TYPE_INVALID (-1) - -/*! \brief All types - - Used by filters to indicate that all types are allowed. -*/ -#define KCDB_TYPE_ALL KCDB_TYPE_INVALID - -/*! \brief Void - - No data. This is not an actual data type. - */ -#define KCDB_TYPE_VOID 0 - -/*! \brief String - - NULL terminated Unicode string. The byte count for a string - attribute always includes the terminating NULL. - */ -#define KCDB_TYPE_STRING 1 - -/*! \brief Data - - A date/time represented in FILETIME format. - */ -#define KCDB_TYPE_DATE 2 - -/*! \brief Interval - - An interval of time represented as the difference between two - FILETIME values. - */ -#define KCDB_TYPE_INTERVAL 3 - -/*! \brief 32-bit integer - - A 32-bit signed integer. - */ -#define KCDB_TYPE_INT32 4 - -/*! \brief 64-bit integer - - A 64-bit integer. - */ -#define KCDB_TYPE_INT64 5 - -/*! \brief Raw data - - A raw data buffer. - */ -#define KCDB_TYPE_DATA 6 - -#define KCDB_TYPENAME_VOID L"Void" -#define KCDB_TYPENAME_STRING L"String" -#define KCDB_TYPENAME_DATE L"Date" -#define KCDB_TYPENAME_INTERVAL L"Interval" -#define KCDB_TYPENAME_INT32 L"Int32" -#define KCDB_TYPENAME_INT64 L"Int64" -#define KCDB_TYPENAME_DATA L"Data" -/*@}*/ -/*@}*/ - -/********************************************************************/ - -/*! \defgroup kcdb_credattr Credential attributes */ -/*@{*/ - -/*! \brief Prototype callback function for computed data types. - - If the flags for a particular attribute specifies that the value - is computed, then a callback function should be specified. The - callback function will be called with a handle to a credential - along with the attribute ID for the requested attribute. The - function should place the computed value in \a buffer. The size - of the buffer in bytes is specifed in \a cbsize. However, if \a - buffer is \a NULL, then the required buffer size should be placed - in \a cbsize. - */ -typedef khm_int32 -(KHMAPI *kcdb_attrib_compute_cb)(khm_handle cred, - khm_int32 id, - void * buffer, - khm_size * cbsize); - -/*! \brief Credential attribute descriptor - - \see kcdb_attrib_register() -*/ -typedef struct tag_kcdb_attrib { - wchar_t * name; /*!< Name. (Not localized, - required) */ - khm_int32 id; /*!< Identifier. When registering, - this can be set to - ::KCDB_ATTR_INVALID if a unique - identifier is to be generated. */ - khm_int32 alt_id; /*!< Alternate identifier. If the \a - flags specify - ::KCDB_ATTR_FLAG_ALTVIEW, then this - field should specify the identifier - of the canonical attribute from - which this attribute is derived. */ - khm_int32 flags; /*!< Flags. Combination of \ref - kcdb_credattr_flags "attribute - flags" */ - - khm_int32 type; /*!< Type of the attribute. Must be valid. */ - - wchar_t * short_desc; /*!< Short description. (Localized, - optional) */ - - wchar_t * long_desc; /*!< Long description. (Localized, - optional) */ - - kcdb_attrib_compute_cb compute_cb; - /*!< Callback. Required if \a flags - specify ::KCDB_ATTR_FLAG_COMPUTED. */ - - khm_size compute_min_cbsize; - /*!< Minimum number of bytes required - to store this attribute. Required - if ::KCDB_ATTR_FLAG_COMPUTED is - specified.*/ - khm_size compute_max_cbsize; - /*!< Maximum number of bytes required - to store this attribute. Required - if ::KCDB_ATTR_FLAG_COMPUTED is - specified.*/ -} kcdb_attrib; - -/*! \brief Retrieve the ID of a named attribute */ -KHMEXP khm_int32 KHMAPI -kcdb_attrib_get_id(const wchar_t *name, - khm_int32 * id); - -/*! \brief Register an attribute - - \param[out] new_id Receives the ID of the newly registered - attribute. If the \a id member of the ::kcdb_attrib object is - set to KCDB_ATTR_INVALID, then a unique ID is generated. */ -KHMEXP khm_int32 KHMAPI -kcdb_attrib_register(const kcdb_attrib * attrib, - khm_int32 * new_id); - -/*! \brief Retrieve the attribute descriptor for an attribute - - The descriptor that is returned must be released through a call to - kcdb_attrib_release_info() - - If only the validity of the attribute identifier needs to be - checked, you can pass in NULL for \a attrib. In this case, if the - identifier is valid, then the funciton will return - KHM_ERROR_SUCCESS, otherwise it will return KHM_ERROR_NOT_FOUND. - - \see kcdb_attrib_release_info() - */ -KHMEXP khm_int32 KHMAPI -kcdb_attrib_get_info(khm_int32 id, - kcdb_attrib ** attrib); - -/*! \brief Release an attribute descriptor - - \see kcdb_attrib_get_info() - */ -KHMEXP khm_int32 KHMAPI -kcdb_attrib_release_info(kcdb_attrib * attrib); - -/*! \brief Unregister an attribute - - Once an attribute ID has been unregistered, it may be reclaimed by - a subsequent call to kcdb_attrib_register(). -*/ -KHMEXP khm_int32 KHMAPI -kcdb_attrib_unregister(khm_int32 id); - -/*! \brief Retrieve the description of an attribute - - \param[in] flags Specify \a KCDB_TS_SHORT to retrieve the short description. */ -KHMEXP khm_int32 KHMAPI -kcdb_attrib_describe(khm_int32 id, - wchar_t * buffer, - khm_size * cbsize, - khm_int32 flags); - -/*! \brief Count attributes - - Counts the number of attributes that match the given criteria. - The criteria is specified against the flags of the attribute. An - attribute is a match if its flags satisfy the condition below: - - \code - (attrib.flags & and_flags) == (eq_flags & and_flags) - \endcode - - The number of attributes that match are returned in \a pcount. - */ -KHMEXP khm_int32 KHMAPI -kcdb_attrib_get_count(khm_int32 and_flags, - khm_int32 eq_flags, - khm_size * pcount); - -/*! \brief List attribute identifiers - - Lists the identifiers of the attributes that match the given - criteria. The criteria is specified against the flags of the - attribute. An attribute is a match if the following condition is - satisfied: - - \code - (attrib.flags & and_flags) == (eq_flags & and_flags) - \endcode - - The list of attributes found are copied to the \a khm_int32 array - specified in \a plist. The number of elements available in the - buffer \a plist is specified in \a pcsize. On exit, \a pcsize - will hold the actual number of attribute identifiers copied to the - array. - - \param[in] and_flags See above - \param[in] eq_flags See above - \param[in] plist A khm_int32 array - \param[in,out] pcsize On entry, holds the number of elements - available in the array pointed to by \a plist. On exit, holds - the number of elements copied to the array. - - \retval KHM_ERROR_SUCCESS The list of attribute identifiers have - been copied. - \retval KHM_ERROR_TOO_LONG The list was too long to fit in the - supplied buffer. As many elements as possible have been - copied to the \a plist array and the required number of - elements has been written to \a pcsize. - - \note The \a pcsize parameter specifies the number of khm_int32 - elements in the array and not the number of bytes in the - array. This is different from the usual size parameters used - in the NetIDMgr API. - */ -KHMEXP khm_int32 KHMAPI -kcdb_attrib_get_ids(khm_int32 and_flags, - khm_int32 eq_flags, - khm_int32 * plist, - khm_size * pcsize); - -/*! \defgroup kcdb_credattr_flags Attribute flags */ -/*@{*/ -/*! \brief The attribute is required */ -#define KCDB_ATTR_FLAG_REQUIRED 0x00000008 - -/*! \brief The attribute is computed. - - If this flag is set, the \a compute_cb, \a compute_min_cbsize and - \a compute_max_cbsize members of the ::kcdb_attrib attribute - descriptor must be assigned valid values. -*/ -#define KCDB_ATTR_FLAG_COMPUTED 0x00000010 - -/*! \brief System attribute. - - This cannot be specified for a custom attribute. Implies that the - value of the attribute is given by the credentials database - itself. -*/ -#define KCDB_ATTR_FLAG_SYSTEM 0x00000020 - -/*! \brief Hidden - - The attribute is not meant to be displayed to the user. Setting - this flag prevents this attribute from being listed in the list of - available data fields in the UI. -*/ -#define KCDB_ATTR_FLAG_HIDDEN 0x00000040 - -/*! \brief Property - - The attribute is a property. The main difference between regular - attributes and properties are that properties are not allocated - off the credentials record. Hence, a property can not be used as - a credentials field. Other objects such as identities can hold - property sets. A property set can hold both regular attributes as - well as properties. -*/ -#define KCDB_ATTR_FLAG_PROPERTY 0x00000080 - -/*! \brief Volatile - - A volatile property is one whose value changes often, such as - ::KCDB_ATTR_TIMELEFT. Some controls will make use of additional - logic to deal with such values, or not display them at all. - */ -#define KCDB_ATTR_FLAG_VOLATILE 0x00000100 - -/*! \brief Alternate view - - The attribute is actually an alternate representation of another - attribute. The Canonical attribute name is specified in \a - alt_id. - - Sometimes a certain attribute may need to be represented in - different ways. You can register multiple attributes for each - view. However, you should also provide a canonical attribute for - whenever the canonical set of attributes of the credential is - required. - */ -#define KCDB_ATTR_FLAG_ALTVIEW 0x00000200 - -/*! \brief Transient attribute - - A transient attribute is one whose absence is meaningful. When - updating one record using another, if a transient attribute is - absent in the source but present in the destination, then the - attribute is removed from the destination. -*/ -#define KCDB_ATTR_FLAG_TRANSIENT 0x00000400 - -/*@}*/ - -/*! \defgroup kcdb_credattr_idnames Standard attribute IDs and names */ -/*@{*/ - -/*! \name Attribute related constants */ -/*@{*/ -/*! \brief Maximum valid attribute ID */ -#define KCDB_ATTR_MAX_ID 255 - -/*! \brief Minimum valid property ID */ -#define KCDB_ATTR_MIN_PROP_ID 4096 - -/*! \brief Maximum number of properties */ -#define KCDB_ATTR_MAX_PROPS 128 - -/*! \brief Maximum valid property ID */ -#define KCDB_ATTR_MAX_PROP_ID (KCDB_ATTR_MIN_PROP_ID + KCDB_ATTR_MAX_PROPS - 1) - -/*! \brief Invalid ID */ -#define KCDB_ATTR_INVALID (-1) - -/*! \brief First custom attribute ID */ -#define KCDB_ATTRID_USER 20 - -/*@}*/ - -/*!\name Attribute identifiers */ -/*@{*/ -/*! \brief Name of the credential - - - \b Type: STRING - - \b Flags: REQUIRED, COMPUTED, SYSTEM - */ -#define KCDB_ATTR_NAME 0 - -/*! \brief The identity handle for the credential - - - \b Type: INT64 - - \b Flags: REQUIRED, COMPUTED, SYSTEM, HIDDEN - - \note The handle returned in by specifying this attribute to - kcdb_cred_get_attr() or kcdb_cred_get_attrib() is not held. - While the identity is implicitly held for the duration that - the credential is held, it is not recommended to obtain a - handle to the identity using this method. Use - kcdb_cred_get_identity() instead. -*/ -#define KCDB_ATTR_ID 1 - -/*! \brief The name of the identity - - - \b Type: STRING - - \b Flags: REQUIRED, COMPUTED, SYSTEM - */ -#define KCDB_ATTR_ID_NAME 2 - -/*! \brief The type of the credential - - - \b Type: INT32 - - \b Flags: REQUIRED, COMPUTED, SYSTEM, HIDDEN -*/ -#define KCDB_ATTR_TYPE 3 - -/*! \brief Type name for the credential - - - \b Type: STRING - - \b Flags: REQUIRED, COMPUTED, SYSTEM -*/ -#define KCDB_ATTR_TYPE_NAME 4 - -/*! \brief Name of the parent credential - - - \b Type: STRING - - \b Flags: SYSTEM -*/ -#define KCDB_ATTR_PARENT_NAME 5 - -/*! \brief Issed on - - - \b Type: DATE - - \b Flags: SYSTEM -*/ -#define KCDB_ATTR_ISSUE 6 - -/*! \brief Expires on - - - \b Type: DATE - - \b Flags: SYSTEM -*/ -#define KCDB_ATTR_EXPIRE 7 - -/*! \brief Renewable period expires on - - - \b Type: DATE - - \b Flags: SYSTEM -*/ -#define KCDB_ATTR_RENEW_EXPIRE 8 - -/*! \brief Time left till expiration - - - \b Type: INTERVAL - - \b Flags: SYSTEM, COMPUTED, VOLATILE -*/ -#define KCDB_ATTR_TIMELEFT 9 - -#define KCDB_ATTR_RENEW_TIMELEFT 10 - -/*! \brief Location of the credential - - - \b Type: STRING - - \b Flags: SYSTEM -*/ -#define KCDB_ATTR_LOCATION 11 - -/*! \brief Lifetime of the credential - - - \b Type: INTERVAL - - \b Flags: SYSTEM -*/ -#define KCDB_ATTR_LIFETIME 12 - -#define KCDB_ATTR_RENEW_LIFETIME 13 - -/*! \brief Flags for the credential - - - \b Type: INT32 - - \b Flags: REQUIRED, COMPUTED, SYSTEM, HIDDEN - */ -#define KCDB_ATTR_FLAGS 14 - -/*@}*/ - -/*!\name Attribute names */ -/*@{ */ - -#define KCDB_ATTRNAME_NAME L"Name" -#define KCDB_ATTRNAME_ID L"Identity" -#define KCDB_ATTRNAME_ID_NAME L"IdentityName" -#define KCDB_ATTRNAME_TYPE L"TypeId" -#define KCDB_ATTRNAME_TYPE_NAME L"TypeName" -#define KCDB_ATTRNAME_FLAGS L"Flags" - -#define KCDB_ATTRNAME_PARENT_NAME L"Parent" -#define KCDB_ATTRNAME_ISSUE L"Issued" -#define KCDB_ATTRNAME_EXPIRE L"Expires" -#define KCDB_ATTRNAME_RENEW_EXPIRE L"RenewExpires" -#define KCDB_ATTRNAME_TIMELEFT L"TimeLeft" -#define KCDB_ATTRNAME_RENEW_TIMELEFT L"RenewTimeLeft" -#define KCDB_ATTRNAME_LOCATION L"Location" -#define KCDB_ATTRNAME_LIFETIME L"Lifetime" -#define KCDB_ATTRNAME_RENEW_LIFETIME L"RenewLifetime" - -/*@}*/ - -/*@}*/ - -/*@}*/ - -/*****************************************************************************/ - -/*! \defgroup kcdb_credtype Credential types */ -/*@{*/ - -/*! \brief Credential type descriptor */ -typedef struct tag_kcdb_credtype { - wchar_t * name; /*!< name (less than KCDB_MAXCB_NAME bytes) */ - khm_int32 id; - wchar_t * short_desc; /*!< short localized description (less - than KCDB_MAXCB_SHORT_DESC bytes) */ - wchar_t * long_desc; /*!< long localized descriptionn (less - than KCDB_MAXCB_LONG_DESC bytes) */ - khm_handle sub; /*!< Subscription for credentials type - hander. This should be a valid - subscription constructed through a - call to kmq_create_subscription() - and must handle KMSG_CRED messages - that are marked as being sent to - type specific subscriptions. - - The subscription will be - automatically deleted with a call to - kmq_delete_subscription() when the - credentials type is unregistered.*/ - - kcdb_cred_comp_func is_equal; /*!< Used as an additional clause - when comparing two credentials for - equality. The function this is - actually a comparison function, it - should return zero if the two - credentials are equal and non-zero - if they are not. The addtional \a - rock parameter is always zero. - - It can be assumed that the identity, - name and credentials type have - already been found to be equal among - the credentials and the credential - type is the type that is being - registered.*/ - -#ifdef _WIN32 - HICON icon; -#endif -} kcdb_credtype; - -/*! \brief Maximum value of a credential type identifier - - Credential type identifiers are assigned serially unless the - process registering the credential type sets a specific identity. - The maximum identifier number places a hard limit to the number of - credential types that can be registered at one time, which is - KCDB_CREDTYPE_MAX_ID + 1. - */ -#define KCDB_CREDTYPE_MAX_ID 31 - -/*! \brief Specify all credential types - - This value is used by functions which filter credentials based on - credential types. Specifying this value tells the filter to - accept all credential types. - */ -#define KCDB_CREDTYPE_ALL (-1) - -/*! \brief Automatically determine a credential type identifier - - Used with kcdb_credtype_register() to specify that the credential - type identifier should be automatically determined to avoid - collisions. - */ -#define KCDB_CREDTYPE_AUTO (-2) - -/*! \brief An invalid credential type - - Even though any non positive credential type ID is invalid - anywhere where a specific credential type ID is required, this - value is provided for explicit indication that the credential type - is invalid. Also it makes code more readable to have a constant - that shouts out INVALID. - -*/ -#define KCDB_CREDTYPE_INVALID (-3) - -/*! \brief Macro predicate for testing whether a credtype is valid - - Returns TRUE if the given credtype is valid. This is a safe - macro. -*/ -#define KCDB_CREDTYPE_IS_VALID(t) ((t) >= 0) - -/*! \brief Register a credentials type. - - The information given in the \a type parameter is used to register - a new credential type. Note that the \a name member of the \a - type should be unique among all credential types. - - You can specify ::KCDB_CREDTYPE_AUTO as the \a id member of \a - type to let kcdb_credtype_register() determine a suitable - credential type identifier. You can subsequently call - kcdb_credtype_get_id() to retrieve the generated id or pass a - valid pointer to a khm_int32 type variable as \a new_id. - - \param[in] type Credential type descriptor - - \param[out] new_id The credential type identifier that this type - was registered as. - - \retval KHM_ERROR_SUCCESS The credential type was successfully registered. - - \retval KHM_ERROR_INVALID_PARAM One or more of the parameters were invalid - - \retval KHM_ERROR_TOO_LONG One or more of the string fields in \a - type exceeded the character limit for that field. - - \retval KHM_ERROR_NO_RESOURCES When autogenerating credential type - identifiers, this value indicates that the maximum number of - credential types have been registered. No more registrations - can be accepted unless some credentials type is unregisred. - - \retval KHM_ERROR_DUPLICATE The \a name or \a id that was - specified is already in use. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_credtype_register(const kcdb_credtype * type, - khm_int32 * new_id); - -/*! \brief Return a held reference to a \a kcdb_credtype object describing the credential type. - - The reference points to a static internal object of type \a - kcdb_credtype. Use the kcdb_credtype_release_info() function to - release the reference. - - Also, the structure passed in as the \a type argument to - kcdb_credtype_register() is not valid as a credential type - descriptor. Use kcdb_credtype_get_info() to obtain the actual - credential type descriptor. - - \param[in] id Credentials type identifier. - - \param[out] type Receives the credentials descriptor handle. If - \a type is NULL, then no handle is returned. However, the - function will still return \a KHM_ERROR_SUCCESS if the \a id - parameter passed in is a valid credentials type identifier. - - \see kcdb_credtype_release_info() - \see kcdb_credtype_register() -*/ -KHMEXP khm_int32 KHMAPI -kcdb_credtype_get_info(khm_int32 id, - kcdb_credtype ** type); - -/*! \brief Release a reference to a \a kcdb_credtype object - - Undoes the hold obtained on a \a kcdb_credtype object from a - previous call to kcdb_credtype_get_info(). - - \see kcdb_credtype_get_info() - */ -KHMEXP khm_int32 KHMAPI -kcdb_credtype_release_info(kcdb_credtype * type); - -/*! \brief Unregister a credentials type - - Undoes the registration performed by kcdb_credtype_register(). - - This should only be done when the credentials provider is being - unloaded. - */ -KHMEXP khm_int32 KHMAPI -kcdb_credtype_unregister(khm_int32 id); - -/*! \brief Retrieve the name of a credentials type - - Given a credentials type identifier, retrieves the name. The name - is not localized and serves as a persistent identifier of the - credentials type. - - \param[out] buf The buffer to receive the name. Could be \a NULL - if only the length of the buffer is required. - - \param[in,out] cbbuf On entry, specifies the size of the buffer - pointed to by \a buf if \a buf is not NULL. On exit, contains - the number of bytes copied to \a buf or the required size of - the buffer. - - \retval KHM_ERROR_SUCCESS The call succeeded. - - \retval KHM_ERROR_TOO_LONG Either \a buf was NULL or the supplied - buffer was not large enough. The required size is in \a cbbuf. - - \retval KHM_ERROR_INVALID_PARAM Invalid parameter. - */ -KHMEXP khm_int32 KHMAPI -kcdb_credtype_get_name(khm_int32 id, - wchar_t * buf, - khm_size * cbbuf); - -/*! \brief Retrieve the type specific subscription for a type - - Given a credentials type, this function returns the credentials - type specific subcription. It may return NULL if the subscription - is not available. - */ -KHMEXP khm_handle KHMAPI -kcdb_credtype_get_sub(khm_int32 id); - -/*! \brief Get the description of a credentials type - - Unlike the name of a credential type, the description is localized. - - \param[in] id Credentials type identifier - - \param[out] buf Receives the description. Can bet set to NULL if - only the size of the buffer is required. - - \param[in,out] cbbuf On entry, specifies the size of the buffer - pointed to by \a buf. On exit, specifies the required size of - the buffer or the number of bytes copied, depending on whether - the call succeeded or not. - - \param[in] flags Specify ::KCDB_TS_SHORT if the short version of - the description is desired if there is more than one. - - \retval KHM_ERROR_SUCCESS The call succeeded - \retval KHM_ERROR_TOO_LONG Either \a buf was NULL or the supplied buffer was insufficient. The required size is specified in \a cbbuf. - \retval KHM_ERROR_INVALID_PARAM One or more parameters were invalid. - */ -KHMEXP khm_int32 KHMAPI -kcdb_credtype_describe(khm_int32 id, - wchar_t * buf, - khm_size * cbbuf, - khm_int32 flags); - -/*! \brief Look up the identifier of a credentials type by name - - Given a name, looks up the identifier. - - \param[in] name Name of the credentials type - \param[out] id Receives the identifier if the call succeeds - - */ -KHMEXP khm_int32 KHMAPI -kcdb_credtype_get_id(const wchar_t * name, - khm_int32 * id); - -/*@}*/ - -/*********************************************************************/ - -/*! \defgroup kcdb_buf Generic access to buffer - - Currently, credentials and identities both hold record data types. - This set of API's allow an application to access fields in the - records using a single interface. Note that credentials only - accept regular attributes while identities can hold both - attributes and properties. - - Handles to credentials and identities are implicitly also handles - to records. Thus they can be directly used as such. -*/ -/*@{*/ - -/*! \brief Get an attribute from a record by attribute id. - - \param[in] buffer The buffer that is to receive the attribute - value. Set this to NULL if only the required buffer size is - to be returned. - - \param[in,out] cbbuf The number of bytes available in \a buffer. - If \a buffer is not sufficient, returns KHM_ERROR_TOO_LONG and - sets this to the required buffer size. - - \param[out] attr_type Receives the data type of the attribute. - Set this to NULL if the type is not required. - - \note Set both \a buffer and \a cbbuf to NULL if only the - existence of the attribute is to be checked. If the attribute - exists in this record then the function will return - KHM_ERROR_SUCCESS, otherwise it returns KHM_ERROR_NOT_FOUND. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_buf_get_attr(khm_handle record, - khm_int32 attr_id, - khm_int32 * attr_type, - void * buffer, - khm_size * pcb_buf); - -/*! \brief Get an attribute from a record by name. - - \param[in] buffer The buffer that is to receive the attribute - value. Set this to NULL if only the required buffer size is - to be returned. - - \param[in,out] cbbuf The number of bytes available in \a buffer. - If \a buffer is not sufficient, returns KHM_ERROR_TOO_LONG and - sets this to the required buffer size. - - \note Set both \a buffer and \a cbbuf to NULL if only the - existence of the attribute is to be checked. If the attribute - exists in this record then the function will return - KHM_ERROR_SUCCESS, otherwise it returns KHM_ERROR_NOT_FOUND. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_buf_get_attrib(khm_handle record, - const wchar_t * attr_name, - khm_int32 * attr_type, - void * buffer, - khm_size * pcb_buf); - -/*! \brief Get the string representation of a record attribute. - - A shortcut function which generates the string representation of a - record attribute directly. - - \param[in] record A handle to a record - - \param[in] attr_id The attribute to retrieve - - \param[out] buffer A pointer to a string buffer which receives the - string form of the attribute. Set this to NULL if you only - want to determine the size of the required buffer. - - \param[in,out] pcbbuf A pointer to a #khm_int32 that, on entry, - holds the size of the buffer pointed to by \a buffer, and on - exit, receives the actual number of bytes that were copied. - - \param[in] flags Flags for the string conversion. Can be set to - one of KCDB_TS_LONG or KCDB_TS_SHORT. The default is - KCDB_TS_LONG. - - \retval KHM_ERROR_SUCCESS Success - \retval KHM_ERROR_NOT_FOUND The given attribute was either invalid - or was not defined for this record - \retval KHM_ERROR_INVALID_PARAM One or more parameters were invalid - \retval KHM_ERROR_TOO_LONG Either \a buffer was NULL or the - supplied buffer was insufficient -*/ -KHMEXP khm_int32 KHMAPI -kcdb_buf_get_attr_string(khm_handle record, - khm_int32 attr_id, - wchar_t * buffer, - khm_size * pcbbuf, - khm_int32 flags); - -/*! \brief Get the string representation of a record attribute by name. - - A shortcut function which generates the string representation of a - record attribute directly. - - \param[in] record A handle to a record - - \param[in] attrib The name of the attribute to retrieve - - \param[out] buffer A pointer to a string buffer which receives the - string form of the attribute. Set this to NULL if you only - want to determine the size of the required buffer. - - \param[in,out] pcbbuf A pointer to a #khm_int32 that, on entry, - holds the size of the buffer pointed to by \a buffer, and on - exit, receives the actual number of bytes that were copied. - - \param[in] flags Flags for the string conversion. Can be set to - one of KCDB_TS_LONG or KCDB_TS_SHORT. The default is - KCDB_TS_LONG. - - \see kcdb_cred_get_attr_string() -*/ -KHMEXP khm_int32 KHMAPI -kcdb_buf_get_attrib_string(khm_handle record, - const wchar_t * attr_name, - wchar_t * buffer, - khm_size * pcbbuf, - khm_int32 flags); - -/*! \brief Set an attribute in a record by attribute id - - \param[in] cbbuf Number of bytes of data in \a buffer. The - individual data type handlers may copy in less than this many - bytes in to the record. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_buf_set_attr(khm_handle record, - khm_int32 attr_id, - void * buffer, - khm_size cbbuf); - -/*! \brief Set an attribute in a record by name - - \param[in] cbbuf Number of bytes of data in \a buffer. The - individual data type handlers may copy in less than this many - bytes in to the record. -*/ -KHMEXP khm_int32 KHMAPI -kcdb_buf_set_attrib(khm_handle record, - const wchar_t * attr_name, - void * buffer, - khm_size cbbuf); - -KHMEXP khm_int32 KHMAPI -kcdb_buf_hold(khm_handle record); - -KHMEXP khm_int32 KHMAPI -kcdb_buf_release(khm_handle record); - -/*@}*/ - -/********************************************************************/ - -/* Notification operation constants */ - -#define KCDB_OP_INSERT 1 -#define KCDB_OP_DELETE 2 -#define KCDB_OP_MODIFY 3 -#define KCDB_OP_ACTIVATE 4 -#define KCDB_OP_DEACTIVATE 5 -#define KCDB_OP_HIDE 6 -#define KCDB_OP_UNHIDE 7 -#define KCDB_OP_SETSEARCH 8 -#define KCDB_OP_UNSETSEARCH 9 -#define KCDB_OP_NEW_DEFAULT 10 -#define KCDB_OP_DELCONFIG 11 - -/*@}*/ - -#endif diff --git a/src/windows/identity/kcreddb/kcreddbinternal.h b/src/windows/identity/kcreddb/kcreddbinternal.h deleted file mode 100644 index ac07aa75a..000000000 --- a/src/windows/identity/kcreddb/kcreddbinternal.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KCREDDBINTERNAL_H__ -#define __KHIMAIRA_KCREDDBINTERNAL_H__ - -#define _NIMLIB_ - -#include<windows.h> -#include<kcreddb.h> -#include<kmq.h> -#include<khlist.h> -#include<utils.h> -#include<kherror.h> -#include<khmsgtypes.h> -#include<kconfig.h> -#include<strsafe.h> - -#include<langres.h> - -#include "buf.h" -#include "identity.h" -#include "attrib.h" -#include "type.h" -#include "credential.h" -#include "credset.h" -#include "credtype.h" - -/* globals */ - -extern HINSTANCE hinst_kcreddb; - -kconf_schema schema_kcdbconfig[]; - -void kcdb_init(void); -void kcdb_exit(void); -khm_handle kcdb_get_config(void); - - -#endif diff --git a/src/windows/identity/kcreddb/kcreddbmain.c b/src/windows/identity/kcreddb/kcreddbmain.c deleted file mode 100644 index 7702368ce..000000000 --- a/src/windows/identity/kcreddb/kcreddbmain.c +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<kcreddbinternal.h> - -HINSTANCE hinst_kcreddb; - -void -kcdb_process_attach(HINSTANCE hinstDLL) { - hinst_kcreddb = hinstDLL; - kcdb_init(); -} - -void -kcdb_process_detach(void) { - kcdb_exit(); -} diff --git a/src/windows/identity/kcreddb/lang/en_us/kcredres.rc b/src/windows/identity/kcreddb/lang/en_us/kcredres.rc deleted file mode 100644 index 6dce39513..000000000 --- a/src/windows/identity/kcreddb/lang/en_us/kcredres.rc +++ /dev/null @@ -1,130 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "..\..\langres.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "afxres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "..\\..\\langres.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""afxres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -1 TEXTINCLUDE -BEGIN - "..\\..\\langres.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""afxres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE -BEGIN - IDS_CREDDB "Khimaira Credentials Database" - IDS_NAME "Service Name" - IDS_IDENTITY "Identity" - IDS_ISSUED "Issued on" - IDS_EXPIRES "Expires on" - IDS_TIMELEFT "Time Remaining" - IDS_LOCATION "Location" - IDS_PARENT "Parent" - IDS_TYPE "Type" - IDS_IVL_EXPIRED "(Expired)" - IDS_IVL_D_H "%I64u days %I64u hours" -END - -STRINGTABLE -BEGIN - IDS_IVL_H_M "%I64u hours %I64u mins" - IDS_IVL_M_S "%I64u mins %I64u secs" - IDS_IVL_S "%I64u seconds" - IDS_IVL_UNKNOWN "(Unknown)" - IDS_LIFETIME "Lifetime" - IDS_IVL_1D "1 day" - IDS_IVL_1H "1 hour" - IDS_IVL_1M "1 minute" - IDS_IVL_1S "1 second" - IDS_IVL_D "%I64u days" - IDS_IVL_H "%I64u hours" - IDS_IVL_M "%I64u minutes" - IDS_IVL_S_SPEC "s,sec,second,seconds,secs" - IDS_IVL_M_SPEC "m,min,mins,minutes" - IDS_IVL_H_SPEC "h,hrs,hours" - IDS_IVL_D_SPEC "d,day,days,ds" -END - -STRINGTABLE -BEGIN - 128 "w,wk,wks,weeks" - IDS_FLAGS "Flags" - IDS_RENEW_TIMELEFT "Renewable Time left" - IDS_RENEW_EXPIRES "Renewable time expires" - IDS_RENEW_LIFETIME "Renewable lifetime" -END - -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/src/windows/identity/kcreddb/langres.h b/src/windows/identity/kcreddb/langres.h deleted file mode 100644 index 8f03240db..000000000 --- a/src/windows/identity/kcreddb/langres.h +++ /dev/null @@ -1,48 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by D:\work\pismere\athena\auth\krb5\src\windows\identity\kcreddb\lang\en_us\kcredres.rc -// -#define IDS_CREDDB 101 -#define IDS_NAME 102 -#define IDS_IDENTITY 103 -#define IDS_ISSUED 104 -#define IDS_EXPIRES 105 -#define IDS_TIMELEFT 106 -#define IDS_LOCATION 107 -#define IDS_PARENT 108 -#define IDS_TYPE 109 -#define IDS_IVL_EXPIRED 110 -#define IDS_IVL_D_H 111 -#define IDS_IVL_H_M 112 -#define IDS_IVL_M_S 113 -#define IDS_IVL_S 114 -#define IDS_IVL_UNKNOWN 115 -#define IDS_LIFETIME 116 -#define IDS_IVL_1D 117 -#define IDS_IVL_1H 118 -#define IDS_IVL_1M 119 -#define IDS_IVL_1S 120 -#define IDS_IVL_D 121 -#define IDS_IVL_H 122 -#define IDS_IVL_M 123 -#define IDS_IVL_S_SPEC 124 -#define IDS_IVL_M_SPEC 125 -#define IDS_IVL_H_SPEC 126 -#define IDS_IVL_D_SPEC 127 -#define IDS_IVl_W_SPEC 128 -#define IDS_IVL_W_SPEC 128 -#define IDS_FLAGS 129 -#define IDS_RENEW_TIMELEFT 130 -#define IDS_RENEW_EXPIRES 131 -#define IDS_RENEW_LIFETIME 132 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 102 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1001 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/src/windows/identity/kcreddb/resource.h b/src/windows/identity/kcreddb/resource.h deleted file mode 100644 index 56739331f..000000000 --- a/src/windows/identity/kcreddb/resource.h +++ /dev/null @@ -1,27 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by kcreddb.rc -// -#define IDS_PROJNAME 100 -#define IDR_WMDMLOGGER 101 -#define IDS_LOG_SEV_INFO 201 -#define IDS_LOG_SEV_WARN 202 -#define IDS_LOG_SEV_ERROR 203 -#define IDS_LOG_DATETIME 204 -#define IDS_LOG_SRCNAME 205 -#define IDS_DEF_LOGFILE 301 -#define IDS_DEF_MAXSIZE 302 -#define IDS_DEF_SHRINKTOSIZE 303 -#define IDS_DEF_LOGENABLED 304 -#define IDS_MUTEX_TIMEOUT 401 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 201 -#define _APS_NEXT_COMMAND_VALUE 32768 -#define _APS_NEXT_CONTROL_VALUE 201 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/src/windows/identity/kcreddb/type.c b/src/windows/identity/kcreddb/type.c deleted file mode 100644 index 5e23b5e1a..000000000 --- a/src/windows/identity/kcreddb/type.c +++ /dev/null @@ -1,1386 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<kcreddbinternal.h> -#include<limits.h> - -CRITICAL_SECTION cs_type; -hashtable * kcdb_type_namemap; -kcdb_type_i ** kcdb_type_tbl; -kcdb_type_i * kcdb_types = NULL; - -/* Void */ - -#define GENERIC_VOID_STR L"(Void)" - -khm_int32 KHMAPI kcdb_type_void_toString( - const void * d, - khm_size cbd, - wchar_t * buffer, - khm_size * cb_buf, - khm_int32 flags) -{ - size_t cbsize; - - if(!cb_buf) - return KHM_ERROR_INVALID_PARAM; - - cbsize = sizeof(GENERIC_VOID_STR); - - if(!buffer || *cb_buf < cbsize) { - *cb_buf = cbsize; - return KHM_ERROR_TOO_LONG; - } - - StringCbCopy(buffer, *cb_buf, GENERIC_VOID_STR); - - *cb_buf = cbsize; - - return KHM_ERROR_SUCCESS; -} - -khm_boolean KHMAPI kcdb_type_void_isValid( - const void * d, - khm_size cbd) -{ - /* void is always valid, even if d is NULL */ - return TRUE; -} - -khm_int32 KHMAPI kcdb_type_void_comp( - const void * d1, - khm_size cbd1, - const void * d2, - khm_size cbd2) -{ - /* voids can not be compared */ - return 0; -} - -khm_int32 KHMAPI kcdb_type_void_dup( - const void * d_src, - khm_size cbd_src, - void * d_dst, - khm_size * cbd_dst) -{ - if(!cbd_dst) - return KHM_ERROR_INVALID_PARAM; - - *cbd_dst = 0; - - /* copying a void doesn't do much */ - return KHM_ERROR_SUCCESS; -} - - -/* String */ -khm_int32 KHMAPI kcdb_type_string_toString( - const void * d, - khm_size cbd, - wchar_t * buffer, - khm_size * cb_buf, - khm_int32 flags) -{ - size_t cbsize; - wchar_t * sd; - - if(!cb_buf) - return KHM_ERROR_INVALID_PARAM; - - sd = (wchar_t *) d; - - if(FAILED(StringCbLength(sd, KCDB_TYPE_MAXCB, &cbsize))) - return KHM_ERROR_INVALID_PARAM; - - cbsize += sizeof(wchar_t); - - if(!buffer || *cb_buf < cbsize) { - *cb_buf = cbsize; - return KHM_ERROR_TOO_LONG; - } - - StringCbCopy(buffer, *cb_buf, sd); - - *cb_buf = cbsize; - - return KHM_ERROR_SUCCESS; -} - -khm_boolean KHMAPI kcdb_type_string_isValid( - const void * d, - khm_size cbd) -{ - size_t cbsize; - - if(cbd == KCDB_CBSIZE_AUTO) - cbd = KCDB_TYPE_MAXCB; - - if(FAILED(StringCbLength((wchar_t *) d, cbd, &cbsize))) - return FALSE; - else - return TRUE; -} - -khm_int32 KHMAPI kcdb_type_string_comp( - const void * d1, - khm_size cbd1, - const void * d2, - khm_size cbd2) -{ - return wcscmp((const wchar_t *) d1, (const wchar_t *) d2); -} - -khm_int32 KHMAPI kcdb_type_string_dup( - const void * d_src, - khm_size cbd_src, - void * d_dst, - khm_size * cbd_dst) -{ - size_t cbsize; - - if(!cbd_dst) - return KHM_ERROR_INVALID_PARAM; - - if(cbd_src == KCDB_CBSIZE_AUTO) { - cbd_src = KCDB_TYPE_MAXCB; - } - - if(FAILED(StringCbLength((const wchar_t *) d_src, cbd_src, &cbsize))) { - return KHM_ERROR_UNKNOWN; - } - - cbsize += sizeof(wchar_t); - - if(!d_dst || *cbd_dst < cbsize) { - *cbd_dst = cbsize; - return KHM_ERROR_TOO_LONG; - } - - StringCbCopy((wchar_t *) d_dst, *cbd_dst, (const wchar_t *) d_src); - *cbd_dst = cbsize; - - return KHM_ERROR_SUCCESS; -} - -/* Date and time */ - - -khm_int32 KHMAPI kcdb_type_date_toString( - const void * d, - khm_size cbd, - wchar_t * buffer, - khm_size * cb_buf, - khm_int32 flags) -{ - size_t cbsize; - size_t cchsize; - wchar_t * bufend; - SYSTEMTIME st_now; - SYSTEMTIME st_d; - SYSTEMTIME st_dl; - FILETIME *ft; - int today = 0; - - if(!cb_buf) - return KHM_ERROR_INVALID_PARAM; - - ft = (FILETIME *) d; - - GetLocalTime(&st_now); - FileTimeToSystemTime(ft, &st_d); - SystemTimeToTzSpecificLocalTime(NULL, &st_d, &st_dl); - if (st_now.wYear == st_dl.wYear && - st_now.wMonth == st_dl.wMonth && - st_now.wDay == st_dl.wDay) - today = 1; - - if(today && (flags & KCDB_TS_SHORT)) { - cbsize = 0; - } else { - cbsize = GetDateFormat( - LOCALE_USER_DEFAULT, - DATE_SHORTDATE, - &st_dl, - NULL, - NULL, - 0) * sizeof(wchar_t); - } - - cbsize += GetTimeFormat( - LOCALE_USER_DEFAULT, - 0, - &st_dl, - NULL, - NULL, - 0) * sizeof(wchar_t); - - if(!buffer || *cb_buf < cbsize) { - *cb_buf = cbsize; - return KHM_ERROR_TOO_LONG; - } - - cchsize = cbsize / sizeof(wchar_t); - - if(!today || !(flags & KCDB_TS_SHORT)) { - size_t cch_buf_len; - - GetDateFormat( - LOCALE_USER_DEFAULT, - DATE_SHORTDATE, - &st_dl, - NULL, - buffer, - (int) cchsize); - - StringCchCat(buffer, cchsize, L" "); - - StringCchLength(buffer, cchsize, &cch_buf_len); - - bufend = buffer + cch_buf_len; - cchsize -= cch_buf_len; - } else { - bufend = buffer; - } - - GetTimeFormat( - LOCALE_USER_DEFAULT, - 0, - &st_dl, - NULL, - bufend, - (int) cchsize); - - *cb_buf = cbsize; - - return KHM_ERROR_SUCCESS; -} - -khm_boolean KHMAPI kcdb_type_date_isValid( - const void * d, - khm_size cbd) -{ - return (d && (cbd == KCDB_CBSIZE_AUTO || cbd == sizeof(FILETIME))); -} - -khm_int32 KHMAPI kcdb_type_date_comp( - const void * d1, - khm_size cbd1, - const void * d2, - khm_size cbd2) -{ - return (khm_int32) CompareFileTime((CONST FILETIME *) d1, (CONST FILETIME *) d2); -} - -khm_int32 KHMAPI kcdb_type_date_dup( - const void * d_src, - khm_size cbd_src, - void * d_dst, - khm_size * cbd_dst) -{ - if(d_dst && *cbd_dst >= sizeof(FILETIME)) { - *cbd_dst = sizeof(FILETIME); - *((FILETIME *) d_dst) = *((FILETIME *) d_src); - return KHM_ERROR_SUCCESS; - } else { - *cbd_dst = sizeof(FILETIME); - return KHM_ERROR_TOO_LONG; - } -} - -/* Interval */ - -/* returns the number of milliseconds that must elapse away from the - interval specified in pft for the representation of pft to change - from whatever it is right now */ -KHMEXP long KHMAPI -FtIntervalMsToRepChange(LPFILETIME pft) -{ - __int64 ms,s,m,h,d; - __int64 ift; - long l; - - ift = FtToInt(pft); - ms = ift / 10000i64; - - if(ms < 0 || ift == _I64_MAX) - return -1; - - s = ms / 1000i64; - m = s / 60; - h = s / 3600; - d = s / (3600*24); - - if (d > 0) { - /* rep change at next hour change */ - l = (long) (ms % (3600*1000i64)); - } else if (h > 0) { - /* rep change at next minute change */ - l = (long) (ms % (60*1000i64)); - } else if (m > 5) { - /* rep change at next minute change */ - l = (long) (ms % (60*1000i64)); - } else { - /* rep change at next second change */ - l = (long) (ms % 1000); - } - - return l; -} - -KHMEXP khm_int32 KHMAPI -FtIntervalToString(LPFILETIME data, wchar_t * buffer, khm_size * cb_buf) -{ - size_t cbsize; - __int64 s,m,h,d; - __int64 ift; - wchar_t ibuf[256]; - wchar_t fbuf[256]; - wchar_t * t; - - if(!cb_buf) - return KHM_ERROR_INVALID_PARAM; - - ift = FtToInt(data); - s = ift / 10000000i64; - - m = s / 60; - h = s / 3600; - d = s / (3600*24); - - if(ift == _I64_MAX) { -#ifdef INDICATE_UNKNOWN_EXPIRY_TIMES - LoadString(hinst_kcreddb, IDS_IVL_UNKNOWN, ibuf, sizeof(ibuf)/sizeof(wchar_t)); -#else - StringCbCopy(ibuf, sizeof(ibuf), L""); -#endif - } else if(s < 0) { - LoadString(hinst_kcreddb, IDS_IVL_EXPIRED, ibuf, sizeof(ibuf)/sizeof(wchar_t)); - } else if(d > 0) { - h = (s - (d * 3600 * 24)) / 3600; - if(d == 1) { - LoadString(hinst_kcreddb, IDS_IVL_1D, ibuf, ARRAYLENGTH(ibuf)); - } else { - LoadString(hinst_kcreddb, IDS_IVL_D, fbuf, ARRAYLENGTH(fbuf)); - StringCbPrintf(ibuf, sizeof(ibuf), fbuf, d); - } - if(h > 0) { - StringCbCat(ibuf, sizeof(ibuf), L" "); - t = ibuf + wcslen(ibuf); - if(h == 1) - { - LoadString(hinst_kcreddb, IDS_IVL_1H, t, - (int) (ARRAYLENGTH(ibuf) - wcslen(ibuf))); - } else { - LoadString(hinst_kcreddb, IDS_IVL_H, fbuf, - (int) ARRAYLENGTH(fbuf)); - StringCbPrintf(t, sizeof(ibuf) - wcslen(ibuf)*sizeof(wchar_t), fbuf, h); - } - } - } else if(h > 0 || m > 5) { - m = (s - (h * 3600)) / 60; - if(h == 1) { - LoadString(hinst_kcreddb, IDS_IVL_1H, ibuf, ARRAYLENGTH(ibuf)); - } else if (h > 1) { - LoadString(hinst_kcreddb, IDS_IVL_H, fbuf, ARRAYLENGTH(fbuf)); - StringCbPrintf(ibuf, sizeof(ibuf), fbuf, h); - } else { - *ibuf = L'\0'; - } - - if(m > 0 || h == 0) { - if (h >= 1) - StringCbCat(ibuf, sizeof(ibuf), L" "); - - t = ibuf + wcslen(ibuf); - if(m == 1) - { - LoadString(hinst_kcreddb, IDS_IVL_1M, t, - (int) (ARRAYLENGTH(ibuf) - wcslen(ibuf))); - } else { - LoadString(hinst_kcreddb, IDS_IVL_M, fbuf, - (int) ARRAYLENGTH(fbuf)); - StringCbPrintf(t, sizeof(ibuf) - wcslen(ibuf)*sizeof(wchar_t), fbuf, m); - } - } - } else if(m > 0) { - s -= m * 60; - if(m == 1) { - LoadString(hinst_kcreddb, IDS_IVL_1M, ibuf, ARRAYLENGTH(ibuf)); - } else { - LoadString(hinst_kcreddb, IDS_IVL_M, fbuf, ARRAYLENGTH(fbuf)); - StringCbPrintf(ibuf, sizeof(ibuf), fbuf, m); - } - if(s > 0) { - StringCbCat(ibuf, sizeof(ibuf), L" "); - t = ibuf + wcslen(ibuf); - if(s == 1) - { - LoadString(hinst_kcreddb, IDS_IVL_1S, t, - (int) (ARRAYLENGTH(ibuf) - wcslen(ibuf))); - } else { - LoadString(hinst_kcreddb, IDS_IVL_S, fbuf, - (int) ARRAYLENGTH(fbuf)); - StringCbPrintf(t, sizeof(ibuf) - wcslen(ibuf)*sizeof(wchar_t), fbuf, s); - } - } - } else { - if(s == 1) { - LoadString(hinst_kcreddb, IDS_IVL_1S, ibuf, ARRAYLENGTH(ibuf)); - } else { - LoadString(hinst_kcreddb, IDS_IVL_S, fbuf, sizeof(fbuf)/sizeof(wchar_t)); - StringCbPrintf(ibuf, sizeof(ibuf), fbuf, s); - } - } - - StringCbLength(ibuf, sizeof(ibuf), &cbsize); - cbsize += sizeof(wchar_t); - - if(!buffer || *cb_buf < cbsize) { - *cb_buf = cbsize; - return KHM_ERROR_TOO_LONG; - } - - StringCbCopy(buffer, *cb_buf, ibuf); - *cb_buf = cbsize; - - return KHM_ERROR_SUCCESS; -} - -khm_int32 KHMAPI -kcdb_type_interval_toString(const void * data, - khm_size cbd, - wchar_t * buffer, - khm_size * cb_buf, - khm_int32 flags) -{ - return FtIntervalToString((LPFILETIME) data, buffer, cb_buf); -} - -khm_boolean KHMAPI kcdb_type_interval_isValid( - const void * d, - khm_size cbd) -{ - return (d && (cbd == sizeof(FILETIME) || cbd == KCDB_CBSIZE_AUTO)); -} - -khm_int32 KHMAPI kcdb_type_interval_comp( - const void * d1, - khm_size cbd1, - const void * d2, - khm_size cbd2) -{ - __int64 i1, i2; - - i1 = FtToInt((FILETIME *) d1); - i2 = FtToInt((FILETIME *) d2); - - if(i1 < i2) - return -1; - else if(i1 > i2) - return 1; - else - return 0; -} - -khm_int32 KHMAPI kcdb_type_interval_dup( - const void * d_src, - khm_size cbd_src, - void * d_dst, - khm_size * cbd_dst) -{ - if(d_dst && *cbd_dst >= sizeof(FILETIME)) { - *cbd_dst = sizeof(FILETIME); - *((FILETIME *) d_dst) = *((FILETIME *) d_src); - return KHM_ERROR_SUCCESS; - } else { - *cbd_dst = sizeof(FILETIME); - return KHM_ERROR_TOO_LONG; - } -} - -/* Int32 */ - -khm_int32 KHMAPI kcdb_type_int32_toString( - const void * d, - khm_size cbd, - wchar_t * buffer, - khm_size * cb_buf, - khm_int32 flags) -{ - size_t cbsize; - wchar_t ibuf[12]; - - if(!cb_buf) - return KHM_ERROR_INVALID_PARAM; - - StringCbPrintf(ibuf, sizeof(ibuf), L"%d", *((khm_int32 *) d)); - StringCbLength(ibuf, sizeof(ibuf), &cbsize); - cbsize += sizeof(wchar_t); - - if(!buffer || *cb_buf < cbsize) { - *cb_buf = cbsize; - return KHM_ERROR_TOO_LONG; - } - - StringCbCopy((wchar_t *) buffer, *cb_buf, ibuf); - *cb_buf = cbsize; - - return KHM_ERROR_SUCCESS; -} - -khm_boolean KHMAPI kcdb_type_int32_isValid( - const void * d, - khm_size cbd) -{ - return (d && (cbd == KCDB_CBSIZE_AUTO || cbd == sizeof(khm_int32))); -} - -khm_int32 KHMAPI kcdb_type_int32_comp( - const void * d1, - khm_size cbd1, - const void * d2, - khm_size cbd2) -{ - return *((khm_int32 *) d1) - *((khm_int32 *) d2); -} - -khm_int32 KHMAPI kcdb_type_int32_dup( - const void * d_src, - khm_size cbd_src, - void * d_dst, - khm_size * cbd_dst) -{ - if(d_dst && (*cbd_dst >= sizeof(khm_int32))) { - *cbd_dst = sizeof(khm_int32); - *((khm_int32 *) d_dst) = *((khm_int32 *) d_src); - return KHM_ERROR_SUCCESS; - } else { - *cbd_dst = sizeof(khm_int32); - return KHM_ERROR_TOO_LONG; - } -} - -/* Int64 */ - -khm_int32 KHMAPI kcdb_type_int64_toString( - const void * d, - khm_size cbd, - wchar_t * buffer, - khm_size * cb_buf, - khm_int32 flags) -{ - size_t cbsize; - wchar_t ibuf[22]; - - if(!cb_buf) - return KHM_ERROR_INVALID_PARAM; - - StringCbPrintf(ibuf, sizeof(ibuf), L"%I64d", *((__int64 *) d)); - StringCbLength(ibuf, sizeof(ibuf), &cbsize); - cbsize += sizeof(wchar_t); - - if(!buffer || *cb_buf < cbsize) { - *cb_buf = cbsize; - return KHM_ERROR_TOO_LONG; - } - - StringCbCopy((wchar_t *) buffer, *cb_buf, ibuf); - *cb_buf = cbsize; - - return KHM_ERROR_SUCCESS; -} - -khm_boolean KHMAPI kcdb_type_int64_isValid( - const void * d, - khm_size cbd) -{ - return (d && (cbd == KCDB_CBSIZE_AUTO || cbd == sizeof(__int64))); -} - -khm_int32 KHMAPI kcdb_type_int64_comp( - const void * d1, - khm_size cbd1, - const void * d2, - khm_size cbd2) -{ - __int64 r = *((__int64 *) d1) - *((__int64 *) d2); - return (r==0i64)?0:((r>0i64)?1:-1); -} - -khm_int32 KHMAPI kcdb_type_int64_dup( - const void * d_src, - khm_size cbd_src, - void * d_dst, - khm_size * cbd_dst) -{ - if(d_dst && (*cbd_dst >= sizeof(__int64))) { - *cbd_dst = sizeof(__int64); - *((__int64 *) d_dst) = *((__int64 *) d_src); - return KHM_ERROR_SUCCESS; - } else { - *cbd_dst = sizeof(__int64); - return KHM_ERROR_TOO_LONG; - } -} - -/* Data */ -#define GENERIC_DATA_STR L"(Data)" - -khm_int32 KHMAPI kcdb_type_data_toString( - const void * d, - khm_size cbd, - wchar_t * buffer, - khm_size * cb_buf, - khm_int32 flags) -{ - size_t cbsize; - - if(!cb_buf) - return KHM_ERROR_INVALID_PARAM; - - cbsize = sizeof(GENERIC_DATA_STR); - - if(!buffer || *cb_buf < cbsize) { - *cb_buf = cbsize; - return KHM_ERROR_TOO_LONG; - } - - StringCbCopy(buffer, *cb_buf, GENERIC_DATA_STR); - - *cb_buf = cbsize; - - return KHM_ERROR_SUCCESS; -} - -khm_boolean KHMAPI kcdb_type_data_isValid( - const void * d, - khm_size cbd) -{ - /* data is always valid */ - if (cbd != 0 && d == NULL) - return FALSE; - else - return TRUE; -} - -khm_int32 KHMAPI kcdb_type_data_comp( - const void * d1, - khm_size cbd1, - const void * d2, - khm_size cbd2) -{ - khm_size pref; - khm_int32 rv = 0; - - pref = min(cbd1, cbd2); - - if (pref == 0) - return (cbd1 < cbd2)? -1 : ((cbd1 > cbd2)? 1 : 0); - - rv = memcmp(d1, d2, pref); - - if (rv == 0) { - return (cbd1 < cbd2)? -1 : ((cbd1 > cbd2)? 1 : 0); - } else { - return rv; - } -} - -khm_int32 KHMAPI kcdb_type_data_dup( - const void * d_src, - khm_size cbd_src, - void * d_dst, - khm_size * cbd_dst) -{ - if(!cbd_dst || cbd_src == KCDB_CBSIZE_AUTO) - return KHM_ERROR_INVALID_PARAM; - - if(!d_dst || *cbd_dst < cbd_src) { - *cbd_dst = cbd_src; - return KHM_ERROR_TOO_LONG; - } else { - *cbd_dst = cbd_src; - memcpy(d_dst, d_src, cbd_src); - return KHM_ERROR_SUCCESS; - } -} - - -void kcdb_type_msg_completion(kmq_message * m) -{ - kcdb_type_release((kcdb_type_i *) m->vparam); -} - -void kcdb_type_post_message(khm_int32 op, kcdb_type_i * t) -{ - kcdb_type_hold(t); - kmq_post_message(KMSG_KCDB, KMSG_KCDB_TYPE, op, (void *) t); -} - -void kcdb_type_init(void) -{ - kcdb_type type; - - InitializeCriticalSection(&cs_type); - kcdb_type_namemap = hash_new_hashtable( - KCDB_TYPE_HASH_SIZE, - hash_string, - hash_string_comp, - kcdb_type_add_ref, - kcdb_type_del_ref); - kcdb_type_tbl = PMALLOC(sizeof(kcdb_type_i *) * (KCDB_TYPE_MAX_ID + 1)); - ZeroMemory(kcdb_type_tbl, sizeof(kcdb_type_i *) * (KCDB_TYPE_MAX_ID + 1)); - kcdb_types = NULL; - - /*TODO: register standard data types */ - - ZeroMemory(&type, sizeof(type)); - type.comp = kcdb_type_void_comp; - type.dup = kcdb_type_void_dup; - type.isValid = kcdb_type_void_isValid; - type.toString = kcdb_type_void_toString; - type.name = KCDB_TYPENAME_VOID; - type.id = KCDB_TYPE_VOID; - - kcdb_type_register(&type, NULL); - - ZeroMemory(&type, sizeof(type)); - type.comp = kcdb_type_string_comp; - type.dup = kcdb_type_string_dup; - type.isValid = kcdb_type_string_isValid; - type.toString = kcdb_type_string_toString; - type.name = KCDB_TYPENAME_STRING; - type.id = KCDB_TYPE_STRING; - type.flags = KCDB_TYPE_FLAG_CB_AUTO; - - kcdb_type_register(&type, NULL); - - ZeroMemory(&type, sizeof(type)); - type.comp = kcdb_type_date_comp; - type.dup = kcdb_type_date_dup; - type.isValid = kcdb_type_date_isValid; - type.toString = kcdb_type_date_toString; - type.name = KCDB_TYPENAME_DATE; - type.id = KCDB_TYPE_DATE; - type.cb_max = sizeof(FILETIME); - type.cb_min = sizeof(FILETIME); - type.flags = KCDB_TYPE_FLAG_CB_FIXED; - - kcdb_type_register(&type, NULL); - - ZeroMemory(&type, sizeof(type)); - type.comp = kcdb_type_interval_comp; - type.dup = kcdb_type_interval_dup; - type.isValid = kcdb_type_interval_isValid; - type.toString = kcdb_type_interval_toString; - type.name = KCDB_TYPENAME_INTERVAL; - type.id = KCDB_TYPE_INTERVAL; - type.cb_max = sizeof(FILETIME); - type.cb_min = sizeof(FILETIME); - type.flags = KCDB_TYPE_FLAG_CB_FIXED; - - kcdb_type_register(&type, NULL); - - ZeroMemory(&type, sizeof(type)); - type.comp = kcdb_type_int32_comp; - type.dup = kcdb_type_int32_dup; - type.isValid = kcdb_type_int32_isValid; - type.toString = kcdb_type_int32_toString; - type.name = KCDB_TYPENAME_INT32; - type.id = KCDB_TYPE_INT32; - type.cb_max = sizeof(khm_int32); - type.cb_min = sizeof(khm_int32); - type.flags = KCDB_TYPE_FLAG_CB_FIXED; - - kcdb_type_register(&type, NULL); - - ZeroMemory(&type, sizeof(type)); - type.comp = kcdb_type_int64_comp; - type.dup = kcdb_type_int64_dup; - type.isValid = kcdb_type_int64_isValid; - type.toString = kcdb_type_int64_toString; - type.name = KCDB_TYPENAME_INT64; - type.id = KCDB_TYPE_INT64; - type.cb_max = sizeof(__int64); - type.cb_min = sizeof(__int64); - type.flags = KCDB_TYPE_FLAG_CB_FIXED; - - kcdb_type_register(&type, NULL); - - ZeroMemory(&type, sizeof(type)); - type.comp = kcdb_type_data_comp; - type.dup = kcdb_type_data_dup; - type.isValid = kcdb_type_data_isValid; - type.toString = kcdb_type_data_toString; - type.name = KCDB_TYPENAME_DATA; - type.id = KCDB_TYPE_DATA; - - kcdb_type_register(&type, NULL); -} - -void kcdb_type_add_ref(const void *key, void *vt) -{ - kcdb_type_hold((kcdb_type_i *) vt); -} - -void kcdb_type_del_ref(const void *key, void *vt) -{ - kcdb_type_release((kcdb_type_i *) vt); -} - -khm_int32 kcdb_type_hold(kcdb_type_i * t) -{ - if(!t) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_type); - t->refcount++; - LeaveCriticalSection(&cs_type); - - return KHM_ERROR_SUCCESS; -} - -khm_int32 kcdb_type_release(kcdb_type_i * t) -{ - if(!t) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_type); - t->refcount--; - kcdb_type_check_and_delete(t->type.id); - LeaveCriticalSection(&cs_type); - - return KHM_ERROR_SUCCESS; -} - -void kcdb_type_exit(void) -{ - EnterCriticalSection(&cs_type); - PFREE(kcdb_type_tbl); - /*TODO: free up the individual types */ - LeaveCriticalSection(&cs_type); - DeleteCriticalSection(&cs_type); -} - -void kcdb_type_check_and_delete(khm_int32 id) -{ - kcdb_type_i * t; - - if(id < 0 || id > KCDB_TYPE_MAX_ID) - return; - - EnterCriticalSection(&cs_type); - t = kcdb_type_tbl[id]; - if(t && !t->refcount) { - kcdb_type_tbl[id] = NULL; - LDELETE(&kcdb_types, t); - /* must already be out of the hash-table, otherwise refcount should not - be zero */ - PFREE(t->type.name); - PFREE(t); - } - LeaveCriticalSection(&cs_type); -} - -KHMEXP khm_int32 KHMAPI kcdb_type_get_id(const wchar_t *name, khm_int32 * id) -{ - kcdb_type_i * t; - size_t cbsize; - - if(FAILED(StringCbLength(name, KCDB_MAXCB_NAME, &cbsize))) { - /* also fails of name is NULL */ - return KHM_ERROR_INVALID_PARAM; - } - - EnterCriticalSection(&cs_type); - t = hash_lookup(kcdb_type_namemap, (void*) name); - LeaveCriticalSection(&cs_type); - - if(!t) { - *id = KCDB_TYPE_INVALID; - return KHM_ERROR_NOT_FOUND; - } else { - *id = t->type.id; - return KHM_ERROR_SUCCESS; - } -} - -KHMEXP khm_int32 KHMAPI kcdb_type_get_info(khm_int32 id, kcdb_type ** info) -{ - kcdb_type_i * t; - - if(id < 0 || id > KCDB_TYPE_MAX_ID) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_type); - t = kcdb_type_tbl[id]; - - if (t) - kcdb_type_hold(t); - LeaveCriticalSection(&cs_type); - - if(info) - *info = (kcdb_type *) t; - else if (t) - kcdb_type_release(t); - - return (t)? KHM_ERROR_SUCCESS : KHM_ERROR_NOT_FOUND; -} - -KHMEXP khm_int32 KHMAPI kcdb_type_release_info(kcdb_type * info) -{ - return kcdb_type_release((kcdb_type_i *) info); -} - -KHMEXP khm_int32 KHMAPI kcdb_type_get_name(khm_int32 id, wchar_t * buffer, khm_size * cbbuf) -{ - size_t cbsize; - kcdb_type_i * t; - - if(id < 0 || id > KCDB_TYPE_MAX_ID || !cbbuf) - return KHM_ERROR_INVALID_PARAM; - - t = kcdb_type_tbl[id]; - - if(!t) - return KHM_ERROR_NOT_FOUND; - - if(FAILED(StringCbLength(t->type.name, KCDB_MAXCB_NAME, &cbsize))) - return KHM_ERROR_UNKNOWN; - - cbsize += sizeof(wchar_t); - - if(!buffer || *cbbuf < cbsize) { - *cbbuf = cbsize; - return KHM_ERROR_TOO_LONG; - } - - StringCbCopy(buffer, *cbbuf, t->type.name); - *cbbuf = cbsize; - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI kcdb_type_register(const kcdb_type * type, khm_int32 * new_id) -{ - kcdb_type_i *t; - size_t cbsize; - khm_int32 type_id; - - if(!type || - !type->comp || - !type->dup || - !type->isValid || - !type->toString || - !type->name) - return KHM_ERROR_INVALID_PARAM; - - if((type->flags & KCDB_TYPE_FLAG_CB_MIN) && - (type->cb_min < 0 || type->cb_min > KCDB_TYPE_MAXCB)) - { - return KHM_ERROR_INVALID_PARAM; - } - - if((type->flags & KCDB_TYPE_FLAG_CB_MAX) && - (type->cb_max < 0 || type->cb_max > KCDB_TYPE_MAXCB)) - { - return KHM_ERROR_INVALID_PARAM; - } - - if((type->flags & KCDB_TYPE_FLAG_CB_MIN) && - (type->flags & KCDB_TYPE_FLAG_CB_MAX) && - (type->cb_max < type->cb_min)) - { - return KHM_ERROR_INVALID_PARAM; - } - - if(FAILED(StringCbLength(type->name, KCDB_MAXCB_NAME, &cbsize))) - return KHM_ERROR_TOO_LONG; - - cbsize += sizeof(wchar_t); - - EnterCriticalSection(&cs_type); - if(type->id == KCDB_TYPE_INVALID) { - kcdb_type_get_next_free(&type_id); - } else if(type->id < 0 || type->id > KCDB_TYPE_MAX_ID) { - LeaveCriticalSection(&cs_type); - return KHM_ERROR_INVALID_PARAM; - } else if(kcdb_type_tbl[type->id]) { - LeaveCriticalSection(&cs_type); - return KHM_ERROR_DUPLICATE; - } else { - type_id = type->id; - } - - if(type_id == KCDB_TYPE_INVALID) { - LeaveCriticalSection(&cs_type); - return KHM_ERROR_NO_RESOURCES; - } - - t = PMALLOC(sizeof(kcdb_type_i)); - ZeroMemory(t, sizeof(kcdb_type_i)); - - t->type.name = PMALLOC(cbsize); - StringCbCopy(t->type.name, cbsize, type->name); - - t->type.comp = type->comp; - t->type.dup = type->dup; - t->type.flags = type->flags; - t->type.id = type_id; - t->type.isValid = type->isValid; - t->type.toString = type->toString; - - LINIT(t); - - kcdb_type_tbl[type_id] = t; - LPUSH(&kcdb_types, t); - - hash_add(kcdb_type_namemap, (void *) t->type.name, (void *) t); - - LeaveCriticalSection(&cs_type); - - if(new_id) - *new_id = type_id; - - kcdb_type_post_message(KCDB_OP_INSERT, t); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI kcdb_type_unregister(khm_int32 id) -{ - kcdb_type_i * t; - - if(id < 0 || id > KCDB_TYPE_MAX_ID) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_type); - t = kcdb_type_tbl[id]; - if(t) { - kcdb_type_post_message(KCDB_OP_DELETE, t); - /* we are going to remove t from the hash table. If no one is holding - a reference to it, then we can free it (actually, the del_ref code - will take care of that anyway). If there is a hold, then it will - get freed when they release it. - - Actually, the post_message call above pretty much guarantees that - the type has a hold on it.*/ - t->type.flags |= KCDB_TYPE_FLAG_DELETED; - hash_del(kcdb_type_namemap, t->type.name); - } - LeaveCriticalSection(&cs_type); - - if(t) - return KHM_ERROR_SUCCESS; - else - return KHM_ERROR_NOT_FOUND; -} - -KHMEXP khm_int32 KHMAPI kcdb_type_get_next_free(khm_int32 * id) -{ - int i; - - if(!id) - return KHM_ERROR_INVALID_PARAM; - - /* do a linear search because this function only gets called a few times */ - EnterCriticalSection(&cs_type); - for(i=0; i <= KCDB_TYPE_MAX_ID; i++) { - if(!kcdb_type_tbl[i]) - break; - } - LeaveCriticalSection(&cs_type); - - if(i <= KCDB_TYPE_MAX_ID) { - *id = i; - return KHM_ERROR_SUCCESS; - } else { - *id = KCDB_TYPE_INVALID; - return KHM_ERROR_NO_RESOURCES; - } -} - -/* Conversion functions */ - -KHMEXP void KHMAPI TimetToFileTime( time_t t, LPFILETIME pft ) -{ - LONGLONG ll; - - if ( sizeof(time_t) == 4 ) - ll = Int32x32To64(t, 10000000) + 116444736000000000i64; - else { - ll = t * 10000000i64 + 116444736000000000i64; - } - pft->dwLowDateTime = (DWORD) ll; - pft->dwHighDateTime = (DWORD) (ll >> 32); -} - -KHMEXP void KHMAPI TimetToFileTimeInterval(time_t t, LPFILETIME pft) -{ - LONGLONG ll; - - if ( sizeof(time_t) == 4 ) - ll = Int32x32To64(t, 10000000); - else { - ll = t * 10000000i64; - } - pft->dwLowDateTime = (DWORD) ll; - pft->dwHighDateTime = (DWORD) (ll >> 32); -} - -KHMEXP long KHMAPI FtIntervalToSeconds(LPFILETIME pft) -{ - __int64 i = FtToInt(pft); - return (long) (i / 10000000i64); -} - -KHMEXP long KHMAPI FtIntervalToMilliseconds(LPFILETIME pft) -{ - __int64 i = FtToInt(pft); - return (long) (i / 10000i64); -} - -KHMEXP khm_int64 KHMAPI FtToInt(LPFILETIME pft) { - LARGE_INTEGER ll; - ll.LowPart = pft->dwLowDateTime; - ll.HighPart = pft->dwHighDateTime; - return ll.QuadPart; -} - -KHMEXP FILETIME KHMAPI IntToFt(khm_int64 i) { - LARGE_INTEGER ll; - FILETIME ft; - - ll.QuadPart = i; - ft.dwLowDateTime = ll.LowPart; - ft.dwHighDateTime = ll.HighPart; - - return ft; -} - -KHMEXP FILETIME KHMAPI FtSub(LPFILETIME ft1, LPFILETIME ft2) { - FILETIME d; - LARGE_INTEGER l1, l2; - - l1.LowPart = ft1->dwLowDateTime; - l1.HighPart = ft1->dwHighDateTime; - l2.LowPart = ft2->dwLowDateTime; - l2.HighPart = ft2->dwHighDateTime; - - l1.QuadPart -= l2.QuadPart; - - d.dwLowDateTime = l1.LowPart; - d.dwHighDateTime = l1.HighPart; - - return d; -} - -KHMEXP FILETIME KHMAPI FtAdd(LPFILETIME ft1, LPFILETIME ft2) { - FILETIME d; - LARGE_INTEGER l1, l2; - - l1.LowPart = ft1->dwLowDateTime; - l1.HighPart = ft1->dwHighDateTime; - l2.LowPart = ft2->dwLowDateTime; - l2.HighPart = ft2->dwHighDateTime; - - l1.QuadPart += l2.QuadPart; - - d.dwLowDateTime = l1.LowPart; - d.dwHighDateTime = l1.HighPart; - - return d; -} - -KHMEXP int KHMAPI AnsiStrToUnicode( wchar_t * wstr, size_t cbwstr, const char * astr) -{ - size_t nc; - - if(cbwstr == 0) - return 0; - - nc = strlen(astr); - if(nc == MultiByteToWideChar( - CP_ACP, - 0, - astr, - (int) nc, - wstr, - (int)(cbwstr / sizeof(wchar_t) - 1))) { - wstr[nc] = L'\0'; - } else { - wstr[0] = L'\0'; - nc = 0; - } - - return (int) nc; -} - -KHMEXP int KHMAPI UnicodeStrToAnsi( char * dest, size_t cbdest, const wchar_t * src) -{ - size_t nc; - - if(cbdest == 0) - return 0; - - dest[0] = 0; - - if(FAILED(StringCchLength(src, cbdest, &nc)) || nc*sizeof(char) >= cbdest) - // note that cbdest counts the terminating NULL, while nc doesn't - return 0; - - nc = WideCharToMultiByte( - CP_ACP, - WC_NO_BEST_FIT_CHARS, - src, - (int) nc, - dest, - (int) cbdest, - NULL, - NULL); - - dest[nc] = 0; - - return (int) nc; -} - -#define MAX_IVL_SPECLIST_LEN 256 -#define MAX_IVL_UNITS 5 - -enum _ivl_indices { - IVL_SECONDS = 0, - IVL_MINUTES, - IVL_HOURS, - IVL_DAYS, - IVL_WEEKS -}; - -typedef struct ivspec_t { - wchar_t str[MAX_IVL_SPECLIST_LEN]; - __int64 mul; -} ivspec; - -static ivspec ivspecs[MAX_IVL_UNITS]; -static BOOL ivspecs_loaded = FALSE; - -int _iv_is_in_spec(wchar_t *s, int n, wchar_t * spec) -{ - /* spec strigns are comma separated */ - wchar_t *b, *e; - - b = spec; - while(*b) { - e = wcschr(b, L','); - if(!e) - e = b + wcslen(b); - - if((e - b) == n && !_wcsnicmp(b, s, n)) { - return TRUE; - } - - if(*e) - b = e+1; - else - break; - } - - return FALSE; -} - -KHMEXP khm_int32 KHMAPI IntervalStringToFt(FILETIME * pft, wchar_t * str) -{ - size_t cb; - wchar_t * b; - __int64 t; - - *pft = IntToFt(0); - - /* ideally we should synchronize this, but it doesn't hurt if two - threads do this at the same time, because we only set the ivspecs_loaded - flag when we are done */ - if(!ivspecs_loaded) { - LoadString(hinst_kcreddb, IDS_IVL_S_SPEC, ivspecs[IVL_SECONDS].str, MAX_IVL_SPECLIST_LEN); - ivspecs[IVL_SECONDS].mul = 10000000i64; - LoadString(hinst_kcreddb, IDS_IVL_M_SPEC, ivspecs[IVL_MINUTES].str, MAX_IVL_SPECLIST_LEN); - ivspecs[IVL_MINUTES].mul = ivspecs[IVL_SECONDS].mul * 60; - LoadString(hinst_kcreddb, IDS_IVL_H_SPEC, ivspecs[2].str, MAX_IVL_SPECLIST_LEN); - ivspecs[IVL_HOURS].mul = ivspecs[IVL_MINUTES].mul * 60; - LoadString(hinst_kcreddb, IDS_IVL_D_SPEC, ivspecs[3].str, MAX_IVL_SPECLIST_LEN); - ivspecs[IVL_DAYS].mul = ivspecs[IVL_HOURS].mul * 24; - LoadString(hinst_kcreddb, IDS_IVL_W_SPEC, ivspecs[4].str, MAX_IVL_SPECLIST_LEN); - ivspecs[IVL_WEEKS].mul = ivspecs[IVL_DAYS].mul * 7; - - ivspecs_loaded = TRUE; - } - - if(!str || FAILED(StringCbLength(str, MAX_IVL_SPECLIST_LEN, &cb))) - return KHM_ERROR_INVALID_PARAM; - - b = str; - t = 0; - while(*b) { - __int64 f = 1; - wchar_t *e; - int i; - - while(*b && iswspace(*b)) - b++; - - if(*b && iswdigit(*b)) { - f = _wtoi64(b); - - while(*b && iswdigit(*b)) - b++; - } - - while(*b && iswspace(*b)) - b++; - - if(!*b) /* no unit specified */ - return KHM_ERROR_INVALID_PARAM; - - e = b; - - while(*e && !iswspace(*e)) - e++; - - for(i=0; i < MAX_IVL_UNITS; i++) { - if(_iv_is_in_spec(b, (int)(e-b), ivspecs[i].str)) - break; - } - - if(i==MAX_IVL_UNITS) - return KHM_ERROR_INVALID_PARAM; - - t += f * ivspecs[i].mul; - - b = e; - } - - *pft = IntToFt(t); - - return KHM_ERROR_SUCCESS; -} diff --git a/src/windows/identity/kcreddb/type.h b/src/windows/identity/kcreddb/type.h deleted file mode 100644 index 5b30e5422..000000000 --- a/src/windows/identity/kcreddb/type.h +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KCDB_TYPE_H -#define __KHIMAIRA_KCDB_TYPE_H - -/* Types */ - -typedef struct kcdb_type_i_t { - kcdb_type type; - - khm_int32 refcount; - - struct kcdb_type_i_t * next; - struct kcdb_type_i_t * prev; -} kcdb_type_i; - -#define KCDB_TYPE_HASH_SIZE 31 - -#define KCDB_TYPE_FLAG_DELETED 8 - -void kcdb_type_init(void); -void kcdb_type_exit(void); -void kcdb_type_add_ref(const void *key, void *vt); -void kcdb_type_del_ref(const void *key, void *vt); -void kcdb_type_msg_completion(kmq_message * m); -khm_int32 kcdb_type_hold(kcdb_type_i * t); -khm_int32 kcdb_type_release(kcdb_type_i * t); -void kcdb_type_check_and_delete(khm_int32 id); -void kcdb_type_post_message(khm_int32 op, kcdb_type_i * t); - -khm_int32 KHMAPI kcdb_type_void_toString( - const void * d, - khm_size cbd, - wchar_t * buffer, - khm_size * cb_buf, - khm_int32 flags); - -khm_boolean KHMAPI kcdb_type_void_isValid( - const void * d, - khm_size cbd); - -khm_int32 KHMAPI kcdb_type_void_comp( - const void * d1, - khm_size cbd1, - const void * d2, - khm_size cbd2); - -khm_int32 KHMAPI kcdb_type_void_dup( - const void * d_src, - khm_size cbd_src, - void * d_dst, - khm_size * cbd_dst); - -khm_int32 KHMAPI kcdb_type_string_toString( - const void * d, - khm_size cbd, - wchar_t * buffer, - khm_size * cb_buf, - khm_int32 flags); - -khm_boolean KHMAPI kcdb_type_string_isValid( - const void * d, - khm_size cbd); - -khm_int32 KHMAPI kcdb_type_string_comp( - const void * d1, - khm_size cbd1, - const void * d2, - khm_size cbd2); - -khm_int32 KHMAPI kcdb_type_string_dup( - const void * d_src, - khm_size cbd_src, - void * d_dst, - khm_size * cbd_dst); - -khm_int32 KHMAPI kcdb_type_date_toString( - const void * d, - khm_size cbd, - wchar_t * buffer, - khm_size * cb_buf, - khm_int32 flags); - -khm_boolean KHMAPI kcdb_type_date_isValid( - const void * d, - khm_size cbd); - -khm_int32 KHMAPI kcdb_type_date_comp( - const void * d1, - khm_size cbd1, - const void * d2, - khm_size cbd2); - -khm_int32 KHMAPI kcdb_type_date_dup( - const void * d_src, - khm_size cbd_src, - void * d_dst, - khm_size * cbd_dst); - -khm_int32 KHMAPI kcdb_type_interval_toString( - const void * d, - khm_size cbd, - wchar_t * buffer, - khm_size * cb_buf, - khm_int32 flags); - -khm_boolean KHMAPI kcdb_type_interval_isValid( - const void * d, - khm_size cbd); - -khm_int32 KHMAPI kcdb_type_interval_comp( - const void * d1, - khm_size cbd1, - const void * d2, - khm_size cbd2); - -khm_int32 KHMAPI kcdb_type_interval_dup( - const void * d_src, - khm_size cbd_src, - void * d_dst, - khm_size * cbd_dst); - -khm_int32 KHMAPI kcdb_type_int32_toString( - const void * d, - khm_size cbd, - wchar_t * buffer, - khm_size * cb_buf, - khm_int32 flags); - -khm_boolean KHMAPI kcdb_type_int32_isValid( - const void * d, - khm_size cbd); - -khm_int32 KHMAPI kcdb_type_int32_comp( - const void * d1, - khm_size cbd1, - const void * d2, - khm_size cbd2); - -khm_int32 KHMAPI kcdb_type_int32_dup( - const void * d_src, - khm_size cbd_src, - void * d_dst, - khm_size * cbd_dst); - -khm_int32 KHMAPI kcdb_type_int64_toString( - const void * d, - khm_size cbd, - wchar_t * buffer, - khm_size * cb_buf, - khm_int32 flags); - -khm_boolean KHMAPI kcdb_type_int64_isValid( - const void * d, - khm_size cbd); - -khm_int32 KHMAPI kcdb_type_int64_comp( - const void * d1, - khm_size cbd1, - const void * d2, - khm_size cbd2); - -khm_int32 KHMAPI kcdb_type_int64_dup( - const void * d_src, - khm_size cbd_src, - void * d_dst, - khm_size * cbd_dst); - -khm_int32 KHMAPI kcdb_type_data_toString( - const void * d, - khm_size cbd, - wchar_t * buffer, - khm_size * cb_buf, - khm_int32 flags); - -khm_boolean KHMAPI kcdb_type_data_isValid( - const void * d, - khm_size cbd); - -khm_int32 KHMAPI kcdb_type_data_comp( - const void * d1, - khm_size cbd1, - const void * d2, - khm_size cbd2); - -khm_int32 KHMAPI kcdb_type_data_dup( - const void * d_src, - khm_size cbd_src, - void * d_dst, - khm_size * cbd_dst); - -#endif diff --git a/src/windows/identity/kherr/Makefile b/src/windows/identity/kherr/Makefile deleted file mode 100644 index 3972235b3..000000000 --- a/src/windows/identity/kherr/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -# -# 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 -# (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. - - -MODULE=kherr -!include <../config/Makefile.w32> - -INCFILES= \ - $(INCDIR)\kherr.h - -OBJFILES= \ - $(OBJ)\kherrmain.obj \ - $(OBJ)\kherr.obj - -LIBFILES= - -SDKLIBFILES= \ - strsafe.lib - -all: mkdirs $(INCFILES) $(OBJFILES) - -clean:: - if exist ..\obj $(RM) $(INCFILES) diff --git a/src/windows/identity/kherr/kherr.c b/src/windows/identity/kherr/kherr.c deleted file mode 100644 index cd5cbc50f..000000000 --- a/src/windows/identity/kherr/kherr.c +++ /dev/null @@ -1,1579 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<kherrinternal.h> -#include<assert.h> -#include<stdarg.h> - -CRITICAL_SECTION cs_error; -DWORD tls_error = 0; -kherr_context * ctx_free_list = NULL; -kherr_context * ctx_root_list = NULL; -kherr_context * ctx_error_list = NULL; -kherr_event * evt_free_list = NULL; - -kherr_handler_node * ctx_handlers = NULL; -khm_size n_ctx_handlers; -khm_size nc_ctx_handlers; - -kherr_serial ctx_serial = 0; - -#ifdef DEBUG -#define DEBUG_CONTEXT - -KHMEXP void -kherr_debug_printf(wchar_t * fmt, ...) -{ - va_list vl; - wchar_t buf[1024]; - - va_start(vl, fmt); - StringCbVPrintf(buf, sizeof(buf), fmt, vl); - OutputDebugString(buf); - va_end(vl); -} -#endif - -KHMEXP void KHMAPI -kherr_add_ctx_handler(kherr_ctx_handler h, - khm_int32 filter, - kherr_serial serial) -{ - khm_size idx; - - assert(h); - - EnterCriticalSection(&cs_error); - if( ctx_handlers == NULL) { - nc_ctx_handlers = CTX_ALLOC_INCR; - n_ctx_handlers = 0; - ctx_handlers = PMALLOC(sizeof(*ctx_handlers) * nc_ctx_handlers); - /* No need to initialize */ - } else if (n_ctx_handlers == nc_ctx_handlers) { - khm_size new_nc; - kherr_handler_node * new_ctxs; - - new_nc = nc_ctx_handlers + CTX_ALLOC_INCR; - new_ctxs = PMALLOC(sizeof(*new_ctxs) * new_nc); - memcpy(new_ctxs, ctx_handlers, n_ctx_handlers * sizeof(*new_ctxs)); - - PFREE(ctx_handlers); - ctx_handlers = new_ctxs; - nc_ctx_handlers = new_nc; - } - - if (filter == 0) - filter = KHERR_CTX_BEGIN | - KHERR_CTX_DESCRIBE | - KHERR_CTX_END | - KHERR_CTX_ERROR | - KHERR_CTX_NEWCHILD | - KHERR_CTX_FOLDCHILD; - - /* Since commit events are the most frequent, we put those - handlers at the top of the list. When dispatching a commit - event, we stop looking at the list when we find a filter that - doesn't filter for commit events. */ - if (filter & KHERR_CTX_EVTCOMMIT) { - idx = 0; - memmove(&ctx_handlers[1], &ctx_handlers[0], - n_ctx_handlers * sizeof(ctx_handlers[0])); - } else { - idx = n_ctx_handlers; - } - - ctx_handlers[idx].h = h; - ctx_handlers[idx].filter = filter; - ctx_handlers[idx].serial = serial; - - n_ctx_handlers++; - - LeaveCriticalSection(&cs_error); -} - -KHMEXP void KHMAPI -kherr_remove_ctx_handler(kherr_ctx_handler h, - kherr_serial serial) -{ - khm_size i; - EnterCriticalSection(&cs_error); - - for (i=0 ; i < n_ctx_handlers; i++) { - if (ctx_handlers[i].h == h && - ctx_handlers[i].serial == serial) { - break; - } - } - - if ( i < n_ctx_handlers ) { - n_ctx_handlers --; - for (; i < n_ctx_handlers; i++) { - ctx_handlers[i] = ctx_handlers[i + 1]; - } - } - - LeaveCriticalSection(&cs_error); -} - -/* Called with cs_error held */ -static void -notify_ctx_event(enum kherr_ctx_event e, kherr_context * c) -{ - khm_size i; - - kherr_ctx_handler h; - - for (i=0; i<n_ctx_handlers; i++) { - if (ctx_handlers[i].h && (ctx_handlers[i].filter & e) && - (ctx_handlers[i].serial == 0 || - ctx_handlers[i].serial == c->serial)) { - if (IsBadCodePtr((FARPROC) ctx_handlers[i].h)) { - ctx_handlers[i].h = NULL; - } else { - h = ctx_handlers[i].h; - (*h)(e,c); - - /* a context handler is allowed to remove itself - during a callback. It is, however, not allowed to - remove anything else. */ - if (h != ctx_handlers[i].h) - i--; - } - } else if (e == KHERR_CTX_EVTCOMMIT && - !(ctx_handlers[i].filter & KHERR_CTX_EVTCOMMIT)) { - /* All handlers that filter for commit events are at the - top of the list. If this handler wasn't filtering for - it, then there's no point in goint further down the - list. */ - break; - } - } -} - -void -attach_this_thread(void) -{ - kherr_thread * t; - - t = (kherr_thread *) TlsGetValue(tls_error); - if (t) - return; - - t = PMALLOC(sizeof(kherr_thread) + - sizeof(kherr_context *) * THREAD_STACK_SIZE); - t->nc_ctx = THREAD_STACK_SIZE; - t->n_ctx = 0; - t->ctx = (kherr_context **) &t[1]; - - TlsSetValue(tls_error, t); -} - -void -detach_this_thread(void) -{ - kherr_thread * t; - khm_size i; - - t = (kherr_thread *) TlsGetValue(tls_error); - if (t) { - for(i=0; i < t->n_ctx; i++) { - kherr_release_context(t->ctx[i]); - } - PFREE(t); - TlsSetValue(tls_error, 0); - } -} - -static kherr_context * -peek_context(void) -{ - kherr_thread * t; - - t = (kherr_thread *) TlsGetValue(tls_error); - if (t) { - if (t->n_ctx > 0) { - kherr_context * c; - - c = t->ctx[t->n_ctx - 1]; - - assert(c == NULL || IS_KHERR_CTX(c)); - - return c; - } else { - return NULL; - } - } else - return NULL; -} - -static void -push_context(kherr_context * c) -{ - kherr_thread * t; - - t = (kherr_thread *) TlsGetValue(tls_error); - if (!t) { - attach_this_thread(); - t = (kherr_thread *) TlsGetValue(tls_error); - assert(t); - } - - if (t->n_ctx == t->nc_ctx) { - khm_size nc_new; - khm_size cb_new; - kherr_thread * nt; - - nc_new = t->nc_ctx + THREAD_STACK_SIZE; - cb_new = sizeof(kherr_thread) + - sizeof(kherr_context *) * nc_new; - - nt = PMALLOC(cb_new); - memcpy(nt, t, sizeof(kherr_thread) + - sizeof(kherr_context *) * t->n_ctx); - nt->ctx = (kherr_context **) &nt[1]; - nt->nc_ctx = nc_new; - - PFREE(t); - t = nt; - TlsSetValue(tls_error, t); - } - - assert(t->n_ctx < t->nc_ctx); - t->ctx[t->n_ctx++] = c; - - kherr_hold_context(c); -} - -/* returned pointer is still held */ -static kherr_context * -pop_context(void) -{ - kherr_thread * t; - kherr_context * c; - - t = (kherr_thread *) TlsGetValue(tls_error); - if (t) { - if (t->n_ctx > 0) { - c = t->ctx[--(t->n_ctx)]; - assert(IS_KHERR_CTX(c)); - return c; - } else - return NULL; - } else { - return NULL; - } -} - -static kherr_event * -get_empty_event(void) -{ - kherr_event * e; - - EnterCriticalSection(&cs_error); - if(evt_free_list) { - LPOP(&evt_free_list, &e); - } else { - e = PMALLOC(sizeof(*e)); - } - LeaveCriticalSection(&cs_error); - ZeroMemory(e, sizeof(*e)); - e->severity = KHERR_NONE; - e->magic = KHERR_EVENT_MAGIC; - - return e; -} - -static void -free_event_params(kherr_event * e) -{ - assert(IS_KHERR_EVENT(e)); - - if(parm_type(e->p1) == KEPT_STRINGT) { - assert((void *) parm_data(e->p1)); - PFREE((void*) parm_data(e->p1)); - } - ZeroMemory(&e->p1, sizeof(e->p1)); - - if(parm_type(e->p2) == KEPT_STRINGT) { - assert((void *) parm_data(e->p2)); - PFREE((void*) parm_data(e->p2)); - } - ZeroMemory(&e->p2, sizeof(e->p2)); - - if(parm_type(e->p3) == KEPT_STRINGT) { - assert((void *) parm_data(e->p3)); - PFREE((void*) parm_data(e->p3)); - } - ZeroMemory(&e->p3, sizeof(e->p3)); - - if(parm_type(e->p4) == KEPT_STRINGT) { - assert((void *) parm_data(e->p4)); - PFREE((void*) parm_data(e->p4)); - } - ZeroMemory(&e->p4, sizeof(e->p4)); -} - -static void -free_event(kherr_event * e) -{ - EnterCriticalSection(&cs_error); - - assert(IS_KHERR_EVENT(e)); -#ifdef DEBUG - assert(LNEXT(e) == NULL); - assert(LPREV(e) == NULL); -#endif - -#ifdef DEBUG_CONTEXT - if (!(e->flags & KHERR_RF_STR_RESOLVED)) - resolve_event_strings(e); - - if (e->short_desc && e->long_desc) { - kherr_debug_printf(L"E:%s (%s)\n", e->short_desc, e->long_desc); - } else if (e->short_desc) { - kherr_debug_printf(L"E:%s\n", e->short_desc); - } else if (e->long_desc) { - kherr_debug_printf(L"E:%s\n", e->long_desc); - } else { - kherr_debug_printf(L"E:[No description for event 0x%p]\n", e); - } - - if (e->suggestion) - kherr_debug_printf(L" Suggest:[%s]\n", e->suggestion); - if (e->facility) - kherr_debug_printf(L" Facility:[%s]\n", e->facility); -#endif - - if(e->flags & KHERR_RF_FREE_SHORT_DESC) { - assert(e->short_desc); - PFREE((void *) e->short_desc); - } - if(e->flags & KHERR_RF_FREE_LONG_DESC) { - assert(e->long_desc); - PFREE((void *) e->long_desc); - } - if(e->flags & KHERR_RF_FREE_SUGGEST) { - assert(e->suggestion); - PFREE((void *) e->suggestion); - } - - free_event_params(e); - - ZeroMemory(e, sizeof(e)); - - LPUSH(&evt_free_list, e); - LeaveCriticalSection(&cs_error); -} - -static kherr_context * -get_empty_context(void) -{ - kherr_context * c; - - EnterCriticalSection(&cs_error); - if(ctx_free_list) - LPOP(&ctx_free_list, &c); - else { - c = PMALLOC(sizeof(kherr_context)); - } - - ZeroMemory(c,sizeof(*c)); - c->severity = KHERR_NONE; - c->flags = KHERR_CF_UNBOUND; - c->magic = KHERR_CONTEXT_MAGIC; - c->serial = ++ctx_serial; - - LPUSH(&ctx_root_list, c); - - LeaveCriticalSection(&cs_error); - - return c; -} - - -/* Assumes that the context has been deleted from all relevant - lists */ -static void -free_context(kherr_context * c) -{ - kherr_context * ch; - kherr_event * e; - - assert(IS_KHERR_CTX(c)); - -#ifdef DEBUG_CONTEXT - kherr_debug_printf(L"Freeing context 0x%x\n", c); -#endif - - EnterCriticalSection(&cs_error); - - if (c->desc_event) - free_event(c->desc_event); - c->desc_event = NULL; - - TPOPCHILD(c, &ch); - while(ch) { - free_context(ch); - TPOPCHILD(c, &ch); - } - QGET(c, &e); - while(e) { - free_event(e); - QGET(c, &e); - } - - c->serial = 0; - - LPUSH(&ctx_free_list,c); - LeaveCriticalSection(&cs_error); - -#ifdef DEBUG_CONTEXT - kherr_debug_printf(L"Done with context 0x%x\n", c); -#endif -} - -static void -add_event(kherr_context * c, kherr_event * e) -{ - kherr_event * te; - - assert(IS_KHERR_CTX(c)); - assert(IS_KHERR_EVENT(e)); -#ifdef DEBUG - assert(LPREV(e) == NULL && LNEXT(e) == NULL); -#endif - - EnterCriticalSection(&cs_error); - te = QBOTTOM(c); - if (te && !(te->flags & KHERR_RF_COMMIT)) { - notify_ctx_event(KHERR_CTX_EVTCOMMIT, c); - te->flags |= KHERR_RF_COMMIT; - } - - QPUT(c,e); - if(c->severity > e->severity) { - if (e->severity <= KHERR_ERROR) - notify_ctx_event(KHERR_CTX_ERROR, c); - - c->severity = e->severity; - c->err_event = e; - c->flags &= ~KHERR_CF_DIRTY; - } - LeaveCriticalSection(&cs_error); -} - -static void -pick_err_event(kherr_context * c) -{ - kherr_event * e; - kherr_event * ce = NULL; - enum kherr_severity s; - - s = KHERR_RESERVED_BANK; - - EnterCriticalSection(&cs_error); - e = QTOP(c); - while(e) { - if(!(e->flags & KHERR_RF_INERT) && - s >= e->severity) { - ce = e; - s = e->severity; - } - e = QNEXT(e); - } - - if(ce) { - c->err_event = ce; - c->severity = ce->severity; - } else { - c->err_event = NULL; - c->severity = KHERR_NONE; - } - - c->flags &= ~KHERR_CF_DIRTY; - LeaveCriticalSection(&cs_error); -} - -static void -va_arg_from_param(va_list * parm, kherr_param p) -{ - int t = parm_type(p); - - khm_int32 * pi; - wchar_t ** ps; - void ** pptr; - khm_int64 * pli; - - if (t != KEPT_NONE) { - switch (t) { - case KEPT_INT32: - case KEPT_UINT32: - pi = (khm_int32 *)(*parm); - va_arg(*parm, khm_int32); - *pi = (khm_int32) parm_data(p); - break; - - case KEPT_STRINGC: - case KEPT_STRINGT: - ps = (wchar_t **) (*parm); - va_arg(*parm, wchar_t *); - *ps = (wchar_t *) parm_data(p); - break; - - case KEPT_PTR: - pptr = (void **) (*parm); - va_arg(*parm, void *); - *pptr = (void *) parm_data(p); - break; - - case KEPT_INT64: - case KEPT_UINT64: - pli = (khm_int64 *) (*parm); - va_arg(*parm, khm_int64); - *pli = (khm_int64) parm_data(p); - break; - -#ifdef DEBUG - default: - assert(FALSE); -#endif - } - } -} - -static void -va_args_from_event(va_list args, kherr_event * e, khm_size cb) -{ - ZeroMemory(args, cb); - - va_arg_from_param(&args, e->p1); - va_arg_from_param(&args, e->p2); - va_arg_from_param(&args, e->p3); - va_arg_from_param(&args, e->p4); -} - -static void -resolve_string_resource(kherr_event * e, - const wchar_t ** str, - va_list vl, - khm_int32 if_flag, - khm_int32 or_flag) -{ - wchar_t tfmt[KHERR_MAXCCH_STRING]; - wchar_t tbuf[KHERR_MAXCCH_STRING]; - size_t chars = 0; - size_t bytes = 0; - - if(e->flags & if_flag) { - if(e->h_module != NULL) - chars = LoadString(e->h_module, (UINT)(INT_PTR) *str, - tfmt, ARRAYLENGTH(tbuf)); - if(e->h_module == NULL || chars == 0) - *str = NULL; - else { - wchar_t * s; - - chars = FormatMessage(FORMAT_MESSAGE_FROM_STRING, tfmt, - 0, 0, tbuf, ARRAYLENGTH(tbuf), &vl); - - if (chars == 0) { - *str = NULL; - } else { - bytes = (chars + 1) * sizeof(wchar_t); - s = PMALLOC(bytes); - assert(s); - StringCbCopy(s, bytes, tbuf); - *str = s; - e->flags |= or_flag; - } - } - e->flags &= ~if_flag; - } -} - -static void -resolve_msg_resource(kherr_event * e, - const wchar_t ** str, - va_list vl, - khm_int32 if_flag, - khm_int32 or_flag) -{ - wchar_t tbuf[KHERR_MAXCCH_STRING]; - size_t chars = 0; - size_t bytes = 0; - - if(e->flags & if_flag) { - if(e->h_module != NULL) { - - chars = FormatMessage(FORMAT_MESSAGE_FROM_HMODULE, - (LPCVOID) e->h_module, - (DWORD)(DWORD_PTR) *str, - 0, - tbuf, - ARRAYLENGTH(tbuf), - &vl); - } - - if(e->h_module == NULL || chars == 0) { - *str = NULL; - } else { - wchar_t * s; - - /* MC inserts trailing \r\n to each message unless the - message is terminated with a %0. We remove the last - line break since it is irrelevant to our handling of - the string in the UI. */ - if (tbuf[chars-1] == L'\n') - tbuf[--chars] = L'\0'; - if (tbuf[chars-1] == L'\r') - tbuf[--chars] = L'\0'; - - bytes = (chars + 1) * sizeof(wchar_t); - s = PMALLOC(bytes); - assert(s); - StringCbCopy(s, bytes, tbuf); - *str = s; - e->flags |= or_flag; - } - e->flags &= ~if_flag; - } -} - -static void -resolve_string(kherr_event * e, - const wchar_t ** str, - va_list vl, - khm_int32 mask, - khm_int32 free_if, - khm_int32 or_flag) -{ - wchar_t tbuf[KHERR_MAXCCH_STRING]; - size_t chars; - size_t bytes; - - if (((e->flags & mask) == 0 || - (e->flags & mask) == free_if) && - *str != NULL) { - - chars = FormatMessage(FORMAT_MESSAGE_FROM_STRING, - (LPCVOID) *str, - 0, - 0, - tbuf, - ARRAYLENGTH(tbuf), - &vl); - - if ((e->flags & mask) == free_if) { - PFREE((void *) *str); - } - - e->flags &= ~mask; - - if (chars == 0) { - *str = 0; - } else { - wchar_t * s; - - bytes = (chars + 1) * sizeof(wchar_t); - s = PMALLOC(bytes); - assert(s); - StringCbCopy(s, bytes, tbuf); - *str = s; - e->flags |= or_flag; - } - } - -} - -void -resolve_event_strings(kherr_event * e) -{ - DWORD_PTR args[8]; - va_list vl = (va_list) args; - - va_args_from_event(vl, e, sizeof(args)); - - resolve_string(e, &e->short_desc, vl, - KHERR_RFMASK_SHORT_DESC, - KHERR_RF_FREE_SHORT_DESC, - KHERR_RF_FREE_SHORT_DESC); - - resolve_string(e, &e->long_desc, vl, - KHERR_RFMASK_LONG_DESC, - KHERR_RF_FREE_LONG_DESC, - KHERR_RF_FREE_LONG_DESC); - - resolve_string(e, &e->suggestion, vl, - KHERR_RFMASK_SUGGEST, - KHERR_RF_FREE_SUGGEST, - KHERR_RF_FREE_SUGGEST); - - resolve_string_resource(e, &e->short_desc, vl, - KHERR_RF_RES_SHORT_DESC, - KHERR_RF_FREE_SHORT_DESC); - - resolve_string_resource(e, &e->long_desc, vl, - KHERR_RF_RES_LONG_DESC, - KHERR_RF_FREE_LONG_DESC); - - resolve_string_resource(e, &e->suggestion, vl, - KHERR_RF_RES_SUGGEST, - KHERR_RF_FREE_SUGGEST); - - resolve_msg_resource(e, &e->short_desc, vl, - KHERR_RF_MSG_SHORT_DESC, - KHERR_RF_FREE_SHORT_DESC); - resolve_msg_resource(e, &e->long_desc, vl, - KHERR_RF_MSG_LONG_DESC, - KHERR_RF_FREE_LONG_DESC); - resolve_msg_resource(e, &e->suggestion, vl, - KHERR_RF_MSG_SUGGEST, - KHERR_RF_FREE_SUGGEST); - - /* get rid of dangling reference now that we have done everything - we can with it. Since we have already dealt with all the - parameter inserts, we don't need the parameters anymore - either. */ - free_event_params(e); - - e->h_module = NULL; - e->flags |= KHERR_RF_STR_RESOLVED; -} - - -KHMEXP void KHMAPI -kherr_evaluate_event(kherr_event * e) -{ - if (!IS_KHERR_EVENT(e)) - return; - - EnterCriticalSection(&cs_error); - resolve_event_strings(e); - LeaveCriticalSection(&cs_error); -} - -KHMEXP void KHMAPI -kherr_evaluate_last_event(void) -{ - kherr_context * c; - kherr_event * e; - DWORD tid; - - c = peek_context(); - if(!IS_KHERR_CTX(c)) - return; - tid = GetCurrentThreadId(); - - EnterCriticalSection(&cs_error); - e = QBOTTOM(c); - while (e != NULL && e->thread_id != tid) - e = QPREV(e); - - if(!IS_KHERR_EVENT(e)) - goto _exit; - - resolve_event_strings(e); - - _exit: - LeaveCriticalSection(&cs_error); -} - -KHMEXP kherr_event * __cdecl -kherr_reportf(const wchar_t * long_desc_fmt, ...) -{ - va_list vl; - wchar_t buf[1024]; - kherr_event * e; - - va_start(vl, long_desc_fmt); - StringCbVPrintf(buf, sizeof(buf), long_desc_fmt, vl); -#ifdef DEBUG - OutputDebugString(buf); -#endif - va_end(vl); - - e = kherr_report(KHERR_DEBUG_1, - NULL, NULL, NULL, buf, NULL, 0, - KHERR_SUGGEST_NONE, _vnull(), _vnull(), _vnull(), _vnull(), - KHERR_RF_CSTR_LONG_DESC -#ifdef _WIN32 - ,NULL -#endif - ); - if (IS_KHERR_EVENT(e)) { - kherr_evaluate_event(e); - } - - return e; -} - -KHMEXP kherr_event * __cdecl -kherr_reportf_ex(enum kherr_severity severity, - const wchar_t * facility, - khm_int32 facility_id, -#ifdef _WIN32 - HMODULE hModule, -#endif - const wchar_t * long_desc_fmt, ...) -{ - va_list vl; - wchar_t buf[1024]; - kherr_event * e; - - va_start(vl, long_desc_fmt); - StringCbVPrintf(buf, sizeof(buf), long_desc_fmt, vl); -#ifdef DEBUG - OutputDebugString(buf); -#endif - va_end(vl); - - e = kherr_report(severity, NULL, facility, NULL, buf, NULL, facility_id, - KHERR_SUGGEST_NONE, - _vnull(), - _vnull(), - _vnull(), - _vnull(), KHERR_RF_CSTR_LONG_DESC -#ifdef _WIN32 - ,hModule -#endif - ); - if (IS_KHERR_EVENT(e)) { - kherr_evaluate_event(e); - } - - return e; -} - -KHMEXP kherr_event * KHMAPI -kherr_report(enum kherr_severity severity, - const wchar_t * short_desc, - const wchar_t * facility, - const wchar_t * location, - const wchar_t * long_desc, - const wchar_t * suggestion, - khm_int32 facility_id, - enum kherr_suggestion suggestion_id, - kherr_param p1, - kherr_param p2, - kherr_param p3, - kherr_param p4, - khm_int32 flags -#ifdef _WIN32 - ,HMODULE h_module -#endif - ) -{ - kherr_context * c; - kherr_event * e; - khm_boolean invalid = FALSE; - - /* sanity check */ - if (!IS_POW2(flags & KHERR_RFMASK_SHORT_DESC) || - !IS_POW2(flags & KHERR_RFMASK_LONG_DESC) || - !IS_POW2(flags & KHERR_RFMASK_SUGGEST)) - invalid = TRUE; - - e = get_empty_event(); - - e->thread_id = GetCurrentThreadId(); - e->time_ticks = GetTickCount(); - GetSystemTimeAsFileTime(&e->time_ft); - - e->severity = severity; - e->short_desc = short_desc; - e->facility = facility; - e->location = location; - e->long_desc = long_desc; - e->suggestion = suggestion; - e->facility_id = facility_id; - e->suggestion_id = suggestion_id; - e->p1 = p1; - e->p2 = p2; - e->p3 = p3; - e->p4 = p4; - e->flags = flags; -#ifdef _WIN32 - e->h_module = h_module; -#endif - - EnterCriticalSection(&cs_error); - c = peek_context(); - - if(!c || invalid) { - /* the reason why we are doing it this way is because p1..p4, - the descriptions and the suggestion may contain allocations - that has to be freed. */ - free_event(e); - e = NULL; - } else { - add_event(c,e); - } - - LeaveCriticalSection(&cs_error); - - return e; -} - -KHMEXP void KHMAPI -kherr_suggest(wchar_t * suggestion, - enum kherr_suggestion suggestion_id, - khm_int32 flags) -{ - kherr_context * c; - kherr_event * e; - DWORD tid; - - if (flags != KHERR_RF_CSTR_SUGGEST && - flags != KHERR_RF_RES_SUGGEST && - flags != KHERR_RF_MSG_SUGGEST && - flags != KHERR_RF_FREE_SUGGEST) - return; - - c = peek_context(); - if(!IS_KHERR_CTX(c)) - return; - - tid = GetCurrentThreadId(); - - EnterCriticalSection(&cs_error); - e = QBOTTOM(c); - while (e != NULL && e->thread_id != tid) - e = QPREV(e); - - if(!IS_KHERR_EVENT(e)) - goto _exit; - - /* if strings have already been resolved in this event, we cant - add any more unresolved strings. */ - if ((flags == KHERR_RF_RES_SUGGEST || - flags == KHERR_RF_MSG_SUGGEST) && - (e->flags & KHERR_RF_STR_RESOLVED)) - goto _exit; - - e->suggestion = suggestion; - e->suggestion_id = suggestion_id; - e->flags |= flags; -_exit: - LeaveCriticalSection(&cs_error); -} - -KHMEXP void KHMAPI -kherr_location(wchar_t * location) -{ - kherr_context * c; - kherr_event * e; - DWORD tid; - - c = peek_context(); - if(!IS_KHERR_CTX(c)) - return; - tid = GetCurrentThreadId(); - - EnterCriticalSection(&cs_error); - e = QBOTTOM(c); - while (e != NULL && e->thread_id != tid) - e = QPREV(e); - - if(!IS_KHERR_EVENT(e)) - goto _exit; - e->location = location; -_exit: - LeaveCriticalSection(&cs_error); -} - -KHMEXP void KHMAPI -kherr_facility(wchar_t * facility, - khm_int32 facility_id) -{ - kherr_context * c; - kherr_event * e; - DWORD tid; - - c = peek_context(); - if(!IS_KHERR_CTX(c)) - return; - tid = GetCurrentThreadId(); - EnterCriticalSection(&cs_error); - e = QBOTTOM(c); - while (e != NULL && e->thread_id != tid) - e = QPREV(e); - - if(!IS_KHERR_EVENT(e)) - goto _exit; - e->facility = facility; - e->facility_id = facility_id; -_exit: - LeaveCriticalSection(&cs_error); -} - -KHMEXP void KHMAPI -kherr_set_desc_event(void) -{ - kherr_context * c; - kherr_event * e; - DWORD tid; - - c = peek_context(); - if(!IS_KHERR_CTX(c)) - return; - tid = GetCurrentThreadId(); - - EnterCriticalSection(&cs_error); - e = QBOTTOM(c); - while (e != NULL && e->thread_id != tid) - e = QPREV(e); - - if(!IS_KHERR_EVENT(e) || c->desc_event) - goto _exit; - - QDEL(c,e); - c->desc_event = e; - e->severity = KHERR_NONE; - resolve_event_strings(e); - - notify_ctx_event(KHERR_CTX_DESCRIBE, c); - -_exit: - LeaveCriticalSection(&cs_error); -} - -KHMEXP void KHMAPI -kherr_del_last_event(void) -{ - kherr_context * c; - kherr_event * e; - DWORD tid; - - c = peek_context(); - - if(!IS_KHERR_CTX(c)) - return; - - tid = GetCurrentThreadId(); - - EnterCriticalSection(&cs_error); - e = QBOTTOM(c); - while (e != NULL && e->thread_id != tid) - e = QPREV(e); - - if(IS_KHERR_EVENT(e)) { - QDEL(c, e); - if(c->err_event == e) { - pick_err_event(c); - } - free_event(e); - } - LeaveCriticalSection(&cs_error); -} - -KHMEXP void KHMAPI -kherr_push_context(kherr_context * c) -{ - kherr_context * p = NULL; - int new_context = FALSE; - - if (!IS_KHERR_CTX(c)) - return; - - EnterCriticalSection(&cs_error); - p = peek_context(); - if(IS_KHERR_CTX(p) && (c->flags & KHERR_CF_UNBOUND)) { - LDELETE(&ctx_root_list, c); - TADDCHILD(p,c); - c->flags &= ~KHERR_CF_UNBOUND; - kherr_hold_context(p); - new_context = TRUE; - } - push_context(c); - - if (new_context && IS_KHERR_CTX(p)) { - notify_ctx_event(KHERR_CTX_BEGIN, c); - notify_ctx_event(KHERR_CTX_NEWCHILD, p); - } - - LeaveCriticalSection(&cs_error); -} - -KHMEXP void KHMAPI -kherr_push_new_context(khm_int32 flags) -{ - kherr_context * p = NULL; - kherr_context * c; - - flags &= KHERR_CFMASK_INITIAL; - - EnterCriticalSection(&cs_error); - p = peek_context(); - c = get_empty_context(); - if(IS_KHERR_CTX(p)) { - LDELETE(&ctx_root_list, c); - TADDCHILD(p,c); - c->flags &= ~KHERR_CF_UNBOUND; - kherr_hold_context(p); - } - c->flags |= flags; - push_context(c); - - notify_ctx_event(KHERR_CTX_BEGIN, c); - if (IS_KHERR_CTX(p)) { - notify_ctx_event(KHERR_CTX_NEWCHILD, p); - } - - LeaveCriticalSection(&cs_error); -} - -static kherr_param -dup_parm(kherr_param p) -{ - if(parm_type(p) == KEPT_STRINGT) { - wchar_t * d = PWCSDUP((wchar_t *)parm_data(p)); - return kherr_val(KEPT_STRINGT, (khm_ui_8) d); - } else - return p; -} - -static kherr_event * -fold_context(kherr_context * c) -{ - kherr_event * e; - kherr_event * g; - - if (!IS_KHERR_CTX(c)) - return NULL; - - EnterCriticalSection(&cs_error); - if(!c->err_event || (c->flags & KHERR_CF_DIRTY)) { - pick_err_event(c); - } - if(c->err_event) { - g = c->err_event; - e = get_empty_event(); - *e = *g; - g->short_desc = NULL; - g->long_desc = NULL; - g->suggestion = NULL; - g->flags &= - ~(KHERR_RF_FREE_SHORT_DESC | - KHERR_RF_FREE_LONG_DESC | - KHERR_RF_FREE_SUGGEST); - LINIT(e); - e->p1 = dup_parm(g->p1); - e->p2 = dup_parm(g->p2); - e->p3 = dup_parm(g->p3); - e->p4 = dup_parm(g->p4); - } else { - e = c->desc_event; - c->desc_event = NULL; - } - - if (IS_KHERR_EVENT(e)) - e->flags |= KHERR_RF_CONTEXT_FOLD; - - LeaveCriticalSection(&cs_error); - - return e; -} - -KHMEXP void KHMAPI -kherr_hold_context(kherr_context * c) -{ - if(!IS_KHERR_CTX(c)) - return; - - EnterCriticalSection(&cs_error); - c->refcount++; - LeaveCriticalSection(&cs_error); -} - -KHMEXP void KHMAPI -kherr_release_context(kherr_context * c) -{ - if (!IS_KHERR_CTX(c)) - return; - - EnterCriticalSection(&cs_error); - c->refcount--; - if (c->refcount == 0) { - kherr_event * e; - kherr_context * p; - - e = QBOTTOM(c); - if (IS_KHERR_EVENT(e) && !(e->flags & KHERR_RF_COMMIT)) { - notify_ctx_event(KHERR_CTX_EVTCOMMIT, c); - e->flags |= KHERR_RF_COMMIT; - } - - notify_ctx_event(KHERR_CTX_END, c); - - p = TPARENT(c); - if (IS_KHERR_CTX(p)) { - e = fold_context(c); - if (e) - add_event(p, e); - - TDELCHILD(p, c); - - notify_ctx_event(KHERR_CTX_FOLDCHILD, p); - - kherr_release_context(p); - } else { - LDELETE(&ctx_root_list, c); - } - free_context(c); - } - LeaveCriticalSection(&cs_error); -} - -KHMEXP void KHMAPI -kherr_pop_context(void) -{ - kherr_context * c; - - EnterCriticalSection(&cs_error); - c = pop_context(); - if(IS_KHERR_CTX(c)) { - kherr_release_context(c); - } - LeaveCriticalSection(&cs_error); -} - -KHMEXP kherr_context * KHMAPI -kherr_peek_context(void) -{ - kherr_context * c; - - c = peek_context(); - if (IS_KHERR_CTX(c)) - kherr_hold_context(c); - - return c; -} - -KHMEXP khm_boolean KHMAPI -kherr_is_error(void) -{ - kherr_context * c = peek_context(); - return kherr_is_error_i(c); -} - -KHMEXP khm_boolean KHMAPI -kherr_is_error_i(kherr_context * c) -{ - if(IS_KHERR_CTX(c) && c->severity <= KHERR_ERROR) - return TRUE; - else - return FALSE; -} - -KHMEXP void KHMAPI -kherr_clear_error(void) -{ - kherr_context * c = peek_context(); - if (IS_KHERR_CTX(c)) - kherr_clear_error_i(c); -} - -KHMEXP void KHMAPI -kherr_clear_error_i(kherr_context * c) -{ - kherr_event * e; - if (IS_KHERR_CTX(c)) { - EnterCriticalSection(&cs_error); - e = QTOP(c); - while(e) { - assert(IS_KHERR_EVENT(e)); - - e->flags |= KHERR_RF_INERT; - e = QNEXT(e); - } - c->severity = KHERR_NONE; - c->err_event = NULL; - c->flags &= ~KHERR_CF_DIRTY; - LeaveCriticalSection(&cs_error); - } -} - -/* does the context 'c' use it's own progress marker? If this is - false, the progress marker for the context is derived from the - progress markers of its children. */ -#define CTX_USES_OWN_PROGRESS(c) ((c)->progress_num != 0 || (c)->progress_denom != 0 || ((c)->flags & KHERR_CF_OWN_PROGRESS)) - -KHMEXP void KHMAPI -kherr_set_progress(khm_ui_4 num, khm_ui_4 denom) -{ - kherr_context * c = peek_context(); - if(IS_KHERR_CTX(c)) { - EnterCriticalSection(&cs_error); - - if (num > denom) - num = denom; - - if (c->progress_denom != denom || - c->progress_num != denom) { - - kherr_context * p; - - c->progress_denom = denom; - c->progress_num = num; - - notify_ctx_event(KHERR_CTX_PROGRESS, c); - - for (p = TPARENT(c); - IS_KHERR_CTX(p) && !CTX_USES_OWN_PROGRESS(p); - p = TPARENT(p)) { - - notify_ctx_event(KHERR_CTX_PROGRESS, p); - - } - } - LeaveCriticalSection(&cs_error); - } -} - -KHMEXP void KHMAPI -kherr_get_progress(khm_ui_4 * num, khm_ui_4 * denom) -{ - kherr_context * c = peek_context(); - kherr_get_progress_i(c,num,denom); -} - -/* called with cs_error held */ -static void -get_progress(kherr_context * c, khm_ui_4 * pnum, khm_ui_4 * pdenom) -{ - if (CTX_USES_OWN_PROGRESS(c)) { - *pnum = c->progress_num; - *pdenom = c->progress_denom; - } else { - khm_ui_4 num = 0; - khm_ui_4 denom = 0; - - kherr_context * cc; - - for (cc = TFIRSTCHILD(c); - cc; - cc = LNEXT(cc)) { - - khm_ui_4 cnum, cdenom; - - assert(IS_KHERR_CTX(cc)); - - get_progress(cc, &cnum, &cdenom); - - if (cdenom == 0) { - cnum = 0; - } else { - if (cnum > cdenom) - cnum = cdenom; - - if (cdenom != 256) { - cnum = (cnum * 256) / cdenom; - cdenom = 256; - } - } - - num += cnum; - denom += cdenom; - } - - *pnum = num; - *pdenom = denom; - } -} - -KHMEXP void KHMAPI -kherr_get_progress_i(kherr_context * c, - khm_ui_4 * num, - khm_ui_4 * denom) -{ - if (num == NULL || denom == NULL) - return; - - if(IS_KHERR_CTX(c)) { - EnterCriticalSection(&cs_error); - get_progress(c, num, denom); - LeaveCriticalSection(&cs_error); - } else { - *num = 0; - *denom = 0; - } -} - -KHMEXP kherr_event * KHMAPI -kherr_get_first_event(kherr_context * c) -{ - kherr_event * e; - - if (!IS_KHERR_CTX(c)) - return NULL; - - EnterCriticalSection(&cs_error); - e = QTOP(c); - LeaveCriticalSection(&cs_error); - assert(e == NULL || IS_KHERR_EVENT(e)); - return e; -} - -KHMEXP kherr_event * KHMAPI -kherr_get_next_event(kherr_event * e) -{ - kherr_event * ee; - - if (!IS_KHERR_EVENT(e)) - return NULL; - - EnterCriticalSection(&cs_error); - ee = QNEXT(e); - LeaveCriticalSection(&cs_error); - assert(ee == NULL || IS_KHERR_EVENT(ee)); - return ee; -} - -KHMEXP kherr_event * KHMAPI -kherr_get_prev_event(kherr_event * e) -{ - kherr_event * ee; - - if (!IS_KHERR_EVENT(e)) - return NULL; - - EnterCriticalSection(&cs_error); - ee = QPREV(e); - LeaveCriticalSection(&cs_error); - assert(ee == NULL || IS_KHERR_EVENT(ee)); - return ee; -} - -KHMEXP kherr_event * KHMAPI -kherr_get_last_event(kherr_context * c) -{ - kherr_event * e; - - if (!IS_KHERR_CTX(c)) - return NULL; - - EnterCriticalSection(&cs_error); - e = QBOTTOM(c); - LeaveCriticalSection(&cs_error); - assert(e == NULL || IS_KHERR_EVENT(e)); - return e; -} - -KHMEXP kherr_context * KHMAPI -kherr_get_first_context(kherr_context * c) -{ - kherr_context * cc; - - if (c != NULL && !IS_KHERR_CTX(c)) - return NULL; - - EnterCriticalSection(&cs_error); - if (IS_KHERR_CTX(c)) { - cc = TFIRSTCHILD(c); - if (cc) - kherr_hold_context(cc); - } else { - cc = ctx_root_list; - if (cc) - kherr_hold_context(cc); - } - LeaveCriticalSection(&cs_error); - assert(cc == NULL || IS_KHERR_CTX(cc)); - return cc; -} - -KHMEXP kherr_context * KHMAPI -kherr_get_next_context(kherr_context * c) -{ - kherr_context * cc; - - if (!IS_KHERR_CTX(c)) - return NULL; - - EnterCriticalSection(&cs_error); - cc = LNEXT(c); - if (cc) - kherr_hold_context(cc); - LeaveCriticalSection(&cs_error); - assert(cc == NULL || IS_KHERR_CTX(cc)); - return cc; -} - -KHMEXP kherr_event * KHMAPI -kherr_get_err_event(kherr_context * c) -{ - kherr_event * e; - - if (!IS_KHERR_CTX(c)) - return NULL; - - EnterCriticalSection(&cs_error); - if(!c->err_event) { - pick_err_event(c); - } - e = c->err_event; - LeaveCriticalSection(&cs_error); - assert(e == NULL || IS_KHERR_EVENT(e)); - return e; -} - -KHMEXP kherr_event * KHMAPI -kherr_get_desc_event(kherr_context * c) -{ - kherr_event * e; - - if (!IS_KHERR_CTX(c)) - return NULL; - - EnterCriticalSection(&cs_error); - e = c->desc_event; - LeaveCriticalSection(&cs_error); - assert(e == NULL || IS_KHERR_EVENT(e)); - return e; -} - -KHMEXP kherr_param -kherr_dup_string(const wchar_t * s) -{ - wchar_t * dest; - size_t cb_s; - - if (s == NULL) - return _vnull(); - - if (FAILED(StringCbLength(s, KHERR_MAXCB_STRING, &cb_s))) - cb_s = KHERR_MAXCB_STRING; - else - cb_s += sizeof(wchar_t); - - dest = PMALLOC(cb_s); - assert(dest != NULL); - dest[0] = L'\0'; - - StringCbCopy(dest, cb_s, s); - - return _tstr(dest); -} diff --git a/src/windows/identity/kherr/kherr.h b/src/windows/identity/kherr/kherr.h deleted file mode 100644 index a4ab68d06..000000000 --- a/src/windows/identity/kherr/kherr.h +++ /dev/null @@ -1,1126 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KHERR_H -#define __KHIMAIRA_KHERR_H - -/*! \defgroup kherr NetIDMgr Error Reporting - - Error reporting functions provide a mechanism to construct - meaningful and user friendly error reports for the user. - - Unlike most of the other NetIDMgr API's, the error reporting APIs - are lightweight and usually do not return an error value. This is - mostly because, these functions are called \b after an error - occurs. - - @{*/ -#include<khdefs.h> -#include<khlist.h> - -/*! \name Customizable macros -@{ */ -#ifndef KHERR_FACILITY -/*! \brief The default facility when reporting errors - - When including this header file, if the KHERR_FACILITY macro is - defined to be a wide character string, then it will be used as the - default facility when for the convenience macros. All of the - calls to the convenience macros in the source file would then have - that facility. - - If left undefined, the convenience macros will leave the facility - value undefined. - */ -#define KHERR_FACILITY NULL -#endif - -#ifndef KHERR_FACILITY_ID -/*! \brief The default facility ID when reporting errors - - When including this header file, if the KHERR_FACILITY_ID macro is - defined to be non-zero, then it will be used as the default - facility identifier for the convenience macros. All of the calls - to the convenience macros in the source file would then have that - facility identifier. - - The default value of 0 means that the facility is undefined. - */ -#define KHERR_FACILITY_ID 0 -#endif - -/*! \define KHERR_HMODULE (undefined) - \brief The default module handle - - When including this header file, if the KHERR_HMODULE macro is - defined to be an identifier that holds the module handle, then the - convenience macros that specify a module handle will use it. - - A default value is not defined for KHERR_HMODULE. Any attempt to - invoke any of the convenience macros that use it should generate a - compile time error. - */ -#ifdef _WIN32 -#ifndef KHERR_HMODULE -#endif -#endif -/*@}*/ - -/*! \brief Parameter types - */ -enum kherr_parm_types { - KEPT_NONE = 0, - KEPT_INT32 = 1, - KEPT_UINT32, - KEPT_INT64, - KEPT_UINT64, - KEPT_STRINGC, /*!< String constant */ - KEPT_STRINGT, /*!< String. Will be freed using - free() when the event is freed */ - KEPT_PTR /*!< Pointer type. */ -}; - - -typedef struct tag_kherr_param { - khm_octet type; - khm_ui_8 data; -} kherr_param; - -/*! \brief Severity levels - - Larger the value, the less severe it is. -*/ -enum tag_kherr_severity { - KHERR_FATAL = 0, /*!< Fatal error.*/ - KHERR_ERROR, /*!< Non-fatal error. We'll probably - survive. See the suggested action. */ - KHERR_WARNING, /*!< Warning. Something almost broke - or soon will. See the suggested - action. */ - KHERR_INFO, /*!< Informational. Something happened - that we would like you to know - about. */ - KHERR_DEBUG_1 = 64, /*!< Verbose debug level 1 (high) - Events at this severity level are - not required to be based on - localized strings. */ - KHERR_DEBUG_2 = 65, /*!< Verbose debug level 2 (medium) - Events at this severity level are - not required to be based on - localized strings. */ - KHERR_DEBUG_3 = 66, /*!< Verbose debug level 3 (low) - Events at this severity level are - not required to be based on - localized strings. */ - KHERR_RESERVED_BANK = 127, /*!< Internal use */ - KHERR_NONE = 128 /*!< Nothing interesting has happened - so far */ -}; - -typedef enum tag_kherr_severity kherr_severity; - -/*! \brief Suggestions */ -enum tag_kherr_suggestion { - KHERR_SUGGEST_NONE = 0, /*!< No suggestions. */ - KHERR_SUGGEST_ABORT, /*!< Abort whatever it was you were - trying. It's not gonna work. */ - KHERR_SUGGEST_RETRY, /*!< Retry. It might work the second - or third time over */ - KHERR_SUGGEST_IGNORE, /*!< Ignore. It might go away. */ - KHERR_SUGGEST_INTERACT, /*!< Further user interaction is - necessary to resolve the situation. - The suggest string in the event - should be prompted to the user. */ - KHERR_SUGGEST_OTHER, /*!< Something else. */ -}; - -typedef enum tag_kherr_suggestion kherr_suggestion; - -/*! \brief An event */ -typedef struct tag_kherr_event { - khm_int32 magic; /*!< Magic number. Always set to - KHERR_EVENT_MAGIC */ - DWORD thread_id; /*!< The thread which reported this - event. */ - const wchar_t * short_desc; /*!< Short description or title - (localized) */ - const wchar_t * facility; /*!< Facility name of the reporter - (not localized) */ - const wchar_t * location; /*!< Location. Usually the function - name or such of where the event - occured (not localized) */ - const wchar_t * long_desc; /*!< A long description of what went - wrong (localized, formatted) */ - const wchar_t * suggestion; /*!< A suggested way to fix it - (localized,formatted) */ - - kherr_severity severity; - /*!< Severity level. One of the - severity levels listed in - enumeration ::kherr_severity */ - khm_int32 facility_id; /*!< Left to the application to - interpret */ - kherr_suggestion suggestion_id; - /*!< One of the suggestion ID's from - the enumeration - ::kherr_suggestion */ - - int flags; /*!< Flags. */ - - kherr_param p1; /*!< Parameter 1 for formatting */ - kherr_param p2; /*!< Parameter 2 for formatting */ - kherr_param p3; /*!< Parameter 3 for formatting */ - kherr_param p4; /*!< Parameter 4 for formatting */ - - DWORD time_ticks; /*!< Time at which event was reported - (as returned by GetTickCount(). */ - FILETIME time_ft; /*!< Time at which event was reported. - Current system time as FILETIME. */ - -#ifdef _WIN32 - HMODULE h_module; /*!< Handle to the module which should - resolve any unresolved resources - references above. */ -#endif - - LDCL(struct tag_kherr_event); -} kherr_event; - -#define KHERR_EVENT_MAGIC 0x0423e84f - -/*! \brief Flags for kherr_event - - Each set of flags that define the type of resource for one value - is mutually exclusive. - */ -enum kherr_event_flags { - KHERR_RF_CSTR_SHORT_DESC= 0x00000000, - /*!< Short description is a constant - string */ - KHERR_RF_RES_SHORT_DESC = 0x00000001, - /*!< Short description is a string - resource */ - KHERR_RF_MSG_SHORT_DESC = 0x00000002, - /*!< Short description is a message - resource */ - KHERR_RF_FREE_SHORT_DESC= 0x00000004, - /*!< Short description is an allocated - string */ - KHERR_RFMASK_SHORT_DESC = 0x00000007, - - KHERR_RF_CSTR_LONG_DESC = 0x00000000, - /*!< Long description is a constant - string */ - KHERR_RF_RES_LONG_DESC = 0x00000008, - /*!< Long description is a string - resource */ - KHERR_RF_MSG_LONG_DESC = 0x00000010, - /*!< Long description is a message - resouce */ - KHERR_RF_FREE_LONG_DESC = 0x00000020, - /*!< Long description is an allocated - string */ - KHERR_RFMASK_LONG_DESC = 0x00000038, - - KHERR_RF_CSTR_SUGGEST = 0x00000000, - /*!< Suggestion is a constant - string */ - KHERR_RF_RES_SUGGEST = 0x00000040, - /*!< Suggestion is a string - resource */ - KHERR_RF_MSG_SUGGEST = 0x00000080, - /*!< Suggestion is a message - resource */ - KHERR_RF_FREE_SUGGEST = 0x00000100, - /*!< Suggestion is an allocated - string */ - KHERR_RFMASK_SUGGEST = 0x000001C0, - - KHERR_RF_STR_RESOLVED = 0x00010000, - /*!< The string resources in the event - have been resolved. */ - KHERR_RF_CONTEXT_FOLD = 0x00020000, - /*!< The event is a representation of - a folded context. */ - - KHERR_RF_INERT = 0x00040000, - /*!< Inert event. The event has - already been dealt with and is no - longer considered significant. */ - KHERR_RF_COMMIT = 0x00080000 - /*!< Committed event. The commit - handlers for this event have already - been called. */ -}; - -/*! \brief Serial number for error contexts */ -typedef khm_ui_4 kherr_serial; - -/*! \brief An error context -*/ -typedef struct tag_kherr_context { - khm_int32 magic; /*!< Magic number. Always set to - KHERR_CONTEXT_MAGIC */ - - kherr_serial serial; /*!< Context instance serial number. - Context objects themselves may be - reused for different contexts as - they are freed and reallocated. - However every instance of a context - is guaranteed to have a unique - serial number as specified in this - field. If an external entity wants - to keep track of the context, it - should keep track of the serial - number as well as the pointer to the - context object. */ - - kherr_severity severity; - /*!< Severity level. One of the - severity levels listed below. This - is the severity level of the context - and is the maximum severity level of - all the events in the queue of - events. */ - - khm_int32 flags; /*!< Flags. Used internally. */ - khm_ui_4 refcount; /*!< Reference count. Used - internally */ - - kherr_event *desc_event; /*!< Description event. The event that - describes the error context. This - points to an event that is not in - the event queue. */ - - kherr_event *err_event; /*!< Significant event. The last one - that caused the severity level to be - what it is right now. This points - to an event that is listed in the - event queue for this context.*/ - - khm_ui_4 progress_num; /*!< Progress numerator */ - khm_ui_4 progress_denom; /*!< Progress denominator */ - - TDCL(struct tag_kherr_context); - QDCL(struct tag_kherr_event); -} kherr_context; - -#define KHERR_CONTEXT_MAGIC 0x34f3238c - -enum kherr_context_flags { - KHERR_CF_NONE = 0x00000000, - /*!< None. */ - - KHERR_CF_DIRTY = 0x00000001, - /*!< Used Internally. Denotes that - the err_event and severity may need - to be recalculated. Cannot be set - as an initial flag. */ - - KHERR_CF_OWN_PROGRESS = 0x00000002, - /*!< The context maintains its own - progress meter as opposed to one - that is derived from child - contexts. */ - - KHERR_CF_UNBOUND = 0x00000004, - /*!< Unbound context. The context - can't be used to log events. Call - kherr_push_context() to associate - the context with the global context - hierarchy. Cannot be set as an - initial flag. */ - - KHERR_CF_TRANSITIVE = 0x00000008, - /*!< Transitive. The context is - automatically made the current - context for all other threads that - handle messages sent or posted by - threads whose current error context - is this one. */ - - KHERR_CFMASK_INITIAL = 0x0000000a, - /*!< Allowed initial flags */ -}; - -/*! \brief Maximum length of a string field in characters including terminating NULL - */ -#define KHERR_MAXCCH_STRING 1024 - -/*! \brief Maximum length of a string field in bytes including terminating NULL - */ -#define KHERR_MAXCB_STRING (KHERR_MAXCCH_STRING * sizeof(wchar_t)) - -/*! \brief Context event - - \see kherr_add_ctx_handler() -*/ -enum kherr_ctx_event { - KHERR_CTX_BEGIN = 0x00000001, /*!< A new context was created */ - KHERR_CTX_DESCRIBE = 0x00000002, /*!< A context was described */ - KHERR_CTX_END = 0x00000004, /*!< A context was closed */ - KHERR_CTX_ERROR = 0x00000008, /*!< A context switched to an - error state */ - KHERR_CTX_EVTCOMMIT = 0x00000010, /*!< A event was committed into - the context */ - KHERR_CTX_NEWCHILD = 0x00000020, /*!< A new child context was created */ - KHERR_CTX_FOLDCHILD = 0x00000040, /*!< A child context was folded */ - KHERR_CTX_PROGRESS = 0x00000080, /*!< Progress marker updated for context */ -}; - -/*! \brief Context event handler - - Context event handlers are invoked when specific events occur with - respect to an error context. The ::kherr_ctx_event parameter - specifies which event occurred using one of the event values - described in the enumeration. The error context in which this - event occurred is specified by the ::kherr_context pointer. - - Note that if the handler needs to keep track of the error context - for later processing, it also needs to keep track of the \a serial - field of the error context. The same context object may be - reused, but the serial number is guaranteed to be unique. - - \see kherr_add_ctx_handler() - */ -typedef void (KHMAPI * kherr_ctx_handler)(enum kherr_ctx_event, - kherr_context *); - -/*! \brief Add a context event handler - - An application can register an event handler that gets notified of - events that pertain to error contexts. More than one handler can - be registered. The order in which the handlers are called is - undefined for any specific event. - - These event occur in the context of individual application - threads. The handler will be called from within the thread that - caused the event. Therefore it is important that the handler is - both reentrant and returns quickly. - - The events that the handler will be notified of are explained - below: - - <b>KHERR_CTX_BEGIN</b>: Notification that a new context was - created. A pointer to the context will be supplied to the - handler. The supplied pointer should not be used to obtain a hold - on the context, as it will prevent the context from being closed. - - <b>KHERR_CTX_DESCRIBE</b>: The thread called - kherr_set_desc_event() to set the description of a context. Once - again, the pointer should not be used to obtain a hold on the - context. - - <b>KHERR_CTX_ERROR</b>: The last event that was reported for the - context was an error event (the severity was was equal or higher - than KHERR_ERROR). The pointer may be used to obtain a hold on - the context. However, it is the application's resonsibility to - make sure that the hold is released later. Otherwise the event - will never be closed. - - <b>KHERR_CTX_END</b>: Closure. This event is signalled when the - last open handle to the context is closed and there is no thread - that is currently active which has this context in its error - context stack. At the time the handler is invoked, the context is - still intact. The pointer that is supplied should not be used to - obtain a handle on the context. - - <b>KHERR_CTX_EVTCOMMIT</b>: An event was committed into the error - context. An event is committed when another event is reported - after the event, or if the context is closed. Since the last - event that is reported can still be modified by adding new - information, the event remains open until it is no longer the last - event or the context is no longer active. When this notification - is received, the last event in the context's event queue is the - event that was committed. - - \param[in] h Context event handler, of type ::kherr_ctx_handler - - \param[in] filter A combination of ::kherr_ctx_event values - indication which notifications should be sent to the handler. - If a \a filter value of zero is provided, all of the events - will be sent to the handler. - - \param[in] serial The serial number of the error context that - should be tracked. If this is zero, all error contexts can - trigger the handler. - */ -KHMEXP void KHMAPI kherr_add_ctx_handler(kherr_ctx_handler h, - khm_int32 filter, - kherr_serial serial); - -/*! \brief Remove a context event handler - - Undoes what was done with kherr_add_ctx_handler() - - \see kherr_add_ctx_handler() - */ -KHMEXP void KHMAPI kherr_remove_ctx_handler(kherr_ctx_handler h, - kherr_serial serial); - - -/*! \brief Report an error - - Creates an event, fills in the details specified in the arguments, - and adds it to the current error context. - - If the current thread does not have an error context, no reporting - happens. However, if any of the supplied strings or parameters - are marked as allocated, they will be freed before the function - returns. - - Certain parameters that expect strings can instead be given string - resources, message resources or allocated strings in addition to - constant string. By default, the parameters are expected to be - constant strings. - - <b>Allocated strings</b>: The application can allocate memory for - a string. Since the application is not notified when the event is - no longer used and freed, it \b must indicate that the string is - an allocated string by setting the appropriate flag in the \a - flags parameter. When the event is no longer used, the memory - pointed to by the relevant pointer will be freed through a call to - free(). Not all string parameters take allocated strings. See - individual parameter documentation for details. - - <b>String resources</b>: On WIN32, string resources can be passed - in to kherr_report() using the MAKEINTRESOURCE macro. However, - the application \b must specify that the parameter is a string - resource using the appropriate flag in the \a flags parameter. - The error reporting engine will expand the string against the - module handle passed in the \a h_module parameter when the value - of the string is required. Not all string parameters take string - resources. See individual parameter documentation for details. - Strings loaded through string resources cannot be longer than - ::KHERR_MAXCCH_STRING in characters inclusive of terminating NULL. - - <b>Message resources</b>: On WIN32, message resources can be - passed in to kherr_report() by specifying the message ID where it - ordinarily expects a pointer to a constant string. The - application \b must indicate that the string is a message resource - by using the appropriate flag in the \a flags parameter. When the - value of the string is needed, it is expanded against the module - handle passed in the \a h_module parameter using the message ID. - Not all string parameters take message resources. See individual - parameter documentation for details. Note that the facility and - severity values associated with a message resource are ignored. - Strings loaded through message resources cannot be longer than - ::KHERR_MAXCCH_STRING in characters inclusive of terminating NULL. - - <b>Formatted fields</b>: Parameters that are formatted can have - can have parameter inserts like in printf(). However, specifying - inserts is different from printf() and follows the conventions - used in WIN32 API FormatMessage(). This is because for localized - strings, the order of the parameters in the string may be - different. See the documentation for FormatMessage() for details - on the format string. The same set of parameters (i.e. \a p1, \a - p2, \a p3, \a p4) is used for all formatted strings with - appropriate marshalling for 64 bit types. The size of the string - after expansion must not exceed 65536 bytes inclusive of - terminating NULL. - - \param[in] severity One of ::kherr_severity_level - \param[in] short_desc Short description or title (localized). Can - be a string resource, message resource, allocated string or - constant string. The \a flags parameter should indicate the - type of string used. - \param[in] facility Facility name of the reporter (not localized) - \param[in] location Usually the function name or such of where the - event occured (not localized) - \param[in] long_desc Long description of event (localized, - formatted). Can be a string resource, message resource, - allocated string or constant string. The \a flags parameter - should indicate the type of string used. - \param[in] suggestion Suggested action to correct situation, if - applicable (localized). Can be a string resource, message - resource, allocated string or constant string. The \a flags - parameter should indicate the type of string used. - \param[in] facility_id Identifier of facility. Application - defined. - \param[in] suggestion_id One of the suggestion identifiers from - ::kherr_suggestion_ids - \param[in] p1 First parameter. Used for formatting. - \param[in] p2 Second parameter. Used for formatting. - \param[in] p3 Third parameter. Used for formatting. - \param[in] p4 Fourth parameter. Used for formatting. - \param[in] flags Flags. See ::kherr_report_flags - \param[in] h_module Handle to a module that resolves any string or - message resources used for the \a short_description , \a - long_desc or \a suggestion parameters. This parameter is only - available on WIN32. - - \note With the exception of parameters of type KEPT_STRINGT and - parameters which are flagged for freeing using the \a flags - parameter, all other string parameters are assumed to be - pointers to constant strings. The strings are not copied and - the pointers are used as is. Also, no clean-up is performed - when the event is freed other than that implied by \a flags. - */ -KHMEXP kherr_event * KHMAPI kherr_report( - kherr_severity severity, - const wchar_t * short_desc, - const wchar_t * facility, - const wchar_t * location, - const wchar_t * long_desC, - const wchar_t * suggestion, - khm_int32 facility_id, - kherr_suggestion suggestion_id, - kherr_param p1, - kherr_param p2, - kherr_param p3, - kherr_param p4, - khm_int32 flags -#ifdef _WIN32 - ,HMODULE h_module -#endif -); - -/*! \brief Report a formatted message - - The format string \a long_desc_fmt should be a string constant and - the format specifiers follow that of \a sprintf. This creates an - event with the long description set to the expansion of the format - string against the arguments. - */ -KHMEXP kherr_event * __cdecl -kherr_reportf_ex(kherr_severity severity, - const wchar_t * facility, - khm_int32 facility_id, -#ifdef _WIN32 - HMODULE hModule, -#endif - const wchar_t * long_desc_fmt, - ...); -#define _reportf_ex kherr_reportf_ex - -/*! \brief Report a formatted message - - The format string \a long_desc_fmt should be a string constant and - the format specifiers follow that of \a sprintf. This creates an - event with the long description set to the expansion of the format - string against the arguments. - */ -KHMEXP kherr_event * __cdecl -kherr_reportf(const wchar_t * long_desc_fmt, - ...); -#define _reportf kherr_reportf - -/*! \brief Create a parameter out of a transient string - - A parameter is created by duplicating the string that is passed - into the function. If the string exceeds KHERR_MAXCCH_STRING, - then only the first part of the string that fits within the limit - is duplicated. - - The resulting ::kherr_param must be passed in to kherr_report(). - The event logging framework will free the duplicated string once - the data is no longer required. - */ -KHMEXP kherr_param kherr_dup_string(const wchar_t * s); - -__inline KHMEXP kherr_param -kherr_val(khm_octet ptype, khm_ui_8 pvalue) { - kherr_param p; - - p.type = ptype; - p.data = pvalue; - - return p; -} - -#define _int32(i) kherr_val(KEPT_INT32, (khm_ui_8) i) -#define _uint32(ui) kherr_val(KEPT_UINT32, (khm_ui_8) ui) -#define _int64(i) kherr_val(KEPT_INT64, (khm_ui_8) i) -#define _uint64(ui) kherr_val(KEPT_UINT64, (khm_ui_8) ui) -#define _cstr(cs) kherr_val(KEPT_STRINGC, (khm_ui_8) cs) -#define _tstr(ts) kherr_val(KEPT_STRINGT, (khm_ui_8) ts) -#define _cptr(p) kherr_val(KEPT_PTR, (khm_ui_8) p) -#define _vnull() kherr_val(KEPT_NONE, 0) -#define _dupstr(s) kherr_dup_string(s) - -/* convenience macros for calling kherr_report */ -#ifdef KHERR_HMODULE - -#define _report_cs0(severity, long_description) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (long_description), NULL, KHERR_FACILITY_ID, 0, _vnull(), _vnull(), _vnull(), _vnull(), 0, KHERR_HMODULE) - -#define _report_cs1(severity, long_description, p1) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (long_description), NULL, KHERR_FACILITY_ID, 0, p1, _vnull(), _vnull(), _vnull(), 0, KHERR_HMODULE) - -#define _report_cs2(severity, long_description, p1, p2) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (long_description), NULL, KHERR_FACILITY_ID, 0, p1, p2, _vnull(), _vnull(), 0, KHERR_HMODULE) - -#define _report_cs3(severity, long_description, p1, p2, p3) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (long_description), NULL, KHERR_FACILITY_ID, 0, p1, p2, p3, _vnull(), 0, KHERR_HMODULE) - -#define _report_cs4(severity, long_description, p1, p2, p3, p4) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (long_description), NULL, KHERR_FACILITY_ID, 0, p1, p2, p3, p4, 0, KHERR_HMODULE) - -#else - -#define _report_cs0(severity, long_description) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (long_description), NULL, KHERR_FACILITY_ID, 0, _vnull(), _vnull(), _vnull(), _vnull(), 0, NULL) - -#define _report_cs1(severity, long_description, p1) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (long_description), NULL, KHERR_FACILITY_ID, 0, p1, _vnull(), _vnull(), _vnull(), 0, NULL) - -#define _report_cs2(severity, long_description, p1, p2) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (long_description), NULL, KHERR_FACILITY_ID, 0, p1, p2, _vnull(), _vnull(), 0, NULL) - -#define _report_cs3(severity, long_description, p1, p2, p3) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (long_description), NULL, KHERR_FACILITY_ID, 0, p1, p2, p3, _vnull(), 0, NULL) - -#define _report_cs4(severity, long_description, p1, p2, p3, p4) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (long_description), NULL, KHERR_FACILITY_ID, 0, p1, p2, p3, p4, 0, NULL) -#endif /* !defined(KHERR_HMODULE) */ - -#ifdef _WIN32 -#define _report_sr0(severity, long_desc_id) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, MAKEINTRESOURCE(long_desc_id), NULL, KHERR_FACILITY_ID, 0, _vnull(), _vnull(), _vnull(), _vnull(), KHERR_RF_RES_LONG_DESC, KHERR_HMODULE) - -#define _report_sr1(severity, long_desc_id, p1) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, MAKEINTRESOURCE(long_desc_id), NULL, KHERR_FACILITY_ID, 0, p1, _vnull(), _vnull(), _vnull(), KHERR_RF_RES_LONG_DESC, KHERR_HMODULE) - -#define _report_sr2(severity, long_desc_id, p1, p2) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, MAKEINTRESOURCE(long_desc_id), NULL, KHERR_FACILITY_ID, 0, p1, p2, _vnull(), _vnull(), KHERR_RF_RES_LONG_DESC, KHERR_HMODULE) - -#define _report_sr3(severity, long_desc_id, p1, p2, p3) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, MAKEINTRESOURCE(long_desc_id), NULL, KHERR_FACILITY_ID, 0, p1, p2, p3, _vnull(), KHERR_RF_RES_LONG_DESC, KHERR_HMODULE) - -#define _report_sr4(severity, long_desc_id, p1, p2, p3, p4) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, MAKEINTRESOURCE(long_desc_id), NULL, KHERR_FACILITY_ID, 0, p1, p2, p3, p4, KHERR_RF_RES_LONG_DESC, KHERR_HMODULE) -#endif - -#ifdef _WIN32 -#define _report_mr0(severity, long_desc_msg_id) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (wchar_t *)(long_desc_msg_id), NULL, KHERR_FACILITY_ID, 0, _vnull(), _vnull(), _vnull(), _vnull(), KHERR_RF_MSG_LONG_DESC, KHERR_HMODULE) - -#define _report_mr1(severity, long_desc_msg_id, p1) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (wchar_t *)(long_desc_msg_id), NULL, KHERR_FACILITY_ID, 0, p1, _vnull(), _vnull(), _vnull(), KHERR_RF_MSG_LONG_DESC, KHERR_HMODULE) - -#define _report_mr2(severity, long_desc_msg_id, p1, p2) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (wchar_t *)(long_desc_msg_id), NULL, KHERR_FACILITY_ID, 0, p1, p2, _vnull(), _vnull(), KHERR_RF_MSG_LONG_DESC, KHERR_HMODULE) - -#define _report_mr3(severity, long_desc_msg_id, p1, p2, p3) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (wchar_t *)(long_desc_msg_id), NULL, KHERR_FACILITY_ID, 0, p1, p2, p3, _vnull(), KHERR_RF_MSG_LONG_DESC, KHERR_HMODULE) - -#define _report_mr4(severity, long_desc_msg_id, p1, p2, p3, p4) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (wchar_t *)(long_desc_msg_id), NULL, KHERR_FACILITY_ID, 0, p1, p2, p3, p4, KHERR_RF_MSG_LONG_DESC, KHERR_HMODULE) -#endif - -#define _report_ts0(severity, long_desc_ptr) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (long_desc_ptr), NULL, KHERR_FACILITY_ID, 0, _vnull(), _vnull(), _vnull(), _vnull(), KHERR_RF_FREE_LONG_DESC, NULL) - -#define _report_ts1(severity, long_desc_ptr, p1) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (long_desc_ptr), NULL, KHERR_FACILITY_ID, 0, p1, _vnull(), _vnull(), _vnull(), KHERR_RF_FREE_LONG_DESC, NULL) - -#define _report_ts2(severity, long_desc_ptr, p1, p2) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (long_desc_ptr), NULL, KHERR_FACILITY_ID, 0, p1, p2, _vnull(), _vnull(), KHERR_RF_FREE_LONG_DESC, NULL) - -#define _report_ts3(severity, long_desc_ptr, p1, p2, p3) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (long_desc_ptr), NULL, KHERR_FACILITY_ID, 0, p1, p2, p3, _vnull(), KHERR_RF_FREE_LONG_DESC, NULL) - -#define _report_ts4(severity, long_desc_ptr, p1, p2, p3, p4) \ - kherr_report((severity), NULL, KHERR_FACILITY, NULL, (long_desc_ptr), NULL, KHERR_FACILITY_ID, 0, p1, p2, p3, p4, KHERR_RF_FREE_LONG_DESC, NULL) - -/*! \brief Set the suggestion and suggestion identifier for the last event - - The event that will be modified is the last event reported by the - calling thread. - */ -KHMEXP void KHMAPI kherr_suggest(wchar_t * suggestion, khm_int32 suggestion_id, khm_int32 flags); -#define _suggest_cs(cs,sid) kherr_suggest((cs), (sid), KHERR_RF_CSTR_SUGGEST) -#define _suggest_ts(ts,sid) kherr_suggest((ts), (sid), KHERR_RF_FREE_SUGGEST) -#define _suggest_sr(sr,sid) kherr_suggest(MAKEINTRESOURCE(sr), (sid), KHERR_RF_RES_SUGGEST) -#define _suggest_mr(mr,sid) kherr_suggest((wchar_t *)(DWORD_PTR)(mr), (sid), KHERR_RF_MSG_SUGGEST) - -/*! \brief Set the location string for the last event - - The event that will be modified is the last event reported by the - calling thread. - */ -KHMEXP void KHMAPI kherr_location(wchar_t * location); -#define _location(l) kherr_location(l) - -/*! \brief Set the facility string and identifier for the last event - - The event that will be modified is the last event reported by the - calling thread. - */ -KHMEXP void KHMAPI kherr_facility(wchar_t * facility, khm_int32 facility_id); -#define _facility(f,fid) kherr_facility((f),(fid)) - -/*! \brief Marks the last event as the descriptor event for the current error context - - Note that marking an event as the descriptor event has the effect - of removing the event from event queue. The event will henceforth - be used as the descriptor for the context. The only effective - fields of a descriptor event are \a short_desc, \a long_desc, \a - facility, \a facility_id and the parameters which are used for - resolving formatted strings in the aforementioned fields. - - Upon calling kherr_set_desc_event(), the event will be - automatically evaluated as if kherr_evaluate_event() was called. - - The event that will be referenced is the last event reported by - the calling thread. - */ -KHMEXP void KHMAPI kherr_set_desc_event(void); -#define _describe kherr_set_desc_event - -/*! \brief Delete the last event - - The event that will be deleted is the last event reported by the - calling thread. - */ -KHMEXP void KHMAPI kherr_del_last_event(void); -#define _del_event kherr_del_last_event - -/*! \brief Create a new context - - The created context is not bound to any thread or any context - hierarchy. Hence it cannot be used to capture any events until it - is used in a call to kherr_push_context(). - - Release the returned context pointer with a call to - kherr_release_context(). - - \param[in] flags Initial flags for the context. Combination of - ::kherr_context_flags - - \note This function is for internal use only. - */ -KHMEXP kherr_context * KHMAPI kherr_create_new_context(khm_int32 flags); - -/*! \brief Obtain a hold on a context */ -KHMEXP void KHMAPI kherr_hold_context(kherr_context * c); - -/*! \brief Release a context */ -KHMEXP void KHMAPI kherr_release_context(kherr_context * c); - -/*! \brief Push an empty context - - Creates an empty context, adds it as a child of the current - thread's error context. If the current thread does not have an - error context, then the created error context will be a root level - context. - - The new context will be the current error context for the calling - thread. - - \param[in] flags Initial flags for the context. Combination of - ::kherr_context_flags - - \see kherr_push_new_context() for more information about thread - specific context stacks. - - */ -KHMEXP void KHMAPI kherr_push_new_context(khm_int32 flags); -#define _begin_task kherr_push_new_context - -/*! \brief Push a context - - Each thread has a stack of error contexts. The topmost one is - current. The thread can push or pop contexts on to the stack - independently of the hierarchy of contexts (the only exception, as - explained below is when the context that is being pushed is - unbound). - - If the context being pushed by kherr_push_context() is unbound, - then it will be attached to the current context of the thread as a - child. Once the new context is pushed to the top of the stack, it - will become the current context for the thread. - - The calling thread must call kherr_pop_context() to remove the - context from the top of the stack. Each call to - kherr_push_new_context() or kher_push_context() must have a - corresponding kherr_pop_context() call. - - When the thread terminates, all of the contexts in the thread's - context stack will be automatically removed. - - \see kherr_pop_context() - */ -KHMEXP void KHMAPI kherr_push_context(kherr_context * c); - -/*! \brief Pop a context - - Remove the current error context from the thread's context stack. - If no other open handles exist to the error context, this causes - the error context to collapse into it's parent context or vanish - entirely unless the context contains an error. - - \see kherr_push_context() for more information about thread - specific context stacks. - */ -KHMEXP void KHMAPI kherr_pop_context(void); -#define _end_task kherr_pop_context - -/*! \brief Retrieve the current error context - - The returned pointer must be released with a call to - kherr_release_context(). -*/ -KHMEXP kherr_context * KHMAPI kherr_peek_context(void); - -/*! \brief Check if the current error context indicates an error - - \return TRUE if there is an error. FALSE otherwise. - \see kherr_analyze() - */ -KHMEXP khm_boolean KHMAPI kherr_is_error(void); - -/*! \brief Check if an error context indicates an error - - \return TRUE if there is an error. FALSE otherwise. - \see kherr_analyze() - */ -KHMEXP khm_boolean KHMAPI kherr_is_error_i(kherr_context * c); - -/*! \brief Clear the error state of the current context */ -KHMEXP void KHMAPI kherr_clear_error(void); - -/*! \brief Clear the error state of an error context */ -KHMEXP void KHMAPI kherr_clear_error_i(kherr_context * c); - -/*! \brief Set the progress meter of the current error context - - Setting \a denom to zero removes the progress meter. - */ -KHMEXP void KHMAPI kherr_set_progress(khm_ui_4 num, khm_ui_4 denom); -#define _progress(num,denom) kherr_set_progress((num),(denom)) - -/*! \brief Get the progress meter of the current error context - - This is equivalent to calling kherr_get_progress_i() for the - current error context. I.e. : - - \code - kherr_context * ctx; - - ctx = kherr_peek_context(); - kherr_get_progress_i(ctx, &num, &denom); - kherr_release_context(ctx); - \endcode - - \see kherr_get_progress_i() - */ -KHMEXP void KHMAPI kherr_get_progress(khm_ui_4 * num, khm_ui_4 * denom); - -/*! \brief Get the progress meter of an error context - - The progress meter for the current context can be set by calling - kherr_set_progress() (or using the ::_progress macro). The - progress value returned by this function is as follows: - - If one or more of the following conditions are true, then the - returned progress values are the values set for the context using - the most recent call to kherr_set_progress(): - - - if the numerator and the denominator are non-zero - - - if the ::KHERR_CF_OWN_PROGRESS flag is set for the context. - - Otherwise, the function will calculate the progress by enumerating - all the child context for the context and summing up the - normalized numerators and the denominators for them. - */ -KHMEXP void KHMAPI kherr_get_progress_i(kherr_context * c, khm_ui_4 * num, khm_ui_4 * denom); - -/*! \brief Get the first event in a context - - The returned pointer is only valid as long as there is a hold on - \a c. Once the context is released with a call to - kherr_release_context() all pointers to events in the context - become invalid. - - In addition, the last event in a context may still be "active". A - thread can still modify the last event as long as the context is - active. - - \see kherr_get_next_event(), kherr_get_prev_event(), - kherr_get_last_event() - */ -KHMEXP kherr_event * KHMAPI kherr_get_first_event(kherr_context * c); - -/*! \brief Get the next event - - Call kherr_get_first_event() to obtain the first event in a - context. Subsequent calls to kherr_get_next_event() will yield - other events in the order in which they were reported. The list - ends when kherr_get_next_event() returns NULL. - - The returned pointer is only valid as long as there is a hold on - \a c. Once the context is released with a call to - kherr_release_context() all pointers to events in the context - become invalid. - - In addition, the last event in a context may still be "active". A - thread can still modify the last event as long as the context is - active. - - \see kherr_get_first_event(), kherr_get_prev_event(), - kherr_get_last_event() - */ -KHMEXP kherr_event * KHMAPI kherr_get_next_event(kherr_event * e); - -/*! \brief Get the previous event - - Returns a pointer to the event that was reported in the context - containing \a e prior to \a e being reported. - - The returned pointer is only valid as long as there is a hold on - the error context. Once the context is released with a call to - kherr_release_context() all pointers to events in the context - become invalid. - - In addition, the last event in a context may still be "active". A - thread can still modify the last event as long as the context is - active. - - \see kherr_get_first_event(), kherr_get_next_event(), - kherr_get_last_event() - */ -KHMEXP kherr_event * KHMAPI kherr_get_prev_event(kherr_event * e); - -/*! \brief Get the last event in an error context - - Returns a pointer to the last error event that that was reported - to the context \a c. - - The returned pointer is only valid as long as there is a hold on - the error context. Once the context is released with a call to - kherr_release_context(), all pointers to events in the context - become invalid. - - In addtion, the last event in a context may still be "active". A - thread can still modify the last event as long as the context is - active. - - \see kherr_get_first_event(), kherr_get_next_event(), - kherr_get_prev_event() - */ -KHMEXP kherr_event * KHMAPI kherr_get_last_event(kherr_context * c); - -/*! \brief Get the first child context of a context - - Contexts are arranged in a hiearchy. This function returns the - first child of an error context. Use kherr_get_next_context() to - obtain the other contexts. If \a c is \a NULL, this returns the - first root level context. - - The returned pointer must be released with a call to - kherr_release_context() - */ -KHMEXP kherr_context * KHMAPI kherr_get_first_context(kherr_context * c); - -/*! \brief Get the next sibling context of a context - - The returned pointer must be released with a call to - kherr_release_context() - - \see kherr_get_first_context() - */ -KHMEXP kherr_context * KHMAPI kherr_get_next_context(kherr_context * c); - -/*! \brief Get the desciption event for the context - - The description event is the event that was denoted using - kherr_set_desc_event() as the event which describes the context. - - The returned pointer is only valid as long as there is a hold on - \a c. Once the context is released with a call to - kherr_release_context() all pointers to events in the context - becomes invalid. - */ -KHMEXP kherr_event * KHMAPI kherr_get_desc_event(kherr_context * c); - -/*! \brief Get the error event for the context - - The error event for a context is the last event that had the - highest severity level. - - The returned pointer is only valid as long as there is a hold on - \a c. Once the context is released with a call to - kherr_release_context() all pointers to events in the context - becomes invalid. - */ -KHMEXP kherr_event * KHMAPI kherr_get_err_event(kherr_context * c); - -/*! \brief Evaluate an event - - When an event is reported, all the parameters and resource - references that were passed to kherr_report() are kept as-is until - the actual string values are required by the error reporting - library. However, if the string fields are required before then, - an application can call kherr_evaluate_event() to get them. - - This function does the following: - - - Load any referenced string or message resources that are - referenced in the event's short description, long description or - suggestion. - - - Expand any inserts using the parameters that were passed in. - - - Free up allocated strings in for the descriptions or suggestion - fields and any parameters. - - - Update the string fields in the event to contain the newly - generated strings. - - */ -KHMEXP void KHMAPI kherr_evaluate_event(kherr_event * e); - -/*! \brief Evaluate the last event - - Same as kherr_evaluate_event(), but operates on the last event - logged by the current thread. - - \see kherr_evaluate_event() - */ -KHMEXP void KHMAPI kherr_evaluate_last_event(void); -#define _resolve kherr_evaluate_last_event - -/*! \defgroup kherr_fids Standard Facility IDs -@{*/ -#define KHM_FACILITY_KMM 1 -#define KHM_FACILITY_KCDB 2 -#define KHM_FACILITY_UI 3 -#define KHM_FACILITY_KRB5 64 -#define KHM_FACILITY_KRB4 65 -#define KHM_FACILITY_AFS 66 -#define KHM_FACILITY_USER 128 -/*@}*/ - -/*@}*/ - -/* In debug mode, outputs the formatted string to the debug console */ -#ifdef DEBUG -KHMEXP void kherr_debug_printf(wchar_t * fmt, ...); -#endif - -#endif diff --git a/src/windows/identity/kherr/kherrinternal.h b/src/windows/identity/kherr/kherrinternal.h deleted file mode 100644 index 278ce5e52..000000000 --- a/src/windows/identity/kherr/kherrinternal.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KHERRORINTERNAL_H -#define __KHIMAIRA_KHERRORINTERNAL_H - -#define _NIMLIB_ - -#include<windows.h> -#include<kherr.h> -#include<utils.h> -#include<strsafe.h> - -#define IS_KHERR_CTX(c) ((c) && (c)->magic == KHERR_CONTEXT_MAGIC) -#define IS_KHERR_EVENT(e) ((e) && (e)->magic == KHERR_EVENT_MAGIC) - -typedef struct tag_kherr_thread { - khm_size nc_ctx; - khm_size n_ctx; - kherr_context ** ctx; -} kherr_thread; - -#define THREAD_STACK_SIZE 8 - -typedef struct tag_kherr_handler_node { - khm_int32 filter; - kherr_ctx_handler h; - kherr_serial serial; -} kherr_handler_node; - -#define CTX_ALLOC_INCR 4 - -#define EVENT_MASK_UNRESOLVED \ - (KHERR_RF_RES_SHORT_DESC|KHERR_RF_MSG_SHORT_DESC| \ - KHERR_RF_RES_LONG_DESC|KHERR_RF_MSG_LONG_DESC| \ - KHERR_RF_RES_SUGGEST|KHERR_RF_MSG_SUGGEST) - -extern CRITICAL_SECTION cs_error; -extern DWORD tls_error; -extern kherr_context * ctx_free_list; -extern kherr_event * evt_free_list; -extern kherr_handler_node * ctx_handlers; -extern khm_size n_ctx_handlers; - -#define parm_type(p) ((p).type) -#define parm_data(p) ((p).data) - -void resolve_event_strings(kherr_event *); -void attach_this_thread(void); -void detach_this_thread(void); -#endif diff --git a/src/windows/identity/kherr/kherrmain.c b/src/windows/identity/kherr/kherrmain.c deleted file mode 100644 index c7afd7bc2..000000000 --- a/src/windows/identity/kherr/kherrmain.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<kherrinternal.h> - -void -kherr_process_attach(void) { - InitializeCriticalSection(&cs_error); - tls_error = TlsAlloc(); -} - -void -kherr_process_detach(void) { - TlsFree(tls_error); - DeleteCriticalSection(&cs_error); -} - -void -kherr_thread_attach(void) { - /* We don't call attach_this_thread() here since we only - want to create a context stack for this thread if - someone wants one. */ - /* attach_this_thread(); */ -} - -void -kherr_thread_detach(void) { - detach_this_thread(); -} diff --git a/src/windows/identity/kmm/Makefile b/src/windows/identity/kmm/Makefile deleted file mode 100644 index 6fd85ad80..000000000 --- a/src/windows/identity/kmm/Makefile +++ /dev/null @@ -1,55 +0,0 @@ -# -# 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 -# (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. - - -MODULE=kmm -!include <../config/Makefile.w32> - -INCFILES= \ - $(INCDIR)\kmm.h \ - $(INCDIR)\kplugin.h - -OBJFILES= \ - $(OBJ)\kmmmain.obj \ - $(OBJ)\kmm.obj \ - $(OBJ)\kmm_plugin.obj \ - $(OBJ)\kmm_module.obj \ - $(OBJ)\kmm_reg.obj \ - $(OBJ)\kmm_registrar.obj \ - $(OBJ)\kmmconfig.obj - -MSGRESFILE=$(OBJ)\kmm_msgs.res - -$(OBJ)\kmmconfig.c: kmmconfig.csv $(CONFDIR)\csvschema.cfg - $(CCSV) $** $@ - -$(MSGRESFILE): $(OBJ)\kmm_msgs.rc - -$(OBJ)\kmm_msgs.rc: lang\kmm_msgs.mc - $(MC2RC) - -all: mkdirs $(INCFILES) $(MSGRESFILE) $(OBJFILES) - -clean:: - if exist ..\obj $(RM) $(INCFILES) diff --git a/src/windows/identity/kmm/kmm.c b/src/windows/identity/kmm/kmm.c deleted file mode 100644 index e2784e8fd..000000000 --- a/src/windows/identity/kmm/kmm.c +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<kmminternal.h> -#include<assert.h> - -khm_boolean kmmint_load_locale_lib(kmm_module_i * m, kmm_module_locale * l) -{ - HMODULE h; - - if(l->filename != NULL) { - wchar_t path[MAX_PATH]; - DWORD dw; - - /* construct the path name */ - assert(m->h_module != NULL); - - dw = PathIsFileSpec(l->filename); - - assert(dw); - if (!dw) - return FALSE; - - dw = GetModuleFileName(m->h_module, path, ARRAYLENGTH(path)); - assert(dw != 0); - if (dw == 0) - return FALSE; - - PathRemoveFileSpec(path); - dw = PathAppend(path, l->filename); - assert(dw); - if (!dw) - return FALSE; - - h = LoadLibrary(path); - if(!h) - return FALSE; - - EnterCriticalSection(&cs_kmm); - m->h_resource = h; - m->lcid_resource = (WORD) l->language; - LeaveCriticalSection(&cs_kmm); - - return TRUE; - - } else { - /* in this case, the language resources are assumed to be in the - main module library itself. */ - - EnterCriticalSection(&cs_kmm); - m->h_resource = m->h_module; - m->lcid_resource = (WORD) l->language; - LeaveCriticalSection(&cs_kmm); - - return TRUE; - } -} - - -KHMEXP khm_int32 KHMAPI kmm_set_locale_info(kmm_module module, kmm_module_locale * locales, khm_int32 n_locales) -{ - kmm_module_i * m; - LANGID lcid; - int i; - int * f; - khm_int32 rv = KHM_ERROR_SUCCESS; - - m = kmm_module_from_handle(module); - - if(!m || m->state != KMM_MODULE_STATE_INIT) - return KHM_ERROR_INVALID_OPERATION; - - if(!locales || n_locales < 0) - return KHM_ERROR_INVALID_PARAM; - - f = PMALLOC(n_locales * sizeof(int)); - if(!f) - return KHM_ERROR_UNKNOWN; - ZeroMemory(f, sizeof(int) * n_locales); - - lcid = GetUserDefaultLangID(); - - /* first search for an exact match */ - for(i=0; i<n_locales; i++) { - if(locales[i].language == lcid) { - f[i] = TRUE; - if(kmmint_load_locale_lib(m, &locales[i])) - break; - } - } - - if(i<n_locales) - goto _exit; - - /* ok, that didn't work. Try an inexact match. */ - for(i=0; i<n_locales; i++) { - if(!f[i] && (PRIMARYLANGID(locales[i].language) == PRIMARYLANGID(lcid))) { - f[i] = TRUE; - if(kmmint_load_locale_lib(m,&locales[i])) - break; - } - } - - if(i < n_locales) - goto _exit; - - /* hmm. no matches yet. just try to locate the default locale */ - for(i=0; i<n_locales; i++) { - if(!f[i] && (locales[i].flags & KMM_MLOC_FLAG_DEFAULT)) { - f[i] = TRUE; - if(kmmint_load_locale_lib(m,&locales[i])) - break; - } - } - - if(i < n_locales) - goto _exit; - - /* give up */ - rv = KHM_ERROR_NOT_FOUND; - -_exit: - PFREE(f); - return rv; -} - -#ifdef _WIN32 -KHMEXP HMODULE KHMAPI kmm_get_resource_hmodule(kmm_module vm) -{ - if(!kmm_is_module(vm)) - return NULL; - else - return (kmm_module_from_handle(vm))->h_resource; -} -#endif - -KHMEXP kmm_module KHMAPI -kmm_this_module(void) { - kmm_plugin_i * p; - kmm_module_i * m; - kmm_module vm; - - p = TlsGetValue(tls_kmm); - if (!kmm_is_plugin(p)) - return NULL; - - m = p->module; - vm = kmm_handle_from_module(m); - - kmm_hold_module(vm); - - return vm; -} - -KHMEXP kmm_plugin KHMAPI -kmm_this_plugin(void) { - kmm_plugin_i * p; - kmm_plugin vp; - - p = TlsGetValue(tls_kmm); - if (!kmm_is_plugin(p)) - return NULL; - - vp = kmm_handle_from_plugin(p); - - kmm_hold_plugin(vp); - - return vp; -} diff --git a/src/windows/identity/kmm/kmm.h b/src/windows/identity/kmm/kmm.h deleted file mode 100644 index 58e9e1b24..000000000 --- a/src/windows/identity/kmm/kmm.h +++ /dev/null @@ -1,1068 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KMM_H -#define __KHIMAIRA_KMM_H - -#include<khdefs.h> -#include<kmq.h> - -/*! \defgroup kmm NetIDMgr Module Manager -@{*/ - -/*! \brief A handle to a module. -*/ -typedef khm_handle kmm_module; - -/*! \brief A handle to a plugin. - */ -typedef khm_handle kmm_plugin; - -/*! \name Limits - @{*/ - -/*! \brief Maximum number of characters in a name in KMM including the terminating NULL */ -#define KMM_MAXCCH_NAME 256 - -/*! \brief Maximum number of bytes in a name in KMM including the terminating NULL */ -#define KMM_MAXCB_NAME (sizeof(wchar_t) * KMM_MAXCCH_NAME) - -/*! \brief Maximum number of characters in a description in KMM including the terminating NULL */ -#define KMM_MAXCCH_DESC 512 - -/*! \brief Maximum number of bytes in a description in KMM including the terminating NULL */ -#define KMM_MAXCB_DESC (sizeof(wchar_t) * KMM_MAXCCH_NAME) - -/*! \brief Maximum number of characters in a vendor string in KMM including the terminating NULL */ -#define KMM_MAXCCH_VENDOR 256 - -/*! \brief Maximum number of bytes in a vendor string in KMM including the terminating NULL */ -#define KMM_MAXCB_VENDOR (sizeof(wchar_t) * KMM_MAXCCH_VENDOR) - -/*! \brief Maximum number of characters in a support URI in KMM including the terminating NULL */ -#define KMM_MAXCCH_SUPPORT 256 - -/*! \brief Maximum number of bytes in a vendor string in KMM including the terminating NULL */ -#define KMM_MAXCB_SUPPORT (sizeof(wchar_t) * KMM_MAXCCH_SUPPORT) - -/*! \brief Maximum number of dependencies per plugin -*/ -#define KMM_MAX_DEPENDENCIES 8 - -/*! \brief Maximum number of dependants per plugin - */ -#define KMM_MAX_DEPENDANTS 32 - -/*! \brief Maximum number of characters a dependency string including trailing double NULL */ -#define KMM_MAXCCH_DEPS (KMM_MAXCCH_NAME * KMM_MAX_DEPENDENCIES + 1) - -/*! \brief Maximum number of bytes in a dependency string including trailing double NULL */ -#define KMM_MAXCB_DEPS (sizeof(wchar_t) * KMM_MAXCCH_DEPS) -/*@}*/ /* Limits */ - -/*! \brief Plugin registration - - \see ::khm_cred_provider -*/ -typedef struct tag_kmm_plugin_reg { - wchar_t * name; /*!< Name of the plugin. Maximum of - KMM_MAXCCH_NAME characters - including the terminating - NULL. Required. */ - - wchar_t * module; /*!< Name of module that owns the - plugin. Maximum of - KMM_MAXCCH_NAME characters - including terminating NULL. - Required. */ - - khm_int32 type; /*!< Type plugin type. One of - KHM_PITYPE_*. Required. */ - khm_int32 flags; /*!< Unused. Set to 0 */ - kmq_callback_t msg_proc; /*!< Message processor. Required. */ - wchar_t * dependencies; /*!< Dependencies. Note that this is - a multi string. (you can use the - KHC multi string functions to - manipulate multi strings or to - convert a comma separated list of - dependencies to a multi string). - Each string in the multi string - is a name of a plugin that this - plugin depends on. Optional (set - to NULL if this plugin has no - dependencies). Maximum of - KMM_MAXCCH_DEPS characters - including terminating double - NULL.*/ - - wchar_t * description; /*!< Description of the plugin. - Maximum of KMM_MAXCCH_DESC - characters including the - terminating - NULL. Localized. Optional (set to - NULL if not provided) */ -#ifdef _WIN32 - HICON icon; /*!< Icon used to represent the - plugin. Optional. (set to NULL if - not provided) */ -#endif -} kmm_plugin_reg; - -/*! \brief Plugin information -*/ -typedef struct tag_kmm_plugin_info { - kmm_plugin_reg reg; /*!< Registration info */ - - khm_int32 state; /*!< Current status of the plugin. - One of ::_kmm_plugin_states */ - - khm_int32 failure_count; /*!< Number of recorded failures in - the plugin */ - FILETIME failure_time; /*!< Time of first recorded failure */ - khm_int32 failure_reason; /*!< The reason for the first recorded - failure */ - - kmm_plugin h_plugin; /*!< Handle to plugin */ - - khm_int32 flags; /*!< Flags for the plugin. Currently - this can only specify - ::KMM_PLUGIN_FLAG_DISABLED. */ -} kmm_plugin_info; - -/*! \brief The plugin is disabled - - This flag will be set in the \a flags field of the - ::kmm_plugin_info structure for a plugin that has been marked as - disabled. If the plugin is currently running, but marked as - disabled for future sessions, then this bit will be set in \a - flags , but the \a state of the plugin will indicate that the - plugin is running. - */ -#define KMM_PLUGIN_FLAG_DISABLED 0x00000400 - -/*! \name Plugin types -@{*/ -/*! \brief A credentials provider - - \see \ref pi_pt_cred for more information. - */ -#define KHM_PITYPE_CRED 1 - -/*! \brief A identity provider - - \see \ref pi_pt_cred for more information - */ -#define KHM_PITYPE_IDENT 2 - -/*! \brief A configuration provider - - \see \ref pi_pt_conf for more information. - */ -#define KHM_PITYPE_CONFIG 3 - -/*! \brief Undefined plugin type - - The plugin doesn't provide any credential type. - */ -#define KHM_PITYPE_MISC 4 - -/*@}*/ - -/*! \brief Plugin states */ -enum _kmm_plugin_states { - KMM_PLUGIN_STATE_FAIL_INIT = -6, /*!< Failed to initialize */ - KMM_PLUGIN_STATE_FAIL_UNKNOWN = -5, /*!< Failed due to unknown - reasons */ - KMM_PLUGIN_STATE_FAIL_MAX_FAILURE = -4, /*!< The plugin has - reached the maximum number - of failures and cannot be - initialized until the - failure count is reset */ - KMM_PLUGIN_STATE_FAIL_NOT_REGISTERED = -3, /*!< Failed because the - plugin was not registered - and automatic registration - failed. */ - KMM_PLUGIN_STATE_FAIL_DISABLED = -2,/*!< Failed because plugin was - disabled by the user. */ - KMM_PLUGIN_STATE_FAIL_LOAD = -1, /*!< The plugin failed to load - due to some unknown - reason. */ - KMM_PLUGIN_STATE_NONE = 0, /*!< Unknown state */ - KMM_PLUGIN_STATE_PLACEHOLDER, /*!< Placeholder. The plugin - hasn't been provided by - anyone yet, but the plugin - record has been created to - keep track of - dependencies. */ - KMM_PLUGIN_STATE_REG, /*!< The plugin is registered - but not initialized */ - KMM_PLUGIN_STATE_PREINIT, /*!< The plugin is in the - process of being - initialized */ - KMM_PLUGIN_STATE_HOLD, /*!< On hold. One or more - dependencies of this plugin - has not been resolved */ - KMM_PLUGIN_STATE_INIT, /*!< The plugin was initialized */ - KMM_PLUGIN_STATE_RUNNING, /*!< The plugin is running */ - KMM_PLUGIN_STATE_EXITED /*!< The plugin has been stopped. */ -}; - -/*! \brief Module registration */ -typedef struct tag_kmm_module_reg { - wchar_t * name; /*!< Identifier for the module */ - wchar_t * path; /*!< Full pathname to module - binary */ - - wchar_t * description; /*!< Description of module */ - - wchar_t * vendor; /*!< Vendor/copyright string */ - - wchar_t * support; /*!< Support URL/contact */ - - khm_int32 n_plugins; /*!< Number of plugins that are - active */ - kmm_plugin_reg * plugin_reg_info; /*!< Array of kmm_plugin_reg - records for each active - plugin */ -} kmm_module_reg; - -/*! \brief Module information record */ -typedef struct tag_kmm_module_info { - kmm_module_reg reg; /*!< Registration info */ - - khm_ui_4 language; /*!< Currently loaded langugage */ - - khm_int32 state; /*!< Current status of the - module */ - - khm_version file_version; /*!< File version for the - module */ - khm_version product_version; /*!< Product version for the - module */ - - khm_int32 failure_count; /*!< Number of times the module - has failed to load */ - FILETIME failure_time; /*!< Time of first recorded - failure */ - khm_int32 failure_reason; /*!< Reason for first failure. - One of the module status - values */ - - kmm_module h_module; /*!< Handle to the module. */ -} kmm_module_info; - -/*! \brief Module states -*/ -enum KMM_MODULE_STATES { - KMM_MODULE_STATE_FAIL_INCOMPAT=-12, /*!< The library containing - the module was not - compatible with this version - of NetIDMgr. */ - KMM_MODULE_STATE_FAIL_INV_MODULE=-11, /*!< The library containing - the module was invalid. */ - KMM_MODULE_STATE_FAIL_UNKNOWN=-10, /*!< Module could not be - loaded due to unknown - reasons. */ - KMM_MODULE_STATE_FAIL_MAX_FAILURE=-9,/*!< The module has failed - too many times already. Not - attempting to restart it - again */ - KMM_MODULE_STATE_FAIL_DUPLICATE=-8, /*!< An attempt was made to - load the same module - twice. */ - KMM_MODULE_STATE_FAIL_NOT_REGISTERED=-7, /*!< The module is not - found among the registered - module list */ - KMM_MODULE_STATE_FAIL_NO_PLUGINS=-6,/*!< The module provided no - plugins, or all the plugins - that are provided are - disabled */ - KMM_MODULE_STATE_FAIL_DISABLED=-5, /*!< Module is disabled and - cannot be loaded */ - KMM_MODULE_STATE_FAIL_LOAD=-4, /*!< The module failed to - initialize */ - KMM_MODULE_STATE_FAIL_INVALID=-3, /*!< The module was invalid. - Typically caused by the - required entrypoints not - being present */ - KMM_MODULE_STATE_FAIL_SIGNATURE=-2, /*!< The module failed to load - due to an unverifiable - signature */ - KMM_MODULE_STATE_FAIL_NOT_FOUND=-1, /*!< The module was not - found */ - KMM_MODULE_STATE_NONE=0, /*!< Unknown state. The handle - is possibly invalid */ - KMM_MODULE_STATE_PREINIT, /*!< The module is being - loaded. init_module() hasn't - been called yet */ - KMM_MODULE_STATE_INIT, /*!< In init_module() */ - KMM_MODULE_STATE_INITPLUG, /*!< Initializing plugins */ - KMM_MODULE_STATE_RUNNING, /*!< Running */ - KMM_MODULE_STATE_EXITPLUG, /*!< Currently exiting plugins */ - KMM_MODULE_STATE_EXIT, /*!< Currently exiting */ - KMM_MODULE_STATE_EXITED /*!< Exited */ -}; - -/*! \brief Start the Module Manager - - \note Only called by the NetIDMgr core. -*/ -KHMEXP void KHMAPI -kmm_init(void); - -/*! \brief Stop the Module Manager - - \note Only called by the NetIDMgr core. -*/ -KHMEXP void KHMAPI -kmm_exit(void); - -/*! \brief Return the plugin handle for the current plugin - - The returned handle represents the plugin which owns the current - thread. The returned handle must be released by calling - kmm_release_plugin(). Returns NULL if the current thread is not - owned by any plugin. - */ -KHMEXP kmm_plugin KHMAPI -kmm_this_plugin(void); - -/*! \brief Return the module handle for the current module - - The returned handle represents the module which owns the current - thread. The returned handle must be released by calling - kmm_release_module() -*/ -KHMEXP kmm_module KHMAPI -kmm_this_module(void); - -/*! \name Flags for kmm_load_module() -@{*/ -/*!\brief Load synchronously - - If this flag is set, then the function waits for the module to be - loaded. The default is to load the module asynchronously. - - When loading a module asynchronously, the kmm_load_module() - function returns KHM_ERROR_SUCCESS and exits without waiting for - the module to load. If \a result is not NULL, it will receive a - valid handle to the module. - - When loading a module synchronously, kmm_load_module() will wait - for the module to completely load. If it fails to load properly, - it will return an error code and set \a result to NULL. -*/ -#define KMM_LM_FLAG_SYNC 1 - -/*! \brief Do not load - - Indicates that the module shouldn't actually be loaded. If the - specified module name identifies a module that has already been - loaded, then the function returns a held handle to the existing - module (use kmm_release_module() to free the handle). Otherwise, - the function returns KHM_ERROR_NOT_FOUND. -*/ -#define KMM_LM_FLAG_NOLOAD 2 -/*@}*/ - -/*! \brief Load a module - - The \a modulename parameter specifies a module to load. Depending - on the configuration, not all of the plugins that are provided by - the module may be loaded. If no plugins are successfully loaded, - the module will be immediately unloaded. - - If the module is currently loaded or is being loaded, then a valid - handle to the existing module is returned. - - When called with KMM_LM_FLAG_SYNC, the function does not return - until the module and the associated plugins are all initialized, - or an error occurs. - - If the KMM_LM_FLAG_NOLOAD flag is set, then a handle to an - existing instance of the module will be returned. If the module - hasn't been loaded yet, then no handle is returned and the - function returns KHM_ERROR_NOT_FOUND. - - See the associated NetIDMgr Module Manager documentation on the - sequence of events associated with loading a module. - - \param[in] modulename Name of the module. The module should have - been registered under this name prior to the call. - \param[in] flags Combination of KMM_LM_FLAG_* - \param[out] result Receives a handle to the loaded module. If the - result is not required, set this to NULL. If \a result is not - NULL, and km_load_module() returns KHM_ERROR_SUCCESS, then - kmm_release_module() must be called to release the handle to - the module. Otherwise, \a result receives NULL. If a handle - is returned, it will be valid regardless of whether the module - fails to load or not. You can use kmm_get_module_state() to - query the progress of the loading process. See - ::KMM_LM_FLAG_SYNC. - - \retval KHM_ERROR_SUCCESS The call succeeded. If \a - KMM_LM_FLAG_SYNC was specified, this means that the module was - successfully loaded. Otherwise, it only means that the module - has been queued up for loading. Use kmm_get_module_state() to - determine if it was successfully loaded. If \a result is not - NULL, a valid handle is returned. - \retval KHM_ERROR_EXISTS The module is already loaded or has been - already queued for loading. If \a result is not NULL, a valid - handle to the existing module instance is returned. - \retval KHM_ERROR_NOT_FOUND If called with KMM_LM_FLAG_NOLOAD, - indicates that the module has not been loaded. Otherwise only - returned when called with KMM_LM_FLAG_SYNC. The module image - was not found. No handle is returned. - \retval KHM_ERROR_INVALID_SIGNATURE Only returned when called with - KMM_LM_FLAG_SYNC. The module was signed with an invalid - certificate. No handle is returned. - \retval KHM_ERROR_UNKNOWN Only returned when called with - KMM_LM_FLAG_SYNC. Some other error has occured. No handle is - returned. - - \see \ref pi_fw_pm_load - \see ::KMM_LM_FLAG_SYNC, ::KMM_LM_FLAG_NOLOAD -*/ -KHMEXP khm_int32 KHMAPI -kmm_load_module(wchar_t * modname, khm_int32 flags, kmm_module * result); - -/*! \brief Hold a handle to a module - - Use kmm_release_module() to release the hold. -*/ -KHMEXP khm_int32 KHMAPI -kmm_hold_module(kmm_module module); - -/*! \brief Release a handle to a module - - Release a held referece to a module that was returned in a call to - kmm_load_module(). -*/ -KHMEXP khm_int32 KHMAPI -kmm_release_module(kmm_module m); - -/*! \brief Query the state of a module - - When loading a module asynchronously you can query the state of - the loading process using this. The return value is a status - indicator. - - \return The return value is one of the ::KMM_MODULE_STATES - enumerations. -*/ -KHMEXP khm_int32 KHMAPI -kmm_get_module_state(kmm_module m); - -/*! \brief Unload a module - - See the associated NetIDMgr Module Manager documentation on the - sequence of events associated with unloading a module. - - \see \ref pi_fw_pm_unload -*/ -KHMEXP khm_int32 KHMAPI -kmm_unload_module(kmm_module module); - -/*! \brief Loads the default modules as specified in the configuration - - The configuration can specify the default set of modules to load. - This function dispatches the necessary message for loading these - modules and reutnrs. -*/ -KHMEXP khm_int32 KHMAPI -kmm_load_default_modules(void); - -/*! \brief Checks whether there are any pending loads - - Returns TRUE if there are modules still waiting to be loaded. -*/ -KHMEXP khm_boolean KHMAPI -kmm_load_pending(void); - -#ifdef _WIN32 - -/*! \brief Returns the Windows module handle from a handle to a NetIDMgr module. - Although it is possible to obtain the Windows module handle and - use it to call Windows API functions, it is not recommended to do - so. This is because that might cause the state of the module to - change in ways which are inconsistent from the internal data - structures that kmm maintains. - */ -KHMEXP HMODULE KHMAPI -kmm_get_hmodule(kmm_module m); -#endif - -/*! \brief Hold a plugin - - Obtains a hold on a plugin. The plugin handle will remain valid - until the hold is released with a call to kmm_release_plugin(). - No guarantees are made on the handle once the handle is released. - */ -KHMEXP khm_int32 KHMAPI -kmm_hold_plugin(kmm_plugin p); - -/*! \brief Release a plugin - - Releases a hold on a plugin obtained through a call to - kmm_hold_plugin(). The plugin handle should no longer be - considered valied once this is called. - */ -KHMEXP khm_int32 KHMAPI -kmm_release_plugin(kmm_plugin p); - -/*! \brief Provide a plugin - - This function must be called for each plugin that the module - provides. - - Note that this function returns immediately and does not - initialize the plugin. All plugins that are provided by a - module will be initialized once the init_module() function - returns. If the plugin has dependencies, it will be kept in a - held state until the plugins that it depends on are successfully - initialized. If the dependencies are not resolved (the dependent - plugins are not loaded), then plugin will not be initialized. - - If the plugin is not registered and \a plugin contains enough - information to perform the registration, then it will be - automatically registered. However, if the plugin is not - registered and cannot be registered using the provided - information, the plugin will not be initialized properly. Note - that automatic registration will always register the plugin in the - user configuration store. - - The \a name and \a msg_proc members of \a plugin are required to - have valid values. The \a icon member may optionally be - specified. The other fields can be specified if the plugin should - be automatically registered, however, the \a module field will be - ignored and will be determined by the \a module handle. - - \param[in] module Handle to this module that is providing the plugin. - \param[in] plugin A plugin descriptor. - - \retval KHM_ERROR_SUCCESS Succeeded. - \retval KHM_ERROR_INVALID_OPERATION The function was not called - during init_module() - \retval KHM_ERROR_INVALID_PARAM One or more parameters were invalid - \retval KHM_ERROR_DUPLICATE The plugin was already provided - - \note This can only be called when handing init_module() -*/ -KHMEXP khm_int32 KHMAPI -kmm_provide_plugin(kmm_module module, kmm_plugin_reg * plugin); - -/*! \brief Query the state of a plugin. - - \return One of ::_kmm_plugin_states -*/ -KHMEXP khm_int32 KHMAPI -kmm_get_plugin_state(wchar_t * plugin); - -/*! \defgroup kmm_reg Registration - - The functions for managing plugin and module registration. These - functions are also available as static linked libraries for use by - external applications which must register or unregister plugins or - modules. -@{*/ - -/*! \brief Obtain the configuration space for a named plugin - - Note that the named plugin does not have to actually exist. - Configuration spaces for plugins are based solely on the plugin - name and hence can be accessed regardless of whether the specific - plugin is loaded or not. - - \param[in] flags Controls the options for opening the - configuration space. If KHM_FLAG_CREATE is specified, then - the configuration space for the plugin named \a plugin wil be - created if it doesn't already exist. The \a flags parameter - is directly passed into a call to khc_open_space(). - - \param[in] plugin Name of the plugin. The name can not contain - slashes. - - \param[out] result Receives a configuration space handle. The - calling application should free the handle using - khc_close_space(). - - \see khc_open_space() - \see khc_close_space() - */ -KHMEXP khm_int32 KHMAPI -kmm_get_plugin_config(wchar_t * plugin, khm_int32 flags, khm_handle * result); - -/*! \brief Obtain the configuration space for a named module - - The named module does not have to actually exist. Configuration - spaces for modules are based on the basename of the module - (including the extension). - - \param[in] module Name of the module. - - \param[in] flags The flags used to call khc_open_space(). You can - use this to specify a particular configuration store if - needed. - - \param[out] result Receives the handle to a configuration space if - successful. Call khc_close_space() to close the handle. - - \see khc_open_space() - \see khc_close_space() -*/ -KHMEXP khm_int32 KHMAPI -kmm_get_module_config(wchar_t * module, khm_int32 flags, khm_handle * result); - -/*! \brief Retrieve a handle to the configuration space for plugins - - The configuration space for plugins is a container which holds the - configuration subspaces for all the plugins. This is the config - space which must be used to load a configuration space for a - plugin. - - \param[in] flags The flags to pass in to the call to - khc_open_space(). The flags can be used to select a specific - configuration store if needed. - - \param[out] result Receives a handle to the configuration - space. Call khc_close_space() to close the handle - - \see khc_open_space() - \see khc_close_space() - */ -KHMEXP khm_int32 KHMAPI -kmm_get_plugins_config(khm_int32 flags, khm_handle * result); - -/*! \brief Retrieve the handle to the configuration space for modules - - The configuration space for modules is a container which hold the - configuration subspaces for all the modules. Each module - registration ends up in this subspace. - - \param[in] flags The flags to pass in to the call to - khc_open_space(). The flags can be used to select a specific - configuration store if needed. - - \param[out] result Receives a handle to the configuration space. - Call khc_close_space() to close the handle. - - \see khc_open_space() - \see khc_close_space() - */ -KHMEXP khm_int32 KHMAPI -kmm_get_modules_config(khm_int32 flags, khm_handle * result); - -/*! \brief Return information about a loaded module - - The retrieves a block of information about a module. Refer to - ::kmm_module_info for information about the format of the returned - data. - - Note that the size of the required buffer is actually greater than - the size of the ::kmm_module_info structure and accomodates the - ::kmm_plugin_info structures and strings required to complete the - information block. - - Call the function with \a buffer set to NULL and \a cb_buffer - pointing at a khm_size variable to obtain the required size of the - buffer. - - \param[in] module_name Name of a module - \param[in] flags Flags indicating which types of information to - return - \param[out] buffer Points to a buffer that recieves information. - Set this to NULL if only the size of the buffer is required. - \param[in,out] On entry, contains the size of the buffer pointed - to by \a buffer if \a buffer is not NULL. On exit, contains - the required size of the buffer or the number of actual bytes - copied. - - \retval KHM_ERROR_SUCCESS The requested information was copied - \retval KHM_ERROR_INVALID_PARAM One of the parameters was invalid - \retval KHM_ERROR_TOO_LONG The buffer was not large enough or was - NULL. The number of bytes requied is in \a cb_buffer. - \retval KHM_ERROR_NOT_FOUND The specified module is not a - registered module. - */ -KHMEXP khm_int32 KHMAPI -kmm_get_module_info(wchar_t * module_name, khm_int32 flags, - kmm_module_info * buffer, khm_size * cb_buffer); - -/*! \brief Get information about a module - - Similar to kmm_get_module_info(), but uses a module handle instead - of a name, and uses internal buffers for providing string fields. - - The information that is returned should be freed using a call to - kmm_release_module_info_i(). - - \see kmm_release_module_info_i() - */ -KHMEXP khm_int32 KHMAPI -kmm_get_module_info_i(kmm_module module, kmm_module_info * info); - -/*! \brief Release module information - - Releases the information returned by a previous call to - kmm_get_module_info_i(). The contents of the ::kmm_module_info - structure should not have been modified in any way between calling - kmm_get_module_info_i() and kmm_release_module_info_i(). - */ -KHMEXP khm_int32 KHMAPI -kmm_release_module_info_i(kmm_module_info * info); - -/*! \brief Obtain information about a plugin - - Retrieve a block of information about a plugin. See - ::kmm_plugin_info for details about what information can be - returned. Note that some fields may not be available if the - module is not loaded. - - Note that the size of the required buffer is greater than the size - of the ::kmm_plugin_info structure and accounts for strings as - well. Call kmm_get_plugin_info() with \a buffer set to NULL and - \a cb_buffer set to point to a variable of type \a khm_size to - obtain the required size of the structure. - - \param[in] plugin_name Name of the plugin - \param[out] buffer The buffer to receive the plugin information. - Set to \a NULL if only the size of the buffer is required. - \param[in,out] cb_buffer On entry, points to variable that - specifies the size of the buffer pointed to by \a buffer is \a - buffer is not \a NULL. On exit, holds the number of bytes - copied or the required size of the buffer. - - \retval KHM_ERROR_SUCCESS The requested information was - successfully copied to the \a buffer - \retval KHM_ERROR_TOO_LONG The buffer was either \a NULL or - insufficient to hold the requested information. The required - size of the buffer was stored in \a cb_buffer - \retval KHM_ERROR_INVALID_PARAM One or more parameters were - invlaid. - \retval KHM_ERROR_NOT_FOUND The specified plugin was not found - among the registered plugins. -*/ -KHMEXP khm_int32 KHMAPI -kmm_get_plugin_info(wchar_t * plugin_name, - kmm_plugin_info * buffer, - khm_size * cb_buffer); - -/*! \brief Obtain information about a plugin using a plugin handle - - Similar to kmm_get_plugin_info() but uses a plugin handle instead - of a plugin name. If the call is successful, the \a info - structure will be filled with information about the plugin. The - returned info should not be modified in any way and may contain - pointers to internal buffers. - - The returned information must be released with a call to - kmm_release_plugin_info_i(). - */ -KHMEXP khm_int32 KHMAPI -kmm_get_plugin_info_i(kmm_plugin p, kmm_plugin_info * info); - -/*! \brief Release plugin information returned by kmm_get_plugin_info_i - - The information returned by kmm_get_plugin_info_i() should not be - modified in any way before calling kmm_release_plugin_info_i(). - Once the call completes, the contents of \a info will be - initialized to zero. - */ -KHMEXP khm_int32 KHMAPI -kmm_release_plugin_info_i(kmm_plugin_info * info); - -/*! \brief Enumerates plugins - - Enumerates through known plugins. This list may not include - plugins which were not loaded by NetIDMgr in this session. - - If the call is successful, a handle to the next plugin in the list - will be placed in \a p_next. The returned handle must be freed - with a call to kmm_release_plugin(). - - If the \a p parameter is set to NULL, then the first plugin handle - will be placed in \a p_next. The handles will not be returned in - any specific order. In addition, the enumeration may not include - all known plugins if the list of plugins changes during - enumeration. - */ -KHMEXP khm_int32 KHMAPI -kmm_get_next_plugin(kmm_plugin p, kmm_plugin * p_next); - -/*! \brief Enables or disables a plugin - - This function currently does not take effect immediately. However - it marks the plugin as enabled or disabled so that the next time - NetIDMgr starts, the module manager will act accordingly. - - \param[in] p Handle to the plugin - - \param[in] enable If non-zero, the plugin will be marked as - enabled. Otherwise the plugin will be marked as disabled. - */ -KHMEXP khm_int32 KHMAPI -kmm_enable_plugin(kmm_plugin p, khm_boolean enable); - -/*! \brief Register a plugin - - The \a plugin member defines the plugin to be registered. The \a - msg_proc and \a icon members of the structure are ignored. - - At the time kmm_register_plugin() is called, the module specified - by \a module member of the \a plugin parameter must have been already - registered. Otherwise the function call fails. - - If the plugin has already been registered, then all the fields in - the plugin registration will be updated to be in sync with the - information provided in the \a plugin parameter. The failure - counts and associated statistics will not be reset when the - configuration information is updated. - - If the plugin has not been registered, the a new registration - entry is created in the configuration space indicated by the \a - config_flags parameter. In addition, the plugin will be added to - the list of plugins associated with the owning module. - - Note that the module that owns the plugin must be registered in - the same configuration store as the plugin. - - \param[in] plugin Registration info for the plugin. The \a - msg_proc and \a icon members are ignored. All other fields - are required. The \a description member should be localized - to the system locale when registering a plugin in the machine - configuration store and should be localized to the user locale - when registering a plugin in the user configuration store. - \param[in] config_flags Flags for the configuration provider. - These flags are used verbatim to call khc_open_space(), hence - they may be used to pick whether or not the registration is - per machine or per user. - - \see kmm_register_module() - */ -KHMEXP khm_int32 KHMAPI -kmm_register_plugin(kmm_plugin_reg * plugin, khm_int32 config_flags); - -/*! \brief Register a module - - The \a module parameter specifies the parameters for the module - registration. - - The \a plugin_info member should point to an array of - ::kmm_plugin_info structures unless the \a n_plugins member is - zero, in which case \a plugin_info can be \a NULL. Plugins can be - registered separately using kmm_register_plugin(). - - \param[in] module Information about the module. The name and path - fields are required. The \a plugin_info field can only be \a - NULL if \a n_plugins is zero. - - \param[in] config_flags Flags used to call khc_open_space(). This - can be used to choose the configuration store in which the - module registration will be performed. - */ -KHMEXP khm_int32 KHMAPI -kmm_register_module(kmm_module_reg * module, khm_int32 config_flags); - -/*! \brief Unregister a plugin - - Registration information associated with the plugin will be - removed. In addtion, the plugin will be removed from the list of - plugins provided by the owner module. - - \param[in] plugin Names the plugin to be removed - \param[in] config_flags Flags used to call khc_open_space(). Can - be used to choose the configuraiton store that is affected by - the call. - - \note kmm_unregister_plugin() has no effect on whether the plugin - is loaded or not. The caller must make sure that the plugin - is unloaded and the associated module is either also unloaded - or in a state where the plugin can be unregistered. - */ -KHMEXP khm_int32 KHMAPI -kmm_unregister_plugin(wchar_t * plugin, khm_int32 config_flags); - -/*! \brief Unregister a module - - Registration information associated with the module as well as all - the plugins provided by the module will be removed from the - configuration store. - - \param[in] module Names the module to be removed - - \param[in] config_flags Flags used to call khc_open_space(). Can - be used to choose the configuration store affected by the - call. - - \note kmm_unregister_module() has no effect on the loaded state of - the module. The caller should make sure that the module is - unloaded and in a state where it can be unregistered. - */ -KHMEXP khm_int32 KHMAPI -kmm_unregister_module(wchar_t * module, khm_int32 config_flags); - -/*@}*/ /* kmm_reg */ - -/*! \defgroup kmm_loc Internationalization support - - See \ref pi_localization for more information about - internationalization. - -@{*/ - -/*! \brief Locale descriptor record - - See kmm_set_locale() -*/ -typedef struct tag_kmm_module_locale { - khm_ui_4 language; /*!< A language ID. On Windows, you can use the - MAKELANGID macro to generate this value. */ - wchar_t * filename; /*!< The filename corresponding to this language. - Use NULL to indicate that resources for this - language are to be found in the main module. */ - khm_int32 flags; /*!< Flags. Combination of KMM_MLOC_FLAG_* */ -} kmm_module_locale; - -#define LOCALE_DEF(language_id, filename, flags) {language_id, filename, flags} - -/*! \brief Default (fallback) locale -*/ -#define KMM_MLOC_FLAG_DEFAULT 1 - - -/*! \brief Sets the locale for a loaded module. - - The given locale records are searched in the given order until a - locale that matches the current user locale is found. If no - locales match, then the first locale with the - ::KMM_MLOC_FLAG_DEFAULT flag set will be loaded. If no locales - have that flag set, then the first locale is loaded. - - You can obtain a handle to the loaded library using - kmm_get_resource_hmodule(). This function does not return until a - matched library is loaded. - - Note that the ::kmm_module_locale structure only specifies a - module name for the resource module. This resource module must - exist in the same directory as the \a module. - - \param[in] module The module handle - \param[in] locales An array of ::kmm_module_locale objects - \param[in] n_locales The number of objects in the array pointed to by \a locales - - \retval KHM_ERROR_SUCCESS Succeeded. - \retval KHM_ERROR_NOT_FOUND A matching locale resource library was not found. - \retval KHM_ERROR_INVALID_OPERATION The function was called on a module which is currently not being initalized. - - \see \ref pi_localization - \see kmm_get_resource_hmodule() - - \note This can only be called when handing init_module() -*/ -KHMEXP khm_int32 KHMAPI -kmm_set_locale_info(kmm_module module, - kmm_module_locale * locales, - khm_int32 n_locales); - -#ifdef _WIN32 - -/*! \brief Return the Windows module handle of the resource library of a NetIDMgr module. - - NetIDMgr allows the specification of an alternate resource library - that will be used to load localized resources from. This function - returns a handle to this library. - - While you can use the convenience macros to access resources in a - localization library using the module handle, it is recommended, - for performance reasons, to use this function to obtain the handle - to the resource library and then use that handle in calls to - LoadString, LoadImage etc. directly. -*/ -KHMEXP HMODULE KHMAPI -kmm_get_resource_hmodule(kmm_module m); - -/*! \name Convenience Macros -@{*/ -/*! \brief Convenience macro for using calling LoadAccelerators using a module handle - - \param[in] module A handle to a loaded module. The corresponding resource - module will be located through a call to kmm_get_resource_hmodule() -*/ -#define kmm_LoadAccelerators(module, lpTableName) \ - (LoadAccelerators(kmm_get_resource_hmodule(module), lpTableName)) - -/*! \brief Convenience macro for using calling LoadBitmap using a module handle - - \param[in] module A handle to a loaded module. The corresponding resource - module will be located through a call to kmm_get_resource_hmodule() -*/ -#define kmm_LoadBitmap(module, lpBitmapName) \ - (LoadBitmap(kmm_get_resource_hmodule(module), lpBitmapName)) - -/*! \brief Convenience macro for using calling LoadImage using a module handle - - \param[in] module A handle to a loaded module. The corresponding resource - module will be located through a call to kmm_get_resource_hmodule() -*/ -#define kmm_LoadImage(module, lpszName, uType, cxDesired, cyDesired, fuLoad) \ - (LoadImage(kmm_get_resource_hmodule(module), lpszName, uType, cxDesired, cyDesired, fuLoad)) - -/*! \brief Convenience macro for using calling LoadCursor using a module handle - - \param[in] module A handle to a loaded module. The corresponding resource - module will be located through a call to kmm_get_resource_hmodule() -*/ -#define kmm_LoadCursor(module, lpCursorName) \ - (LoadCursor(kmm_get_resource_hmodule(module), lpCursorName)) - -/*! \brief Convenience macro for using calling LoadIcon using a module handle - - \param[in] module A handle to a loaded module. The corresponding resource - module will be located through a call to kmm_get_resource_hmodule() -*/ -#define kmm_LoadIcon(module, lpIconName) \ - (LoadIcon(kmm_get_resource_hmodule(module), lpIconName)) - -/*! \brief Convenience macro for using calling LoadMenu using a module handle - - \param[in] module A handle to a loaded module. The corresponding resource - module will be located through a call to kmm_get_resource_hmodule() -*/ -#define kmm_LoadMenu(module, lpMenuName) \ - (LoadMenu(kmm_get_resource_hmodule(module), lpMenuName)) - -/*! \brief Convenience macro for using calling LoadString using a module handle - - \param[in] module A handle to a loaded module. The corresponding resource - module will be located through a call to kmm_get_resource_hmodule() -*/ -#define kmm_LoadString(module, uID, lpBuffer, nBufferMax) \ - (LoadString(kmm_get_resource_hmodule(module), uID, lpBuffer, nBufferMax)) -/*@}*/ /* Convenience Macros */ -#endif -/*@}*/ /* group kmm_loc */ -/*@}*/ /* group kmm */ -#endif diff --git a/src/windows/identity/kmm/kmm_module.c b/src/windows/identity/kmm/kmm_module.c deleted file mode 100644 index bfa984af5..000000000 --- a/src/windows/identity/kmm/kmm_module.c +++ /dev/null @@ -1,676 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<kmminternal.h> -#include<netidmgr_version.h> -#include<assert.h> - -/* should only be accessed from the registrar thread */ -khm_size kmm_active_modules = 0; - -kmm_module_i * kmmint_get_module_i(wchar_t * name) -{ - kmm_module_i * m; - size_t sz; - - if(FAILED(StringCbLength(name, KMM_MAXCB_NAME, &sz))) - return NULL; - sz += sizeof(wchar_t); - - EnterCriticalSection(&cs_kmm); - m = (kmm_module_i *) hash_lookup(hash_modules, (void *) name); - - if(m == NULL) { - m = PMALLOC(sizeof(kmm_module_i)); - ZeroMemory(m, sizeof(kmm_module_i)); - - m->magic = KMM_MODULE_MAGIC; - m->name = PMALLOC(sz); - StringCbCopy(m->name, sz, name); - m->state = KMM_MODULE_STATE_NONE; - - hash_add(hash_modules, (void *) m->name, (void *) m); - LPUSH(&kmm_all_modules, m); - } - LeaveCriticalSection(&cs_kmm); - - return m; -} - -kmm_module_i * kmmint_find_module_i(wchar_t * name) -{ - kmm_module_i * m; - - EnterCriticalSection(&cs_kmm); - m = (kmm_module_i *) hash_lookup(hash_modules, (void *) name); - LeaveCriticalSection(&cs_kmm); - - return m; -} - -/* called with cs_kmm held */ -void kmmint_free_module(kmm_module_i * m) -{ - m->magic = 0; - - hash_del(hash_modules, m->name); - LDELETE(&kmm_all_modules, m); - - if (m->name) - PFREE(m->name); - - if (m->description) - PFREE(m->description); - - if (m->path) - PFREE(m->path); - - if (m->vendor) - PFREE(m->vendor); - - if (m->support) - PFREE(m->support); - - if (m->version_info) - PFREE(m->version_info); - - PFREE(m); -} - -KHMEXP khm_int32 KHMAPI kmm_hold_module(kmm_module module) -{ - if(!kmm_is_module(module)) - return KHM_ERROR_INVALID_PARAM; - EnterCriticalSection(&cs_kmm); - kmm_module_from_handle(module)->refcount++; - LeaveCriticalSection(&cs_kmm); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI kmm_release_module(kmm_module vm) -{ - kmm_module_i * m; - - if(!kmm_is_module(vm)) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_kmm); - m = kmm_module_from_handle(vm); - if(! --(m->refcount)) - { - /* note that a 0 ref count means that there are no active - plugins */ - kmmint_free_module(m); - } - LeaveCriticalSection(&cs_kmm); - return KHM_ERROR_SUCCESS; -} - -khm_int32 -kmmint_check_api_version(DWORD v) { - /* for now, we allow API versions in the range - KH_VERSION_API_MINCOMPAT through KH_VERSION_API, inclusive. In - the future when we are swamped with so much time that we don't - know what to do with it, we can actually parse the - apiversion.txt file and create a compatibility table which we - can check against the functions used by the module and decide - whether or not it is compatible. */ - - if (v < KH_VERSION_API_MINCOMPAT || - v > KH_VERSION_API) - return KHM_ERROR_INCOMPATIBLE; - else - return KHM_ERROR_SUCCESS; -} - -struct lang_code { - WORD language; - WORD codepage; -}; - -khm_int32 -kmmint_read_module_info(kmm_module_i * m) { - /* the only fields we can count on at this point are m->name and - m->path */ - DWORD t; - size_t cb; - WORD lang; - khm_int32 rv = KHM_ERROR_SUCCESS; - struct lang_code *languages; - int n_languages; - int i; - wchar_t resname[256]; /* the resource names are a lot shorter */ - wchar_t * r; - VS_FIXEDFILEINFO *vff; - UINT c; - - assert(m->name); - assert(m->path); - - t = TRUE; - cb = GetFileVersionInfoSize(m->path, - &t); - /* if successful, cb gets the size in bytes of the version info - structure and sets t to zero */ - if (t) { - return KHM_ERROR_NOT_FOUND; - } else if (cb == 0) { - _report_mr1(KHERR_WARNING, MSG_RMI_NOT_FOUND, _dupstr(m->path)); - return KHM_ERROR_INVALID_PARAM; - } - - if (m->version_info) { - PFREE(m->version_info); - m->version_info = NULL; - } - - m->version_info = PMALLOC(cb); -#ifdef DEBUG - assert(m->version_info); -#endif - - if(!GetFileVersionInfo(m->path, - t, (DWORD) cb, m->version_info)) { - rv = KHM_ERROR_NOT_FOUND; - _report_mr1(KHERR_WARNING, MSG_RMI_NOT_FOUND, _dupstr(m->path)); - _location(L"GetFileVersionInfo"); - goto _cleanup; - } - - if(!VerQueryValue(m->version_info, - L"\\VarFileInfo\\Translation", - (LPVOID*) &languages, - &c)) { - rv = KHM_ERROR_INVALID_PARAM; - _report_mr1(KHERR_WARNING, MSG_RMI_NO_TRANS, _dupstr(m->path)); - _location(L"VerQueryValue"); - goto _cleanup; - } - - n_languages = (int) (c / sizeof(*languages)); - - /* Try searching for the user's default language first */ - lang = GetUserDefaultLangID(); - for (i = 0; i < n_languages; i++) { - if(languages[i].language == lang) - break; - } - - /* If not, try the system default */ - if (i >= n_languages) { - lang = GetSystemDefaultLangID(); - for (i=0; i<n_languages; i++) - if (languages[i].language == lang) - break; - } - - /* Then try EN_US */ - if (i >= n_languages) { - lang = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US); - for (i=0; i<n_languages; i++) - if (languages[i].language == lang) - break; - } - - /* Language neutral? */ - if (i >= n_languages) { - lang = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL); - for (i=0; i<n_languages; i++) - if (languages[i].language == lang) - break; - } - - /* Just use the first one? */ - if (i >= n_languages) { - i = 0; - } - - if (i >= n_languages) { - rv = KHM_ERROR_INVALID_PARAM; - _report_mr0(KHERR_WARNING, MSG_RMI_NO_LOCAL); - goto _cleanup; - } - - /* check module name */ - StringCbPrintf(resname, sizeof(resname), - L"\\StringFileInfo\\%04x%04x\\" TEXT(NIMV_MODULE), - languages[i].language, - languages[i].codepage); - - if (!VerQueryValue(m->version_info, - resname, (LPVOID *) &r, &c)) { - rv = KHM_ERROR_INVALID_PARAM; - _report_mr1(KHERR_WARNING, MSG_RMI_RES_MISSING, - _cstr(TEXT(NIMV_MODULE))); - goto _cleanup; - } - - if (c > KMM_MAXCB_NAME || - FAILED(StringCbLength(r, KMM_MAXCB_NAME, &cb))) { - rv = KHM_ERROR_INVALID_PARAM; - _report_mr1(KHERR_WARNING, MSG_RMI_RES_TOO_LONG, - _cstr(TEXT(NIMV_MODULE))); - goto _cleanup; - } - - if (wcscmp(r, m->name)) { - rv = KHM_ERROR_INVALID_PARAM; - _report_mr2(KHERR_WARNING, MSG_RMI_MOD_MISMATCH, - _dupstr(r), _dupstr(m->name)); - goto _cleanup; - } - - /* check API version */ - StringCbPrintf(resname, sizeof(resname), - L"\\StringFileInfo\\%04x%04x\\" TEXT(NIMV_APIVER), - languages[i].language, - languages[i].codepage); - - if (!VerQueryValue(m->version_info, - resname, (LPVOID *) &r, &c)) { - rv = KHM_ERROR_INVALID_PARAM; - _report_mr1(KHERR_WARNING, MSG_RMI_RES_MISSING, - _cstr(TEXT(NIMV_APIVER))); - goto _cleanup; - } - - if (c > KMM_MAXCB_NAME || - FAILED(StringCbLength(r, KMM_MAXCB_NAME, &cb))) { - rv = KHM_ERROR_INVALID_PARAM; - _report_mr1(KHERR_WARNING, MSG_RMI_RES_TOO_LONG, - _cstr(TEXT(NIMV_APIVER))); - goto _cleanup; - } - - t = wcstol(r, NULL, 10); - - rv = kmmint_check_api_version(t); - - if (KHM_FAILED(rv)) { - _report_mr2(KHERR_WARNING, MSG_RMI_API_MISMATCH, - _int32(t), _int32(KH_VERSION_API)); - goto _cleanup; - } - - /* Looks good. Now load the description, copyright, support URI - and file versions */ - if (m->description) { - PFREE(m->description); - m->description = NULL; - } - - StringCbPrintf(resname, sizeof(resname), - L"\\StringFileInfo\\%04x%04x\\FileDescription", - languages[i].language, - languages[i].codepage); - - if (!VerQueryValue(m->version_info, - resname, (LPVOID *) &r, &c)) { - rv = KHM_ERROR_INVALID_PARAM; - _report_mr1(KHERR_WARNING, MSG_RMI_RES_MISSING, - _cstr(L"FileDescription")); - goto _cleanup; - } - - if (c > KMM_MAXCB_DESC || - FAILED(StringCbLength(r, KMM_MAXCB_DESC, &cb))) { - rv = KHM_ERROR_INVALID_PARAM; - _report_mr1(KHERR_WARNING, MSG_RMI_RES_TOO_LONG, - _cstr(L"FileDescription")); - goto _cleanup; - } - - cb += sizeof(wchar_t); - - m->description = PMALLOC(cb); -#ifdef DEBUG - assert(m->description); -#endif - StringCbCopy(m->description, cb, r); - - /* on to the support URI */ - if (m->support) { - PFREE(m->support); - m->support = NULL; - } - - StringCbPrintf(resname, sizeof(resname), - L"\\StringFileInfo\\%04x%04x\\" TEXT(NIMV_SUPPORT), - languages[i].language, - languages[i].codepage); - - if (!VerQueryValue(m->version_info, - resname, (LPVOID *) &r, &c)) { - rv = KHM_ERROR_INVALID_PARAM; - _report_mr1(KHERR_WARNING, MSG_RMI_RES_MISSING, - _cstr(TEXT(NIMV_SUPPORT))); - goto _cleanup; - } - - if (c > KMM_MAXCB_SUPPORT || - FAILED(StringCbLength(r, KMM_MAXCB_SUPPORT, &cb))) { - rv = KHM_ERROR_INVALID_PARAM; - _report_mr1(KHERR_WARNING, MSG_RMI_RES_TOO_LONG, - _cstr(TEXT(NIMV_SUPPORT))); - goto _cleanup; - } - - cb += sizeof(wchar_t); - - m->support = PMALLOC(cb); -#ifdef DEBUG - assert(m->support); -#endif - StringCbCopy(m->support, cb, r); - - /* the vendor/copyright */ - if (m->vendor) { - PFREE(m->vendor); - m->vendor = NULL; - } - - StringCbPrintf(resname, sizeof(resname), - L"\\StringFileInfo\\%04x%04x\\LegalCopyright", - languages[i].language, - languages[i].codepage); - - if (!VerQueryValue(m->version_info, - resname, (LPVOID *) &r, &c)) { - rv = KHM_ERROR_INVALID_PARAM; - _report_mr1(KHERR_WARNING, MSG_RMI_RES_MISSING, - _cstr(L"LegalCopyright")); - goto _cleanup; - } - - if (c > KMM_MAXCB_SUPPORT || - FAILED(StringCbLength(r, KMM_MAXCB_SUPPORT, &cb))) { - rv = KHM_ERROR_INVALID_PARAM; - _report_mr1(KHERR_WARNING, MSG_RMI_RES_TOO_LONG, - _cstr(L"LegalCopyright")); - goto _cleanup; - } - - cb += sizeof(wchar_t); - - m->vendor = PMALLOC(cb); -#ifdef DEBUG - assert(m->vendor); -#endif - StringCbCopy(m->vendor, cb, r); - - if (!VerQueryValue(m->version_info, - L"\\", - (LPVOID *) &vff, &c) || - c != sizeof(*vff)) { - - rv = KHM_ERROR_INVALID_PARAM; - _report_mr1(KHERR_WARNING, MSG_RMI_RES_MISSING, - _cstr(L"Fixed Version Info")); - goto _cleanup; - } - - m->file_version.major = HIWORD(vff->dwFileVersionMS); - m->file_version.minor = LOWORD(vff->dwFileVersionMS); - m->file_version.patch = HIWORD(vff->dwFileVersionLS); - m->file_version.aux = LOWORD(vff->dwFileVersionLS); - - m->prod_version.major = HIWORD(vff->dwProductVersionMS); - m->prod_version.minor = LOWORD(vff->dwProductVersionMS); - m->prod_version.patch = HIWORD(vff->dwProductVersionLS); - m->prod_version.aux = LOWORD(vff->dwProductVersionLS); - - rv = KHM_ERROR_SUCCESS; - - _cleanup: - if (KHM_FAILED(rv)) { - if (m->version_info) { - PFREE(m->version_info); - m->version_info = NULL; - } - } - - return rv; -} - -KHMEXP khm_int32 KHMAPI kmm_load_module(wchar_t * modname, - khm_int32 flags, - kmm_module * result) -{ - kmm_module_i * m = NULL; - kmm_module_i * mi; - size_t cbsize; - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(FAILED(StringCbLength(modname, KMM_MAXCB_NAME, &cbsize))) - return KHM_ERROR_INVALID_PARAM; - cbsize += sizeof(wchar_t); - - EnterCriticalSection(&cs_kmm); - mi = kmmint_find_module_i(modname); - - if(mi != NULL) { - kmm_hold_module(kmm_handle_from_module(mi)); - /* check if the module has either failed to load either or if - it has been terminated. If so, we try once again to load the - module. */ - if(!(flags & KMM_LM_FLAG_NOLOAD) && - (mi->state < 0 || mi->state == KMM_MODULE_STATE_EXITED)) - { - mi->state = KMM_MODULE_STATE_PREINIT; - } - } - LeaveCriticalSection(&cs_kmm); - - if(flags & KMM_LM_FLAG_NOLOAD) { - if(result) - *result = mi; - else if(mi) - kmm_release_module(kmm_handle_from_module(mi)); - - return (mi)? KHM_ERROR_SUCCESS: KHM_ERROR_NOT_FOUND; - } - - if(mi) { - m = mi; - } else { - m = kmmint_get_module_i(modname); - m->state = KMM_MODULE_STATE_PREINIT; - kmm_hold_module(kmm_handle_from_module(m)); - } - - /* the module is already running or is already being - worked on by the registrar */ - if(m->state != KMM_MODULE_STATE_PREINIT) { - if(result) - *result = kmm_handle_from_module(m); - else - kmm_release_module(kmm_handle_from_module(m)); - - return KHM_ERROR_EXISTS; - } - - kmmint_add_to_module_queue(); - - if(flags & KMM_LM_FLAG_SYNC) { - kmm_hold_module(kmm_handle_from_module(m)); - kmq_send_message(KMSG_KMM, - KMSG_KMM_I_REG, - KMM_REG_INIT_MODULE, - (void*) m); - if(m->state <= 0) { - /* failed to load ? */ - if(m->state == KMM_MODULE_STATE_FAIL_NOT_FOUND) - rv = KHM_ERROR_NOT_FOUND; - else if(m->state == KMM_MODULE_STATE_FAIL_SIGNATURE) - rv = KHM_ERROR_INVALID_SIGNATURE; - else - rv = KHM_ERROR_UNKNOWN; - - kmm_release_module(kmm_handle_from_module(m)); - if(result) - *result = NULL; - } else { - if(result) - *result = kmm_handle_from_module(m); - else - kmm_release_module(kmm_handle_from_module(m)); - } - } else { - kmm_hold_module(kmm_handle_from_module(m)); - kmq_post_message(KMSG_KMM, - KMSG_KMM_I_REG, - KMM_REG_INIT_MODULE, - (void*) m); - if(result) - *result = kmm_handle_from_module(m); - else - kmm_release_module(kmm_handle_from_module(m)); - } - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kmm_get_module_state(kmm_module m) -{ - if(!kmm_is_module(m)) - return KMM_MODULE_STATE_NONE; - else - return kmm_module_from_handle(m)->state; -} - -KHMEXP khm_int32 KHMAPI -kmm_get_module_info_i(kmm_module vm, kmm_module_info * info) { - kmm_module_i * m; - khm_int32 rv; - - EnterCriticalSection(&cs_kmm); - if (!kmm_is_module(vm) || !info) - rv = KHM_ERROR_INVALID_PARAM; - else { - m = kmm_module_from_handle(vm); - - ZeroMemory(info, sizeof(*info)); - - info->reg.name = m->name; - info->reg.path = m->path; - info->reg.vendor = m->vendor; - - info->reg.n_plugins = m->plugin_count; - - info->state = m->state; - - info->h_module = vm; - - info->file_version = m->file_version; - info->product_version = m->prod_version; - kmm_hold_module(vm); - - rv = KHM_ERROR_SUCCESS; - } - LeaveCriticalSection(&cs_kmm); - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kmm_release_module_info_i(kmm_module_info * info) { - if (info->h_module) - kmm_release_module(info->h_module); - - ZeroMemory(info, sizeof(*info)); - - return KHM_ERROR_SUCCESS; -} - - -KHMEXP khm_int32 KHMAPI -kmm_unload_module(kmm_module module) { - - if(!kmm_is_module(module)) - return KHM_ERROR_INVALID_PARAM; - - kmm_hold_module(module); - kmq_post_message(KMSG_KMM, - KMSG_KMM_I_REG, - KMM_REG_EXIT_MODULE, - (void *) kmm_module_from_handle(module)); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -kmm_load_default_modules(void) { - khm_handle csm = NULL; - khm_handle cs_mod = NULL; - khm_int32 rv; - wchar_t buf[KMM_MAXCCH_NAME]; - khm_size s; - - rv = kmm_get_modules_config(0, &csm); - if(KHM_FAILED(rv)) - return rv; - - _begin_task(KHERR_CF_TRANSITIVE); - _report_mr0(KHERR_NONE, MSG_LOAD_DEFAULT); - _describe(); - - kmmint_add_to_module_queue(); - - while(KHM_SUCCEEDED(khc_enum_subspaces(csm, cs_mod, &cs_mod))) { - - s = sizeof(buf); - if (KHM_FAILED(khc_get_config_space_name(cs_mod, buf, &s))) - continue; - - /* check for schema subspace. This is not an actual module. */ - if (!wcscmp(buf, L"_Schema")) - continue; - - kmm_load_module(buf, 0, NULL); - } - - kmmint_remove_from_module_queue(); - - if(csm) - khc_close_space(csm); - - _end_task(); - - return rv; -} - -#ifdef _WIN32 -KHMEXP HMODULE KHMAPI -kmm_get_hmodule(kmm_module m) -{ - if(!kmm_is_module(m)) - return NULL; - else - return kmm_module_from_handle(m)->h_module; -} -#endif diff --git a/src/windows/identity/kmm/kmm_plugin.c b/src/windows/identity/kmm/kmm_plugin.c deleted file mode 100644 index e44d59862..000000000 --- a/src/windows/identity/kmm/kmm_plugin.c +++ /dev/null @@ -1,413 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<kmminternal.h> - -/* Called with no locks held to get a kmm_plugin_i structure - that matches the name. First we look in the hash table, and - if one isn't found, we create an empty one. -*/ - -kmm_plugin_i * -kmmint_get_plugin_i(wchar_t * name) -{ - kmm_plugin_i * p; - size_t cb; - - if(FAILED(StringCbLength(name, KMM_MAXCB_NAME, &cb))) - return NULL; - cb += sizeof(wchar_t); - - EnterCriticalSection(&cs_kmm); - p = (kmm_plugin_i *) hash_lookup(hash_plugins, (void *) name); - - if(p == NULL) { - p = PMALLOC(sizeof(kmm_plugin_i)); - ZeroMemory(p, sizeof(kmm_plugin_i)); - p->magic = KMM_PLUGIN_MAGIC; - p->p.name = PMALLOC(cb); - StringCbCopy(p->p.name, cb, name); - p->state = KMM_PLUGIN_STATE_NONE; - - hash_add(hash_plugins, (void *) p->p.name, (void *) p); - kmmint_list_plugin(p); - } - LeaveCriticalSection(&cs_kmm); - - return p; -} - -kmm_plugin_i * -kmmint_find_plugin_i(wchar_t * name) -{ - kmm_plugin_i * p; - size_t cb; - - if(FAILED(StringCbLength(name, KMM_MAXCB_NAME, &cb))) - return NULL; - - EnterCriticalSection(&cs_kmm); - p = (kmm_plugin_i *) hash_lookup(hash_plugins, (void *) name); - LeaveCriticalSection(&cs_kmm); - - return p; -} - -/* the plugin must be delisted before calling this */ -void -kmmint_list_plugin(kmm_plugin_i * p) -{ - EnterCriticalSection(&cs_kmm); - if((p->flags & KMM_PLUGIN_FLAG_IN_MODLIST) || - (p->flags & KMM_PLUGIN_FLAG_IN_LIST)) - { - RaiseException(2, EXCEPTION_NONCONTINUABLE, 0, NULL); - } - p->flags |= KMM_PLUGIN_FLAG_IN_LIST; - LPUSH(&kmm_listed_plugins, p); - LeaveCriticalSection(&cs_kmm); -} - -void -kmmint_delist_plugin(kmm_plugin_i * p) -{ - EnterCriticalSection(&cs_kmm); - if(p->flags & KMM_PLUGIN_FLAG_IN_LIST) { - p->flags &= ~KMM_PLUGIN_FLAG_IN_LIST; - LDELETE(&kmm_listed_plugins, p); - } - if(p->flags & KMM_PLUGIN_FLAG_IN_MODLIST) { - p->flags &= ~KMM_PLUGIN_FLAG_IN_MODLIST; - LDELETE(&(p->module->plugins), p); - } - LeaveCriticalSection(&cs_kmm); -} - -KHMEXP khm_int32 KHMAPI -kmm_hold_plugin(kmm_plugin p) -{ - kmm_plugin_i * pi; - - if(!kmm_is_plugin(p)) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_kmm); - pi = kmm_plugin_from_handle(p); - pi->refcount++; - LeaveCriticalSection(&cs_kmm); - - return KHM_ERROR_SUCCESS; -} - -/* called with cs_kmm held */ -void -kmmint_free_plugin(kmm_plugin_i * pi) -{ - int i; - pi->magic = 0; - - hash_del(hash_plugins, (void *) pi->p.name); - - kmmint_delist_plugin(pi); - - for(i=0; i<pi->n_dependants; i++) { - kmm_release_plugin(kmm_handle_from_plugin(pi->dependants[i])); - pi->dependants[i] = NULL; - } - - if(pi->module) { - kmm_release_module(kmm_handle_from_module(pi->module)); - } - - pi->module = NULL; - pi->p.module = NULL; - - if(pi->p.name) - PFREE(pi->p.name); - pi->p.name = NULL; - - if(pi->p.description) - PFREE(pi->p.description); - pi->p.description = NULL; - - if(pi->p.dependencies) - PFREE(pi->p.dependencies); - pi->p.dependencies = NULL; - - PFREE(pi); -} - -KHMEXP khm_int32 KHMAPI -kmm_enable_plugin(kmm_plugin p, khm_boolean enable) { - kmm_plugin_i * pi; - khm_int32 rv = KHM_ERROR_NOT_FOUND; /* default to error */ - khm_handle csp_plugin = NULL; - - EnterCriticalSection(&cs_kmm); - if (!kmm_is_plugin(p)) { - rv = KHM_ERROR_INVALID_PARAM; - goto _cleanup; - } - - pi = kmm_plugin_from_handle(p); - - if (KHM_FAILED(rv = kmm_get_plugin_config(pi->p.name, 0, &csp_plugin))) { - goto _cleanup; - } - - if (KHM_FAILED(rv = khc_write_int32(csp_plugin, L"Disabled", !enable))) { - goto _cleanup; - } - - rv = KHM_ERROR_SUCCESS; - - _cleanup: - LeaveCriticalSection(&cs_kmm); - - if (csp_plugin) - khc_close_space(csp_plugin); - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kmm_get_plugin_info_i(kmm_plugin p, kmm_plugin_info * info) { - khm_int32 rv = KHM_ERROR_SUCCESS; - kmm_plugin_i * pi; - khm_handle csp_plugin; - - if (!info) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_kmm); - if (!kmm_is_plugin(p)) { - rv = KHM_ERROR_INVALID_PARAM; - goto _cleanup; - } - - pi = kmm_plugin_from_handle(p); - - ZeroMemory(info, sizeof(*info)); - - info->reg = pi->p; - info->reg.msg_proc = NULL; - - if (KHM_FAILED(kmm_get_plugin_config(pi->p.name, KHM_PERM_READ, - &csp_plugin))) { - info->failure_count = 0; - *((khm_int64 *)&info->failure_time) = 0; - info->failure_reason = 0; - } else { - if (KHM_FAILED(khc_read_int32(csp_plugin, L"FailureCount", - &info->failure_count))) - info->failure_count = 0; - if (KHM_FAILED(khc_read_int64(csp_plugin, L"FailureTime", - (khm_int64 *) &info->failure_time))) - *((khm_int64 *) &info->failure_time) = 0; - if (KHM_FAILED(khc_read_int32(csp_plugin, L"FailureReason", - &info->failure_reason))) - info->failure_reason = 0; - - khc_close_space(csp_plugin); - } - - info->state = pi->state; - - kmm_hold_plugin(p); - info->h_plugin = p; - - info->flags = (pi->flags & KMM_PLUGIN_FLAG_DISABLED); - - _cleanup: - LeaveCriticalSection(&cs_kmm); - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kmm_release_plugin_info_i(kmm_plugin_info * info) { - khm_int32 rv; - - if (!info || !info->h_plugin) - return KHM_ERROR_INVALID_PARAM; - - rv = kmm_release_plugin(info->h_plugin); - - ZeroMemory(info, sizeof(info)); - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kmm_get_next_plugin(kmm_plugin p, kmm_plugin * p_next) { - khm_int32 rv = KHM_ERROR_SUCCESS; - kmm_plugin_i * pi; - kmm_plugin_i * pi_next = NULL; - kmm_module_i * m; - - EnterCriticalSection(&cs_kmm); - if (p == NULL) { - if (kmm_listed_plugins) - pi_next = kmm_listed_plugins; - else { - for (m = kmm_all_modules; m; m = LNEXT(m)) { - if (m->plugins) { - pi_next = m->plugins; - break; - } - } - } - } else if (kmm_is_plugin(p)) { - pi = kmm_plugin_from_handle(p); - pi_next = LNEXT(pi); - - if (!pi_next) { - /* we have either exhausted the listed plugins or we are - at the end of the module's plugin list */ - if (pi->module) { - m = LNEXT(pi->module); - } else { - m = kmm_all_modules; - } - - for(; m; m = LNEXT(m)) { - if (m->plugins) { - pi_next = m->plugins; - break; - } - } - } - } - - if (pi_next) { - *p_next = kmm_handle_from_plugin(pi_next); - kmm_hold_plugin(*p_next); - } else { - *p_next = NULL; - rv = KHM_ERROR_NOT_FOUND; - } - - LeaveCriticalSection(&cs_kmm); - return rv; -} - -KHMEXP khm_int32 KHMAPI -kmm_release_plugin(kmm_plugin p) -{ - kmm_plugin_i * pi; - - if(!kmm_is_plugin(p)) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_kmm); - pi = kmm_plugin_from_handle(p); - pi->refcount--; - if(pi->refcount == 0) { - kmmint_free_plugin(pi); - } - LeaveCriticalSection(&cs_kmm); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -kmm_provide_plugin(kmm_module module, kmm_plugin_reg * plugin) -{ - kmm_module_i * m; - kmm_plugin_i * p; - size_t cb_name = 0; - size_t cb_desc = 0; - size_t cb_dep = 0; - - m = kmm_module_from_handle(module); - - /* can only called when handing init_module() */ - if(m->state != KMM_MODULE_STATE_INIT) - return KHM_ERROR_INVALID_OPERATION; - - if(!plugin || - FAILED(StringCbLength(plugin->name, KMM_MAXCB_NAME - sizeof(wchar_t), - &cb_name)) || - (plugin->description && - FAILED(StringCbLength(plugin->description, - KMM_MAXCB_DESC - sizeof(wchar_t), - &cb_desc))) || - (plugin->dependencies && - KHM_FAILED(multi_string_length_cb(plugin->dependencies, - KMM_MAXCB_DEPS, &cb_dep)))) { - return KHM_ERROR_INVALID_PARAM; - } - - cb_name += sizeof(wchar_t); - cb_desc += sizeof(wchar_t); - - p = kmmint_get_plugin_i(plugin->name); - - /* released below or in kmmint_init_module() */ - kmm_hold_plugin(kmm_handle_from_plugin(p)); - - if(p->state != KMM_PLUGIN_STATE_NONE && - p->state != KMM_PLUGIN_STATE_PLACEHOLDER) - { - kmm_release_plugin(kmm_handle_from_plugin(p)); - return KHM_ERROR_DUPLICATE; - } - - /* released when the plugin quits */ - kmm_hold_module(module); - - p->module = m; - p->p.flags = plugin->flags; - p->p.msg_proc = plugin->msg_proc; - p->p.type = plugin->type; - - if(plugin->description) { - p->p.description = PMALLOC(cb_desc); - StringCbCopy(p->p.description, cb_desc, plugin->description); - } else - p->p.description = NULL; - - if(plugin->dependencies) { - p->p.dependencies = PMALLOC(cb_dep); - multi_string_copy_cb(p->p.dependencies, cb_dep, plugin->dependencies); - } else - p->p.dependencies = NULL; - - p->p.module = p->module->name; - - p->p.icon = plugin->icon; - - p->state = KMM_PLUGIN_STATE_REG; - - kmmint_delist_plugin(p); - EnterCriticalSection(&cs_kmm); - LPUSH(&(m->plugins), p); - p->flags |= KMM_PLUGIN_FLAG_IN_MODLIST; - LeaveCriticalSection(&cs_kmm); - - /* leave the plugin held because it is in the module's plugin list */ - return KHM_ERROR_SUCCESS; -} diff --git a/src/windows/identity/kmm/kmm_reg.c b/src/windows/identity/kmm/kmm_reg.c deleted file mode 100644 index 00626550f..000000000 --- a/src/windows/identity/kmm/kmm_reg.c +++ /dev/null @@ -1,336 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * 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 (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<kmminternal.h> - -KHMEXP khm_int32 KHMAPI -kmm_get_module_info(wchar_t * module_name, khm_int32 flags, - kmm_module_info * buffer, khm_size * cb_buffer) -{ - /*TODO:Implement this */ - return KHM_ERROR_NOT_IMPLEMENTED; -} - -KHMEXP khm_int32 KHMAPI -kmm_get_plugin_info(wchar_t * plugin_name, - kmm_plugin_info * buffer, khm_size * cb_buffer) -{ - /*TODO:Implement this */ - return KHM_ERROR_NOT_IMPLEMENTED; -} - -KHMEXP khm_int32 KHMAPI -kmm_get_plugins_config(khm_int32 flags, khm_handle * result) { - khm_handle csp_root; - khm_handle csp_plugins; - khm_int32 rv; - - rv = khc_open_space(KHM_INVALID_HANDLE, KMM_CSNAME_ROOT, flags, &csp_root); - - if(KHM_FAILED(rv)) - return rv; - - rv = khc_open_space(csp_root, KMM_CSNAME_PLUGINS, flags, &csp_plugins); - khc_close_space(csp_root); - - if(KHM_SUCCEEDED(rv)) - *result = csp_plugins; - else - *result = NULL; - - return rv; -} - - -KHMEXP khm_int32 KHMAPI -kmm_get_modules_config(khm_int32 flags, khm_handle * result) { - khm_handle croot; - khm_handle kmm_all_modules; - khm_int32 rv; - - rv = khc_open_space(NULL, KMM_CSNAME_ROOT, flags, &croot); - - if(KHM_FAILED(rv)) - return rv; - - rv = khc_open_space(croot, KMM_CSNAME_MODULES, flags, &kmm_all_modules); - khc_close_space(croot); - - if(KHM_SUCCEEDED(rv)) - *result = kmm_all_modules; - else - *result = NULL; - - return rv; -} - - -KHMEXP khm_int32 KHMAPI -kmm_get_plugin_config(wchar_t * plugin, khm_int32 flags, khm_handle * result) -{ - khm_handle csplugins; - khm_handle csplugin; - khm_int32 rv; - - if(!plugin || wcschr(plugin, L'/') || wcschr(plugin, L'\\')) - return KHM_ERROR_INVALID_PARAM; - - if(KHM_FAILED(kmm_get_plugins_config(flags, &csplugins))) - return KHM_ERROR_UNKNOWN; - - rv = khc_open_space(csplugins, plugin, flags, &csplugin); - *result = csplugin; - - khc_close_space(csplugins); - - return rv; -} - - -KHMEXP khm_int32 KHMAPI -kmm_get_module_config(wchar_t * module, khm_int32 flags, khm_handle * result) -{ - khm_handle csmodules; - khm_handle csmodule; - khm_int32 rv; - - if(!module || wcschr(module, L'/') || wcschr(module, L'\\')) - return KHM_ERROR_INVALID_PARAM; - - if(KHM_FAILED(kmm_get_modules_config(flags, &csmodules))) - return KHM_ERROR_UNKNOWN; - - rv = khc_open_space(csmodules, module, flags, &csmodule); - *result = csmodule; - - khc_close_space(csmodules); - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kmm_register_plugin(kmm_plugin_reg * plugin, khm_int32 config_flags) -{ - khm_int32 rv = KHM_ERROR_SUCCESS; - khm_handle csp_plugin = NULL; - khm_handle csp_module = NULL; - size_t cch; - - /* avoid accidently creating the module key if it doesn't exist */ - config_flags &= ~KHM_FLAG_CREATE; - - if((plugin == NULL) || - (plugin->dependencies && - KHM_FAILED(multi_string_length_cch(plugin->dependencies, - KMM_MAXCCH_DEPS, &cch))) || - FAILED(StringCchLength(plugin->module, KMM_MAXCCH_NAME, &cch)) || - (plugin->description && - FAILED(StringCchLength(plugin->description, - KMM_MAXCCH_DESC, &cch))) || - FAILED(StringCchLength(plugin->name, KMM_MAXCCH_NAME, &cch))) - { - return KHM_ERROR_INVALID_PARAM; - } - - /* note that we are retaining the length of the plugin name in - chars in cch */ - cch ++; - -#define CKRV if(KHM_FAILED(rv)) goto _exit - - rv = kmm_get_plugin_config(plugin->name, - config_flags | KHM_FLAG_CREATE, &csp_plugin); - CKRV; - - /* should fail if the module key doesn't exist */ - rv = kmm_get_module_config(plugin->module, config_flags, &csp_module); - CKRV; - - /*TODO: Make sure that the module registration is in the same - config store as the one in which the plugin is going to be - registered */ - - rv = khc_write_string(csp_plugin, L"Module", plugin->module); - CKRV; - if(plugin->description) { - rv = khc_write_string(csp_plugin, L"Description", plugin->description); - CKRV; - } - - if(plugin->dependencies) { - rv = khc_write_multi_string(csp_plugin, L"Dependencies", - plugin->dependencies); - CKRV; - } - - rv = khc_write_int32(csp_plugin, L"Type", plugin->type); - CKRV; - rv = khc_write_int32(csp_plugin, L"Disabled", - !!(plugin->flags & KMM_PLUGIN_FLAG_DISABLED)); - CKRV; - - { - khm_size cb = 0; - wchar_t * pl = NULL; - size_t scb = 0; - - rv = khc_read_multi_string(csp_module, L"PluginList", NULL, &cb); - if(rv != KHM_ERROR_TOO_LONG) { - if (rv == KHM_ERROR_NOT_FOUND) { - - scb = cb = (cch + 1) * sizeof(wchar_t); - pl = PMALLOC(cb); - multi_string_init(pl, cb); - rv = KHM_ERROR_SUCCESS; - - goto add_plugin_to_list; - - } else { - goto _exit; - } - } - - cb += cch * sizeof(wchar_t); - scb = cb; - - pl = PMALLOC(cb); - - rv = khc_read_multi_string(csp_module, L"PluginList", pl, &cb); - if(KHM_FAILED(rv)) { - if(pl) - PFREE(pl); - goto _exit; - } - - add_plugin_to_list: - - if(!multi_string_find(pl, plugin->name, 0)) { - multi_string_append(pl, &scb, plugin->name); - rv = khc_write_multi_string(csp_module, L"PluginList", pl); - } - - PFREE(pl); - CKRV; - } - -#undef CKRV - -_exit: - if(csp_plugin) - khc_close_space(csp_plugin); - if(csp_module) - khc_close_space(csp_module); - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kmm_register_module(kmm_module_reg * module, khm_int32 config_flags) -{ - khm_int32 rv = KHM_ERROR_SUCCESS; - khm_handle csp_module = NULL; - size_t cch; - int i; - - if((module == NULL) || - FAILED(StringCchLength(module->name, KMM_MAXCCH_NAME, &cch)) || - (module->description && - FAILED(StringCchLength(module->description, - KMM_MAXCCH_DESC, &cch))) || - FAILED(StringCchLength(module->path, MAX_PATH, &cch)) || - (module->n_plugins > 0 && module->plugin_reg_info == NULL)) { - return KHM_ERROR_INVALID_PARAM; - } - -#define CKRV if(KHM_FAILED(rv)) goto _exit - - rv = kmm_get_module_config(module->name, config_flags | KHM_FLAG_CREATE, - &csp_module); - CKRV; - - rv = khc_write_string(csp_module, L"ImagePath", module->path); - CKRV; - - rv = khc_write_int32(csp_module, L"Disabled", 0); - CKRV; - - /* FileVersion and ProductVersion will be set when the module - is loaded for the first time */ - - for(i=0; i<module->n_plugins; i++) { - rv = kmm_register_plugin(&(module->plugin_reg_info[i]), config_flags); - CKRV; - } - -#undef CKRV -_exit: - if(csp_module) - khc_close_space(csp_module); - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kmm_unregister_plugin(wchar_t * plugin, khm_int32 config_flags) -{ - khm_handle csp_plugin = NULL; - khm_int32 rv = KHM_ERROR_SUCCESS; - - rv = kmm_get_plugin_config(plugin, config_flags, &csp_plugin); - - if (KHM_FAILED(rv)) - goto _cleanup; - - rv = khc_remove_space(csp_plugin); - - _cleanup: - - if (csp_plugin) - khc_close_space(csp_plugin); - - return rv; -} - -KHMEXP khm_int32 KHMAPI -kmm_unregister_module(wchar_t * module, khm_int32 config_flags) -{ - khm_handle csp_module = NULL; - khm_int32 rv = KHM_ERROR_SUCCESS; - - rv = kmm_get_module_config(module, config_flags, &csp_module); - - if (KHM_FAILED(rv)) - goto _cleanup; - - rv = khc_remove_space(csp_module); - - _cleanup: - if (csp_module) - khc_close_space(csp_module); - - return rv; -} diff --git a/src/windows/identity/kmm/kmm_registrar.c b/src/windows/identity/kmm/kmm_registrar.c deleted file mode 100644 index c3bcdb9a9..000000000 --- a/src/windows/identity/kmm/kmm_registrar.c +++ /dev/null @@ -1,1034 +0,0 @@ -/* - * 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 - * 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<kmminternal.h> -#ifdef DEBUG -#include<assert.h> -#endif - -static LONG pending_modules = 0; -static LONG pending_plugins = 0; -static LONG startup_signal = 0; -static BOOL load_done = FALSE; - -void -kmmint_check_completion(void) { - if (pending_modules == 0 && - pending_plugins == 0 && - InterlockedIncrement(&startup_signal) == 1) { - - load_done = TRUE; - - /* TODO: check for orphaned plugins */ - - kmq_post_message(KMSG_KMM, KMSG_KMM_I_DONE, 0, 0); - } -} - -void -kmmint_add_to_module_queue(void) { - InterlockedIncrement(&pending_modules); -} - -void -kmmint_remove_from_module_queue(void) { - - InterlockedDecrement(&pending_modules); - - kmmint_check_completion(); -} - -void -kmmint_add_to_plugin_queue(kmm_plugin_i * plugin) { - EnterCriticalSection(&cs_kmm); - if (!(plugin->flags & KMM_PLUGIN_FLAG_IN_QUEUE)) { - InterlockedIncrement(&pending_plugins); - plugin->flags |= KMM_PLUGIN_FLAG_IN_QUEUE; - } - LeaveCriticalSection(&cs_kmm); -} - -void -kmmint_remove_from_plugin_queue(kmm_plugin_i * plugin) { - EnterCriticalSection(&cs_kmm); - - if (plugin->flags & KMM_PLUGIN_FLAG_IN_QUEUE) { - InterlockedDecrement(&pending_plugins); - plugin->flags &= ~KMM_PLUGIN_FLAG_IN_QUEUE; - } - - LeaveCriticalSection(&cs_kmm); - kmmint_check_completion(); -} - -KHMEXP khm_boolean KHMAPI -kmm_load_pending(void) { - return !load_done; -} - -/*! \internal - \brief Message handler for the registrar thread. */ -khm_boolean KHMAPI kmmint_reg_cb(khm_int32 msg_type, - khm_int32 msg_sub_type, - khm_ui_4 uparam, - void *vparam) -{ - /* we should only be getting <KMSG_KMM,KMSG_KMM_I_REG> anyway */ - if(msg_type != KMSG_KMM || msg_sub_type != KMSG_KMM_I_REG) - return FALSE; - - switch(uparam) { - case KMM_REG_INIT_MODULE: - kmmint_init_module((kmm_module_i *) vparam); - kmm_release_module(kmm_handle_from_module((kmm_module_i *) vparam)); - break; - - case KMM_REG_EXIT_MODULE: - kmmint_exit_module((kmm_module_i *) vparam); - kmm_release_module(kmm_handle_from_module((kmm_module_i *) vparam)); - break; - - case KMM_REG_INIT_PLUGIN: - kmmint_init_plugin((kmm_plugin_i *) vparam); - kmm_release_plugin(kmm_handle_from_plugin((kmm_plugin_i *) vparam)); - break; - - case KMM_REG_EXIT_PLUGIN: - kmmint_exit_plugin((kmm_plugin_i *) vparam); - kmm_release_plugin(kmm_handle_from_plugin((kmm_plugin_i *) vparam)); - break; - } - return TRUE; -} - -/*! \internal - \brief The registrar thread. - - The only thing this function does is to dispatch messages to the - callback routine ( kmmint_reg_cb() ) */ -DWORD WINAPI kmmint_registrar(LPVOID lpParameter) -{ - - PDESCTHREAD(L"KMM Registrar", L"KMM"); - - tid_registrar = GetCurrentThreadId(); - - kmq_subscribe(KMSG_KMM, kmmint_reg_cb); - kmq_subscribe(KMSG_SYSTEM, kmmint_reg_cb); - - SetEvent(evt_startup); - - while(KHM_SUCCEEDED(kmq_dispatch(INFINITE))); - - kmq_unsubscribe(KMSG_KMM, kmmint_reg_cb); - kmq_unsubscribe(KMSG_SYSTEM, kmmint_reg_cb); - - ExitThread(0); -} - -/*! \internal - \brief Manages a plugin message thread. - - Each plugin gets its own plugin thread which is used to dispatch - messages to the plugin. This acts as the thread function for the - plugin thread.*/ -DWORD WINAPI kmmint_plugin_broker(LPVOID lpParameter) -{ - DWORD rv = 0; - kmm_plugin_i * p = (kmm_plugin_i *) lpParameter; - - PDESCTHREAD(p->p.name, L"KMM"); - - _begin_task(0); - _report_mr1(KHERR_NONE, MSG_PB_START, _cstr(p->p.name)); - _describe(); - - TlsSetValue(tls_kmm, (LPVOID) p); - - kmm_hold_plugin(kmm_handle_from_plugin(p)); - - p->tid_thread = GetCurrentThreadId(); - - rv = (*p->p.msg_proc)(KMSG_SYSTEM, KMSG_SYSTEM_INIT, - 0, (void *) &(p->p)); - _report_mr1(KHERR_INFO, MSG_PB_INIT_RV, _int32(rv)); - - /* if it fails to initialize, we exit the plugin */ - if(KHM_FAILED(rv)) { - - kherr_report(KHERR_ERROR, - (wchar_t *) MSG_PB_INIT_FAIL_S, - (wchar_t *) KHERR_FACILITY, - NULL, - (wchar_t *) MSG_PB_INIT_FAIL, - (wchar_t *) MSG_PB_INIT_FAIL_G, - KHERR_FACILITY_ID, - KHERR_SUGGEST_NONE, - _cstr(p->p.name), - _cstr(p->p.description), - _cstr(p->module->path), - _cstr(p->module->support), - KHERR_RF_MSG_SHORT_DESC | - KHERR_RF_MSG_LONG_DESC | - KHERR_RF_MSG_SUGGEST -#ifdef _WIN32 - ,KHERR_HMODULE -#endif - ); - _resolve(); - - /* exit the plugin first. Otherwise it may not uninitialize correctly */ - (*p->p.msg_proc)(KMSG_SYSTEM, KMSG_SYSTEM_EXIT, 0, (void *) &(p->p)); - - kmmint_remove_from_plugin_queue(p); - rv = 1; - _end_task(); - - p->state = KMM_PLUGIN_STATE_FAIL_INIT; - goto _exit; - } - - /* subscribe to default message classes by plugin type */ - if(p->p.type == KHM_PITYPE_CRED) { - kmq_subscribe(KMSG_SYSTEM, p->p.msg_proc); - kmq_subscribe(KMSG_KCDB, p->p.msg_proc); - kmq_subscribe(KMSG_CRED, p->p.msg_proc); - } else if(p->p.type == KHM_PITYPE_IDENT) { - khm_handle h = NULL; - - kmq_subscribe(KMSG_SYSTEM, p->p.msg_proc); - kmq_subscribe(KMSG_KCDB, p->p.msg_proc); - - kmq_create_subscription(p->p.msg_proc, &h); - kcdb_identity_set_provider(h); - /* kcdb deletes the subscription when it's done with it */ - } else if(p->p.type == KHM_PITYPE_CONFIG) { - /*TODO: subscribe to configuration provider messages here */ - } - - p->state = KMM_PLUGIN_STATE_RUNNING; - - _report_mr0(KHERR_INFO, MSG_PB_INIT_DONE); - - _end_task(); - - /* if there were any plugins that were waiting for this one to - start, we should start them too */ - EnterCriticalSection(&cs_kmm); - do { - kmm_plugin_i * pd; - int i; - - for(i=0; i < p->n_dependants; i++) { - pd = p->dependants[i]; - - pd->n_unresolved--; - - if(pd->n_unresolved == 0) { - kmmint_add_to_plugin_queue(pd); - kmm_hold_plugin(kmm_handle_from_plugin(pd)); - kmq_post_message(KMSG_KMM, KMSG_KMM_I_REG, KMM_REG_INIT_PLUGIN, (void *) pd); - } - } - } while(FALSE); - LeaveCriticalSection(&cs_kmm); - - kmmint_remove_from_plugin_queue(p); - - /* main message loop */ - while(KHM_SUCCEEDED(kmq_dispatch(INFINITE))); - - /* unsubscribe from default message classes by plugin type */ - if(p->p.type == KHM_PITYPE_CRED) { - kmq_unsubscribe(KMSG_SYSTEM, p->p.msg_proc); - kmq_unsubscribe(KMSG_KCDB, p->p.msg_proc); - kmq_unsubscribe(KMSG_CRED, p->p.msg_proc); - } else if (p->p.type == KHM_PITYPE_IDENT) { - kmq_unsubscribe(KMSG_KCDB, p->p.msg_proc); - kmq_unsubscribe(KMSG_SYSTEM, p->p.msg_proc); - kcdb_identity_set_provider(NULL); - } else if(p->p.type == KHM_PITYPE_CONFIG) { - /*TODO: unsubscribe from configuration provider messages here */ - } - - p->p.msg_proc(KMSG_SYSTEM, KMSG_SYSTEM_EXIT, 0, (void *) &(p->p)); - - _exit: - if (p->state >= 0) - p->state = KMM_PLUGIN_STATE_EXITED; - - /* the following call will automatically release the plugin */ - kmq_post_message(KMSG_KMM, KMSG_KMM_I_REG, - KMM_REG_EXIT_PLUGIN, (void *) p); - - TlsSetValue(tls_kmm, (LPVOID) 0); - - ExitThread(rv); -} - -/*! \internal - \brief Initialize a plugin - - \note If kmmint_init_plugin() is called on a plugin, then kmmint_exit_plugin() - \b must be called for the plugin. - - \note Should only be called from the context of the registrar thread */ -void kmmint_init_plugin(kmm_plugin_i * p) { - DWORD dummy; - khm_handle csp_plugin = NULL; - khm_handle csp_plugins = NULL; - khm_int32 t; - - /* the following will be undone in kmmint_exit_plugin() */ - kmm_hold_plugin(kmm_handle_from_plugin(p)); - - EnterCriticalSection(&cs_kmm); - if(p->state != KMM_PLUGIN_STATE_REG && - p->state != KMM_PLUGIN_STATE_HOLD) - { - LeaveCriticalSection(&cs_kmm); - goto _exit; - } - - _begin_task(0); - _report_mr1(KHERR_NONE, MSG_IP_TASK_DESC, _cstr(p->p.name)); - _describe(); - - if(p->state == KMM_PLUGIN_STATE_HOLD) { - /* if this plugin was held, then we already had a hold - from the initial attempt to start the plugin. Undo - the hold we did a few lines earlier. */ - kmm_release_plugin(kmm_handle_from_plugin(p)); - - /* same for the plugin count for the module. */ -#ifdef DEBUG - assert(p->flags & KMM_PLUGIN_FLAG_IN_MODCOUNT); -#endif - p->module->plugin_count--; - p->flags &= ~KMM_PLUGIN_FLAG_IN_MODCOUNT; - } - - p->state = KMM_PLUGIN_STATE_PREINIT; - - kmmint_delist_plugin(p); - kmmint_list_plugin(p); - - LeaveCriticalSection(&cs_kmm); - - if(KHM_FAILED(kmm_get_plugins_config(0, &csp_plugins))) { - _report_mr0(KHERR_ERROR, MSG_IP_GET_CONFIG); - - p->state = KMM_PLUGIN_STATE_FAIL_UNKNOWN; - goto _exit; - } - - if(KHM_FAILED(kmm_get_plugin_config(p->p.name, 0, &csp_plugin))) { - if(KHM_FAILED(kmm_register_plugin(&(p->p), 0))) { - _report_mr0(KHERR_ERROR, MSG_IP_NOT_REGISTERED); - - p->state = KMM_PLUGIN_STATE_FAIL_NOT_REGISTERED; - goto _exit; - } - - if(KHM_FAILED(kmm_get_plugin_config(p->p.name, 0, &csp_plugin))) { - _report_mr0(KHERR_ERROR, MSG_IP_NOT_REGISTERED); - - p->state = KMM_PLUGIN_STATE_FAIL_NOT_REGISTERED; - goto _exit; - } - } - - if (KHM_SUCCEEDED(khc_read_int32(csp_plugin, L"Disabled", &t)) && t) { - p->flags |= KMM_PLUGIN_FLAG_DISABLED; - p->state = KMM_PLUGIN_STATE_FAIL_DISABLED; - goto _exit; - } - -#if 0 - /*TODO: check the failure count and act accordingly */ - if(KHM_SUCCEEDED(khc_read_int32(csp_plugin, L"FailureCount", &t)) && (t > 0)) { - } -#endif - - EnterCriticalSection(&cs_kmm); - - p->n_depends = 0; - p->n_unresolved = 0; - - do { - wchar_t * deps = NULL; - wchar_t * d; - khm_size sz = 0; - - if(khc_read_multi_string(csp_plugin, L"Dependencies", - NULL, &sz) != KHM_ERROR_TOO_LONG) - break; - - deps = PMALLOC(sz); - if(KHM_FAILED(khc_read_multi_string(csp_plugin, L"Dependencies", - deps, &sz))) { - if(deps) - PFREE(deps); - break; - } - - for(d = deps; d && *d; d = multi_string_next(d)) { - kmm_plugin_i * pd; - int i; - - pd = kmmint_get_plugin_i(d); - - if(pd->state == KMM_PLUGIN_STATE_NONE) { - /* the dependant was not previously known */ - pd->state = KMM_PLUGIN_STATE_PLACEHOLDER; - } - - for(i=0; i < pd->n_dependants; i++) { - if(pd->dependants[i] == p) - break; - } - - if(i >= pd->n_dependants) { - if( pd->n_dependants >= KMM_MAX_DEPENDANTS ) { - /*TODO: handle this gracefully */ - RaiseException(1, EXCEPTION_NONCONTINUABLE, 0, NULL); - } - - /* released in kmmint_free_plugin() */ - kmm_hold_plugin(kmm_handle_from_plugin(p)); - pd->dependants[pd->n_dependants] = p; - pd->n_dependants++; - } - - p->n_depends++; - - if(pd->state != KMM_PLUGIN_STATE_RUNNING) { - p->n_unresolved++; - } - } - - if(p->n_unresolved > 0) { - p->state = KMM_PLUGIN_STATE_HOLD; - } - - PFREE(deps); - - } while(FALSE); - -#ifdef DEBUG - assert(!(p->flags & KMM_PLUGIN_FLAG_IN_MODCOUNT)); -#endif - p->flags |= KMM_PLUGIN_FLAG_IN_MODCOUNT; - p->module->plugin_count++; - - LeaveCriticalSection(&cs_kmm); - - if(p->state == KMM_PLUGIN_STATE_HOLD) { - _report_mr1(KHERR_INFO, MSG_IP_HOLD, _dupstr(p->p.name)); - - goto _exit_post; - } - - kmmint_add_to_plugin_queue(p); - - p->ht_thread = CreateThread(NULL, - 0, - kmmint_plugin_broker, - (LPVOID) p, - CREATE_SUSPENDED, - &dummy); - - p->state = KMM_PLUGIN_STATE_INIT; - - ResumeThread(p->ht_thread); - -_exit_post: - if(csp_plugin != NULL) - khc_close_space(csp_plugin); - - if(csp_plugins != NULL) - khc_close_space(csp_plugins); - - _report_mr2(KHERR_INFO, MSG_IP_STATE, - _dupstr(p->p.name), _int32(p->state)); - - _end_task(); - - return; - - /* jump here if an error condition happens before the plugin - broker thread starts and the plugin should be unloaded */ - -_exit: - if(csp_plugin != NULL) - khc_close_space(csp_plugin); - if(csp_plugins != NULL) - khc_close_space(csp_plugins); - - _report_mr2(KHERR_WARNING, MSG_IP_EXITING, - _dupstr(p->p.name), _int32(p->state)); - _end_task(); - - -#ifdef ASYNC_PLUGIN_UNLOAD_ON_FAILURE - - kmm_hold_plugin(kmm_handle_from_plugin(p)); - - kmq_post_message(KMSG_KMM, KMSG_KMM_I_REG, KMM_REG_EXIT_PLUGIN, (void *) p); - -#else - - kmmint_exit_plugin(p); - -#endif -} - -/*! \internal - \brief Uninitialize a plugin - - In addition to terminating the thread, and removing p from the - linked list and hashtable, it also frees up p. - - \note Should only be called from the context of the registrar thread. */ -void kmmint_exit_plugin(kmm_plugin_i * p) { - int np; - khm_boolean release_plugin = TRUE; - - if(p->state == KMM_PLUGIN_STATE_RUNNING || - p->state == KMM_PLUGIN_STATE_INIT) { - - kmq_post_thread_quit_message(p->tid_thread, 0, NULL); - /* when we post the quit message to the plugin thread, the plugin - broker terminates the plugin and posts a EXIT_PLUGIN message, - which calls this function again. We just exit here because - the EXIT_PLUGIN message will end up calling us again momentarily */ - return; - - } - - if(p->ht_thread) { - /* wait for the thread to terminate */ - WaitForSingleObject(p->ht_thread, INFINITE); - p->ht_thread = NULL; - } - - EnterCriticalSection(&cs_kmm); - - /* undo reference count done in kmmint_init_plugin() */ - if(p->flags & KMM_PLUGIN_FLAG_IN_MODCOUNT) { - - np = --(p->module->plugin_count); - p->flags &= ~KMM_PLUGIN_FLAG_IN_MODCOUNT; - - } else { - /* the plugin was not included in the module's plugin_count. - We can't base a decision to unload the module based on this - plugin exiting. */ - np = TRUE; - } - - /* The plugin is in an error state. We need to keep the plugin - record intact so that the failure information is kept around. - Also, we shouldn't release the plugin if it appears that - kmmint_init_plugin() was never called for it. */ - if (p->state < KMM_PLUGIN_STATE_HOLD) { - release_plugin = FALSE; - } - - LeaveCriticalSection(&cs_kmm); - - if(!np) { - /* if this is the last plugin to exit, then notify the - registrar that the module should be removed as well */ - kmm_hold_module(kmm_handle_from_module(p->module)); - kmq_post_message(KMSG_KMM, KMSG_KMM_I_REG, KMM_REG_EXIT_MODULE, (void *) p->module); - } - - /* release the hold obtained in kmmint_init_plugin() */ - if (release_plugin) - kmm_release_plugin(kmm_handle_from_plugin(p)); -} - -/*! \internal - \brief Initialize a module - - \a m is not in the linked list yet. - - \note Should only be called from the context of the registrar thread. */ -void kmmint_init_module(kmm_module_i * m) { - HMODULE hm; - init_module_t p_init_module; - kmm_plugin_i * pi; - khm_int32 rv; - khm_handle csp_mod = NULL; - khm_handle csp_mods = NULL; - khm_size sz; - khm_int32 i; - - /* error condition handling */ - BOOL exit_module = FALSE; - BOOL release_module = TRUE; - BOOL record_failure = FALSE; - - /* failure handling */ - khm_int32 max_fail_count = 0; - khm_int64 fail_reset_time = 0; - - _begin_task(0); - _report_mr1(KHERR_NONE, MSG_INIT_MODULE, _cstr(m->name)); - _describe(); - - kmm_hold_module(kmm_handle_from_module(m)); - - /* If the module is not in the pre-init state, we can't - initialize it. */ - if(m->state != KMM_MODULE_STATE_PREINIT) { - _report_mr1(KHERR_INFO, MSG_IM_NOT_PREINIT, _int32(m->state)); - goto _exit; - } - - if(KHM_FAILED(kmm_get_modules_config(0, &csp_mods))) { - _report_mr0(KHERR_ERROR, MSG_IM_GET_CONFIG); - _location(L"kmm_get_modules_config()"); - - m->state = KMM_MODULE_STATE_FAIL_UNKNOWN; - goto _exit; - } - - khc_read_int32(csp_mods, L"ModuleMaxFailureCount", &max_fail_count); - khc_read_int64(csp_mods, L"ModuleFailureCountResetTime", &fail_reset_time); - - if(KHM_FAILED(kmm_get_module_config(m->name, 0, &csp_mod))) { - _report_mr0(KHERR_ERROR, MSG_IM_NOT_REGISTERED); - - m->state = KMM_MODULE_STATE_FAIL_NOT_REGISTERED; - goto _exit; - } - - if(KHM_SUCCEEDED(khc_read_int32(csp_mod, L"Disabled", &i)) && i) { - _report_mr0(KHERR_INFO, MSG_IM_DISABLED); - - m->state = KMM_MODULE_STATE_FAIL_DISABLED; - goto _exit; - } - - if(KHM_SUCCEEDED(khc_read_int32(csp_mod, L"NoUnload", &i)) && i) { - m->flags |= KMM_MODULE_FLAG_NOUNLOAD; - } - - if(KHM_SUCCEEDED(khc_read_int32(csp_mod, L"FailureCount", &i))) { - khm_int64 tm; - khm_int64 ct; - FILETIME fct; - khm_int32 last_reason = 0; - - /* reset the failure count if the failure count reset time - period has elapsed */ - tm = 0; - khc_read_int64(csp_mod, L"FailureTime", &tm); - GetSystemTimeAsFileTime(&fct); - - ct = (FtToInt(&fct) - tm) / 10000000i64; - - if(tm > 0 && - ct > fail_reset_time) { - i = 0; - khc_write_int32(csp_mod, L"FailureCount", 0); - khc_write_int64(csp_mod, L"FailureTime", 0); - } - - khc_read_int32(csp_mod, L"FailureReason", &last_reason); - - /* did we exceed the max failure count? However, we ignore - the max failure count if the reason why it didn't load the - last time was because the module wasn't found. */ - if(i > max_fail_count && - last_reason != KMM_MODULE_STATE_FAIL_NOT_FOUND) { - /* failed too many times */ - _report_mr0(KHERR_INFO, MSG_IM_MAX_FAIL); - - m->state = KMM_MODULE_STATE_FAIL_MAX_FAILURE; - goto _exit; - } - } - - if(khc_read_string(csp_mod, KMM_VALNAME_IMAGEPATH, NULL, &sz) == - KHM_ERROR_TOO_LONG) { - if(m->path) - PFREE(m->path); - m->path = PMALLOC(sz); - khc_read_string(csp_mod, KMM_VALNAME_IMAGEPATH, m->path, &sz); - } else { - /* - * If there is no image path, then the module has not been - * installed. Do not report an error and bother the user. - * _report_mr0(KHERR_ERROR, MSG_IM_NOT_REGISTERED); - */ - - m->state = KMM_MODULE_STATE_FAIL_NOT_REGISTERED; - goto _exit; - } - - rv = kmmint_read_module_info(m); - - if (KHM_FAILED(rv)) { - if (rv == KHM_ERROR_INCOMPATIBLE) { - _report_mr0(KHERR_ERROR, MSG_IM_INCOMPATIBLE); - - m->state = KMM_MODULE_STATE_FAIL_INCOMPAT; - } else if (rv == KHM_ERROR_NOT_FOUND) { - _report_mr1(KHERR_ERROR, MSG_IM_NOT_FOUND, _dupstr(m->path)); - - m->state = KMM_MODULE_STATE_FAIL_NOT_FOUND; - } else { - _report_mr0(KHERR_ERROR, MSG_IM_INVALID_MODULE); - - m->state = KMM_MODULE_STATE_FAIL_INV_MODULE; - } - goto _exit; - } - - /* check again */ - if(m->state != KMM_MODULE_STATE_PREINIT) { - _report_mr0(KHERR_ERROR, MSG_IM_NOT_PREINIT); - - goto _exit; - } - - /* from this point on, we must record any failure codes */ - record_failure = TRUE; - - hm = LoadLibrary(m->path); - if(!hm) { - m->h_module = NULL; - m->state = KMM_MODULE_STATE_FAIL_NOT_FOUND; - - _report_mr1(KHERR_ERROR, MSG_IM_NOT_FOUND, _dupstr(m->path)); - - goto _exit; - } - - /* from this point on, we need to discard the module through - exit_module */ - ResetEvent(evt_exit); - - kmm_active_modules++; - - release_module = FALSE; - exit_module = TRUE; - - m->flags |= KMM_MODULE_FLAG_LOADED; - m->h_module = hm; - - /* TODO: check signatures */ - - p_init_module = (init_module_t) GetProcAddress(hm, EXP_INIT_MODULE); - - if(!p_init_module) { - _report_mr1(KHERR_ERROR, MSG_IM_NO_ENTRY, _cstr(EXP_INIT_MODULE)); - - m->state = KMM_MODULE_STATE_FAIL_INVALID; - goto _exit; - } - - m->state = KMM_MODULE_STATE_INIT; - - /* call init_module() */ - rv = (*p_init_module)(kmm_handle_from_module(m)); - - m->flags |= KMM_MODULE_FLAG_INITP; - - if(KHM_FAILED(rv)) { - _report_mr1(KHERR_ERROR, MSG_IM_INIT_FAIL, _int32(rv)); - - m->state = KMM_MODULE_STATE_FAIL_LOAD; - goto _exit; - } - - if(!m->plugins) { - _report_mr0(KHERR_ERROR, MSG_IM_NO_PLUGINS); - - m->state = KMM_MODULE_STATE_FAIL_NO_PLUGINS; - record_failure = FALSE; - goto _exit; - } - - m->state = KMM_MODULE_STATE_INITPLUG; - - do { - LPOP(&(m->plugins), &pi); - if(pi) { - pi->flags &= ~KMM_PLUGIN_FLAG_IN_MODLIST; - kmmint_init_plugin(pi); - - /* release the hold obtained in kmm_provide_plugin() */ - kmm_release_plugin(kmm_handle_from_plugin(pi)); - } - } while(pi); - - if(!m->plugin_count) { - /* We don't want to report this case. This usually means that - the plugins that were provided by the module were - disabled. */ -#ifdef REPORT_EMPTY_MODULES - _report_mr0(KHERR_ERROR, MSG_IM_NO_PLUGINS); - - m->state = KMM_MODULE_STATE_FAIL_NO_PLUGINS; -#endif - record_failure = FALSE; - goto _exit; - } - - m->state = KMM_MODULE_STATE_RUNNING; - - exit_module = FALSE; - record_failure = FALSE; - - _exit: - if(csp_mod) { - if(record_failure) { - FILETIME fct; - - i = 0; - khc_read_int32(csp_mod, L"FailureCount", &i); - i++; - khc_write_int32(csp_mod, L"FailureCount", i); - - if(i==1) { /* first fault */ - GetSystemTimeAsFileTime(&fct); - khc_write_int64(csp_mod, L"FailureTime", FtToInt(&fct)); - } - - khc_write_int32(csp_mod, L"FailureReason", m->state); - } - khc_close_space(csp_mod); - } - - if(csp_mods) - khc_close_space(csp_mods); - - _report_mr2(KHERR_INFO, MSG_IM_MOD_STATE, - _dupstr(m->name), _int32(m->state)); - - kmmint_remove_from_module_queue(); - - /* if something went wrong after init_module was called on the - module code, we need to call exit_module */ - if(exit_module) - kmmint_exit_module(m); - - if(release_module) - kmm_release_module(kmm_handle_from_module(m)); - - if (kherr_is_error()) { - kherr_context * c; - kherr_event * err_e = NULL; - kherr_event * warn_e = NULL; - kherr_event * e; - - c = kherr_peek_context(); - err_e = kherr_get_err_event(c); - for(e = kherr_get_first_event(c); - e; - e = kherr_get_next_event(e)) { - if (e != err_e && - e->severity == KHERR_WARNING) { - warn_e = e; - break; - } - } - - kherr_evaluate_event(err_e); - if (warn_e) - kherr_evaluate_event(warn_e); - - kherr_clear_error(); - - e = kherr_report(KHERR_ERROR, - (wchar_t *) MSG_IMERR_TITLE, - KHERR_FACILITY, - NULL, - err_e->long_desc, - ((warn_e)? (wchar_t *)MSG_IMERR_SUGGEST: NULL), - KHERR_FACILITY_ID, - KHERR_SUGGEST_NONE, - _cstr(m->name), - ((warn_e)? _cstr(warn_e->long_desc):_vnull()), - _vnull(),_vnull(), - KHERR_RF_MSG_SHORT_DESC | - ((warn_e)? KHERR_RF_MSG_SUGGEST: 0), - KHERR_HMODULE); - - kherr_evaluate_event(e); - - kherr_release_context(c); - } - - _end_task(); -} - - -/*! \internal - \brief Uninitializes a module - - \note Should only be called from the context of the registrar - thread */ -void kmmint_exit_module(kmm_module_i * m) { - kmm_plugin_i * p; - - /* Exiting a module happens in two stages. - - If the module state is running (there are active plugins) then - those plugins must be exited. This has to be done from the - plugin threads. The signal for the plugins to exit must be - issued from the registrar. Therefore, we post messages to the - registrar for each plugin we want to remove and exit - kmmint_exit_module(). - - When the last plugin is exited, the plugin management code - automatically signalls the registrar to remove the module. - kmmint_exit_module() gets called again. This is the second - stage, where we call exit_module() for the module and start - unloading everything. - */ - - EnterCriticalSection(&cs_kmm); - - /* get rid of any dangling uninitialized plugins */ - LPOP(&(m->plugins), &p); - while(p) { - p->flags &= ~KMM_PLUGIN_FLAG_IN_MODLIST; - kmmint_exit_plugin(p); - - /* release hold from kmm_provide_plugin() */ - kmm_release_plugin(kmm_handle_from_plugin(p)); - - LPOP(&(m->plugins), &p); - } - - if(m->state == KMM_MODULE_STATE_RUNNING) { - int np = 0; - - m->state = KMM_MODULE_STATE_EXITPLUG; - - p = kmm_listed_plugins; - - while(p) { - if(p->module == m && - (p->flags & KMM_PLUGIN_FLAG_IN_MODCOUNT)) { - - kmm_hold_plugin(kmm_handle_from_plugin(p)); - kmq_post_message(KMSG_KMM, KMSG_KMM_I_REG, - KMM_REG_EXIT_PLUGIN, (void *) p); - np++; - - } - - p = LNEXT(p); - } - -#ifdef DEBUG - assert(np == m->plugin_count); -#endif - - if(np > 0) { - /* we have to go back and wait for the plugins to exit. - when the last plugin exits, it automatically posts - EXIT_MODULE. We can pick up from there when this - happens. */ - LeaveCriticalSection(&cs_kmm); - return; - } - - } else { - -#ifdef DEBUG - assert(m->plugin_count == 0 || - m->state == KMM_MODULE_STATE_EXITPLUG); -#endif - - /* if there are still plug-ins waiting to be unloaded, then we - have to go back and wait for them to finish. Once they are - done, kmmint_exit_module() will get called again. */ - if (m->plugin_count > 0) { - LeaveCriticalSection(&cs_kmm); - return; - } - } - - if(m->flags & KMM_MODULE_FLAG_INITP) { - exit_module_t p_exit_module; - - if(m->state > 0) - m->state = KMM_MODULE_STATE_EXIT; - - p_exit_module = - (exit_module_t) GetProcAddress(m->h_module, - EXP_EXIT_MODULE); - if(p_exit_module) { - LeaveCriticalSection(&cs_kmm); - (*p_exit_module)(kmm_handle_from_module(m)); - EnterCriticalSection(&cs_kmm); - } - } - - if(m->state > 0) - m->state = KMM_MODULE_STATE_EXITED; - - LeaveCriticalSection(&cs_kmm); - - if(!(m->flags & KMM_MODULE_FLAG_NOUNLOAD) && - m->h_module) { - FreeLibrary(m->h_module); - } - - if(!(m->flags & KMM_MODULE_FLAG_NOUNLOAD) && - m->h_resource && (m->h_resource != m->h_module)) { - FreeLibrary(m->h_resource); - } - - m->h_module = NULL; - m->h_resource = NULL; - - if (m->flags & KMM_MODULE_FLAG_LOADED) { -#ifdef DEBUG - assert(kmm_active_modules > 0); -#endif - kmm_active_modules--; - } - - m->flags = 0; - - /* release the hold obtained in kmmint_init_module() */ - kmm_release_module(kmm_handle_from_module(m)); - - /* Last but not least, now see if there are any modules left that - are running. If not, we can safely signal an exit. */ - if (kmm_active_modules == 0) { - SetEvent(evt_exit); - } -} diff --git a/src/windows/identity/kmm/kmmconfig.csv b/src/windows/identity/kmm/kmmconfig.csv deleted file mode 100644 index 32c334b26..000000000 --- a/src/windows/identity/kmm/kmmconfig.csv +++ /dev/null @@ -1,47 +0,0 @@ -Name,Type,Value,Description -PluginManager,KC_SPACE,0,Plugin Manager Configuration - Plugins,KC_SPACE,0,Plugin Specific configuration - PluginMaxFailureCount,KC_INT32,3,Maximum number of failure counts before plugin is disabled - PluginFailureCountResetTime,KC_INT64,36000,Time after first failure at which the failure count is reset - _Schema,KC_SPACE,0,Plugin schema - Module,KC_STRING,<module name>,The name of the module that registered this plugin - Description,KC_STRING,<Description>,Description of the plugin - Dependencies,KC_STRING,<Dependencies>,Multi string of plugin names of plugins that this plugin depends on - Type,KC_INT32,0,The type of the plugin -# Flags,KC_INT32,0,Flags (Deprecated) - Disabled,KC_INT32,0,Plug-in is disabled (Boolean) - NoUnload,KC_INT32,0,Do not unload the plugin (Boolean) - FailureCount,KC_INT32,0,Number of failed loads - FailureTime,KC_INT64,0,FILETIME of first failure - FailureReason,KC_INT32,0,Reason for first failure. One of the plugin status values. - Parameters,KC_SPACE,0,Plugin parameters. The schema beyond this is plugin dependent. - Parameters,KC_ENDSPACE,0, - _Schema,KC_ENDSPACE,0, - Plugins,KC_ENDSPACE,0, - Modules,KC_SPACE,0,Module Specific configuration - ModuleMaxFailureCount,KC_INT32,3,Maximum number of failure counts before module is disabled - ModuleFailureCountResetTime,KC_INT64,72000,Time after first failure at which the failure count is reset - _Schema,KC_SPACE,0,Module schema - ImagePath,KC_STRING,<Path to the library binary>,Path to the DLL (including DLL name) -# Flags,KC_INT32,0,Flags (Deprecated) - Disabled,KC_INT32,0,Module is disabled (Boolean) - FailureCount,KC_INT32,0,Number of failed loads - FailureTime,KC_INT64,0,FILETIME of first failure - FailureReason,KC_INT32,0,Reason for last failure. One of the module status values. - PluginList,KC_STRING,<plugins>,List of plugins implemented in the module - _Schema,KC_ENDSPACE,0, -# The OpenAFS plug-in is installed separately. -# OpenAFS,KC_SPACE,0,OpenAFS Module -# ImagePath,KC_STRING,afscred.dll, -# PluginList,KC_STRING,AfsCred, -# OpenAFS,KC_ENDSPACE,0, -# MITKrb5,KC_SPACE,0,MIT Kerberos V -# ImagePath,KC_STRING,krb5cred.dll, -# PluginList,KC_STRING,Krb5Cred, -# MITKrb5,KC_ENDSPACE,0, -# MITKrb4,KC_SPACE,0,MIT Kerberos IV -# ImagePath,KC_STRING,krb4cred.dll, -# PluginList,KC_STRING,Krb4Cred, -# MITKrb4,KC_ENDSPACE,0, - Modules,KC_ENDSPACE,0, -PluginManager,KC_ENDSPACE,0, diff --git a/src/windows/identity/kmm/kmminternal.h b/src/windows/identity/kmm/kmminternal.h deleted file mode 100644 index c4109495e..000000000 --- a/src/windows/identity/kmm/kmminternal.h +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KMMINTERNAL_H -#define __KHIMAIRA_KMMINTERNAL_H - -#define _NIMLIB_ - -#include<windows.h> -#include<shlwapi.h> -#include<strsafe.h> - -#define KHERR_FACILITY kmm_facility -#define KHERR_FACILITY_ID KHM_FACILITY_KMM -#define KHERR_HMODULE ((HMODULE) kmm_hInstance) -#include<kherr.h> - -#include<kmm.h> -#include<khmsgtypes.h> -#include<kherror.h> -#include<kplugin.h> - -#define NOEXPORT - -#include<utils.h> -#include<kconfig.h> -#include<kcreddb.h> -#include<kmm_msgs.h> - -struct kmm_plugin_i_t; /* forward dcl */ - -typedef struct kmm_module_i_t { - khm_int32 magic; - - wchar_t * name; - wchar_t * path; - wchar_t * description; - wchar_t * vendor; - wchar_t * support; - - khm_version file_version; - khm_version prod_version; - - HMODULE h_module; - - HMODULE h_resource; - WORD lcid_resource; - - khm_int32 flags; - khm_int32 state; - khm_int32 plugin_count; /* number of active plugins */ - - void * version_info; - - khm_int32 refcount; - - struct kmm_plugin_i_t * plugins; /* only used for registration */ - - LDCL(struct kmm_module_i_t); -} kmm_module_i; - -#define KMM_MODULE_MAGIC 0x482f4e88 - -#define kmm_is_module(m) ((m) && ((kmm_module_i *)m)->magic == KMM_MODULE_MAGIC) - -#define kmm_module_from_handle(m) ((kmm_module_i *) m) -#define kmm_handle_from_module(m) ((kmm_module) m) - -/* LoadLibrary succeeded for module */ -#define KMM_MODULE_FLAG_LOADED 0x00000001 - -/* init_module entry called */ -#define KMM_MODULE_FLAG_INITP 0x00000002 - -/* the resources have been loaded */ -#define KMM_MODULE_FLAG_RES_LOADED 0x00000008 - -/* the signature has been verified */ -#define KMM_MODULE_FLAG_SIG 0x00000010 - -/* the module is disabled by the user - (option specified in configuration) */ -#define KMM_MODULE_FLAG_DISABLED 0x00000400 - -/* the module should not be unloaded - (option specified in configuration)*/ -#define KMM_MODULE_FLAG_NOUNLOAD 0x00000800 - -/* the module has been removed from the active modules list. */ -#define KMM_MODULE_FLAG_INACTIVE 0x00001000 - -typedef struct kmm_plugin_i_t { - kmm_plugin_reg p; - - khm_int32 magic; - - kmm_module_i * module; - HANDLE ht_thread; - DWORD tid_thread; - - khm_int32 state; - khm_int32 flags; - - int refcount; - - int n_depends; - int n_unresolved; - struct kmm_plugin_i_t * dependants[KMM_MAX_DEPENDANTS]; - int n_dependants; - - LDCL(struct kmm_plugin_i_t); -} kmm_plugin_i; - -#define KMM_PLUGIN_MAGIC 0x320e8fb4 - -#define kmm_is_plugin(p) ((p) && ((kmm_plugin_i *) (p))->magic == KMM_PLUGIN_MAGIC) - -#define kmm_handle_from_plugin(p) ((kmm_plugin) p) -#define kmm_plugin_from_handle(ph) ((kmm_plugin_i *) ph) - -/* the plugin has already been marked for unload */ -#define KMM_PLUGIN_FLAG_UNLOAD 0x00000001 - -/* the plugin is in the kmm_listed_plugins list */ -#define KMM_PLUGIN_FLAG_IN_LIST 0x00000002 - -/* the plugin is in the module's plugin list */ -#define KMM_PLUGIN_FLAG_IN_MODLIST 0x00000004 - -/* the plugin has been included in the pending_plugins count. */ -#define KMM_PLUGIN_FLAG_IN_QUEUE 0x00000010 - -/* the plugin is included in the module's plugin count */ -#define KMM_PLUGIN_FLAG_IN_MODCOUNT 0x00000020 - -/* the plugin is disabled by the user - (option specified in configuration) */ -/* (this is defined in kmm.h) - - #define KMM_PLUGIN_FLAG_DISABLED 0x00000400 - -*/ - -enum kmm_registrar_uparam_t { - KMM_REG_INIT_MODULE, - KMM_REG_EXIT_MODULE, - KMM_REG_INIT_PLUGIN, - KMM_REG_EXIT_PLUGIN -}; - -extern kmm_module_i * kmm_all_modules; -extern khm_size kmm_active_modules; -extern kmm_plugin_i * kmm_listed_plugins; -extern HANDLE ht_registrar; -extern DWORD tid_registrar; -extern DWORD tls_kmm; - -extern hashtable * hash_plugins; -extern hashtable * hash_modules; - -extern CRITICAL_SECTION cs_kmm; -extern int ready; -extern HANDLE evt_startup; -extern HANDLE evt_exit; -extern const wchar_t * kmm_facility; - -extern HINSTANCE kmm_hInstance; - -extern kconf_schema schema_kmmconfig[]; - -/* Registrar */ - -khm_boolean KHMAPI -kmmint_reg_cb(khm_int32 msg_type, - khm_int32 msg_sub_type, - khm_ui_4 uparam, - void *vparam); - -DWORD WINAPI kmmint_registrar(LPVOID lpParameter); - -DWORD WINAPI kmmint_plugin_broker(LPVOID lpParameter); - -void kmmint_init_plugin(kmm_plugin_i * p); -void kmmint_exit_plugin(kmm_plugin_i * p); -void kmmint_init_module(kmm_module_i * m); -void kmmint_exit_module(kmm_module_i * m); - -/* Modules */ -kmm_module_i * -kmmint_get_module_i(wchar_t * name); - -kmm_module_i * -kmmint_find_module_i(wchar_t * name); - -void -kmmint_free_module(kmm_module_i * m); - -khm_int32 -kmmint_read_module_info(kmm_module_i * m); - -/* Plugins */ -kmm_plugin_i * -kmmint_get_plugin_i(wchar_t * name); - -kmm_plugin_i * -kmmint_find_plugin_i(wchar_t * name); - -void -kmmint_free_plugin(kmm_plugin_i * pi); - -void -kmmint_list_plugin(kmm_plugin_i * p); - -void -kmmint_delist_plugin(kmm_plugin_i * p); - -khm_boolean -kmmint_load_locale_lib(kmm_module_i * m, kmm_module_locale * l); - -#define KMM_CSNAME_ROOT L"PluginManager" -#define KMM_CSNAME_PLUGINS L"Plugins" -#define KMM_CSNAME_MODULES L"Modules" -#define KMM_VALNAME_LOADLIST L"LoadList" -#define KMM_VALNAME_IMAGEPATH L"ImagePath" - -void -kmmint_add_to_module_queue(void); - -void -kmmint_remove_from_module_queue(void); - -#define _WAIT_FOR_START \ - do { \ - if(ready) break; \ - WaitForSingleObject(evt_startup, INFINITE); \ - } while(0) - -#endif diff --git a/src/windows/identity/kmm/kmmmain.c b/src/windows/identity/kmm/kmmmain.c deleted file mode 100644 index 598c10507..000000000 --- a/src/windows/identity/kmm/kmmmain.c +++ /dev/null @@ -1,160 +0,0 @@ -/* - * 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 - * 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<kmminternal.h> - -kmm_module_i * kmm_all_modules = NULL; -kmm_plugin_i * kmm_listed_plugins = NULL; - -HANDLE ht_registrar = NULL; -DWORD tid_registrar = 0; -DWORD tls_kmm = 0; - -#define KMM_HASH_SIZE 31 -hashtable * hash_plugins = NULL; -hashtable * hash_modules = NULL; - -CRITICAL_SECTION cs_kmm; -HANDLE evt_startup = NULL; -HANDLE evt_exit = NULL; -int ready = 0; - -HINSTANCE kmm_hInstance; -const wchar_t * kmm_facility = L"KMM"; - -KHMEXP void KHMAPI kmm_init(void) -{ - DWORD dummy; - - EnterCriticalSection(&cs_kmm); - kmm_all_modules = NULL; - kmm_listed_plugins = NULL; - - tls_kmm = TlsAlloc(); - - hash_plugins = hash_new_hashtable( - KMM_HASH_SIZE, - hash_string, - hash_string_comp, - NULL, - NULL); - - hash_modules = hash_new_hashtable( - KMM_HASH_SIZE, - hash_string, - hash_string_comp, - NULL, - NULL); - - ht_registrar = CreateThread( - NULL, - 0, - kmmint_registrar, - NULL, - 0, - &dummy); - - _WAIT_FOR_START; - - khc_load_schema(NULL, schema_kmmconfig); - - LeaveCriticalSection(&cs_kmm); -} - -KHMEXP void KHMAPI kmm_exit(void) -{ - kmm_module_i * m; - kmm_plugin_i * p; - - EnterCriticalSection(&cs_kmm); - - p = kmm_listed_plugins; - while(p) { - kmm_plugin_i * pn; - - pn = LNEXT(p); - /* plugins that were never resolved should be kicked off the - list. Flipping the refcount will do that if no other - references exist for the plugin. The plugins that were - waiting for unresolved dependencies will automatically get - freed when the placeholders and other plugins get freed. */ - if(p->state == KMM_PLUGIN_STATE_PLACEHOLDER) { - kmm_hold_plugin(kmm_handle_from_plugin(p)); - kmm_release_plugin(kmm_handle_from_plugin(p)); - } - - p = pn; - } - - m = kmm_all_modules; - while(m) { - kmm_unload_module(kmm_handle_from_module(m)); - m = LNEXT(m); - } - - LeaveCriticalSection(&cs_kmm); - WaitForSingleObject(evt_exit, INFINITE); - - kmq_send_thread_quit_message(tid_registrar, 0); - - EnterCriticalSection(&cs_kmm); - - hash_del_hashtable(hash_plugins); - hash_del_hashtable(hash_modules); - - LeaveCriticalSection(&cs_kmm); - - TlsFree(tls_kmm); - - tls_kmm = 0; -} - -void kmm_dll_init(void) -{ - InitializeCriticalSection(&cs_kmm); - evt_startup = CreateEvent(NULL, TRUE, FALSE, NULL); - evt_exit = CreateEvent(NULL, TRUE, TRUE, NULL); -} - -void kmm_dll_exit(void) -{ - DeleteCriticalSection(&cs_kmm); - if(evt_startup) - CloseHandle(evt_startup); - evt_startup = NULL; -} - -void -kmm_process_attach(HINSTANCE hinstDLL) { - kmm_hInstance = hinstDLL; - kmm_dll_init(); -} - -void -kmm_process_detach(void) { - kmm_dll_exit(); -} diff --git a/src/windows/identity/kmm/kplugin.h b/src/windows/identity/kmm/kplugin.h deleted file mode 100644 index 00e3e06ed..000000000 --- a/src/windows/identity/kmm/kplugin.h +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KPLUGIN_H -#define __KHIMAIRA_KPLUGIN_H - -#include<kmm.h> -#include<kherror.h> - -/*! \addtogroup kmm -@{*/ -/*! \defgroup kplugin NetIDMgr Plugin Callbacks - -See the following related documentation pages for more information -about NetIDMgr plugins. - -These are prototypes of functions that must be implemented by a NetIDMgr -plugin. - -- \ref plugins -@{*/ - -/*! \brief Initialize the module - - This is the first callback function to be called in a module. - Perform all the required intialization when this is called. As - mentioned in \ref plugins, you should not attempt to call any - NetIDMgr API function from DLLMain or other initialization code - other than this one. - - You should use this call back to register the plugins that will be - implemented in this module and to notify the plugin manager of any - resource libraries that this module will use. - - Call: - - kmm_set_locale() : to set the notify the plugin manager of the - locale specifc resource libraries that are used by this module. - - kmm_provide_plugin() : to register each plugin that is - implemented in this module. - - This function is called in the context of the current user, from - the plug-in manager thread. This same thread is used by the - plug-in manager to load and initialize all the modules for a - session. - - The name of the callback must be init_module(). The calling - convention is KHMAPI, which is currently __stdcall. - - If this function does not register any plugins, the plugin manager - will immediately call exit_module() and unload the module even if - the init_module() function completes successfully. - - \return Return the following values to indicate whether the module - successfully initialized or not. - - KHM_ERROR_SUCCESS : Succeeded. The module manager will call - init_plugin() for each of the registered plugins for the - module. - - any other error code: Signals that the module did not - successfully initialize. The plugin manager will - immediately call exit_module() and then unload the module. - - \note This callback is required. -*/ -KHMEXP_EXP khm_int32 KHMAPI init_module(kmm_module h_module); - -/*! \brief Type for init_module() */ -typedef khm_int32 (KHMAPI *init_module_t)(kmm_module); - -#if defined(_WIN64) -#define EXP_INIT_MODULE "init_module" -#elif defined(_WIN32) -#define EXP_INIT_MODULE "_init_module@4" -#else -#error EXP_INIT_MODULE not defined for platform -#endif - -/*! \brief Plugin procedure - - This is the message processor for a plugin. See \ref pi_fw_pnm_p - for more information. - - Essentially, this is a message subscriber for KMQ messages. -*/ -KHMEXP_EXP khm_int32 KHMAPI _plugin_proc(khm_int32 msg_type, khm_int32 msg_subtype, khm_ui_4 uparam, void * vparam); - -/*! \brief Type for init_plugin() */ -typedef kmq_callback_t _plugin_proc_t; - -/*! \brief Exit a module - - This is the last callback function that the NetIDMgr module - manager calls before unloading the module. When this function is - called, all of the plugins for the module have already been - stopped. However, any localization libraries that were loaded as - a result of init_module() calling kmm_set_locale_info() will still - be loaded. These localization libraries will be unloaded - immediately after this callback returns. - - Use this callback to perform any required cleanup tasks. However, - it is advisable that each plugin perform its own cleanup tasks, - since each plugin may be stopped independently of others. - - \return The return value of this function is ignored. - - \note This callback is not required. -*/ -KHMEXP_EXP khm_int32 KHMAPI exit_module(kmm_module h_module); - -/*! \brief Type for exit_module() */ -typedef khm_int32 (KHMAPI *exit_module_t)(kmm_module); - -#if defined(_WIN64) -#define EXP_EXIT_MODULE "exit_module" -#elif defined(_WIN32) -#define EXP_EXIT_MODULE "_exit_module@4" -#else -#error EXP_EXIT_MODULE not defined for platform -#endif - -/*@}*/ -/*@}*/ - -#endif diff --git a/src/windows/identity/kmm/lang/kmm_msgs.mc b/src/windows/identity/kmm/lang/kmm_msgs.mc deleted file mode 100644 index 898ffa2fc..000000000 --- a/src/windows/identity/kmm/lang/kmm_msgs.mc +++ /dev/null @@ -1,259 +0,0 @@ -; // ** kmm_msgs.mc - -; /* Since .mc files can contain strings from any language, we define -; all our messages in one file in the /lang/ directory instead of -; language specific subdirectories. */ - -; /* The type is set to (wchar_t *) because that's what we will be -; feeding kherr_report() function. */ - -MessageIdTypedef=LPWSTR - -; /* Severity values as defined in the message definition file are -; currently ignored. */ - -SeverityNames=( - Success=0x0 -) - -LanguageNames=( - English=0x409:MSG_ENU -) - -OutputBase=16 - -; /* Actual messages start here */ - -MessageId=1 -Severity=Success -SymbolicName=MSG_INITIAL -Language=English -Initial placeholder message -. - -MessageId= -SymbolicName=MSG_LOAD_DEFAULT -Language=English -Load default modules -. - -MessageId= -SymbolicName=MSG_INIT_MODULE -Language=English -Initializing module [%1] -. - -MessageId= -SymbolicName=MSG_IM_GET_CONFIG -Language=English -Can't get configuration for modules -. - -MessageId= -SymbolicName=MSG_IM_NOT_PREINIT -Language=English -Module is not in PREINIT state. Current state=[%1!d!] -. - -MessageId= -SymbolicName=MSG_IM_NOT_REGISTERED -Language=English -Module is not registered -. - -MessageId= -SymbolicName=MSG_IM_DISABLED -Language=English -Module is disabled -. - -MessageId= -SymbolicName=MSG_IM_MAX_FAIL -Language=English -Module has failed too many times -. - -MessageId= -SymbolicName=MSG_IM_INVALID_MODULE -Language=English -The DLL containing the module was not of the correct format. -. - -MessageId= -SymbolicName=MSG_IM_INCOMPATIBLE -Language=English -The DLL containing the module was not compatible with this version of NetIDMgr. -. - -Messageid= -SymbolicName=MSG_IM_NOT_FOUND -Language=English -Module binary was not found. Checked path [%1] -. - -MessageId= -SymbolicName=MSG_IM_NO_ENTRY -Language=English -Entry point not found. Checked entry point [%1] -. - -MessageId= -SymbolicName=MSG_IM_INIT_FAIL -Language=English -Module initialization entry point returned failure code [%1!d!] -. - -MessageId= -SymbolicName=MSG_IM_NO_PLUGINS -Language=English -No plug-ins were registered by the module -. - -MessageId= -SymbolicName=MSG_IM_MOD_STATE -Language=English -Module [%1] is in state [%2!d!] -. - -MessageId= -SymbolicName=MSG_IMERR_TITLE -Language=English -Failed to load module %1!s! -. - -MessageId= -SymbolicName=MSG_IMERR_SUGGEST -Language=English -The following information may help resolve this issue: - -%2!s! -. - -MessageId= -SymbolicName=MSG_IP_TASK_DESC -Language=English -Initializing plug-in [%1] -. - -MessageId= -SymbolicName=MSG_IP_GET_CONFIG -Language=English -Can't get configuration for plug-ins -. - -MessageId= -SymbolicName=MSG_IP_NOT_REGISTERED -Language=English -The plug-in is not registered -. - -MessageId= -SymbolicName=MSG_IP_DISABLED -Language=English -The plug-in is disabled -. - -MessageId= -SymbolicName=MSG_IP_HOLD -Language=English -Placing plug-in [%1] on hold -. - -MessageId= -SymbolicName=MSG_IP_STATE -Language=English -Leaving plug-in [%1] in state [%2!d!] -. - -MessageId= -SymbolicName=MSG_IP_EXITING -Language=English -The plug-in [%1] is in error state [%2!d!]. Exiting plug-in. -. - -MessageId= -SymbolicName=MSG_RMI_NOT_FOUND -Language=English -Can't get file version information for path [%1!s!] -. - -MessageId= -SymbolicName=MSG_RMI_NO_TRANS -Language=English -Can't get version resource tranlations list for path [%1!s!] -. - -MessageId= -SymbolicName=MSG_RMI_NO_LOCAL -Language=English -The list of version translations were empty or did not contain a resource for the current user or system locale. -. - -MessageId= -SymbolicName=MSG_RMI_RES_MISSING -Language=English -Required resource %1!s! missing -. - -MessageId= -SymbolicName=MSG_RMI_MOD_MISMATCH -Language=English -The module name specified in the resource is [%1!s!] while the module name as registered is [%2!s!] -. - -MessageId= -SymbolicName=MSG_RMI_RES_TOO_LONG -Language=English -The resource %1!s! is malformed or too long -. - -MessageId= -SymbolicName=MSG_RMI_API_MISMATCH -Language=English -The module was compile for API version %1!d!. However the current API version is %2!d!. -. - -MessageId= -SymbolicName=MSG_PB_START -Language=English -Starting plug-in [%1!s!] -. - -MessageId= -SymbolicName=MSG_PB_INVALID_CODE_PTR -Language=English -The plug-in is no longer valid. This maybe because the module containing the plug-in was unloaded. -. - -MessageId= -SymbolicName=MSG_PB_INIT_RV -Language=English -Initialization of the plug-in returned code %1!d!. -. - -MessageId= -SymbolicName=MSG_PB_INIT_FAIL -Language=English -Initialization of the %1!s! plug-in failed. The plug-in will be unloaded and any functionality provided will not be available. -. - -MessageId= -SymbolicName=MSG_PB_INIT_FAIL_S -Language=English -Plug-in %1!s! failed to initialize -. - -MessageId= -SymbolicName=MSG_PB_INIT_FAIL_G -Language=English -Details for plug-in: -Description: %2!s! -Module: %3!s! -Support: %4!s! -. - -MessageId= -SymbolicName=MSG_PB_INIT_DONE -Language=English -Plug-in running -. diff --git a/src/windows/identity/kmq/Makefile b/src/windows/identity/kmq/Makefile deleted file mode 100644 index 8dcdca405..000000000 --- a/src/windows/identity/kmq/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -# -# 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 -# (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. - - -MODULE=kmq -!include <../config/Makefile.w32> - -INCFILES= \ - $(INCDIR)\kmq.h - -OBJFILES= \ - $(OBJ)\kmqmain.obj \ - $(OBJ)\init.obj \ - $(OBJ)\msgtype.obj \ - $(OBJ)\consumer.obj \ - $(OBJ)\publisher.obj \ - $(OBJ)\kmqconfig.obj - -SDKLIBFILES=\ - strsafe.lib - -$(OBJ)\kmqconfig.c: kmqconfig.csv $(CONFDIR)\csvschema.cfg - $(CCSV) $** $@ - -all: mkdirs $(INCFILES) $(OBJFILES) - -clean:: - if exist ..\obj $(RM) $(INCFILES) diff --git a/src/windows/identity/kmq/consumer.c b/src/windows/identity/kmq/consumer.c deleted file mode 100644 index 87d24130f..000000000 --- a/src/windows/identity/kmq/consumer.c +++ /dev/null @@ -1,572 +0,0 @@ -/* - * 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 - * 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<kmqinternal.h> -#include<assert.h> - -DWORD kmq_tls_queue; - -CRITICAL_SECTION cs_kmq_msg_ref; - -kmq_message_ref * kmq_msg_ref_free = NULL; - -/* ad-hoc subscriptions */ -kmq_msg_subscription * kmq_adhoc_subs = NULL; - -#ifdef DEBUG - -#include<stdio.h> - -void -kmqint_dump_consumer(FILE * f) { - kmq_message_ref * r; - kmq_msg_subscription * s; - - int n_free = 0; - int n_adhoc = 0; - - EnterCriticalSection(&cs_kmq_msg_ref); - - fprintf(f, "qc0\t*** Free Message References ***\n"); - - fprintf(f, "qc1\tAddress\n"); - - r = kmq_msg_ref_free; - while(r) { - n_free ++; - - fprintf(f, "qc2\t0x%p\n", r); - - r = LNEXT(r); - } - - fprintf(f, "qc3\tTotal free message references : %d\n", n_free); - - fprintf(f, "qc4\t--- End ---\n"); - - LeaveCriticalSection(&cs_kmq_msg_ref); - - EnterCriticalSection(&cs_kmq_global); - - fprintf(f, "qc5\t*** Adhoc Message Subscriptions ***\n"); - - fprintf(f, "qc6\tAddress\tMsg Type\tRcpt Type\tRcpt\tQueue\n"); - - s = kmq_adhoc_subs; - - while(s) { - n_adhoc ++; - - fprintf(f, "qc7\t0x%p\t%d\t%s\t0x%p\t0x%p\n", - s, - s->type, - (s->rcpt_type == KMQ_RCPTTYPE_CB)?"CALLBACK":"HWND", - (s->rcpt_type == KMQ_RCPTTYPE_CB)? s->recipient.cb: (void *) s->recipient.hwnd, - s->queue); - - s = LNEXT(s); - } - - fprintf(f, "qc8\tTotal ad-hoc subscriptions : %d\n", n_adhoc); - - fprintf(f, "qc9\t--- End ---\n"); - - LeaveCriticalSection(&cs_kmq_global); - -} - -#endif - -/*! \internal - \brief Get a message ref object - \note called with cs_kmq_msg_ref held */ -kmq_message_ref * kmqint_get_message_ref(void) { - kmq_message_ref * r; - - LPOP(&kmq_msg_ref_free, &r); - if(!r) { - r = PMALLOC(sizeof(kmq_message_ref)); - } - ZeroMemory(r, sizeof(kmq_message_ref)); - - r->msg = NULL; - r->recipient = NULL; - - return r; -} - -/*! \internal - \brief Free a message ref object - \note called with cs_kmq_msg_ref and cs_kmq_msg held */ -void kmqint_put_message_ref(kmq_message_ref * r) { - if(!r) - return; - if(r->msg) { - r->msg->refcount--; - r->msg = NULL; - } - LPUSH(&kmq_msg_ref_free, r); -} - -/*! \internal - \brief Get the queue associated with the current thread - \note Obtains ::cs_kmq_global - */ -kmq_queue * kmqint_get_thread_queue(void) { - kmq_queue * q; - - q = (kmq_queue *) TlsGetValue(kmq_tls_queue); - if(!q) { - kmqint_attach_this_thread(); - q = (kmq_queue *) TlsGetValue(kmq_tls_queue); - } - - return q; -} - -/*! \internal - \brief Get the topmost message ref for a queue - \note Obtains kmq_queue::cs - */ -void kmqint_get_queue_message_ref(kmq_queue * q, kmq_message_ref ** r) { - EnterCriticalSection(&q->cs); - - if (q->flags & KMQ_QUEUE_FLAG_DELETED) { - *r = NULL; - } else { - QGET(q,r); - if(QTOP(q)) - SetEvent(q->wait_o); - } - - LeaveCriticalSection(&q->cs); -} - -/*! \internal - \brief Post a message to a queue - \note Obtains ::cs_kmq_msg_ref, ::cs_kmq_msg, kmq_queue::cs - */ -void kmqint_post_queue(kmq_queue * q, kmq_message *m) { - kmq_message_ref *r; - - EnterCriticalSection(&q->cs); - if (q->flags & KMQ_QUEUE_FLAG_DELETED) { - LeaveCriticalSection(&q->cs); - return; - } - LeaveCriticalSection(&q->cs); - - EnterCriticalSection(&cs_kmq_msg_ref); - r = kmqint_get_message_ref(); - LeaveCriticalSection(&cs_kmq_msg_ref); - - r->msg = m; - r->recipient = NULL; - - EnterCriticalSection(&cs_kmq_msg); - m->refcount++; - m->nSent++; - LeaveCriticalSection(&cs_kmq_msg); - - EnterCriticalSection(&q->cs); - QPUT(q,r); - SetEvent(q->wait_o); - LeaveCriticalSection(&q->cs); -} - -/*! \internal - \brief Post a message to a subscriber - \note Obtains ::cs_kmq_msg_ref, ::cs_kmq_msg, kmq_queue::cs - \note Should be called with ::cs_kmq_msg held - \note Should be called with ::cs_kmq_types held if try_send is true - */ -void kmqint_post(kmq_msg_subscription * s, kmq_message * m, khm_boolean try_send) { - if(s->rcpt_type == KMQ_RCPTTYPE_CB) { - kmq_queue *q; - kmq_message_ref *r; - - q = s->queue; - - if(try_send && q->thread == GetCurrentThreadId()) { - khm_int32 rv; - /* we are sending a message from this thread to this - thread. just call the recipient directly, bypassing - the message queue. */ - m->refcount++; - m->nSent++; - rv = s->recipient.cb(m->type, m->subtype, - m->uparam, m->vparam); - m->refcount--; - if(KHM_SUCCEEDED(rv)) - m->nCompleted++; - else - m->nFailed++; - } else { - - EnterCriticalSection(&q->cs); - if (q->flags & KMQ_QUEUE_FLAG_DELETED) { - LeaveCriticalSection(&q->cs); - return; - } - LeaveCriticalSection(&q->cs); - - EnterCriticalSection(&cs_kmq_msg_ref); - r = kmqint_get_message_ref(); - LeaveCriticalSection(&cs_kmq_msg_ref); - - r->msg = m; - r->recipient = s->recipient.cb; - - m->refcount++; - m->nSent++; - - EnterCriticalSection(&q->cs); - QPUT(q,r); - SetEvent(q->wait_o); - LeaveCriticalSection(&q->cs); - } - } - -#ifdef _WIN32 - else if(s->rcpt_type == KMQ_RCPTTYPE_HWND) { - if(try_send && - GetCurrentThreadId() == GetWindowThreadProcessId(s->recipient.hwnd, - NULL)) { - /* kmqint_post does not know whether there are any other - messages waiting to be posted at this point. Hence, - simply sending the message is not the right thing to do - as the recipient may incorrectly assume that the - message has completed when (m->nCompleted + m->nFailed - == m->nSent). Therefore, we only increment nSent after - the message is sent. */ - - m->refcount++; - - /* the kmq_wm_begin()/kmq_wm_end() and kmq_wm_dispatch() - handlers decrement the reference count on the message - when they are done. */ - SendMessage(s->recipient.hwnd, KMQ_WM_DISPATCH, - m->type, (LPARAM) m); - - m->nSent++; - - } else { - m->nSent++; - m->refcount++; - - /* the kmq_wm_begin()/kmq_wm_end() and kmq_wm_dispatch() - handlers decrement the reference count on the message - when they are done. */ - PostMessage(s->recipient.hwnd, KMQ_WM_DISPATCH, - m->type, (LPARAM) m); - } - } -#endif - - else { - /* This could either be because we were passed in an invalid - subscription or because we lost a race to a thread that - deleted an ad-hoc subscription. */ -#ifdef DEBUG - assert(FALSE); -#endif - } -} - -/*! \internal - \brief Subscribes a window to a message type - \note Obtains ::cs_kmq_types - */ -KHMEXP khm_int32 KHMAPI kmq_subscribe_hwnd(khm_int32 type, HWND hwnd) { - kmq_msg_subscription * s; - - s = PMALLOC(sizeof(kmq_msg_subscription)); - ZeroMemory(s, sizeof(*s)); - s->magic = KMQ_MSG_SUB_MAGIC; - LINIT(s); - s->queue = NULL; - s->rcpt_type = KMQ_RCPTTYPE_HWND; - s->recipient.hwnd = hwnd; - kmqint_msg_type_add_sub(type, s); - - return KHM_ERROR_SUCCESS; -} - -/*! \internal - \note Obtains ::cs_kmq_types, ::cs_kmq_global - */ -KHMEXP khm_int32 KHMAPI kmq_subscribe(khm_int32 type, kmq_callback_t cb) { - kmq_msg_subscription * s; - - s = PMALLOC(sizeof(kmq_msg_subscription)); - ZeroMemory(s, sizeof(*s)); - s->magic = KMQ_MSG_SUB_MAGIC; - LINIT(s); - s->queue = kmqint_get_thread_queue(); - s->rcpt_type = KMQ_RCPTTYPE_CB; - s->recipient.cb = cb; - kmqint_msg_type_add_sub(type, s); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI kmq_create_hwnd_subscription(HWND hw, - khm_handle * result) -{ - kmq_msg_subscription * s; - - s = PMALLOC(sizeof(kmq_msg_subscription)); - ZeroMemory(s, sizeof(*s)); - s->magic = KMQ_MSG_SUB_MAGIC; - LINIT(s); - s->queue = NULL; - s->rcpt_type = KMQ_RCPTTYPE_HWND; - s->recipient.hwnd = hw; - - EnterCriticalSection(&cs_kmq_global); - LPUSH(&kmq_adhoc_subs, s); - LeaveCriticalSection(&cs_kmq_global); - - *result = (khm_handle) s; - - return KHM_ERROR_SUCCESS; -} - -/*! \internal - \note Obtains ::cs_kmq_global -*/ -KHMEXP khm_int32 KHMAPI kmq_create_subscription(kmq_callback_t cb, - khm_handle * result) -{ - kmq_msg_subscription * s; - - s = PMALLOC(sizeof(kmq_msg_subscription)); - ZeroMemory(s, sizeof(*s)); - s->magic = KMQ_MSG_SUB_MAGIC; - LINIT(s); - s->queue = kmqint_get_thread_queue(); - s->rcpt_type = KMQ_RCPTTYPE_CB; - s->recipient.cb = cb; - - EnterCriticalSection(&cs_kmq_global); - LPUSH(&kmq_adhoc_subs, s); - LeaveCriticalSection(&cs_kmq_global); - - *result = (khm_handle) s; - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI kmq_delete_subscription(khm_handle sub) -{ - kmq_msg_subscription * s; - - s = (kmq_msg_subscription *) sub; - - assert(s->magic == KMQ_MSG_SUB_MAGIC); - - s->type = 0; - - EnterCriticalSection(&cs_kmq_global); - LDELETE(&kmq_adhoc_subs, s); - LeaveCriticalSection(&cs_kmq_global); - - PFREE(s); - - return KHM_ERROR_SUCCESS; -} - -/*! \internal - \brief Unsubscribes a window from a message type - \note Obtains ::cs_kmq_types - */ -KHMEXP khm_int32 KHMAPI kmq_unsubscribe_hwnd(khm_int32 type, HWND hwnd) { - kmq_msg_subscription * s; - - s = kmqint_msg_type_del_sub_hwnd(type, hwnd); - if(s) - PFREE(s); - return (s)?KHM_ERROR_SUCCESS:KHM_ERROR_NOT_FOUND; -} - -/*! \internal - \brief Unsubscribe a callback from a message type - \note Obtains ::cs_kmq_types, ::cs_kmq_global - */ -KHMEXP khm_int32 KHMAPI kmq_unsubscribe(khm_int32 type, kmq_callback_t cb) { - kmq_msg_subscription * s; - - s = kmqint_msg_type_del_sub_cb(type,cb); - if(s) - PFREE(s); - - return (s)?KHM_ERROR_SUCCESS:KHM_ERROR_NOT_FOUND; -} - -KHMEXP LRESULT KHMAPI kmq_wm_begin(LPARAM lparm, kmq_message ** m) { - *m = (kmq_message *) lparm; - if ((*m)->err_ctx) { - kherr_push_context((*m)->err_ctx); - } - return TRUE; -} - -/*! \internal - \note Obtains ::cs_kmq_msg - */ -KHMEXP LRESULT KHMAPI kmq_wm_end(kmq_message *m, khm_int32 rv) { - if (m->err_ctx) - kherr_pop_context(); - - EnterCriticalSection(&cs_kmq_msg); - m->refcount--; - if(KHM_SUCCEEDED(rv)) - m->nCompleted++; - else - m->nFailed++; - - if(m->nCompleted + m->nFailed == m->nSent) { - kmqint_put_message(m); - } - LeaveCriticalSection(&cs_kmq_msg); - - return TRUE; -} - -/*! \internal - \note Obtains ::cs_kmq_msg - */ -KHMEXP LRESULT KHMAPI kmq_wm_dispatch(LPARAM lparm, kmq_callback_t cb) { - kmq_message *m; - khm_int32 rv; - - m = (kmq_message *) lparm; - - if (m->err_ctx) - kherr_push_context(m->err_ctx); - - rv = cb(m->type, m->subtype, m->uparam, m->vparam); - - if (m->err_ctx) - kherr_pop_context(); - - EnterCriticalSection(&cs_kmq_msg); - - m->refcount--; - if(KHM_SUCCEEDED(rv)) - m->nCompleted++; - else - m->nFailed++; - - if(m->nCompleted + m->nFailed == m->nSent) { - kmqint_put_message(m); - } - LeaveCriticalSection(&cs_kmq_msg); - - return TRUE; -} - -KHMEXP khm_boolean KHMAPI kmq_is_call_aborted(void) { - /* TODO: Implement this */ - return FALSE; -} - -/*! \internal - - \note Obtains ::cs_kmq_global, kmq_queue::cs, ::cs_kmq_msg_ref, ::cs_kmq_msg, -*/ -KHMEXP khm_int32 KHMAPI kmq_dispatch(kmq_timer timeout) { - kmq_queue * q; - kmq_message_ref * r; - kmq_message *m; - DWORD hr; - - q = kmqint_get_thread_queue(); - - assert(q->wait_o); - - hr = WaitForSingleObject(q->wait_o, timeout); - if(hr == WAIT_OBJECT_0) { - /* signalled */ - kmqint_get_queue_message_ref(q, &r); - - m = r->msg; - - if(m->type != KMSG_SYSTEM || m->subtype != KMSG_SYSTEM_EXIT) { - khm_boolean rv; - - if (m->err_ctx) - kherr_push_context(m->err_ctx); - - /* TODO: before dispatching the message, the message being - dispatched for this thread needs to be stored so that - it can be looked up in kmq_is_call_aborted(). This - needs to happen in kmq_wm_dispatch() and - kmq_wm_begin() as well. */ - - /* dispatch */ - rv = r->recipient(m->type, m->subtype, m->uparam, m->vparam); - - if (m->err_ctx) - kherr_pop_context(); - - EnterCriticalSection(&cs_kmq_msg); - EnterCriticalSection(&cs_kmq_msg_ref); - kmqint_put_message_ref(r); - LeaveCriticalSection(&cs_kmq_msg_ref); - - if(KHM_SUCCEEDED(rv)) - m->nCompleted++; - else - m->nFailed++; - - if(m->nCompleted + m->nFailed == m->nSent) { - kmqint_put_message(m); - } - LeaveCriticalSection(&cs_kmq_msg); - - return KHM_ERROR_SUCCESS; - } else { - EnterCriticalSection(&cs_kmq_msg); - EnterCriticalSection(&cs_kmq_msg_ref); - kmqint_put_message_ref(r); - LeaveCriticalSection(&cs_kmq_msg_ref); - m->nCompleted++; - if(m->nCompleted + m->nFailed == m->nSent) { - kmqint_put_message(m); - } - LeaveCriticalSection(&cs_kmq_msg); - - return KHM_ERROR_EXIT; - } - } else { - return KHM_ERROR_TIMEOUT; - } -} - -/* TODO: rename this file to subscriber.c */ diff --git a/src/windows/identity/kmq/init.c b/src/windows/identity/kmq/init.c deleted file mode 100644 index f73fd01a5..000000000 --- a/src/windows/identity/kmq/init.c +++ /dev/null @@ -1,310 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<kmqinternal.h> -#include<kconfig.h> -#include<assert.h> - -CRITICAL_SECTION cs_kmq_global; -kmq_timer kmq_queue_dead_timeout; -kmq_timer kmq_call_dead_timeout; - -kmq_queue * queues; - -LONG kmq_init_once = 0; - -void kmqint_init(void) { - khm_handle hconfig = NULL; - - queues = NULL; - - InitializeCriticalSection(&cs_kmq_global); - InitializeCriticalSection(&cs_kmq_msg); - InitializeCriticalSection(&cs_kmq_msg_ref); - - EnterCriticalSection(&cs_kmq_global); - khc_load_schema(NULL, schema_kmqconfig); - khc_open_space(NULL, KMQ_CONF_SPACE_NAME, KHM_PERM_READ, &hconfig); - if(hconfig) { - khm_int32 t = 0; - - khc_read_int32(hconfig, KMQ_CONF_QUEUE_DEAD_TIMEOUT_NAME, &t); - kmq_queue_dead_timeout = t; - - khc_read_int32(hconfig, KMQ_CONF_CALL_DEAD_TIMEOUT_NAME, &t); - kmq_call_dead_timeout = t; - - khc_close_space(hconfig); - } - kmqint_init_msg_types(); - LeaveCriticalSection(&cs_kmq_global); - - kmq_tls_queue = TlsAlloc(); -} - -void kmqint_exit(void) { - EnterCriticalSection(&cs_kmq_global); - kmqint_exit_msg_types(); - LeaveCriticalSection(&cs_kmq_global); - DeleteCriticalSection(&cs_kmq_msg); - DeleteCriticalSection(&cs_kmq_msg_ref); - DeleteCriticalSection(&cs_kmq_global); - - TlsFree(kmq_tls_queue); -} - -/*! \internal - \brief Preps a thread for use with kmq - \note Obtains ::cs_kmq_global - */ -void kmqint_attach_this_thread(void) { - kmq_queue * q; - - EnterCriticalSection(&cs_kmq_global); - - q = (kmq_queue *) TlsGetValue(kmq_tls_queue); - if(!q) { - q = PMALLOC(sizeof(kmq_queue)); - - InitializeCriticalSection(&q->cs); - q->thread = GetCurrentThreadId(); - QINIT(q); - LINIT(q); - q->wait_o = CreateEvent(NULL, FALSE, FALSE, NULL); - q->load = 0; - q->last_post = 0; - q->flags = 0; - - LPUSH(&queues, q); - - TlsSetValue(kmq_tls_queue, (LPVOID) q); - } - - LeaveCriticalSection(&cs_kmq_global); -} - -/*! \internal - \brief Detaches the current thread from kmq - \note Obtains ::cs_kmq_global - */ -void kmqint_detach_this_thread(void) { - kmq_queue * q; - - q = (kmq_queue *) TlsGetValue(kmq_tls_queue); - if(q) { - kmq_message_ref * r; - kmq_message * m; - - EnterCriticalSection(&q->cs); - - if (q->flags & KMQ_QUEUE_FLAG_DETACHING) { -#ifdef DEBUG - assert(FALSE); -#endif - LeaveCriticalSection(&q->cs); - return; - } - - q->flags |= KMQ_QUEUE_FLAG_DELETED | KMQ_QUEUE_FLAG_DETACHING; - - QGET(q, &r); - while(r) { - - m = r->msg; - - LeaveCriticalSection(&q->cs); - - EnterCriticalSection(&cs_kmq_msg); - EnterCriticalSection(&cs_kmq_msg_ref); - kmqint_put_message_ref(r); - LeaveCriticalSection(&cs_kmq_msg_ref); - - m->nFailed++; - if(m->nCompleted + m->nFailed == m->nSent) { - kmqint_put_message(m); - } - LeaveCriticalSection(&cs_kmq_msg); - - EnterCriticalSection(&q->cs); - - QGET(q, &r); - } - - CloseHandle(q->wait_o); - - q->wait_o = NULL; - - q->flags &= ~KMQ_QUEUE_FLAG_DETACHING; - - LeaveCriticalSection(&q->cs); - - /* For now, we don't free the queue. */ - - /* TODO: before we can free the queue, we have to go through - all the message type subscriptions and ad-hoc subscriptions - and make sure no subscriptions exist which refer to this - message queue. */ - } -} - -HANDLE kmq_h_compl = NULL; -kmq_thread_id kmq_tid_compl; - -/* Message transfer */ -struct tag_kmq_msg_xfer { - QDCL(kmq_message); -} kmq_completion_xfer; - -HANDLE compl_wx; -BOOL compl_continue; -CRITICAL_SECTION cs_compl; - -DWORD WINAPI kmqint_completion_thread_proc(LPVOID p) { - kmq_message * m; - kherr_context * ctx; - - PDESCTHREAD(L"Msg completion thread", L"KMQ"); - - EnterCriticalSection(&cs_compl); - do { - - if (QTOP(&kmq_completion_xfer) == NULL) { - LeaveCriticalSection(&cs_compl); - WaitForSingleObject(compl_wx, INFINITE); - EnterCriticalSection(&cs_compl); - /* go through the loop again before checking the queue */ - } else { - QGET(&kmq_completion_xfer, &m); - LeaveCriticalSection(&cs_compl); - EnterCriticalSection(&cs_kmq_msg); - - ctx = m->err_ctx; - - if (ctx) - kherr_push_context(ctx); - - kmqint_put_message(m); - - if (ctx) - kherr_pop_context(); - - LeaveCriticalSection(&cs_kmq_msg); - EnterCriticalSection(&cs_compl); - } - - } while(compl_continue); - - LeaveCriticalSection(&cs_compl); - - ExitThread(0); -} - -int kmqint_call_completion_handler(kmq_msg_completion_handler h, - kmq_message * m) { - if (h == NULL) - return 0; - - /* We only dispatch to the completion thread if we are not the - completion thread. If calling the completion handler results - in more messages completing, then we just call the completion - handler directly. We also make an exception for completions - that happen before the message queue is properly intiailized. */ - - if (kmq_tid_compl != GetCurrentThreadId() && - kmq_h_compl != NULL) { - - EnterCriticalSection(&cs_compl); - QPUT(&kmq_completion_xfer, m); - SetEvent(compl_wx); - LeaveCriticalSection(&cs_compl); - - return 1; - - } else { - h(m); - - return 0; - } -} - -KHMEXP khm_int32 KHMAPI kmq_init(void) { - if (InterlockedIncrement(&kmq_init_once) == 1) { - EnterCriticalSection(&cs_kmq_global); - - InitializeCriticalSection(&cs_compl); - compl_wx = CreateEvent(NULL, FALSE, FALSE, NULL); - compl_continue = TRUE; - QINIT(&kmq_completion_xfer); - - kmq_h_compl = CreateThread(NULL, - 0, - kmqint_completion_thread_proc, - NULL, - 0, - &kmq_tid_compl); - - assert(kmq_h_compl != NULL); - - LeaveCriticalSection(&cs_kmq_global); - } - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI kmq_exit(void) { - if (InterlockedDecrement(&kmq_init_once) == 0) { - - EnterCriticalSection(&cs_compl); - compl_continue = FALSE; - SetEvent(compl_wx); - LeaveCriticalSection(&cs_compl); - - WaitForSingleObject(kmq_h_compl, INFINITE); - - EnterCriticalSection(&cs_kmq_global); - CloseHandle(kmq_h_compl); - kmq_h_compl = NULL; - kmq_tid_compl = 0; - CloseHandle(compl_wx); - DeleteCriticalSection(&cs_compl); - LeaveCriticalSection(&cs_kmq_global); - } - - return KHM_ERROR_SUCCESS; -} - -#ifdef DEBUG - -void kmqint_dump_consumer(FILE * f); -void kmqint_dump_publisher(FILE * f); - - -KHMEXP void KHMAPI kmqint_dump(FILE * f) { - kmqint_dump_consumer(f); - kmqint_dump_publisher(f); -} - -#endif diff --git a/src/windows/identity/kmq/kmq.h b/src/windows/identity/kmq/kmq.h deleted file mode 100644 index 046ec0d71..000000000 --- a/src/windows/identity/kmq/kmq.h +++ /dev/null @@ -1,713 +0,0 @@ -/* - * 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 - * 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 __KHIMAIRA_KMQ_H__ -#define __KHIMAIRA_KMQ_H__ - -/*! \defgroup kmq NetIDMgr Message Queue - - The Network Identity Manager Message Queue handles all the - messaging within the application and all loaded plug-ins. - - For information about the messaging system and how it is used, - please see \ref pi_fw_pnm_msg . -*/ -/*@{*/ - -#include<khdefs.h> -#include<khlist.h> -#include<kherr.h> - -/* general */ -#ifdef _WIN32 -typedef DWORD kmq_thread_id; -typedef DWORD kmq_timer; -#endif - -#ifdef _WIN32 -/*! \brief Window message for kmq - - This message is sent to the window procedure of a window if that - window is a subscriber to KMQ messages. - - \see kmq_subscribe_hwnd() for more information about handling this - window message - */ -#define KMQ_WM_DISPATCH (WM_APP+0x100) -#endif - -/* callback */ - -/*! \brief A message callback - - Should return TRUE if the message is properly handled. Otherwise - return FALSE */ -typedef khm_int32 (KHMAPI *kmq_callback_t)(khm_int32 msg_type, - khm_int32 msg_sub_type, - khm_ui_4 uparam, - void * vparam); - -/* message */ - -/*! \brief A single response. - - Certain broadcast messages may user scatter-gather type - notification and result gathering. Individual subscribers to a - message attach their individual responses to a ::kmq_response - object and attach that to the message which can later be read by - the sender of the message. - */ -typedef struct tag_kmq_response { - kmq_thread_id thread; - void * response; - - LDCL(struct tag_kmq_response); -} kmq_response; - -/*! \brief A single message - */ -typedef struct tag_kmq_message { - khm_int32 type; /*!< Type of message */ - khm_int32 subtype; /*!< Subtype of message */ - - khm_ui_4 uparam; /*!< Integer parameter */ - void * vparam; /*!< Pointer to parameter blob */ - - khm_int32 nSent; /*!< Number of instances of message - sent (for broadcast messages) */ - - khm_int32 nCompleted; /*!< Number of instances that have - completed processing (for broadcast - messages) */ - - khm_int32 nFailed; /*!< Number of instances that failed - to process (for broadcast - messages) */ - - kmq_response * responses; /*!< List of responses */ - HANDLE wait_o; /*!< Event to wait on (only valid if - the publisher of the message - requested a handle to the call) */ - - kmq_timer timeSent; /*!< Time at which the message was - sent */ - kmq_timer timeExpire; /*!< Time at which the message - expires */ - - kherr_context * err_ctx; /*!< Error context for the message */ - - khm_boolean aborted; /*!< TRUE if the message has been - aborted. */ - - khm_int32 refcount; /*!< Internal use */ - - LDCL(struct tag_kmq_message); /*!< Internal use */ -} kmq_message; - -/*! \brief A handle to a call - */ -typedef kmq_message *kmq_call; - -/* publishers */ - -/*! \brief A completion handler for a message - - Each message type can have a completion handler. Once a message - of this a specific type has been broadcast and handled by all the - subscripbers, the message will be passed down to the completion - handler before the associated data structures are freed. This - allows applications that define message type to also define clean - up for each message. For example, the completion handler can - initiate another message if the messages form a sequence or free - up blocks of memory that was passed as the parameter to the - message. - */ -typedef void (KHMAPI *kmq_msg_completion_handler)(kmq_message *); - -#ifdef NOEXPORT - -KHMEXP khm_int32 KHMAPI kmq_init(void); - -KHMEXP khm_int32 KHMAPI kmq_exit(void); - -#endif - -/*! \brief Register a message type - - Registers a custom message type. The \a name parameter specifies - a language independent name for the message type and must be - unique and must be less than ::KMQ_MAXCCH_TYPE_NAME characters. - - \param[in] name Name of the message type. Upto - ::KMQ_MAXCCH_TYPE_NAME characters including terminating NULL. - The \a name cannot be a zero length string. - - \param[out] new_id Receives the new message type ID. Specify NULL - if the new message type is not required. - - \see kmq_find_type() and kmq_unregister_type() - - \retval KHM_ERROR_INVALID_PARAM The \a name parameter was invalid. - \retval KHM_ERROR_EXISTS A message type with that name already exists. - \retval KHM_ERROR_NO_RESOURCES Can't register any more message types. - \retval KHM_ERROR_SUCCESS The operation succeeded. - */ -KHMEXP khm_int32 KHMAPI kmq_register_type(wchar_t * name, khm_int32 * new_id); - -/*! \brief Find a message type - - Find the message type with the given name. If found, the type ID - is returned in \a id. - - \retval KHM_ERROR_SUCCESS A message type with the given name was - found. - \retval KHM_ERROR_NOT_FOUND A message type with the given name was - not found. - */ -KHMEXP khm_int32 KHMAPI kmq_find_type(wchar_t * name, khm_int32 * id); - -/*! \brief Unregister a message type - - Unregisters a message type that was registered using - kmq_register_type(). - - \retval KHM_ERROR_SUCCESS The specified message type was - successfully unregistered. - - \retval KHM_ERROR_NOT_FOUND The message type was not found. - */ -KHMEXP khm_int32 KHMAPI kmq_unregister_type(khm_int32 id); - -/*! \brief Subscribte to a message type. - - Adds a subscription to messages of type \a type. Subscriptions - are managed per thread. Therefore the subscription is actually - added to the subscription list for the current thread (the thread - which calls kmq_subscribe()). - - When a message of type \a type is received by the thread, it is - dispatched to the callback function identified by \a cb within the - context of this thread. - - \note Calling kmq_subscribe() from within multiple threads with - the same \a type and \a cb will result in multiple - subscriptions. - - \see kmq_unsubscribe() - \see kmq_dispatch() -*/ -KHMEXP khm_int32 KHMAPI kmq_subscribe(khm_int32 type, kmq_callback_t cb); - -/*! \brief Subscribe a window to a message type - - Adds the window specified by \a hwnd to the subscription list for - the message type \a type. When a message of this type is posted, - then the window procedure of the window \a hwnd receives a message - ::KMQ_WM_DISPATCH. - - When a window receives a ::KMQ_WM_DISPATCH message, it means that - a message has been posted which is of a type that the window has - subscribed for. Because of the way Windows handles window - messages and the way NetIDMgr message queues work, a thread which - has a window (or thread) procedure can not call kmq_dispatch() to - handle these messages. For threads that have window or thread - message loops, they must call kmq_subscribe_hwnd() to subscribe a - particular window (for thread message loops, this would be the - HWND of the message window for the thread) to NetIDMgr messages. - - There are two supported ways of handling the ::KMQ_WM_DISPATCH - message. Examples of both are provided below. - - Handling the message inline: - - \code - LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - kmq_message * m; - khm_int32 rv; - ... - switch(uMsg) { - case WM_CREATE: - ... - kmq_subscribe_hwnd(KMSG_CRED, hwnd); - ... - break; - - case WM_DESTROY: - ... - kmq_unsubscribe_hwnd(KMSG_CRED, hwnd); - ... - break; - - ... - case KMQ_WM_DISPATCH: - kmq_wm_begin(lParam,&m); - - if(m->type == KMSG_CRED && m->subtype == KMSG_CRED_ROOTDELTA) { - // do something - rv = KHM_ERROR_SUCCESS; - } - - return kmq_wm_end(m, rv); - ... - }; - ... - } - \endcode - - The other method is to dispatch the ::KMQ_WM_DISPATCH message to a - secondary callback function: - - \code - khm_int32 msg_handler(khm_int32 t, khm_int32 st, khm_ui_4 up, void * pb) { - khm_int32 rv = KHM_ERROR_SUCCESS; - - //handle message - - return rv; - } - - LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - kmq_message * m; - khm_int32 rv; - ... - switch(uMsg) { - ... - - case WM_CREATE: - ... - kmq_subscribe_hwnd(KMSG_CRED, hwnd); - ... - break; - - case WM_DESTROY: - ... - kmq_unsubscribe_hwnd(KMSG_CRED, hwnd); - ... - break; - - ... - case KMQ_WM_DISPATCH: - return kmq_wm_dispatch(lParam, msg_handler); - ... - }; - ... - } - \endcode - - \note Make sure you unsubscribe from the message type when the - window is destroyed. - - \see kmq_unsubscribe_hwnd() - \see kmq_wm_begin() - \see kmq_wm_end() - \see kmq_wm_dispatch() - */ -KHMEXP khm_int32 KHMAPI kmq_subscribe_hwnd(khm_int32 type, HWND hwnd); - -#ifdef _WIN32 -/*! \brief Begins handling a KMQ_WM_DISPATCH message - - \return The return value of this function should be ignored. - - \see kmq_subscribe_hwnd() for more details about handling ::KMQ_WM_DISPATCH - */ -KHMEXP LRESULT KHMAPI kmq_wm_begin(LPARAM lparm, kmq_message ** m); - -/*! \brief Ends handling a KMQ_WM_DISPATCH message - - \return The return value of this function should be the return - value of the window procedure. See kmq_subscribe_hwnd() - documentation for example - - \see kmq_subscribe_hwnd() for more details about handling ::KMQ_WM_DISPATCH - */ -KHMEXP LRESULT KHMAPI kmq_wm_end(kmq_message *m, khm_int32 rv); - -/*! \brief Dispatches a KMQ_WM_DISPATCH message to a callback - - \return The return value of this function should be the return - value of the window procedure. See kmq_subscribe_hwnd() - documentation for example. - - \see kmq_subscribe_hwnd() for more details about handling ::KMQ_WM_DISPATCH - */ -KHMEXP LRESULT KHMAPI kmq_wm_dispatch(LPARAM lparm, kmq_callback_t cb); -#endif - -/*! \brief Unsubscribe a callback from a message type - - Removes the subscription for message type \a type for callback - function \a cb from the subscription list for the current thread - (the thread that calls kmq_unsubscribe()). - - \note kmq_unsubscribe() can only remove subscriptions for the subscription - list for the current thread. - - \see kmq_subscribe() - \see kmq_dispatch() -*/ -KHMEXP khm_int32 KHMAPI kmq_unsubscribe(khm_int32 type, kmq_callback_t cb); - -/*! \brief Unsubscribe a window from a message type - - Removes the specific window from the subsription list for message - type \a type. - - \see kmq_subscribe_hwnd() -*/ -KHMEXP khm_int32 KHMAPI kmq_unsubscribe_hwnd(khm_int32 type, HWND hwnd); - -/*! \brief Create an ad-hoc subscription - - An ad-hoc subscription describes a callback point in a thread that - can be dispatched messages to individually without broadcasting. - - \see kmq_post_sub_msg(), kmq_post_sub_msg_ex(), - kmq_send_sub_msg(), kmq_post_subs_msg(), - kmq_post_subs_msg_ex(), kmq_send_subs_msg(), - kmq_delete_subscription() -*/ -KHMEXP khm_int32 KHMAPI kmq_create_subscription( - kmq_callback_t cb, - khm_handle * result); - -/*! \brief Create an ad-hoc subscription for a window - - An ad-hoc subscription describes a window that will be dispatched - messages individually without broadcasting. - - \see kmq_post_sub_msg(), kmq_post_sub_msg_ex(), - kmq_send_sub_msg(), kmq_post_subs_msg(), - kmq_post_subs_msg_ex(), kmq_send_subs_msg(), - kmq_delete_subscription() - */ -KHMEXP khm_int32 KHMAPI kmq_create_hwnd_subscription(HWND hw, - khm_handle * result); - -/*! \brief Delete an ad-hoc subscription - - Deletes a subscriptoin that was created using - kmq_create_subscription() - */ -KHMEXP khm_int32 KHMAPI kmq_delete_subscription(khm_handle sub); - -/*! \brief Post a message to a subscription - - Equivalent of kmq_post_msg() but only posts the message to the - specified subscription. - */ -KHMEXP khm_int32 KHMAPI kmq_post_sub_msg( - khm_handle sub, - khm_int32 type, - khm_int32 subtype, - khm_ui_4 uparam, - void * vparam); - -/*! \brief Post a message to a subscription and acquire a handle to the call - */ -KHMEXP khm_int32 KHMAPI kmq_post_sub_msg_ex( - khm_handle sub, - khm_int32 type, - khm_int32 subtype, - khm_ui_4 uparam, - void * vparam, - kmq_call * call); - -/*! \brief Send a synchronous message to a subscription - - \retval KHM_ERROR_SUCCESS The call succeeded, and no subscribers reported errors - \retval KHM_ERROR_PARTIAL The call succeeded, but at least one subscriber reported errors - */ -KHMEXP khm_int32 KHMAPI kmq_send_sub_msg( - khm_handle sub, - khm_int32 type, - khm_int32 subtype, - khm_ui_4 uparam, - void * vparam); - -/*! \brief Post a message to a group of subscriptions - - The block of memory pointed to by \a subs should be an array of - subscriptions. The number of elements in that array should be \a - n_subs. A message as specified by the remaining parameters will - be dispatched to all of the subscription points in the array. - */ -KHMEXP khm_int32 KHMAPI kmq_post_subs_msg( - khm_handle * subs, - khm_size n_subs, - khm_int32 type, - khm_int32 subtype, - khm_ui_4 uparam, - void * vparam); - -/*! \brief Post a message to a group of subscriptions and acquire a handle to the call - - The block of memory pointed to by \a subs should be an array of - subscriptions. The number of elements in that array should be \a - n_subs. A message as specified by the remaining parameters will - be dispatched to all of the subscription points in the array, and - a handle to the call will be returned in \a call. - - The returned \a call will reference all of the dispatches that - were made. -*/ -KHMEXP khm_int32 KHMAPI kmq_post_subs_msg_ex( - khm_handle * subs, - khm_int32 n_subs, - khm_int32 type, - khm_int32 subtype, - khm_ui_4 uparam, - void * vparam, - kmq_call * call); - -/*! \brief Send a synchronous message to a group of subscriptions - - The block of memory pointed to by \a subs should be an array of - subscriptions. The number of elements in that array should be \a - n_subs. A message as specified by the remaining parameters will - be dispatched to all of the subscription points in the array. The - function will not return until all of the calls have succeeded. - - \retval KHM_ERROR_SUCCESS The call succeeded, and no subscribers reported errors - \retval KHM_ERROR_PARTIAL The call succeeded, but at least one subscriber reported errors -*/ -KHMEXP khm_int32 KHMAPI kmq_send_subs_msg( - khm_handle *subs, - khm_int32 n_subs, - khm_int32 type, - khm_int32 subtype, - khm_ui_4 uparam, - void * vparam); - -/*! \brief Dispatch a message for the current thread. - - This function opens the message list for the current thread and - dispatches the first message instance that is found. Note that if - multiple callbacks subscribe to the same message type in the same - thread, then when a message of that type is received, multiple - message instances are added to the message queue corresponding to - each subscription. - - If no message instances are waiting in the queue, kmq_dispatch() - waits for the \a timeout period for a message. - - \param[in] timeout The timeout period in milliseconds. Specify INFINITE for - kmq_dispatch() to wait indefinitely. - - \retval KHM_ERROR_SUCCESS A message instance was dispatched - \retval KHM_ERROR_TIMEOUT The timeout period elapsed - \retval KHM_ERROR_EXIT The message found on the queue was <KMSG_SYSTEM,KMSG_SYSTEM_EXIT> -*/ -KHMEXP khm_int32 KHMAPI kmq_dispatch(kmq_timer timeout); - -/*! \brief Send a message - - The specified message will be posted to all the subscribers of the - message type. Then the function will wait for all the subscribers - to finish processing the message before returning. - - \param[in] type The type of the message - \param[in] subtype The subtype - \param[in] uparam The khm_ui_4 parameter for the message - \param[in] blob The parameter blob for the message - - \note The internal timeout for this function is INFINITE. If you - it is desirable to use a different timeout, use - kmq_post_message_ex() and kmq_wait() functions. - - \retval KHM_ERROR_SUCCESS The call succeeded and no subscribers returned errors - \retval KHM_ERROR_PARTIAL The call succeeded but at least one subscriber returned an error -*/ -KHMEXP khm_int32 KHMAPI kmq_send_message( - khm_int32 type, - khm_int32 subtype, - khm_ui_4 uparam, - void * blob); - -/*! \brief Post a message - - The specified message will be posted to all the subscribers of the - message type. The function returns immediately. - - If you want to be able to wait for all the subscribers to finish - processing the message, you should use kmq_post_message_ex() - instead. - - \param[in] type The type of the message - \param[in] subtype The subtype - \param[in] uparam The khm_ui_4 parameter for the message - \param[in] blob The parameter blob for the message -*/ -KHMEXP khm_int32 KHMAPI kmq_post_message( - khm_int32 type, - khm_int32 subtype, - khm_ui_4 uparam, - void * blob); - -/*! \brief Post a message and acquire a handle to the call. - - The specified message is posted to all the subscribers. In - addition, a handle is obtained for the call which can be used in - subsequent call to kmq_free_call() or kmq_wait(). - - Call kmq_free_call() to free the handle. - - \param[in] type The type of the message - \param[in] subtype The subtype - \param[in] uparam The khm_ui_4 parameter for the message - \param[in] blob The parameter blob for the message - \param[out] call Receives the call handle. Set to NULL if the call handle is not required. - - \see kmq_free_call() -*/ -KHMEXP khm_int32 KHMAPI kmq_post_message_ex( - khm_int32 type, - khm_int32 subtype, - khm_ui_4 uparam, - void * blob, - kmq_call * call); - -/*! \brief Free a handle to a call obtained through kmq_post_message_ex() - - All call handles obtained through kmq_post_message_ex() must be - freed via a call to kmq_free_call(). -*/ -KHMEXP khm_int32 KHMAPI kmq_free_call(kmq_call call); - -/*! \brief Sends a <KMSG_SYSTEM,KMSG_SYSTEM_EXIT> message to the specified thread. - - The message itself will not be received by any callback function, - however, any kmq_dispatch() function that is currently active of - becomes active will exit with a KHM_ERROR_EXIT code. - kmq_send_thread_quit_message() will wait for this to happen before - returning. - - This function should not be called by the thread identified by the - \a thread parameter. - */ -KHMEXP khm_int32 KHMAPI kmq_send_thread_quit_message( - kmq_thread_id thread, - khm_ui_4 uparam); - -/*! \brief Post a <KMSG_SYSTEM,KMSG_SYSTEM_EXIT> message to the specified thread. - - The message itself will not be received by any callback function, - however, any kmq_dispatch() function that is currently active of - becomes active will exit with a KHM_ERROR_EXIT code. - kmq_post_thread_quit_message() will return immediately. - */ -KHMEXP khm_int32 KHMAPI kmq_post_thread_quit_message( - kmq_thread_id thread, - khm_ui_4 uparam, - kmq_call * call); - -KHMEXP khm_int32 KHMAPI kmq_get_next_response(kmq_call call, void ** resp); - -/*! \brief Check if a specific call has completed - - \return TRUE if the call has completed. FALSE otherwise. -*/ -KHMEXP khm_boolean KHMAPI kmq_has_completed(kmq_call call); - -/*! \brief Wait for a call to complete. - - Waits for the specified call to complete. If the call dispatched - to multiple recipients, the function waits for all dispatches to - complete. - - If the call has already completed, then the function returns - immediately. - - If more than one thread is waiting for a single message to - complete, then only one of them will be released when the message - compeltes. Each subsequent thread will be released as each - released thread calls kmq_free_call(). - - \param[in] call A handle to a call. - \param[in] timeout Specifies, in milliseconds, the amount of time - to wait for the call to complete. Specify INFINITE to wait - indefinitely. - - \retval KHM_ERROR_SUCCESS The call completed - \retval KHM_ERROR_TIMEOUT The timeout period expired - \retval KHM_ERROR_INVALID_PARAM One of the parameters were invalid. -*/ -KHMEXP khm_int32 KHMAPI kmq_wait(kmq_call call, kmq_timer timeout); - -/*! \brief Abort a call - - Abort a pending call. The call handle should have been obtained - using a prior call to kmq_post_message_ex(). - - Note that this function may not abort the call immediately. It - merely marks the message as being in an aborted state. It is upto - the individual handlers of the message to check if the message has - been aborted and act accordingly. - - The handlers are expected to call kmq_is_call_aborted() - periodicially during the processing of specially lengthy - operations during the course of handling a message. That function - will return \a TRUE if the last dispatched message is now in an - aborted state. In which case, the handler is expected to abort - handling the message and return control to the dispatcher. - */ -KHMEXP khm_int32 KHMAPI kmq_abort_call(kmq_call call); - -/*! \brief Check if the last dispatched message was aborted - - The sender of a message may abort it using a call to - kmq_abort_call(). This function checks if the last dispatched - message was aborted. - - A handler of a message is expected to call this function - periodically if handling the message is going to take a specially - long time (e.g. more than 5 or 10 seconds). If the message is - found to be aborted, the handler is expected to abort handling the - message, perform any necessary cleanup and return control to the - dispatcher. - - Doing this allows operations like new credentials acquisition to - be cleanly aborted by the user if she so wishes. Otherwise, - Network Identity Manager has to wait for the message to complete - processing since it has no means of cleanly terminating an - executing plug-in thread. -*/ -KHMEXP khm_boolean KHMAPI kmq_is_call_aborted(void); - -/*! \brief Sets the completion handler for a specified message type. - - \note Only one completion handler can exist for one message type. - Calling this function overwrites the previous completion - handler. -*/ -KHMEXP khm_int32 KHMAPI kmq_set_completion_handler( - khm_int32 type, - kmq_msg_completion_handler hander); - -/*@}*/ -#endif diff --git a/src/windows/identity/kmq/kmqconfig.csv b/src/windows/identity/kmq/kmqconfig.csv deleted file mode 100644 index 317baa60e..000000000 --- a/src/windows/identity/kmq/kmqconfig.csv +++ /dev/null @@ -1,5 +0,0 @@ -Name,Type,Value,Description -KMQ,KC_SPACE,0,Options for the credentials window - QueueDeadTimeout,KC_INT32,12000, - CallDeadTimeout,KC_INT32,8000, -KMQ,KC_ENDSPACE,0, diff --git a/src/windows/identity/kmq/kmqinternal.h b/src/windows/identity/kmq/kmqinternal.h deleted file mode 100644 index fe42e5c65..000000000 --- a/src/windows/identity/kmq/kmqinternal.h +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KMQINTERNAL_H -#define __KHIMAIRA_KMQINTERNAL_H - -#define _NIMLIB_ - -#include<windows.h> -#include<kmq.h> -#include<khlist.h> -#include<kherror.h> -#include<khmsgtypes.h> -#include<kconfig.h> - -#define NOEXPORT - -#include<utils.h> -#include<strsafe.h> - - - - -/*! \brief Message reference */ -typedef struct tag_kmq_message_ref { - kmq_message * msg; /*!< Message that we are referring - to */ - kmq_callback_t recipient; /*!< The recipient of the message */ - - LDCL(struct tag_kmq_message_ref); -} kmq_message_ref; - - - - -/*! \brief Message queue - - Each thread gets its own message queue. When a message is - broadcast to which there is a subscriber in a particular thread, a - reference to the message is placed in the message queue of the - thread. The dispatch procedure then dispatches the message as - described in the message reference. -*/ -typedef struct tag_kmq_queue { - kmq_thread_id thread; /*!< The thread id */ - - CRITICAL_SECTION cs; - HANDLE wait_o; - - khm_int32 load; /*!< Number of messages waiting to be - processed on this message queue. */ - kmq_timer last_post; /*!< Time the last message was - received */ - - khm_int32 flags; /*!< Flags. Currently, it's just KMQ_QUEUE_FLAG_DELETED */ - - /*Q*/ - QDCL(kmq_message_ref); /*!< Queue of message references */ - - /*Lnode*/ - LDCL(struct tag_kmq_queue); -} kmq_queue; - -#define KMQ_QUEUE_FLAG_DELETED 0x00000008 -#define KMQ_QUEUE_FLAG_DETACHING 0x00000010 - -/*! \brief Message subscription - - A subscription binds a recipient with a message type. These are - specific to a thread. I.e. a subscription that was made in one - thread will not receive messages in the context of another thread. -*/ -typedef struct tag_kmq_msg_subscription { - khm_int32 magic; /*!< Magic number. Should always be - ::KMQ_MSG_SUB_MAGIC */ - khm_int32 type; /*!< Type of message */ - khm_int32 rcpt_type; /*!< Type of recipient. One of - ::KMQ_RCPTTYPE_CB or - ::KMQ_RCPTTYPE_HWND */ - union { - kmq_callback_t cb; /*!< Callback if the subscription is - of callback type */ - HWND hwnd; /*!< Window handle if the subscription - is a windows message type */ - } recipient; - - kmq_queue * queue; /*!< Associated queue */ - - /*lnode*/ - LDCL(struct tag_kmq_msg_subscription); -} kmq_msg_subscription; - -#define KMQ_MSG_SUB_MAGIC 0x3821b58e - -/*! \brief Callback recipient type - - The recipient is a callback function */ -#define KMQ_RCPTTYPE_CB 1 - -/*! \brief Windows recipient type - - The recipient is a window */ -#define KMQ_RCPTTYPE_HWND 2 - - - - -/*! \brief A message type - */ -typedef struct tag_kmq_msg_type { - khm_int32 id; /*!< Identifier for the message - type. */ - kmq_msg_subscription * subs; /*!< The list of subscriptions */ - kmq_msg_completion_handler completion_handler; /*!< Completion - handler for the message type */ - - wchar_t * name; /*!< Name of the message type for - named types. Message type names are - language independant. */ - - /*Lnode*/ - LDCL(struct tag_kmq_msg_type); -} kmq_msg_type; - -/*! \brief The maximum number of message types - */ -#define KMQ_MSG_TYPE_MAX 255 - -/*! \brief Maximum number of characters in a message type name - - The count includes the terminating NULL - */ -#define KMQ_MAXCCH_TYPE_NAME 256 - -/*! \brief Maximum number of bytes in a message type name - - Type count includes the terminating NULL - */ -#define KMQ_MAXCB_TYPE_NAME (KMQ_MAXCCH_TYPE_NAME * sizeof(wchar_t)) - - - - -#define KMQ_CONF_SPACE_NAME L"KMQ" -#define KMQ_CONF_QUEUE_DEAD_TIMEOUT_NAME L"QueueDeadTimeout" -#define KMQ_CONF_CALL_DEAD_TIMEOUT_NAME L"CallDeadTimeout" - -extern CRITICAL_SECTION cs_kmq_global; -extern kmq_timer kmq_queue_dead_timeout; -extern kmq_timer kmq_call_dead_timeout; - -extern kmq_queue * queues; - -/* message type */ -extern CRITICAL_SECTION cs_kmq_types; -extern kmq_msg_type *msg_types[KMQ_MSG_TYPE_MAX+1]; - -void kmqint_init_msg_types(void); -void kmqint_exit_msg_types(void); -void kmqint_free_msg_type(int t); -void kmqint_msg_type_create(int t); -void kmqint_msg_type_add_sub(int t, kmq_msg_subscription *s); -void kmqint_msg_type_del_sub(kmq_msg_subscription *s); -kmq_msg_subscription * kmqint_msg_type_del_sub_hwnd(khm_int32 t, HWND hwnd); -kmq_msg_subscription * kmqint_msg_type_del_sub_cb(khm_int32 t, kmq_callback_t cb); -khm_int32 kmqint_msg_publish(kmq_message * m, khm_boolean try_send); -khm_int32 kmqint_msg_type_set_handler(khm_int32 type, kmq_msg_completion_handler handler); -int kmqint_notify_msg_completion(kmq_message * m); - -/* consumer */ -extern DWORD kmq_tls_queue; - -void kmqint_post_queue(kmq_queue * q, kmq_message *m); -void kmqint_post(kmq_msg_subscription * s, kmq_message * m, khm_boolean try_send); -kmq_queue * kmqint_get_thread_queue(void); -void kmqint_get_queue_message_ref(kmq_queue * q, kmq_message_ref ** r); -void kmqint_put_message_ref(kmq_message_ref * r); - -/* publisher */ -extern CRITICAL_SECTION cs_kmq_msg; -extern CRITICAL_SECTION cs_kmq_msg_ref; - -kmq_message * kmqint_get_message(void); -void kmqint_put_message(kmq_message *m); - -void kmqint_init(void); -void kmqint_exit(void); -void kmqint_attach_this_thread(void); -void kmqint_detach_this_thread(void); - -khm_int32 kmqint_post_message_ex( - khm_int32 type, - khm_int32 subtype, - khm_ui_4 uparam, - void * blob, - kmq_call * call, - khm_boolean try_send); - -int kmqint_call_completion_handler(kmq_msg_completion_handler h, - kmq_message * m); - -/* global */ -extern kconf_schema schema_kmqconfig[]; - -/* Lock hiearchy : - - cs_kmq_types - cs_kmq_msg - cs_kmq_msg_ref - cs_compl - cs_kmq_global - kmq_queue::cs - - If you have a level 'x' lock, you can obtain a level 'x+n' lock. - You can't obtain a 'x-n' lock if you already have a level 'x' lock. - If you don't have any locks, you can obtain any lock. - */ -#endif diff --git a/src/windows/identity/kmq/kmqmain.c b/src/windows/identity/kmq/kmqmain.c deleted file mode 100644 index fecfc17fd..000000000 --- a/src/windows/identity/kmq/kmqmain.c +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<kmqinternal.h> - -void -kmq_process_attach(void) { - kmqint_init(); -} - -void -kmq_process_detach(void) { - kmqint_exit(); -} - -void -kmq_thread_attach(void) { - kmqint_attach_this_thread(); -} - -void -kmq_thread_detach(void) { - kmqint_detach_this_thread(); -} diff --git a/src/windows/identity/kmq/msgtype.c b/src/windows/identity/kmq/msgtype.c deleted file mode 100644 index 3a529a07b..000000000 --- a/src/windows/identity/kmq/msgtype.c +++ /dev/null @@ -1,394 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<kmqinternal.h> - -CRITICAL_SECTION cs_kmq_types; - -kmq_msg_type *msg_types[KMQ_MSG_TYPE_MAX + 1]; -kmq_msg_type *all_msg_types = NULL; - -/*! \internal - \brief Initializes the message type data structures - \note called with cs_mkq_global held */ -void kmqint_init_msg_types(void) { - ZeroMemory(msg_types, sizeof(kmq_msg_type *) * (KMQ_MSG_TYPE_MAX + 1)); - InitializeCriticalSection(&cs_kmq_types); -} - -/*! \internal - \brief Frees up the message type data structures - \note called with cs_mkq_global held */ -void kmqint_exit_msg_types(void) { - int i; - - EnterCriticalSection(&cs_kmq_types); - for(i=0;i<KMQ_MSG_TYPE_MAX;i++) { - if(msg_types[i]) - kmqint_free_msg_type(i); - } - LeaveCriticalSection(&cs_kmq_types); - DeleteCriticalSection(&cs_kmq_types); -} - -/*! \internal - \brief Notifies that the message has completed - - \return Zero if the completion handling is done. Nonzero if the - handling is queued. - */ -int kmqint_notify_msg_completion(kmq_message * m) { - kmq_msg_type * mt; - kmq_msg_completion_handler h; - - /* doing it this way to elude race conditions without - obtaining a lock */ - - mt = msg_types[m->type]; - if(mt == NULL) - return 0; - h = mt->completion_handler; - - /* handler is set to NULL before freeing type */ - if(h == NULL || msg_types[m->type] == NULL) - return 0; - - return kmqint_call_completion_handler(h,m); -} - -/* called with cs_mkq_global && cs_kmq_types held */ -void kmqint_free_msg_type(int t) { - kmq_msg_type * pt; - kmq_msg_subscription * s; - - pt = msg_types[t]; - - msg_types[t] = NULL; - - if (pt == NULL) - return; - - /* all the subscriptions attached to a message type are owned by - the message type */ - LPOP(&pt->subs, &s); - while(s) { - s->magic = 0; - - PFREE(s); - - LPOP(&pt->subs, &s); - } - - pt->completion_handler = NULL; - - LDELETE(&all_msg_types, pt); - - PFREE(pt); -} - -/*! \internal - \brief Create a message type - \note Obtains ::cs_kmq_types - */ -void kmqint_msg_type_create(int t) { - if(t < 0 || t > KMQ_MSG_TYPE_MAX) - return; - - EnterCriticalSection(&cs_kmq_types); - if(!msg_types[t]) { - kmq_msg_type * mt; - mt = PMALLOC(sizeof(kmq_msg_type)); - ZeroMemory(mt, sizeof(kmq_msg_type)); - mt->id = t; - LINIT(mt); - mt->subs = NULL; - msg_types[t] = mt; - - LPUSH(&all_msg_types, mt); - } - LeaveCriticalSection(&cs_kmq_types); -} - -KHMEXP khm_int32 KHMAPI kmq_register_type(wchar_t * name, - khm_int32 * new_id) -{ - int i; - khm_int32 rv = KHM_ERROR_SUCCESS; - BOOL registered = FALSE; - int first_free = 0; - size_t sz; - - if(FAILED(StringCbLength(name, KMQ_MAXCB_TYPE_NAME, &sz)) || - sz == 0) - return KHM_ERROR_INVALID_PARAM; - sz += sizeof(wchar_t); - - EnterCriticalSection(&cs_kmq_types); - for(i=KMSGBASE_USER; i <= KMQ_MSG_TYPE_MAX; i++) { - if(msg_types[i] == NULL) { - if(first_free == 0) - first_free = i; - /* continue searching since we might find that this type - is already registered. */ - } else { - if(msg_types[i]->name != NULL && - !wcscmp(msg_types[i]->name, name)) { - - registered = TRUE; - if (new_id) - *new_id = i; - break; - } - } - } - - if(registered) { - rv = KHM_ERROR_EXISTS; - } else if(first_free == 0) { - rv = KHM_ERROR_NO_RESOURCES; - } else { - kmqint_msg_type_create(first_free); - msg_types[first_free]->name = PMALLOC(sz); - StringCbCopy(msg_types[first_free]->name, sz, name); - - if(new_id != NULL) - *new_id = first_free; - } - LeaveCriticalSection(&cs_kmq_types); - - return rv; -} - -KHMEXP khm_int32 KHMAPI kmq_find_type(wchar_t * name, khm_int32 * id) -{ - int i; - - EnterCriticalSection(&cs_kmq_types); - for(i=KMSGBASE_USER; i <= KMQ_MSG_TYPE_MAX; i++) { - if(msg_types[i] != NULL && msg_types[i]->name != NULL) { - if(!wcscmp(msg_types[i]->name, name)) - break; - } - } - LeaveCriticalSection(&cs_kmq_types); - - if(i <= KMQ_MSG_TYPE_MAX) { - if(id != NULL) - *id = i; - return KHM_ERROR_SUCCESS; - } - - return KHM_ERROR_NOT_FOUND; -} - -KHMEXP khm_int32 KHMAPI kmq_unregister_type(khm_int32 id) -{ - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(id < KMSGBASE_USER || id > KMQ_MSG_TYPE_MAX) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_kmq_types); - if(msg_types[id] != NULL) { - EnterCriticalSection(&cs_kmq_global); - kmqint_free_msg_type(id); - LeaveCriticalSection(&cs_kmq_global); - } else { - rv = KHM_ERROR_NOT_FOUND; - } - LeaveCriticalSection(&cs_kmq_types); - - return rv; -} - -/*! \internal - \brief Adds a subscription to a message type - \note Obtains ::cs_kmq_types - */ -void kmqint_msg_type_add_sub(int t, kmq_msg_subscription *s) { - kmq_msg_subscription * ts; - - if(t < 0 || t > KMQ_MSG_TYPE_MAX) - return; - - if(!msg_types[t]) - kmqint_msg_type_create(t); - - EnterCriticalSection(&cs_kmq_types); - s->type = t; - /* check if we already have this subscription */ - ts = msg_types[t]->subs; - while(ts) { - if((ts->rcpt_type == s->rcpt_type) && - (((ts->rcpt_type == KMQ_RCPTTYPE_CB) && (ts->recipient.cb == s->recipient.cb)) || - ((ts->rcpt_type == KMQ_RCPTTYPE_HWND) && (ts->recipient.hwnd == s->recipient.hwnd)))) - break; - ts = LNEXT(ts); - } - /* add it if we didn't find it */ - if(!ts) { - LPUSH(&msg_types[t]->subs, s); - } - LeaveCriticalSection(&cs_kmq_types); -} - -/*! \internal - \brief Delete a subscription - \note Obtains ::cs_kmq_types - */ -void kmqint_msg_type_del_sub(kmq_msg_subscription *s) { - int t = s->type; - - EnterCriticalSection(&cs_kmq_types); - if(msg_types[t]) { - LDELETE(&msg_types[t]->subs,s); - } - LeaveCriticalSection(&cs_kmq_types); -} - - -/*! \internal - \brief Deletes a window subscription from a message type - \note Obtains ::cs_kmq_types -*/ -kmq_msg_subscription * kmqint_msg_type_del_sub_hwnd(khm_int32 t, HWND hwnd) { - kmq_msg_subscription *s = NULL; - - if(t < 0 || t > KMQ_MSG_TYPE_MAX) - return NULL; - - EnterCriticalSection(&cs_kmq_types); - if(msg_types[t]) { - s = msg_types[t]->subs; - while(s) { - kmq_msg_subscription * n = LNEXT(s); - if(s->rcpt_type == KMQ_RCPTTYPE_HWND && s->recipient.hwnd == hwnd) { - /*TODO: do more here? */ - LDELETE(&msg_types[t]->subs, s); - break; - } - s = n; - } - } - LeaveCriticalSection(&cs_kmq_types); - - return s; -} - -/*! \internal - \brief Delete a callback from a message type - \note Obtains ::cs_kmq_types, ::cs_kmq_global - */ -kmq_msg_subscription * kmqint_msg_type_del_sub_cb(khm_int32 t, kmq_callback_t cb) { - kmq_msg_subscription *s; - kmq_queue *q; - - if(t < 0 || t > KMQ_MSG_TYPE_MAX) - return NULL; - - if(!msg_types[t]) - return NULL; - - q = kmqint_get_thread_queue(); - - EnterCriticalSection(&cs_kmq_types); - s = msg_types[t]->subs; - while(s) { - kmq_msg_subscription * n = LNEXT(s); - if(s->rcpt_type == KMQ_RCPTTYPE_CB && - s->recipient.cb == cb && - s->queue == q) { - /*TODO: do more here? */ - LDELETE(&msg_types[t]->subs, s); - break; - } - s = n; - } - LeaveCriticalSection(&cs_kmq_types); - - return s; -} - -/*! \internal - \brief Publish a message - \note Obtains ::cs_kmq_types, ::cs_kmq_msg_ref, kmq_queue::cs, ::cs_kmq_msg - */ -khm_int32 kmqint_msg_publish(kmq_message * m, khm_boolean try_send) { - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(msg_types[m->type]) { - kmq_msg_type *t; - kmq_msg_subscription * s; - - EnterCriticalSection(&cs_kmq_types); - EnterCriticalSection(&cs_kmq_msg); - t = msg_types[m->type]; - s = t->subs; - while(s) { - kmqint_post(s, m, try_send); - s = LNEXT(s); - } - - if(m->nCompleted + m->nFailed == m->nSent) { - kmqint_put_message(m); - } - - LeaveCriticalSection(&cs_kmq_msg); - LeaveCriticalSection(&cs_kmq_types); - - } else { - EnterCriticalSection(&cs_kmq_msg); - kmqint_put_message(m); - LeaveCriticalSection(&cs_kmq_msg); - } - return rv; -} - -/*! \internal - \brief Sets the completion handler for a message type - \note Obtains ::cs_kmq_types - */ -khm_int32 kmqint_msg_type_set_handler(khm_int32 type, kmq_msg_completion_handler handler) { - - if (type == KMSG_SYSTEM) - return KHM_ERROR_INVALID_PARAM; - - if(!msg_types[type]) { - if (handler) - kmqint_msg_type_create(type); - else - return KHM_ERROR_SUCCESS; - } - - if(!msg_types[type]) - return KHM_ERROR_NO_RESOURCES; - - EnterCriticalSection(&cs_kmq_types); - msg_types[type]->completion_handler = handler; - LeaveCriticalSection(&cs_kmq_types); - - return KHM_ERROR_SUCCESS; -} diff --git a/src/windows/identity/kmq/publisher.c b/src/windows/identity/kmq/publisher.c deleted file mode 100644 index 5876f00c6..000000000 --- a/src/windows/identity/kmq/publisher.c +++ /dev/null @@ -1,564 +0,0 @@ -/* - * 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 - * 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<kmqinternal.h> - -CRITICAL_SECTION cs_kmq_msg; -kmq_message * msg_free = NULL; -kmq_message * msg_active = NULL; - -#ifdef DEBUG - -#include<stdio.h> - -void -kmqint_dump_publisher(FILE * f) { - - int n_free = 0; - int n_active = 0; - kmq_message * m; - - EnterCriticalSection(&cs_kmq_msg); - - fprintf(f, "qp0\t*** Free Messages ***\n"); - fprintf(f, "qp1\tAddress\n"); - - m = msg_free; - while(m) { - n_free++; - - fprintf(f, "qp2\t0x%p\n", m); - - m = LNEXT(m); - } - - fprintf(f, "qp3\tTotal free messages : %d\n", n_free); - - fprintf(f, "qp4\t*** Active Messages ***\n"); - fprintf(f, "qp5\tAddress\tType\tSubtype\tuParam\tvParam\tnSent\tnCompleted\tnFailed\twait_o\trefcount\n"); - - m = msg_active; - while(m) { - - n_active++; - - fprintf(f, "qp6\t0x%p\t%d\t%d\t0x%x\t0x%p\t%d\t%d\t%d\t0x%p\t%d\n", - m, - (int) m->type, - (int) m->subtype, - (unsigned int) m->uparam, - m->vparam, - (int) m->nSent, - (int) m->nCompleted, - (int) m->nFailed, - (void *) m->wait_o, - (int) m->refcount); - - m = LNEXT(m); - } - - fprintf(f, "qp7\tTotal number of active messages = %d\n", n_active); - - fprintf(f, "qp8\t--- End ---\n"); - - LeaveCriticalSection(&cs_kmq_msg); - -} - -#endif - -/*! \internal - \brief Get a message object - \note called with ::cs_kmq_msg held */ -kmq_message * -kmqint_get_message(void) { - kmq_message * m; - - LPOP(&msg_free,&m); - if(!m) { - /* allocate one */ - m = PMALLOC(sizeof(kmq_message)); - } - ZeroMemory((void*)m, sizeof(kmq_message)); - - LPUSH(&msg_active, m); - - return m; -} - -/*! \internal - \brief Frees a message object - \note called with ::cs_kmq_msg held - */ -void -kmqint_put_message(kmq_message *m) { - int queued; - /* we can only free a message if the refcount is zero. - Otherwise we have to wait until the call is freed. */ - if(m->refcount == 0) { - LDELETE(&msg_active, m); - LeaveCriticalSection(&cs_kmq_msg); - queued = kmqint_notify_msg_completion(m); - EnterCriticalSection(&cs_kmq_msg); - if (!queued) { - if(m->err_ctx) { - kherr_release_context(m->err_ctx); - m->err_ctx = NULL; - } - if(m->wait_o) { - CloseHandle(m->wait_o); - m->wait_o = NULL; - } - LPUSH(&msg_free,m); - } - } else if(m->wait_o) { - SetEvent(m->wait_o); - } -} - -/*! \internal - \note Obtains ::cs_kmq_msg, ::cs_kmq_types, ::cs_kmq_msg_ref, kmq_queue::cs - */ -KHMEXP khm_int32 KHMAPI -kmq_send_message(khm_int32 type, khm_int32 subtype, - khm_ui_4 uparam, void * blob) { - kmq_call c; - khm_int32 rv = KHM_ERROR_SUCCESS; - - rv = kmqint_post_message_ex(type, subtype, uparam, blob, &c, TRUE); - if(KHM_FAILED(rv)) - return rv; - - rv = kmq_wait(c, INFINITE); - if(KHM_SUCCEEDED(rv) && c->nFailed > 0) - rv = KHM_ERROR_PARTIAL; - - kmq_free_call(c); - - return rv; -} - -/*! \internal - \note Obtains ::cs_kmq_msg, ::cs_kmq_types, ::cs_kmq_msg_ref, kmq_queue::cs - */ -KHMEXP khm_int32 KHMAPI -kmq_post_message(khm_int32 type, khm_int32 subtype, - khm_ui_4 uparam, void * blob) { - return kmqint_post_message_ex(type, subtype, uparam, blob, NULL, FALSE); -} - -/*! \internal - \brief Frees a call - \note Obtains ::cs_kmq_msg - */ -KHMEXP khm_int32 KHMAPI -kmq_free_call(kmq_call call) { - kmq_message * m; - - m = call; - - EnterCriticalSection(&cs_kmq_msg); - m->refcount--; - if(!m->refcount) { - kmqint_put_message(m); - } - LeaveCriticalSection(&cs_kmq_msg); - - return KHM_ERROR_SUCCESS; -} - -/*! \internal - \note Obtains ::cs_kmq_msg, ::cs_kmq_types, ::cs_kmq_msg_ref, kmq_queue::cs - */ -khm_int32 -kmqint_post_message_ex(khm_int32 type, khm_int32 subtype, khm_ui_4 uparam, - void * blob, kmq_call * call, khm_boolean try_send) -{ - kmq_message * m; - kherr_context * ctx; - - EnterCriticalSection(&cs_kmq_msg); - m = kmqint_get_message(); - LeaveCriticalSection(&cs_kmq_msg); - - m->type = type; - m->subtype = subtype; - m->uparam = uparam; - m->vparam = blob; - - m->timeSent = GetTickCount(); - m->timeExpire = m->timeSent + kmq_call_dead_timeout; - - ctx = kherr_peek_context(); - if (ctx) { - if (ctx->flags & KHERR_CF_TRANSITIVE) { - m->err_ctx = ctx; - /* leave it held */ - } else { - kherr_release_context(ctx); - } - } - - if(call) { - m->wait_o = CreateEvent(NULL,FALSE,FALSE,NULL); - *call = m; - m->refcount++; - } else - m->wait_o = NULL; - - kmqint_msg_publish(m, try_send); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -kmq_post_message_ex(khm_int32 type, khm_int32 subtype, - khm_ui_4 uparam, void * blob, kmq_call * call) -{ - return kmqint_post_message_ex(type, subtype, uparam, blob, call, FALSE); -} - -KHMEXP khm_int32 KHMAPI -kmq_abort_call(kmq_call call) -{ - /* TODO: Implement this */ - return KHM_ERROR_NOT_IMPLEMENTED; -} - -/*! \internal -*/ -KHMEXP khm_int32 KHMAPI -kmq_post_sub_msg(khm_handle sub, khm_int32 type, khm_int32 subtype, - khm_ui_4 uparam, void * vparam) -{ - return kmq_post_sub_msg_ex(sub, type, subtype, uparam, vparam, NULL); -} - -/*! \internal -*/ -khm_int32 -kmqint_post_sub_msg_ex(khm_handle sub, khm_int32 type, khm_int32 subtype, - khm_ui_4 uparam, void * vparam, - kmq_call * call, khm_boolean try_send) -{ - kmq_message * m; - kherr_context * ctx; - - EnterCriticalSection(&cs_kmq_msg); - m = kmqint_get_message(); - LeaveCriticalSection(&cs_kmq_msg); - - m->type = type; - m->subtype = subtype; - m->uparam = uparam; - m->vparam = vparam; - - m->timeSent = GetTickCount(); - m->timeExpire = m->timeSent + kmq_call_dead_timeout; - - ctx = kherr_peek_context(); - if (ctx) { - if (ctx->flags & KHERR_CF_TRANSITIVE) { - m->err_ctx = ctx; - /* leave it held */ - } else { - kherr_release_context(ctx); - } - } - - if(call) { - m->wait_o = CreateEvent(NULL,FALSE,FALSE,NULL); - *call = m; - m->refcount++; - } else - m->wait_o = NULL; - - if (try_send) - EnterCriticalSection(&cs_kmq_types); - EnterCriticalSection(&cs_kmq_msg); - kmqint_post((kmq_msg_subscription *) sub, m, try_send); - - if(m->nCompleted + m->nFailed == m->nSent) { - kmqint_put_message(m); - } - LeaveCriticalSection(&cs_kmq_msg); - if (try_send) - LeaveCriticalSection(&cs_kmq_types); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -kmq_post_sub_msg_ex(khm_handle sub, khm_int32 type, khm_int32 subtype, - khm_ui_4 uparam, void * vparam, kmq_call * call) -{ - return kmqint_post_sub_msg_ex(sub, type, subtype, - uparam, vparam, call, FALSE); -} - -khm_int32 -kmqint_post_subs_msg_ex(khm_handle * subs, khm_size n_subs, khm_int32 type, - khm_int32 subtype, khm_ui_4 uparam, void * vparam, - kmq_call * call, khm_boolean try_send) -{ - kmq_message * m; - kherr_context * ctx; - khm_size i; - - if(n_subs == 0) - return KHM_ERROR_SUCCESS; - - EnterCriticalSection(&cs_kmq_msg); - m = kmqint_get_message(); - LeaveCriticalSection(&cs_kmq_msg); - - m->type = type; - m->subtype = subtype; - m->uparam = uparam; - m->vparam = vparam; - - m->timeSent = GetTickCount(); - m->timeExpire = m->timeSent + kmq_call_dead_timeout; - - ctx = kherr_peek_context(); - if (ctx) { - if (ctx->flags & KHERR_CF_TRANSITIVE) { - m->err_ctx = ctx; - /* leave it held */ - } else { - kherr_release_context(ctx); - } - } - - if(call) { - m->wait_o = CreateEvent(NULL,FALSE,FALSE,NULL); - *call = m; - m->refcount++; - } else - m->wait_o = NULL; - - if (try_send) - EnterCriticalSection(&cs_kmq_types); - EnterCriticalSection(&cs_kmq_msg); - for(i=0;i<n_subs;i++) { - kmqint_post((kmq_msg_subscription *) subs[i], m, try_send); - } - - if(m->nCompleted + m->nFailed == m->nSent) { - kmqint_put_message(m); - } - LeaveCriticalSection(&cs_kmq_msg); - if (try_send) - EnterCriticalSection(&cs_kmq_types); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -kmq_post_subs_msg(khm_handle * subs, - khm_size n_subs, - khm_int32 type, - khm_int32 subtype, - khm_ui_4 uparam, - void * vparam) -{ - return kmqint_post_subs_msg_ex(subs, - n_subs, - type, - subtype, - uparam, - vparam, - NULL, - FALSE); -} - -KHMEXP khm_int32 KHMAPI -kmq_post_subs_msg_ex(khm_handle * subs, - khm_int32 n_subs, - khm_int32 type, - khm_int32 subtype, - khm_ui_4 uparam, - void * vparam, - kmq_call * call) -{ - return kmqint_post_subs_msg_ex(subs, n_subs, type, subtype, - uparam, vparam, call, FALSE); -} - -KHMEXP khm_int32 KHMAPI -kmq_send_subs_msg(khm_handle *subs, - khm_int32 n_subs, - khm_int32 type, - khm_int32 subtype, - khm_ui_4 uparam, - void * vparam) -{ - kmq_call c; - khm_int32 rv = KHM_ERROR_SUCCESS; - - rv = kmqint_post_subs_msg_ex(subs, n_subs, type, subtype, - uparam, vparam, &c, TRUE); - if(KHM_FAILED(rv)) - return rv; - - rv = kmq_wait(c, INFINITE); - if(KHM_SUCCEEDED(rv) && c->nFailed > 0) - rv = KHM_ERROR_PARTIAL; - - kmq_free_call(c); - - return rv; -} - -/*! \internal -*/ -KHMEXP khm_int32 KHMAPI -kmq_send_sub_msg(khm_handle sub, khm_int32 type, khm_int32 subtype, - khm_ui_4 uparam, void * vparam) -{ - kmq_call c; - khm_int32 rv = KHM_ERROR_SUCCESS; - - rv = kmqint_post_sub_msg_ex(sub, type, subtype, uparam, vparam, &c, TRUE); - if(KHM_FAILED(rv)) - return rv; - - rv = kmq_wait(c, INFINITE); - if(KHM_SUCCEEDED(rv) && c->nFailed > 0) - rv = KHM_ERROR_PARTIAL; - - kmq_free_call(c); - - return rv; -} - -/*! \internal - \note Obtains ::cs_kmq_global, ::cs_kmq_msg, ::cs_kmq_msg_ref, kmq_queue::cs - */ -KHMEXP khm_int32 KHMAPI -kmq_send_thread_quit_message(kmq_thread_id thread, khm_ui_4 uparam) { - kmq_call c; - khm_int32 rv = KHM_ERROR_SUCCESS; - - rv = kmq_post_thread_quit_message(thread, uparam, &c); - if(KHM_FAILED(rv)) - return rv; - - rv = kmq_wait(c, INFINITE); - - kmq_free_call(c); - - return rv; -} - -/*! \internal - \note Obtains ::cs_kmq_global, ::cs_kmq_msg, ::cs_kmq_msg_ref, kmq_queue::cs - */ -KHMEXP khm_int32 KHMAPI -kmq_post_thread_quit_message(kmq_thread_id thread, - khm_ui_4 uparam, kmq_call * call) { - kmq_message * m; - kmq_queue * q; - - EnterCriticalSection(&cs_kmq_global); - q = queues; - while(q) { - if(q->thread == thread) - break; - q = LNEXT(q); - } - LeaveCriticalSection(&cs_kmq_global); - - if(!q) - return KHM_ERROR_NOT_FOUND; - - EnterCriticalSection(&cs_kmq_msg); - m = kmqint_get_message(); - LeaveCriticalSection(&cs_kmq_msg); - - m->type = KMSG_SYSTEM; - m->subtype = KMSG_SYSTEM_EXIT; - m->uparam = uparam; - m->vparam = NULL; - - m->timeSent = GetTickCount(); - m->timeExpire = m->timeSent + kmq_call_dead_timeout; - - if(call) { - m->wait_o = CreateEvent(NULL,FALSE,FALSE,NULL); - *call = m; - m->refcount++; - } else - m->wait_o = NULL; - - kmqint_post_queue(q, m); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -kmq_get_next_response(kmq_call call, void ** resp) { - /* TODO: Implement this */ - return 0; -} - -KHMEXP khm_boolean KHMAPI -kmq_has_completed(kmq_call call) { - khm_boolean completed; - - EnterCriticalSection(&cs_kmq_msg); - completed = (call->nCompleted + call->nFailed == call->nSent); - LeaveCriticalSection(&cs_kmq_msg); - - return completed; -} - -KHMEXP khm_int32 KHMAPI -kmq_wait(kmq_call call, kmq_timer timeout) { - kmq_message * m = call; - DWORD rv; - /*TODO: check for call free */ - - if(m && m->wait_o) { - rv = WaitForSingleObject(m->wait_o, timeout); - if(rv == WAIT_OBJECT_0) - return KHM_ERROR_SUCCESS; - else - return KHM_ERROR_TIMEOUT; - } else - return KHM_ERROR_INVALID_PARAM; -} - -/*! \internal - \note Obtains ::cs_kmq_types - */ -KHMEXP khm_int32 KHMAPI -kmq_set_completion_handler(khm_int32 type, - kmq_msg_completion_handler handler) { - return kmqint_msg_type_set_handler(type, handler); -} diff --git a/src/windows/identity/nidmgrdll/Makefile b/src/windows/identity/nidmgrdll/Makefile deleted file mode 100644 index 096a5ef2c..000000000 --- a/src/windows/identity/nidmgrdll/Makefile +++ /dev/null @@ -1,126 +0,0 @@ -# -# 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 -# (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. - - -MODULE=nidmgrdll -!include <../config/Makefile.w32> - -!if ("$(CPU)" == "IA64" ) || ("$(CPU)" == "AMD64" ) || ("$(CPU)" == "ALPHA64" ) -DLLFILE=$(BINDIR)\nidmgr64.dll -LIBFILE=$(LIBDIR)\nidmgr64.lib -!else -DLLFILE=$(BINDIR)\nidmgr32.dll -LIBFILE=$(LIBDIR)\nidmgr32.lib -!endif - -UTILDIR=$(OBJDIR)\util - -KHERRDIR=$(OBJDIR)\kherr - -KCONFIGDIR=$(OBJDIR)\kconfig - -KMQDIR=$(OBJDIR)\kmq - -KCDBDIR=$(OBJDIR)\kcreddb - -KMMDIR=$(OBJDIR)\kmm - -UIDIR=$(OBJDIR)\uilib - -OBJFILES= \ - $(OBJ)\dllmain.obj \ - $(UTILDIR)\hashtable.obj \ - $(UTILDIR)\sync.obj \ - $(UTILDIR)\mstring.obj \ - $(UTILDIR)\perfstat.obj \ - $(KHERRDIR)\kherrmain.obj \ - $(KHERRDIR)\kherr.obj \ - $(KCONFIGDIR)\kconfigmain.obj \ - $(KCONFIGDIR)\api.obj \ - $(KMQDIR)\kmqmain.obj \ - $(KMQDIR)\init.obj \ - $(KMQDIR)\msgtype.obj \ - $(KMQDIR)\consumer.obj \ - $(KMQDIR)\publisher.obj \ - $(KMQDIR)\kmqconfig.obj \ - $(KCDBDIR)\buf.obj \ - $(KCDBDIR)\attrib.obj \ - $(KCDBDIR)\credential.obj \ - $(KCDBDIR)\credset.obj \ - $(KCDBDIR)\credtype.obj \ - $(KCDBDIR)\identity.obj \ - $(KCDBDIR)\init.obj \ - $(KCDBDIR)\kcreddbmain.obj \ - $(KCDBDIR)\type.obj \ - $(KCDBDIR)\kcdbconfig.obj \ - $(KMMDIR)\kmmmain.obj \ - $(KMMDIR)\kmm.obj \ - $(KMMDIR)\kmm_plugin.obj \ - $(KMMDIR)\kmm_module.obj \ - $(KMMDIR)\kmm_reg.obj \ - $(KMMDIR)\kmm_registrar.obj \ - $(KMMDIR)\kmmconfig.obj \ - $(UIDIR)\rescache.obj \ - $(UIDIR)\action.obj \ - $(UIDIR)\creddlg.obj \ - $(UIDIR)\alert.obj \ - $(UIDIR)\propsheet.obj \ - $(UIDIR)\propwnd.obj \ - $(UIDIR)\uilibmain.obj \ - $(UIDIR)\actiondef.obj \ - $(UIDIR)\acceldef.obj \ - $(UIDIR)\configui.obj \ - $(UIDIR)\trackerwnd.obj \ - $(UIDIR)\uibind.obj \ - $(UIDIR)\version.obj - -RESFILES= \ - $(OBJ)\nidmgrdll.res \ - $(KCDBDIR)\kcredres.res \ - $(KMMDIR)\kmm_msgs.res \ - -SDKLIBFILES= \ - advapi32.lib \ - strsafe.lib \ - comctl32.lib \ - shlwapi.lib \ - version.lib - -!if ("$(CPU)" == "IA64" ) || ("$(CPU)" == "AMD64" ) || ("$(CPU)" == "ALPHA64" ) -SCLIB=bufferoverflowu.lib -!else -SCLIB= -!endif - -$(DLLFILE): $(OBJFILES) $(RESFILES) - $(DLLGUILINK) $(LIBFILES) $(SDKLIBFILES) $(SCLIB) - $(_VC_MANIFEST_EMBED_DLL) - $(_VC_MANIFEST_CLEAN) - -all: mkdirs $(DLLFILE) - -clean:: - if exist $(DLLFILE) $(RM) $(DLLFILE) - if exist $(DLLFILE).manifest $(RM) $(DLLFILE).manifest - diff --git a/src/windows/identity/nidmgrdll/Makefile.w2k b/src/windows/identity/nidmgrdll/Makefile.w2k deleted file mode 100644 index 9dfe2dffb..000000000 --- a/src/windows/identity/nidmgrdll/Makefile.w2k +++ /dev/null @@ -1,120 +0,0 @@ -# -# Copyright (c) 2004 Massachusetts Institute of Technology -# -# 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. - - -MODULE=nidmgrdll.w2k -!include <../config/Makefile.w2k> - -!if ("$(CPU)" == "IA64" ) || ("$(CPU)" == "AMD64" ) || ("$(CPU)" == "ALPHA64" ) -DLLFILE=$(BINDIR)\nidmgr64.dll -LIBFILE=$(LIBDIR)\nidmgr64.lib -!else -DLLFILE=$(BINDIR)\nidmgr32.dll -LIBFILE=$(LIBDIR)\nidmgr32.lib -!endif - -UTILDIR=$(OBJDIR)\util - -KHERRDIR=$(OBJDIR)\kherr - -KCONFIGDIR=$(OBJDIR)\kconfig - -KMQDIR=$(OBJDIR)\kmq - -KCDBDIR=$(OBJDIR)\kcreddb - -KMMDIR=$(OBJDIR)\kmm - -UIDIR=$(OBJDIR)\uilib.w2k - -OBJFILES= \ - $(OBJ)\dllmain.obj \ - $(UTILDIR)\hashtable.obj \ - $(UTILDIR)\sync.obj \ - $(UTILDIR)\mstring.obj \ - $(UTILDIR)\perfstat.obj \ - $(KHERRDIR)\kherrmain.obj \ - $(KHERRDIR)\kherr.obj \ - $(KCONFIGDIR)\kconfigmain.obj \ - $(KCONFIGDIR)\api.obj \ - $(KMQDIR)\kmqmain.obj \ - $(KMQDIR)\init.obj \ - $(KMQDIR)\msgtype.obj \ - $(KMQDIR)\consumer.obj \ - $(KMQDIR)\publisher.obj \ - $(KMQDIR)\kmqconfig.obj \ - $(KCDBDIR)\buf.obj \ - $(KCDBDIR)\attrib.obj \ - $(KCDBDIR)\credential.obj \ - $(KCDBDIR)\credset.obj \ - $(KCDBDIR)\credtype.obj \ - $(KCDBDIR)\identity.obj \ - $(KCDBDIR)\init.obj \ - $(KCDBDIR)\kcreddbmain.obj \ - $(KCDBDIR)\type.obj \ - $(KCDBDIR)\kcdbconfig.obj \ - $(KMMDIR)\kmmmain.obj \ - $(KMMDIR)\kmm.obj \ - $(KMMDIR)\kmm_plugin.obj \ - $(KMMDIR)\kmm_module.obj \ - $(KMMDIR)\kmm_reg.obj \ - $(KMMDIR)\kmm_registrar.obj \ - $(KMMDIR)\kmmconfig.obj \ - $(UIDIR)\rescache.obj \ - $(UIDIR)\action.obj \ - $(UIDIR)\creddlg.obj \ - $(UIDIR)\alert.obj \ - $(UIDIR)\propsheet.obj \ - $(UIDIR)\propwnd.obj \ - $(UIDIR)\uilibmain.obj \ - $(UIDIR)\actiondef.obj \ - $(UIDIR)\acceldef.obj \ - $(UIDIR)\configui.obj \ - $(UIDIR)\trackerwnd.obj \ - $(UIDIR)\version.obj - -RESFILES= \ - $(OBJ)\nidmgrdll.res \ - $(KCDBDIR)\kcredres.res \ - $(KMMDIR)\kmm_msgs.res \ - -SDKLIBFILES= \ - advapi32.lib \ - strsafe.lib \ - comctl32.lib \ - shlwapi.lib \ - version.lib - -!if ("$(CPU)" == "IA64" ) || ("$(CPU)" == "AMD64" ) || ("$(CPU)" == "ALPHA64" ) -SCLIB=bufferoverflowu.lib -!else -SCLIB= -!endif - -$(DLLFILE): $(OBJFILES) $(RESFILES) - $(DLLGUILINK) $(LIBFILES) $(SDKLIBFILES) $(SCLIB) - -all: mkdirs $(DLLFILE) - -clean:: - $(RM) $(DLLFILE) diff --git a/src/windows/identity/nidmgrdll/dllmain.c b/src/windows/identity/nidmgrdll/dllmain.c deleted file mode 100644 index 647a23f34..000000000 --- a/src/windows/identity/nidmgrdll/dllmain.c +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<windows.h> - -/* forward dcls */ -void -kherr_process_attach(void); - -void -kherr_process_detach(void); - -void -kherr_thread_attach(void); - -void -kherr_thread_detach(void); - -void -kconfig_process_attach(void); - -void -kconfig_process_detach(void); - -void -kmq_process_attach(void); - -void -kmq_process_detach(void); - -void -kmq_thread_attach(void); - -void -kmq_thread_detach(void); - -void -kcdb_process_attach(HINSTANCE); - -void -kcdb_process_detach(void); - -void -kmm_process_attach(HINSTANCE); - -void -kmm_process_detach(void); - -void -uilib_process_attach(void); - -void -uilib_process_detach(void); - - -BOOL WINAPI DllMain( - HINSTANCE hinstDLL, // handle to DLL module - DWORD fdwReason, // reason for calling function - LPVOID lpReserved ) // reserved -{ - switch(fdwReason) { - case DLL_PROCESS_ATTACH: - kherr_process_attach(); - kconfig_process_attach(); - kmq_process_attach(); - kcdb_process_attach(hinstDLL); - kmm_process_attach(hinstDLL); - uilib_process_attach(); - break; - - case DLL_PROCESS_DETACH: - kherr_process_detach(); - kconfig_process_detach(); - kmq_process_detach(); - kcdb_process_detach(); - kmm_process_detach(); - uilib_process_detach(); - break; - - case DLL_THREAD_ATTACH: - kherr_thread_attach(); - kmq_thread_attach(); - break; - - case DLL_THREAD_DETACH: - kherr_thread_detach(); - kmq_thread_detach(); - break; - } - return TRUE; -} diff --git a/src/windows/identity/nidmgrdll/nidmgrdll.rc b/src/windows/identity/nidmgrdll/nidmgrdll.rc deleted file mode 100644 index b4e0a9e72..000000000 --- a/src/windows/identity/nidmgrdll/nidmgrdll.rc +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2004 Massachusetts Institute of Technology - * - * 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<afxres.h> -#include<netidmgr_intver.h> - -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif - -1 VERSIONINFO - FILEVERSION KH_VERSION_LIST - PRODUCTVERSION KH_VERSION_LIST - FILEFLAGSMASK 0x17L - FILEFLAGS KH_VER_FILEFLAGS - FILEOS KH_VER_FILEOS - FILETYPE KH_VER_FILETYPEDLL - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", KH_VERSTR_COMPANY_1033 - VALUE "FileDescription", "Network Identity Manager API" - VALUE "FileVersion", KH_VERSTR_VERSION_1033 - VALUE "InternalName", "nidmgr32" - VALUE "LegalCopyright", KH_VERSTR_COPYRIGHT_1033 - VALUE "OriginalFilename", "nidmgr32.dll" - VALUE "ProductName", "Network Identity Manager" - VALUE "ProductVersion", KH_VERSTR_PRODUCT_1033 -#ifdef KH_VERSTR_COMMENT_1033 - VALUE "Comments", KH_VERSTR_COMMENT_1033 -#endif -#ifdef KH_VERSTR_PRIVATE_1033 - VALUE "PrivateBuild", KH_VERSTR_PRIVATE_1033 -#endif -#ifdef KH_VERSTR_SPECIAL_1033 - VALUE "SpecialBuild", KH_VERSTR_SPECIAL_1033 -#endif - END - END - -/* Language independent */ - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END - -END diff --git a/src/windows/identity/plugins/common/Makefile b/src/windows/identity/plugins/common/Makefile deleted file mode 100644 index 6b827dc3e..000000000 --- a/src/windows/identity/plugins/common/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -# -# 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 -# (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. - - -MODULE=plugins\common -!include <../../config/Makefile.w32> - -INCFILES= \ - $(INCDIR)\krb5common.h \ - $(INCDIR)\dynimport.h - -OBJFILES= \ - $(LIBDIR)\krb5common.obj \ - $(LIBDIR)\dynimport.obj - -all: mkdirs $(INCFILES) $(OBJFILES) - -clean:: - if exist "$(INCDIR)" $(RM) $(INCFILES) - if exist "$(LIBDIR)" $(RM) $(OBJFILES) - -{}.c{$(LIBDIR)}.obj: - $(C2OBJ) diff --git a/src/windows/identity/plugins/common/dynimport.c b/src/windows/identity/plugins/common/dynimport.c deleted file mode 100644 index bb1bb0412..000000000 --- a/src/windows/identity/plugins/common/dynimport.c +++ /dev/null @@ -1,485 +0,0 @@ -/* -* 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 -* 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<windows.h> -#include<netidmgr.h> -#include<dynimport.h> - -HINSTANCE hKrb4 = 0; -HINSTANCE hKrb5 = 0; -HINSTANCE hKrb524 = 0; -HINSTANCE hSecur32 = 0; -HINSTANCE hComErr = 0; -HINSTANCE hService = 0; -HINSTANCE hProfile = 0; -HINSTANCE hPsapi = 0; -HINSTANCE hToolHelp32 = 0; -HINSTANCE hCCAPI = 0; - -DWORD AfsAvailable = 0; - -// CCAPI -DECL_FUNC_PTR(cc_initialize); -DECL_FUNC_PTR(cc_shutdown); -DECL_FUNC_PTR(cc_get_NC_info); -DECL_FUNC_PTR(cc_free_NC_info); - -// krb4 functions -DECL_FUNC_PTR(get_krb_err_txt_entry); -DECL_FUNC_PTR(k_isinst); -DECL_FUNC_PTR(k_isname); -DECL_FUNC_PTR(k_isrealm); -DECL_FUNC_PTR(kadm_change_your_password); -DECL_FUNC_PTR(kname_parse); -DECL_FUNC_PTR(krb_get_cred); -DECL_FUNC_PTR(krb_get_krbhst); -DECL_FUNC_PTR(krb_get_lrealm); -DECL_FUNC_PTR(krb_get_pw_in_tkt); -DECL_FUNC_PTR(krb_get_tf_realm); -DECL_FUNC_PTR(krb_mk_req); -DECL_FUNC_PTR(krb_realmofhost); -DECL_FUNC_PTR(tf_init); -DECL_FUNC_PTR(tf_close); -DECL_FUNC_PTR(tf_get_cred); -DECL_FUNC_PTR(tf_get_pname); -DECL_FUNC_PTR(tf_get_pinst); -DECL_FUNC_PTR(LocalHostAddr); -DECL_FUNC_PTR(tkt_string); -DECL_FUNC_PTR(krb_set_tkt_string); -DECL_FUNC_PTR(initialize_krb_error_func); -DECL_FUNC_PTR(initialize_kadm_error_table); -DECL_FUNC_PTR(dest_tkt); -DECL_FUNC_PTR(krb_in_tkt); -DECL_FUNC_PTR(krb_save_credentials); -DECL_FUNC_PTR(krb_get_krbconf2); -DECL_FUNC_PTR(krb_get_krbrealm2); -DECL_FUNC_PTR(krb_life_to_time); - -// krb5 functions -DECL_FUNC_PTR(krb5_change_password); -DECL_FUNC_PTR(krb5_get_init_creds_opt_init); -DECL_FUNC_PTR(krb5_get_init_creds_opt_set_tkt_life); -DECL_FUNC_PTR(krb5_get_init_creds_opt_set_renew_life); -DECL_FUNC_PTR(krb5_get_init_creds_opt_set_forwardable); -DECL_FUNC_PTR(krb5_get_init_creds_opt_set_proxiable); -DECL_FUNC_PTR(krb5_get_init_creds_opt_set_address_list); -DECL_FUNC_PTR(krb5_get_init_creds_opt_set_change_password_prompt); -DECL_FUNC_PTR(krb5_get_init_creds_password); -DECL_FUNC_PTR(krb5_get_prompt_types); -DECL_FUNC_PTR(krb5_build_principal_ext); -DECL_FUNC_PTR(krb5_cc_get_name); -DECL_FUNC_PTR(krb5_cc_get_type); -DECL_FUNC_PTR(krb5_cc_resolve); -DECL_FUNC_PTR(krb5_cc_default); -DECL_FUNC_PTR(krb5_cc_default_name); -DECL_FUNC_PTR(krb5_cc_set_default_name); -DECL_FUNC_PTR(krb5_cc_initialize); -DECL_FUNC_PTR(krb5_cc_destroy); -DECL_FUNC_PTR(krb5_cc_close); -DECL_FUNC_PTR(krb5_cc_store_cred); -DECL_FUNC_PTR(krb5_cc_copy_creds); -DECL_FUNC_PTR(krb5_cc_retrieve_cred); -DECL_FUNC_PTR(krb5_cc_get_principal); -DECL_FUNC_PTR(krb5_cc_start_seq_get); -DECL_FUNC_PTR(krb5_cc_next_cred); -DECL_FUNC_PTR(krb5_cc_end_seq_get); -DECL_FUNC_PTR(krb5_cc_remove_cred); -DECL_FUNC_PTR(krb5_cc_set_flags); -// DECL_FUNC_PTR(krb5_cc_get_type); -DECL_FUNC_PTR(krb5_free_context); -DECL_FUNC_PTR(krb5_free_cred_contents); -DECL_FUNC_PTR(krb5_free_principal); -DECL_FUNC_PTR(krb5_get_in_tkt_with_password); -DECL_FUNC_PTR(krb5_init_context); -DECL_FUNC_PTR(krb5_parse_name); -DECL_FUNC_PTR(krb5_timeofday); -DECL_FUNC_PTR(krb5_timestamp_to_sfstring); -DECL_FUNC_PTR(krb5_unparse_name); -DECL_FUNC_PTR(krb5_get_credentials); -DECL_FUNC_PTR(krb5_mk_req); -DECL_FUNC_PTR(krb5_sname_to_principal); -DECL_FUNC_PTR(krb5_get_credentials_renew); -DECL_FUNC_PTR(krb5_free_data); -DECL_FUNC_PTR(krb5_free_data_contents); -// DECL_FUNC_PTR(krb5_get_realm_domain); -DECL_FUNC_PTR(krb5_free_unparsed_name); -DECL_FUNC_PTR(krb5_os_localaddr); -DECL_FUNC_PTR(krb5_copy_keyblock_contents); -DECL_FUNC_PTR(krb5_copy_data); -DECL_FUNC_PTR(krb5_free_creds); -DECL_FUNC_PTR(krb5_build_principal); -DECL_FUNC_PTR(krb5_get_renewed_creds); -DECL_FUNC_PTR(krb5_get_default_config_files); -DECL_FUNC_PTR(krb5_free_config_files); -DECL_FUNC_PTR(krb5_get_default_realm); -DECL_FUNC_PTR(krb5_set_default_realm); -DECL_FUNC_PTR(krb5_free_ticket); -DECL_FUNC_PTR(krb5_decode_ticket); -DECL_FUNC_PTR(krb5_get_host_realm); -DECL_FUNC_PTR(krb5_free_host_realm); -DECL_FUNC_PTR(krb5_c_random_make_octets); -DECL_FUNC_PTR(krb5_free_addresses); -DECL_FUNC_PTR(krb5_free_default_realm); -DECL_FUNC_PTR(krb5_string_to_deltat); -DECL_FUNC_PTR(krb5_get_error_message); -DECL_FUNC_PTR(krb5_free_error_message); -DECL_FUNC_PTR(krb5_clear_error_message); - -// Krb524 functions -DECL_FUNC_PTR(krb524_init_ets); -DECL_FUNC_PTR(krb524_convert_creds_kdc); - -// ComErr functions -DECL_FUNC_PTR(com_err); -DECL_FUNC_PTR(error_message); - -// Profile functions -DECL_FUNC_PTR(profile_init); -DECL_FUNC_PTR(profile_flush); -DECL_FUNC_PTR(profile_release); -DECL_FUNC_PTR(profile_get_subsection_names); -DECL_FUNC_PTR(profile_free_list); -DECL_FUNC_PTR(profile_get_string); -DECL_FUNC_PTR(profile_get_integer); -DECL_FUNC_PTR(profile_get_values); -DECL_FUNC_PTR(profile_get_relation_names); -DECL_FUNC_PTR(profile_clear_relation); -DECL_FUNC_PTR(profile_add_relation); -DECL_FUNC_PTR(profile_update_relation); -DECL_FUNC_PTR(profile_release_string); -DECL_FUNC_PTR(profile_rename_section); - -// Service functions -DECL_FUNC_PTR(OpenSCManagerA); -DECL_FUNC_PTR(OpenServiceA); -DECL_FUNC_PTR(QueryServiceStatus); -DECL_FUNC_PTR(CloseServiceHandle); -DECL_FUNC_PTR(LsaNtStatusToWinError); - -// LSA Functions -DECL_FUNC_PTR(LsaConnectUntrusted); -DECL_FUNC_PTR(LsaLookupAuthenticationPackage); -DECL_FUNC_PTR(LsaCallAuthenticationPackage); -DECL_FUNC_PTR(LsaFreeReturnBuffer); -DECL_FUNC_PTR(LsaGetLogonSessionData); - -// CCAPI -FUNC_INFO ccapi_fi[] = { - MAKE_FUNC_INFO(cc_initialize), - MAKE_FUNC_INFO(cc_shutdown), - MAKE_FUNC_INFO(cc_get_NC_info), - MAKE_FUNC_INFO(cc_free_NC_info), - END_FUNC_INFO -}; - -FUNC_INFO k4_fi[] = { - MAKE_FUNC_INFO(get_krb_err_txt_entry), - MAKE_FUNC_INFO(k_isinst), - MAKE_FUNC_INFO(k_isname), - MAKE_FUNC_INFO(k_isrealm), - MAKE_FUNC_INFO(kadm_change_your_password), - MAKE_FUNC_INFO(kname_parse), - MAKE_FUNC_INFO(krb_get_cred), - MAKE_FUNC_INFO(krb_get_krbhst), - MAKE_FUNC_INFO(krb_get_lrealm), - MAKE_FUNC_INFO(krb_get_pw_in_tkt), - MAKE_FUNC_INFO(krb_get_tf_realm), - MAKE_FUNC_INFO(krb_mk_req), - MAKE_FUNC_INFO(krb_realmofhost), - MAKE_FUNC_INFO(tf_init), - MAKE_FUNC_INFO(tf_close), - MAKE_FUNC_INFO(tf_get_cred), - MAKE_FUNC_INFO(tf_get_pname), - MAKE_FUNC_INFO(tf_get_pinst), - MAKE_FUNC_INFO(LocalHostAddr), - MAKE_FUNC_INFO(tkt_string), - MAKE_FUNC_INFO(krb_set_tkt_string), - MAKE_FUNC_INFO(initialize_krb_error_func), - MAKE_FUNC_INFO(initialize_kadm_error_table), - MAKE_FUNC_INFO(dest_tkt), - /* MAKE_FUNC_INFO(lsh_LoadKrb4LeashErrorTables), */// XXX - MAKE_FUNC_INFO(krb_in_tkt), - MAKE_FUNC_INFO(krb_save_credentials), - MAKE_FUNC_INFO(krb_get_krbconf2), - MAKE_FUNC_INFO(krb_get_krbrealm2), - MAKE_FUNC_INFO(krb_life_to_time), - END_FUNC_INFO -}; - -FUNC_INFO k5_fi[] = { - MAKE_FUNC_INFO(krb5_change_password), - MAKE_FUNC_INFO(krb5_get_init_creds_opt_init), - MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_tkt_life), - MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_renew_life), - MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_forwardable), - MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_proxiable), - MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_address_list), - MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_change_password_prompt), - MAKE_FUNC_INFO(krb5_get_init_creds_password), - MAKE_FUNC_INFO(krb5_get_prompt_types), - MAKE_FUNC_INFO(krb5_build_principal_ext), - MAKE_FUNC_INFO(krb5_cc_get_name), - MAKE_FUNC_INFO(krb5_cc_get_type), - MAKE_FUNC_INFO(krb5_cc_resolve), - MAKE_FUNC_INFO(krb5_cc_default), - MAKE_FUNC_INFO(krb5_cc_default_name), - MAKE_FUNC_INFO(krb5_cc_set_default_name), - MAKE_FUNC_INFO(krb5_cc_initialize), - MAKE_FUNC_INFO(krb5_cc_destroy), - MAKE_FUNC_INFO(krb5_cc_close), - MAKE_FUNC_INFO(krb5_cc_copy_creds), - MAKE_FUNC_INFO(krb5_cc_store_cred), - MAKE_FUNC_INFO(krb5_cc_retrieve_cred), - MAKE_FUNC_INFO(krb5_cc_get_principal), - MAKE_FUNC_INFO(krb5_cc_start_seq_get), - MAKE_FUNC_INFO(krb5_cc_next_cred), - MAKE_FUNC_INFO(krb5_cc_end_seq_get), - MAKE_FUNC_INFO(krb5_cc_remove_cred), - MAKE_FUNC_INFO(krb5_cc_set_flags), - // MAKE_FUNC_INFO(krb5_cc_get_type), - MAKE_FUNC_INFO(krb5_free_context), - MAKE_FUNC_INFO(krb5_free_cred_contents), - MAKE_FUNC_INFO(krb5_free_principal), - MAKE_FUNC_INFO(krb5_get_in_tkt_with_password), - MAKE_FUNC_INFO(krb5_init_context), - MAKE_FUNC_INFO(krb5_parse_name), - MAKE_FUNC_INFO(krb5_timeofday), - MAKE_FUNC_INFO(krb5_timestamp_to_sfstring), - MAKE_FUNC_INFO(krb5_unparse_name), - MAKE_FUNC_INFO(krb5_get_credentials), - MAKE_FUNC_INFO(krb5_mk_req), - MAKE_FUNC_INFO(krb5_sname_to_principal), - MAKE_FUNC_INFO(krb5_get_credentials_renew), - MAKE_FUNC_INFO(krb5_free_data), - MAKE_FUNC_INFO(krb5_free_data_contents), - // MAKE_FUNC_INFO(krb5_get_realm_domain), - MAKE_FUNC_INFO(krb5_free_unparsed_name), - MAKE_FUNC_INFO(krb5_os_localaddr), - MAKE_FUNC_INFO(krb5_copy_keyblock_contents), - MAKE_FUNC_INFO(krb5_copy_data), - MAKE_FUNC_INFO(krb5_free_creds), - MAKE_FUNC_INFO(krb5_build_principal), - MAKE_FUNC_INFO(krb5_get_renewed_creds), - MAKE_FUNC_INFO(krb5_free_addresses), - MAKE_FUNC_INFO(krb5_get_default_config_files), - MAKE_FUNC_INFO(krb5_free_config_files), - MAKE_FUNC_INFO(krb5_get_default_realm), - MAKE_FUNC_INFO(krb5_set_default_realm), - MAKE_FUNC_INFO(krb5_free_ticket), - MAKE_FUNC_INFO(krb5_decode_ticket), - MAKE_FUNC_INFO(krb5_get_host_realm), - MAKE_FUNC_INFO(krb5_free_host_realm), - MAKE_FUNC_INFO(krb5_c_random_make_octets), - MAKE_FUNC_INFO(krb5_free_default_realm), - MAKE_FUNC_INFO(krb5_string_to_deltat), - MAKE_FUNC_INFO(krb5_get_error_message), - MAKE_FUNC_INFO(krb5_free_error_message), - MAKE_FUNC_INFO(krb5_clear_error_message), - END_FUNC_INFO -}; - -FUNC_INFO k524_fi[] = { - MAKE_FUNC_INFO(krb524_init_ets), - MAKE_FUNC_INFO(krb524_convert_creds_kdc), - END_FUNC_INFO -}; - -FUNC_INFO profile_fi[] = { - MAKE_FUNC_INFO(profile_init), - MAKE_FUNC_INFO(profile_flush), - MAKE_FUNC_INFO(profile_release), - MAKE_FUNC_INFO(profile_get_subsection_names), - MAKE_FUNC_INFO(profile_free_list), - MAKE_FUNC_INFO(profile_get_string), - MAKE_FUNC_INFO(profile_get_integer), - MAKE_FUNC_INFO(profile_get_values), - MAKE_FUNC_INFO(profile_get_relation_names), - MAKE_FUNC_INFO(profile_clear_relation), - MAKE_FUNC_INFO(profile_add_relation), - MAKE_FUNC_INFO(profile_update_relation), - MAKE_FUNC_INFO(profile_release_string), - MAKE_FUNC_INFO(profile_rename_section), - END_FUNC_INFO -}; - -FUNC_INFO ce_fi[] = { - MAKE_FUNC_INFO(com_err), - MAKE_FUNC_INFO(error_message), - END_FUNC_INFO -}; - -FUNC_INFO service_fi[] = { - MAKE_FUNC_INFO(OpenSCManagerA), - MAKE_FUNC_INFO(OpenServiceA), - MAKE_FUNC_INFO(QueryServiceStatus), - MAKE_FUNC_INFO(CloseServiceHandle), - MAKE_FUNC_INFO(LsaNtStatusToWinError), - END_FUNC_INFO -}; - -FUNC_INFO lsa_fi[] = { - MAKE_FUNC_INFO(LsaConnectUntrusted), - MAKE_FUNC_INFO(LsaLookupAuthenticationPackage), - MAKE_FUNC_INFO(LsaCallAuthenticationPackage), - MAKE_FUNC_INFO(LsaFreeReturnBuffer), - MAKE_FUNC_INFO(LsaGetLogonSessionData), - END_FUNC_INFO -}; - -// psapi functions -DECL_FUNC_PTR(GetModuleFileNameExA); -DECL_FUNC_PTR(EnumProcessModules); - -FUNC_INFO psapi_fi[] = { - MAKE_FUNC_INFO(GetModuleFileNameExA), - MAKE_FUNC_INFO(EnumProcessModules), - END_FUNC_INFO -}; - -// toolhelp functions -DECL_FUNC_PTR(CreateToolhelp32Snapshot); -DECL_FUNC_PTR(Module32First); -DECL_FUNC_PTR(Module32Next); - -FUNC_INFO toolhelp_fi[] = { - MAKE_FUNC_INFO(CreateToolhelp32Snapshot), - MAKE_FUNC_INFO(Module32First), - MAKE_FUNC_INFO(Module32Next), - END_FUNC_INFO -}; - -khm_int32 init_imports(void) { - OSVERSIONINFO osvi; - int imp_rv = 1; - -#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(KRB4_DLL); -#endif - - imp_rv = LoadFuncs(KRB5_DLL, k5_fi, &hKrb5, 0, 1, 0, 0); - CKRV(KRB5_DLL); - - imp_rv = LoadFuncs(COMERR_DLL, ce_fi, &hComErr, 0, 0, 1, 0); - CKRV(COMERR_DLL); - - imp_rv = LoadFuncs(SERVICE_DLL, service_fi, &hService, 0, 1, 0, 0); - CKRV(SERVICE_DLL); - - imp_rv = LoadFuncs(SECUR32_DLL, lsa_fi, &hSecur32, 0, 1, 1, 1); - CKRV(SECUR32_DLL); - -#ifndef _WIN64 - imp_rv = LoadFuncs(KRB524_DLL, k524_fi, &hKrb524, 0, 1, 1, 1); - CKRV(KRB524_DLL); -#endif - - imp_rv = LoadFuncs(PROFILE_DLL, profile_fi, &hProfile, 0, 1, 0, 0); - CKRV(PROFILE_DLL); - - imp_rv = LoadFuncs(CCAPI_DLL, ccapi_fi, &hCCAPI, 0, 1, 0, 0); - /* CCAPI_DLL is optional. No error check. */ - - memset(&osvi, 0, sizeof(OSVERSIONINFO)); - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&osvi); - - // XXX: We should really use feature testing, first - // checking for CreateToolhelp32Snapshot. If that's - // not around, we try the psapi stuff. - // - // Only load LSA functions if on NT/2000/XP - if(osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) - { - // Windows 9x - imp_rv = LoadFuncs(TOOLHELPDLL, toolhelp_fi, &hToolHelp32, 0, 1, 0, 0); - CKRV(TOOLHELPDLL); - - hPsapi = 0; - } - else if(osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) - { - // Windows NT - imp_rv = LoadFuncs(PSAPIDLL, psapi_fi, &hPsapi, 0, 1, 0, 0); - CKRV(PSAPIDLL); - - hToolHelp32 = 0; - } - - AfsAvailable = TRUE; //afscompat_init(); - - return KHM_ERROR_SUCCESS; - - _err_ret: - return KHM_ERROR_NOT_FOUND; -} - -khm_int32 exit_imports(void) { - //afscompat_close(); - - if (hKrb4) - FreeLibrary(hKrb4); - if (hKrb5) - FreeLibrary(hKrb5); - if (hProfile) - FreeLibrary(hProfile); - if (hComErr) - FreeLibrary(hComErr); - if (hService) - FreeLibrary(hService); - if (hSecur32) - FreeLibrary(hSecur32); - if (hKrb524) - FreeLibrary(hKrb524); - if (hPsapi) - FreeLibrary(hPsapi); - if (hToolHelp32) - FreeLibrary(hToolHelp32); - - return KHM_ERROR_SUCCESS; -} - -int (*Lcom_err)(LPSTR,long,LPSTR,...); -LPSTR (*Lerror_message)(long); -LPSTR (*Lerror_table_name)(long); - -void Leash_load_com_err_callback(FARPROC ce, - FARPROC em, - FARPROC etn) -{ - Lcom_err = (int (*)(LPSTR,long,LPSTR,...)) ce; - Lerror_message = (LPSTR (*)(long)) em; - Lerror_table_name = (LPSTR (*)(long)) etn; -} diff --git a/src/windows/identity/plugins/common/dynimport.h b/src/windows/identity/plugins/common/dynimport.h deleted file mode 100644 index 8660d6c0d..000000000 --- a/src/windows/identity/plugins/common/dynimport.h +++ /dev/null @@ -1,368 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_DYNIMPORT_H -#define __KHIMAIRA_DYNIMPORT_H - -/* Dynamic imports */ -#include<khdefs.h> -#include<tlhelp32.h> - -#if _WIN32_WINNT < 0x0501 -#define KHM_SAVE_WIN32_WINNT _WIN32_WINNT -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0501 -#endif -#include<ntsecapi.h> -#ifdef KHM_SAVE_WIN32_WINNT -#undef _WIN32_WINNT -#define _WIN32_WINNT KHM_SAVE_WIN32_WINNT -#undef KHM_SAVE_WIN32_WINNT -#endif - -extern HINSTANCE hKrb4; -extern HINSTANCE hKrb5; -extern HINSTANCE hProfile; - -/////////////////////////////////////////////////////////////////////////////// - -#ifdef _WIN64 -#define CCAPI_DLL "krbcc64.dll" -#define KRBCC32_DLL "krbcc64.dll" -#else -#define CCAPI_DLL "krbcc32.dll" -#define KRBCC32_DLL "krbcc32.dll" -#endif -#define SERVICE_DLL "advapi32.dll" -#define SECUR32_DLL "secur32.dll" - -////////////////////////////////////////////////////////////////////////////// - -#include <loadfuncs-com_err.h> -#include <loadfuncs-krb5.h> -#include <loadfuncs-profile.h> -#include <loadfuncs-krb.h> -#include <loadfuncs-krb524.h> -#include <loadfuncs-lsa.h> - -//// CCAPI -/* In order to avoid including the private CCAPI headers */ -typedef int cc_int32; - -#define CC_API_VER_1 1 -#define CC_API_VER_2 2 - -#define CCACHE_API cc_int32 - -/* -** The Official Error Codes -*/ -#define CC_NOERROR 0 -#define CC_BADNAME 1 -#define CC_NOTFOUND 2 -#define CC_END 3 -#define CC_IO 4 -#define CC_WRITE 5 -#define CC_NOMEM 6 -#define CC_FORMAT 7 -#define CC_LOCKED 8 -#define CC_BAD_API_VERSION 9 -#define CC_NO_EXIST 10 -#define CC_NOT_SUPP 11 -#define CC_BAD_PARM 12 -#define CC_ERR_CACHE_ATTACH 13 -#define CC_ERR_CACHE_RELEASE 14 -#define CC_ERR_CACHE_FULL 15 -#define CC_ERR_CRED_VERSION 16 - -enum { - CC_CRED_VUNKNOWN = 0, // For validation - CC_CRED_V4 = 1, - CC_CRED_V5 = 2, - CC_CRED_VMAX = 3 // For validation -}; - -typedef struct opaque_dll_control_block_type* apiCB; -typedef struct _infoNC { - char* name; - char* principal; - cc_int32 vers; -} infoNC; - -TYPEDEF_FUNC( -CCACHE_API, -CALLCONV_C, -cc_initialize, - ( - apiCB** cc_ctx, // < DLL's primary control structure. - // returned here, passed everywhere else - cc_int32 api_version, // > ver supported by caller (use CC_API_VER_1) - cc_int32* api_supported, // < if ~NULL, max ver supported by DLL - const char** vendor // < if ~NULL, vendor name in read only C string - ) -); - -TYPEDEF_FUNC( -CCACHE_API, -CALLCONV_C, -cc_shutdown, - ( - apiCB** cc_ctx // <> DLL's primary control structure. NULL after - ) -); - -TYPEDEF_FUNC( -CCACHE_API, -CALLCONV_C, -cc_get_NC_info, - ( - apiCB* cc_ctx, // > DLL's primary control structure - struct _infoNC*** ppNCi // < (NULL before call) null terminated, - // list of a structs (free via cc_free_infoNC()) - ) -); - -TYPEDEF_FUNC( -CCACHE_API, -CALLCONV_C, -cc_free_NC_info, - ( - apiCB* cc_ctx, - struct _infoNC*** ppNCi // < free list of structs returned by - // cc_get_cache_names(). set to NULL on return - ) -); -//// \CCAPI - -extern DWORD AfsAvailable; - -// service definitions -typedef SC_HANDLE (WINAPI *FP_OpenSCManagerA)(char *, char *, DWORD); -typedef SC_HANDLE (WINAPI *FP_OpenServiceA)(SC_HANDLE, char *, DWORD); -typedef BOOL (WINAPI *FP_QueryServiceStatus)(SC_HANDLE, LPSERVICE_STATUS); -typedef BOOL (WINAPI *FP_CloseServiceHandle)(SC_HANDLE); - -////////////////////////////////////////////////////////////////////////////// - -// CCAPI -extern DECL_FUNC_PTR(cc_initialize); -extern DECL_FUNC_PTR(cc_shutdown); -extern DECL_FUNC_PTR(cc_get_NC_info); -extern DECL_FUNC_PTR(cc_free_NC_info); - -// krb4 functions -extern DECL_FUNC_PTR(get_krb_err_txt_entry); -extern DECL_FUNC_PTR(k_isinst); -extern DECL_FUNC_PTR(k_isname); -extern DECL_FUNC_PTR(k_isrealm); -extern DECL_FUNC_PTR(kadm_change_your_password); -extern DECL_FUNC_PTR(kname_parse); -extern DECL_FUNC_PTR(krb_get_cred); -extern DECL_FUNC_PTR(krb_get_krbhst); -extern DECL_FUNC_PTR(krb_get_lrealm); -extern DECL_FUNC_PTR(krb_get_pw_in_tkt); -extern DECL_FUNC_PTR(krb_get_tf_realm); -extern DECL_FUNC_PTR(krb_mk_req); -extern DECL_FUNC_PTR(krb_realmofhost); -extern DECL_FUNC_PTR(tf_init); -extern DECL_FUNC_PTR(tf_close); -extern DECL_FUNC_PTR(tf_get_cred); -extern DECL_FUNC_PTR(tf_get_pname); -extern DECL_FUNC_PTR(tf_get_pinst); -extern DECL_FUNC_PTR(LocalHostAddr); -extern DECL_FUNC_PTR(tkt_string); -extern DECL_FUNC_PTR(krb_set_tkt_string); -extern DECL_FUNC_PTR(initialize_krb_error_func); -extern DECL_FUNC_PTR(initialize_kadm_error_table); -extern DECL_FUNC_PTR(dest_tkt); -extern DECL_FUNC_PTR(lsh_LoadKrb4LeashErrorTables); // XXX -extern DECL_FUNC_PTR(krb_in_tkt); -extern DECL_FUNC_PTR(krb_save_credentials); -extern DECL_FUNC_PTR(krb_get_krbconf2); -extern DECL_FUNC_PTR(krb_get_krbrealm2); -extern DECL_FUNC_PTR(krb_life_to_time); - -// krb5 functions -extern DECL_FUNC_PTR(krb5_change_password); -extern DECL_FUNC_PTR(krb5_get_init_creds_opt_init); -extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_tkt_life); -extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_renew_life); -extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_forwardable); -extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_proxiable); -extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_renew_life); -extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_address_list); -extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_change_password_prompt); -extern DECL_FUNC_PTR(krb5_get_init_creds_password); -extern DECL_FUNC_PTR(krb5_get_prompt_types); -extern DECL_FUNC_PTR(krb5_build_principal_ext); -extern DECL_FUNC_PTR(krb5_cc_get_name); -extern DECL_FUNC_PTR(krb5_cc_get_type); -extern DECL_FUNC_PTR(krb5_cc_resolve); -extern DECL_FUNC_PTR(krb5_cc_default); -extern DECL_FUNC_PTR(krb5_cc_default_name); -extern DECL_FUNC_PTR(krb5_cc_set_default_name); -extern DECL_FUNC_PTR(krb5_cc_initialize); -extern DECL_FUNC_PTR(krb5_cc_destroy); -extern DECL_FUNC_PTR(krb5_cc_close); -extern DECL_FUNC_PTR(krb5_cc_copy_creds); -extern DECL_FUNC_PTR(krb5_cc_store_cred); -extern DECL_FUNC_PTR(krb5_cc_retrieve_cred); -extern DECL_FUNC_PTR(krb5_cc_get_principal); -extern DECL_FUNC_PTR(krb5_cc_start_seq_get); -extern DECL_FUNC_PTR(krb5_cc_next_cred); -extern DECL_FUNC_PTR(krb5_cc_end_seq_get); -extern DECL_FUNC_PTR(krb5_cc_remove_cred); -extern DECL_FUNC_PTR(krb5_cc_set_flags); -// extern DECL_FUNC_PTR(krb5_cc_get_type); -extern DECL_FUNC_PTR(krb5_free_context); -extern DECL_FUNC_PTR(krb5_free_cred_contents); -extern DECL_FUNC_PTR(krb5_free_principal); -extern DECL_FUNC_PTR(krb5_get_in_tkt_with_password); -extern DECL_FUNC_PTR(krb5_init_context); -extern DECL_FUNC_PTR(krb5_parse_name); -extern DECL_FUNC_PTR(krb5_timeofday); -extern DECL_FUNC_PTR(krb5_timestamp_to_sfstring); -extern DECL_FUNC_PTR(krb5_unparse_name); -extern DECL_FUNC_PTR(krb5_get_credentials); -extern DECL_FUNC_PTR(krb5_mk_req); -extern DECL_FUNC_PTR(krb5_sname_to_principal); -extern DECL_FUNC_PTR(krb5_get_credentials_renew); -extern DECL_FUNC_PTR(krb5_free_data); -extern DECL_FUNC_PTR(krb5_free_data_contents); -// extern DECL_FUNC_PTR(krb5_get_realm_domain); -extern DECL_FUNC_PTR(krb5_free_unparsed_name); -extern DECL_FUNC_PTR(krb5_os_localaddr); -extern DECL_FUNC_PTR(krb5_copy_keyblock_contents); -extern DECL_FUNC_PTR(krb5_copy_data); -extern DECL_FUNC_PTR(krb5_free_creds); -extern DECL_FUNC_PTR(krb5_build_principal); -extern DECL_FUNC_PTR(krb5_get_renewed_creds); -extern DECL_FUNC_PTR(krb5_free_addresses); -extern DECL_FUNC_PTR(krb5_get_default_config_files); -extern DECL_FUNC_PTR(krb5_free_config_files); -extern DECL_FUNC_PTR(krb5_get_default_realm); -extern DECL_FUNC_PTR(krb5_set_default_realm); -extern DECL_FUNC_PTR(krb5_free_ticket); -extern DECL_FUNC_PTR(krb5_decode_ticket); -extern DECL_FUNC_PTR(krb5_get_host_realm); -extern DECL_FUNC_PTR(krb5_free_host_realm); -extern DECL_FUNC_PTR(krb5_c_random_make_octets); -extern DECL_FUNC_PTR(krb5_free_default_realm); -extern DECL_FUNC_PTR(krb5_string_to_deltat); -extern DECL_FUNC_PTR(krb5_get_error_message); -extern DECL_FUNC_PTR(krb5_free_error_message); -extern DECL_FUNC_PTR(krb5_clear_error_message); - -// Krb524 functions -extern DECL_FUNC_PTR(krb524_init_ets); -extern DECL_FUNC_PTR(krb524_convert_creds_kdc); - -// ComErr functions -extern DECL_FUNC_PTR(com_err); -extern DECL_FUNC_PTR(error_message); - -// Profile functions -extern DECL_FUNC_PTR(profile_init); -extern DECL_FUNC_PTR(profile_flush); -extern DECL_FUNC_PTR(profile_release); -extern DECL_FUNC_PTR(profile_get_subsection_names); -extern DECL_FUNC_PTR(profile_free_list); -extern DECL_FUNC_PTR(profile_get_string); -extern DECL_FUNC_PTR(profile_get_integer); -extern DECL_FUNC_PTR(profile_get_values); -extern DECL_FUNC_PTR(profile_get_relation_names); -extern DECL_FUNC_PTR(profile_clear_relation); -extern DECL_FUNC_PTR(profile_add_relation); -extern DECL_FUNC_PTR(profile_update_relation); -extern DECL_FUNC_PTR(profile_release_string); -extern DECL_FUNC_PTR(profile_rename_section); - -// Service functions -extern DECL_FUNC_PTR(OpenSCManagerA); -extern DECL_FUNC_PTR(OpenServiceA); -extern DECL_FUNC_PTR(QueryServiceStatus); -extern DECL_FUNC_PTR(CloseServiceHandle); -extern DECL_FUNC_PTR(LsaNtStatusToWinError); - -// LSA Functions -extern DECL_FUNC_PTR(LsaConnectUntrusted); -extern DECL_FUNC_PTR(LsaLookupAuthenticationPackage); -extern DECL_FUNC_PTR(LsaCallAuthenticationPackage); -extern DECL_FUNC_PTR(LsaFreeReturnBuffer); -extern DECL_FUNC_PTR(LsaGetLogonSessionData); - -// toolhelp functions -TYPEDEF_FUNC( - HANDLE, - WINAPI, - CreateToolhelp32Snapshot, - (DWORD, DWORD) - ); -TYPEDEF_FUNC( - BOOL, - WINAPI, - Module32First, - (HANDLE, LPMODULEENTRY32) - ); -TYPEDEF_FUNC( - BOOL, - WINAPI, - Module32Next, - (HANDLE, LPMODULEENTRY32) - ); - -// psapi functions -TYPEDEF_FUNC( - DWORD, - WINAPI, - GetModuleFileNameExA, - (HANDLE, HMODULE, LPSTR, DWORD) - ); - -TYPEDEF_FUNC( - BOOL, - WINAPI, - EnumProcessModules, - (HANDLE, HMODULE*, DWORD, LPDWORD) - ); - -#define pGetModuleFileNameEx pGetModuleFileNameExA -#define TOOLHELPDLL "kernel32.dll" -#define PSAPIDLL "psapi.dll" - -// psapi functions -extern DECL_FUNC_PTR(GetModuleFileNameExA); -extern DECL_FUNC_PTR(EnumProcessModules); - -// toolhelp functions -extern DECL_FUNC_PTR(CreateToolhelp32Snapshot); -extern DECL_FUNC_PTR(Module32First); -extern DECL_FUNC_PTR(Module32Next); - -khm_int32 init_imports(void); -khm_int32 exit_imports(void); - -#endif diff --git a/src/windows/identity/plugins/common/krb5common.c b/src/windows/identity/plugins/common/krb5common.c deleted file mode 100644 index f3a5e988e..000000000 --- a/src/windows/identity/plugins/common/krb5common.c +++ /dev/null @@ -1,451 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<windows.h> -#include<netidmgr.h> -#include<dynimport.h> -#include<krb5common.h> -#ifdef DEBUG -#include<assert.h> -#endif -#include<strsafe.h> - -/**************************************/ -/* khm_krb5_error(): */ -/**************************************/ -int -khm_krb5_error(krb5_error_code rc, LPCSTR FailedFunctionName, - int FreeContextFlag, krb5_context * ctx, - krb5_ccache * cache) -{ -#ifdef NO_KRB5 - return -1; -#else - -#ifdef SHOW_MESSAGE_IN_AN_ANNOYING_WAY - char message[256]; - const char *errText; - int krb5Error = ((int)(rc & 255)); - - errText = perror_message(rc); - _snprintf(message, sizeof(message), - "%s\n(Kerberos error %ld)\n\n%s failed", - errText, - krb5Error, - FailedFunctionName); - - MessageBoxA(NULL, message, "Kerberos Five", MB_OK | MB_ICONERROR | - MB_TASKMODAL | - MB_SETFOREGROUND); -#endif - - if (FreeContextFlag == 1) - { - if (*ctx != NULL) - { - if (*cache != NULL) { - pkrb5_cc_close(*ctx, *cache); - *cache = NULL; - } - - pkrb5_free_context(*ctx); - *ctx = NULL; - } - } - - return rc; - -#endif //!NO_KRB5 -} - -int -khm_krb5_initialize(khm_handle ident, - krb5_context *ctx, - krb5_ccache *cache) -{ -#ifdef NO_KRB5 - return(-1); -#else - - LPCSTR functionName = NULL; - int freeContextFlag = 0; - krb5_error_code rc = -1; - krb5_flags flags = 0; - - if (pkrb5_init_context == NULL) - return 1; - - if (*ctx == 0 && (rc = (*pkrb5_init_context)(ctx))) { - functionName = "krb5_init_context()"; - freeContextFlag = 0; - goto on_error; - } - - if(*cache == 0) { - wchar_t wccname[MAX_PATH]; - khm_size cbwccname; - - if(ident != NULL) { - cbwccname = sizeof(wccname); - do { - char ccname[256]; - - if(KHM_FAILED(kcdb_identity_get_attrib(ident, L"Krb5CCName", - NULL, wccname, - &cbwccname))) { - cbwccname = sizeof(wccname); - if (KHM_FAILED - (khm_krb5_find_ccache_for_identity(ident, - ctx, - wccname, - &cbwccname))) { -#ifdef DEBUG_LIKE_A_MADMAN - assert(FALSE); -#endif - break; - } - } - - if(UnicodeStrToAnsi(ccname, sizeof(ccname), wccname) == 0) - break; - - if(rc = (*pkrb5_cc_resolve)(*ctx, ccname, cache)) { - functionName = "krb5_cc_resolve()"; - freeContextFlag = 1; - goto on_error; - } - } while(FALSE); - } - -#ifndef FAILOVER_TO_DEFAULT_CCACHE - rc = 1; -#endif - if (*cache == 0 -#ifdef FAILOVER_TO_DEFAULT_CCACHE - && (rc = (*pkrb5_cc_default)(*ctx, cache)) -#endif - ) { - functionName = "krb5_cc_default()"; - freeContextFlag = 1; - goto on_error; - } - } - -#ifdef KRB5_TC_NOTICKET - flags = KRB5_TC_NOTICKET; -#endif - - if ((rc = (*pkrb5_cc_set_flags)(*ctx, *cache, flags))) - { - if (rc != KRB5_FCC_NOFILE && rc != KRB5_CC_NOTFOUND) - khm_krb5_error(rc, "krb5_cc_set_flags()", 0, ctx, - cache); - else if ((rc == KRB5_FCC_NOFILE || rc == KRB5_CC_NOTFOUND) && *ctx != NULL) { - if (*cache != NULL) { - (*pkrb5_cc_close)(*ctx, *cache); - *cache = NULL; - } - } - return rc; - } - return 0; - -on_error: - return khm_krb5_error(rc, functionName, freeContextFlag, ctx, cache); -#endif //!NO_KRB5 -} - -#define TIMET_TOLERANCE (60*5) - -khm_int32 KHMAPI -khm_get_identity_expiration_time(krb5_context ctx, krb5_ccache cc, - khm_handle ident, - krb5_timestamp * pexpiration) -{ - krb5_principal principal = 0; - char * princ_name = NULL; - krb5_creds creds; - krb5_error_code code; - krb5_error_code cc_code; - krb5_cc_cursor cur; - krb5_timestamp now, expiration = 0; - - wchar_t w_ident_name[KCDB_IDENT_MAXCCH_NAME]; - char ident_name[KCDB_IDENT_MAXCCH_NAME]; - khm_size cb; - - khm_int32 rv = KHM_ERROR_NOT_FOUND; - - if (!ctx || !cc || !ident || !pexpiration) - return KHM_ERROR_GENERAL; - - code = pkrb5_cc_get_principal(ctx, cc, &principal); - - if ( code ) - return KHM_ERROR_INVALID_PARAM; - - cb = sizeof(w_ident_name); - kcdb_identity_get_name(ident, w_ident_name, &cb); - UnicodeStrToAnsi(ident_name, sizeof(ident_name), w_ident_name); - - code = pkrb5_unparse_name(ctx, principal, &princ_name); - - /* compare principal to ident. */ - - if ( code || !princ_name || - strcmp(princ_name, ident_name) ) { - if (princ_name) - pkrb5_free_unparsed_name(ctx, princ_name); - pkrb5_free_principal(ctx, principal); - return KHM_ERROR_UNKNOWN; - } - - pkrb5_free_unparsed_name(ctx, princ_name); - pkrb5_free_principal(ctx, principal); - - code = pkrb5_timeofday(ctx, &now); - - if (code) - return KHM_ERROR_UNKNOWN; - - cc_code = pkrb5_cc_start_seq_get(ctx, cc, &cur); - - while (!(cc_code = pkrb5_cc_next_cred(ctx, cc, &cur, &creds))) { - krb5_data * c0 = krb5_princ_name(ctx, creds.server); - krb5_data * c1 = krb5_princ_component(ctx, creds.server, 1); - krb5_data * r = krb5_princ_realm(ctx, creds.server); - - if ( c0 && c1 && r && c1->length == r->length && - !strncmp(c1->data,r->data,r->length) && - !strncmp("krbtgt",c0->data,c0->length) ) { - - /* we have a TGT, check for the expiration time. - * if it is valid and renewable, use the renew time - */ - - if (!(creds.ticket_flags & TKT_FLG_INVALID) && - creds.times.starttime < (now + TIMET_TOLERANCE) && - (creds.times.endtime + TIMET_TOLERANCE) > now) { - expiration = creds.times.endtime; - - if ((creds.ticket_flags & TKT_FLG_RENEWABLE) && - (creds.times.renew_till > creds.times.endtime)) { - expiration = creds.times.renew_till; - } - } - } - } - - if (cc_code == KRB5_CC_END) { - cc_code = pkrb5_cc_end_seq_get(ctx, cc, &cur); - rv = KHM_ERROR_SUCCESS; - *pexpiration = expiration; - } - - return rv; -} - -khm_int32 KHMAPI -khm_krb5_find_ccache_for_identity(khm_handle ident, krb5_context *pctx, - void * buffer, khm_size * pcbbuf) -{ - krb5_context ctx = 0; - krb5_ccache cache = 0; - krb5_error_code code; - apiCB * cc_ctx = 0; - struct _infoNC ** pNCi = NULL; - int i; - khm_int32 t; - wchar_t * ms = NULL; - khm_size cb; - krb5_timestamp expiration = 0; - krb5_timestamp best_match_expiration = 0; - char best_match_ccname[256] = ""; - khm_handle csp_params = NULL; - khm_handle csp_plugins = NULL; - - if (!buffer || !pcbbuf) - return KHM_ERROR_GENERAL; - - ctx = *pctx; - - if (!pcc_initialize || - !pcc_get_NC_info || - !pcc_free_NC_info || - !pcc_shutdown) - goto _skip_cc_iter; - - code = pcc_initialize(&cc_ctx, CC_API_VER_2, NULL, NULL); - if (code) - goto _exit; - - code = pcc_get_NC_info(cc_ctx, &pNCi); - - if (code) - goto _exit; - - for(i=0; pNCi[i]; i++) { - if (pNCi[i]->vers != CC_CRED_V5) - continue; - - code = (*pkrb5_cc_resolve)(ctx, pNCi[i]->name, &cache); - if (code) - continue; - - /* need a function to check the cache for the identity - * and determine if it has valid tickets. If it has - * the right identity and valid tickets, store the - * expiration time and the cache name. If it has the - * right identity but no valid tickets, store the ccache - * name and an expiration time of zero. if it does not - * have the right identity don't save the name. - * - * Keep searching to find the best cache available. - */ - - if (KHM_SUCCEEDED(khm_get_identity_expiration_time(ctx, cache, - ident, - &expiration))) { - if ( expiration > best_match_expiration ) { - best_match_expiration = expiration; - StringCbCopyA(best_match_ccname, - sizeof(best_match_ccname), - "API:"); - StringCbCatA(best_match_ccname, - sizeof(best_match_ccname), - pNCi[i]->name); - expiration = 0; - } - } - - if(ctx != NULL && cache != NULL) - (*pkrb5_cc_close)(ctx, cache); - cache = 0; - } - - _skip_cc_iter: - - if (KHM_SUCCEEDED(kmm_get_plugins_config(0, &csp_plugins))) { - khc_open_space(csp_plugins, L"Krb5Cred\\Parameters", 0, &csp_params); - khc_close_space(csp_plugins); - csp_plugins = NULL; - } - -#ifdef DEBUG - if (csp_params == NULL) { - assert(FALSE); - } -#endif - - if (csp_params && - KHM_SUCCEEDED(khc_read_int32(csp_params, L"MsLsaList", &t)) && t) { - code = (*pkrb5_cc_resolve)(ctx, "MSLSA:", &cache); - if (code == 0 && cache) { - if (KHM_SUCCEEDED(khm_get_identity_expiration_time(ctx, cache, - ident, - &expiration))) { - if ( expiration > best_match_expiration ) { - best_match_expiration = expiration; - StringCbCopyA(best_match_ccname, sizeof(best_match_ccname), - "MSLSA:"); - expiration = 0; - } - } - } - - if (ctx != NULL && cache != NULL) - (*pkrb5_cc_close)(ctx, cache); - - cache = 0; - } - - if (csp_params && - khc_read_multi_string(csp_params, L"FileCCList", NULL, &cb) - == KHM_ERROR_TOO_LONG && - cb > sizeof(wchar_t) * 2) { - - wchar_t * t; - char ccname[MAX_PATH + 6]; - - ms = PMALLOC(cb); - -#ifdef DEBUG - assert(ms); -#endif - - khc_read_multi_string(csp_params, L"FileCCList", ms, &cb); - for(t = ms; t && *t; t = multi_string_next(t)) { - StringCchPrintfA(ccname, ARRAYLENGTH(ccname), - "FILE:%S", t); - - code = (*pkrb5_cc_resolve)(ctx, ccname, &cache); - if (code) - continue; - - if (KHM_SUCCEEDED(khm_get_identity_expiration_time(ctx, cache, - ident, - &expiration))) { - if ( expiration > best_match_expiration ) { - best_match_expiration = expiration; - StringCbCopyA(best_match_ccname, - sizeof(best_match_ccname), - ccname); - expiration = 0; - } - } - - if (ctx != NULL && cache != NULL) - (*pkrb5_cc_close)(ctx, cache); - cache = 0; - } - - PFREE(ms); - } - _exit: - if (csp_params) - khc_close_space(csp_params); - - if (pNCi) - (*pcc_free_NC_info)(cc_ctx, &pNCi); - - if (cc_ctx) - (*pcc_shutdown)(&cc_ctx); - - if (best_match_ccname[0]) { - - if (*pcbbuf = AnsiStrToUnicode((wchar_t *)buffer, - *pcbbuf, - best_match_ccname)) { - - *pcbbuf = (*pcbbuf + 1) * sizeof(wchar_t); - - return KHM_ERROR_SUCCESS; - } - - } - - return KHM_ERROR_GENERAL; -} diff --git a/src/windows/identity/plugins/common/krb5common.h b/src/windows/identity/plugins/common/krb5common.h deleted file mode 100644 index b01e0d5ce..000000000 --- a/src/windows/identity/plugins/common/krb5common.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -/* Adapted from multiple Leash header files */ - -#ifndef __KHIMAIRA_KRB5COMMON_H -#define __KHIMAIRA_KRB5COMMON_H - -#include<krb5.h> - -#ifndef NO_KRB5 -int khm_krb5_error(krb5_error_code rc, LPCSTR FailedFunctionName, - int FreeContextFlag, krb5_context *ctx, - krb5_ccache *cache); - -int -khm_krb5_get_error_string(krb5_error_code rc, - wchar_t * buffer, - khm_size cb_buffer); - -int khm_krb5_initialize(khm_handle ident, krb5_context *, krb5_ccache *); - -khm_int32 KHMAPI -khm_krb5_find_ccache_for_identity(khm_handle ident, krb5_context *pctx, - void * buffer, khm_size * pcbbuf); - -khm_int32 KHMAPI -khm_get_identity_expiration_time(krb5_context ctx, krb5_ccache cc, - khm_handle ident, - krb5_timestamp * pexpiration); -#endif /* NO_KRB5 */ - -#endif diff --git a/src/windows/identity/plugins/krb4/Makefile b/src/windows/identity/plugins/krb4/Makefile deleted file mode 100644 index 0a8ede8aa..000000000 --- a/src/windows/identity/plugins/krb4/Makefile +++ /dev/null @@ -1,106 +0,0 @@ -# -# 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 -# (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. - - -MODULE=plugins\krb4 -!include <../../config/Makefile.w32> - -DLLFILE=$(BINDIR)\krb4cred.dll - -LIBFILE=$(LIBDIR)\krb4cred.lib - -OBJFILES= \ - $(LIBDIR)\dynimport.obj \ - $(LIBDIR)\krb5common.obj \ - $(OBJ)\krb4main.obj \ - $(OBJ)\krb4plugin.obj \ - $(OBJ)\krb4funcs.obj \ - $(OBJ)\errorfuncs.obj \ - $(OBJ)\krb4config.obj \ - $(OBJ)\krb4configdlg.obj \ - $(OBJ)\krb4newcreds.obj - - - -SDKLIBFILES= - -!if ("$(CPU)" == "IA64" ) || ("$(CPU)" == "AMD64" ) || ("$(CPU)" == "ALPHA64" ) -SCLIB=bufferoverflowu.lib -LIBFILES= \ - $(LIBDIR)\nidmgr64.lib \ - $(KFWLIBDIR)\loadfuncs.lib -!else -SCLIB= -LIBFILES= \ - $(LIBDIR)\nidmgr32.lib \ - $(KFWLIBDIR)\loadfuncs.lib -!endif - -VERRESFILE=$(OBJ)\version.res - -MSGRESFILE=$(OBJ)\krb4_msgs.res - -$(MSGRESFILE): $(OBJ)\krb4_msgs.rc - -$(OBJ)\krb4_msgs.rc: lang\krb4_msgs.mc - $(MC2RC) - -$(OBJ)\krb4config.c: krbconfig.csv $(CONFDIR)\csvschema.cfg - $(CCSV) $** $@ - -$(DLLFILE): $(OBJFILES) $(VERRESFILE) $(MSGRESFILE) - $(DLLGUILINK) $(LIBFILES) $(SDKLIBFILES) $(SCLIB) - $(_VC_MANIFEST_EMBED_DLL) - $(_VC_MANIFEST_CLEAN) - -all: mkdirs $(MSGRESFILE) $(DLLFILE) lang - -lang:: - -# Repeat this block as necessary redefining LANG for additional -# languages. - -# Begin language block -LANG=en_us - -LANGDLL=$(BINDIR)\krb4cred_$(LANG).dll - -lang:: $(LANGDLL) - -$(LANGDLL): $(OBJ)\langres_$(LANG).res $(OBJ)\langres_ver_$(LANG).res - $(DLLRESLINK) - -$(OBJ)\langres_$(LANG).res: lang\$(LANG)\langres.rc - $(RC2RES) - -$(OBJ)\langres_ver_$(LANG).res: version.rc - $(RC) $(RFLAGS) $(rincflags) /d LANGVER /d LANG_$(LANG) /fo $@ $** -# End language block - -clean:: -!if defined(INCFILES) - $(RM) $(INCFILES) -!endif - - diff --git a/src/windows/identity/plugins/krb4/errorfuncs.c b/src/windows/identity/plugins/krb4/errorfuncs.c deleted file mode 100644 index 3441316e5..000000000 --- a/src/windows/identity/plugins/krb4/errorfuncs.c +++ /dev/null @@ -1,225 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<krbcred.h> -#include<kherror.h> - -#include<strsafe.h> - -extern void (__cdecl *pinitialize_krb_error_func)(); -extern void (__cdecl *pinitialize_kadm_error_table)(); - - -khm_int32 init_error_funcs() -{ - -#if 0 - /*TODO: Do something about this */ - if (plsh_LoadKrb4LeashErrorTables) - plsh_LoadKrb4LeashErrorTables(hLeashInst, 0); -#endif - return KHM_ERROR_SUCCESS; -} - -khm_int32 exit_error_funcs() -{ - return KHM_ERROR_SUCCESS; -} - -// Global Variables. -static long lsh_errno; -static char *err_context; /* error context */ -extern int (*Lcom_err)(LPSTR,long,LPSTR,...); -extern LPSTR (*Lerror_message)(long); -extern LPSTR (*Lerror_table_name)(long); - -#ifdef WIN16 -#define UNDERSCORE "_" -#else -#define UNDERSCORE -#endif - -HWND GetRootParent (HWND Child) -{ - HWND Last = NULL; - while (Child) - { - Last = Child; - Child = GetParent (Child); - } - return Last; -} - - -LPSTR err_describe(LPSTR buf, size_t len, long code) -{ - LPSTR cp, com_err_msg; - int offset; - long table_num; - char *etype; - - offset = (int) (code & 255); - table_num = code - offset; - com_err_msg = Lerror_message(code); - - switch(table_num) - { - case krb_err_base: - case kadm_err_base: - break; - default: - StringCbCopyA(buf, len, com_err_msg); - return buf; - } - - cp = buf; - if (table_num == krb_err_base) - switch(offset) - { - case KDC_NAME_EXP: /* 001 Principal expired */ - case KDC_SERVICE_EXP: /* 002 Service expired */ - case KDC_AUTH_EXP: /* 003 Auth expired */ - case KDC_PKT_VER: /* 004 Protocol version unknown */ - case KDC_P_MKEY_VER: /* 005 Wrong master key version */ - case KDC_S_MKEY_VER: /* 006 Wrong master key version */ - case KDC_BYTE_ORDER: /* 007 Byte order unknown */ - case KDC_PR_N_UNIQUE: /* 009 Principal not unique */ - case KDC_NULL_KEY: /* 010 Principal has null key */ - case KDC_GEN_ERR: /* 011 Generic error from KDC */ - case INTK_W_NOTALL : /* 061 Not ALL tickets returned */ - case INTK_PROT : /* 063 Protocol Error */ - case INTK_ERR : /* 070 Other error */ - com_err_msg = "Something weird happened... try again, and if Leash" - " continues to fail, contact Network Services as listed in the " - "About box."; - break; - case KDC_PR_UNKNOWN: /* 008 Principal unknown */ - com_err_msg = "You have entered an unknown username/instance/realm" - " combination."; - break; - case GC_TKFIL : /* 021 Can't read ticket file */ - case GC_NOTKT : /* 022 Can't find ticket or TGT */ - com_err_msg = "Something is wrong with the memory where your " - "tickets are stored. Try exiting Windows and restarting your " - "computer."; - break; - case MK_AP_TGTEXP : /* 026 TGT Expired */ - /* no extra error msg */ - break; - case RD_AP_TIME : /* 037 delta_t too big */ - com_err_msg = "Your computer's clock is out of sync with the " - "Kerberos server. Please see the help file about correcting " - "your clock."; - break; - - case RD_AP_UNDEC : /* 031 Can't decode authenticator */ - case RD_AP_EXP : /* 032 Ticket expired */ - case RD_AP_NYV : /* 033 Ticket not yet valid */ - case RD_AP_REPEAT : /* 034 Repeated request */ - case RD_AP_NOT_US : /* 035 The ticket isn't for us */ - case RD_AP_INCON : /* 036 Request is inconsistent */ - case RD_AP_BADD : /* 038 Incorrect net address */ - case RD_AP_VERSION : /* 039 protocol version mismatch */ - case RD_AP_MSG_TYPE : /* 040 invalid msg type */ - case RD_AP_MODIFIED : /* 041 message stream modified */ - case RD_AP_ORDER : /* 042 message out of order */ - case RD_AP_UNAUTHOR : /* 043 unauthorized request */ - /* no extra error msg */ - break; - case GT_PW_NULL: /* 51 Current PW is null */ - case GT_PW_BADPW: /* 52 Incorrect current password */ - case GT_PW_PROT: /* 53 Protocol Error */ - case GT_PW_KDCERR: /* 54 Error returned by KDC */ - case GT_PW_NULLTKT: /* 55 Null tkt returned by KDC */ - /* no error msg yet */ - break; - - /* Values returned by send_to_kdc */ - case SKDC_RETRY : /* 56 Retry count exceeded */ - case SKDC_CANT : /* 57 Can't send request */ - com_err_msg = "Cannot contact the kerberos server for the selected realm."; - break; - /* no error message on purpose: */ - case INTK_BADPW : /* 062 Incorrect password */ - break; - default: - /* no extra error msg */ - break; - } - else - switch(code) - { - case KADM_INSECURE_PW: - /* if( kadm_info != NULL ){ - * wsprintf(buf, "%s\n%s", com_err_msg, kadm_info); - * } else { - * wsprintf(buf, "%s\nPlease see the help file for information " - * "about secure passwords.", com_err_msg); - * } - * com_err_msg = buf; - */ - - /* The above code would be preferred since it allows site specific - * information to be delivered from the Kerberos server. However the - * message box is too small for VGA screens. - * It does work well if we only have to support 1024x768 - */ - - com_err_msg = "You have entered an insecure or weak password."; - - default: - /* no extra error msg */ - break; - } - if(com_err_msg != buf) { - StringCbCopyA(buf, len, com_err_msg); - } - cp = buf + strlen(buf); - *cp++ = '\n'; - switch(table_num) { - case krb_err_base: - etype = "Kerberos"; - break; - case kadm_err_base: - etype = "Kerberos supplemental"; - break; - default: - etype = Lerror_table_name(table_num); - break; - } - StringCbPrintfA((LPSTR) cp, len - (cp-buf), (LPSTR) "(%s error %d" -#ifdef DEBUG_COM_ERR - " (absolute error %ld)" -#endif - ")", etype, offset - //")\nPress F1 for help on this error.", etype, offset -#ifdef DEBUG_COM_ERR - , code -#endif - ); - - return (LPSTR)buf; -} diff --git a/src/windows/identity/plugins/krb4/errorfuncs.h b/src/windows/identity/plugins/krb4/errorfuncs.h deleted file mode 100644 index 0d4d75f1e..000000000 --- a/src/windows/identity/plugins/krb4/errorfuncs.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_ERR_H -#define __KHIMAIRA_ERR_H - -/* All error handling and reporting related functions for the krb4/5 - and AFS plugins */ - -#include <errno.h> -#include <com_err.h> -/* - * This is a hack needed because the real com_err.h does - * not define err_func. We need it in the case where - * we pull in the real com_err instead of the krb4 - * impostor. - */ -#ifndef _DCNS_MIT_COM_ERR_H -typedef LPSTR (*err_func)(int, long); -#endif - -#include <krberr.h> -#include <kadm_err.h> - -#define kadm_err_base ERROR_TABLE_BASE_kadm - -#include <stdarg.h> - -#ifndef KRBERR -#define KRBERR(code) (code + krb_err_base) -#endif - -LPSTR err_describe(LPSTR buf, size_t len, long code); - - -/* */ -khm_int32 init_error_funcs(); - -khm_int32 exit_error_funcs(); - - -#endif diff --git a/src/windows/identity/plugins/krb4/images/plugin.ico b/src/windows/identity/plugins/krb4/images/plugin.ico deleted file mode 100644 index 791b359694d86dcdc85bd083d502db8056283771..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7278 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 Fe*s!^o~Hl+ diff --git a/src/windows/identity/plugins/krb4/krb4configdlg.c b/src/windows/identity/plugins/krb4/krb4configdlg.c deleted file mode 100644 index f13f9ad9e..000000000 --- a/src/windows/identity/plugins/krb4/krb4configdlg.c +++ /dev/null @@ -1,555 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<krbcred.h> -#include<kherror.h> -#include<khuidefs.h> -#include<strsafe.h> -#include<assert.h> - -typedef struct tag_k4_ids_data { - khui_config_init_data cfg; - - khm_int32 get_tix; -} k4_ids_data; - -static void -k4_ids_read_params(k4_ids_data * d) { - khm_int32 t; -#ifdef DEBUG - assert(csp_params); -#endif - - t = 1; - khc_read_int32(csp_params, L"Krb4NewCreds", &t); - d->get_tix = !!t; -} - -static void -k4_ids_write_params(HWND hw, k4_ids_data * d) { - khm_int32 nv; - khm_boolean applied = FALSE; - - if (IsDlgButtonChecked(hw, IDC_CFG_GETTIX) == BST_CHECKED) - nv = TRUE; - else - nv = FALSE; - - if (!!nv != !!d->get_tix) { - d->get_tix = !!nv; - khc_write_int32(csp_params, L"Krb4NewCreds", d->get_tix); - applied = TRUE; - } - - khui_cfg_set_flags_inst(&d->cfg, - (applied)?KHUI_CNFLAG_APPLIED:0, - KHUI_CNFLAG_APPLIED | KHUI_CNFLAG_MODIFIED); -} - -static void -k4_ids_check_mod(HWND hw, k4_ids_data * d) { - khm_int32 nv; - - if (IsDlgButtonChecked(hw, IDC_CFG_GETTIX) == BST_CHECKED) - nv = TRUE; - else - nv = FALSE; - - khui_cfg_set_flags_inst(&d->cfg, - (!!nv != !!d->get_tix)? KHUI_CNFLAG_MODIFIED: 0, - KHUI_CNFLAG_MODIFIED); -} - -INT_PTR CALLBACK -krb4_ids_config_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - k4_ids_data * d; - - switch(uMsg) { - case WM_INITDIALOG: - d = PMALLOC(sizeof(*d)); - ZeroMemory(d, sizeof(*d)); - - d->cfg = *((khui_config_init_data *) lParam); - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) d); -#pragma warning(pop) - - k4_ids_read_params(d); - - CheckDlgButton(hwnd, IDC_CFG_GETTIX, - (d->get_tix)? BST_CHECKED: BST_UNCHECKED); - - break; - - case WM_COMMAND: - d = (k4_ids_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - break; - - if (HIWORD(wParam) == BN_CLICKED) { - k4_ids_check_mod(hwnd, d); - } - break; - - case KHUI_WM_CFG_NOTIFY: - d = (k4_ids_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - break; - - if (HIWORD(wParam) == WMCFG_APPLY) { - k4_ids_write_params(hwnd, d); - } - break; - - case WM_DESTROY: - d = (k4_ids_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d) { - PFREE(d); - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) 0); - } - - break; - } - - return FALSE; -} - -typedef struct tag_k4_id_data { - khui_config_init_data cfg; - khm_int32 gettix; /* get tickets? */ - khm_boolean is_default_ident; -} k4_id_data; - -void -k4_id_read_params(k4_id_data * d) { - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - khm_size cb; - khm_handle ident = NULL; - khm_handle csp_ident = NULL; - khm_handle csp_idk4 = NULL; - khm_int32 flags = 0; - khm_int32 t; - - khc_read_int32(csp_params, L"Krb4NewCreds", &d->gettix); - - *idname = 0; - cb = sizeof(idname); - khui_cfg_get_name(d->cfg.ctx_node, idname, &cb); - - kcdb_identity_create(idname, 0, &ident); - - if (ident == NULL) { - d->gettix = 0; - goto done; - } - - kcdb_identity_get_flags(ident, &flags); - - if (!(flags & KCDB_IDENT_FLAG_DEFAULT)) { - d->gettix = 0; - goto done; - } - - d->is_default_ident = TRUE; - - if (d->gettix == 0) - goto done; - - if (KHM_FAILED(kcdb_identity_get_config(ident, 0, &csp_ident))) - goto done; - - if (KHM_FAILED(khc_open_space(csp_ident, CSNAME_KRB4CRED, - 0, &csp_idk4))) - goto close_config; - - if (KHM_SUCCEEDED(khc_read_int32(csp_idk4, L"Krb4NewCreds", &t)) && - !t) - d->gettix = 1; - - close_config: - if (csp_ident) - khc_close_space(csp_ident); - - if (csp_idk4) - khc_close_space(csp_idk4); - - done: - if (ident) - kcdb_identity_release(ident); - - return; -} - -khm_boolean -k4_id_write_params(HWND hwnd, k4_id_data * d) { - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - khm_size cb_idname = sizeof(idname); - khm_handle ident = NULL; - khm_int32 flags = 0; - khm_handle csp_ident = NULL; - khm_handle csp_idk4 = NULL; - khm_int32 gettix = 0; - khm_boolean applied = FALSE; - - khui_cfg_get_name(d->cfg.ctx_node, idname, &cb_idname); - - kcdb_identity_create(idname, 0, &ident); - - if (ident == NULL) - return FALSE; - - kcdb_identity_get_flags(ident, &flags); - - if (!(flags & KCDB_IDENT_FLAG_DEFAULT)) - goto done_apply; - - if (IsDlgButtonChecked(hwnd, IDC_CFG_GETTIX) == BST_CHECKED) - gettix = TRUE; - - if (KHM_FAILED(kcdb_identity_get_config(ident, KHM_FLAG_CREATE, - &csp_ident))) - goto done_apply; - - if (KHM_FAILED(khc_open_space(csp_ident, CSNAME_KRB4CRED, - KHM_FLAG_CREATE | KCONF_FLAG_WRITEIFMOD, - &csp_idk4))) - goto done_apply; - - khc_write_int32(csp_idk4, L"Krb4NewCreds", gettix); - - applied = TRUE; - - done_apply: - if (ident) - kcdb_identity_release(ident); - - if (csp_ident) - khc_close_space(csp_ident); - - if (csp_idk4) - khc_close_space(csp_idk4); - - return applied; -} - -INT_PTR CALLBACK -krb4_id_config_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - switch(uMsg) { - case WM_INITDIALOG: - { - k4_id_data * d; - - d = PMALLOC(sizeof(k4_id_data)); - - if (!d) - break; - - ZeroMemory(d, sizeof(*d)); - - d->cfg = *((khui_config_init_data *) lParam); - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) d); -#pragma warning(pop) - - k4_id_read_params(d); - - CheckDlgButton(hwnd, IDC_CFG_GETTIX, - (d->gettix)?BST_CHECKED: BST_UNCHECKED); - EnableWindow(GetDlgItem(hwnd, IDC_CFG_GETTIX), - d->is_default_ident); - - } - break; - - case WM_COMMAND: - { - k4_id_data * d; - - d = (k4_id_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - break; - - if (wParam == MAKEWPARAM(IDC_CFG_GETTIX, - BN_CLICKED)) { - int gettix = 0; - int modified = 0; - - gettix = (IsDlgButtonChecked(hwnd, IDC_CFG_GETTIX) == - BST_CHECKED); - - modified = (!!gettix != !!d->gettix); - - khui_cfg_set_flags_inst(&d->cfg, - ((modified)?KHUI_CNFLAG_MODIFIED: 0), - KHUI_CNFLAG_MODIFIED); - } - } - break; - - case KHUI_WM_CFG_NOTIFY: - { - k4_id_data * d; - - d = (k4_id_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - break; - - if (HIWORD(wParam) == WMCFG_APPLY) { - khm_int32 applied; - - applied = k4_id_write_params(hwnd, d); - - khui_cfg_set_flags_inst(&d->cfg, - ((applied)? KHUI_CNFLAG_APPLIED: 0), - (KHUI_CNFLAG_APPLIED | KHUI_CNFLAG_MODIFIED)); - } - } - break; - - case WM_DESTROY: - { - k4_id_data * d; - - d = (k4_id_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - break; - - PFREE(d); - - SetWindowLongPtr(hwnd, DWLP_USER, 0); - } - break; - } - - return FALSE; -} - -typedef struct tag_k4_config_dlg_data { - khui_config_node node; - char krb_path[MAX_PATH]; - char krbrealm_path[MAX_PATH]; - char tkt_string[MAX_PATH]; -} k4_config_dlg_data; - -INT_PTR CALLBACK -krb4_confg_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - - static BOOL in_init = FALSE; - k4_config_dlg_data * d; - - switch(uMsg) { - case WM_INITDIALOG: - { - wchar_t wbuf[MAX_PATH]; - CHAR krb_path[MAX_PATH]; - CHAR krbrealm_path[MAX_PATH]; - CHAR ticketName[MAX_PATH]; - char * pticketName; - size_t krb_path_sz = sizeof(krb_path); - size_t krbrealm_path_sz = sizeof(krbrealm_path); - khm_size cbsize; - - d = PMALLOC(sizeof(*d)); - ZeroMemory(d, sizeof(*d)); - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) d); -#pragma warning(pop) - - d->node = (khui_config_node) lParam; - - in_init = TRUE; - - // Set KRB.CON - memset(krb_path, '\0', sizeof(krb_path)); - if (!pkrb_get_krbconf2(krb_path, &krb_path_sz)) { - // Error has happened - } else { // normal find - AnsiStrToUnicode(wbuf, sizeof(wbuf), krb_path); - SetDlgItemText(hwnd, IDC_CFG_CFGPATH, wbuf); - StringCbCopyA(d->krb_path, sizeof(d->krb_path), krb_path); - } - - // Set KRBREALM.CON - memset(krbrealm_path, '\0', sizeof(krbrealm_path)); - if (!pkrb_get_krbrealm2(krbrealm_path, &krbrealm_path_sz)) { - // Error has happened - } else { - AnsiStrToUnicode(wbuf, sizeof(wbuf), krbrealm_path); - SetDlgItemText(hwnd, IDC_CFG_RLMPATH, wbuf); - StringCbCopyA(d->krbrealm_path, sizeof(d->krbrealm_path), - krbrealm_path); - } - - cbsize = sizeof(wbuf); - if (KHM_SUCCEEDED(khc_read_string(csp_params, L"TktString", - wbuf, &cbsize)) && - wbuf[0] != L'\0') { - - UnicodeStrToAnsi(ticketName, sizeof(ticketName), wbuf); - - } else { - - // Set TICKET.KRB file Editbox - *ticketName = 0; - pkrb_set_tkt_string(0); - - pticketName = ptkt_string(); - if (pticketName) - StringCbCopyA(ticketName, sizeof(ticketName), pticketName); - - } - - if (!*ticketName) { - // error - } else { - AnsiStrToUnicode(wbuf, sizeof(wbuf), ticketName); - SetDlgItemText(hwnd, IDC_CFG_CACHE, wbuf); - StringCbCopyA(d->tkt_string, sizeof(d->tkt_string), - ticketName); - } - - in_init = FALSE; - - } - break; - - case WM_COMMAND: - if (MAKEWPARAM(IDC_CFG_CACHE, EN_CHANGE)) { - char tkt_string[MAX_PATH]; - wchar_t wtkt_string[MAX_PATH]; - - if (in_init) { - return TRUE; - } - - d = (k4_config_dlg_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - return TRUE; - - tkt_string[0] = 0; - wtkt_string[0] = 0; - - GetDlgItemText(hwnd, IDC_CFG_CACHE, - wtkt_string, ARRAYLENGTH(wtkt_string)); - UnicodeStrToAnsi(tkt_string, sizeof(tkt_string), - wtkt_string); - - if (_stricmp(tkt_string, d->tkt_string)) { - khui_cfg_set_flags(d->node, - KHUI_CNFLAG_MODIFIED, - KHUI_CNFLAG_MODIFIED); - } else { - khui_cfg_set_flags(d->node, - 0, - KHUI_CNFLAG_MODIFIED); - } - - return TRUE; - } - break; - - case KHUI_WM_CFG_NOTIFY: - if (HIWORD(wParam) == WMCFG_APPLY) { - wchar_t wtkt_string[MAX_PATH]; - char tkt_string[MAX_PATH]; - int t; - - d = (k4_config_dlg_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - return TRUE; - - t = GetDlgItemText(hwnd, IDC_CFG_CACHE, - wtkt_string, ARRAYLENGTH(wtkt_string)); - if (t == 0) - return TRUE; - - UnicodeStrToAnsi(tkt_string, sizeof(tkt_string), wtkt_string); - - if (_stricmp(tkt_string, d->tkt_string)) { - - pkrb_set_tkt_string(tkt_string); - - khc_write_string(csp_params, L"TktString", wtkt_string); - - khui_cfg_set_flags(d->node, - KHUI_CNFLAG_APPLIED, - KHUI_CNFLAG_APPLIED | - KHUI_CNFLAG_MODIFIED); - khm_krb4_list_tickets(); - } else { - khui_cfg_set_flags(d->node, - 0, - KHUI_CNFLAG_MODIFIED); - } - - return TRUE; - } - break; - - case WM_DESTROY: - d = (k4_config_dlg_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d) { - PFREE(d); - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) 0); - } - - break; - } - return FALSE; -} diff --git a/src/windows/identity/plugins/krb4/krb4funcs.c b/src/windows/identity/plugins/krb4/krb4funcs.c deleted file mode 100644 index 33a94996e..000000000 --- a/src/windows/identity/plugins/krb4/krb4funcs.c +++ /dev/null @@ -1,897 +0,0 @@ -/* -* Copyright (c) 2005 Massachusetts Institute of Technology -* -* 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$ */ - -/* Originally this was krb5routines.c in Leash sources. Subsequently -modified and adapted for NetIDMgr */ - -#include<krbcred.h> -#include<kherror.h> - -#define SECURITY_WIN32 -#include <security.h> - -#include <string.h> -#include <time.h> -#include <assert.h> -#include <strsafe.h> - - - -int com_addr(void) -{ - long ipAddr; - char loc_addr[ADDR_SZ]; - CREDENTIALS cred; - char service[40]; - char instance[40]; - // char addr[40]; - char realm[40]; - struct in_addr LocAddr; - int k_errno; - - if (pkrb_get_cred == NULL) - return(KSUCCESS); - - k_errno = (*pkrb_get_cred)(service,instance,realm,&cred); - if (k_errno) - return KRBERR(k_errno); - - while(1) { - ipAddr = (*pLocalHostAddr)(); - LocAddr.s_addr = ipAddr; - StringCbCopyA(loc_addr, sizeof(loc_addr), inet_ntoa(LocAddr)); - if ( strcmp(cred.address,loc_addr) != 0) { - /* TODO: do something about this */ - //Leash_kdestroy (); - break; - } - break; - } // while() - return 0; -} - - -long -khm_krb4_list_tickets(void) -{ - char ptktname[MAX_PATH + 5]; - char pname[ANAME_SZ]; - char pinst[INST_SZ]; - char prealm[REALM_SZ]; - wchar_t wbuf[256]; - int k_errno = 0; - CREDENTIALS c; - int newtickets = 0; - int open = 0; - khm_handle ident = NULL; - khm_handle cred = NULL; - time_t tt; - FILETIME ft; - - kcdb_credset_flush(krb4_credset); - - // Since krb_get_tf_realm will return a ticket_file error, - // we will call tf_init and tf_close first to filter out - // things like no ticket file. Otherwise, the error that - // the user would see would be - // klist: can't find realm of ticket file: No ticket file (tf_util) - // instead of klist: No ticket file (tf_util) - if (ptf_init == NULL) - goto collect; - - com_addr(); - - // Open ticket file - if ((k_errno = (*ptf_init)((*ptkt_string)(), R_TKT_FIL))) - { - goto cleanup; - } - // Close ticket file - (void) (*ptf_close)(); - - // We must find the realm of the ticket file here before calling - // tf_init because since the realm of the ticket file is not - // really stored in the principal section of the file, the - // routine we use must itself call tf_init and tf_close. - - if ((k_errno = (*pkrb_get_tf_realm)((*ptkt_string)(), prealm)) != KSUCCESS) - { - goto cleanup; - } - - // Open ticket file - if (k_errno = (*ptf_init)((*ptkt_string)(), R_TKT_FIL)) - { - goto cleanup; - } - - StringCchCopyA(ptktname, ARRAYLENGTH(ptktname), (*ptkt_string)()); - - open = 1; - - // Get principal name and instance - if ((k_errno = (*ptf_get_pname)(pname)) || (k_errno = (*ptf_get_pinst)(pinst))) - { - goto cleanup; - } - - // You may think that this is the obvious place to get the - // realm of the ticket file, but it can't be done here as the - // routine to do this must open the ticket file. This is why - // it was done before tf_init. - StringCbPrintf(wbuf, sizeof(wbuf), L"%S%S%S%S%S", (LPSTR)pname, - (LPSTR)(pinst[0] ? "." : ""), (LPSTR)pinst, - (LPSTR)(prealm[0] ? "@" : ""), (LPSTR)prealm); - - if(KHM_FAILED(kcdb_identity_create(wbuf, KCDB_IDENT_FLAG_CREATE, &ident))) - { - goto cleanup; - } - - // Get KRB4 tickets - while ((k_errno = (*ptf_get_cred)(&c)) == KSUCCESS) - { - StringCbPrintf(wbuf, sizeof(wbuf), L"%S%S%S%S%S", - c.service, - (c.instance[0] ? "." : ""), - c.instance, - (c.realm[0] ? "@" : ""), - c.realm); - - if(KHM_FAILED(kcdb_cred_create(wbuf, ident, credtype_id_krb4, &cred))) - continue; - - tt = c.issue_date + c.lifetime * 5L * 60L; - TimetToFileTime(tt, &ft); - kcdb_cred_set_attr(cred, KCDB_ATTR_EXPIRE, &ft, sizeof(ft)); - - tt = c.issue_date; - TimetToFileTime(tt, &ft); - kcdb_cred_set_attr(cred, KCDB_ATTR_ISSUE, &ft, sizeof(ft)); - - tt = c.lifetime * 5L * 60L; - TimetToFileTimeInterval(tt, &ft); - kcdb_cred_set_attr(cred, KCDB_ATTR_LIFETIME, &ft, sizeof(ft)); - - AnsiStrToUnicode(wbuf, sizeof(wbuf), ptktname); - kcdb_cred_set_attr(cred, KCDB_ATTR_LOCATION, wbuf, KCDB_CBSIZE_AUTO); - - kcdb_credset_add_cred(krb4_credset, cred, -1); - - kcdb_cred_release(cred); - } // while - - cleanup: - if (ptf_close == NULL) - return(KSUCCESS); - - if (open) - (*ptf_close)(); //close ticket file - - if (k_errno == EOF) - k_errno = 0; - - // XXX the if statement directly below was inserted to eliminate - // an error NO_TKT_FIL on Leash startup. The error occurs from an - // error number thrown from krb_get_tf_realm. We believe this - // change does not eliminate other errors, but it may. - - if (k_errno == NO_TKT_FIL) - k_errno = 0; - - if(ident) - kcdb_identity_release(ident); - -#if 0 - /*TODO: Handle errors here */ - if (k_errno) - { - CHAR message[256]; - CHAR errBuf[256]; - LPCSTR errText; - - if (!Lerror_message) - return -1; - - errText = err_describe(errBuf, KRBERR(k_errno)); - - sprintf(message, "%s\n\n%s failed", errText, functionName); - MessageBox(NULL, message, "Kerberos Four", - MB_OK | MB_ICONERROR | MB_TASKMODAL | MB_SETFOREGROUND); - } -#endif - - collect: - kcdb_credset_collect(NULL, krb4_credset, ident, credtype_id_krb4, NULL); - - return k_errno; -} - -#define KRB_FILE "KRB.CON" -#define KRBREALM_FILE "KRBREALM.CON" -#define KRB5_FILE "KRB5.INI" - -BOOL -khm_krb5_get_profile_file(LPSTR confname, UINT szConfname) -{ - char **configFile = NULL; - if (pkrb5_get_default_config_files(&configFile)) - { - GetWindowsDirectoryA(confname,szConfname); - confname[szConfname-1] = '\0'; - - StringCchCatA(confname, szConfname, "\\"); - StringCchCatA(confname, szConfname, KRB5_FILE); - - return FALSE; - } - - *confname = 0; - - if (configFile) - { - StringCchCopyA(confname, szConfname, *configFile); - pkrb5_free_config_files(configFile); - } - - if (!*confname) - { - GetWindowsDirectoryA(confname,szConfname); - confname[szConfname-1] = '\0'; - - StringCchCatA(confname, szConfname, "\\"); - StringCchCatA(confname, szConfname, KRB5_FILE); - } - - return FALSE; -} - -BOOL -khm_get_krb4_con_file(LPSTR confname, UINT szConfname) -{ - if (hKrb5 && !hKrb4) { - // hold krb.con where krb5.ini is located - CHAR krbConFile[MAX_PATH]=""; - LPSTR pFind; - - if (khm_krb5_get_profile_file(krbConFile, sizeof(krbConFile))) { - GetWindowsDirectoryA(krbConFile,sizeof(krbConFile)); - krbConFile[MAX_PATH-1] = '\0'; - - StringCbCatA(krbConFile, sizeof(krbConFile), "\\"); - } - - pFind = strrchr(krbConFile, '\\'); - - if (pFind) { - *pFind = '\0'; - - StringCbCatA(krbConFile, sizeof(krbConFile), "\\"); - StringCbCatA(krbConFile, sizeof(krbConFile), KRB_FILE); - } else { - krbConFile[0] = '\0'; - } - - StringCchCopyA(confname, szConfname, krbConFile); - } else if (hKrb4) { - size_t size = szConfname; - memset(confname, '\0', szConfname); - if (!pkrb_get_krbconf2(confname, &size)) { - GetWindowsDirectoryA(confname,szConfname); - confname[szConfname-1] = '\0'; - StringCchCatA(confname, szConfname, "\\"); - StringCchCatA(confname, szConfname, KRB_FILE); - } - } - - return FALSE; -} - -int -readstring(FILE * file, char * buf, int len) -{ - int c,i; - memset(buf, '\0', sizeof(buf)); - for (i=0, c=fgetc(file); c != EOF ; c=fgetc(file), i++) - { - if (i < sizeof(buf)) { - if (c == '\n') { - buf[i] = '\0'; - return i; - } else { - buf[i] = (char)c; - } - } else { - if (c == '\n') { - buf[len-1] = '\0'; - return(i); - } - } - } - if (c == EOF) { - if (i > 0 && i < len) { - buf[i] = '\0'; - return(i); - } else { - buf[len-1] = '\0'; - return(-1); - } - } - return(-1); -} - -/*! \internal - \brief Return a list of configured realms - - The string that is returned is a set of null terminated unicode strings, - each of which denotes one realm. The set is terminated by a zero length - null terminated string. - - The caller should free the returned string using free() - - \return The string with the list of realms or NULL if the operation fails. -*/ -wchar_t * khm_krb5_get_realm_list(void) -{ - wchar_t * rlist = NULL; - - if (pprofile_get_subsection_names && pprofile_free_list) { - const char* rootSection[] = {"realms", NULL}; - const char** rootsec = rootSection; - char **sections = NULL, **cpp = NULL, *value = NULL; - - char krb5_conf[MAX_PATH+1]; - - if (!khm_krb5_get_profile_file(krb5_conf,sizeof(krb5_conf))) { - profile_t profile; - long retval; - const char *filenames[2]; - wchar_t * d; - size_t cbsize; - size_t t; - - filenames[0] = krb5_conf; - filenames[1] = NULL; - retval = pprofile_init(filenames, &profile); - if (!retval) { - retval = pprofile_get_subsection_names(profile, rootsec, &sections); - - if (!retval) - { - /* first figure out how much space to allocate */ - cbsize = 0; - for (cpp = sections; *cpp; cpp++) - { - cbsize += sizeof(wchar_t) * (strlen(*cpp) + 1); - } - cbsize += sizeof(wchar_t); /* double null terminated */ - - rlist = PMALLOC(cbsize); - d = rlist; - for (cpp = sections; *cpp; cpp++) - { - AnsiStrToUnicode(d, cbsize, *cpp); - t = wcslen(d) + 1; - d += t; - cbsize -= sizeof(wchar_t) * t; - } - *d = L'\0'; - } - - pprofile_free_list(sections); - -#if 0 - retval = pprofile_get_string(profile, "libdefaults","noaddresses", 0, "true", &value); - if ( value ) { - disable_noaddresses = config_boolean_to_int(value); - pprofile_release_string(value); - } -#endif - pprofile_release(profile); - } - } - } else { - FILE * file; - char krb_conf[MAX_PATH+1]; - char * p; - size_t cbsize, t; - wchar_t * d; - - if (!khm_get_krb4_con_file(krb_conf,sizeof(krb_conf)) && -#if _MSC_VER >= 1400 - !fopen_s(&file, krb_conf, "rt") -#else - (file = fopen(krb_conf, "rt")) -#endif - ) - { - char lineBuf[256]; - - /*TODO: compute the actual required buffer size instead of hardcoding */ - cbsize = 16384; // arbitrary - rlist = PMALLOC(cbsize); - d = rlist; - - // Skip the default realm - readstring(file,lineBuf,sizeof(lineBuf)); - - // Read the defined realms - while (TRUE) - { - if (readstring(file,lineBuf,sizeof(lineBuf)) < 0) - break; - - if (*(lineBuf + strlen(lineBuf) - 1) == '\r') - *(lineBuf + strlen(lineBuf) - 1) = 0; - - for (p=lineBuf; *p ; p++) - { - if (isspace(*p)) { - *p = 0; - break; - } - } - - if ( strncmp(".KERBEROS.OPTION.",lineBuf,17) ) { - t = strlen(lineBuf) + 1; - if(cbsize > (1 + t*sizeof(wchar_t))) { - AnsiStrToUnicode(d, cbsize, lineBuf); - d += t; - cbsize -= t * sizeof(wchar_t); - } else - break; - } - } - - *d = L'\0'; - - fclose(file); - } - } - - return rlist; -} - -/*! \internal - \brief Get the default realm - - A string will be returned that specifies the default realm. The caller - should free the string using free(). - - Returns NULL if the operation fails. -*/ -wchar_t * khm_krb5_get_default_realm(void) -{ - wchar_t * realm; - size_t cch; - krb5_context ctx=0; - char * def = 0; - - pkrb5_init_context(&ctx); - pkrb5_get_default_realm(ctx,&def); - - if (def) { - cch = strlen(def) + 1; - realm = PMALLOC(sizeof(wchar_t) * cch); - AnsiStrToUnicode(realm, sizeof(wchar_t) * cch, def); - pkrb5_free_default_realm(ctx, def); - } else - realm = NULL; - - pkrb5_free_context(ctx); - - return realm; -} - -static -char * -make_postfix(const char * base, - const char * postfix, - char ** rcopy) -{ - size_t base_size; - size_t ret_size; - char * copy = 0; - char * ret = 0; - size_t t; - - if (FAILED(StringCbLengthA(base, STRSAFE_MAX_CCH * sizeof(char), &t))) - goto cleanup; - - base_size = t + 1; - - if (FAILED(StringCbLengthA(postfix, STRSAFE_MAX_CCH * sizeof(char), &t))) - goto cleanup; - - ret_size = base_size + t + 1; - - copy = malloc(base_size); - ret = malloc(ret_size); - - if (!copy || !ret) - goto cleanup; - - StringCbCopyNA(copy, base_size, base, base_size); - StringCbCopyNA(ret, ret_size, base, base_size); - StringCbCopyNA(ret + (base_size - 1), ret_size - (base_size - 1), - postfix, ret_size - (base_size - 1)); - - cleanup: - if (!copy || !ret) { - if (copy) - free(copy); - if (ret) - free(ret); - copy = ret = 0; - } - // INVARIANT: (ret ==> copy) && (copy ==> ret) - *rcopy = copy; - return ret; -} - -void -khm_krb4_set_def_tkt_string(void) { - wchar_t wtkt_string[MAX_PATH]; - char tkt_string[MAX_PATH]; - khm_size cb; - - cb = sizeof(wtkt_string); - - if (KHM_FAILED(khc_read_string(csp_params, L"TktString", - wtkt_string, &cb)) || - wtkt_string[0] == L'\0') { - - pkrb_set_tkt_string(0); - - } else { - - UnicodeStrToAnsi(tkt_string, sizeof(tkt_string), - wtkt_string); - pkrb_set_tkt_string(tkt_string); - } -} - - -static -long -make_temp_cache_v4(const char * postfix) -{ - static char * old_cache = 0; - - if (!pkrb_set_tkt_string || !ptkt_string || !pdest_tkt) - return 0; // XXX - is this appropriate? - - if (old_cache) { - pdest_tkt(); - pkrb_set_tkt_string(old_cache); - free(old_cache); - old_cache = 0; - } - - if (postfix) - { - char * tmp_cache = make_postfix(ptkt_string(), postfix, &old_cache); - - if (!tmp_cache) - return KFAILURE; - - pkrb_set_tkt_string(tmp_cache); - free(tmp_cache); - } - return 0; -} - -long -khm_krb4_changepwd(char * principal, - char * password, - char * newpassword, - char** error_str) -{ - long k_errno; - - if (!pkrb_set_tkt_string || !ptkt_string || !pkadm_change_your_password || - !pdest_tkt) - return KFAILURE; - - k_errno = make_temp_cache_v4("_chgpwd"); - if (k_errno) return k_errno; - k_errno = pkadm_change_your_password(principal, password, newpassword, - error_str); - make_temp_cache_v4(0); - return k_errno; -} - -struct tgt_filter_data { - khm_handle identity; - wchar_t realm[KCDB_IDENT_MAXCCH_NAME]; -}; - -khm_int32 KHMAPI -krb4_tgt_filter(khm_handle cred, khm_int32 flags, void * rock) { - struct tgt_filter_data * pdata; - wchar_t credname[KCDB_MAXCCH_NAME]; - wchar_t * t; - khm_size cb; - khm_int32 ctype; - - pdata = (struct tgt_filter_data *) rock; - cb = sizeof(credname); - - if (KHM_FAILED(kcdb_cred_get_type(cred, &ctype)) || - ctype != credtype_id_krb4) - return 0; - - if (KHM_FAILED(kcdb_cred_get_name(cred, credname, &cb))) - return 0; - - if (wcsncmp(credname, L"krbtgt.", 7)) - return 0; - - t = wcsrchr(credname, L'@'); - if (t == NULL) - return 0; - - if (wcscmp(t+1, pdata->realm)) - return 0; - - return 1; -} - -khm_handle -khm_krb4_find_tgt(khm_handle credset, khm_handle identity) { - khm_handle result = NULL; - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - wchar_t * t; - khm_size cb; - struct tgt_filter_data filter_data; - - cb = sizeof(idname); - - if (KHM_FAILED(kcdb_identity_get_name(identity, - idname, - &cb))) - return NULL; - - t = wcsrchr(idname, L'@'); - if (t == NULL) - return NULL; - - StringCbCopy(filter_data.realm, sizeof(filter_data.realm), - t + 1); - filter_data.identity = identity; - - if (KHM_FAILED(kcdb_credset_find_filtered(credset, - -1, - krb4_tgt_filter, - &filter_data, - &result, - NULL))) - return NULL; - else - return result; -} - -long -khm_convert524(khm_handle identity) -{ -#ifdef NO_KRB5 - return(0); -#else - krb5_context ctx = 0; - krb5_error_code code = 0; - int icode = 0; - krb5_principal me = 0; - krb5_principal server = 0; - krb5_creds *v5creds = 0; - krb5_creds increds; - krb5_ccache cc = 0; - CREDENTIALS * v4creds = NULL; - static int init_ets = 1; - - if (!pkrb5_init_context || - !pkrb_in_tkt || - !pkrb524_init_ets || - !pkrb524_convert_creds_kdc) - return 0; - - v4creds = (CREDENTIALS *) malloc(sizeof(CREDENTIALS)); - memset((char *) v4creds, 0, sizeof(CREDENTIALS)); - - memset((char *) &increds, 0, sizeof(increds)); - /* - From this point on, we can goto cleanup because increds is - initialized. - */ - - code = khm_krb5_initialize(identity, &ctx, &cc); - if (code) - goto cleanup; - - if ( init_ets ) { - pkrb524_init_ets(ctx); - init_ets = 0; - } - - if (code = pkrb5_cc_get_principal(ctx, cc, &me)) - goto cleanup; - - if ((code = pkrb5_build_principal(ctx, - &server, - krb5_princ_realm(ctx, me)->length, - krb5_princ_realm(ctx, me)->data, - "krbtgt", - krb5_princ_realm(ctx, me)->data, - NULL))) { - goto cleanup; - } - - increds.client = me; - increds.server = server; - increds.times.endtime = 0; - increds.keyblock.enctype = ENCTYPE_DES_CBC_CRC; - if ((code = pkrb5_get_credentials(ctx, 0, - cc, - &increds, - &v5creds))) { - goto cleanup; - } - - if ((icode = pkrb524_convert_creds_kdc(ctx, - v5creds, - v4creds))) { - goto cleanup; - } - - /* initialize ticket cache */ - if ((icode = pkrb_in_tkt(v4creds->pname, v4creds->pinst, v4creds->realm) - != KSUCCESS)) { - goto cleanup; - } - - /* stash ticket, session key, etc. for future use */ - if ((icode = pkrb_save_credentials(v4creds->service, - v4creds->instance, - v4creds->realm, - v4creds->session, - v4creds->lifetime, - v4creds->kvno, - &(v4creds->ticket_st), - v4creds->issue_date))) { - goto cleanup; - } - - cleanup: - memset(v4creds, 0, sizeof(v4creds)); - free(v4creds); - - if (v5creds) { - pkrb5_free_creds(ctx, v5creds); - } - if (increds.client == me) - me = 0; - if (increds.server == server) - server = 0; - - if (ctx) - pkrb5_free_cred_contents(ctx, &increds); - - if (server) { - pkrb5_free_principal(ctx, server); - } - - if (me) { - pkrb5_free_principal(ctx, me); - } - - if (ctx && cc) - pkrb5_cc_close(ctx, cc); - - if (ctx) { - pkrb5_free_context(ctx); - } - - return (code || icode); -#endif /* NO_KRB5 */ -} - -long -khm_krb4_kinit(char * aname, - char * inst, - char * realm, - long lifetime, - char * password) { - - wchar_t * functionName = NULL; - wchar_t * err_context = NULL; - int rc4 = 0; - int msg = 0; - - if (pkname_parse == NULL) { - goto cleanup; - } - - err_context = L"getting realm"; - if (!*realm && (rc4 = (int)(*pkrb_get_lrealm)(realm, 1))) { - functionName = L"krb_get_lrealm()"; - msg = IDS_ERR_REALM; - goto cleanup; - } - - err_context = L"checking principal"; - if ((!*aname) || (!(rc4 = (int)(*pk_isname)(aname)))) { - functionName = L"krb_get_lrealm()"; - msg = IDS_ERR_PRINCIPAL; - goto cleanup; - } - - /* optional instance */ - if (!(rc4 = (int)(*pk_isinst)(inst))) { - functionName = L"k_isinst()"; - msg = IDS_ERR_INVINST; - goto cleanup; - } - - if (!(rc4 = (int)(*pk_isrealm)(realm))) { - functionName = L"k_isrealm()"; - msg = IDS_ERR_REALM; - goto cleanup; - } - - khm_krb4_set_def_tkt_string(); - - err_context = L"fetching ticket"; - rc4 = (*pkrb_get_pw_in_tkt)(aname, inst, realm, "krbtgt", realm, - lifetime, password); - - if (rc4) /* XXX: do we want: && (rc != NO_TKT_FIL) as well? */ { - functionName = L"krb_get_pw_in_tkt()"; - msg = IDS_ERR_PWINTKT; - goto cleanup; - } - - return 0; - - cleanup: - { - _report_sr0(KHERR_ERROR, msg); - _location(functionName); - } - return rc4; -} - - -int khm_krb4_kdestroy(void) { - int k_errno = 0; - - if (pdest_tkt != NULL) - { - k_errno = (*pdest_tkt)(); - if (k_errno && (k_errno != RET_TKFIL)) - return KRBERR(k_errno); - } - - return k_errno; -} diff --git a/src/windows/identity/plugins/krb4/krb4funcs.h b/src/windows/identity/plugins/krb4/krb4funcs.h deleted file mode 100644 index 1328b4136..000000000 --- a/src/windows/identity/plugins/krb4/krb4funcs.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -/* Adapted from multiple Leash header files */ - -#ifndef __KHIMAIRA_KRB5FUNCS_H -#define __KHIMAIRA_KRB5FUNCS_H - -#include<stdlib.h> -#include<krb5.h> - -#include <windows.h> -#define SECURITY_WIN32 -#include <security.h> - -#if _WIN32_WINNT < 0x0501 -#define KHM_SAVE_WIN32_WINNT _WIN32_WINNT -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0501 -#endif -#include<ntsecapi.h> -#ifdef KHM_SAVE_WIN32_WINNT -#undef _WIN32_WINNT -#define _WIN32_WINNT KHM_SAVE_WIN32_WINNT -#undef KHM_SAVE_WIN32_WINNT -#endif - -#include <krb5common.h> - -#define LEASH_DEBUG_CLASS_GENERIC 0 -#define LEASH_DEBUG_CLASS_KRB4 1 -#define LEASH_DEBUG_CLASS_KRB4_APP 2 - -#define LEASH_PRIORITY_LOW 0 -#define LEASH_PRIORITY_HIGH 1 - -#define KRB5_DEFAULT_LIFE 60*60*10 /* 10 hours */ - - -long -khm_convert524(khm_handle identity); - -long -khm_krb4_kinit(char * aname, - char * inst, - char * realm, - long lifetime, - char * password); - -long -khm_krb4_list_tickets(void); - -int khm_krb4_kdestroy(void); - -khm_handle -khm_krb4_find_tgt(khm_handle credset, - khm_handle identity); - -LONG -write_registry_setting( - char* setting, - DWORD type, - void* buffer, - size_t size - ); - -LONG -read_registry_setting_user( - char* setting, - void* buffer, - size_t size - ); - -LONG -read_registry_setting( - char* setting, - void* buffer, - size_t size - ); - -BOOL -get_STRING_from_registry( - HKEY hBaseKey, - char * key, - char * value, - char * outbuf, - DWORD outlen - ); - -BOOL -get_DWORD_from_registry( - HKEY hBaseKey, - char * key, - char * value, - DWORD * result - ); - -int -config_boolean_to_int( - const char *s - ); - -void -khm_krb4_set_def_tkt_string(void); - -wchar_t * khm_krb5_get_default_realm(void); -wchar_t * khm_krb5_get_realm_list(void); - -#endif diff --git a/src/windows/identity/plugins/krb4/krb4main.c b/src/windows/identity/plugins/krb4/krb4main.c deleted file mode 100644 index 6b1c395b2..000000000 --- a/src/windows/identity/plugins/krb4/krb4main.c +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<krbcred.h> -#include<kherror.h> - -kmm_module h_khModule; /* KMM's handle to this module */ -HINSTANCE hInstance; -HMODULE hResModule; /* HMODULE to the resource library */ - -khm_int32 type_id_enctype = -1; -khm_int32 type_id_addr_list = -1; -khm_int32 type_id_krb5_flags = -1; - -khm_int32 attr_id_key_enctype = -1; -khm_int32 attr_id_tkt_enctype = -1; -khm_int32 attr_id_addr_list = -1; -khm_int32 attr_id_krb5_flags = -1; - -khm_handle csp_plugins = NULL; -khm_handle csp_krbcred = NULL; -khm_handle csp_params = NULL; - -kmm_module_locale locales[] = { - LOCALE_DEF(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US), L"krb4cred_en_us.dll", KMM_MLOC_FLAG_DEFAULT) -}; - -int n_locales = ARRAYLENGTH(locales); - -/* These two probably should not do anything */ -void init_krb() { -} - -void exit_krb() { -} - -/* called by the NetIDMgr module manager */ -KHMEXP_EXP khm_int32 KHMAPI init_module(kmm_module h_module) { - khm_int32 rv = KHM_ERROR_SUCCESS; - kmm_plugin_reg pi; - wchar_t buf[256]; - - h_khModule = h_module; - - rv = kmm_set_locale_info(h_module, locales, n_locales); - if(KHM_SUCCEEDED(rv)) { - hResModule = kmm_get_resource_hmodule(h_module); - } else - goto _exit; - - ZeroMemory(&pi, sizeof(pi)); - pi.name = KRB4_PLUGIN_NAME; - pi.type = KHM_PITYPE_CRED; - pi.icon = LoadImage(hResModule, MAKEINTRESOURCE(IDI_PLUGIN), - IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR | LR_DEFAULTSIZE); - pi.flags = 0; - pi.msg_proc = krb4_cb; - pi.dependencies = KRB4_PLUGIN_DEPS; - pi.description = buf; - LoadString(hResModule, IDS_PLUGIN_DESC, - buf, ARRAYLENGTH(buf)); - kmm_provide_plugin(h_module, &pi); - - if(KHM_FAILED(rv = init_imports())) - goto _exit; - - if(KHM_FAILED(rv = init_error_funcs())) - goto _exit; - - rv = kmm_get_plugins_config(0, &csp_plugins); - if(KHM_FAILED(rv)) goto _exit; - - rv = khc_load_schema(csp_plugins, schema_krbconfig); - if(KHM_FAILED(rv)) goto _exit; - - rv = khc_open_space(csp_plugins, CSNAME_KRB4CRED, 0, &csp_krbcred); - if(KHM_FAILED(rv)) goto _exit; - - rv = khc_open_space(csp_krbcred, CSNAME_PARAMS, 0, &csp_params); - if(KHM_FAILED(rv)) goto _exit; - - _exit: - return rv; -} - -/* called by the NetIDMgr module manager */ -KHMEXP_EXP khm_int32 KHMAPI exit_module(kmm_module h_module) { - exit_imports(); - exit_error_funcs(); - - if(csp_params) { - khc_close_space(csp_params); - csp_params = NULL; - } - - if(csp_krbcred) { - khc_close_space(csp_krbcred); - csp_krbcred = NULL; - } - - if(csp_plugins) { - khc_unload_schema(csp_plugins, schema_krbconfig); - khc_close_space(csp_plugins); - csp_plugins = NULL; - } - - return KHM_ERROR_SUCCESS; /* the return code is ignored */ -} - -BOOL WINAPI DllMain( - HINSTANCE hinstDLL, - DWORD fdwReason, - LPVOID lpvReserved -) -{ - switch(fdwReason) { - case DLL_PROCESS_ATTACH: - hInstance = hinstDLL; - init_krb(); - break; - - case DLL_PROCESS_DETACH: - exit_krb(); - break; - - case DLL_THREAD_ATTACH: - break; - - case DLL_THREAD_DETACH: - break; - } - - return TRUE; -} diff --git a/src/windows/identity/plugins/krb4/krb4newcreds.c b/src/windows/identity/plugins/krb4/krb4newcreds.c deleted file mode 100644 index bcc3bc745..000000000 --- a/src/windows/identity/plugins/krb4/krb4newcreds.c +++ /dev/null @@ -1,884 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<krbcred.h> -#include<kherror.h> -#include<khmsgtypes.h> -#include<khuidefs.h> -#include<utils.h> -#include<commctrl.h> -#include<strsafe.h> -#include<krb5.h> -#include<assert.h> - -/* method identifiers should be contiguous */ -#define K4_METHOD_AUTO 0 -#define K4_METHOD_PASSWORD 1 -#define K4_METHOD_K524 2 - -int method_to_id[] = { - IDC_NCK4_AUTO, - IDC_NCK4_PWD, - IDC_NCK4_K524 -}; - -typedef struct tag_k4_dlg_data { - HWND hwnd; - khui_new_creds * nc; - khui_new_creds_by_type * nct; - - khm_boolean k4_enabled; - khm_int32 method; - time_t lifetime; -} k4_dlg_data; - -void k4_update_display(k4_dlg_data * d, BOOL update_methods) { - CheckDlgButton(d->hwnd, IDC_NCK4_OBTAIN, - (d->k4_enabled)?BST_CHECKED: BST_UNCHECKED); - - if (d->k4_enabled) { - EnableWindow(GetDlgItem(d->hwnd, IDC_NCK4_AUTO), TRUE); - EnableWindow(GetDlgItem(d->hwnd, IDC_NCK4_K524), TRUE); - EnableWindow(GetDlgItem(d->hwnd, IDC_NCK4_PWD ), TRUE); - } else { - EnableWindow(GetDlgItem(d->hwnd, IDC_NCK4_AUTO), FALSE); - EnableWindow(GetDlgItem(d->hwnd, IDC_NCK4_K524), FALSE); - EnableWindow(GetDlgItem(d->hwnd, IDC_NCK4_PWD ), FALSE); - } - -#ifdef DEBUG - assert(d->method >= 0 && d->method < ARRAYLENGTH(method_to_id)); -#endif - - CheckRadioButton(d->hwnd, IDC_NCK4_AUTO, IDC_NCK4_PWD, method_to_id[d->method]); - - khui_cw_enable_type(d->nc, credtype_id_krb4, d->k4_enabled); -} - -void k4_update_data(k4_dlg_data * d) { - int i; - khm_boolean oldstate; - - oldstate = d->k4_enabled; - - if (IsDlgButtonChecked(d->hwnd, IDC_NCK4_OBTAIN) == BST_CHECKED) - d->k4_enabled = TRUE; - else - d->k4_enabled = FALSE; - - if ((oldstate && !d->k4_enabled) || - (!oldstate && d->k4_enabled)) { - - khui_cw_enable_type(d->nc, credtype_id_krb4, d->k4_enabled); - } - - d->method = K4_METHOD_AUTO; - - for (i=K4_METHOD_AUTO; i<=K4_METHOD_K524; i++) { - if (IsDlgButtonChecked(d->hwnd, method_to_id[i]) == BST_CHECKED) { - d->method = i; - break; - } - } -} - -khm_boolean k4_should_identity_get_k4(khm_handle ident) { - khm_int32 idflags = 0; - khm_int32 t = TRUE; - khm_handle csp_ident = NULL; - khm_handle csp_k4 = NULL; - khm_boolean get_k4 = TRUE; - khm_boolean id_spec = FALSE; - - if (KHM_FAILED(kcdb_identity_get_flags(ident, &idflags))) - return FALSE; - - if (!(idflags & KCDB_IDENT_FLAG_DEFAULT)) { - /* we only support k4 for one identity, and that is the - default identity. If we are trying to get tickets for a - non-default identity, then we start off as disabled unless - there is no default identity. */ - - khm_handle defident = NULL; - - if (KHM_SUCCEEDED(kcdb_identity_get_default(&defident))) { - kcdb_identity_release(defident); - - return FALSE; - } - } - - if (KHM_SUCCEEDED(kcdb_identity_get_config(ident, 0, &csp_ident))) { - if (KHM_SUCCEEDED(khc_open_space(csp_ident, CSNAME_KRB4CRED, 0, - &csp_k4))) { - khm_int32 t = 0; - - if (KHM_SUCCEEDED(khc_read_int32(csp_k4, L"Krb4NewCreds", &t))) { - get_k4 = !!t; - id_spec = TRUE; - } - - khc_close_space(csp_k4); - } - khc_close_space(csp_ident); - } - - /* if there was a value specified for the identity, then that - takes precedence. */ - if (id_spec || !get_k4) - return get_k4; - - if (KHM_SUCCEEDED(khc_read_int32(csp_params, L"Krb4NewCreds", &t)) && - !t) - return FALSE; - - return TRUE; -} - -void k4_read_identity_data(k4_dlg_data * d) { - khm_handle csp_ident = NULL; - khm_handle csp_k4 = NULL; - - khm_int32 idflags = 0; - khm_int32 t; - - if (KHM_SUCCEEDED(khc_read_int32(csp_params, L"Krb4NewCreds", &t))) - d->k4_enabled = !!t; - else - d->k4_enabled = TRUE; - - if (KHM_SUCCEEDED(khc_read_int32(csp_params, L"Krb4Method", &t))) - d->method = t; - else - d->method = K4_METHOD_AUTO; - - if (KHM_SUCCEEDED(khc_read_int32(csp_params, L"DefaultLifetime", &t))) - d->lifetime = t; - else - d->lifetime = 10 * 60 * 60; /* 10 hours */ - - if (d->nc->n_identities > 0 && - d->nc->identities[0]) { - - if (KHM_SUCCEEDED(kcdb_identity_get_config(d->nc->identities[0], - 0, - &csp_ident))) { - - khc_open_space(csp_ident, CSNAME_KRB4CRED, 0, &csp_k4); - - if (csp_k4) { - if (KHM_SUCCEEDED(khc_read_int32(csp_k4, L"Krb4NewCreds", &t))) - d->k4_enabled = !!t; - if (KHM_SUCCEEDED(khc_read_int32(csp_k4, L"Krb4Method", &t))) - d->method = t; - khc_close_space(csp_k4); - } - - khc_close_space(csp_ident); - } - - if (d->k4_enabled) { - d->k4_enabled = k4_should_identity_get_k4(d->nc->identities[0]); - } - } else { - d->k4_enabled = FALSE; - } - - if (d->method < 0 || d->method > K4_METHOD_K524) - d->method = K4_METHOD_AUTO; -} - -void k4_write_identity_data(k4_dlg_data * d) { - khm_handle csp_ident = NULL; - khm_handle csp_k4 = NULL; - - if (d->nc->n_identities > 0 && - d->nc->identities[0] && - KHM_SUCCEEDED(kcdb_identity_get_config(d->nc->identities[0], - KHM_FLAG_CREATE, - &csp_ident))) { - khc_open_space(csp_ident, CSNAME_KRB4CRED, - KHM_FLAG_CREATE | KCONF_FLAG_WRITEIFMOD, - &csp_k4); - - if (csp_k4) { - khc_write_int32(csp_k4, L"Krb4NewCreds", !!d->k4_enabled); - khc_write_int32(csp_k4, L"Krb4Method", d->method); - - khc_close_space(csp_k4); - } - - khc_close_space(csp_ident); - } -} - -void k4_handle_wmnc_notify(k4_dlg_data * d, - WPARAM wParam, - LPARAM lParam) { - switch(HIWORD(wParam)) { - case WMNC_UPDATE_CREDTEXT: - { - if (d->nct->credtext) { - PFREE(d->nct->credtext); - d->nct->credtext = NULL; - } - - if (d->nc->n_identities > 0 && - d->nc->identities[0]) { - - khm_int32 flags = 0; - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - wchar_t * atsign; - wchar_t * realm; - khm_size cb; - - kcdb_identity_get_flags(d->nc->identities[0], &flags); - - if (!(flags & KCDB_IDENT_FLAG_VALID)) { - break; - } - - cb = sizeof(idname); - kcdb_identity_get_name(d->nc->identities[0], idname, - &cb); - - atsign = wcsrchr(idname, L'@'); - - if (atsign == NULL || !atsign[1]) - break; - - realm = ++atsign; - - if (d->k4_enabled) { - wchar_t wmethod[128]; - wchar_t wfmt[128]; - wchar_t wct[512]; - - LoadString(hResModule, IDS_CT_TGTFOR, - wfmt, ARRAYLENGTH(wfmt)); - - if (d->method == K4_METHOD_AUTO) - LoadString(hResModule, IDS_METHOD_AUTO, wmethod, - ARRAYLENGTH(wmethod)); - else if (d->method == K4_METHOD_PASSWORD) - LoadString(hResModule, IDS_METHOD_PWD, wmethod, - ARRAYLENGTH(wmethod)); - else if (d->method == K4_METHOD_K524) - LoadString(hResModule, IDS_METHOD_K524, wmethod, - ARRAYLENGTH(wmethod)); - else { - assert(FALSE); - } - - StringCbPrintf(wct, sizeof(wct), wfmt, realm, wmethod); - - StringCbLength(wct, sizeof(wct), &cb); - cb += sizeof(wchar_t); - - d->nct->credtext = PMALLOC(cb); - - StringCbCopy(d->nct->credtext, cb, wct); - } else { - wchar_t wct[256]; - - LoadString(hResModule, IDS_CT_DISABLED, - wct, ARRAYLENGTH(wct)); - - StringCbLength(wct, sizeof(wct), &cb); - cb += sizeof(wchar_t); - - d->nct->credtext = PMALLOC(cb); - - StringCbCopy(d->nct->credtext, cb, wct); - } - } - /* no identities were selected. it is not the - responsibility of krb4 to complain about this. */ - } - break; - - case WMNC_IDENTITY_CHANGE: - k4_read_identity_data(d); - k4_update_display(d, TRUE); - break; - - case WMNC_CREDTEXT_LINK: - { - wchar_t wid[KHUI_MAXCCH_HTLINK_FIELD]; - wchar_t * wids; - khui_htwnd_link * l; - - l = (khui_htwnd_link *) lParam; - - StringCchCopyN(wid, ARRAYLENGTH(wid), l->id, l->id_len); - wids = wcschr(wid, L':'); - - if (!wids) - break; - else - wids++; - - if (!wcscmp(wids, L"Enable")) { - d->k4_enabled = TRUE; - - k4_update_display(d, TRUE); - khui_cw_enable_type(d->nc, credtype_id_krb4, TRUE); - } - } - break; - } -} - -INT_PTR CALLBACK k4_nc_dlg_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - - k4_dlg_data * d; - - switch(uMsg) { - case WM_INITDIALOG: - { - d = PMALLOC(sizeof(*d)); - ZeroMemory(d, sizeof(*d)); - - d->nc = (khui_new_creds *) lParam; - khui_cw_find_type(d->nc, credtype_id_krb4, &d->nct); - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LPARAM) d); -#pragma warning(pop) - - d->nct->aux = (LPARAM) d; - d->hwnd = hwnd; - - d->k4_enabled = TRUE; - d->method = K4_METHOD_AUTO; - - k4_update_display(d, TRUE); - } - break; - - case WM_COMMAND: - { - if (HIWORD(wParam) == BN_CLICKED) { - d = (k4_dlg_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - break; - - k4_update_data(d); - - if (LOWORD(wParam) == IDC_NCK4_OBTAIN) { - k4_update_display(d, TRUE); - } - - return TRUE; - } - } - break; - - case KHUI_WM_NC_NOTIFY: - { - d = (k4_dlg_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - break; - - k4_handle_wmnc_notify(d, wParam, lParam); - } - break; - - case WM_DESTROY: - { - d = (k4_dlg_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - break; - - d->nct->aux = 0; - - PFREE(d); - SetWindowLongPtr(hwnd, DWLP_USER, 0); - } - break; - } - - return FALSE; -} - -khm_int32 -krb4_msg_newcred(khm_int32 msg_type, khm_int32 msg_subtype, - khm_ui_4 uparam, void * vparam) { - - switch(msg_subtype) { - case KMSG_CRED_NEW_CREDS: - { - khui_new_creds * nc; - khui_new_creds_by_type * nct; - khm_size cbsize; - wchar_t wbuf[256]; - - nc = (khui_new_creds *) vparam; - - nct = PMALLOC(sizeof(*nct)); -#ifdef DEBUG - assert(nct); -#endif - ZeroMemory(nct, sizeof(*nct)); - - nct->type = credtype_id_krb4; - nct->ordinal = 3; - LoadString(hResModule, IDS_NC_K4_SHORT, - wbuf, ARRAYLENGTH(wbuf)); - StringCbLength(wbuf, sizeof(wbuf), &cbsize); - cbsize += sizeof(wchar_t); - - nct->name = PMALLOC(cbsize); - StringCbCopy(nct->name, cbsize, wbuf); - - nct->type_deps[nct->n_type_deps++] = credtype_id_krb5; - - nct->h_module = hResModule; - nct->dlg_proc = k4_nc_dlg_proc; - nct->dlg_template = MAKEINTRESOURCE(IDD_NC_KRB4); - - khui_cw_add_type(nc, nct); - } - break; - - case KMSG_CRED_RENEW_CREDS: - { - khui_new_creds * nc; - khui_new_creds_by_type * nct; - khm_size cbsize; - wchar_t wbuf[256]; - - nc = (khui_new_creds *) vparam; - - if (!nc->ctx.identity) - break; - - nct = PMALLOC(sizeof(*nct)); -#ifdef DEBUG - assert(nct); -#endif - - ZeroMemory(nct, sizeof(*nct)); - - nct->type = credtype_id_krb4; - nct->ordinal = 3; - LoadString(hResModule, IDS_NC_K4_SHORT, - wbuf, ARRAYLENGTH(wbuf)); - StringCbLength(wbuf, sizeof(wbuf), &cbsize); - cbsize += sizeof(wchar_t); - - nct->name = PMALLOC(cbsize); - StringCbCopy(nct->name, cbsize, wbuf); - - nct->type_deps[nct->n_type_deps++] = credtype_id_krb5; - - khui_cw_add_type(nc, nct); - } - break; - - case KMSG_CRED_DIALOG_SETUP: - break; - - case KMSG_CRED_PROCESS: - { - khui_new_creds * nc; - khui_new_creds_by_type * nct = NULL; - khm_handle ident = NULL; - k4_dlg_data * d = NULL; - long code = 0; - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - khm_size cb; - - nc = (khui_new_creds *) vparam; - if (KHM_FAILED(khui_cw_find_type(nc, credtype_id_krb4, &nct))) - break; - - if (nc->subtype == KMSG_CRED_NEW_CREDS || - nc->subtype == KMSG_CRED_RENEW_CREDS) { - khm_int32 method; - - if (nc->subtype == KMSG_CRED_NEW_CREDS) { - - d = (k4_dlg_data *) nct->aux; - if (!d || - nc->n_identities == 0 || - nc->identities[0] == NULL || - nc->result != KHUI_NC_RESULT_PROCESS) { - khui_cw_set_response(nc, credtype_id_krb4, - KHUI_NC_RESPONSE_SUCCESS | - KHUI_NC_RESPONSE_EXIT); - break; - } - - if (!d->k4_enabled) { - k4_write_identity_data(d); - khui_cw_set_response(nc, credtype_id_krb4, - KHUI_NC_RESPONSE_SUCCESS | - KHUI_NC_RESPONSE_EXIT); - break; - } - - method = d->method; - ident = nc->identities[0]; - - cb = sizeof(idname); - kcdb_identity_get_name(ident, idname, &cb); - _begin_task(0); - _report_mr2(KHERR_NONE, MSG_K4_NEW_CREDS, - _cstr(ident), _int32(method)); - _resolve(); - _describe(); - - } else if (nc->subtype == KMSG_CRED_RENEW_CREDS) { - - if ((nc->ctx.scope == KHUI_SCOPE_IDENT && - nc->ctx.identity != NULL) || - - (nc->ctx.scope == KHUI_SCOPE_CREDTYPE && - nc->ctx.cred_type == credtype_id_krb4 && - nc->ctx.identity != NULL) || - - (nc->ctx.scope == KHUI_SCOPE_CRED && - nc->ctx.cred_type == credtype_id_krb4 && - nc->ctx.identity != NULL && - nc->ctx.cred != NULL)) { - - ident = nc->ctx.identity; - - if (!k4_should_identity_get_k4(ident)) { - - _reportf(L"Kerberos 4 is not enabled for this identity. Skipping"); - - khui_cw_set_response(nc, credtype_id_krb4, - KHUI_NC_RESPONSE_FAILED | - KHUI_NC_RESPONSE_EXIT); - break; - } - - } else { - - _reportf(L"Kerberos 4 is not within renewal scope. Skipping"); - - khui_cw_set_response(nc, credtype_id_krb4, - KHUI_NC_RESPONSE_FAILED | - KHUI_NC_RESPONSE_EXIT); - break; - } - - method = K4_METHOD_K524; /* only k524 is supported - for renewals */ - - _begin_task(0); - cb = sizeof(idname); - kcdb_identity_get_name(ident, idname, &cb); - _report_mr2(KHERR_NONE, MSG_K4_RENEW_CREDS, - _cstr(ident), _int32(method)); - _resolve(); - _describe(); - } else { - assert(FALSE); - break; - } - - if ((method == K4_METHOD_AUTO || - method == K4_METHOD_K524) && - khui_cw_type_succeeded(nc, credtype_id_krb5)) { - - khm_handle tgt; - FILETIME ft_prev; - FILETIME ft_new; - khm_size cb; - - _report_mr0(KHERR_INFO, MSG_K4_TRY_K524); - - tgt = khm_krb4_find_tgt(NULL, ident); - if (tgt) { - cb = sizeof(ft_prev); - if (KHM_FAILED(kcdb_cred_get_attr(tgt, - KCDB_ATTR_EXPIRE, - NULL, - &ft_prev, - &cb))) - ZeroMemory(&ft_prev, sizeof(ft_prev)); - kcdb_cred_release(tgt); - } - - code = khm_convert524(ident); - - _reportf(L"khm_convert524 returns code %d", code); - - if (code == 0) { - khui_cw_set_response(nc, credtype_id_krb4, - KHUI_NC_RESPONSE_SUCCESS | - KHUI_NC_RESPONSE_EXIT); - - if (nc->subtype == KMSG_CRED_NEW_CREDS) { - assert(d != NULL); - - k4_write_identity_data(d); - - } else if (nc->subtype == KMSG_CRED_RENEW_CREDS && - (nc->ctx.scope == KHUI_SCOPE_CREDTYPE || - nc->ctx.scope == KHUI_SCOPE_CRED)) { - - khm_krb4_list_tickets(); - - tgt = khm_krb4_find_tgt(NULL, ident); - - if (tgt) { - cb = sizeof(ft_new); - ZeroMemory(&ft_new, sizeof(ft_new)); - - kcdb_cred_get_attr(tgt, - KCDB_ATTR_EXPIRE, - NULL, - &ft_new, - &cb); - - kcdb_cred_release(tgt); - } - - if (!tgt || - CompareFileTime(&ft_new, - &ft_prev) <= 0) { - /* The new TGT wasn't much of an - improvement over what we already - had. We should go out and try to - renew the identity now. */ - - khui_action_context ctx; - - _reportf(L"Renewal of Krb4 creds failed to get a longer TGT. Triggering identity renewal"); - - khui_context_create(&ctx, - KHUI_SCOPE_IDENT, - nc->ctx.identity, - KCDB_CREDTYPE_INVALID, - NULL); - khui_action_trigger(KHUI_ACTION_RENEW_CRED, - &ctx); - - khui_context_release(&ctx); - } - } - - _end_task(); - break; - - } else if (method == K4_METHOD_K524) { - khui_cw_set_response(nc, credtype_id_krb4, - KHUI_NC_RESPONSE_FAILED | - KHUI_NC_RESPONSE_EXIT); - - if (nc->subtype == KMSG_CRED_RENEW_CREDS && - (nc->ctx.scope == KHUI_SCOPE_CREDTYPE || - nc->ctx.scope == KHUI_SCOPE_CRED)) { - /* We were trying to get a new Krb4 TGT - for this identity. Sometimes this - fails because of restrictions placed on - K524d regarding the lifetime of the - issued K4 TGT. In this case, we - trigger a renewal of the identity in - the hope that the new K5 TGT will allow - us to successfully get a new K4 TGT - next time over using the new K5 TGT. */ - - khui_action_context ctx; - - _reportf(L"Renewal of Krb4 creds failed using k524. Triggerring identity renewal."); - - khui_context_create(&ctx, - KHUI_SCOPE_IDENT, - nc->ctx.identity, - KCDB_CREDTYPE_INVALID, - NULL); - - khui_action_trigger(KHUI_ACTION_RENEW_CRED, - &ctx); - - khui_context_release(&ctx); - } - - _end_task(); - break; - - } - } - - /* only supported for new credentials */ - if (method == K4_METHOD_AUTO || - method == K4_METHOD_PASSWORD) { - - khm_size n_prompts = 0; - khm_size idx; - khm_size cb; - wchar_t wpwd[KHUI_MAXCCH_PROMPT_VALUE]; - char pwd[KHUI_MAXCCH_PROMPT_VALUE]; - wchar_t widname[KCDB_IDENT_MAXCCH_NAME]; - char idname[KCDB_IDENT_MAXCCH_NAME]; - - char * aname = NULL; - char * inst = NULL; - char * realm = NULL; - - assert(nc->subtype == KMSG_CRED_NEW_CREDS); - - _report_mr0(KHERR_INFO, MSG_K4_TRY_PASSWORD); - - code = TRUE; /* just has to be non-zero */ - - khui_cw_get_prompt_count(nc, &n_prompts); - - if (n_prompts == 0) - goto _skip_pwd; - - for (idx = 0; idx < n_prompts; idx++) { - khui_new_creds_prompt * p; - - if (KHM_FAILED(khui_cw_get_prompt(nc, idx, &p))) - continue; - - if (p->type == KHUI_NCPROMPT_TYPE_PASSWORD) - break; - } - - if (idx >= n_prompts) { - _reportf(L"Password prompt not found"); - goto _skip_pwd; - } - - khui_cw_sync_prompt_values(nc); - - cb = sizeof(wpwd); - if (KHM_FAILED(khui_cw_get_prompt_value(nc, idx, - wpwd, - &cb))) { - _reportf(L"Failed to obtain password value"); - goto _skip_pwd; - } - - UnicodeStrToAnsi(pwd, sizeof(pwd), wpwd); - - cb = sizeof(widname); - kcdb_identity_get_name(ident, - widname, - &cb); - - UnicodeStrToAnsi(idname, sizeof(idname), widname); - - { - char * atsign; - - atsign = strchr(idname, '@'); - if (atsign == NULL) { - _reportf(L"Identity name does not contain an '@'"); - goto _skip_pwd; - } - - *atsign++ = 0; - - realm = atsign; - } - - { - char * slash; - - slash = strchr(idname, '/'); - if (slash != NULL) { - *slash++ = 0; - inst = slash; - } else { - inst = ""; - } - } - - aname = idname; - - code = khm_krb4_kinit(aname, inst, realm, - (long) d->lifetime, pwd); - - _reportf(L"khm_krb4_kinit returns code %d", code); - - _skip_pwd: - - if (code) { - khui_cw_set_response(nc, credtype_id_krb4, - KHUI_NC_RESPONSE_EXIT | - KHUI_NC_RESPONSE_FAILED); - - } else { - khui_cw_set_response(nc, credtype_id_krb4, - KHUI_NC_RESPONSE_EXIT | - KHUI_NC_RESPONSE_SUCCESS); - - if (nc->subtype == KMSG_CRED_NEW_CREDS) { - - assert(d != NULL); - k4_write_identity_data(d); - - } - } - } - - _end_task(); - } - } - break; - - case KMSG_CRED_END: - { - khui_new_creds * nc; - khui_new_creds_by_type * nct = NULL; - - nc = (khui_new_creds *) vparam; - if (KHM_FAILED(khui_cw_find_type(nc, credtype_id_krb4, &nct))) - break; - - khui_cw_del_type(nc, credtype_id_krb4); - - if (nct->name) - PFREE(nct->name); - - if (nct->credtext) - PFREE(nct->credtext); - - PFREE(nct); - } - break; - } - - return KHM_ERROR_SUCCESS; -} diff --git a/src/windows/identity/plugins/krb4/krb4plugin.c b/src/windows/identity/plugins/krb4/krb4plugin.c deleted file mode 100644 index 168a0f8a7..000000000 --- a/src/windows/identity/plugins/krb4/krb4plugin.c +++ /dev/null @@ -1,297 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<krbcred.h> -#include<kherror.h> -#include<khmsgtypes.h> -#include<khuidefs.h> -#include<utils.h> -#include<commctrl.h> -#include<strsafe.h> -#include<krb5.h> - -khm_int32 credtype_id_krb4 = KCDB_CREDTYPE_INVALID; -khm_int32 credtype_id_krb5 = KCDB_CREDTYPE_INVALID; - -khm_boolean krb4_initialized = FALSE; -khm_handle krb4_credset = NULL; - -/* Kerberos IV stuff */ -khm_int32 KHMAPI -krb4_msg_system(khm_int32 msg_type, khm_int32 msg_subtype, - khm_ui_4 uparam, void * vparam) -{ - khm_int32 rv = KHM_ERROR_SUCCESS; - - switch(msg_subtype) { - case KMSG_SYSTEM_INIT: - { -#ifdef _WIN64 - return KHM_ERROR_NOT_IMPLEMENTED; -#else - kcdb_credtype ct; - wchar_t buf[KCDB_MAXCCH_SHORT_DESC]; - size_t cbsize; - khui_config_node_reg reg; - wchar_t wshort_desc[KHUI_MAXCCH_SHORT_DESC]; - wchar_t wlong_desc[KHUI_MAXCCH_LONG_DESC]; - - /* perform critical registrations and initialization - stuff */ - ZeroMemory(&ct, sizeof(ct)); - ct.id = KCDB_CREDTYPE_AUTO; - ct.name = KRB4_CREDTYPE_NAME; - - if(LoadString(hResModule, IDS_KRB4_SHORT_DESC, - buf, ARRAYLENGTH(buf))) - { - StringCbLength(buf, KCDB_MAXCB_SHORT_DESC, &cbsize); - cbsize += sizeof(wchar_t); - ct.short_desc = PMALLOC(cbsize); - StringCbCopy(ct.short_desc, cbsize, buf); - } - - /* even though ideally we should be setting limits - based KCDB_MAXCB_LONG_DESC, our long description - actually fits nicely in KCDB_MAXCB_SHORT_DESC */ - if(LoadString(hResModule, IDS_KRB4_LONG_DESC, - buf, ARRAYLENGTH(buf))) - { - StringCbLength(buf, KCDB_MAXCB_SHORT_DESC, &cbsize); - cbsize += sizeof(wchar_t); - ct.long_desc = PMALLOC(cbsize); - StringCbCopy(ct.long_desc, cbsize, buf); - } - - ct.icon = NULL; /* TODO: set a proper icon */ - kmq_create_subscription(krb4_cb, &ct.sub); - - rv = kcdb_credtype_register(&ct, &credtype_id_krb4); - - if(KHM_SUCCEEDED(rv)) - rv = kcdb_credset_create(&krb4_credset); - - if (KHM_SUCCEEDED(rv)) - rv = kcdb_credtype_get_id(KRB5_CREDTYPE_NAME, - &credtype_id_krb5); - - if(ct.short_desc) - PFREE(ct.short_desc); - - if(ct.long_desc) - PFREE(ct.long_desc); - - if (KHM_SUCCEEDED(rv)) { - khui_config_node idents; - - ZeroMemory(&reg, sizeof(reg)); - - reg.name = KRB4_CONFIG_NODE_NAME; - reg.short_desc = wshort_desc; - reg.long_desc = wlong_desc; - reg.h_module = hResModule; - reg.dlg_template = MAKEINTRESOURCE(IDD_CFG_KRB4); - reg.dlg_proc = krb4_confg_proc; - reg.flags = 0; - - LoadString(hResModule, IDS_CFG_KRB4_LONG, - wlong_desc, ARRAYLENGTH(wlong_desc)); - LoadString(hResModule, IDS_CFG_KRB4_SHORT, - wshort_desc, ARRAYLENGTH(wshort_desc)); - - khui_cfg_register(NULL, &reg); - - khui_cfg_open(NULL, L"KhmIdentities", &idents); - - ZeroMemory(&reg, sizeof(reg)); - - reg.name = KRB4_IDS_CONFIG_NODE_NAME; - reg.short_desc = wshort_desc; - reg.long_desc = wlong_desc; - reg.h_module = hResModule; - reg.dlg_template = MAKEINTRESOURCE(IDD_CFG_IDS_KRB4); - reg.dlg_proc = krb4_ids_config_proc; - reg.flags = KHUI_CNFLAG_SUBPANEL; - - LoadString(hResModule, IDS_CFG_KRB4_SHORT, - wlong_desc, ARRAYLENGTH(wlong_desc)); - LoadString(hResModule, IDS_CFG_KRB4_SHORT, - wshort_desc, ARRAYLENGTH(wshort_desc)); - - khui_cfg_register(idents, &reg); - - ZeroMemory(&reg, sizeof(reg)); - - reg.name = KRB4_ID_CONFIG_NODE_NAME; - reg.short_desc = wshort_desc; - reg.long_desc = wlong_desc; - reg.h_module = hResModule; - reg.dlg_template = MAKEINTRESOURCE(IDD_CFG_ID_KRB4); - reg.dlg_proc = krb4_id_config_proc; - reg.flags = KHUI_CNFLAG_SUBPANEL | KHUI_CNFLAG_PLURAL; - - LoadString(hResModule, IDS_CFG_KRB4_SHORT, - wlong_desc, ARRAYLENGTH(wlong_desc)); - LoadString(hResModule, IDS_CFG_KRB4_SHORT, - wshort_desc, ARRAYLENGTH(wshort_desc)); - - khui_cfg_register(idents, &reg); - - khui_cfg_release(idents); - - } - - /* Lookup common data types */ - if(KHM_FAILED(kcdb_type_get_id(TYPENAME_ENCTYPE, - &type_id_enctype))) { - rv = KHM_ERROR_UNKNOWN; - } - - if(KHM_FAILED(kcdb_type_get_id(TYPENAME_ADDR_LIST, - &type_id_addr_list))) { - rv = KHM_ERROR_UNKNOWN; - } - - if(KHM_FAILED(kcdb_type_get_id(TYPENAME_KRB5_FLAGS, - &type_id_krb5_flags))) { - rv = KHM_ERROR_UNKNOWN; - } - - /* Lookup common attributes */ - if(KHM_FAILED(kcdb_attrib_get_id(ATTRNAME_KEY_ENCTYPE, - &attr_id_key_enctype))) { - rv = KHM_ERROR_UNKNOWN; - } - - if(KHM_FAILED(kcdb_attrib_get_id(ATTRNAME_TKT_ENCTYPE, - &attr_id_tkt_enctype))) { - rv = KHM_ERROR_UNKNOWN; - } - - if(KHM_FAILED(kcdb_attrib_get_id(ATTRNAME_ADDR_LIST, - &attr_id_addr_list))) { - rv = KHM_ERROR_UNKNOWN; - } - - if(KHM_FAILED(kcdb_attrib_get_id(ATTRNAME_KRB5_FLAGS, - &attr_id_krb5_flags))) { - rv = KHM_ERROR_UNKNOWN; - } - - krb4_initialized = TRUE; - - khm_krb4_set_def_tkt_string(); - - khm_krb4_list_tickets(); -#endif - } - break; - - case KMSG_SYSTEM_EXIT: -#ifdef _WIN64 - /* See above. On 64-bit platforms, we don't support Krb4 at - all. */ - return 0; -#else - if(credtype_id_krb4 >= 0) - { - /* basically just unregister the credential type */ - kcdb_credtype_unregister(credtype_id_krb4); - - kcdb_credset_delete(krb4_credset); - } - break; -#endif - } - - return rv; -} - -khm_int32 KHMAPI -krb4_msg_cred(khm_int32 msg_type, khm_int32 msg_subtype, - khm_ui_4 uparam, void * vparam) -{ - khm_int32 rv = KHM_ERROR_SUCCESS; - - switch(msg_subtype) { - case KMSG_CRED_REFRESH: - { - khm_krb4_list_tickets(); - } - break; - - case KMSG_CRED_DESTROY_CREDS: - { - khui_action_context * ctx; - khm_handle credset; - khm_size nc_root = 0; - khm_size nc_sel = 0; - - ctx = (khui_action_context *) vparam; - - /* if all krb4 tickets are selected, then we destroy all - of them. Otherwise, we do nothing. */ - - kcdb_credset_create(&credset); - - kcdb_credset_extract(credset, ctx->credset, - NULL, credtype_id_krb4); - kcdb_credset_get_size(credset, &nc_sel); - - kcdb_credset_flush(credset); - - kcdb_credset_extract(credset, NULL, - NULL, credtype_id_krb4); - kcdb_credset_get_size(credset, &nc_root); - - kcdb_credset_delete(credset); - - if (nc_root == nc_sel) { - khm_krb4_kdestroy(); - } - } - break; - - default: - if (IS_CRED_ACQ_MSG(msg_subtype)) - return krb4_msg_newcred(msg_type, msg_subtype, uparam, vparam); - } - - return rv; -} - -khm_int32 KHMAPI -krb4_cb(khm_int32 msg_type, khm_int32 msg_subtype, - khm_ui_4 uparam, void * vparam) -{ - switch(msg_type) { - case KMSG_SYSTEM: - return krb4_msg_system(msg_type, msg_subtype, uparam, vparam); - case KMSG_CRED: - return krb4_msg_cred(msg_type, msg_subtype, uparam, vparam); - } - return KHM_ERROR_SUCCESS; -} diff --git a/src/windows/identity/plugins/krb4/krbconfig.csv b/src/windows/identity/plugins/krb4/krbconfig.csv deleted file mode 100644 index 3d791214b..000000000 --- a/src/windows/identity/plugins/krb4/krbconfig.csv +++ /dev/null @@ -1,17 +0,0 @@ -Name,Type,Value,Description -Krb4Cred,KC_SPACE,0,"Kerberos IV Credentials Provider" - Module,KC_STRING,"MITKrb4", - Description,KC_STRING,"Kerberos IV Credentials Provider", - Dependencies,KC_STRING,Krb5Cred, - Type,KC_INT32,1, - Flags,KC_INT32,0, - Parameters,KC_SPACE,0,Parameters for KrbCred - Krb4NewCreds,KC_INT32,1,Obtain Kerberos 4 tickets (Boolean) - Krb4Method,KC_INT32,0,Method for acquiring K4 tix. 0-Auto;1-Password;2-K524 - CreateMissingConfig,KC_INT32,0,Create missing configuration files - DefaultLifetime,KC_INT32,36000,Default ticket lifetime - MaxLifetime,KC_INT32,86400,Maximum lifetime - MinLifetime,KC_INT32,60,Minimum lifetime - TktString,KC_STRING,,Ticket string. Use default if NULL - Parameters,KC_ENDSPACE,0, -Krb4Cred,KC_ENDSPACE,0, diff --git a/src/windows/identity/plugins/krb4/krbcred.h b/src/windows/identity/plugins/krb4/krbcred.h deleted file mode 100644 index 834d3f9a3..000000000 --- a/src/windows/identity/plugins/krb4/krbcred.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KRBAFSCRED_H -#define __KHIMAIRA_KRBAFSCRED_H - -#include<windows.h> - -#define KHERR_FACILITY L"Krb4Cred" -#define KHERR_FACILITY_ID 65 -#define KHERR_HMODULE hResModule - -#include<netidmgr.h> - -#include<krb4funcs.h> -#include<krb5common.h> -#include<errorfuncs.h> -#include<dynimport.h> - -#include<langres.h> -#include<krb4_msgs.h> - -#define TYPENAME_ENCTYPE L"EncType" -#define TYPENAME_ADDR_LIST L"AddrList" -#define TYPENAME_KRB5_FLAGS L"Krb5Flags" - -#define ATTRNAME_KEY_ENCTYPE L"KeyEncType" -#define ATTRNAME_TKT_ENCTYPE L"TktEncType" -#define ATTRNAME_ADDR_LIST L"AddrList" -#define ATTRNAME_KRB5_FLAGS L"Krb5Flags" -#define ATTRNAME_RENEW_TILL L"RenewTill" -#define ATTRNAME_RENEW_FOR L"RenewFor" - -void init_krb(); -void exit_krb(); - -/* globals */ -extern kmm_module h_khModule; -extern HMODULE hResModule; -extern HINSTANCE hInstance; - -extern khm_int32 type_id_enctype; -extern khm_int32 type_id_addr_list; -extern khm_int32 type_id_krb5_flags; - -extern khm_int32 attr_id_key_enctype; -extern khm_int32 attr_id_tkt_enctype; -extern khm_int32 attr_id_addr_list; -extern khm_int32 attr_id_krb5_flags; -extern khm_int32 attr_id_renew_till; -extern khm_int32 attr_id_renew_for; - -/* Configuration spaces */ -#define CSNAME_KRB4CRED L"Krb4Cred" -#define CSNAME_PARAMS L"Parameters" - -/* plugin constants */ -#define KRB4_PLUGIN_NAME L"Krb4Cred" - -#define KRB4_PLUGIN_DEPS L"Krb5Cred\0" - -#define KRB4_CREDTYPE_NAME L"Krb4Cred" - -#define KRB5_CREDTYPE_NAME L"Krb5Cred" - -#define KRB4_CONFIG_NODE_NAME L"Krb4Config" - -#define KRB4_ID_CONFIG_NODE_NAME L"Krb4IdentConfig" -#define KRB4_IDS_CONFIG_NODE_NAME L"Krb4IdentsConfig" - -extern khm_handle csp_plugins; -extern khm_handle csp_krbcred; -extern khm_handle csp_params; - -extern kconf_schema schema_krbconfig[]; - -/* other globals */ -extern khm_int32 credtype_id_krb4; -extern khm_int32 credtype_id_krb5; - -extern khm_boolean krb4_initialized; - -extern khm_handle krb4_credset; - -/* plugin callbacks */ -khm_int32 KHMAPI -krb4_cb(khm_int32 msg_type, khm_int32 msg_subtype, - khm_ui_4 uparam, void * vparam); - -INT_PTR CALLBACK -krb4_confg_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); - -INT_PTR CALLBACK -krb4_ids_config_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); - -INT_PTR CALLBACK -krb4_id_config_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); - -khm_int32 -krb4_msg_newcred(khm_int32 msg_type, khm_int32 msg_subtype, - khm_ui_4 uparam, void * vparam); -#endif diff --git a/src/windows/identity/plugins/krb4/lang/en_us/langres.rc b/src/windows/identity/plugins/krb4/lang/en_us/langres.rc deleted file mode 100644 index 1c011ab9c..000000000 --- a/src/windows/identity/plugins/krb4/lang/en_us/langres.rc +++ /dev/null @@ -1,205 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "..\..\langres.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "afxres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "..\\..\\langres.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""afxres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_NC_KRB4 DIALOGEX 0, 0, 300, 166 -STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "Kerberos v4 Ticket Options",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP,7,7,286,11 - CONTROL "Obtain Kerberos v4 credentials",IDC_NCK4_OBTAIN,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,7,26,128,10 - GROUPBOX "Obtain Kerberos v4 credentials using",IDC_STATIC,7,43,286,72,WS_GROUP - CONTROL "Automatically determine method",IDC_NCK4_AUTO,"Button",BS_AUTORADIOBUTTON,22,59,119,10 - CONTROL "Kerberos v5 to v4 translation",IDC_NCK4_K524,"Button",BS_AUTORADIOBUTTON,22,76,109,10 - CONTROL "Password",IDC_NCK4_PWD,"Button",BS_AUTORADIOBUTTON,22,93,47,10 -END - -IDD_CFG_KRB4 DIALOGEX 0, 0, 255, 182 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - LTEXT "Credential cache location",IDC_CFG_LBL_CACHE,7,10,67,8 - EDITTEXT IDC_CFG_CACHE,83,7,165,14,ES_AUTOHSCROLL - LTEXT "Config file path",IDC_CFG_LBL_CFGFILE,7,30,50,8 - EDITTEXT IDC_CFG_CFGPATH,83,27,165,14,ES_AUTOHSCROLL | ES_READONLY - PUSHBUTTON "Browse...",IDC_CFG_CFGBROW,200,95,48,14,NOT WS_VISIBLE - LTEXT "Realm file path",IDC_CFG_LBL_RLMPATH,7,50,48,8 - EDITTEXT IDC_CFG_RLMPATH,83,47,165,14,ES_AUTOHSCROLL | ES_READONLY - PUSHBUTTON "Browse...",IDC_CFG_RLMBROW,200,127,48,14,NOT WS_VISIBLE -END - -IDD_CFG_IDS_KRB4 DIALOGEX 0, 0, 235, 151 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "Obtain Kerberos v4 credentials",IDC_CFG_GETTIX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,221,17 - LTEXT "Note that, if enabled, Kerberos v4 credentials will be acquired during initial credential acquisition and during credential renewals.\n\nHowever, currently Kerberos v4 credentials can only be obtained for the default identity.",IDC_STATIC,7,91,221,53,SS_SUNKEN -END - -IDD_CFG_ID_KRB4 DIALOGEX 0, 0, 235, 151 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "Obtain Kerberos v4 credentials for this identity",IDC_CFG_GETTIX, - "Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,7,7,165,10 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_NC_KRB4, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 293 - TOPMARGIN, 7 - BOTTOMMARGIN, 159 - END - - IDD_CFG_KRB4, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 248 - VERTGUIDE, 83 - VERTGUIDE, 196 - VERTGUIDE, 200 - TOPMARGIN, 7 - BOTTOMMARGIN, 175 - END - - IDD_CFG_IDS_KRB4, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 228 - TOPMARGIN, 7 - BOTTOMMARGIN, 144 - END - - IDD_CFG_ID_KRB4, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 228 - TOPMARGIN, 7 - BOTTOMMARGIN, 144 - END -END -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_PLUGIN ICON "..\\..\\images\\plugin.ico" - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE -BEGIN - IDS_PLUGIN_DESC "Kerberos v4 Credentials Provider" - IDS_NC_K4_SHORT "Kerberos v4" - IDS_ERR_REALM "Could not resolve Kerberos v4 realm" - IDS_ERR_PRINCIPAL "Invalid principal" - IDS_ERR_INVINST "Invalid instance" - IDS_ERR_PWINTKT "Could not obtain Kerberos v4 credentials" - IDS_CT_DISABLED "<p><a id=""SwitchPanel"" param=""Krb4Cred""><b>Krb4</b></a><tab>: Disabled (click <a id=""Krb4Cred:Enable"">here</a> to enable)</p>" - IDS_CT_TGTFOR "<p><a id=""SwitchPanel"" param=""Krb4Cred""><b>Krb4</b></a><tab>: Credentials for realm %s</p>" - IDS_METHOD_AUTO "Automatically determined method" -END - -STRINGTABLE -BEGIN - IDS_KRB4_SHORT_DESC "Kerberos v4" - IDS_KRB4_LONG_DESC "Kerberos v4" - IDS_CFG_KRB4_LONG "Kerberos v4 Configuration" - IDS_CFG_KRB4_SHORT "Kerberos v4" -END - -STRINGTABLE -BEGIN - IDS_METHOD_PWD "Password" - IDS_METHOD_K524 "Kerberos v5 to v4 translation" - IDS_CFG_IDS_KRB4_SHORT "Kerberos v4" -END - -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - - diff --git a/src/windows/identity/plugins/krb4/lang/krb4_msgs.mc b/src/windows/identity/plugins/krb4/lang/krb4_msgs.mc deleted file mode 100644 index 74fe50905..000000000 --- a/src/windows/identity/plugins/krb4/lang/krb4_msgs.mc +++ /dev/null @@ -1,57 +0,0 @@ -; // ** krb5_msgs.mc - -; /* Since .mc files can contain strings from any language, we define -; all our messages in one file in the /lang/ directory instead of -; language specific subdirectories. */ - -; /* The type is set to (wchar_t *) because that's what we will be -; feeding kherr_report() function. */ - -; // MessageIdTypedef=LPWSTR - -; /* Severity values as defined in the message definition file are -; currently ignored. */ - -SeverityNames=( - Success=0x0 -) - -LanguageNames=( - English=0x409:MSG_ENU -) - -OutputBase=16 - -; /* Actual messages start here */ - -MessageId=1 -Severity=Success -SymbolicName=MSG_INITIAL -Language=English -Initial placeholder message -. - -MessageId= -SymbolicName=MSG_K4_NEW_CREDS -Language=English -Getting new Krb4 credentials for [%1!s!] using method [%2!d!] -. - -MessageId= -SymbolicName=MSG_K4_RENEW_CREDS -Language=English -Renewing Krb4 credentials for [%1!s!] using method [%2!d!] -. - -MessageId= -SymbolicName=MSG_K4_TRY_K524 -Language=English -Trying Krb524 ... -. - -MessageId= -SymbolicName=MSG_K4_TRY_PASSWORD -Language=English -Trying Password ... -. - diff --git a/src/windows/identity/plugins/krb4/langres.h b/src/windows/identity/plugins/krb4/langres.h deleted file mode 100644 index b4f911874..000000000 --- a/src/windows/identity/plugins/krb4/langres.h +++ /dev/null @@ -1,49 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by C:\work\pismere\athena\auth\krb5\src\windows\identity\plugins\krb4\lang\en_us\langres.rc -// -#define IDD_NC_KRB4 103 -#define IDS_PLUGIN_DESC 103 -#define IDD_CFG_KRB4 104 -#define IDS_NC_K4_SHORT 104 -#define IDS_ERR_REALM 105 -#define IDD_CFG_IDS_KRB4 105 -#define IDS_ERR_PRINCIPAL 106 -#define IDD_CFG_ID_KRB4 106 -#define IDS_ERR_INVINST 107 -#define IDI_PLUGIN 107 -#define IDS_ERR_PWINTKT 108 -#define IDS_CT_DISABLED 109 -#define IDS_CT_TGTFOR 110 -#define IDS_METHOD_AUTO 111 -#define IDS_METHOD_PWD 112 -#define IDS_METHOD_K524 113 -#define IDS_CFG_IDS_KRB4_SHORT 114 -#define IDS_KRB4_SHORT_DESC 128 -#define IDS_KRB4_LONG_DESC 129 -#define IDS_CFG_KRB4_LONG 135 -#define IDS_CFG_KRB4_SHORT 136 -#define IDC_CFG_LBL_CACHE 1025 -#define IDC_CFG_LBL_CFGFILE 1026 -#define IDC_CFG_LBL_RLMPATH 1027 -#define IDC_CFG_CACHE 1028 -#define IDC_CFG_CFGPATH 1029 -#define IDC_CFG_RLMPATH 1030 -#define IDC_CFG_CFGBROW 1031 -#define IDC_CFG_RLMBROW 1032 -#define IDC_NCK4_OBTAIN 1033 -#define IDC_NCK4_AUTO 1034 -#define IDC_NCK4_K524 1035 -#define IDC_NCK4_PWD 1036 -#define IDC_CFG_GETTIX 1037 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 108 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1043 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/src/windows/identity/plugins/krb4/version.rc b/src/windows/identity/plugins/krb4/version.rc deleted file mode 100644 index d0e074f86..000000000 --- a/src/windows/identity/plugins/krb4/version.rc +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (c) 2004 Massachusetts Institute of Technology - * - * 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<netidmgr_intver.h> - -#ifndef LANGVER - -#define STR_FILEDESC "Kerberos v4 Plugin for Network Identity Manager" -#define STR_INTNAME "krb4cred" -#define STR_ORIGNAME "krb4cred.dll" - -#else - -#ifdef LANG_en_us - -#define STR_FILEDESC "English(US) language resources for the Keberos 4 plugin" -#define STR_INTNAME "krb4cred_en_us" -#define STR_ORIGNAME "krb4cred_en_us.dll" - -#else - -#error Unknown langugae - -#endif - -#endif - -1 VERSIONINFO - FILEVERSION KH_VERSION_LIST - PRODUCTVERSION KH_VERSION_LIST - FILEFLAGSMASK KH_VER_FILEFLAGMASK - FILEFLAGS KH_VER_FILEFLAGS - FILEOS KH_VER_FILEOS - FILETYPE KH_VER_FILETYPEDLL - FILESUBTYPE 0 - { - - BLOCK "StringFileInfo" - { - BLOCK "040904b0" - { - VALUE "CompanyName", KH_VERSTR_COMPANY_1033 - VALUE "FileDescription", STR_FILEDESC - VALUE "FileVersion", KH_VERSTR_VERSION_1033 - VALUE "InternalName", STR_INTNAME - VALUE "LegalCopyright", KH_VERSTR_COPYRIGHT_1033 - VALUE "OriginalFilename", STR_ORIGNAME - VALUE "ProductName", "Network Identity Manager" - VALUE "ProductVersion", KH_VERSTR_PRODUCT_1033 -#ifdef KH_VERSTR_COMMENT_1033 - VALUE "Comment", KH_VERSTR_COMMENT_1033 -#endif -#ifndef LANGVER - VALUE NIMV_MODULE, "MITKrb4" - VALUE NIMV_PLUGINS, "Krb4Cred" - VALUE NIMV_APIVER, KH_VERSION_STRINGAPI - VALUE NIMV_SUPPORT, "http://web.mit.edu/kerberos" -#endif - } - } - - BLOCK "VarFileInfo" - { - VALUE "Translation", 0x409, 1200 - } - } diff --git a/src/windows/identity/plugins/krb5/Makefile b/src/windows/identity/plugins/krb5/Makefile deleted file mode 100644 index f93fe6819..000000000 --- a/src/windows/identity/plugins/krb5/Makefile +++ /dev/null @@ -1,114 +0,0 @@ -# -# 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 -# (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. - - -MODULE=plugins\krb5 -!include <../../config/Makefile.w32> - -DLLFILE=$(BINDIR)\krb5cred.dll - -LIBFILE=$(LIBDIR)\krb5cred.lib - -OBJFILES= \ - $(LIBDIR)\dynimport.obj \ - $(LIBDIR)\krb5common.obj \ - $(OBJ)\krb5main.obj \ - $(OBJ)\datarep.obj \ - $(OBJ)\errorfuncs.obj \ - $(OBJ)\krb5plugin.obj \ - $(OBJ)\krb5props.obj \ - $(OBJ)\krb5newcreds.obj \ - $(OBJ)\krb5funcs.obj \ - $(OBJ)\krb5config.obj \ - $(OBJ)\krb5identpro.obj \ - $(OBJ)\krb5configdlg.obj \ - $(OBJ)\krb5configcc.obj \ - $(OBJ)\krb5configid.obj \ - $(OBJ)\krb5configids.obj - - - -SDKLIBFILES= \ - netapi32.lib \ - shlwapi.lib \ - comctl32.lib - -!if ("$(CPU)" == "IA64" ) || ("$(CPU)" == "AMD64" ) || ("$(CPU)" == "ALPHA64" ) -SCLIB=bufferoverflowu.lib -LIBFILES= \ - $(LIBDIR)\nidmgr64.lib \ - $(KFWLIBDIR)\loadfuncs.lib -!else -SCLIB= -LIBFILES= \ - $(LIBDIR)\nidmgr32.lib \ - $(KFWLIBDIR)\loadfuncs.lib -!endif - -MSGRESFILE=$(OBJ)\krb5_msgs.res - -VERRESFILE=$(OBJ)\version.res - -$(OBJ)\krb5config.c: krbconfig.csv $(CONFDIR)\csvschema.cfg - $(CCSV) $** $@ - -$(DLLFILE): $(OBJFILES) $(VERRESFILE) - $(DLLGUILINK) $(MSGRESFILE) $(LIBFILES) $(SDKLIBFILES) $(SCLIB) - $(_VC_MANIFEST_EMBED_DLL) - $(_VC_MANIFEST_CLEAN) - -$(MSGRESFILE): $(OBJ)\krb5_msgs.rc - -$(OBJ)\krb5_msgs.rc: lang\krb5_msgs.mc - $(MC2RC) - -all: mkdirs $(MSGRESFILE) $(DLLFILE) lang - -lang:: - -# Repeat this block as necessary redefining LANG for additional -# languages. - -# Begin language block -LANG=en_us - -LANGDLL=$(BINDIR)\krb5cred_$(LANG).dll - -lang:: $(LANGDLL) - -$(LANGDLL): $(OBJ)\langres_$(LANG).res $(OBJ)\langres_ver_$(LANG).res - $(DLLRESLINK) - -$(OBJ)\langres_$(LANG).res: lang\$(LANG)\langres.rc - $(RC2RES) - -$(OBJ)\langres_ver_$(LANG).res: version.rc - $(RC) $(RFLAGS) $(rincflags) /d LANGVER /d LANG_$(LANG) /fo $@ $** -# End language block - -clean:: -!if defined(INCFILES) - $(RM) $(INCFILES) -!endif - diff --git a/src/windows/identity/plugins/krb5/datarep.c b/src/windows/identity/plugins/krb5/datarep.c deleted file mode 100644 index c4247aa67..000000000 --- a/src/windows/identity/plugins/krb5/datarep.c +++ /dev/null @@ -1,414 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -/* Data representation and related functions */ - -#include<winsock2.h> -#include<krbcred.h> -#include<krb5.h> -#include<kherror.h> -#include<strsafe.h> -#include<assert.h> - -khm_int32 KHMAPI -enctype_toString(const void * data, khm_size cbdata, - wchar_t *destbuf, khm_size *pcbdestbuf, - khm_int32 flags) -{ - int resid = 0; - int etype; - wchar_t buf[256]; - size_t cblength; - - if(cbdata != sizeof(khm_int32)) - return KHM_ERROR_INVALID_PARAM; - - etype = *((khm_int32 *) data); - - switch(etype) { - case ENCTYPE_NULL: - resid = IDS_ETYPE_NULL; - break; - - case ENCTYPE_DES_CBC_CRC: - resid = IDS_ETYPE_DES_CBC_CRC; - break; - - case ENCTYPE_DES_CBC_MD4: - resid = IDS_ETYPE_DES_CBC_MD4; - break; - - case ENCTYPE_DES_CBC_MD5: - resid = IDS_ETYPE_DES_CBC_MD5; - break; - - case ENCTYPE_DES_CBC_RAW: - resid = IDS_ETYPE_DES_CBC_RAW; - break; - - case ENCTYPE_DES3_CBC_SHA: - resid = IDS_ETYPE_DES3_CBC_SHA; - break; - - case ENCTYPE_DES3_CBC_RAW: - resid = IDS_ETYPE_DES3_CBC_RAW; - break; - - case ENCTYPE_DES_HMAC_SHA1: - resid = IDS_ETYPE_DES_HMAC_SHA1; - break; - - case ENCTYPE_DES3_CBC_SHA1: - resid = IDS_ETYPE_DES3_CBC_SHA1; - break; - - case ENCTYPE_AES128_CTS_HMAC_SHA1_96: - resid = IDS_ETYPE_AES128_CTS_HMAC_SHA1_96; - break; - - case ENCTYPE_AES256_CTS_HMAC_SHA1_96: - resid = IDS_ETYPE_AES256_CTS_HMAC_SHA1_96; - break; - - case ENCTYPE_CAMELLIA128_CTS_CMAC: - resid = IDS_ETYPE_CAMELLIA128_CTS_CMAC; - break; - - case ENCTYPE_CAMELLIA256_CTS_CMAC: - resid = IDS_ETYPE_CAMELLIA256_CTS_CMAC; - break; - - case ENCTYPE_ARCFOUR_HMAC: - resid = IDS_ETYPE_ARCFOUR_HMAC; - break; - - case ENCTYPE_ARCFOUR_HMAC_EXP: - resid = IDS_ETYPE_ARCFOUR_HMAC_EXP; - break; - - case ENCTYPE_UNKNOWN: - resid = IDS_ETYPE_UNKNOWN; - break; - -#if 0 - case ENCTYPE_LOCAL_DES3_HMAC_SHA1: - resid = IDS_ETYPE_LOCAL_DES3_HMAC_SHA1; - break; - - case ENCTYPE_LOCAL_RC4_MD4: - resid = IDS_ETYPE_LOCAL_RC4_MD4; - break; -#endif - } - - if(resid != 0) { - LoadString(hResModule, (UINT) resid, buf, ARRAYLENGTH(buf)); - } else { - StringCbPrintf(buf, sizeof(buf), L"#%d", etype); - } - - StringCbLength(buf, ARRAYLENGTH(buf), &cblength); - cblength += sizeof(wchar_t); - - if(!destbuf || *pcbdestbuf < cblength) { - *pcbdestbuf = cblength; - return KHM_ERROR_TOO_LONG; - } else { - StringCbCopy(destbuf, *pcbdestbuf, buf); - *pcbdestbuf = cblength; - return KHM_ERROR_SUCCESS; - } -} - -khm_int32 KHMAPI -addr_list_comp(const void *d1, khm_size cb_d1, - const void *d2, khm_size cb_d2) -{ - if (cb_d1 < cb_d2) - return -1; - if (cb_d1 > cb_d2) - return 1; - return memcmp(d1, d2, cb_d1); -} - -khm_int32 KHMAPI -addr_list_toString(const void *d, khm_size cb_d, - wchar_t *buf, khm_size *pcb_buf, - khm_int32 flags) -{ - wchar_t tbuf[2048]; - wchar_t * strpos; - khm_size cbleft; - size_t t; - k5_serial_address * addrs; - - if (cb_d == 0 || d == NULL) { - tbuf[0] = L'\0'; - } else { - addrs = (k5_serial_address *) d; - - strpos = tbuf; - cbleft = sizeof(tbuf); - tbuf[0] = L'\0'; - - while (TRUE) { - if (cb_d < sizeof(*addrs) || - addrs->magic != K5_SERIAL_ADDRESS_MAGIC || - cb_d < sizeof(*addrs) + addrs->length - sizeof(khm_int32)) - break; - - if (strpos != tbuf) { - if (FAILED(StringCbCatEx(strpos, cbleft, L" ", - &strpos, &cbleft, - 0))) - break; - } - -#ifdef DEBUG - assert(*strpos == L'\0'); -#endif - - one_addr(addrs, strpos, cbleft); - - t = 0; - if (FAILED(StringCchLength(strpos, - cbleft / sizeof(wchar_t), - &t))) - break; - - strpos += t; - cbleft -= t * sizeof(wchar_t); - - t = sizeof(*addrs) + addrs->length - sizeof(khm_int32); - addrs = (k5_serial_address *) BYTEOFFSET(addrs, t); - cb_d -= t; - } - } - - StringCbLength(tbuf, sizeof(tbuf), &t); - - if (!buf || *pcb_buf < t) { - *pcb_buf = t; - return KHM_ERROR_TOO_LONG; - } - - StringCbCopy(buf, *pcb_buf, tbuf); - *pcb_buf = t; - - return KHM_ERROR_SUCCESS; -} - -khm_int32 KHMAPI -krb5flags_toString(const void *d, - khm_size cb_d, - wchar_t *buf, - khm_size *pcb_buf, - khm_int32 f) -{ - wchar_t sbuf[32]; - int i = 0; - khm_size cb; - khm_int32 flags; - - flags = *((khm_int32 *) d); - - if (flags & TKT_FLG_FORWARDABLE) - sbuf[i++] = L'F'; - - if (flags & TKT_FLG_FORWARDED) - sbuf[i++] = L'f'; - - if (flags & TKT_FLG_PROXIABLE) - sbuf[i++] = L'P'; - - if (flags & TKT_FLG_PROXY) - sbuf[i++] = L'p'; - - if (flags & TKT_FLG_MAY_POSTDATE) - sbuf[i++] = L'D'; - - if (flags & TKT_FLG_POSTDATED) - sbuf[i++] = L'd'; - - if (flags & TKT_FLG_INVALID) - sbuf[i++] = L'i'; - - if (flags & TKT_FLG_RENEWABLE) - sbuf[i++] = L'R'; - - if (flags & TKT_FLG_INITIAL) - sbuf[i++] = L'I'; - - if (flags & TKT_FLG_HW_AUTH) - sbuf[i++] = L'H'; - - if (flags & TKT_FLG_PRE_AUTH) - sbuf[i++] = L'A'; - - sbuf[i++] = L'\0'; - - cb = i * sizeof(wchar_t); - - if (!buf || *pcb_buf < cb) { - *pcb_buf = cb; - return KHM_ERROR_TOO_LONG; - } else { - StringCbCopy(buf, *pcb_buf, sbuf); - *pcb_buf = cb; - return KHM_ERROR_SUCCESS; - } -} - -khm_int32 KHMAPI -kvno_toString(const void * data, khm_size cbdata, - wchar_t *destbuf, khm_size *pcbdestbuf, - khm_int32 flags) -{ - int resid = 0; - int kvno; - wchar_t buf[256]; - size_t cblength; - - if (cbdata != sizeof(khm_int32)) - return KHM_ERROR_INVALID_PARAM; - - kvno = *((khm_int32 *) data); - - StringCbPrintf(buf, sizeof(buf), L"#%d", kvno); - - StringCbLength(buf, ARRAYLENGTH(buf), &cblength); - cblength += sizeof(wchar_t); - - if (!destbuf || *pcbdestbuf < cblength) { - *pcbdestbuf = cblength; - return KHM_ERROR_TOO_LONG; - } else { - StringCbCopy(destbuf, *pcbdestbuf, buf); - *pcbdestbuf = cblength; - return KHM_ERROR_SUCCESS; - } -} - -khm_int32 -serialize_krb5_addresses(krb5_address ** a, void * buf, size_t * pcbbuf) -{ - k5_serial_address * addr; - khm_size cb_req; - khm_size t; - khm_boolean overflow = FALSE; - - addr = (k5_serial_address *) buf; - cb_req = 0; - - for(; *a; a++) { - t = sizeof(k5_serial_address) + (*a)->length - sizeof(khm_int32); - cb_req += t; - if (cb_req < *pcbbuf) { - addr->magic = K5_SERIAL_ADDRESS_MAGIC; - addr->addrtype = (*a)->addrtype; - addr->length = (*a)->length; - memcpy(&addr->data, (*a)->contents, (*a)->length); - - addr = (k5_serial_address *) BYTEOFFSET(addr, t); - } else { - overflow = TRUE; - } - } - - *pcbbuf = cb_req; - - return (overflow)?KHM_ERROR_TOO_LONG: KHM_ERROR_SUCCESS; -} - -void -one_addr(k5_serial_address *a, wchar_t * buf, khm_size cbbuf) -{ - wchar_t retstr[256]; - struct hostent *h = NULL; - int no_resolve = 1; - - retstr[0] = L'\0'; - - if ((a->addrtype == ADDRTYPE_INET && a->length == 4) -#ifdef AF_INET6 - || (a->addrtype == ADDRTYPE_INET6 && a->length == 16) -#endif - ) - { - int af = AF_INET; -#ifdef AF_INET6 - if (a->addrtype == ADDRTYPE_INET6) - af = AF_INET6; -#endif - if (!no_resolve) { -#ifdef HAVE_GETIPNODEBYADDR - int err; - h = getipnodebyaddr(&a->data, a->length, af, &err); - if (h) { - StringCbPrintf(retstr, sizeof(retstr), L"%S", h->h_name); - freehostent(h); - } - else - h = gethostbyaddr(&a->data, a->length, af); - if (h) { - StringCbPrintf(retstr, sizeof(retstr), L"%S", h->h_name); - } -#endif - if (h) - goto _copy_string; - } - if (no_resolve || !h) { -#ifdef HAVE_INET_NTOP - char buf[46]; - const char *name = inet_ntop(a->addrtype, &a->data, buf, sizeof(buf)); - if (name) { - StringCbPrintf(retstr, sizeof(retstr), L"%S", name); - goto _copy_string; - } -#else - if (a->addrtype == ADDRTYPE_INET) { - khm_ui_4 addr = a->data; - StringCbPrintf(retstr, sizeof(retstr), - L"%d.%d.%d.%d", - (int) (addr & 0xff), - (int) ((addr >> 8) & 0xff), - (int) ((addr >> 16)& 0xff), - (int) ((addr >> 24)& 0xff)); - goto _copy_string; - } -#endif - } - } - - { - wchar_t tmpfmt[128]; - LoadString(hResModule, IDS_UNK_ADDR_FMT, tmpfmt, sizeof(tmpfmt)/sizeof(wchar_t)); - StringCbPrintf(retstr, sizeof(retstr), tmpfmt, a->addrtype); - } - - _copy_string: - StringCbCopy(buf, cbbuf, retstr); -} diff --git a/src/windows/identity/plugins/krb5/datarep.h b/src/windows/identity/plugins/krb5/datarep.h deleted file mode 100644 index d81e7b91e..000000000 --- a/src/windows/identity/plugins/krb5/datarep.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KRB_DATAREP_H -#define __KHIMAIRA_KRB_DATAREP_H - -typedef struct tag_k5_serial_address { - khm_int32 magic; /* should be K5_SERIAL_ADDRESS_MAGIC */ - khm_int32 addrtype; /* Address type. We only know what to - do with ADDRTYPE_INET and - ADDRTYPE_INET6 */ - khm_size length; /* number of bytes of data in [data]. - This should always be greater than - sizeof(khm_int32) */ - khm_int32 data; /* actually, &data is the beginning of - the data buffer that is [length] - bytes long. */ -} k5_serial_address; - -#define K5_SERIAL_ADDRESS_MAGIC 0x44ce832d - -khm_int32 KHMAPI -enctype_toString(const void * data, khm_size cbdata, - wchar_t *destbuf, khm_size *pcbdestbuf, - khm_int32 flags); - -khm_int32 KHMAPI -addr_list_comp(const void *d1, khm_size cb_d1, - const void *d2, khm_size cb_d2); - -khm_int32 KHMAPI -addr_list_toString(const void *, khm_size, wchar_t *, - khm_size *, khm_int32); - -khm_int32 KHMAPI -krb5flags_toString(const void *, khm_size, wchar_t *, - khm_size *, khm_int32); - -khm_int32 KHMAPI -kvno_toString(const void * data, khm_size cbdata, - wchar_t *destbuf, khm_size *pcbdestbuf, - khm_int32 flags); - -khm_int32 KHMAPI -renew_for_cb(khm_handle cred, khm_int32 id, void * buffer, - khm_size * pcbsize); - -khm_int32 -serialize_krb5_addresses(krb5_address ** a, void * buf, size_t * pcbbuf); - -void -one_addr(k5_serial_address *a, wchar_t * buf, khm_size cbbuf); -#endif diff --git a/src/windows/identity/plugins/krb5/errorfuncs.c b/src/windows/identity/plugins/krb5/errorfuncs.c deleted file mode 100644 index d99c4bf6d..000000000 --- a/src/windows/identity/plugins/krb5/errorfuncs.c +++ /dev/null @@ -1,297 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<krbcred.h> -#include<kherror.h> - -extern void (__cdecl *pinitialize_krb_error_func)(); -extern void (__cdecl *pinitialize_kadm_error_table)(); - - -khm_int32 init_error_funcs() -{ - return KHM_ERROR_SUCCESS; -} - -khm_int32 exit_error_funcs() -{ - return KHM_ERROR_SUCCESS; -} - -#ifdef DEPRECATED_REMOVABLE -HWND GetRootParent (HWND Child) -{ - HWND Last; - while (Child) - { - Last = Child; - Child = GetParent (Child); - } - return Last; -} -#endif - -void khm_err_describe(long code, wchar_t * buf, khm_size cbbuf, - DWORD * suggestion, - kherr_suggestion * suggest_code) -{ - const char * com_err_msg; - int offset; - long table_num; - DWORD msg_id = 0; - DWORD sugg_id = 0; - kherr_suggestion sugg_code = KHERR_SUGGEST_NONE; - - if (suggestion == NULL || buf == NULL || cbbuf == 0 || suggest_code == 0) - return; - - *buf = L'\0'; - - offset = (int) (code & 255); - table_num = code - offset; - com_err_msg = perror_message(code); - - *suggestion = 0; - *suggest_code = KHERR_SUGGEST_NONE; - - if (WSABASEERR <= code && code < (WSABASEERR + 1064)) { - /* winsock error */ - table_num = WSABASEERR; - offset = code - WSABASEERR; - } - - switch(table_num) - { - case krb_err_base: - case kadm_err_base: - case WSABASEERR: - break; - default: - - if (code == KRB5KRB_AP_ERR_BAD_INTEGRITY) { - *suggestion = MSG_ERR_S_INTEGRITY; - } - *suggest_code = KHERR_SUGGEST_RETRY; - AnsiStrToUnicode(buf, cbbuf, com_err_msg); - return; - } - - if (table_num == krb_err_base) { - switch(offset) { - case KDC_NAME_EXP: /* 001 Principal expired */ - case KDC_SERVICE_EXP: /* 002 Service expired */ - case KDC_AUTH_EXP: /* 003 Auth expired */ - case KDC_PKT_VER: /* 004 Protocol version unknown */ - case KDC_P_MKEY_VER: /* 005 Wrong master key version */ - case KDC_S_MKEY_VER: /* 006 Wrong master key version */ - case KDC_BYTE_ORDER: /* 007 Byte order unknown */ - case KDC_PR_N_UNIQUE: /* 009 Principal not unique */ - case KDC_NULL_KEY: /* 010 Principal has null key */ - case KDC_GEN_ERR: /* 011 Generic error from KDC */ - case INTK_W_NOTALL : /* 061 Not ALL tickets returned */ - case INTK_PROT : /* 063 Protocol Error */ - case INTK_ERR : /* 070 Other error */ - msg_id = MSG_ERR_UNKNOWN; - sugg_code = KHERR_SUGGEST_RETRY; - break; - - case KDC_PR_UNKNOWN: /* 008 Principal unknown */ - msg_id = MSG_ERR_PR_UNKNOWN; - sugg_code = KHERR_SUGGEST_RETRY; - break; - case GC_TKFIL : /* 021 Can't read ticket file */ - case GC_NOTKT : /* 022 Can't find ticket or TGT */ - msg_id = MSG_ERR_TKFIL; - sugg_id = MSG_ERR_S_TKFIL; - sugg_code = KHERR_SUGGEST_RETRY; - break; - case MK_AP_TGTEXP : /* 026 TGT Expired */ - /* no extra error msg */ - break; - - case RD_AP_TIME : /* 037 delta_t too big */ - msg_id = MSG_ERR_CLOCKSKEW; - sugg_id = MSG_ERR_S_CLOCKSKEW; - sugg_code = KHERR_SUGGEST_RETRY; - break; - - case RD_AP_UNDEC : /* 031 Can't decode - authenticator */ - case RD_AP_EXP : /* 032 Ticket expired */ - case RD_AP_NYV : /* 033 Ticket not yet valid */ - case RD_AP_REPEAT : /* 034 Repeated request */ - case RD_AP_NOT_US : /* 035 The ticket isn't for us */ - case RD_AP_INCON : /* 036 Request is inconsistent */ - case RD_AP_BADD : /* 038 Incorrect net address */ - case RD_AP_VERSION : /* 039 protocol version mismatch */ - case RD_AP_MSG_TYPE : /* 040 invalid msg type */ - case RD_AP_MODIFIED : /* 041 message stream modified */ - case RD_AP_ORDER : /* 042 message out of order */ - case RD_AP_UNAUTHOR : /* 043 unauthorized request */ - /* no extra error msg */ - sugg_code = KHERR_SUGGEST_RETRY; - break; - - case GT_PW_NULL: /* 51 Current PW is null */ - case GT_PW_BADPW: /* 52 Incorrect current password */ - case GT_PW_PROT: /* 53 Protocol Error */ - case GT_PW_KDCERR: /* 54 Error returned by KDC */ - case GT_PW_NULLTKT: /* 55 Null tkt returned by KDC */ - /* no error msg yet */ - sugg_code = KHERR_SUGGEST_RETRY; - break; - - /* Values returned by send_to_kdc */ - case SKDC_RETRY : /* 56 Retry count exceeded */ - case SKDC_CANT : /* 57 Can't send request */ - msg_id = MSG_ERR_KDC_CONTACT; - break; - /* no error message on purpose: */ - case INTK_BADPW : /* 062 Incorrect password */ - sugg_code = KHERR_SUGGEST_RETRY; - break; - default: - /* no extra error msg */ - break; - } - } else if (table_num == kadm_err_base) { - switch(code) { - case KADM_INSECURE_PW: - /* if( kadm_info != NULL ){ - * wsprintf(buf, "%s\n%s", com_err_msg, kadm_info); - * } else { - * wsprintf(buf, "%s\nPlease see the help file for information " - * "about secure passwords.", com_err_msg); - * } - * com_err_msg = buf; - */ - - /* The above code would be preferred since it allows site - * specific information to be delivered from the Kerberos - * server. However the message box is too small for VGA - * screens. It does work well if we only have to support - * 1024x768 - */ - - msg_id = MSG_ERR_INSECURE_PW; - sugg_code = KHERR_SUGGEST_RETRY; - break; - - default: - /* no extra error msg */ - break; - } - } else if (table_num == WSABASEERR) { - switch(code) { - case WSAENETDOWN: - msg_id = MSG_ERR_NETDOWN; - sugg_id = MSG_ERR_S_NETRETRY; - sugg_code = KHERR_SUGGEST_RETRY; - break; - - case WSATRY_AGAIN: - msg_id = MSG_ERR_TEMPDOWN; - sugg_id = MSG_ERR_S_TEMPDOWN; - sugg_code = KHERR_SUGGEST_RETRY; - break; - - case WSAENETUNREACH: - case WSAENETRESET: - case WSAECONNABORTED: - case WSAECONNRESET: - case WSAETIMEDOUT: - case WSAECONNREFUSED: - case WSAEHOSTDOWN: - case WSAEHOSTUNREACH: - msg_id = MSG_ERR_NOHOST; - sugg_id = MSG_ERR_S_NOHOST; - sugg_code = KHERR_SUGGEST_RETRY; - break; - } - } - - if (msg_id != 0) { - FormatMessage(FORMAT_MESSAGE_FROM_HMODULE | - FORMAT_MESSAGE_IGNORE_INSERTS, - KHERR_HMODULE, - msg_id, - 0, - buf, - (int) (cbbuf / sizeof(buf[0])), - NULL); - } - - if (sugg_id != 0) { - *suggestion = sugg_id; - } - - if (sugg_code != KHERR_SUGGEST_NONE) - *suggest_code = sugg_code; -} - -#ifdef DEPRECATED_REMOVABLE -int lsh_com_err_proc (LPSTR whoami, long code, - LPSTR fmt, va_list args) -{ - int retval; - HWND hOldFocus; - char buf[1024], *cp; - WORD mbformat = MB_OK | MB_ICONEXCLAMATION; - - cp = buf; - memset(buf, '\0', sizeof(buf)); - cp[0] = '\0'; - - if (code) - { - err_describe(buf, code); - while (*cp) - cp++; - } - - if (fmt) - { - if (fmt[0] == '%' && fmt[1] == 'b') - { - fmt += 2; - mbformat = va_arg(args, WORD); - /* if the first arg is a %b, we use it for the message - box MB_??? flags. */ - } - if (code) - { - *cp++ = '\n'; - *cp++ = '\n'; - } - wvsprintfA((LPSTR)cp, fmt, args); - } - hOldFocus = GetFocus(); - retval = MessageBoxA(/*GetRootParent(hOldFocus)*/NULL, buf, whoami, - mbformat | MB_ICONHAND | MB_TASKMODAL); - SetFocus(hOldFocus); - return retval; -} -#endif diff --git a/src/windows/identity/plugins/krb5/errorfuncs.h b/src/windows/identity/plugins/krb5/errorfuncs.h deleted file mode 100644 index c03eba575..000000000 --- a/src/windows/identity/plugins/krb5/errorfuncs.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_ERR_H -#define __KHIMAIRA_ERR_H - -/* All error handling and reporting related functions for the krb4/5 - and AFS plugins */ - -#include <errno.h> -#include <com_err.h> -/* - * This is a hack needed because the real com_err.h does - * not define err_func. We need it in the case where - * we pull in the real com_err instead of the krb4 - * impostor. - */ -#ifndef _DCNS_MIT_COM_ERR_H -typedef LPSTR (*err_func)(int, long); -#endif - -#include <krberr.h> -#include <kadm_err.h> - -#define kadm_err_base ERROR_TABLE_BASE_kadm - -#include <stdarg.h> - -#ifndef KRBERR -#define KRBERR(code) (code + krb_err_base) -#endif - -/*! \internal - \brief Describe an error - - \param[in] code Error code returned by Kerberos - \param[out] buf Receives the error string - \param[in] cbbuf Size of buffer pointed to by \a buf - \param[out] suggestion Message ID of suggestion - \param[out] suggest_code Suggestion ID -*/ -void khm_err_describe(long code, wchar_t * buf, khm_size cbbuf, - DWORD * suggestion, - kherr_suggestion * suggest_code); - -/* */ -khm_int32 init_error_funcs(); - -khm_int32 exit_error_funcs(); - - -#endif diff --git a/src/windows/identity/plugins/krb5/images/deleted.ico b/src/windows/identity/plugins/krb5/images/deleted.ico deleted file mode 100644 index a8063f9ee72d8b209717fad18acb3384f8309e44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1406 zcma)+El*rg5Qbk;nyf&8S%qj(MUN>KPl7??CjAE(#42=?CYv0GXq!~j@C#N|l+j>{ zLXeOq1w+_0Vfvi8y9uI#yL&$7z30sP+&OnwTH&+4uDU+Fmd4E9(Yo}8wxSVzO@?tf zUs;9|iLWM;VW4NK*=(lSubJ+Ce%0#gsz#%c*4Eavv9Y1?c&yFMO>J#$X?uHH2L}h* z+uPIb?yh!rb~HIo?eC{P=|cHC^yA`>E^co0@!NNdjOMgPiy<^LLo+n%S`JGb-O(N0 z(H*^SYv>KV5j6CM&Y(aK^gs`UKu_W%&M0T2H~fu6#wJs$?CA^!gTY`h7zzmngTY`h z7z~EOgu!4i7z_r3q0nJ47z_r3!C<gNgTvsk&XHLaKw<2kMhhBxe`Hu3bH~U@>abK9 zxamwB7Kf$E0*Axla5x+eN0kZ=hrwZR7<%a(4u`>E2)vTMN{G+!A+GZF>Oh5eV^x(J z?*>!Dv|-R-YIrwpHj*^F8{Tys<&BPi!@uF*kEr3_s7-^R!O*BfKQ^jTPmjV#-;a?R z1bzWqz!CV>(RL1M5O752;KAy+*%Yt@ECEDdSg!yq!Ny=wAOtLYY2@Kd0+#6YD3<;< z^ix2CAz?@u5{85!VW`&$hJYbqNEiYJ($H8BL&A_SBn+gcp~H|cBn$~a;vXbSHYSUl z98T<TWaaK_TyOP7hlhtcIy%zH$%&@Zsm{;Ob#`{9%gak$U0vz=`dYWQx4OT-*W=@( z?*67epPuqNo>1NX8|VZ1D(ZQA*rU4U^XG#!FJb5xcjgOG4|Q>Gv1y1Omf`>Jb9cF- zukT^?Bp>45<FJT(L|oS}e|bFYdSU-`EIqyFzmEUH*{f%*$K<H?TwlzG`bqx)6AcKu diff --git a/src/windows/identity/plugins/krb5/images/krb5plugin.ico b/src/windows/identity/plugins/krb5/images/krb5plugin.ico deleted file mode 100644 index 791b359694d86dcdc85bd083d502db8056283771..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7278 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 Fe*s!^o~Hl+ diff --git a/src/windows/identity/plugins/krb5/images/modified.ico b/src/windows/identity/plugins/krb5/images/modified.ico deleted file mode 100644 index 733d9d5348bd94acdca867d77c36a83c42efcc92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1406 zcmbu9F>4z^5QU$K0xAr$8dWM1S8+X+TlWGts@)Cw2WnENavd-TwsVmLQl!x@P?aK{ zT5jS>g+T;jcZL*`Z}%cd0wxK$)9&89+nx8_?46`N&VvKB<K<In#MKL0m7dY|)TeJ3 z-MG8n+l6z9pXT#!pyyJn)k>?+E8Ts1r(Un8e!s8%{e2CGLyblwjmKjh9v<rG=t$G) zRFla>CnqO5K0em`RqFIKb)mKLOX%bJtJb%-dj0+bMn-d5p+y%OnxPq*RV}+Ij_&A= z?&ywQmlgDaUI+?$L1$2)2YR3fLZByc5@$4Lqc{AGM8+ahs@c;S3<iV2U@$Z!7z_r3 z!C){L8YT<|gTY`h7z_;^27|$1Fc=I5OEfqP4yzoQtpX^F^(?fYq1Q)-#W8n`oTLs* zD+4#33x~yFX=Q=K;cz${4u_+a3J!<CVQ?5~=^PG+!C?rzlD?G?pY9}X<*n6$3h%<K zR%*NpOa;?|L4m2@UAS3DQt&Q#x9w=&==c}>3;uPB3jT%K6c`E&g*w!2qblv`Q5fm# zHd2GYFJKEe0>8Gkm4g}t98o!Vu(sVS3RnV`03tAKuK+B;!eCM$1T6e$<Y7+&mZ<e; zEcI=uyMP8m!jLc|3<*QR&|W7P0)~VkVF(yVLt{P+2}8n=Fp!#t4nx9_FeCtpe~>I$ zm`rkVII+W#Eq9&cdak!RJ3G^CHq-g}xfY9suCA`MTrPEeeXX0D8*MflZMR$9-{0%u z;X!xbQg1FV`HtsQw|)b4AYY4W-Wt~EPsiY=qs|?$?8h<q%eb@1d~E*z-v5>7H{LG! QV|`Z#{_CFnTidPs4kGa7o&W#< diff --git a/src/windows/identity/plugins/krb5/images/new.ico b/src/windows/identity/plugins/krb5/images/new.ico deleted file mode 100644 index 1049eb2148f1596a26c22ad7e4522af43af9c49c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1406 zcmb7^p-&u95XL`Jnw&s@IfZCZMUPorgC`-mpmCG_2bhXe=q61_o<p=vDr)!(PF0lA zV2UCa64C^4BrB%B_x7$0RCVuW_szHO&G*}Rdnc{%SzlK>-o2E@jNTAcdPS^g#JLTI z>vFuZOs5iGO{c?!Gega0GtGX^bpPXvR##Uw8jZBJwx*4Z4UNZRZEkLAYimo}+uJ%g zIMCkSo_2S4wX?IM>HF0Fe(Iwxl)pmXFYa`4bE6MmzhPvA6NQK&H8evrG^<(;QyksV z9o^9#y)G;01-+0I^n%Vsfgb3A9teS+<Vl{<oQ<>LZxk{XnNrQ3lfhsx7z_qOLxRCz zFc=I5gP~!<U@#aA27|%S&|xqb3<iV2V6a4k!{D&Wk=Z(c!nJ-15d?aDWLO+?$H*z_ zu(URC(-}A{4ohnb91e%W;cz${tyOS13=V_CP+RA4I1CO$;FX+P3-K8~<gLB6J5b?W znAKX1cY&#3S}-Uu6}$^K3q=av1@E>U%^My6f`7rkZc)L%(3=87fuYccx@~l&Jv|Cn z&UG8<LEsm#1ss82+uF)O4+4&;96VUtZWaYB0ZRZ87`9gcmSABpDG&k{z65pHlYk{^ zKN?GY8|p5g!H_T{3<*QRkTA5@35I|nVMrJP2Fei3haq7|7!n3b6X-A`3<*O5koX71 zl7-16r-qX|9NB8uIj-0Gti!`Y9UUF%`1n{SCnq{TKiApWnJzCcb#-;6>+5UX-rnlr z;X#j&kGk(upH5Ht9Z%_Q{SDL$^;%Zz*0g5-eXwkC3`>{UvfA^!|06KJpU=q`QeEG7 zUDwZtDK+o9N!Kk_wA+)(r29L6{_Otq^}Xi(Tz##yJf0+oPx7G;{MWtsH-t7_L>({l Kw~X&-U5(!qarT4& diff --git a/src/windows/identity/plugins/krb5/images/normal.ico b/src/windows/identity/plugins/krb5/images/normal.ico deleted file mode 100644 index 56a702fee1913ebd6925a6d7fcf7f0e123be3062..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1406 zcmd6np>A725Jj(5S2Bo{m>3zfK@A=h8XhUcIBe8E2q`c!u2d<~vVgWyK}o*AsGuI~ zkOl=riYhf>mI|h4$Bk4Kv?}X+p52}6-M#0{K3f`a@9n9smrtb$qZdS%o)H6$Xlt<T zAIF2obT0AHe7@~y8EUy)YWZcU`_Jz+91b-ajkL3~qw#pG$z-DGbgKRReH|PeXf~Va z`1n{yM@Kq5Jk<PE>f|K#Mr-BQ(5Lk`t#5Dj`ol+zjBuh6u}uxl&<xGGmfI<g?&yy0 z=#Ji(HS~twNE&)Wr&FK@dY}hFpeK2fXOy$i8ve#c#v)Uy>}d=JgTY`h7zzmngTY`h z7z~EOgu!4i7z_r3q0nJ47z_r3!C<gNgTvsk&XHLaK%wt<BZ5Hhj|_`r?ie|nIxJNN zzH|l-i^Ec7fy3c&I2;a#qe=yb!{9JD483#?hr{471YSv7CB$cYlUI3rb)dq#F{?_A zcY~>6+AwG^HM|>NHa2N^H@xdO${QX3hJVAqA5p`<QJV%sgP~D}er!~wo*spswjU!k z2>b%JfFtm$qwO5jAmE73!GqOtvnXH*SOSQ^uwDUJf`!4PKnPg)5bVR51T4|(Q7rv! z=%;`NL&A_SBn$~d!ceah3;{#JkT3)cY(p>~hJ+zuNEq0fK!+h=NEi};#6Q?9S(r?6 z_Hc5CBWv$I$MszAbb5NKv$HcT77Lx9pKG;R>GJYYS65fMzP{GY&5iEv?)32Rpv`8Z z`|qi@7Z?1F=Tx`<271SSmGyml+Oxl1yT4q0?k>xIUc3Kg{u}R~pKn_S{_CFnTRg7& E0S~(Oi~s-t diff --git a/src/windows/identity/plugins/krb5/krb5configcc.c b/src/windows/identity/plugins/krb5/krb5configcc.c deleted file mode 100644 index 8b0286f0f..000000000 --- a/src/windows/identity/plugins/krb5/krb5configcc.c +++ /dev/null @@ -1,582 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -#if _WIN32_WINNT < 0x501 -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x501 -#endif - -#include<krbcred.h> -#include<krb5.h> -#include<assert.h> -#include<lm.h> -#include<commctrl.h> -#include<shlwapi.h> - -#include<strsafe.h> - -typedef struct tag_k5_file_cc { - wchar_t path[MAX_PATH]; - khm_int32 flags; -} k5_file_cc; - -#define K5_FCC_ALLOC_INCR 8 - -#define K5_FCC_FLAG_EXISTS 1 - -typedef struct tag_k5_ccc_data { - khm_boolean inc_api; - khm_boolean inc_mslsa; - k5_file_cc * file_ccs; - khm_size n_file_ccs; - khm_size nc_file_ccs; -} k5_ccc_data; - -typedef struct tag_k5_ccc_dlg_data { - khui_config_node node; - k5_ccc_data save; - k5_ccc_data work; -} k5_ccc_dlg_data; - -void k5_free_file_ccs(k5_ccc_data * d) { - if (d->file_ccs) - PFREE(d->file_ccs); - d->n_file_ccs = 0; - d->nc_file_ccs = 0; -} - -void k5_flush_file_ccs(k5_ccc_data * d) { - d->n_file_ccs = 0; -} - -void k5_del_file_cc(k5_ccc_data * d, khm_size idx) { - if (idx > d->n_file_ccs) - return; - - if (idx < d->n_file_ccs - 1) { - MoveMemory(&d->file_ccs[idx], - &d->file_ccs[idx + 1], - sizeof(d->file_ccs[0]) * (d->n_file_ccs - (idx + 1))); - } - - d->n_file_ccs--; -} - -void k5_add_file_cc(k5_ccc_data * d, wchar_t * path) { - khm_size i; - khm_size cch; - - if (FAILED(StringCchLength(path, MAX_PATH, &cch)) || - cch == 0) - return; - - /* see if it's there first */ - for (i=0; i < d->n_file_ccs; i++) { - if(!_wcsicmp(d->file_ccs[i].path, path)) - return; - } - - if (d->n_file_ccs == d->nc_file_ccs) { - k5_file_cc * f; - - d->nc_file_ccs = UBOUNDSS(d->n_file_ccs + 1, - K5_FCC_ALLOC_INCR, - K5_FCC_ALLOC_INCR); -#ifdef DEBUG - assert(d->nc_file_ccs > d->n_file_ccs); -#endif - f = PMALLOC(sizeof(*f) * d->nc_file_ccs); - ZeroMemory(f, sizeof(*f) * d->nc_file_ccs); - - if (d->n_file_ccs > 0) { -#ifdef DEBUG - assert(d->file_ccs != NULL); -#endif - memcpy(f, d->file_ccs, sizeof(*f) * d->n_file_ccs); - } - if (d->file_ccs) - PFREE(d->file_ccs); - d->file_ccs = f; - } - - StringCbCopy(d->file_ccs[d->n_file_ccs].path, - sizeof(d->file_ccs[0].path), - path); - if(PathFileExists(path)) - d->file_ccs[d->n_file_ccs].flags = K5_FCC_FLAG_EXISTS; - else - d->file_ccs[d->n_file_ccs].flags = 0; - - d->n_file_ccs++; -} - -void k5_read_file_cc_data(k5_ccc_data * d) { - khm_int32 t; - wchar_t * fclist = NULL; - wchar_t * fc; - khm_size cb; - -#ifdef DEBUG - assert(csp_params); -#endif - - d->inc_api = TRUE; - t = TRUE; - khc_read_int32(csp_params, L"MsLsaList", &t); - d->inc_mslsa = t; - - if (khc_read_multi_string(csp_params, L"FileCCList", NULL, &cb) - != KHM_ERROR_TOO_LONG || - cb <= sizeof(wchar_t) * 2) { - - k5_flush_file_ccs(d); - } else { - fclist = PMALLOC(cb); -#ifdef DEBUG - assert(fclist); -#endif - khc_read_multi_string(csp_params, L"FileCCList", fclist, &cb); - - for(fc = fclist; fc && *fc; fc = multi_string_next(fc)) { - k5_add_file_cc(d, fc); - } - - PFREE(fclist); - } -} - -void k5_write_file_cc_data(k5_ccc_data * d) { - wchar_t * ms; - khm_size cb; - khm_size cbt; - khm_int32 t; - khm_size i; - -#ifdef DEBUG - assert(csp_params); -#endif - if (KHM_FAILED(khc_read_int32(csp_params, L"MsLsaList", &t)) || - !!t != !!d->inc_mslsa) { - khc_write_int32(csp_params, L"MsLsaList", !!d->inc_mslsa); - } - - if (d->n_file_ccs > 0) { - cb = d->n_file_ccs * MAX_PATH * sizeof(wchar_t); - ms = PMALLOC(cb); -#ifdef DEBUG - assert(ms); -#endif - multi_string_init(ms, cb); - - for(i=0; i<d->n_file_ccs; i++) { - cbt = cb; - multi_string_append(ms, &cbt, d->file_ccs[i].path); - } - - khc_write_multi_string(csp_params, L"FileCCList", ms); - - PFREE(ms); - } else { - if (khc_read_multi_string(csp_params, L"FileCCList", NULL, &cb) - != KHM_ERROR_TOO_LONG || - cb != sizeof(wchar_t) * 2) - - khc_write_multi_string(csp_params, L"FileCCList", L"\0\0"); - } -} - -void k5_copy_file_cc_data(k5_ccc_data * dest, const k5_ccc_data * src) { - khm_size i; - - k5_flush_file_ccs(dest); - dest->inc_mslsa = src->inc_mslsa; - dest->inc_api = src->inc_api; - - for (i=0; i < src->n_file_ccs; i++) { - k5_add_file_cc(dest, src->file_ccs[i].path); - } -} - -BOOL k5_ccc_get_mod(k5_ccc_dlg_data * d) { - khm_size i, j; - - if (!!d->work.inc_mslsa != !!d->save.inc_mslsa || - !!d->work.inc_api != !!d->save.inc_api || - d->work.n_file_ccs != d->save.n_file_ccs) - return TRUE; - - for (i=0; i < d->work.n_file_ccs; i++) { - for (j=0; j < d->save.n_file_ccs; j++) { - if (!_wcsicmp(d->work.file_ccs[i].path, - d->save.file_ccs[j].path)) - break; - } - if (j >= d->save.n_file_ccs) - return TRUE; - } - - return FALSE; -} - -void k5_ccc_update_ui(HWND hwnd, k5_ccc_dlg_data * d) { - khm_size i; - HWND lv; - - if (d->work.inc_api) - CheckDlgButton(hwnd, IDC_CFG_INCAPI, BST_CHECKED); - else - CheckDlgButton(hwnd, IDC_CFG_INCAPI, BST_UNCHECKED); - if (d->work.inc_mslsa) - CheckDlgButton(hwnd, IDC_CFG_INCMSLSA, BST_CHECKED); - else - CheckDlgButton(hwnd, IDC_CFG_INCMSLSA, BST_UNCHECKED); - - lv = GetDlgItem(hwnd, IDC_CFG_FCLIST); -#ifdef DEBUG - assert(lv); -#endif - ListView_DeleteAllItems(lv); - - for (i=0; i<d->work.n_file_ccs; i++) { - LVITEM lvi; - - ZeroMemory(&lvi, sizeof(lvi)); - - lvi.mask = LVIF_PARAM | LVIF_TEXT; - lvi.lParam = (LPARAM) i; - lvi.pszText = d->work.file_ccs[i].path; - - ListView_InsertItem(lv, &lvi); - } - - if (k5_ccc_get_mod(d)) { - khui_cfg_set_flags(d->node, - KHUI_CNFLAG_MODIFIED, - KHUI_CNFLAG_MODIFIED); - } else { - khui_cfg_set_flags(d->node, - 0, - KHUI_CNFLAG_MODIFIED); - } -} - -void k5_ccc_update_data(HWND hwnd, k5_ccc_data * d) { - if (IsDlgButtonChecked(hwnd, IDC_CFG_INCAPI) == BST_CHECKED) - d->inc_api = TRUE; - else - d->inc_api = FALSE; - - if (IsDlgButtonChecked(hwnd, IDC_CFG_INCMSLSA) == BST_CHECKED) - d->inc_mslsa = TRUE; - else - d->inc_mslsa = FALSE; - /* everything else is controlled by buttons */ -} - -INT_PTR CALLBACK -k5_ccconfig_dlgproc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - - k5_ccc_dlg_data * d; - - switch(uMsg) { - case WM_INITDIALOG: - d = PMALLOC(sizeof(*d)); -#ifdef DEBUG - assert(d); -#endif - ZeroMemory(d, sizeof(*d)); - k5_read_file_cc_data(&d->save); - k5_copy_file_cc_data(&d->work, &d->save); - - d->node = (khui_config_node) lParam; - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) d); -#pragma warning(pop) - - { - LVCOLUMN lvc; - HWND lv; - wchar_t buf[256]; - RECT r; - - lv = GetDlgItem(hwnd, IDC_CFG_FCLIST); -#ifdef DEBUG - assert(lv); -#endif - ZeroMemory(&lvc, sizeof(lvc)); - lvc.mask = LVCF_TEXT | LVCF_WIDTH; - - LoadString(hResModule, IDS_CFG_FCTITLE, - buf, ARRAYLENGTH(buf)); - - GetWindowRect(lv, &r); - - lvc.pszText = buf; - lvc.cx = (r.right - r.left) * 9 / 10; - - ListView_InsertColumn(lv, 0, &lvc); - } - - SendDlgItemMessage(hwnd, IDC_CFG_FCNAME, EM_SETLIMITTEXT, - MAX_PATH - 1, 0); - - k5_ccc_update_ui(hwnd, d); - break; - - case WM_COMMAND: - d = (k5_ccc_dlg_data *) (DWORD_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - break; - - switch(wParam) { - case MAKEWPARAM(IDC_CFG_ADD, BN_CLICKED): - { - wchar_t path[MAX_PATH]; - wchar_t cpath[MAX_PATH]; - khm_size i; - - GetDlgItemText(hwnd, IDC_CFG_FCNAME, - cpath, ARRAYLENGTH(cpath)); - - PathCanonicalize(path, cpath); - - if (!*path) - return TRUE; /* nothing to add */ - - for (i=0; i < d->work.n_file_ccs; i++) { - if (!_wcsicmp(path, d->work.file_ccs[i].path)) { - - /* allow the user to correct case, as appropriate */ - StringCbCopy(d->work.file_ccs[i].path, - sizeof(d->work.file_ccs[i].path), - path); - k5_ccc_update_ui(hwnd, d); - return TRUE; - } - } - - /* not there. we need to add. but check a few things - first */ - if (!PathFileExists(path)) { - wchar_t title[64]; - wchar_t text[128]; - - LoadString(hResModule, IDS_CFG_FCN_WARNING, - title, ARRAYLENGTH(title)); - - LoadString(hResModule, IDS_CFG_FCN_W_NOTFOUND, - text, ARRAYLENGTH(text)); -#if _WIN32_WINNT >= 0x501 - if (IS_COMMCTL6()) - { - EDITBALLOONTIP bt; - - bt.cbStruct = sizeof(bt); - bt.pszTitle = title; - bt.pszText = text; - bt.ttiIcon = TTI_WARNING; - - SendDlgItemMessage(hwnd, IDC_CFG_FCNAME, - EM_SHOWBALLOONTIP, - 0, - (LPARAM) &bt); - } else { -#endif - MessageBox(hwnd, text, title, MB_OK | MB_ICONWARNING); -#if _WIN32_WINNT >= 0x501 - } -#endif - } else if (PathIsRelative(path)) { - wchar_t title[64]; - wchar_t text[128]; - - LoadString(hResModule, IDS_CFG_FCN_WARNING, - title, ARRAYLENGTH(title)); - LoadString(hResModule, IDS_CFG_FCN_W_RELATIVE, - text, ARRAYLENGTH(text)); - -#if _WIN32_WINNT >= 0x501 - if (IS_COMMCTL6()) - { - EDITBALLOONTIP bt; - - bt.cbStruct = sizeof(bt); - bt.pszTitle = title; - bt.pszText = text; - bt.ttiIcon = TTI_WARNING; - - SendDlgItemMessage(hwnd, IDC_CFG_FCNAME, - EM_SHOWBALLOONTIP, - 0, - (LPARAM) &bt); - } else { -#endif - MessageBox(hwnd, text, title, MB_OK | MB_ICONWARNING); -#if _WIN32_WINNT >= 0x501 - } -#endif - } - - k5_add_file_cc(&d->work, path); - - k5_ccc_update_ui(hwnd, d); - } - return TRUE; - - case MAKEWPARAM(IDC_CFG_BROWSE, BN_CLICKED): - { - OPENFILENAME ofn; - wchar_t path[MAX_PATH * 8]; - wchar_t title[128]; - - ZeroMemory(&ofn, sizeof(ofn)); - ZeroMemory(path, sizeof(path)); - - GetDlgItemText(hwnd, IDC_CFG_FCNAME, - path, ARRAYLENGTH(path)); - - /* don't pass in invalid paths */ - if (!PathFileExists(path)) - *path = 0; - - ofn.lStructSize = sizeof(ofn); - ofn.hwndOwner = hwnd; - ofn.lpstrFilter = L"All files\0*.*\0\0"; - ofn.nFilterIndex = 1; - ofn.lpstrFile = path; - ofn.nMaxFile = ARRAYLENGTH(path); - ofn.lpstrTitle = title; - - LoadString(hResModule, IDS_CFG_FCOPENTITLE, - title, ARRAYLENGTH(title)); - - ofn.Flags = OFN_ALLOWMULTISELECT | - OFN_DONTADDTORECENT | - OFN_FORCESHOWHIDDEN | - OFN_EXPLORER; - - if (GetOpenFileName(&ofn)) { - wchar_t * p; - wchar_t spath[MAX_PATH]; - - p = multi_string_next(path); - if (p) { - /* multi select */ - for(;p && *p; p = multi_string_next(p)) { - StringCbCopy(spath, sizeof(spath), path); - PathAppend(spath, p); - - k5_add_file_cc(&d->work, spath); - } - } else { - /* single select */ - k5_add_file_cc(&d->work, path); - } - k5_ccc_update_ui(hwnd, d); - } - } - return TRUE; - - case MAKEWPARAM(IDC_CFG_REMOVE, BN_CLICKED): - { - khm_size i; - int lv_idx; - HWND lv; - wchar_t buf[MAX_PATH]; - - lv = GetDlgItem(hwnd, IDC_CFG_FCLIST); -#ifdef DEBUG - assert(lv); -#endif - - lv_idx = -1; - while((lv_idx = ListView_GetNextItem(lv, lv_idx, - LVNI_SELECTED)) != -1) { - ListView_GetItemText(lv, lv_idx, 0, buf, ARRAYLENGTH(buf)); - for (i=0; i < d->work.n_file_ccs; i++) { - if (!_wcsicmp(buf, d->work.file_ccs[i].path)) { - k5_del_file_cc(&d->work, i); - break; - } - } - } - - k5_ccc_update_ui(hwnd, d); - } - return TRUE; - - case MAKEWPARAM(IDC_CFG_INCAPI, BN_CLICKED): - case MAKEWPARAM(IDC_CFG_INCMSLSA, BN_CLICKED): - k5_ccc_update_data(hwnd, &d->work); - k5_ccc_update_ui(hwnd, d); - return TRUE; - } - break; - - case WM_DESTROY: - d = (k5_ccc_dlg_data *) (DWORD_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - break; - - k5_free_file_ccs(&d->work); - k5_free_file_ccs(&d->save); - PFREE(d); - SetWindowLongPtr(hwnd, DWLP_USER, 0); - return TRUE; - - case KHUI_WM_CFG_NOTIFY: - d = (k5_ccc_dlg_data *) (DWORD_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - break; - - switch(HIWORD(wParam)) { - case WMCFG_APPLY: - if (k5_ccc_get_mod(d)) { - k5_write_file_cc_data(&d->work); - k5_copy_file_cc_data(&d->save, &d->work); - khui_cfg_set_flags(d->node, - KHUI_CNFLAG_APPLIED, - KHUI_CNFLAG_APPLIED); - k5_ccc_update_ui(hwnd, d); - - kmq_post_sub_msg(k5_sub, KMSG_CRED, KMSG_CRED_REFRESH, 0, 0); - } - break; - } - } - return FALSE; -} diff --git a/src/windows/identity/plugins/krb5/krb5configdlg.c b/src/windows/identity/plugins/krb5/krb5configdlg.c deleted file mode 100644 index d6221123c..000000000 --- a/src/windows/identity/plugins/krb5/krb5configdlg.c +++ /dev/null @@ -1,2896 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<krbcred.h> -#include<krb5.h> -#include<assert.h> -#include<lm.h> -#include<commctrl.h> -#include<shlwapi.h> - -#include<strsafe.h> - -#pragma warning(disable: 4204 4221) - -typedef struct tag_k5_realm_kdc { - wchar_t name[K5_MAXCCH_HOST]; - khm_boolean admin; /* admin server? */ - khm_boolean master; /* master kdc? */ - khm_int32 flags; -} k5_realm_kdc; - -#define K5_RKFLAG_DELETED 1 -#define K5_RKFLAG_NEW 2 -#define K5_RKFLAG_MOD_ADMIN 4 -#define K5_RKFLAG_MOD_MASTER 8 - -typedef struct tag_k5_domain_map { - wchar_t name[K5_MAXCCH_HOST]; /* name of host that maps to a - realm */ - khm_int32 flags; -} k5_domain_map; - -#define K5_DMFLAG_DELETED 1 -#define K5_DMFLAG_NEW 2 - -typedef struct tag_k5_realm_data { - wchar_t realm[K5_MAXCCH_REALM]; - k5_realm_kdc kdcs[K5_MAX_KDC]; - khm_size n_kdcs; - k5_domain_map domain_maps[K5_MAX_DOMAIN_MAPPINGS]; - khm_size n_domain_maps; - - khm_int32 flags; -} k5_realm_data; - -#define K5_RDFLAG_DELETED 1 -#define K5_RDFLAG_NEW 2 -#define K5_RDFLAG_MODIFED 4 - -#define K5_REALMS_ALLOC_INCR 8 - -typedef struct tag_k5_config_data { - wchar_t def_realm[K5_MAXCCH_REALM]; /* default realm */ - - wchar_t config_file[MAX_PATH]; /* path to configuration file */ - khm_boolean create_config_file; /* create config_file if missing? */ - khm_boolean inc_realms; /* include full realm list in new - credentials dialog? */ - wchar_t loaded_config_file[MAX_PATH]; /* path to the - configuration file - that has been - loaded into the - realm editor. */ - - /* [libdefaults] */ - khm_boolean dns_lookup_kdc; - khm_boolean dns_lookup_realm; - khm_boolean dns_fallback; - - khm_boolean noaddresses; - - k5_lsa_import lsa_import; /* import mslsa creds? */ - - /* [realms] */ - k5_realm_data *realms; - khm_size n_realms; - khm_size nc_realms; - khm_size c_realm; - - khui_config_node node_main; - khui_config_node node_realm; - - khm_int32 flags; - - /* used by the realm editor */ - HMENU hm_realms_ctx; - HMENU hm_kdc_ctx; - HMENU hm_dmap_ctx; -} k5_config_data; - -#define K5_CDFLAG_MOD_DEF_REALM 0x00000001 -#define K5_CDFLAG_MOD_CONF_FILE 0x00000002 -#define K5_CDFLAG_MOD_DNS_LOOKUP_KDC 0x00000004 -#define K5_CDFLAG_MOD_DNS_LOOKUP_RLM 0x00000008 -#define K5_CDFLAG_MOD_DNS_FALLBACK 0x00000010 -#define K5_CDFLAG_MOD_NOADDRESSES 0x00000020 -#define K5_CDFLAG_MOD_LSA_IMPORT 0x00000040 -#define K5_CDFLAG_MOD_CREATE_CONF 0x00000080 -#define K5_CDFLAG_MOD_INC_REALMS 0x00000100 -#define K5_CDFLAG_MOD_REALMS 0x00001000 - -void -k5_init_config_data(k5_config_data * d) { - ZeroMemory(d, sizeof(*d)); -} - -void -k5_free_config_data(k5_config_data * d) { - if (d->realms) - PFREE(d->realms); - - k5_init_config_data(d); -} - -static void -k5_assert_n_realms(k5_config_data * d, khm_size n) { - khm_size nc_realms; - - if (n <= d->nc_realms) - return; - - nc_realms = UBOUNDSS(n, K5_REALMS_ALLOC_INCR, K5_REALMS_ALLOC_INCR); - assert(nc_realms > d->nc_realms); - - d->realms = PREALLOC(d->realms, nc_realms * sizeof(*(d->realms))); - d->nc_realms = nc_realms; - - ZeroMemory(&d->realms[d->n_realms], - (d->nc_realms - d->n_realms) * sizeof(*(d->realms))); -} - -void -k5_purge_config_data(k5_config_data * d, - khm_boolean purge_realms, - khm_boolean purge_kdcs, - khm_boolean purge_dmap) { - khm_size r; - khm_size k; - khm_size m; - - for (r=0; r < d->n_realms; r++) { - if (purge_realms && - (d->realms[r].flags & K5_RDFLAG_NEW) && - (d->realms[r].flags & K5_RDFLAG_DELETED)) { - - if (d->n_realms > r+1) - MoveMemory(&d->realms[r], &d->realms[r+1], - sizeof(d->realms[0]) * (d->n_realms - (r+1))); - r--; - d->n_realms--; - continue; - } - - for (k=0; k < d->realms[r].n_kdcs; k++) { - if (purge_kdcs && - (d->realms[r].kdcs[k].flags & K5_RKFLAG_NEW) && - (d->realms[r].kdcs[k].flags & K5_RKFLAG_DELETED)) { - if (d->realms[r].n_kdcs > k + 1) - MoveMemory(&d->realms[r].kdcs[k], - &d->realms[r].kdcs[k+1], - sizeof(d->realms[0].kdcs[0]) * - (d->realms[r].n_kdcs - (k+1))); - k--; - d->realms[r].n_kdcs--; - continue; - } - } - - if (K5_MAX_KDC > k+1) - ZeroMemory(&d->realms[r].kdcs[k], - sizeof(d->realms[0].kdcs[0]) * - (K5_MAX_KDC - (k + 1))); - - for (m=0; m < d->realms[r].n_domain_maps; m++) { - if (purge_dmap && - (d->realms[r].domain_maps[m].flags & K5_DMFLAG_NEW) && - (d->realms[r].domain_maps[m].flags & K5_DMFLAG_DELETED)) { - if (d->realms[r].n_domain_maps > m + 1) - MoveMemory(&d->realms[r].domain_maps[m], - &d->realms[r].domain_maps[m+1], - sizeof(d->realms[0].domain_maps[0]) * - (d->realms[r].n_domain_maps - (m+1))); - m--; - d->realms[r].n_domain_maps--; - continue; - } - } - - if (K5_MAX_DOMAIN_MAPPINGS > m+1) - ZeroMemory(&d->realms[r].domain_maps[m], - sizeof(d->realms[0].domain_maps[0]) * - (K5_MAX_DOMAIN_MAPPINGS - (m+1))); - } - - if (d->nc_realms > r + 1) - ZeroMemory(&d->realms[r], - sizeof(d->realms[0]) * - (d->nc_realms - (r + 1))); -} - -static khm_boolean -k5_is_profile_loaded(void) { -#ifdef DEBUG - assert(pprofile_init); - assert(pprofile_get_subsection_names); - assert(pprofile_get_values); - assert(pprofile_get_string); - assert(pprofile_get_relation_names); - assert(pprofile_free_list); - assert(pprofile_release_string); - assert(pprofile_release); - assert(pprofile_clear_relation); - assert(pprofile_add_relation); - assert(pprofile_update_relation); - assert(pprofile_flush); - assert(pprofile_rename_section); -#endif - - if (!pprofile_init || - !pprofile_get_subsection_names || - !pprofile_get_values || - !pprofile_get_string || - !pprofile_get_relation_names || - !pprofile_free_list || - !pprofile_release_string || - !pprofile_release || - !pprofile_clear_relation || - !pprofile_add_relation || - !pprofile_update_relation || - !pprofile_flush || - !pprofile_rename_section) - - return FALSE; - - return TRUE; -} - -void -k5_read_config_data(k5_config_data * d) { - wchar_t * defrealm; - char config_file[MAX_PATH]; - profile_t profile = NULL; - const char *filenames[2]; - long rv; - khm_size s; - - if (!k5_is_profile_loaded()) - return; - - defrealm = khm_krb5_get_default_realm(); - - if (defrealm) { - StringCbCopy(d->def_realm, sizeof(d->def_realm), defrealm); - PFREE(defrealm); - } else { - StringCbCopy(d->def_realm, sizeof(d->def_realm), L""); - } - - khm_krb5_get_profile_file(config_file, ARRAYLENGTH(config_file)); - - AnsiStrToUnicode(d->config_file, sizeof(d->config_file), config_file); - - filenames[0] = config_file; - filenames[1] = NULL; - - rv = pprofile_init(filenames, &profile); - - if (!rv) { - const char * sec_realms[] = { "realms", NULL }; - const char * sec_domain_realm[] = { "domain_realm", NULL }; - char ** sections; - char ** dr_from; - char * boolv; - - /* first fish out a few values from [libdefaults] */ - - rv = pprofile_get_string(profile, "libdefaults", "dns_lookup_kdc", - NULL, NULL, &boolv); - if (!rv && boolv) { - khm_boolean b; - - if (!khm_krb5_parse_boolean(boolv, &b)) - d->dns_lookup_kdc = b; - else - d->dns_lookup_kdc = FALSE; - pprofile_release_string(boolv); - } else - d->dns_lookup_kdc = FALSE; - - rv = pprofile_get_string(profile, "libdefaults", "dns_lookup_realm", - NULL, NULL, &boolv); - if (!rv && boolv) { - khm_boolean b; - - if (!khm_krb5_parse_boolean(boolv, &b)) - d->dns_lookup_realm = b; - else - d->dns_lookup_realm = FALSE; - pprofile_release_string(boolv); - } else - d->dns_lookup_realm = FALSE; - - rv = pprofile_get_string(profile, "libdefaults", "dns_fallback", - NULL, NULL, &boolv); - if (!rv && boolv) { - khm_boolean b; - - if (!khm_krb5_parse_boolean(boolv, &b)) - d->dns_fallback = b; - else - d->dns_fallback = FALSE; - pprofile_release_string(boolv); - } else - d->dns_fallback = FALSE; - - rv = pprofile_get_string(profile, "libdefaults", "noaddresses", - NULL, NULL, &boolv); - if (!rv && boolv) { - khm_boolean b; - - if (!khm_krb5_parse_boolean(boolv, &b)) - d->noaddresses = b; - else - d->noaddresses = TRUE; - pprofile_release_string(boolv); - } else - d->noaddresses = TRUE; - - /* now we look at the [realms] section */ - rv = pprofile_get_subsection_names(profile, sec_realms, &sections); - - /* what? no realms? whatever */ - if (rv) goto _skip_realms; - - /* get a count first */ - for (s=0; sections[s] && sections[s][0]; s++); - - k5_assert_n_realms(d, s); - d->n_realms = s; - - /* now go through each and fish out the kdcs, admin_server - and master_kdc. */ - for (s=0; sections[s] && sections[s][0]; s++) { - const char * sec_kdcs[] = - { "realms", sections[s], "kdc", NULL }; - - const char * sec_admin[] = - { "realms", sections[s], "admin_server", NULL }; - - const char * sec_master[] = - { "realms", sections[s], "master_kdc", NULL }; - - char ** values; - - AnsiStrToUnicode(d->realms[s].realm, sizeof(d->realms[s].realm), - sections[s]); - d->realms[s].n_kdcs = 0; - d->realms[s].n_domain_maps = 0; - - rv = pprofile_get_values(profile, sec_kdcs, &values); - if (!rv) { - khm_size i; - - for (i=0 ; values[i] && values[i][0] && i < K5_MAX_KDC; i++) { - AnsiStrToUnicode(d->realms[s].kdcs[i].name, - sizeof(d->realms[s].kdcs[i].name), - values[i]); - - } - d->realms[s].n_kdcs = i; - - pprofile_free_list(values); - } - - rv = pprofile_get_values(profile, sec_admin, &values); - if (!rv) { - khm_size i; - khm_size j; - wchar_t kdc_name[K5_MAXCCH_HOST]; - - for (i=0; values[i] && values[i][0]; i++) { - AnsiStrToUnicode(kdc_name, - sizeof(kdc_name), values[i]); - - for (j=0; j < d->realms[s].n_kdcs; j++) - if (!_wcsicmp(kdc_name, d->realms[s].kdcs[j].name)) - break; - - if (j < d->realms[s].n_kdcs) { - d->realms[s].kdcs[j].admin = TRUE; - } else if (d->realms[s].n_kdcs < K5_MAX_KDC) { - j = d->realms[s].n_kdcs; - StringCbCopy(d->realms[s].kdcs[j].name, - sizeof(d->realms[s].kdcs[j].name), - kdc_name); - d->realms[s].kdcs[j].admin = TRUE; - d->realms[s].n_kdcs ++; - } - } - pprofile_free_list(values); - } - - rv = pprofile_get_values(profile, sec_master, &values); - if (!rv) { - khm_size i; - khm_size j; - wchar_t kdc_name[K5_MAXCCH_HOST]; - - for (i=0; values[i] && values[i][0]; i++) { - AnsiStrToUnicode(kdc_name, sizeof(kdc_name), values[i]); - - for (j=0; j < d->realms[s].n_kdcs; j++) - if (!_wcsicmp(kdc_name, d->realms[s].kdcs[j].name)) - break; - - if (j < d->realms[s].n_kdcs) { - d->realms[s].kdcs[j].master = TRUE; - } else if (d->realms[s].n_kdcs < K5_MAX_KDC) { - j = d->realms[s].n_kdcs; - StringCbCopy(d->realms[s].kdcs[j].name, - sizeof(d->realms[s].kdcs[j].name), - kdc_name); - d->realms[s].kdcs[j].master = TRUE; - d->realms[s].n_kdcs ++; - } - } - - pprofile_free_list(values); - } - } - pprofile_free_list(sections); - - _skip_realms: - - rv = pprofile_get_relation_names(profile, sec_domain_realm, &dr_from); - if (!rv) { - khm_size i; - khm_size j; - char * dr_to; - wchar_t wdr_from[K5_MAXCCH_HOST]; - wchar_t wdr_to[K5_MAXCCH_HOST]; - - for (i=0; dr_from[i] && dr_from[i][0]; i++) { - AnsiStrToUnicode(wdr_from, sizeof(wdr_from), dr_from[i]); - - rv = pprofile_get_string(profile, "domain_realm", dr_from[i], - NULL, NULL, &dr_to); - - if (rv || !dr_to) - continue; - - AnsiStrToUnicode(wdr_to, sizeof(wdr_to), dr_to); - - for (j=0; j < d->n_realms; j++) { - if (!_wcsicmp(wdr_to, d->realms[j].realm)) - break; - } - - if (j >= d->n_realms) { - j = d->n_realms; - k5_assert_n_realms(d, j + 1); - - StringCbCopy(d->realms[j].realm, - sizeof(d->realms[j].realm), - wdr_to); - d->realms[j].n_kdcs = 0; - d->realms[j].n_domain_maps = 0; - - d->n_realms++; - } - - if (d->realms[j].n_domain_maps < K5_MAX_DOMAIN_MAPPINGS) { - khm_size k; - - k = d->realms[j].n_domain_maps; - - StringCbCopy(d->realms[j].domain_maps[k].name, - sizeof(d->realms[j].domain_maps[k].name), - wdr_from); - - d->realms[j].n_domain_maps++; - } - - pprofile_release_string(dr_to); - } - pprofile_free_list(dr_from); - } - pprofile_release(profile); - } - - { - khm_int32 t; - - /* last, read the MSLSA import setting */ - if (KHM_SUCCEEDED(khc_read_int32(csp_params, - L"MsLsaImport", &t))) { - d->lsa_import = t; - } else { - d->lsa_import = K5_LSAIMPORT_ALWAYS; - } - - if (KHM_SUCCEEDED(khc_read_int32(csp_params, - L"UseFullRealmList", &t))) { - d->inc_realms = !!t; - } else { - d->inc_realms = TRUE; - } - } - - d->flags = 0; -} - -int -k5_write_config_data(k5_config_data * d) { - char astr[MAX_PATH * 2]; - char config_file[MAX_PATH]; - profile_t profile = NULL; - const char *filenames[2]; - long rv; - khm_size s; - int applied = FALSE; - - if (d->flags == 0) - return FALSE; - - if (!k5_is_profile_loaded()) - return FALSE; - - /* write the MSLSA import setting */ - if (d->flags & K5_CDFLAG_MOD_LSA_IMPORT) { - khc_write_int32(csp_params, L"MsLsaImport", d->lsa_import); - d->flags &= ~K5_CDFLAG_MOD_LSA_IMPORT; - applied = TRUE; - } - - if (d->flags & K5_CDFLAG_MOD_INC_REALMS) { - khc_write_int32(csp_params, L"UseFullRealmList", d->inc_realms); - d->flags &= ~K5_CDFLAG_MOD_INC_REALMS; - applied = TRUE; - } - - if (!(d->flags & - (K5_CDFLAG_MOD_DEF_REALM | - K5_CDFLAG_MOD_CONF_FILE | - K5_CDFLAG_MOD_DNS_FALLBACK | - K5_CDFLAG_MOD_DNS_LOOKUP_RLM | - K5_CDFLAG_MOD_DNS_LOOKUP_KDC | - K5_CDFLAG_MOD_NOADDRESSES | - K5_CDFLAG_MOD_CREATE_CONF | - K5_CDFLAG_MOD_REALMS))) { - - d->flags = 0; - return applied; - } - - khm_krb5_get_profile_file(config_file, ARRAYLENGTH(config_file)); - - UnicodeStrToAnsi(astr, sizeof(astr), d->config_file); - - if (_stricmp(config_file, astr)) { - assert(FALSE); - } - - filenames[0] = config_file; - filenames[1] = NULL; - - rv = pprofile_init(filenames, &profile); - -#if FAILOVER_TO_TEMPORARY_FILE - if (rv) { - char temp_file[MAX_PATH]; - - khm_krb5_get_temp_profile_file(temp_file, - ARRAYLENGTH(temp_file)); - - filenames[0] = temp_file; - - rv = pprofile_init(filenames, &profile); - - ?? TODO: Also warn if we are doing this - } -#endif - - if (!rv) { - const char * sec_realms[] = { "realms", NULL }; - const char * sec_domain_realm[] = { "domain_realm", NULL }; - const char * sec_libdefaults[] = { "libdefaults", NULL, NULL }; - khm_size r; - - if (d->flags & K5_CDFLAG_MOD_DEF_REALM) { - if (SUCCEEDED(StringCbLength(d->def_realm, - sizeof(d->def_realm), &s)) && - s > 0) { - char defrealm[K5_MAXCCH_REALM]; - - UnicodeStrToAnsi(defrealm, sizeof(defrealm), - d->def_realm); - - khm_krb5_set_default_realm(d->def_realm); - - sec_libdefaults[1] = "default_realm"; - - pprofile_clear_relation(profile, sec_libdefaults); - - rv = pprofile_add_relation(profile, sec_libdefaults, - defrealm); - applied = TRUE; - } - d->flags &= ~K5_CDFLAG_MOD_DEF_REALM; - } - - if (d->flags & K5_CDFLAG_MOD_DNS_LOOKUP_KDC) { - - sec_libdefaults[1] = "dns_lookup_kdc"; - - pprofile_clear_relation(profile, sec_libdefaults); - - rv = pprofile_add_relation(profile, sec_libdefaults, - (d->dns_lookup_kdc)? - KRB5_CONF_YES: - KRB5_CONF_NO); - d->flags &= ~K5_CDFLAG_MOD_DNS_LOOKUP_KDC; - applied = TRUE; - } - - if (d->flags & K5_CDFLAG_MOD_DNS_LOOKUP_RLM) { - - sec_libdefaults[1] = "dns_lookup_realm"; - - pprofile_clear_relation(profile, sec_libdefaults); - - rv = pprofile_add_relation(profile, sec_libdefaults, - (d->dns_lookup_realm)? - KRB5_CONF_YES: - KRB5_CONF_NO); - - d->flags &= ~K5_CDFLAG_MOD_DNS_LOOKUP_RLM; - applied = TRUE; - } - - if (d->flags & K5_CDFLAG_MOD_DNS_FALLBACK) { - - sec_libdefaults[1] = "dns_fallback"; - - pprofile_clear_relation(profile, sec_libdefaults); - - rv = pprofile_add_relation(profile, sec_libdefaults, - (d->dns_fallback)? - KRB5_CONF_YES: - KRB5_CONF_NO); - - d->flags &= ~K5_CDFLAG_MOD_DNS_FALLBACK; - applied = TRUE; - } - - if (d->flags & K5_CDFLAG_MOD_NOADDRESSES) { - - sec_libdefaults[1] = "noaddresses"; - - pprofile_clear_relation(profile, sec_libdefaults); - - rv = pprofile_add_relation(profile, sec_libdefaults, - (d->noaddresses)? - KRB5_CONF_YES: - KRB5_CONF_NO); - - d->flags &= ~K5_CDFLAG_MOD_NOADDRESSES; - applied = TRUE; - } - - /* now we look at the [realms] section */ - - for (r=0; r < d->n_realms; r++) { - char realm[K5_MAXCCH_REALM]; - char host[K5_MAXCCH_HOST]; - - const char * sec_kdcs[] = - { "realms", realm, "kdc", NULL }; - - const char * sec_admin[] = - { "realms", realm, "admin_server", NULL }; - - const char * sec_master[] = - { "realms", realm, "master_kdc", NULL }; - - const char * sec_domain_map[] = - { "domain_realm", host, NULL }; - - char ** values; - - UnicodeStrToAnsi(realm, sizeof(realm), - d->realms[r].realm); - - if (!(d->realms[r].flags & K5_RDFLAG_DELETED) && - (d->realms[r].flags & K5_RDFLAG_NEW)) { - - khm_size k; - khm_size m; - - /* this is a new realm */ - - for (k=0; k < d->realms[r].n_kdcs; k++) { - if (!(d->realms[r].kdcs[k].flags & K5_RKFLAG_DELETED)) { - UnicodeStrToAnsi(host, sizeof(host), - d->realms[r].kdcs[k].name); - - if (d->realms[r].kdcs[k].master) - pprofile_add_relation(profile, sec_master, - host); - - pprofile_add_relation(profile, sec_kdcs, - host); - - if (d->realms[r].kdcs[k].admin) - pprofile_add_relation(profile, sec_admin, - host); - - d->realms[r].kdcs[k].flags &= ~ (K5_RKFLAG_NEW | - K5_RKFLAG_MOD_MASTER | - K5_RKFLAG_MOD_ADMIN); - applied = TRUE; - } - } - - for (m=0; m < d->realms[r].n_domain_maps; m++) { - - UnicodeStrToAnsi(host, sizeof(host), - d->realms[r].domain_maps[m].name); - - if ((d->realms[r].domain_maps[m].flags & - K5_DMFLAG_DELETED) && - !(d->realms[r].domain_maps[m].flags & - K5_DMFLAG_NEW)) { - pprofile_clear_relation(profile, sec_domain_map); - - /* setting this flag indicates that the item - is deleted and not in the profile file - anymore. */ - d->realms[r].domain_maps[m].flags |= K5_DMFLAG_NEW; - applied = TRUE; - } else if (!(d->realms[r].domain_maps[m].flags & - K5_DMFLAG_DELETED) && - (d->realms[r].domain_maps[m].flags & - K5_DMFLAG_NEW)) { - pprofile_add_relation(profile, sec_domain_map, - realm); - - d->realms[r].domain_maps[m].flags &= ~K5_DMFLAG_NEW; - applied = TRUE; - } - } - - d->realms[r].flags &= ~(K5_RDFLAG_NEW | - K5_RDFLAG_MODIFED); - - } else if ((d->realms[r].flags & K5_RDFLAG_DELETED) && - !(d->realms[r].flags & K5_RDFLAG_NEW)) { - - const char * sec_all[] = - { "realms", realm, NULL, NULL }; - khm_size v; - - /* this realm should be deleted */ - - rv = pprofile_get_relation_names(profile, sec_all, - &values); - if (!rv) { - for (v=0; values[v] && values[v][0]; v++) { - sec_all[2] = values[v]; - pprofile_clear_relation(profile, sec_all); - } - sec_all[2] = NULL; - pprofile_rename_section(profile, sec_all, NULL); - pprofile_free_list(values); - applied = TRUE; - } - - rv = pprofile_get_relation_names(profile, sec_domain_realm, - &values); - if (!rv) { - char * maprealm; - - for (v=0; values[v] && values[v][0]; v++) { - - rv = pprofile_get_string(profile, "domain_realm", - values[v], NULL, NULL, - &maprealm); - - if (!rv) { - if (!strcmp(maprealm, realm)) { - StringCbCopyA(host, sizeof(host), - values[v]); - pprofile_clear_relation(profile, - sec_domain_map); - applied = TRUE; - } - pprofile_release_string(maprealm); - } - } - - pprofile_free_list(values); - } - - /* setting this flag indicate that the realm is - deleted and is not in the profile file. */ - d->realms[r].flags |= K5_RDFLAG_NEW; - - } else if (!(d->realms[r].flags & K5_RDFLAG_DELETED) && - (d->realms[r].flags & K5_RDFLAG_MODIFED)) { - khm_size k; - khm_size m; - - /* same as before. check if we have to update the kdc - list or the domain_realm mappings */ - - for (k=0; k < d->realms[r].n_kdcs; k++) { - - if ((d->realms[r].kdcs[k].flags & K5_RKFLAG_NEW) && - (d->realms[r].kdcs[k].flags & K5_RKFLAG_DELETED)) - continue; - - UnicodeStrToAnsi(host, sizeof(host), - d->realms[r].kdcs[k].name); - - if (d->realms[r].kdcs[k].flags & K5_RKFLAG_DELETED) { - pprofile_update_relation(profile, sec_kdcs, - host, NULL); - pprofile_update_relation(profile, sec_admin, - host, NULL); - pprofile_update_relation(profile, sec_master, - host, NULL); - - applied = TRUE; - - /* as above, setting 'new' flag to indicate - that the item does not exist in the profile - file. */ - d->realms[r].kdcs[k].flags |= K5_RKFLAG_NEW; - continue; - } - - if (d->realms[r].kdcs[k].flags & K5_RKFLAG_NEW) { - if (d->realms[r].kdcs[k].master) - pprofile_add_relation(profile, sec_master, - host); - - pprofile_add_relation(profile, sec_kdcs, - host); - - if (d->realms[r].kdcs[k].admin) - pprofile_add_relation(profile, sec_admin, - host); - - d->realms[r].kdcs[k].flags &= ~(K5_RKFLAG_NEW | - K5_RKFLAG_MOD_ADMIN | - K5_RKFLAG_MOD_MASTER); - applied = TRUE; - continue; - } - - if (d->realms[r].kdcs[k].flags & K5_RKFLAG_MOD_MASTER) { - if (!d->realms[r].kdcs[k].master) { - pprofile_update_relation(profile, sec_master, - host, NULL); - } else { - pprofile_update_relation(profile, sec_master, - host, NULL); - pprofile_add_relation(profile, sec_master, - host); - } - - applied = TRUE; - d->realms[r].kdcs[k].flags &= ~K5_RKFLAG_MOD_MASTER; - } - - if (d->realms[r].kdcs[k].flags & K5_RKFLAG_MOD_ADMIN) { - if (d->realms[r].kdcs[k].admin) { - pprofile_update_relation(profile, sec_admin, - host, NULL); - pprofile_add_relation(profile, sec_admin, - host); - } else { - pprofile_update_relation(profile, sec_admin, - host, NULL); - } - - applied = TRUE; - d->realms[r].kdcs[k].flags &= ~K5_RKFLAG_MOD_ADMIN; - } - } - - for (m=0; m < d->realms[r].n_domain_maps; m++) { - - UnicodeStrToAnsi(host, sizeof(host), - d->realms[r].domain_maps[m].name); - - if ((d->realms[r].domain_maps[m].flags & - K5_DMFLAG_DELETED) && - - !(d->realms[r].domain_maps[m].flags & - K5_DMFLAG_NEW)) { - - pprofile_clear_relation(profile, sec_domain_map); - d->realms[r].domain_maps[m].flags |= K5_DMFLAG_NEW; - applied = TRUE; - - } else if (!(d->realms[r].domain_maps[m].flags & - K5_DMFLAG_DELETED) && - - (d->realms[r].domain_maps[m].flags & - K5_DMFLAG_NEW)) { - - pprofile_add_relation(profile, sec_domain_map, - realm); - d->realms[r].domain_maps[m].flags &= ~K5_DMFLAG_NEW; - applied = TRUE; - - } - } - - d->realms[r].flags &= ~K5_RDFLAG_MODIFED; - } - } - - rv = pprofile_flush(profile); - - pprofile_release(profile); - } - - if (rv) { - khui_alert * alert; - wchar_t title[KHUI_MAXCCH_TITLE]; - wchar_t fmsg[KHUI_MAXCCH_MESSAGE]; - wchar_t msg[KHUI_MAXCCH_MESSAGE]; - wchar_t sugg[KHUI_MAXCCH_SUGGESTION]; - - LoadString(hResModule, IDS_K5ERR_CANTWRITEPROFILE, - title, ARRAYLENGTH(title)); - if (rv) - LoadString(hResModule, IDS_K5ERR_PROFNOWRITE, - fmsg, ARRAYLENGTH(fmsg)); - - LoadString(hResModule, IDS_K5ERR_PROFSUGGEST, - sugg, ARRAYLENGTH(sugg)); - - StringCbPrintf(msg, sizeof(msg), fmsg, config_file); - - khui_alert_create_empty(&alert); - khui_alert_set_severity(alert, (rv)?KHERR_ERROR:KHERR_WARNING); - khui_alert_set_title(alert, title); - khui_alert_set_message(alert, msg); - khui_alert_set_suggestion(alert, sugg); - - khui_alert_show(alert); - } - - d->flags = 0; - - return applied; -} - -/* actual dialog stuff */ - -#define IDX_NORMAL 1 -#define IDX_MODIFIED 2 -#define IDX_NEW 3 -#define IDX_DELETED 4 - -static k5_config_data k5_config_dlg_data; -static khm_boolean k5_dlg_data_valid = FALSE; - -INT_PTR CALLBACK -k5_config_dlgproc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - switch(uMsg) { - case WM_INITDIALOG: - { - HWND hw; - khm_size i; - k5_config_data * d; - - wchar_t * t; - wchar_t importopts[256]; - WKSTA_INFO_100 * winfo100; - -#ifdef DEBUG - assert(!k5_dlg_data_valid); -#endif - - k5_init_config_data(&k5_config_dlg_data); - k5_read_config_data(&k5_config_dlg_data); - - k5_dlg_data_valid = TRUE; - - d = &k5_config_dlg_data; - - d->node_main = (khui_config_node) lParam; - - CheckDlgButton(hwnd, IDC_CFG_INCREALMS, - (d->inc_realms)? BST_CHECKED: BST_UNCHECKED); - - hw = GetDlgItem(hwnd, IDC_CFG_DEFREALM); -#ifdef DEBUG - assert(hw); -#endif - - SendMessage(hw, CB_RESETCONTENT, 0, 0); - - for (i=0; i < d->n_realms; i++) { - SendMessage(hw, CB_ADDSTRING, 0, - (LPARAM) d->realms[i].realm); - } - - SendMessage(hw, CB_SELECTSTRING, (WPARAM) -1, - (LPARAM) d->def_realm); - SetDlgItemText(hwnd, IDC_CFG_DEFREALM, d->def_realm); - SendDlgItemMessage(hwnd, IDC_CFG_DEFREALM, CB_LIMITTEXT, - ARRAYLENGTH(d->def_realm) - 1, 0); - - SetDlgItemText(hwnd, IDC_CFG_CFGFILE, d->config_file); - SendDlgItemMessage(hwnd, IDC_CFG_CFGFILE, EM_LIMITTEXT, - ARRAYLENGTH(d->config_file) - 1, 0); - - /* hostname/domain */ - if (NetWkstaGetInfo(NULL, 100, (LPBYTE *) &winfo100) == NERR_Success) { - SetDlgItemText(hwnd, IDC_CFG_HOSTNAME, winfo100->wki100_computername); - SetDlgItemText(hwnd, IDC_CFG_DOMAIN, winfo100->wki100_langroup); - NetApiBufferFree(winfo100); - } - - /* and the import ticket options */ - { - wchar_t csvstring[256]; - khm_size cb; - - csvstring[0] = L'\0'; - - LoadString(hResModule, IDS_K5CFG_IMPORT_OPTIONS, - csvstring, ARRAYLENGTH(csvstring)); - - cb = sizeof(importopts); - csv_to_multi_string(importopts, &cb, csvstring); - } - - hw = GetDlgItem(hwnd, IDC_CFG_IMPORT); -#ifdef DEBUG - assert(hw); -#endif - SendMessage(hw, CB_RESETCONTENT, 0, 0); - - for (t=importopts; - t && *t && *t != L' ' && - t < importopts + ARRAYLENGTH(importopts); - t = multi_string_next(t)) { - - SendMessage(hw, CB_ADDSTRING, 0, (LPARAM) t); - } - - SendMessage(hw, CB_SETCURSEL, 0, d->lsa_import); - t = importopts; - SendMessage(hw, CB_GETLBTEXT, d->lsa_import,(LPARAM) t); - SendMessage(hw, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) t); - } - break; - - case WM_COMMAND: - { - k5_config_data * d; - - d = &k5_config_dlg_data; - - if (d == NULL) - return FALSE; - - if (wParam == MAKEWPARAM(IDC_CFG_IMPORT, CBN_SELCHANGE)) { - int idx; - int modified = FALSE; - - idx = (int) SendDlgItemMessage(hwnd, IDC_CFG_IMPORT, - CB_GETCURSEL, 0, 0); - if (idx != CB_ERR && idx != d->lsa_import) { - d->lsa_import = idx; - d->flags |= K5_CDFLAG_MOD_LSA_IMPORT; - modified = TRUE; - } - - khui_cfg_set_flags(d->node_main, - (modified)?KHUI_CNFLAG_MODIFIED:0, - KHUI_CNFLAG_MODIFIED); - return TRUE; - } - - if (wParam == MAKEWPARAM(IDC_CFG_INCREALMS, BN_CLICKED)) { - if (IsDlgButtonChecked(hwnd, IDC_CFG_INCREALMS) == - BST_CHECKED) { - d->inc_realms = TRUE; - } else { - d->inc_realms = FALSE; - } - d->flags |= K5_CDFLAG_MOD_INC_REALMS; - - khui_cfg_set_flags(d->node_main, - KHUI_CNFLAG_MODIFIED, - KHUI_CNFLAG_MODIFIED); - return TRUE; - } - - if (wParam == MAKEWPARAM(IDC_CFG_DEFREALM, CBN_EDITCHANGE)) { - wchar_t defrealm[K5_MAXCCH_REALM]; - int t; - - t = GetDlgItemText(hwnd, IDC_CFG_DEFREALM, - defrealm, ARRAYLENGTH(defrealm)); - if (t == 0) { - /* we failed to get the default realm from the - control for some reason. */ - SetDlgItemText(hwnd, IDC_CFG_DEFREALM, L""); - StringCbCopy(d->def_realm, sizeof(d->def_realm), - L""); - } else { - StringCbCopy(d->def_realm, sizeof(d->def_realm), - defrealm); - } - - d->flags |= K5_CDFLAG_MOD_DEF_REALM; - - khui_cfg_set_flags(d->node_main, - KHUI_CNFLAG_MODIFIED, - KHUI_CNFLAG_MODIFIED); - return TRUE; - } - - if (wParam == MAKEWPARAM(IDC_CFG_DEFREALM, CBN_SELCHANGE)) { - wchar_t defrealm[K5_MAXCCH_REALM]; - LRESULT cursel, lr; - - cursel = SendDlgItemMessage(hwnd, IDC_CFG_DEFREALM, CB_GETCURSEL, - 0, 0); - if (cursel == CB_ERR) - return TRUE; - - lr = SendDlgItemMessage(hwnd, IDC_CFG_DEFREALM, CB_GETLBTEXTLEN, - cursel, 0); -#ifdef DEBUG - assert(lr < ARRAYLENGTH(defrealm)); -#endif - if (lr >= ARRAYLENGTH(defrealm)) { - /* we really shouldn't have any string here that - exceeds that many characters. But if we do, we - ignore that since we don't consider it - valid. */ - return TRUE; - } - - lr = SendDlgItemMessage(hwnd, IDC_CFG_DEFREALM, CB_GETLBTEXT, - cursel, (LPARAM) defrealm); - if (lr == CB_ERR) { - /* somehow we failed to copy the value anyway - after all those checks. */ -#ifdef DEBUG - assert(FALSE); -#endif - return TRUE; - } - - StringCbCopy(d->def_realm, sizeof(d->def_realm), - defrealm); - - d->flags |= K5_CDFLAG_MOD_DEF_REALM; - - khui_cfg_set_flags(d->node_main, - KHUI_CNFLAG_MODIFIED, - KHUI_CNFLAG_MODIFIED); - - return TRUE; - } - -#ifdef ALLOW_CHANGING_KRB5_CONFIG_FILE - if (wParam == MAKEWPARAM(IDC_CFG_CFGFILE, EN_CHANGE)) { - wchar_t cfgfile[MAX_PATH]; - int t; - - t = GetDlgItemText(hwnd, IDC_CFG_CFGFILE, - cfgfile, ARRAYLENGTH(cfgfile)); - - if (t == 0) { - StringCbCopy(d->config_file, sizeof(d->config_file), - L""); - } else { - StringCbCopy(d->config_file, sizeof(d->config_file), - cfgfile); - } - - d->flags |= K5_CDFLAG_MOD_CONF_FILE; - - khui_cfg_set_flags(d->node_main, - KHUI_CNFLAG_MODIFIED, - KHUI_CNFLAG_MODIFIED); - } -#endif - } - break; - - case KHUI_WM_CFG_NOTIFY: - { - k5_config_data * d; - - d = &k5_config_dlg_data; - - if (HIWORD(wParam) == WMCFG_APPLY) { - khm_int32 oflags; - int applied; - - oflags = d->flags; - applied = k5_write_config_data(d); - - if (d->flags != oflags) { - khui_cfg_set_flags(d->node_main, - (applied ? KHUI_CNFLAG_APPLIED : 0), - KHUI_CNFLAG_APPLIED | - KHUI_CNFLAG_MODIFIED); - } - return TRUE; - } - } - break; - - case WM_DESTROY: - { - k5_free_config_data(&k5_config_dlg_data); - k5_dlg_data_valid = FALSE; - } - break; - } - return FALSE; -} - -static HIMAGELIST -k5_get_state_image_list(void) { - HIMAGELIST hil; - HICON hicon; - - hil = ImageList_Create(GetSystemMetrics(SM_CXSMICON), - GetSystemMetrics(SM_CYSMICON), - ILC_COLOR | ILC_MASK, - 4, - 2); - - hicon = LoadImage(hResModule, - MAKEINTRESOURCE(IDI_NORMAL), - IMAGE_ICON, - GetSystemMetrics(SM_CXSMICON), - GetSystemMetrics(SM_CYSMICON), - LR_DEFAULTCOLOR); - - ImageList_AddIcon(hil, hicon); - - DestroyIcon(hicon); - - hicon = LoadImage(hResModule, - MAKEINTRESOURCE(IDI_MODIFIED), - IMAGE_ICON, - GetSystemMetrics(SM_CXSMICON), - GetSystemMetrics(SM_CYSMICON), - LR_DEFAULTCOLOR); - - ImageList_AddIcon(hil, hicon); - - DestroyIcon(hicon); - - hicon = LoadImage(hResModule, - MAKEINTRESOURCE(IDI_NEW), - IMAGE_ICON, - GetSystemMetrics(SM_CXSMICON), - GetSystemMetrics(SM_CYSMICON), - LR_DEFAULTCOLOR); - - ImageList_AddIcon(hil, hicon); - - DestroyIcon(hicon); - - hicon = LoadImage(hResModule, - MAKEINTRESOURCE(IDI_DELETED), - IMAGE_ICON, - GetSystemMetrics(SM_CXSMICON), - GetSystemMetrics(SM_CYSMICON), - LR_DEFAULTCOLOR); - - ImageList_AddIcon(hil, hicon); - - DestroyIcon(hicon); - - return hil; -} - -static void -k5_update_realms_display(HWND hw_list, k5_config_data * d) { - khm_size i; - LVITEM lvi; - wchar_t buf[64]; - - ListView_DeleteAllItems(hw_list); - - for (i=0; i < d->n_realms; i++) { - if ((d->realms[i].flags & K5_RDFLAG_DELETED) && - (d->realms[i].flags & K5_RDFLAG_NEW)) - continue; - - ZeroMemory(&lvi, sizeof(lvi)); - lvi.mask = LVIF_PARAM | LVIF_STATE | LVIF_TEXT; - lvi.iItem = 0; - lvi.iSubItem = 0; - lvi.pszText = d->realms[i].realm; - lvi.lParam = i; - - if (d->realms[i].flags & K5_RDFLAG_DELETED) { - lvi.state = INDEXTOSTATEIMAGEMASK(IDX_DELETED); - } else if (d->realms[i].flags & K5_RDFLAG_NEW) { - lvi.state = INDEXTOSTATEIMAGEMASK(IDX_NEW); - } else if (d->realms[i].flags & K5_RDFLAG_MODIFED) { - lvi.state = INDEXTOSTATEIMAGEMASK(IDX_MODIFIED); - } else { - lvi.state = INDEXTOSTATEIMAGEMASK(IDX_NORMAL); - } - lvi.stateMask = LVIS_STATEIMAGEMASK; - - ListView_InsertItem(hw_list, &lvi); - } - - ZeroMemory(&lvi, sizeof(lvi)); - lvi.mask = LVIF_PARAM | LVIF_STATE | LVIF_TEXT; - lvi.iItem = 0; - lvi.iSubItem = 0; - lvi.pszText = buf; - lvi.lParam = (LPARAM) -1; - - LoadString(hResModule, IDS_CFG_RE_NEWREALM, - buf, ARRAYLENGTH(buf)); - - lvi.state = INDEXTOSTATEIMAGEMASK(IDX_NEW); - lvi.stateMask = LVIS_STATEIMAGEMASK; - - ListView_InsertItem(hw_list, &lvi); - - if (d->flags & K5_CDFLAG_MOD_REALMS) { - khui_cfg_set_flags(d->node_realm, KHUI_CNFLAG_MODIFIED, - KHUI_CNFLAG_MODIFIED); - } else { - khui_cfg_set_flags(d->node_realm, 0, - KHUI_CNFLAG_MODIFIED); - } -} - -#define K5_KDCSI_ADMIN 1 -#define K5_KDCSI_MASTER 2 - -static void -k5_update_kdcs_display(HWND hw_kdc, k5_config_data * d, khm_size idx_rlm) { - khm_size k; - LVITEM lvi; - int idx_item; - k5_realm_kdc * pkdc; - wchar_t wyes[8]; - wchar_t wno[8]; - wchar_t wbuf[64]; - - ListView_DeleteAllItems(hw_kdc); - - if (d == NULL) - return; - -#ifdef DEBUG - assert(idx_rlm < d->n_realms); -#endif - LoadString(hResModule, IDS_YES, wyes, ARRAYLENGTH(wyes)); - LoadString(hResModule, IDS_NO, wno, ARRAYLENGTH(wno)); - - for (k=0; k < d->realms[idx_rlm].n_kdcs; k++) { - if ((d->realms[idx_rlm].kdcs[k].flags & K5_RKFLAG_DELETED) && - (d->realms[idx_rlm].kdcs[k].flags & K5_RKFLAG_NEW)) - continue; - - pkdc = &(d->realms[idx_rlm].kdcs[k]); - - ZeroMemory(&lvi, sizeof(lvi)); - lvi.mask = LVIF_PARAM | LVIF_STATE | LVIF_TEXT; - lvi.iItem = K5_MAX_KDC; - lvi.iSubItem = 0; - lvi.lParam = k; - lvi.pszText = pkdc->name; - if (pkdc->flags & K5_RKFLAG_DELETED) { - lvi.state = INDEXTOSTATEIMAGEMASK(IDX_DELETED); - } else if (pkdc->flags & K5_RKFLAG_NEW) { - lvi.state = INDEXTOSTATEIMAGEMASK(IDX_NEW); - } else if ((pkdc->flags & K5_RKFLAG_MOD_ADMIN) || - (pkdc->flags & K5_RKFLAG_MOD_MASTER)) { - lvi.state = INDEXTOSTATEIMAGEMASK(IDX_MODIFIED); - } else { - lvi.state = INDEXTOSTATEIMAGEMASK(IDX_NORMAL); - } - lvi.stateMask = LVIS_STATEIMAGEMASK; - - idx_item = ListView_InsertItem(hw_kdc, &lvi); - - lvi.mask = LVIF_TEXT; - lvi.iItem = idx_item; - lvi.iSubItem = K5_KDCSI_ADMIN; - if (pkdc->admin) - lvi.pszText = wyes; - else - lvi.pszText = wno; - ListView_SetItem(hw_kdc, &lvi); - - lvi.iSubItem = K5_KDCSI_MASTER; - if (pkdc->master) - lvi.pszText = wyes; - else - lvi.pszText = wno; - ListView_SetItem(hw_kdc, &lvi); - } - - ZeroMemory(&lvi, sizeof(lvi)); - lvi.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE; - lvi.iItem = 0; - lvi.iSubItem = 0; - lvi.pszText = wbuf; - lvi.lParam = (LPARAM) -1; - lvi.state = INDEXTOSTATEIMAGEMASK(IDX_NEW); - lvi.stateMask = LVIS_STATEIMAGEMASK; - - LoadString(hResModule, IDS_CFG_RE_NEWSERVER, - wbuf, ARRAYLENGTH(wbuf)); - - ListView_InsertItem(hw_kdc, &lvi); -} - -static void -k5_update_dmap_display(HWND hw_dm, k5_config_data * d, khm_size idx_rlm) { - khm_size m; - LVITEM lvi; - k5_domain_map * map; - wchar_t wbuf[64]; - - ListView_DeleteAllItems(hw_dm); - - if (d == NULL) - return; - -#ifdef DEBUG - assert(idx_rlm < d->n_realms); -#endif - - for (m=0; m < d->realms[idx_rlm].n_domain_maps; m++) { - map = &(d->realms[idx_rlm].domain_maps[m]); - - if ((map->flags & K5_DMFLAG_NEW) && - (map->flags & K5_DMFLAG_DELETED)) - continue; - - ZeroMemory(&lvi, sizeof(lvi)); - - lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_PARAM; - lvi.pszText = map->name; - if (map->flags & K5_DMFLAG_DELETED) - lvi.state = INDEXTOSTATEIMAGEMASK(IDX_DELETED); - else if (map->flags & K5_DMFLAG_NEW) - lvi.state = INDEXTOSTATEIMAGEMASK(IDX_NEW); - else - lvi.state = INDEXTOSTATEIMAGEMASK(IDX_NORMAL); - lvi.stateMask = LVIS_STATEIMAGEMASK; - lvi.lParam = m; - - lvi.iItem = K5_MAX_DOMAIN_MAPPINGS; - lvi.iSubItem = 0; - - ListView_InsertItem(hw_dm, &lvi); - } - - ZeroMemory(&lvi, sizeof(lvi)); - lvi.mask = LVIF_PARAM | LVIF_TEXT | LVIF_STATE; - lvi.pszText = wbuf; - lvi.lParam = (LPARAM) -1; - lvi.state = INDEXTOSTATEIMAGEMASK(IDX_NEW); - lvi.stateMask = LVIS_STATEIMAGEMASK; - lvi.iItem = 0; - lvi.iSubItem = 0; - - LoadString(hResModule, IDS_CFG_RE_NEWDMAP, - wbuf, ARRAYLENGTH(wbuf)); - - ListView_InsertItem(hw_dm, &lvi); -} - -#define CMD_BASE 3000 -#define CMD_NEW_REALM (CMD_BASE + 1) -#define CMD_DEL_REALM (CMD_BASE + 2) -#define CMD_NEW_SERVER (CMD_BASE + 3) -#define CMD_DEL_SERVER (CMD_BASE + 4) -#define CMD_MAKE_ADMIN (CMD_BASE + 5) -#define CMD_MAKE_MASTER (CMD_BASE + 6) -#define CMD_NEW_DMAP (CMD_BASE + 7) -#define CMD_DEL_DMAP (CMD_BASE + 8) - -struct k5_menu_def { - UINT string; - UINT id; - UINT type; - UINT state; -}; - -struct k5_menu_def k5_menu_realms[] = { - {IDS_CFG_RE_MNR, CMD_NEW_REALM, MFT_STRING, 0}, - {IDS_CFG_RE_MDR, CMD_DEL_REALM, MFT_STRING, 0} -}; - -struct k5_menu_def k5_menu_kdc[] = { - {IDS_CFG_RE_MNK, CMD_NEW_SERVER, MFT_STRING, 0}, - {IDS_CFG_RE_MDK, CMD_DEL_SERVER, MFT_STRING, 0}, - {IDS_CFG_RE_MAK, CMD_MAKE_ADMIN, MFT_STRING, 0}, - {IDS_CFG_RE_MMK, CMD_MAKE_MASTER, MFT_STRING, 0} -}; - -struct k5_menu_def k5_menu_dmap[] = { - {IDS_CFG_RE_MND, CMD_NEW_DMAP, MFT_STRING, 0}, - {IDS_CFG_RE_MDD, CMD_DEL_DMAP, MFT_STRING, 0} -}; - -HMENU -k5_menu_from_def(struct k5_menu_def * def, khm_size n) { - HMENU menu; - MENUITEMINFO mii; - khm_size i; - khm_size cch; - wchar_t buf[1024]; - - menu = CreatePopupMenu(); - - for (i=0; i < n; i++) { - ZeroMemory(&mii, sizeof(mii)); - - mii.cbSize = sizeof(mii); - - if (def[i].type == MFT_STRING) { - LoadString(hResModule, def[i].string, - buf, ARRAYLENGTH(buf)); - StringCchLength(buf, ARRAYLENGTH(buf), &cch); - - mii.fMask = MIIM_STRING | MIIM_ID; - mii.fType = MFT_STRING; - - mii.fState = def[i].state; - mii.wID = def[i].id; - mii.cch = (UINT) cch; - mii.dwTypeData = buf; - - InsertMenuItem(menu, (UINT) i, TRUE, &mii); - } else { -#ifdef DEBUG - assert(FALSE); -#endif - } - } - - return menu; -} - -void -k5_delete_realms(HWND hwnd, k5_config_data * d) { - LVITEM lvi; - int idx; - HWND hw_rlm; - BOOL modified = FALSE; - khm_size r; - - hw_rlm = GetDlgItem(hwnd, IDC_CFG_REALMS); - - idx = -1; - while((idx = ListView_GetNextItem(hw_rlm, idx, - LVNI_SELECTED)) - != -1) { - ZeroMemory(&lvi, sizeof(lvi)); - lvi.iItem = idx; - lvi.iSubItem = 0; - lvi.mask = LVIF_PARAM; - - ListView_GetItem(hw_rlm, &lvi); - - if (lvi.lParam != -1 && - (r = lvi.lParam) < d->n_realms) { - d->realms[r].flags ^= K5_RDFLAG_DELETED; - modified = TRUE; - } - } - - if (modified) { - d->flags |= K5_CDFLAG_MOD_REALMS; - - k5_purge_config_data(d, TRUE, TRUE, TRUE); - k5_update_realms_display(hw_rlm, d); - k5_update_dmap_display(GetDlgItem(hwnd, IDC_CFG_DMAP), NULL, 0); - k5_update_kdcs_display(GetDlgItem(hwnd, IDC_CFG_KDC), NULL, 0); - } -} - -void -k5_delete_servers(HWND hwnd, k5_config_data * d) { - HWND hw_kdc; - LVITEM lvi; - khm_size r; - khm_size k; - int idx; - BOOL modified = FALSE; - - hw_kdc = GetDlgItem(hwnd, IDC_CFG_KDC); - r = d->c_realm; - - idx = -1; - while((idx = ListView_GetNextItem(hw_kdc, idx, - LVNI_SELECTED)) - != -1) { - ZeroMemory(&lvi, sizeof(lvi)); - lvi.iItem = idx; - lvi.iSubItem = 0; - lvi.mask = LVIF_PARAM; - - ListView_GetItem(hw_kdc, &lvi); - - if (lvi.lParam != -1 && - (k = lvi.lParam) < d->n_realms) { - d->realms[r].kdcs[k].flags ^= K5_RKFLAG_DELETED; - modified = TRUE; - } - } - - if (modified) { - d->flags |= K5_CDFLAG_MOD_REALMS; - d->realms[r].flags |= K5_RDFLAG_MODIFED; - - k5_purge_config_data(d, TRUE, TRUE, TRUE); - k5_update_realms_display(GetDlgItem(hwnd, IDC_CFG_REALMS), d); - k5_update_kdcs_display(hw_kdc, d, r); - } -} - -void -k5_delete_dmap(HWND hwnd, k5_config_data * d) { - HWND hw_dmp; - LVITEM lvi; - khm_size r; - khm_size m; - int idx; - BOOL modified = FALSE; - - hw_dmp = GetDlgItem(hwnd, IDC_CFG_DMAP); - r = d->c_realm; - - idx = -1; - while((idx = ListView_GetNextItem(hw_dmp, idx, - LVNI_SELECTED)) - != -1) { - ZeroMemory(&lvi, sizeof(lvi)); - lvi.iItem = idx; - lvi.iSubItem = 0; - lvi.mask = LVIF_PARAM; - - ListView_GetItem(hw_dmp, &lvi); - - if (lvi.lParam != -1 && - (m = lvi.lParam) < d->n_realms) { - d->realms[r].domain_maps[m].flags ^= K5_DMFLAG_DELETED; - modified = TRUE; - } - } - - if (modified) { - d->flags |= K5_CDFLAG_MOD_REALMS; - k5_purge_config_data(d, FALSE, FALSE, TRUE); - - if (!(d->realms[r].flags & K5_RDFLAG_MODIFED)) { - d->realms[r].flags |= K5_RDFLAG_MODIFED; - - k5_update_realms_display(GetDlgItem(hwnd, IDC_CFG_REALMS), d); - } - - k5_update_dmap_display(hw_dmp, d, r); - } -} - -INT_PTR CALLBACK -k5_realms_dlgproc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - k5_config_data * d; - - d = &k5_config_dlg_data; - - switch(uMsg) { - case WM_INITDIALOG: - { - LVCOLUMN lvc; - HWND hw; - RECT r; - wchar_t buf[256]; - - assert(k5_dlg_data_valid); - - d->node_realm = (khui_config_node) lParam; - - /* set up columns for the Realms list */ - hw = GetDlgItem(hwnd, IDC_CFG_REALMS); -#ifdef DEBUG - assert(hw); -#endif - GetWindowRect(hw, &r); - r.right -= 5; /* shave a few pixels off the width */ - ZeroMemory(&lvc, sizeof(lvc)); - lvc.mask = LVCF_TEXT | LVCF_WIDTH; - lvc.pszText = buf; - lvc.cx = (r.right - r.left); - LoadString(hResModule, IDS_CFG_RE_REALMS, - buf, ARRAYLENGTH(buf)); - - ListView_InsertColumn(hw, 0, &lvc); - - ListView_SetImageList(hw, - k5_get_state_image_list(), - LVSIL_STATE); - - k5_update_realms_display(hw, d); - - /* set up columns for the servers list */ - hw = GetDlgItem(hwnd, IDC_CFG_KDC); -#ifdef DEBUG - assert(hw); -#endif - GetWindowRect(hw, &r); - r.right -= 5; - ZeroMemory(&lvc, sizeof(lvc)); - lvc.mask = LVCF_TEXT | LVCF_WIDTH; - lvc.pszText = buf; - lvc.cx = (r.right - r.left) * 2 / 4; - LoadString(hResModule, IDS_CFG_RE_HEAD_SVR, - buf, ARRAYLENGTH(buf)); - - ListView_InsertColumn(hw, 0, &lvc); - - lvc.cx = (r.right - r.left) * 1 / 4; - LoadString(hResModule, IDS_CFG_RE_HEAD_ADMIN, - buf, ARRAYLENGTH(buf)); - ListView_InsertColumn(hw, 1, &lvc); - - LoadString(hResModule, IDS_CFG_RE_HEAD_MASTER, - buf, ARRAYLENGTH(buf)); - ListView_InsertColumn(hw, 2, &lvc); - - ListView_SetImageList(hw, - k5_get_state_image_list(), - LVSIL_STATE); - - /* set up columns for the domain/host mapping list */ - hw = GetDlgItem(hwnd, IDC_CFG_DMAP); -#ifdef DEBUG - assert(hw); -#endif - GetWindowRect(hw, &r); - r.right -= 5; - ZeroMemory(&lvc, sizeof(lvc)); - lvc.mask = LVCF_TEXT | LVCF_WIDTH; - lvc.pszText = buf; - lvc.cx = (r.right - r.left); - LoadString(hResModule, IDS_CFG_RE_HEAD_DOMAIN, - buf, ARRAYLENGTH(buf)); - - ListView_InsertColumn(hw, 0, &lvc); - - - ListView_SetImageList(hw, - k5_get_state_image_list(), - LVSIL_STATE); - - /* Now set up the context menus */ - d->hm_realms_ctx = k5_menu_from_def(k5_menu_realms, ARRAYLENGTH(k5_menu_realms)); - d->hm_kdc_ctx = k5_menu_from_def(k5_menu_kdc, ARRAYLENGTH(k5_menu_kdc)); - d->hm_dmap_ctx = k5_menu_from_def(k5_menu_dmap, ARRAYLENGTH(k5_menu_dmap)); - } - break; - - case WM_CONTEXTMENU: - { - UINT id; - HMENU hm = NULL; - int x,y; - - id = GetDlgCtrlID((HWND) wParam); - - if (id == IDC_CFG_REALMS) { - HWND hw_realms; - int n; - MENUITEMINFO mii; - - hm = d->hm_realms_ctx; - - hw_realms = GetDlgItem(hwnd, IDC_CFG_REALMS); -#ifdef DEBUG - assert(hw_realms); -#endif - n = ListView_GetSelectedCount(hw_realms); - ZeroMemory(&mii, sizeof(mii)); - mii.cbSize = sizeof(mii); - - if (n == 0) { - mii.fMask = MIIM_STATE; - mii.fState = MFS_DISABLED; - - SetMenuItemInfo(hm, CMD_DEL_REALM, FALSE, &mii); - } else { - - mii.fMask = MIIM_STATE; - mii.fState = MFS_ENABLED; - - SetMenuItemInfo(hm, CMD_DEL_REALM, FALSE, &mii); - } - - } else if (id == IDC_CFG_KDC) { - HWND hw_kdc; - int n; - MENUITEMINFO mii; - - hm = d->hm_kdc_ctx; - - hw_kdc = GetDlgItem(hwnd, IDC_CFG_KDC); -#ifdef DEBUG - assert(hw_kdc); -#endif - n = ListView_GetSelectedCount(hw_kdc); - ZeroMemory(&mii, sizeof(mii)); - mii.cbSize = sizeof(mii); - - if (n == 1) { - mii.fMask = MIIM_STATE; - mii.fState = MFS_ENABLED; - - SetMenuItemInfo(hm, CMD_DEL_SERVER, FALSE, &mii); - SetMenuItemInfo(hm, CMD_MAKE_ADMIN, FALSE, &mii); - SetMenuItemInfo(hm, CMD_MAKE_MASTER, FALSE, &mii); - } else if (n == 0) { - - mii.fMask = MIIM_STATE; - mii.fState = MFS_DISABLED; - - SetMenuItemInfo(hm, CMD_DEL_SERVER, FALSE, &mii); - SetMenuItemInfo(hm, CMD_MAKE_ADMIN, FALSE, &mii); - SetMenuItemInfo(hm, CMD_MAKE_MASTER,FALSE, &mii); - } else { - - mii.fMask = MIIM_STATE; - mii.fState = MFS_ENABLED; - - SetMenuItemInfo(hm, CMD_DEL_SERVER, FALSE, &mii); - - mii.fState = MFS_DISABLED; - - SetMenuItemInfo(hm, CMD_MAKE_ADMIN, FALSE, &mii); - SetMenuItemInfo(hm, CMD_MAKE_MASTER,FALSE, &mii); - } - - } else if (id == IDC_CFG_DMAP) { - HWND hw_dmap; - MENUITEMINFO mii; - int n; - - hm = d->hm_dmap_ctx; - - hw_dmap = GetDlgItem(hwnd, IDC_CFG_DMAP); -#ifdef DEBUG - assert(hw_dmap); -#endif - - n = ListView_GetSelectedCount(hw_dmap); - ZeroMemory(&mii, sizeof(mii)); - mii.cbSize = sizeof(mii); - - if (n == 0) { - mii.fMask = MIIM_STATE; - mii.fState = MFS_DISABLED; - - SetMenuItemInfo(hm, CMD_DEL_DMAP, FALSE, &mii); - } else { - mii.fMask = MIIM_STATE; - mii.fState = MFS_ENABLED; - - SetMenuItemInfo(hm, CMD_DEL_DMAP, FALSE, &mii); - } - } - - if (hm) { - if (LOWORD(lParam) == 0xffff) { - HWND hw; - RECT r; - - hw = GetDlgItem(hwnd, id); -#ifdef DEBUG - assert(hw); -#endif - GetWindowRect(hw, &r); - x = r.left; - y = r.top; - } else { - x = LOWORD(lParam); - y = HIWORD(lParam); - } - - TrackPopupMenu(hm, - TPM_LEFTALIGN | TPM_TOPALIGN, - x, y, - 0, hwnd, NULL); - } - - return TRUE; - } - break; - - case WM_NOTIFY: - { - LPNMHDR pnmh; - HWND hw_rlm = NULL; - HWND hw_kdc = NULL; - HWND hw_dmp = NULL; - int i; - - pnmh = (LPNMHDR) lParam; - - /* catchalls for all three list views */ - switch (pnmh->code) { - case NM_DBLCLK: - { - HWND hw_ctl; - LVITEM lvi; - LVHITTESTINFO hti; - LPNMITEMACTIVATE pnmi; - - if (pnmh->idFrom != IDC_CFG_REALMS && - pnmh->idFrom != IDC_CFG_KDC && - pnmh->idFrom != IDC_CFG_DMAP) - break; - - /* if the user double clicks on the 'new - [something]' item, we start editing it. */ - hw_ctl = pnmh->hwndFrom; - pnmi = (LPNMITEMACTIVATE) lParam; - - ZeroMemory(&hti, sizeof(hti)); - hti.pt = pnmi->ptAction; - - ListView_SubItemHitTest(hw_ctl, &hti); - if (hti.flags & LVHT_ONITEM) { - ZeroMemory(&lvi, sizeof(lvi)); - lvi.mask = LVIF_PARAM; - lvi.iItem = hti.iItem; - - ListView_GetItem(hw_ctl, &lvi); - - if (lvi.lParam == -1) - ListView_EditLabel(hw_ctl, hti.iItem); - } - - return TRUE; - } - break; - } - - if (pnmh->idFrom == IDC_CFG_REALMS) { - - hw_rlm = pnmh->hwndFrom; - - switch(pnmh->code) { - case LVN_ITEMCHANGED: - i = ListView_GetSelectedCount(hw_rlm); - hw_kdc = GetDlgItem(hwnd, IDC_CFG_KDC); - hw_dmp = GetDlgItem(hwnd, IDC_CFG_DMAP); - - d->c_realm = (khm_size) -1; - - if (i == 1) { - LVITEM lvi; - wchar_t fmt[256]; - wchar_t buf[K5_MAXCCH_REALM + 256]; - - i = ListView_GetNextItem(hw_rlm, -1, - LVNI_SELECTED); - if (i == -1) - goto _no_selection; - - ZeroMemory(&lvi, sizeof(lvi)); - - lvi.iItem = i; - lvi.iSubItem = 0; - lvi.mask = LVIF_PARAM; - - ListView_GetItem(hw_rlm, &lvi); - - if (lvi.lParam == -1) - goto _no_selection; - - d->c_realm = lvi.lParam; - - k5_update_kdcs_display(hw_kdc, d, lvi.lParam); - k5_update_dmap_display(hw_dmp, d, lvi.lParam); - - LoadString(hResModule, IDS_CFG_RE_KDCS_R, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(buf, sizeof(buf), fmt, - d->realms[d->c_realm].realm); - - SetDlgItemText(hwnd, IDC_CFG_SERVERSGRP, buf); - - LoadString(hResModule, IDS_CFG_RE_DMAPS_R, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(buf, sizeof(buf), fmt, - d->realms[d->c_realm].realm); - - SetDlgItemText(hwnd, IDC_CFG_DOMAINGRP, buf); - return TRUE; - } - - _no_selection: - { - wchar_t buf[256]; - - k5_update_kdcs_display(hw_kdc, NULL, 0); - k5_update_dmap_display(hw_dmp, NULL, 0); - - LoadString(hResModule, IDS_CFG_RE_KDCS, - buf, ARRAYLENGTH(buf)); - SetDlgItemText(hwnd, IDC_CFG_SERVERSGRP, buf); - - LoadString(hResModule, IDS_CFG_RE_DMAPS, - buf, ARRAYLENGTH(buf)); - SetDlgItemText(hwnd, IDC_CFG_DOMAINGRP, buf); - } - break; - - case LVN_BEGINLABELEDIT: - { - NMLVDISPINFO * pdisp; - LVITEM lvi; - - pdisp = (NMLVDISPINFO *) lParam; - - ZeroMemory(&lvi, sizeof(lvi)); - lvi.iItem = pdisp->item.iItem; - lvi.mask = LVIF_PARAM; - - ListView_GetItem(hw_rlm, &lvi); - - if (pdisp->item.iItem == -1 || - lvi.lParam != -1) { - SetWindowLongPtr(hwnd, DWLP_MSGRESULT, TRUE); - } else { - /* allow editing */ - HWND hw_edit; - - hw_edit = ListView_GetEditControl(hw_rlm); - if (hw_edit != NULL) { - SendMessage(hw_edit, - EM_SETLIMITTEXT, - K5_MAXCCH_REALM - 1, - 0); - } - SetWindowLongPtr(hwnd, DWLP_MSGRESULT, FALSE); - } - - return TRUE; - } - break; - - case LVN_ENDLABELEDIT: - { - NMLVDISPINFO * pdisp; - khm_size n; - - pdisp = (NMLVDISPINFO *) lParam; - - if (pdisp->item.pszText && pdisp->item.pszText[0]) { - khm_size i; - - /* first find out whether this is actually - a new realm */ - - for (i=0; i < d->n_realms; i++) { - if ((d->realms[i].flags & K5_RDFLAG_NEW) && - (d->realms[i].flags & K5_RDFLAG_DELETED)) - continue; - - if (!_wcsicmp(d->realms[i].realm, pdisp->item.pszText)) - break; - } - - if (i < d->n_realms) { - khui_alert * alert = NULL; - wchar_t buf[KHUI_MAXCCH_MESSAGE]; - wchar_t fmt[KHUI_MAXCCH_MESSAGE]; - - khui_alert_create_empty(&alert); - - LoadString(hResModule, IDS_CFG_RE_ARNUT, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(buf, sizeof(buf), fmt, - pdisp->item.pszText); - khui_alert_set_title(alert, buf); - - LoadString(hResModule, IDS_CFG_RE_ARNUM, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(buf, sizeof(buf), fmt, - pdisp->item.pszText); - khui_alert_set_message(alert, buf); - - khui_alert_add_command(alert, KHUI_PACTION_CLOSE); - khui_alert_set_severity(alert, KHERR_INFO); - - khui_alert_show_modal(alert); - khui_alert_release(alert); - - return TRUE; - } - - n = d->n_realms; - k5_assert_n_realms(d, n+1); - StringCbCopy(d->realms[n].realm, - sizeof(d->realms[n].realm), - pdisp->item.pszText); - d->realms[n].flags = K5_RDFLAG_NEW; - d->n_realms++; - - d->flags |= K5_CDFLAG_MOD_REALMS; - - k5_update_realms_display(hw_rlm, d); - } - - return TRUE; - } - break; - - case LVN_KEYDOWN: - { - NMLVKEYDOWN * pnmk; - - pnmk = (NMLVKEYDOWN *) lParam; - - if (pnmk->wVKey == VK_DELETE) { - k5_delete_realms(hwnd, d); - return TRUE; - } - } - break; - } - } else if (pnmh->idFrom == IDC_CFG_KDC) { - hw_kdc = pnmh->hwndFrom; - - switch (pnmh->code) { - case LVN_BEGINLABELEDIT: - { - NMLVDISPINFO * pdisp; - LVITEM lvi; - - pdisp = (NMLVDISPINFO *) lParam; - - ZeroMemory(&lvi, sizeof(lvi)); - lvi.iItem = pdisp->item.iItem; - lvi.mask = LVIF_PARAM; - - ListView_GetItem(hw_kdc, &lvi); - - /* Only allow editing if the user is trying to - edit the <New server> entry. */ - if (pdisp->item.iItem == -1 || - lvi.lParam != -1) { - SetWindowLongPtr(hwnd, DWLP_MSGRESULT, TRUE); - } else { - HWND hw_edit; - - hw_edit = ListView_GetEditControl(hw_kdc); - if (hw_edit != NULL) { - SendMessage(hw_edit, - EM_SETLIMITTEXT, - K5_MAXCCH_HOST - 1, - 0); - } - SetWindowLongPtr(hwnd, DWLP_MSGRESULT, FALSE); - } - return TRUE; - } - break; - - case LVN_ENDLABELEDIT: - { - NMLVDISPINFO * pdisp; - khm_size r; - khm_size k; - - r = d->c_realm; - - pdisp = (NMLVDISPINFO *) lParam; - - if (pdisp->item.pszText && pdisp->item.pszText[0]) { - - /* first of all, check if we already have - a KDC by this name... */ - for (k=0; k < d->realms[r].n_kdcs; k++) { - if ((d->realms[r].kdcs[k].flags & K5_RKFLAG_NEW) && - (d->realms[r].kdcs[k].flags & K5_RKFLAG_DELETED)) - continue; - - if (!_wcsicmp(d->realms[r].kdcs[k].name, - pdisp->item.pszText)) - break; - } - - if (k < d->realms[r].n_kdcs) { - khui_alert * alert = NULL; - wchar_t buf[K5_MAXCCH_HOST + 256]; - wchar_t fmt[256]; - - khui_alert_create_empty(&alert); - - LoadString(hResModule, IDS_CFG_RE_ASNUT, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(buf, sizeof(buf), fmt, - pdisp->item.pszText, - d->realms[r].realm); - khui_alert_set_title(alert, buf); - - LoadString(hResModule, IDS_CFG_RE_ASNUM, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(buf, sizeof(buf), fmt, - pdisp->item.pszText, - d->realms[r].realm); - khui_alert_set_message(alert, buf); - - khui_alert_set_severity(alert, KHERR_INFO); - khui_alert_show_modal(alert); - - khui_alert_release(alert); - - SetWindowLongPtr(hwnd, DWLP_MSGRESULT, FALSE); - return TRUE; - } - - if (k >= K5_MAX_KDC) { - SetWindowLongPtr(hwnd, DWLP_MSGRESULT, FALSE); - /* TODO: show a message box saying - there are too many KDC's - already. */ - return TRUE; - } - - StringCbCopy(d->realms[r].kdcs[k].name, - sizeof(d->realms[0].kdcs[0].name), - pdisp->item.pszText); - d->realms[r].kdcs[k].flags = K5_RKFLAG_NEW; - d->realms[r].n_kdcs++; - - k5_update_kdcs_display(hw_kdc, d, d->c_realm); - - if (!(d->realms[r].flags & K5_RDFLAG_MODIFED)) { - d->flags |= K5_CDFLAG_MOD_REALMS; - d->realms[r].flags |= K5_RDFLAG_MODIFED; - k5_update_realms_display(GetDlgItem(hwnd, IDC_CFG_REALMS), d); - } - } - return TRUE; - } - break; - - case LVN_KEYDOWN: - { - NMLVKEYDOWN * pnmk; - - pnmk = (NMLVKEYDOWN *) lParam; - - if (pnmk->wVKey == VK_DELETE) { - k5_delete_servers(hwnd, d); - } - return TRUE; - } - break; - - case NM_CLICK: - { - LPNMITEMACTIVATE lpnmi; - LVHITTESTINFO hti; - LVITEM lvi; - khm_size r; - khm_size k; - - r = d->c_realm; - - lpnmi = (LPNMITEMACTIVATE) lParam; - - ZeroMemory(&hti, sizeof(hti)); - hti.pt = lpnmi->ptAction; - ListView_SubItemHitTest(hw_kdc, &hti); - - if (hti.iSubItem != 0) { - - ZeroMemory(&lvi, sizeof(lvi)); - - lvi.mask = LVIF_PARAM; - lvi.iItem = hti.iItem; - ListView_GetItem(hw_kdc, &lvi); - - if (lvi.lParam < 0 || lvi.lParam >= (int) d->realms[r].n_kdcs) - return TRUE; - - k = lvi.lParam; - - if (hti.iSubItem == K5_KDCSI_ADMIN) { - d->realms[r].kdcs[k].admin = !d->realms[r].kdcs[k].admin; - d->realms[r].kdcs[k].flags |= K5_RKFLAG_MOD_ADMIN; - } else if (hti.iSubItem == K5_KDCSI_MASTER) { - if (d->realms[r].kdcs[k].master) { - d->realms[r].kdcs[k].master = FALSE; - d->realms[r].kdcs[k].flags |= K5_RKFLAG_MOD_MASTER; - } else { - khm_size i; - - for (i=0; i < d->realms[r].n_kdcs; i++) { - if ((d->realms[r].kdcs[i].flags & K5_RKFLAG_DELETED) && - (d->realms[r].kdcs[i].flags & K5_RKFLAG_NEW)) - continue; - if (d->realms[r].kdcs[i].master) { - d->realms[r].kdcs[i].master = FALSE; - d->realms[r].kdcs[i].flags |= K5_RKFLAG_MOD_MASTER; - } - } - - d->realms[r].kdcs[k].master = TRUE; - d->realms[r].kdcs[k].flags |= K5_RKFLAG_MOD_MASTER; - } - } else { -#ifdef DEBUG - assert(FALSE); -#endif - } - - if (!(d->realms[r].flags & K5_RDFLAG_MODIFED)) { - d->realms[r].flags |= K5_RDFLAG_MODIFED; - d->flags |= K5_CDFLAG_MOD_REALMS; - k5_update_realms_display(GetDlgItem(hwnd, IDC_CFG_REALMS), d); - } - - k5_update_kdcs_display(hw_kdc, d, r); - } - } - break; - } - } else if (pnmh->idFrom == IDC_CFG_DMAP) { - hw_dmp = pnmh->hwndFrom; - - switch (pnmh->code) { - case LVN_BEGINLABELEDIT: - { - NMLVDISPINFO * pdisp; - LVITEM lvi; - - pdisp = (NMLVDISPINFO *) lParam; - - ZeroMemory(&lvi, sizeof(lvi)); - lvi.iItem = pdisp->item.iItem; - lvi.mask = LVIF_PARAM; - - ListView_GetItem(hw_dmp, &lvi); - - /* Only allow editing if the user is trying to - edit the <New domain mapping> entry. */ - if (pdisp->item.iItem == -1 || - lvi.lParam != -1) { - SetWindowLongPtr(hwnd, DWLP_MSGRESULT, TRUE); - } else { - HWND hw_edit; - - hw_edit = ListView_GetEditControl(hw_dmp); - if (hw_edit != NULL) { - SendMessage(hw_edit, - EM_SETLIMITTEXT, - K5_MAXCCH_HOST - 1, - 0); - } - SetWindowLongPtr(hwnd, DWLP_MSGRESULT, FALSE); - } - return TRUE; - } - break; - - case LVN_ENDLABELEDIT: - { - NMLVDISPINFO * pdisp; - khm_size r; - khm_size m; - - r = d->c_realm; - - pdisp = (NMLVDISPINFO *) lParam; - - if (pdisp->item.pszText && pdisp->item.pszText[0]) { - - /* first check if this is unique */ - for (m=0; m < d->realms[r].n_domain_maps; m++) { - if ((d->realms[r].domain_maps[m].flags & K5_DMFLAG_NEW) && - (d->realms[r].domain_maps[m].flags & K5_DMFLAG_DELETED)) - continue; - - if (!_wcsicmp(d->realms[r].domain_maps[m].name, - pdisp->item.pszText)) - break; - } - - if (m < d->realms[r].n_domain_maps) { - khui_alert * alert; - wchar_t buf[K5_MAXCCH_HOST + 256]; - wchar_t fmt[256]; - - khui_alert_create_empty(&alert); - - LoadString(hResModule, IDS_CFG_RE_DMNUT, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(buf, sizeof(buf), fmt, - pdisp->item.pszText, - d->realms[r].realm); - khui_alert_set_title(alert, buf); - - LoadString(hResModule, IDS_CFG_RE_DMNUM, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(buf, sizeof(buf), fmt, - pdisp->item.pszText, - d->realms[r].realm); - khui_alert_set_message(alert, buf); - - khui_alert_set_severity(alert, KHERR_INFO); - khui_alert_show_modal(alert); - - khui_alert_release(alert); - - SetWindowLongPtr(hwnd, DWLP_MSGRESULT, FALSE); - return TRUE; - } - - if (m >= K5_MAX_DOMAIN_MAPPINGS) { - SetWindowLongPtr(hwnd, DWLP_MSGRESULT, FALSE); - /* TODO: show a message box saying - there are too many domain mappings - already. */ - return TRUE; - } - - StringCbCopy(d->realms[r].domain_maps[m].name, - sizeof(d->realms[0].domain_maps[0].name), - pdisp->item.pszText); - d->realms[r].domain_maps[m].flags = K5_DMFLAG_NEW; - d->realms[r].n_domain_maps++; - - k5_update_dmap_display(hw_dmp, d, d->c_realm); - - if (!(d->realms[r].flags & K5_RDFLAG_MODIFED)) { - d->flags |= K5_CDFLAG_MOD_REALMS; - d->realms[r].flags |= K5_RDFLAG_MODIFED; - k5_update_realms_display(GetDlgItem(hwnd, IDC_CFG_REALMS), d); - } - } - return TRUE; - } - break; - - case LVN_KEYDOWN: - { - NMLVKEYDOWN * pnmk; - - pnmk = (NMLVKEYDOWN *) lParam; - - if (pnmk->wVKey == VK_DELETE) { - k5_delete_dmap(hwnd, d); - return TRUE; - } - } - break; - } - } /* end of handling DMAP notifications */ - } - break; - - case WM_COMMAND: - switch(LOWORD(wParam)) { - case CMD_NEW_REALM: - { - ListView_EditLabel(GetDlgItem(hwnd, IDC_CFG_REALMS), 0); - - return TRUE; - } - break; - - case CMD_DEL_REALM: - { - k5_delete_realms(hwnd, d); - - return TRUE; - } - break; - - case CMD_NEW_SERVER: - { - ListView_EditLabel(GetDlgItem(hwnd, IDC_CFG_KDC), 0); - - return TRUE; - } - break; - - case CMD_DEL_SERVER: - { - k5_delete_servers(hwnd, d); - - return TRUE; - } - break; - - case CMD_MAKE_ADMIN: - { - HWND hw_kdc; - int idx; - khm_size r; - khm_size k; - BOOL modified = FALSE; - - r = d->c_realm; - - hw_kdc = GetDlgItem(hwnd, IDC_CFG_KDC); - - if (ListView_GetSelectedCount(hw_kdc) != 1) - return TRUE; - - idx = -1; - while ((idx = ListView_GetNextItem(hw_kdc, idx, - LVNI_SELECTED)) != -1) { - LVITEM lvi; - - ZeroMemory(&lvi, sizeof(lvi)); - - lvi.mask = LVIF_PARAM; - lvi.iItem = idx; - ListView_GetItem(hw_kdc, &lvi); - - k = lvi.lParam; - - if (lvi.lParam >= 0 && lvi.lParam < (int) d->realms[r].n_kdcs) { - d->realms[r].kdcs[k].admin = !d->realms[r].kdcs[k].admin; - d->realms[r].kdcs[k].flags |= K5_RKFLAG_MOD_ADMIN; - modified = TRUE; - - break; - } - } - - if (modified) { - if (!(d->realms[r].flags & K5_RDFLAG_MODIFED)) { - d->flags |= K5_CDFLAG_MOD_REALMS; - d->realms[r].flags |= K5_RDFLAG_MODIFED; - k5_update_realms_display(GetDlgItem(hwnd, IDC_CFG_REALMS), d); - } - } - - k5_update_kdcs_display(hw_kdc, d, r); - - return TRUE; - } - break; - - case CMD_MAKE_MASTER: - { - HWND hw_kdc; - int idx; - khm_size r; - khm_size k; - BOOL modified = FALSE; - - r = d->c_realm; - - hw_kdc = GetDlgItem(hwnd, IDC_CFG_KDC); - - if (ListView_GetSelectedCount(hw_kdc) != 1) - return TRUE; - - idx = -1; - while ((idx = ListView_GetNextItem(hw_kdc, idx, - LVNI_SELECTED)) != -1) { - LVITEM lvi; - - ZeroMemory(&lvi, sizeof(lvi)); - - lvi.mask = LVIF_PARAM; - lvi.iItem = idx; - ListView_GetItem(hw_kdc, &lvi); - - k = lvi.lParam; - - if (lvi.lParam >= 0 && lvi.lParam < (int) d->realms[r].n_kdcs) { - if (d->realms[r].kdcs[k].master) { - d->realms[r].kdcs[k].master = FALSE; - } else { - khm_size i; - - for (i=0; i < d->realms[r].n_kdcs; i++) { - if ((d->realms[r].kdcs[i].flags & K5_RKFLAG_NEW) && - (d->realms[r].kdcs[i].flags & K5_RKFLAG_DELETED)) - continue; - - if (d->realms[r].kdcs[i].master) { - d->realms[r].kdcs[i].master = FALSE; - d->realms[r].kdcs[i].flags |= K5_RKFLAG_MOD_MASTER; - } - } - - d->realms[r].kdcs[k].master = TRUE; - } - d->realms[r].kdcs[k].flags |= K5_RKFLAG_MOD_MASTER; - modified = TRUE; - - break; - } - } - - if (modified) { - if (!(d->realms[r].flags & K5_RDFLAG_MODIFED)) { - d->flags |= K5_CDFLAG_MOD_REALMS; - d->realms[r].flags |= K5_RDFLAG_MODIFED; - k5_update_realms_display(hwnd, d); - } - } - - k5_update_kdcs_display(hw_kdc, d, r); - - return TRUE; - } - break; - - case CMD_NEW_DMAP: - { - ListView_EditLabel(GetDlgItem(hwnd, IDC_CFG_DMAP), 0); - - return TRUE; - } - break; - - case CMD_DEL_DMAP: - { - k5_delete_dmap(hwnd, d); - - return TRUE; - } - break; - } - break; - - case WM_DESTROY: - if (d->hm_realms_ctx) - DestroyMenu(d->hm_realms_ctx); - if (d->hm_kdc_ctx) - DestroyMenu(d->hm_kdc_ctx); - if (d->hm_dmap_ctx) - DestroyMenu(d->hm_dmap_ctx); - - d->hm_realms_ctx = NULL; - d->hm_kdc_ctx = NULL; - d->hm_dmap_ctx = NULL; - break; - - case KHUI_WM_CFG_NOTIFY: - /* the realms dialog receives this notification after the top - level krb5 configuration panel has received it. */ - if (HIWORD(wParam) == WMCFG_APPLY) { - int applied; - - applied = k5_write_config_data(d); - k5_purge_config_data(d, TRUE, TRUE, TRUE); - k5_update_realms_display(GetDlgItem(hwnd, IDC_CFG_REALMS), d); - if (d->c_realm != -1) { - k5_update_kdcs_display(GetDlgItem(hwnd, IDC_CFG_KDC), d, d->c_realm); - k5_update_dmap_display(GetDlgItem(hwnd, IDC_CFG_DMAP), d, d->c_realm); - } else { - k5_update_kdcs_display(GetDlgItem(hwnd, IDC_CFG_KDC), NULL, 0); - k5_update_dmap_display(GetDlgItem(hwnd, IDC_CFG_DMAP), NULL, 0); - } - khui_cfg_set_flags(d->node_realm, - (applied ? KHUI_CNFLAG_APPLIED : 0), - KHUI_CNFLAG_APPLIED); - - } - break; - } - return FALSE; -} - -void -k5_register_config_panels(void) { - khui_config_node node; - khui_config_node_reg reg; - wchar_t wshort[KHUI_MAXCCH_SHORT_DESC]; - wchar_t wlong[KHUI_MAXCCH_LONG_DESC]; - - ZeroMemory(&reg, sizeof(reg)); - - LoadString(hResModule, IDS_K5CFG_SHORT_DESC, - wshort, ARRAYLENGTH(wshort)); - LoadString(hResModule, IDS_K5CFG_LONG_DESC, - wlong, ARRAYLENGTH(wlong)); - - reg.name = L"Kerberos5"; - reg.short_desc = wshort; - reg.long_desc = wlong; - reg.h_module = hResModule; - reg.dlg_template = MAKEINTRESOURCE(IDD_CONFIG); - reg.dlg_proc = k5_config_dlgproc; - reg.flags = 0; - - khui_cfg_register(NULL, &reg); - - if (KHM_FAILED(khui_cfg_open(NULL, L"Kerberos5", &node))) { - node = NULL; -#ifdef DEBUG - assert(FALSE); -#endif - } - - ZeroMemory(&reg, sizeof(reg)); - - LoadString(hResModule, IDS_K5RLM_SHORT_DESC, - wshort, ARRAYLENGTH(wshort)); - LoadString(hResModule, IDS_K5RLM_LONG_DESC, - wlong, ARRAYLENGTH(wlong)); - - reg.name = L"KerberosRealms"; - reg.short_desc = wshort; - reg.long_desc = wlong; - reg.h_module = hResModule; - reg.dlg_template = MAKEINTRESOURCE(IDD_CFG_REALMS); - reg.dlg_proc = k5_realms_dlgproc; - reg.flags = 0; - - khui_cfg_register(node, &reg); - - ZeroMemory(&reg, sizeof(reg)); - - LoadString(hResModule, IDS_K5CCC_SHORT_DESC, - wshort, ARRAYLENGTH(wshort)); - LoadString(hResModule, IDS_K5CCC_LONG_DESC, - wlong, ARRAYLENGTH(wlong)); - - reg.name = L"KerberosCCaches"; - reg.short_desc = wshort; - reg.long_desc = wlong; - reg.h_module = hResModule; - reg.dlg_template = MAKEINTRESOURCE(IDD_CFG_CACHES); - reg.dlg_proc = k5_ccconfig_dlgproc; - reg.flags = 0; - - khui_cfg_register(node, &reg); - - khui_cfg_release(node); - - if (KHM_FAILED(khui_cfg_open(NULL, L"KhmIdentities", &node))) { - node = NULL; -#ifdef DEBUG - assert(FALSE); -#endif - } - - ZeroMemory(&reg, sizeof(reg)); - - LoadString(hResModule, IDS_K5CFG_IDS_SHORT_DESC, - wshort, ARRAYLENGTH(wshort)); - LoadString(hResModule, IDS_K5CFG_IDS_LONG_DESC, - wlong, ARRAYLENGTH(wlong)); - - reg.name = L"KerberosIdentities"; - reg.short_desc = wshort; - reg.long_desc = wlong; - reg.h_module = hResModule; - reg.dlg_template = MAKEINTRESOURCE(IDD_CFG_IDS_TAB); - reg.dlg_proc = k5_ids_tab_dlgproc; - reg.flags = KHUI_CNFLAG_SUBPANEL; - - khui_cfg_register(node, &reg); - - ZeroMemory(&reg, sizeof(reg)); - - LoadString(hResModule, IDS_K5CFG_ID_SHORT_DESC, - wshort, ARRAYLENGTH(wshort)); - LoadString(hResModule, IDS_K5CFG_ID_LONG_DESC, - wlong, ARRAYLENGTH(wlong)); - - reg.name = L"KerberosIdentitiesPlural"; - reg.short_desc = wshort; - reg.long_desc = wlong; - reg.h_module = hResModule; - reg.dlg_template = MAKEINTRESOURCE(IDD_CFG_ID_TAB); - reg.dlg_proc = k5_id_tab_dlgproc; - reg.flags = KHUI_CNFLAG_SUBPANEL | KHUI_CNFLAG_PLURAL; - - khui_cfg_register(node, &reg); - - khui_cfg_release(node); -} - -void -k5_unregister_config_panels(void) { - khui_config_node node_main; - khui_config_node node_realms; - khui_config_node node_ids; - khui_config_node node_tab; - khui_config_node node_ccaches; - - if (KHM_FAILED(khui_cfg_open(NULL, L"Kerberos5", &node_main))) { - node_main = NULL; -#ifdef DEBUG - assert(FALSE); -#endif - } - - if (KHM_SUCCEEDED(khui_cfg_open(node_main, L"KerberosRealms", - &node_realms))) { - khui_cfg_remove(node_realms); - khui_cfg_release(node_realms); - } else { -#ifdef DEBUG - assert(FALSE); -#endif - } - - if (KHM_SUCCEEDED(khui_cfg_open(node_main, L"KerberosCCaches", - &node_ccaches))) { - khui_cfg_remove(node_ccaches); - khui_cfg_release(node_ccaches); - } -#ifdef DEBUG - else - assert(FALSE); -#endif - - if (node_main) { - khui_cfg_remove(node_main); - khui_cfg_release(node_main); - } - - if (KHM_FAILED(khui_cfg_open(NULL, L"KhmIdentities", &node_ids))) { - node_ids = NULL; -#ifdef DEBUG - assert(FALSE); -#endif - } - - if (KHM_SUCCEEDED(khui_cfg_open(node_ids, L"KerberosIdentities", &node_tab))) { - khui_cfg_remove(node_tab); - khui_cfg_release(node_tab); - } - if (KHM_SUCCEEDED(khui_cfg_open(node_ids, L"KerberosIdentitiesPlural", &node_tab))) { - khui_cfg_remove(node_tab); - khui_cfg_release(node_tab); - } - - if (node_ids) - khui_cfg_release(node_ids); -} diff --git a/src/windows/identity/plugins/krb5/krb5configid.c b/src/windows/identity/plugins/krb5/krb5configid.c deleted file mode 100644 index b0dff3cb9..000000000 --- a/src/windows/identity/plugins/krb5/krb5configid.c +++ /dev/null @@ -1,366 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<krbcred.h> -#include<krb5.h> -#include<assert.h> -#include<lm.h> -#include<commctrl.h> -#include<shlwapi.h> - -#include<strsafe.h> - -typedef struct tag_k5_id_dlg_data { - khui_config_init_data cfg; - - khm_handle ident; - - khui_tracker tc_life; - khui_tracker tc_renew; - - wchar_t ccache[KRB5_MAXCCH_CCNAME]; - - khm_boolean renewable; - khm_boolean forwardable; - khm_boolean proxiable; - khm_boolean addressless; - - DWORD public_ip; - - time_t life; - time_t renew_life; -} k5_id_dlg_data; - -static void -k5_id_read_params(k5_id_dlg_data * d) { - - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - khm_size cb; - khm_int32 rv; - khm_int32 t; - khm_handle csp_ident = NULL; - - cb = sizeof(idname); - rv = khui_cfg_get_name(d->cfg.ctx_node, idname, &cb); -#ifdef DEBUG - assert(KHM_SUCCEEDED(rv)); -#endif - - rv = kcdb_identity_create(idname, 0, &d->ident); -#ifdef DEBUG - assert(KHM_SUCCEEDED(rv)); -#endif - - khm_krb5_get_identity_config(d->ident, 0, &csp_ident); - - rv = khc_read_int32(csp_ident, L"DefaultLifetime", &t); - if (KHM_SUCCEEDED(rv)) - d->life = t; - else - d->life = 36000; - - rv = khc_read_int32(csp_ident, L"DefaultRenewLifetime", &t); - if (KHM_SUCCEEDED(rv)) - d->renew_life = t; - else - d->renew_life = 604800; - - rv = khc_read_int32(csp_ident, L"Renewable", &t); - if (KHM_SUCCEEDED(rv)) - d->renewable = !!t; - else - d->renewable = TRUE; - - rv = khc_read_int32(csp_ident, L"Forwardable", &t); - if (KHM_SUCCEEDED(rv)) - d->forwardable = !!t; - else - d->forwardable = FALSE; - - rv = khc_read_int32(csp_ident, L"Proxiable", &t); - if (KHM_SUCCEEDED(rv)) - d->proxiable = !!t; - else - d->proxiable = FALSE; - - rv = khc_read_int32(csp_ident, L"Addressless", &t); - if (KHM_SUCCEEDED(rv)) - d->addressless = !!t; - else - d->addressless = TRUE; - - rv = khc_read_int32(csp_ident, L"PublicIP", &t); - if (KHM_SUCCEEDED(rv)) - d->public_ip = (khm_ui_4) t; - else - d->public_ip = 0; - - cb = sizeof(d->ccache); - rv = khm_krb5_get_identity_default_ccache(d->ident, d->ccache, &cb); - -#ifdef DEBUG - assert(KHM_SUCCEEDED(rv)); -#endif - - khui_tracker_initialize(&d->tc_life); - d->tc_life.current = d->life; - d->tc_life.min = 0; - d->tc_life.max = 3600 * 24 * 7; - - khui_tracker_initialize(&d->tc_renew); - d->tc_renew.current = d->renew_life; - d->tc_renew.min = 0; - d->tc_renew.max = 3600 * 24 * 30; - - if (csp_ident) - khc_close_space(csp_ident); -} - -static khm_boolean -k5_id_is_mod(HWND hw, k5_id_dlg_data * d) { - wchar_t ccache[KRB5_MAXCCH_CCNAME]; - DWORD dwaddress = 0; - - GetDlgItemText(hw, IDC_CFG_CCACHE, ccache, ARRAYLENGTH(ccache)); - - SendDlgItemMessage(hw, IDC_CFG_PUBLICIP, IPM_GETADDRESS, - 0, (LPARAM) &dwaddress); - - if (_wcsicmp(ccache, d->ccache) || - - d->tc_renew.current != d->renew_life || - - d->tc_life.current != d->life || - - (IsDlgButtonChecked(hw, IDC_CFG_RENEW) == BST_CHECKED) != d->renewable || - - (IsDlgButtonChecked(hw, IDC_CFG_FORWARD) == BST_CHECKED) != d->forwardable || - - (IsDlgButtonChecked(hw, IDC_CFG_ADDRESSLESS) == BST_CHECKED) - != d->addressless || - - dwaddress != d->public_ip) - - return TRUE; - - return FALSE; -} - -static void -k5_id_check_mod(HWND hw, k5_id_dlg_data * d) { - BOOL modified = k5_id_is_mod(hw, d); - - khui_cfg_set_flags_inst(&d->cfg, - (modified)?KHUI_CNFLAG_MODIFIED:0, - KHUI_CNFLAG_MODIFIED); -} - -static void -k5_id_write_params(HWND hw, k5_id_dlg_data * d) { - - khm_handle csp_idroot = NULL; - khm_handle csp_ident = NULL; - wchar_t ccache[KRB5_MAXCCH_CCNAME]; - khm_size cb; - khm_int32 rv; - khm_boolean b; - khm_boolean applied = FALSE; - DWORD dwaddress = 0; - - if (!k5_id_is_mod(hw, d)) - return; - - rv = kcdb_identity_get_config(d->ident, KHM_FLAG_CREATE, &csp_idroot); - if (KHM_SUCCEEDED(rv)) { - khc_open_space(csp_idroot, CSNAME_KRB5CRED, - KHM_FLAG_CREATE | KCONF_FLAG_WRITEIFMOD, - &csp_ident); - } - - if (csp_idroot) - khc_close_space(csp_idroot); - - if (!csp_ident) - return; - - if (d->life != d->tc_life.current) { - d->life = d->tc_life.current; - khc_write_int32(csp_ident, L"DefaultLifetime", (khm_int32) d->life); - applied = TRUE; - } - - if (d->renew_life != d->tc_renew.current) { - d->renew_life = d->tc_renew.current; - khc_write_int32(csp_ident, L"DefaultRenewLifetime", (khm_int32) d->renew_life); - applied = TRUE; - } - - b = (IsDlgButtonChecked(hw, IDC_CFG_RENEW) == BST_CHECKED); - if (b != d->renewable) { - d->renewable = b; - khc_write_int32(csp_ident, L"Renewable", (khm_int32) b); - applied = TRUE; - } - - b = (IsDlgButtonChecked(hw, IDC_CFG_FORWARD) == BST_CHECKED); - if (b != d->forwardable) { - d->forwardable = b; - khc_write_int32(csp_ident, L"Forwardable", (khm_int32) b); - applied = TRUE; - } - - b = (IsDlgButtonChecked(hw, IDC_CFG_ADDRESSLESS) == BST_CHECKED); - if (b != d->addressless) { - d->addressless = b; - khc_write_int32(csp_ident, L"Addressless", (khm_int32) b); - applied = TRUE; - } - - SendDlgItemMessage(hw, IDC_CFG_PUBLICIP, IPM_GETADDRESS, - 0, (LPARAM) &dwaddress); - - if (dwaddress != d->public_ip) { - d->public_ip = dwaddress; - khc_write_int32(csp_ident, L"PublicIP", (khm_int32) dwaddress); - applied = TRUE; - } - - GetDlgItemText(hw, IDC_CFG_CCACHE, ccache, ARRAYLENGTH(ccache)); - - if (SUCCEEDED(StringCbLength(ccache, sizeof(ccache), &cb)) && - cb > sizeof(wchar_t)) { - - if (wcscmp(ccache, d->ccache)) { - khc_write_string(csp_ident, L"DefaultCCName", ccache); - StringCbCopy(d->ccache, sizeof(d->ccache), ccache); - applied = TRUE; - } - - } else { - khc_remove_value(csp_ident, L"DefaultCCName", KCONF_FLAG_USER); - d->ccache[0] = L'\0'; - applied = TRUE; - } - - if (csp_ident) - khc_close_space(csp_ident); - - khui_cfg_set_flags_inst(&d->cfg, - (applied ? KHUI_CNFLAG_APPLIED : 0), - KHUI_CNFLAG_APPLIED | KHUI_CNFLAG_MODIFIED); -} - -INT_PTR CALLBACK -k5_id_tab_dlgproc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - - k5_id_dlg_data * d; - - switch(uMsg) { - case WM_INITDIALOG: - d = PMALLOC(sizeof(*d)); -#ifdef DEBUG - assert(d); -#endif - ZeroMemory(d, sizeof(*d)); - - d->cfg = *((khui_config_init_data *) lParam); - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) d); -#pragma warning(pop) - - k5_id_read_params(d); - - khui_tracker_install(GetDlgItem(hwnd, IDC_CFG_DEFLIFE), - &d->tc_life); - khui_tracker_install(GetDlgItem(hwnd, IDC_CFG_DEFRLIFE), - &d->tc_renew); - khui_tracker_refresh(&d->tc_life); - khui_tracker_refresh(&d->tc_renew); - - SetDlgItemText(hwnd, IDC_CFG_CCACHE, d->ccache); - - CheckDlgButton(hwnd, IDC_CFG_RENEW, - (d->renewable? BST_CHECKED: BST_UNCHECKED)); - - CheckDlgButton(hwnd, IDC_CFG_FORWARD, - (d->forwardable? BST_CHECKED: BST_UNCHECKED)); - - CheckDlgButton(hwnd, IDC_CFG_ADDRESSLESS, - (d->addressless? BST_CHECKED: BST_UNCHECKED)); - - SendDlgItemMessage(hwnd, IDC_CFG_PUBLICIP, - IPM_SETADDRESS, - 0, (LPARAM) d->public_ip); - break; - - case WM_COMMAND: - d = (k5_id_dlg_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - break; - - if (HIWORD(wParam) == EN_CHANGE || - HIWORD(wParam) == BN_CLICKED) - k5_id_check_mod(hwnd, d); - break; - - case KHUI_WM_CFG_NOTIFY: - d = (k5_id_dlg_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - break; - - if (HIWORD(wParam) == WMCFG_APPLY) { - k5_id_write_params(hwnd, d); - } - break; - - case WM_DESTROY: - d = (k5_id_dlg_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - break; - - khui_tracker_kill_controls(&d->tc_life); - khui_tracker_kill_controls(&d->tc_renew); - - if (d->ident) - kcdb_identity_release(d->ident); - - PFREE(d); - SetWindowLongPtr(hwnd, DWLP_USER, 0); - break; - } - return FALSE; -} diff --git a/src/windows/identity/plugins/krb5/krb5configids.c b/src/windows/identity/plugins/krb5/krb5configids.c deleted file mode 100644 index 70af85716..000000000 --- a/src/windows/identity/plugins/krb5/krb5configids.c +++ /dev/null @@ -1,281 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<krbcred.h> -#include<krb5.h> -#include<assert.h> -#include<lm.h> -#include<commctrl.h> -#include<shlwapi.h> - -typedef struct tag_k5_ids_opts { - khm_int32 renewable; - khm_int32 forwardable; - khm_int32 addressless; -} k5_ids_opts; - -typedef struct tag_k5_ids_dlg_data { - khui_config_init_data cfg; - - khui_tracker tc_life; - khui_tracker tc_renew; - khui_tracker tc_life_min; - khui_tracker tc_life_max; - khui_tracker tc_renew_min; - khui_tracker tc_renew_max; - - time_t life; - time_t renew_life; - time_t life_min; - time_t life_max; - time_t renew_min; - time_t renew_max; - - k5_ids_opts opt; - k5_ids_opts opt_saved; - -} k5_ids_dlg_data; - -static khm_boolean -k5_ids_is_mod(k5_ids_dlg_data * d) { - if (d->life != d->tc_life.current || - d->renew_life != d->tc_renew.current || - d->life_max != d->tc_life_max.current || - d->life_min != d->tc_life_min.current || - d->renew_max != d->tc_renew_max.current || - d->renew_min != d->tc_renew_min.current || - !!d->opt.renewable != !!d->opt_saved.renewable || - !!d->opt.forwardable != !!d->opt_saved.forwardable || - !!d->opt.addressless != !!d->opt_saved.addressless) - return TRUE; - return FALSE; -} - -static void -k5_ids_check_mod(k5_ids_dlg_data * d) { - BOOL modified = k5_ids_is_mod(d); - - khui_cfg_set_flags_inst(&d->cfg, - (modified)?KHUI_CNFLAG_MODIFIED:0, - KHUI_CNFLAG_MODIFIED); -} - -static void -k5_ids_write_params(k5_ids_dlg_data * d) { - - khm_int32 rv; - -#ifdef DEBUG - assert(csp_params); -#endif - - if (!k5_ids_is_mod(d)) - return; - -#define WRITEPARAM(po,pn,vn) \ - if (po != pn) { \ - po = pn; \ - rv = khc_write_int32(csp_params, vn, (khm_int32) po); \ - assert(KHM_SUCCEEDED(rv)); \ - } - - WRITEPARAM(d->life,d->tc_life.current, L"DefaultLifetime"); - WRITEPARAM(d->renew_life,d->tc_renew.current, L"DefaultRenewLifetime"); - WRITEPARAM(d->life_max,d->tc_life_max.current, L"MaxLifetime"); - WRITEPARAM(d->life_min,d->tc_life_min.current, L"MinLifetime"); - WRITEPARAM(d->renew_max,d->tc_renew_max.current, L"MaxRenewLifetime"); - WRITEPARAM(d->renew_min,d->tc_renew_min.current, L"MinRenewLifetime"); - WRITEPARAM(d->opt_saved.renewable, d->opt.renewable, L"Renewable"); - WRITEPARAM(d->opt_saved.forwardable, d->opt.forwardable, L"Forwardable"); - WRITEPARAM(d->opt_saved.addressless, d->opt.addressless, L"Addressless"); - -#undef WRITEPARAM - - khui_cfg_set_flags_inst(&d->cfg, - KHUI_CNFLAG_APPLIED, - KHUI_CNFLAG_APPLIED | KHUI_CNFLAG_MODIFIED); -} - -static void -k5_ids_read_params(k5_ids_dlg_data * d) { - k5_params p; - - khm_krb5_get_identity_params(NULL, &p); - - d->life = p.lifetime; - d->life_max = p.lifetime_max; - d->life_min = p.lifetime_min; - - d->renew_life = p.renew_life; - d->renew_max = p.renew_life_max; - d->renew_min = p.renew_life_min; - - d->opt_saved.forwardable = p.forwardable; - d->opt_saved.renewable = p.renewable; - d->opt_saved.addressless = p.addressless; - - d->opt = d->opt_saved; - - khui_tracker_initialize(&d->tc_life); - d->tc_life.current = d->life; - d->tc_life.min = 0; - d->tc_life.max = 3600 * 24 * 7; - - khui_tracker_initialize(&d->tc_renew); - d->tc_renew.current = d->renew_life; - d->tc_renew.min = 0; - d->tc_renew.max = 3600 * 24 * 30; - - khui_tracker_initialize(&d->tc_life_min); - d->tc_life_min.current = d->life_min; - d->tc_life_min.min = d->tc_life.min; - d->tc_life_min.max = d->tc_life.max; - - khui_tracker_initialize(&d->tc_life_max); - d->tc_life_max.current = d->life_max; - d->tc_life_max.min = d->tc_life.min; - d->tc_life_max.max = d->tc_life.max; - - khui_tracker_initialize(&d->tc_renew_min); - d->tc_renew_min.current = d->renew_min; - d->tc_renew_min.min = d->tc_renew.min; - d->tc_renew_min.max = d->tc_renew.max; - - khui_tracker_initialize(&d->tc_renew_max); - d->tc_renew_max.current = d->renew_max; - d->tc_renew_max.min = d->tc_renew.min; - d->tc_renew_max.max = d->tc_renew.max; -} - -INT_PTR CALLBACK -k5_ids_tab_dlgproc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - k5_ids_dlg_data * d; - - switch(uMsg) { - case WM_INITDIALOG: - d = PMALLOC(sizeof(*d)); -#ifdef DEBUG - assert(d); -#endif - ZeroMemory(d, sizeof(*d)); -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) d); -#pragma warning(pop) - - d->cfg = *((khui_config_init_data *) lParam); - - k5_ids_read_params(d); - - khui_tracker_install(GetDlgItem(hwnd, IDC_CFG_DEFLIFE), - &d->tc_life); - khui_tracker_install(GetDlgItem(hwnd, IDC_CFG_DEFRLIFE), - &d->tc_renew); - khui_tracker_install(GetDlgItem(hwnd, IDC_CFG_LRNG_MIN), - &d->tc_life_min); - khui_tracker_install(GetDlgItem(hwnd, IDC_CFG_LRNG_MAX), - &d->tc_life_max); - khui_tracker_install(GetDlgItem(hwnd, IDC_CFG_RLRNG_MIN), - &d->tc_renew_min); - khui_tracker_install(GetDlgItem(hwnd, IDC_CFG_RLRNG_MAX), - &d->tc_renew_max); - khui_tracker_refresh(&d->tc_life); - khui_tracker_refresh(&d->tc_life_min); - khui_tracker_refresh(&d->tc_life_max); - khui_tracker_refresh(&d->tc_renew); - khui_tracker_refresh(&d->tc_renew_min); - khui_tracker_refresh(&d->tc_renew_max); - - CheckDlgButton(hwnd, IDC_CFG_RENEW, (d->opt.renewable ? BST_CHECKED: BST_UNCHECKED)); - CheckDlgButton(hwnd, IDC_CFG_FORWARD, (d->opt.forwardable ? BST_CHECKED: BST_UNCHECKED)); - CheckDlgButton(hwnd, IDC_CFG_ADDRESSLESS, (d->opt.addressless ? BST_CHECKED: BST_UNCHECKED)); - break; - - case WM_COMMAND: - d = (k5_ids_dlg_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - break; - - if (HIWORD(wParam) == EN_CHANGE) { - k5_ids_check_mod(d); - } else if (HIWORD(wParam) == BN_CLICKED) { - switch (LOWORD(wParam)) { - case IDC_CFG_RENEW: - d->opt.renewable = (IsDlgButtonChecked(hwnd, IDC_CFG_RENEW) == BST_CHECKED); - break; - - case IDC_CFG_FORWARD: - d->opt.forwardable = (IsDlgButtonChecked(hwnd, IDC_CFG_FORWARD) == BST_CHECKED); - break; - - case IDC_CFG_ADDRESSLESS: - d->opt.addressless = (IsDlgButtonChecked(hwnd, IDC_CFG_ADDRESSLESS) == BST_CHECKED); - break; - } - - k5_ids_check_mod(d); - } - break; - - case KHUI_WM_CFG_NOTIFY: - d = (k5_ids_dlg_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - break; - - if (HIWORD(wParam) == WMCFG_APPLY) { - k5_ids_write_params(d); - } - break; - - case WM_DESTROY: - d = (k5_ids_dlg_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - break; - - khui_tracker_kill_controls(&d->tc_life); - khui_tracker_kill_controls(&d->tc_renew); - khui_tracker_kill_controls(&d->tc_life_min); - khui_tracker_kill_controls(&d->tc_life_max); - khui_tracker_kill_controls(&d->tc_renew_min); - khui_tracker_kill_controls(&d->tc_renew_max); - - PFREE(d); - - SetWindowLongPtr(hwnd, DWLP_USER, 0); - - break; - } - return FALSE; -} diff --git a/src/windows/identity/plugins/krb5/krb5funcs.c b/src/windows/identity/plugins/krb5/krb5funcs.c deleted file mode 100644 index a78ed45d7..000000000 --- a/src/windows/identity/plugins/krb5/krb5funcs.c +++ /dev/null @@ -1,3637 +0,0 @@ -/* -* Copyright (c) 2005 Massachusetts Institute of Technology -* 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 (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$ */ - -/* Originally this was krb5routines.c in Leash sources. Subsequently - * modified and adapted for NetIDMgr */ - -#include<krbcred.h> -#include<kherror.h> - -#define SECURITY_WIN32 -#include <security.h> - -#include <string.h> -#include <time.h> -#include <stdlib.h> -#include <assert.h> -#include <strsafe.h> - -long -khm_convert524(krb5_context alt_ctx) -{ - krb5_context ctx = 0; - krb5_error_code code = 0; - int icode = 0; - krb5_principal me = 0; - krb5_principal server = 0; - krb5_creds *v5creds = 0; - krb5_creds increds; - krb5_ccache cc = 0; - CREDENTIALS * v4creds = NULL; - static int init_ets = 1; - - if (!pkrb5_init_context || - !pkrb_in_tkt || - !pkrb524_init_ets || - !pkrb524_convert_creds_kdc) - return 0; - - v4creds = (CREDENTIALS *) PMALLOC(sizeof(CREDENTIALS)); - memset((char *) v4creds, 0, sizeof(CREDENTIALS)); - - memset((char *) &increds, 0, sizeof(increds)); - /* - From this point on, we can goto cleanup because increds is - initialized. - */ - - if (alt_ctx) - { - ctx = alt_ctx; - } - else - { - code = pkrb5_init_context(&ctx); - if (code) goto cleanup; - } - - code = pkrb5_cc_default(ctx, &cc); - if (code) goto cleanup; - - if ( init_ets ) { - pkrb524_init_ets(ctx); - init_ets = 0; - } - - if (code = pkrb5_cc_get_principal(ctx, cc, &me)) - goto cleanup; - - if ((code = pkrb5_build_principal(ctx, - &server, - krb5_princ_realm(ctx, me)->length, - krb5_princ_realm(ctx, me)->data, - "krbtgt", - krb5_princ_realm(ctx, me)->data, - NULL))) - { - goto cleanup; - } - - increds.client = me; - increds.server = server; - increds.times.endtime = 0; - increds.keyblock.enctype = ENCTYPE_DES_CBC_CRC; - if ((code = pkrb5_get_credentials(ctx, 0, - cc, - &increds, - &v5creds))) - { - goto cleanup; - } - - if ((icode = pkrb524_convert_creds_kdc(ctx, - v5creds, - v4creds))) - { - goto cleanup; - } - - /* initialize ticket cache */ - if ((icode = pkrb_in_tkt(v4creds->pname, v4creds->pinst, v4creds->realm) - != KSUCCESS)) - { - goto cleanup; - } - /* stash ticket, session key, etc. for future use */ - if ((icode = pkrb_save_credentials(v4creds->service, - v4creds->instance, - v4creds->realm, - v4creds->session, - v4creds->lifetime, - v4creds->kvno, - &(v4creds->ticket_st), - v4creds->issue_date))) - { - goto cleanup; - } - -cleanup: - memset(v4creds, 0, sizeof(v4creds)); - PFREE(v4creds); - - if (v5creds) { - pkrb5_free_creds(ctx, v5creds); - } - if (increds.client == me) - me = 0; - if (increds.server == server) - server = 0; - pkrb5_free_cred_contents(ctx, &increds); - if (server) { - pkrb5_free_principal(ctx, server); - } - if (me) { - pkrb5_free_principal(ctx, me); - } - pkrb5_cc_close(ctx, cc); - - if (ctx && (ctx != alt_ctx)) { - pkrb5_free_context(ctx); - } - return !(code || icode); -} - -#ifdef DEPRECATED_REMOVABLE -int com_addr(void) -{ - long ipAddr; - char loc_addr[ADDR_SZ]; - CREDENTIALS cred; - char service[40]; - char instance[40]; - // char addr[40]; - char realm[40]; - struct in_addr LocAddr; - int k_errno; - - if (pkrb_get_cred == NULL) - return(KSUCCESS); - - k_errno = (*pkrb_get_cred)(service,instance,realm,&cred); - if (k_errno) - return KRBERR(k_errno); - - while(1) { - ipAddr = (*pLocalHostAddr)(); - LocAddr.s_addr = ipAddr; - StringCbCopyA(loc_addr, sizeof(loc_addr), inet_ntoa(LocAddr)); - if ( strcmp(cred.address, loc_addr) != 0) { - /* TODO: do something about this */ - //Leash_kdestroy (); - break; - } - break; - } // while() - return 0; -} -#endif - -/* we use these structures to keep track of identities that we find - while going through the API, FILE and MSLSA caches and enumerating - credentials. The only identities we want to keep track of are the - ones that have an initial ticket. We collect information for each - of the identities we find that we have initial tickets for and - then set the properties for the identities at once. */ - -typedef struct tag_ident_data { - khm_handle ident; /* handle to the identity */ - khm_int32 count; /* number of initial tickets we have - found for this identity. */ - wchar_t ccname[KRB5_MAXCCH_CCNAME]; - FILETIME ft_issue; - FILETIME ft_expire; - FILETIME ft_renewexpire; - khm_int32 krb5_flags; -} ident_data; - -typedef struct tag_identlist { - ident_data * list; - khm_size n_list; - khm_size nc_list; -} identlist; - -#define IDLIST_ALLOC_INCR 8 - -static void -tc_prep_idlist(identlist * idlist) { - khm_int32 rv; - khm_size cb_ids = 0; - khm_size n_ids = 0; - khm_size i; - wchar_t * ids = NULL; - wchar_t *thisid; - - idlist->list = NULL; - idlist->n_list = 0; - idlist->nc_list = 0; - - do { - - if (ids) { - PFREE(ids); - ids = NULL; - } - - rv = kcdb_identity_enum(KCDB_IDENT_FLAG_ACTIVE, - KCDB_IDENT_FLAG_ACTIVE, - NULL, - &cb_ids, - &n_ids); - - if (rv != KHM_ERROR_TOO_LONG) - break; /* something else is wrong */ - - if (n_ids == 0 || cb_ids == 0) - break; /* no identities to process */ - -#ifdef DEBUG - assert(cb_ids > 0); -#endif - - ids = PMALLOC(cb_ids); -#ifdef DEBUG - assert(ids != NULL); -#endif - if (ids == NULL) - break; - - rv = kcdb_identity_enum(KCDB_IDENT_FLAG_ACTIVE, - KCDB_IDENT_FLAG_ACTIVE, - ids, - &cb_ids, - &n_ids); - - if (KHM_SUCCEEDED(rv)) - break; - - } while (TRUE); - - if (ids == NULL) - return; - - if (KHM_FAILED(rv) || n_ids == 0) { - if (ids) - PFREE(ids); - return; - } - - idlist->nc_list = UBOUNDSS(n_ids, IDLIST_ALLOC_INCR, IDLIST_ALLOC_INCR); - - idlist->list = PCALLOC(idlist->nc_list, sizeof(idlist->list[0])); - - for (i = 0, thisid = ids; - thisid && thisid[0]; - thisid = multi_string_next(thisid)) { - - khm_handle ident; - - rv = kcdb_identity_create(thisid, 0, &ident); - - if (KHM_FAILED(rv)) - continue; - - idlist->list[i].ident = ident; - idlist->list[i].count = 0; - - i++; - } - - idlist->n_list = i; - - PFREE(ids); -} - -static ident_data * -tc_add_ident_to_list(identlist * idlist, khm_handle ident) { - khm_size i; - ident_data * d; - - for (i=0; i < idlist->n_list; i++) { - if (kcdb_identity_is_equal(ident, idlist->list[i].ident)) - break; - } - - if (i < idlist->n_list) { - /* we already have this identity on our list. Increment the - count */ - idlist->list[i].count++; - return &idlist->list[i]; - } - - /* it wasn't in our list. Add it */ - - if (idlist->n_list + 1 > idlist->nc_list) { - idlist->nc_list = UBOUNDSS(idlist->n_list + 1, - IDLIST_ALLOC_INCR, - IDLIST_ALLOC_INCR); -#ifdef DEBUG - assert(idlist->n_list + 1 <= idlist->nc_list); -#endif - idlist->list = PREALLOC(idlist->list, - sizeof(idlist->list[0]) * idlist->nc_list); -#ifdef DEBUG - assert(idlist->list); -#endif - ZeroMemory(&idlist->list[idlist->n_list], - sizeof(idlist->list[0]) * - (idlist->nc_list - idlist->n_list)); - } - - d = &idlist->list[idlist->n_list]; - - ZeroMemory(d, sizeof(*d)); - - d->ident = ident; - d->count = 1; - - idlist->n_list++; - - kcdb_identity_hold(ident); - - return d; -} - -static void -tc_set_ident_data(identlist * idlist) { - khm_size i; - wchar_t k5idtype[KCDB_MAXCCH_NAME]; - - k5idtype[0] = L'\0'; - LoadString(hResModule, IDS_KRB5_NC_NAME, - k5idtype, ARRAYLENGTH(k5idtype)); - - for (i=0; i < idlist->n_list; i++) { -#ifdef DEBUG - assert(idlist->list[i].ident); -#endif - - if (idlist->list[i].count > 0) { - khm_int32 t; - - t = credtype_id_krb5; - kcdb_identity_set_attr(idlist->list[i].ident, - KCDB_ATTR_TYPE, - &t, - sizeof(t)); - - /* We need to manually add the type name if we want the - name to show up in the property list for the identity. - The type name is only automatically calculated for - credentials. */ - kcdb_identity_set_attr(idlist->list[i].ident, - KCDB_ATTR_TYPE_NAME, - k5idtype, - KCDB_CBSIZE_AUTO); - - kcdb_identity_set_attr(idlist->list[i].ident, - attr_id_krb5_ccname, - idlist->list[i].ccname, - KCDB_CBSIZE_AUTO); - - kcdb_identity_set_attr(idlist->list[i].ident, - KCDB_ATTR_EXPIRE, - &idlist->list[i].ft_expire, - sizeof(idlist->list[i].ft_expire)); - - kcdb_identity_set_attr(idlist->list[i].ident, - KCDB_ATTR_ISSUE, - &idlist->list[i].ft_issue, - sizeof(idlist->list[i].ft_issue)); - - kcdb_identity_set_attr(idlist->list[i].ident, - attr_id_krb5_flags, - &idlist->list[i].krb5_flags, - sizeof(idlist->list[i].krb5_flags)); - - if (idlist->list[i].ft_renewexpire.dwLowDateTime == 0 && - idlist->list[i].ft_renewexpire.dwHighDateTime == 0) { - kcdb_identity_set_attr(idlist->list[i].ident, - KCDB_ATTR_RENEW_EXPIRE, - NULL, 0); - } else { - kcdb_identity_set_attr(idlist->list[i].ident, - KCDB_ATTR_RENEW_EXPIRE, - &idlist->list[i].ft_renewexpire, - sizeof(idlist->list[i].ft_renewexpire)); - } - - } else { - /* We didn't see any TGTs for this identity. We have to - remove all the Krb5 supplied properties. */ - - khm_int32 t; - khm_size cb; - - cb = sizeof(t); - if (KHM_SUCCEEDED(kcdb_identity_get_attr(idlist->list[i].ident, - KCDB_ATTR_TYPE, NULL, - &t, - &cb)) && - t == credtype_id_krb5) { - - /* disown this and remove all our properties. the - system will GC this identity if nobody claims it.*/ - - kcdb_identity_set_attr(idlist->list[i].ident, - KCDB_ATTR_TYPE, NULL, 0); - kcdb_identity_set_attr(idlist->list[i].ident, - KCDB_ATTR_TYPE_NAME, NULL, 0); - kcdb_identity_set_attr(idlist->list[i].ident, - attr_id_krb5_ccname, NULL, 0); - kcdb_identity_set_attr(idlist->list[i].ident, - KCDB_ATTR_EXPIRE, NULL, 0); - kcdb_identity_set_attr(idlist->list[i].ident, - KCDB_ATTR_ISSUE, NULL, 0); - kcdb_identity_set_attr(idlist->list[i].ident, - attr_id_krb5_flags, NULL, 0); - kcdb_identity_set_attr(idlist->list[i].ident, - KCDB_ATTR_RENEW_EXPIRE, NULL, 0); - } else { - /* otherwise, this identity doesn't belong to us. We - should leave it as is. */ - } - } - } -} - -static void -tc_free_idlist(identlist * idlist) { - khm_size i; - - for (i=0; i < idlist->n_list; i++) { - if (idlist->list[i].ident != NULL) { - kcdb_identity_release(idlist->list[i].ident); - idlist->list[i].ident = NULL; - } - } - - if (idlist->list) - PFREE(idlist->list); - idlist->list = NULL; - idlist->n_list = 0; - idlist->nc_list = 0; -} - -#ifndef ENCTYPE_LOCAL_RC4_MD4 -#define ENCTYPE_LOCAL_RC4_MD4 0xFFFFFF80 -#endif - -#define MAX_ADDRS 256 - -static long get_tickets_from_cache(krb5_context ctx, - krb5_ccache cache, - identlist * idlist) -{ - krb5_error_code code; - krb5_principal KRBv5Principal; - krb5_flags flags = 0; - krb5_cc_cursor KRBv5Cursor; - krb5_creds KRBv5Credentials; - krb5_ticket *tkt=NULL; - char *ClientName = NULL; - char *PrincipalName = NULL; - wchar_t wbuf[256]; /* temporary conversion buffer */ - wchar_t wcc_name[KRB5_MAXCCH_CCNAME]; /* credential cache name */ - char *sServerName = NULL; - khm_handle ident = NULL; - khm_handle cred = NULL; - time_t tt; - FILETIME ft, eft; - khm_int32 ti; - -#ifdef KRB5_TC_NOTICKET - flags = KRB5_TC_NOTICKET; -#endif - - { - const char * cc_name; - const char * cc_type; - - cc_name = (*pkrb5_cc_get_name)(ctx, cache); - if(cc_name) { - cc_type = (*pkrb5_cc_get_type)(ctx, cache); - if (cc_type) { - StringCbPrintf(wcc_name, sizeof(wcc_name), L"%S:%S", cc_type, cc_name); - } else { - AnsiStrToUnicode(wcc_name, sizeof(wcc_name), cc_name); - khm_krb5_canon_cc_name(wcc_name, sizeof(wcc_name)); - } - } else { - cc_type = (*pkrb5_cc_get_type)(ctx, cache); - if (cc_type) { - StringCbPrintf(wcc_name, sizeof(wcc_name), L"%S:", cc_type); - } else { -#ifdef DEBUG - assert(FALSE); -#endif - StringCbCopy(wcc_name, sizeof(wcc_name), L""); - } - } - } - - _reportf(L"Getting tickets from cache [%s]", wcc_name); - - if ((code = (*pkrb5_cc_set_flags)(ctx, cache, flags))) - { - if (code != KRB5_FCC_NOFILE && code != KRB5_CC_NOTFOUND) - khm_krb5_error(code, "krb5_cc_set_flags()", 0, &ctx, &cache); - - goto _exit; - } - - if ((code = (*pkrb5_cc_get_principal)(ctx, cache, &KRBv5Principal))) - { - if (code != KRB5_FCC_NOFILE && code != KRB5_CC_NOTFOUND) - khm_krb5_error(code, "krb5_cc_get_principal()", 0, &ctx, &cache); - - goto _exit; - } - - PrincipalName = NULL; - ClientName = NULL; - sServerName = NULL; - if ((code = (*pkrb5_unparse_name)(ctx, KRBv5Principal, - (char **)&PrincipalName))) - { - if (PrincipalName != NULL) - (*pkrb5_free_unparsed_name)(ctx, PrincipalName); - - (*pkrb5_free_principal)(ctx, KRBv5Principal); - - goto _exit; - } - - if (!strcspn(PrincipalName, "@" )) - { - if (PrincipalName != NULL) - (*pkrb5_free_unparsed_name)(ctx, PrincipalName); - - (*pkrb5_free_principal)(ctx, KRBv5Principal); - - goto _exit; - } - - AnsiStrToUnicode(wbuf, sizeof(wbuf), PrincipalName); - if(KHM_FAILED(kcdb_identity_create(wbuf, KCDB_IDENT_FLAG_CREATE, - &ident))) { - /* something bad happened */ - code = 1; - goto _exit; - } - - _reportf(L"Found principal [%s]", wbuf); - - (*pkrb5_free_principal)(ctx, KRBv5Principal); - - if ((code = (*pkrb5_cc_start_seq_get)(ctx, cache, &KRBv5Cursor))) - { - goto _exit; - } - - memset(&KRBv5Credentials, '\0', sizeof(KRBv5Credentials)); - - ClientName = NULL; - sServerName = NULL; - cred = NULL; - - while (!(code = pkrb5_cc_next_cred(ctx, cache, &KRBv5Cursor, - &KRBv5Credentials))) - { - khm_handle tident = NULL; - khm_int32 cred_flags = 0; - - if(ClientName != NULL) - (*pkrb5_free_unparsed_name)(ctx, ClientName); - if(sServerName != NULL) - (*pkrb5_free_unparsed_name)(ctx, sServerName); - if(cred) - kcdb_cred_release(cred); - - ClientName = NULL; - sServerName = NULL; - cred = NULL; - - if ((*pkrb5_unparse_name)(ctx, KRBv5Credentials.client, &ClientName)) - { - (*pkrb5_free_cred_contents)(ctx, &KRBv5Credentials); - khm_krb5_error(code, "krb5_free_cred_contents()", 0, &ctx, &cache); - continue; - } - - if ((*pkrb5_unparse_name)(ctx, KRBv5Credentials.server, &sServerName)) - { - (*pkrb5_free_cred_contents)(ctx, &KRBv5Credentials); - khm_krb5_error(code, "krb5_free_cred_contents()", 0, &ctx, &cache); - continue; - } - - /* if the ClientName differs from PrincipalName for some - reason, we need to create a new identity */ - if(strcmp(ClientName, PrincipalName)) { - AnsiStrToUnicode(wbuf, sizeof(wbuf), ClientName); - if(KHM_FAILED(kcdb_identity_create(wbuf, KCDB_IDENT_FLAG_CREATE, - &tident))) { - (*pkrb5_free_cred_contents)(ctx, &KRBv5Credentials); - continue; - } - } else { - tident = ident; - } - - AnsiStrToUnicode(wbuf, sizeof(wbuf), sServerName); - if(KHM_FAILED(kcdb_cred_create(wbuf, tident, credtype_id_krb5, - &cred))) { - (*pkrb5_free_cred_contents)(ctx, &KRBv5Credentials); - continue; - } - - if (!KRBv5Credentials.times.starttime) - KRBv5Credentials.times.starttime = KRBv5Credentials.times.authtime; - - tt = KRBv5Credentials.times.starttime; - TimetToFileTime(tt, &ft); - kcdb_cred_set_attr(cred, KCDB_ATTR_ISSUE, &ft, sizeof(ft)); - - tt = KRBv5Credentials.times.endtime; - TimetToFileTime(tt, &eft); - kcdb_cred_set_attr(cred, KCDB_ATTR_EXPIRE, &eft, sizeof(eft)); - - { - FILETIME ftl; - - ftl = FtSub(&eft, &ft); - kcdb_cred_set_attr(cred, KCDB_ATTR_LIFETIME, &ftl, sizeof(ftl)); - } - - if (KRBv5Credentials.times.renew_till > 0) { - FILETIME ftl; - - tt = KRBv5Credentials.times.renew_till; - TimetToFileTime(tt, &eft); - kcdb_cred_set_attr(cred, KCDB_ATTR_RENEW_EXPIRE, &eft, - sizeof(eft)); - - - ftl = FtSub(&eft, &ft); - kcdb_cred_set_attr(cred, KCDB_ATTR_RENEW_LIFETIME, &ftl, - sizeof(ftl)); - } - - ti = KRBv5Credentials.ticket_flags; - kcdb_cred_set_attr(cred, attr_id_krb5_flags, &ti, sizeof(ti)); - - /* special flags understood by NetIDMgr */ - { - khm_int32 nflags = 0; - - if (ti & TKT_FLG_RENEWABLE) - nflags |= KCDB_CRED_FLAG_RENEWABLE; - if (ti & TKT_FLG_INITIAL) - nflags |= KCDB_CRED_FLAG_INITIAL; - else { - krb5_data * c0, *c1, *r; - - /* these are macros that do not allocate any memory */ - c0 = krb5_princ_component(ctx,KRBv5Credentials.server,0); - c1 = krb5_princ_component(ctx,KRBv5Credentials.server,1); - r = krb5_princ_realm(ctx,KRBv5Credentials.server); - - if ( c0 && c1 && r && c1->length == r->length && - !strncmp(c1->data,r->data,r->length) && - !strncmp("krbtgt",c0->data,c0->length) ) - nflags |= KCDB_CRED_FLAG_INITIAL; - } - - kcdb_cred_set_flags(cred, nflags, KCDB_CRED_FLAGMASK_EXT); - - cred_flags = nflags; - } - - if ( !pkrb5_decode_ticket(&KRBv5Credentials.ticket, &tkt)) { - ti = tkt->enc_part.enctype; - kcdb_cred_set_attr(cred, attr_id_tkt_enctype, &ti, sizeof(ti)); - ti = tkt->enc_part.kvno; - kcdb_cred_set_attr(cred, attr_id_kvno, &ti, sizeof(ti)); - pkrb5_free_ticket(ctx, tkt); - tkt = NULL; - } - - ti = KRBv5Credentials.keyblock.enctype; - kcdb_cred_set_attr(cred, attr_id_key_enctype, &ti, sizeof(ti)); - - kcdb_cred_set_attr(cred, KCDB_ATTR_LOCATION, wcc_name, - KCDB_CBSIZE_AUTO); - - if ( KRBv5Credentials.addresses && KRBv5Credentials.addresses[0] ) { - khm_int32 buffer[1024]; - void * bufp; - khm_size cb; - khm_int32 rv; - - bufp = (void *) buffer; - cb = sizeof(buffer); - - rv = serialize_krb5_addresses(KRBv5Credentials.addresses, - bufp, - &cb); - if (rv == KHM_ERROR_TOO_LONG) { - bufp = PMALLOC(cb); - rv = serialize_krb5_addresses(KRBv5Credentials.addresses, - bufp, - &cb); - } - - if (KHM_SUCCEEDED(rv)) { - kcdb_cred_set_attr(cred, attr_id_addr_list, - bufp, cb); - } - - if (bufp != (void *) buffer) - PFREE(bufp); - } - - if(cred_flags & KCDB_CRED_FLAG_INITIAL) { - FILETIME ft_issue_new; - FILETIME ft_expire_old; - FILETIME ft_expire_new; - ident_data * d; - - /* an initial ticket! Add it to the list of identities we - have seen so far with initial tickets. */ - d = tc_add_ident_to_list(idlist, ident); -#ifdef DEBUG - assert(d); - assert(d->count > 0); -#endif - - tt = KRBv5Credentials.times.endtime; - TimetToFileTime(tt, &ft_expire_new); - - tt = KRBv5Credentials.times.starttime; - TimetToFileTime(tt, &ft_issue_new); - - /* so now, we have to set the properties of the identity - based on the properties of this credential under the - following circumstances: - - - If this is the first time we are hitting this - identity. - - - If this is not the MSLSA: cache and the expiry time - for this credential is longer than the time already - found for this identity. - */ - - ft_expire_old = d->ft_expire; - - if(d->count == 1 - || (CompareFileTime(&ft_expire_new, &ft_expire_old) > 0 && - wcscmp(wcc_name, L"MSLSA:") != 0)) { - - _reportf(L"Setting properties for identity (count=%d)", d->count); - - StringCbCopy(d->ccname, sizeof(d->ccname), - wcc_name); - d->ft_expire = ft_expire_new; - d->ft_issue = ft_issue_new; - - if (KRBv5Credentials.times.renew_till > 0) { - tt = KRBv5Credentials.times.renew_till; - TimetToFileTime(tt, &ft); - d->ft_renewexpire = ft; - } else { - ZeroMemory(&d->ft_renewexpire, sizeof(d->ft_renewexpire)); - } - - d->krb5_flags = KRBv5Credentials.ticket_flags; - } - } - - kcdb_credset_add_cred(krb5_credset, cred, -1); - - (*pkrb5_free_cred_contents)(ctx, &KRBv5Credentials); - - if(tident != ident) - kcdb_identity_release(tident); - } - - if (PrincipalName != NULL) - (*pkrb5_free_unparsed_name)(ctx, PrincipalName); - - if (ClientName != NULL) - (*pkrb5_free_unparsed_name)(ctx, ClientName); - - if (sServerName != NULL) - (*pkrb5_free_unparsed_name)(ctx, sServerName); - - if (cred) - kcdb_cred_release(cred); - - if ((code == KRB5_CC_END) || (code == KRB5_CC_NOTFOUND)) - { - if ((code = pkrb5_cc_end_seq_get(ctx, cache, &KRBv5Cursor))) - { - goto _exit; - } - - flags = KRB5_TC_OPENCLOSE; -#ifdef KRB5_TC_NOTICKET - flags |= KRB5_TC_NOTICKET; -#endif - if ((code = pkrb5_cc_set_flags(ctx, cache, flags))) - { - goto _exit; - } - } - else - { - goto _exit; - } - -_exit: - - return code; -} - -long -khm_krb5_list_tickets(krb5_context *krbv5Context) -{ - krb5_context ctx = NULL; - krb5_ccache cache = NULL; - krb5_error_code code = 0; - apiCB * cc_ctx = NULL; - struct _infoNC ** pNCi = NULL; - int i; - khm_int32 t; - wchar_t * ms = NULL; - khm_size cb; - identlist idl; - - kcdb_credset_flush(krb5_credset); - tc_prep_idlist(&idl); - - if((*krbv5Context == 0) && (code = (*pkrb5_init_context)(krbv5Context))) { - goto _exit; - } - - ctx = (*krbv5Context); - - if (!pcc_initialize || - !pcc_get_NC_info || - !pcc_free_NC_info || - !pcc_shutdown) - goto _skip_cc_iter; - - code = pcc_initialize(&cc_ctx, CC_API_VER_2, NULL, NULL); - if (code) - goto _exit; - - code = pcc_get_NC_info(cc_ctx, &pNCi); - if (code) - goto _exit; - - for(i=0; pNCi[i]; i++) { - char ccname[KRB5_MAXCCH_CCNAME]; - - if (pNCi[i]->vers != CC_CRED_V5) - continue; - - if (FAILED(StringCchPrintfA(ccname, sizeof(ccname), "API:%s", - pNCi[i]->name))) - continue; - - code = (*pkrb5_cc_resolve)(ctx, ccname, &cache); - - if (code) - continue; - - code = get_tickets_from_cache(ctx, cache, &idl); - - if(ctx != NULL && cache != NULL) - (*pkrb5_cc_close)(ctx, cache); - - cache = 0; - } - - _skip_cc_iter: - - if (khc_read_multi_string(csp_params, L"FileCCList", NULL, &cb) - == KHM_ERROR_TOO_LONG && - cb > sizeof(wchar_t) * 2) { - wchar_t * t; - char ccname[KRB5_MAXCCH_CCNAME]; - - ms = PMALLOC(cb); -#ifdef DEBUG - assert(ms); -#endif - khc_read_multi_string(csp_params, L"FileCCList", ms, &cb); - - for(t = ms; t && *t; t = multi_string_next(t)) { - StringCchPrintfA(ccname, ARRAYLENGTH(ccname), - "FILE:%S", t); - - code = (*pkrb5_cc_resolve)(ctx, ccname, &cache); - - if (code) - continue; - - code = get_tickets_from_cache(ctx, cache, &idl); - - if (ctx != NULL && cache != NULL) - (*pkrb5_cc_close)(ctx, cache); - cache = 0; - } - - PFREE(ms); - } - - if (KHM_SUCCEEDED(khc_read_int32(csp_params, L"MsLsaList", &t)) && t) { - code = (*pkrb5_cc_resolve)(ctx, "MSLSA:", &cache); - - if (code == 0 && cache) { - code = get_tickets_from_cache(ctx, cache, &idl); - } - - if (ctx != NULL && cache != NULL) - (*pkrb5_cc_close)(ctx, cache); - cache = 0; - } - -_exit: - if (pNCi) - (*pcc_free_NC_info)(cc_ctx, &pNCi); - if (cc_ctx) - (*pcc_shutdown)(&cc_ctx); - - tc_set_ident_data(&idl); - kcdb_credset_collect(NULL, krb5_credset, NULL, credtype_id_krb5, NULL); - tc_free_idlist(&idl); - - return(code); -} - -int -khm_krb5_renew_cred(khm_handle cred) -{ - khm_handle identity = NULL; - krb5_error_code code = 0; - krb5_context ctx = NULL; - krb5_ccache cc = NULL; - krb5_principal me = NULL, server = NULL; - krb5_creds in_creds, cc_creds; - krb5_creds * out_creds = NULL; - - wchar_t wname[512]; - khm_size cbname; - char name[512]; - khm_boolean brenewIdentity = FALSE; - khm_boolean istgt = FALSE; - - khm_int32 flags; - int ccflags = 0; - - cbname = sizeof(wname); - kcdb_cred_get_name(cred, wname, &cbname); - _reportf(L"Krb5 renew cred for %s", wname); - - kcdb_cred_get_flags(cred, &flags); - - if (!(flags & KCDB_CRED_FLAG_INITIAL)) { - _reportf(L"Krb5 skipping renewal because this is not an initial credential"); - return 0; - } - - memset(&in_creds, 0, sizeof(in_creds)); - memset(&cc_creds, 0, sizeof(cc_creds)); - - if (cred == NULL) { -#ifdef DEBUG - assert(FALSE); -#endif - goto cleanup; - } - - if (KHM_FAILED(kcdb_cred_get_identity(cred, &identity))) { -#ifdef DEBUG - assert(FALSE); -#endif - goto cleanup; - } - - code = khm_krb5_initialize(identity, &ctx, &cc); - if (code) - goto cleanup; - - code = pkrb5_cc_get_principal(ctx, cc, &me); - if (code) - goto cleanup; - - cbname = sizeof(wname); - if (KHM_FAILED(kcdb_cred_get_name(cred, wname, &cbname))) - goto cleanup; - - UnicodeStrToAnsi(name, sizeof(name), wname); - - code = pkrb5_parse_name(ctx, name, &server); - if (code) - goto cleanup; - - in_creds.client = me; - in_creds.server = server; - - ccflags = KRB5_TC_OPENCLOSE; - pkrb5_cc_set_flags(ctx, cc, ccflags); - - if (strlen("krbtgt") != krb5_princ_name(ctx, server)->length || - strncmp("krbtgt", krb5_princ_name(ctx, server)->data, krb5_princ_name(ctx, server)->length)) - { - code = pkrb5_get_renewed_creds(ctx, &cc_creds, me, cc, name); - if (code) { - code = pkrb5_cc_retrieve_cred(ctx, cc, 0, &in_creds, &cc_creds); - if (code == 0) { - code = pkrb5_cc_remove_cred(ctx, cc, 0, &cc_creds); - if (code) { - brenewIdentity = TRUE; - goto cleanup; - } - } - } - - code = pkrb5_get_credentials(ctx, 0, cc, &in_creds, &out_creds); - } else { - istgt = TRUE; - code = pkrb5_get_renewed_creds(ctx, &cc_creds, me, cc, NULL); - } - - if (code) { - if ( code != KRB5KDC_ERR_ETYPE_NOSUPP || - code != KRB5_KDC_UNREACH) - khm_krb5_error(code, "krb5_get_renewed_creds()", 0, &ctx, &cc); - goto cleanup; - } - - if (istgt) { - code = pkrb5_cc_initialize(ctx, cc, me); - if (code) goto cleanup; - - ccflags = KRB5_TC_OPENCLOSE; - pkrb5_cc_set_flags(ctx, cc, ccflags); - } - - code = pkrb5_cc_store_cred(ctx, cc, istgt ? &cc_creds : out_creds); - if (code) goto cleanup; - - - cleanup: - if (in_creds.client == me) - in_creds.client = NULL; - if (in_creds.server == server) - in_creds.server = NULL; - - if (me) - pkrb5_free_principal(ctx, me); - - if (server) - pkrb5_free_principal(ctx, server); - - pkrb5_free_cred_contents(ctx, &in_creds); - pkrb5_free_cred_contents(ctx, &cc_creds); - - if (out_creds) - pkrb5_free_creds(ctx, out_creds); - - if (cc && ctx) - pkrb5_cc_close(ctx, cc); - - if (ctx) - pkrb5_free_context(ctx); - - if (identity) { - if (brenewIdentity) - code = khm_krb5_renew_ident(identity); - kcdb_identity_release(identity); - } - - return code; -} - -int -khm_krb5_renew_ident(khm_handle identity) -{ - krb5_error_code code = 0; - krb5_context ctx = NULL; - krb5_ccache cc = NULL; - krb5_principal me = NULL; - krb5_principal server = NULL; - krb5_creds my_creds; - krb5_data *realm = NULL; - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - khm_size cb; - khm_int32 k5_flags; - int ccflags; - - memset(&my_creds, 0, sizeof(krb5_creds)); - - if ( !pkrb5_init_context ) - goto cleanup; - - cb = sizeof(idname); - kcdb_identity_get_name(identity, idname, &cb); - - if (khm_krb5_get_identity_flags(identity) & K5IDFLAG_IMPORTED) { -#ifndef NO_REIMPORT_MSLSA_CREDS - /* we are trying to renew the identity that was imported from - MSLSA: */ - BOOL imported; - BOOL retry_import = FALSE; - char cidname[KCDB_IDENT_MAXCCH_NAME]; - khm_handle imported_id = NULL; - khm_size cb; - FILETIME ft_expire; - FILETIME ft_now; - FILETIME ft_threshold; - krb5_principal princ = NULL; - - UnicodeStrToAnsi(cidname, sizeof(cidname), idname); - - imported = khm_krb5_ms2mit(cidname, FALSE, TRUE, &imported_id); - - if (imported == 0) - goto import_failed; - - /* if the imported identity has already expired or will soon, - we clear the cache and try again. */ - khm_krb5_list_tickets(&ctx); - - cb = sizeof(ft_expire); - if (KHM_FAILED(kcdb_identity_get_attr(imported_id, KCDB_ATTR_EXPIRE, - NULL, &ft_expire, &cb))) - goto import_failed; - - GetSystemTimeAsFileTime(&ft_now); - TimetToFileTimeInterval(5 * 60, &ft_threshold); - - ft_now = FtAdd(&ft_now, &ft_threshold); - - if (CompareFileTime(&ft_expire, &ft_now) < 0) { - /* the ticket lifetime is not long enough */ - - code = 0; - - if (ctx == NULL) - code = pkrb5_init_context(&ctx); - if (code) - goto import_failed; - - code = pkrb5_cc_resolve(ctx, "MSLSA:", &cc); - if (code) - goto import_failed; - - code = pkrb5_cc_get_principal(ctx, cc, &princ); - if (code) - goto import_failed; - - pkrb5_cc_initialize(ctx, cc, princ); - - retry_import = TRUE; - } - - import_failed: - - if (imported_id) { - kcdb_identity_release(imported_id); - imported_id = NULL; - } - - if (ctx) { - if (cc) { - pkrb5_cc_close(ctx, cc); - cc = NULL; - } - - if (princ) { - pkrb5_free_principal(ctx, princ); - princ = NULL; - } - - /* leave ctx so we can use it later */ - } - - if (retry_import) - imported = khm_krb5_ms2mit(cidname, FALSE, TRUE, NULL); - - if (imported) - goto cleanup; - - /* if the import failed, then we try to renew the identity via - the usual procedure. */ - -#else - /* if we are suppressing further imports from MSLSA, we just - skip renewing this identity. */ - goto cleanup; -#endif - } - - cb = sizeof(k5_flags); - if (KHM_SUCCEEDED(kcdb_identity_get_attr(identity, - attr_id_krb5_flags, - NULL, - &k5_flags, - &cb)) && - !(k5_flags & TKT_FLG_RENEWABLE)) { - - code = KRB5KDC_ERR_BADOPTION; - goto cleanup; - } - - { - FILETIME ft_now; - FILETIME ft_exp; - - cb = sizeof(ft_exp); - GetSystemTimeAsFileTime(&ft_now); - if (KHM_SUCCEEDED(kcdb_identity_get_attr(identity, - KCDB_ATTR_EXPIRE, - NULL, - &ft_exp, - &cb)) && - CompareFileTime(&ft_exp, &ft_now) < 0) { - - code = KRB5KRB_AP_ERR_TKT_EXPIRED; - goto cleanup; - - } - } - - code = khm_krb5_initialize(identity, &ctx, &cc); - if (code) - goto cleanup; - - code = pkrb5_cc_get_principal(ctx, cc, &me); - if (code) - goto cleanup; - - realm = krb5_princ_realm(ctx, me); - - code = pkrb5_build_principal_ext(ctx, &server, - realm->length,realm->data, - KRB5_TGS_NAME_SIZE, KRB5_TGS_NAME, - realm->length,realm->data, - 0); - - if (code) - goto cleanup; - - my_creds.client = me; - my_creds.server = server; - - pkrb5_cc_set_flags(ctx, cc, KRB5_TC_OPENCLOSE); - code = pkrb5_get_renewed_creds(ctx, &my_creds, me, cc, NULL); - ccflags = KRB5_TC_OPENCLOSE; -#ifdef KRB5_TC_NOTICKET - ccflags |= KRB5_TC_NOTICKET; -#endif - pkrb5_cc_set_flags(ctx, cc, ccflags); - if (code) { - if ( code != KRB5KDC_ERR_ETYPE_NOSUPP || - code != KRB5_KDC_UNREACH) - khm_krb5_error(code, "krb5_get_renewed_creds()", 0, &ctx, &cc); - goto cleanup; - } - - code = pkrb5_cc_initialize(ctx, cc, me); - if (code) goto cleanup; - - code = pkrb5_cc_set_flags(ctx, cc, KRB5_TC_OPENCLOSE); - if (code) goto cleanup; - - code = pkrb5_cc_store_cred(ctx, cc, &my_creds); - if (code) goto cleanup; - -cleanup: - if (my_creds.client == me) - my_creds.client = NULL; - if (my_creds.server == server) - my_creds.server = NULL; - - if (ctx) { - pkrb5_free_cred_contents(ctx, &my_creds); - - if (me) - pkrb5_free_principal(ctx, me); - if (server) - pkrb5_free_principal(ctx, server); - if (cc) - pkrb5_cc_close(ctx, cc); - pkrb5_free_context(ctx); - } - - return(code); -} - -int -khm_krb5_kinit(krb5_context alt_ctx, - char * principal_name, - char * password, - char * ccache, - krb5_deltat lifetime, - DWORD forwardable, - DWORD proxiable, - krb5_deltat renew_life, - DWORD addressless, - DWORD publicIP, - krb5_prompter_fct prompter, - void * p_data, - char ** pp_error_message) -{ - krb5_error_code code = 0; - krb5_context ctx = NULL; - krb5_ccache cc = NULL; - krb5_principal me = NULL; - char* name = NULL; - krb5_creds my_creds; - krb5_get_init_creds_opt options; - krb5_address ** addrs = NULL; - int i = 0, addr_count = 0; - - if (!pkrb5_init_context) - return 0; - - _reportf(L"In khm_krb5_kinit"); - - pkrb5_get_init_creds_opt_init(&options); - pkrb5_get_init_creds_opt_set_change_password_prompt(&options, 0); - - memset(&my_creds, 0, sizeof(my_creds)); - - if (alt_ctx) { - ctx = alt_ctx; - } else { - code = pkrb5_init_context(&ctx); - if (code) - goto cleanup; - } - - pkrb5_clear_error_message(ctx); - - if (ccache) { - _reportf(L"Using supplied ccache name %S", ccache); - code = pkrb5_cc_resolve(ctx, ccache, &cc); - } else { - khm_handle identity = NULL; - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - char ccname[KRB5_MAXCCH_CCNAME]; - char * pccname = principal_name; - khm_size cb; - - idname[0] = L'\0'; - AnsiStrToUnicode(idname, sizeof(idname), principal_name); - - cb = sizeof(ccname); - - if (KHM_SUCCEEDED(kcdb_identity_create(idname, 0, &identity)) && - KHM_SUCCEEDED(khm_krb5_get_identity_default_ccacheA(identity, ccname, &cb))) { - - pccname = ccname; - - } - - if (identity) - kcdb_identity_release(identity); - - code = pkrb5_cc_resolve(ctx, pccname, &cc); - } - - _reportf(L"krb5_cc_resolve returns code %d", code); - - if (code) goto cleanup; - - code = pkrb5_parse_name(ctx, principal_name, &me); - if (code) goto cleanup; - - code = pkrb5_unparse_name(ctx, me, &name); - if (code) goto cleanup; - - if (lifetime == 0) { - khc_read_int32(csp_params, L"DefaultLifetime", &lifetime); - } - - if (lifetime) - pkrb5_get_init_creds_opt_set_tkt_life(&options, lifetime); - - pkrb5_get_init_creds_opt_set_forwardable(&options, - forwardable ? 1 : 0); - pkrb5_get_init_creds_opt_set_proxiable(&options, - proxiable ? 1 : 0); - pkrb5_get_init_creds_opt_set_renew_life(&options, - renew_life); - - if (addressless) - pkrb5_get_init_creds_opt_set_address_list(&options,NULL); - else { - krb5_address ** local_addrs=NULL; - DWORD netIPAddr; - - pkrb5_os_localaddr(ctx, &local_addrs); - i = 0; - while ( local_addrs[i++] ); - addr_count = i + 1; - - addrs = (krb5_address **) PMALLOC((addr_count+1) * sizeof(krb5_address *)); - if ( !addrs ) { - pkrb5_free_addresses(ctx, local_addrs); - assert(0); - } - memset(addrs, 0, sizeof(krb5_address *) * (addr_count+1)); - i = 0; - while ( local_addrs[i] ) { - addrs[i] = (krb5_address *)PMALLOC(sizeof(krb5_address)); - if (addrs[i] == NULL) { - pkrb5_free_addresses(ctx, local_addrs); - assert(0); - } - - addrs[i]->magic = local_addrs[i]->magic; - addrs[i]->addrtype = local_addrs[i]->addrtype; - addrs[i]->length = local_addrs[i]->length; - addrs[i]->contents = (unsigned char *)PMALLOC(addrs[i]->length); - if (!addrs[i]->contents) { - pkrb5_free_addresses(ctx, local_addrs); - assert(0); - } - - memcpy(addrs[i]->contents,local_addrs[i]->contents, - local_addrs[i]->length); /* safe */ - i++; - } - pkrb5_free_addresses(ctx, local_addrs); - - if (publicIP) { - // we are going to add the public IP address specified by the user - // to the list provided by the operating system - addrs[i] = (krb5_address *)PMALLOC(sizeof(krb5_address)); - if (addrs[i] == NULL) - assert(0); - - addrs[i]->magic = KV5M_ADDRESS; - addrs[i]->addrtype = AF_INET; - addrs[i]->length = 4; - addrs[i]->contents = (unsigned char *)PMALLOC(addrs[i]->length); - if (!addrs[i]->contents) - assert(0); - - netIPAddr = htonl(publicIP); - memcpy(addrs[i]->contents,&netIPAddr,4); - } - - pkrb5_get_init_creds_opt_set_address_list(&options,addrs); - } - - code = - pkrb5_get_init_creds_password(ctx, - &my_creds, - me, - password, // password - prompter, // prompter - p_data, // prompter data - 0, // start time - 0, // service name - &options); - _reportf(L"krb5_get_init_creds_password returns code %d", code); - - if (code) goto cleanup; - - code = pkrb5_cc_initialize(ctx, cc, me); - _reportf(L"krb5_cc_initialize returns code %d", code); - if (code) goto cleanup; - - code = pkrb5_cc_store_cred(ctx, cc, &my_creds); - _reportf(L"krb5_cc_store_cred returns code %d", code); - if (code) goto cleanup; - -cleanup: - if (pp_error_message) { - const char * em; - - em = pkrb5_get_error_message(ctx, code); - if (em == NULL) { - *pp_error_message = NULL; - } else { - *pp_error_message = _strdup(em); - pkrb5_free_error_message(ctx, em); - } - } - - if ( addrs ) { - for ( i=0;i<addr_count;i++ ) { - if ( addrs[i] ) { - if ( addrs[i]->contents ) - PFREE(addrs[i]->contents); - PFREE(addrs[i]); - } - } - } - if (my_creds.client == me) - my_creds.client = 0; - pkrb5_free_cred_contents(ctx, &my_creds); - if (name) - pkrb5_free_unparsed_name(ctx, name); - if (me) - pkrb5_free_principal(ctx, me); - if (cc) - pkrb5_cc_close(ctx, cc); - if (ctx && (ctx != alt_ctx)) - pkrb5_free_context(ctx); - return(code); -} - -long -khm_krb5_copy_ccache_by_name(krb5_context in_ctx, - wchar_t * wscc_dest, - wchar_t * wscc_src) { - krb5_context ctx = NULL; - krb5_error_code code = 0; - khm_boolean free_ctx; - krb5_ccache cc_src = NULL; - krb5_ccache cc_dest = NULL; - krb5_principal princ_src = NULL; - char scc_dest[KRB5_MAXCCH_CCNAME]; - char scc_src[KRB5_MAXCCH_CCNAME]; - int t; - - t = UnicodeStrToAnsi(scc_dest, sizeof(scc_dest), wscc_dest); - if (t == 0) - return KHM_ERROR_TOO_LONG; - t = UnicodeStrToAnsi(scc_src, sizeof(scc_src), wscc_src); - if (t == 0) - return KHM_ERROR_TOO_LONG; - - if (in_ctx) { - ctx = in_ctx; - free_ctx = FALSE; - } else { - code = pkrb5_init_context(&ctx); - if (code) { - if (ctx) - pkrb5_free_context(ctx); - return code; - } - free_ctx = TRUE; - } - - code = pkrb5_cc_resolve(ctx, scc_dest, &cc_dest); - if (code) - goto _cleanup; - - code = pkrb5_cc_resolve(ctx, scc_src, &cc_src); - if (code) - goto _cleanup; - - code = pkrb5_cc_get_principal(ctx, cc_src, &princ_src); - if (code) - goto _cleanup; - - code = pkrb5_cc_initialize(ctx, cc_dest, princ_src); - if (code) - goto _cleanup; - - code = pkrb5_cc_copy_creds(ctx, cc_src, cc_dest); - - _cleanup: - if (princ_src) - pkrb5_free_principal(ctx, princ_src); - - if (cc_dest) - pkrb5_cc_close(ctx, cc_dest); - - if (cc_src) - pkrb5_cc_close(ctx, cc_src); - - if (free_ctx && ctx) - pkrb5_free_context(ctx); - - return code; -} - -long -khm_krb5_canon_cc_name(wchar_t * wcc_name, - size_t cb_cc_name) { - size_t cb_len; - wchar_t * colon; - - if (FAILED(StringCbLength(wcc_name, - cb_cc_name, - &cb_len))) { -#ifdef DEBUG - assert(FALSE); -#else - return KHM_ERROR_TOO_LONG; -#endif - } - - cb_len += sizeof(wchar_t); - - colon = wcschr(wcc_name, L':'); - - if (colon) { - /* if the colon is just 1 character away from the beginning, - it's a FILE: cc */ - if (colon - wcc_name == 1) { - if (cb_len + 5 * sizeof(wchar_t) > cb_cc_name) - return KHM_ERROR_TOO_LONG; - - memmove(&wcc_name[5], &wcc_name[0], cb_len); - memmove(&wcc_name[0], L"FILE:", sizeof(wchar_t) * 5); - } - - return 0; - } - - if (cb_len + 4 * sizeof(wchar_t) > cb_cc_name) - return KHM_ERROR_TOO_LONG; - - memmove(&wcc_name[4], &wcc_name[0], cb_len); - memmove(&wcc_name[0], L"API:", sizeof(wchar_t) * 4); - - return 0; -} - -int -khm_krb5_cc_name_cmp(const wchar_t * cc_name_1, - const wchar_t * cc_name_2) { - if (!wcsncmp(cc_name_1, L"API:", 4)) - cc_name_1 += 4; - - if (!wcsncmp(cc_name_2, L"API:", 4)) - cc_name_2 += 4; - - return wcscmp(cc_name_1, cc_name_2); -} - -static khm_int32 KHMAPI -khmint_location_comp_func(khm_handle cred1, - khm_handle cred2, - void * rock) { - return kcdb_creds_comp_attr(cred1, cred2, KCDB_ATTR_LOCATION); -} - -struct khmint_location_check { - khm_handle credset; - khm_handle cred; - wchar_t * ccname; - khm_boolean success; -}; - -static khm_int32 KHMAPI -khmint_find_matching_cred_func(khm_handle cred, - void * rock) { - struct khmint_location_check * lc; - - lc = (struct khmint_location_check *) rock; - - if (!kcdb_creds_is_equal(cred, lc->cred)) - return KHM_ERROR_SUCCESS; - if (kcdb_creds_comp_attr(cred, lc->cred, KCDB_ATTR_LOCATION)) - return KHM_ERROR_SUCCESS; - - /* found it */ - lc->success = TRUE; - - /* break the search */ - return !KHM_ERROR_SUCCESS; -} - -static khm_int32 KHMAPI -khmint_location_check_func(khm_handle cred, - void * rock) { - khm_int32 t; - khm_size cb; - wchar_t ccname[KRB5_MAXCCH_CCNAME]; - struct khmint_location_check * lc; - - lc = (struct khmint_location_check *) rock; - - if (KHM_FAILED(kcdb_cred_get_type(cred, &t))) - return KHM_ERROR_SUCCESS; - - if (t != credtype_id_krb5) - return KHM_ERROR_SUCCESS; - - cb = sizeof(ccname); - if (KHM_FAILED(kcdb_cred_get_attr(cred, - KCDB_ATTR_LOCATION, - NULL, - ccname, - &cb))) - return KHM_ERROR_SUCCESS; - - if(wcscmp(ccname, lc->ccname)) - return KHM_ERROR_SUCCESS; - - lc->cred = cred; - - lc->success = FALSE; - - kcdb_credset_apply(lc->credset, - khmint_find_matching_cred_func, - (void *) lc); - - if (!lc->success) - return KHM_ERROR_NOT_FOUND; - else - return KHM_ERROR_SUCCESS; -} - -static khm_int32 KHMAPI -khmint_delete_location_func(khm_handle cred, - void * rock) { - wchar_t cc_cred[KRB5_MAXCCH_CCNAME]; - struct khmint_location_check * lc; - khm_size cb; - - lc = (struct khmint_location_check *) rock; - - cb = sizeof(cc_cred); - - if (KHM_FAILED(kcdb_cred_get_attr(cred, - KCDB_ATTR_LOCATION, - NULL, - cc_cred, - &cb))) - return KHM_ERROR_SUCCESS; - - if (wcscmp(cc_cred, lc->ccname)) - return KHM_ERROR_SUCCESS; - - kcdb_credset_del_cred_ref(lc->credset, - cred); - - return KHM_ERROR_SUCCESS; -} - -int -khm_krb5_destroy_by_credset(khm_handle p_cs) -{ - khm_handle d_cs = NULL; - khm_int32 rv = KHM_ERROR_SUCCESS; - khm_size s, cb; - krb5_context ctx = NULL; - krb5_error_code code = 0; - int i; - wchar_t ccname[KRB5_MAXCCH_CCNAME]; - struct khmint_location_check lc; - - rv = kcdb_credset_create(&d_cs); - - assert(KHM_SUCCEEDED(rv) && d_cs != NULL); - - kcdb_credset_extract(d_cs, p_cs, NULL, credtype_id_krb5); - - kcdb_credset_get_size(d_cs, &s); - - if (s == 0) { - _reportf(L"No tickets to delete"); - - kcdb_credset_delete(d_cs); - return 0; - } - - code = pkrb5_init_context(&ctx); - if (code != 0) { - rv = code; - goto _cleanup; - } - - /* we should synchronize the credential lists before we attempt to - make any assumptions on the state of the root credset */ - khm_krb5_list_tickets(&ctx); - - /* so, we need to make a decision about whether to destroy entire - ccaches or just individual credentials. Therefore we first - sort them by ccache. */ - kcdb_credset_sort(d_cs, - khmint_location_comp_func, - NULL); - - /* now, for each ccache we encounter, we check if we have all the - credentials from that ccache in the to-be-deleted list. */ - for (i=0; i < (int) s; i++) { - khm_handle cred; - - if (KHM_FAILED(kcdb_credset_get_cred(d_cs, - i, - &cred))) - continue; - - cb = sizeof(ccname); - rv = kcdb_cred_get_attr(cred, - KCDB_ATTR_LOCATION, - NULL, - ccname, - &cb); - -#ifdef DEBUG - assert(KHM_SUCCEEDED(rv)); -#endif - kcdb_cred_release(cred); - - lc.credset = d_cs; - lc.cred = NULL; - lc.ccname = ccname; - lc.success = FALSE; - - kcdb_credset_apply(NULL, - khmint_location_check_func, - (void *) &lc); - - if (lc.success) { - /* ok the destroy the ccache */ - char a_ccname[KRB5_MAXCCH_CCNAME]; - krb5_ccache cc = NULL; - - _reportf(L"Destroying ccache [%s]", ccname); - - UnicodeStrToAnsi(a_ccname, - sizeof(a_ccname), - ccname); - - code = pkrb5_cc_resolve(ctx, - a_ccname, - &cc); - if (code) - goto _delete_this_set; - - code = pkrb5_cc_destroy(ctx, cc); - - if (code) { - _reportf(L"krb5_cc_destroy returns code %d", code); - } - - _delete_this_set: - - lc.credset = d_cs; - lc.ccname = ccname; - - /* note that although we are deleting credentials off the - credential set, the size of the credential set does not - decrease since we are doing it from inside - kcdb_credset_apply(). The deleted creds will simply be - marked as deleted until kcdb_credset_purge() is - called. */ - - kcdb_credset_apply(d_cs, - khmint_delete_location_func, - (void *) &lc); - } - } - - kcdb_credset_purge(d_cs); - - /* the remainder need to be deleted one by one */ - - kcdb_credset_get_size(d_cs, &s); - - for (i=0; i < (int) s; ) { - khm_handle cred; - char a_ccname[KRB5_MAXCCH_CCNAME]; - char a_srvname[KCDB_CRED_MAXCCH_NAME]; - wchar_t srvname[KCDB_CRED_MAXCCH_NAME]; - krb5_ccache cc; - krb5_creds in_cred, out_cred; - krb5_principal princ; - khm_int32 etype; - - if (KHM_FAILED(kcdb_credset_get_cred(d_cs, - i, - &cred))) { - i++; - continue; - } - - cb = sizeof(ccname); - if (KHM_FAILED(kcdb_cred_get_attr(cred, - KCDB_ATTR_LOCATION, - NULL, - ccname, - &cb))) - goto _done_with_this_cred; - - _reportf(L"Looking at ccache [%s]", ccname); - - UnicodeStrToAnsi(a_ccname, - sizeof(a_ccname), - ccname); - - code = pkrb5_cc_resolve(ctx, - a_ccname, - &cc); - - if (code) - goto _skip_similar; - - code = pkrb5_cc_get_principal(ctx, cc, &princ); - - if (code) { - pkrb5_cc_close(ctx, cc); - goto _skip_similar; - } - - _del_this_cred: - - cb = sizeof(etype); - - if (KHM_FAILED(kcdb_cred_get_attr(cred, - attr_id_key_enctype, - NULL, - &etype, - &cb))) - goto _do_next_cred; - - cb = sizeof(srvname); - if (KHM_FAILED(kcdb_cred_get_name(cred, - srvname, - &cb))) - goto _do_next_cred; - - _reportf(L"Attempting to delete ticket %s", srvname); - - UnicodeStrToAnsi(a_srvname, sizeof(a_srvname), srvname); - - ZeroMemory(&in_cred, sizeof(in_cred)); - - code = pkrb5_parse_name(ctx, a_srvname, &in_cred.server); - if (code) - goto _do_next_cred; - in_cred.client = princ; - in_cred.keyblock.enctype = etype; - - code = pkrb5_cc_retrieve_cred(ctx, - cc, - KRB5_TC_MATCH_SRV_NAMEONLY | - KRB5_TC_SUPPORTED_KTYPES, - &in_cred, - &out_cred); - if (code) - goto _do_next_cred_0; - - code = pkrb5_cc_remove_cred(ctx, cc, - KRB5_TC_MATCH_SRV_NAMEONLY | - KRB5_TC_SUPPORTED_KTYPES | - KRB5_TC_MATCH_AUTHDATA, - &out_cred); - - pkrb5_free_cred_contents(ctx, &out_cred); - _do_next_cred_0: - pkrb5_free_principal(ctx, in_cred.server); - _do_next_cred: - - /* check if the next cred is also of the same ccache */ - kcdb_cred_release(cred); - - for (i++; i < (int) s; i++) { - if (KHM_FAILED(kcdb_credset_get_cred(d_cs, - i, - &cred))) - continue; - } - - if (i < (int) s) { - wchar_t newcc[KRB5_MAXCCH_CCNAME]; - - cb = sizeof(newcc); - if (KHM_FAILED(kcdb_cred_get_attr(cred, - KCDB_ATTR_LOCATION, - NULL, - newcc, - &cb)) || - wcscmp(newcc, ccname)) { - i--; /* we have to look at this again */ - goto _done_with_this_set; - } - goto _del_this_cred; - } - - - _done_with_this_set: - pkrb5_free_principal(ctx, princ); - - pkrb5_cc_close(ctx, cc); - - _done_with_this_cred: - kcdb_cred_release(cred); - i++; - continue; - - _skip_similar: - kcdb_cred_release(cred); - - for (++i; i < (int) s; i++) { - wchar_t newcc[KRB5_MAXCCH_CCNAME]; - - if (KHM_FAILED(kcdb_credset_get_cred(d_cs, - i, - &cred))) - continue; - - cb = sizeof(newcc); - if (KHM_FAILED(kcdb_cred_get_attr(cred, - KCDB_ATTR_LOCATION, - NULL, - &newcc, - &cb))) { - kcdb_cred_release(cred); - continue; - } - - if (wcscmp(newcc, ccname)) { - kcdb_cred_release(cred); - break; - } - } - } - - _cleanup: - - if (d_cs) - kcdb_credset_delete(&d_cs); - - if (ctx != NULL) - pkrb5_free_context(ctx); - - return rv; -} - -int -khm_krb5_destroy_identity(khm_handle identity) -{ - krb5_context ctx; - krb5_ccache cache; - krb5_error_code rc; - - ctx = NULL; - cache = NULL; - - if (rc = khm_krb5_initialize(identity, &ctx, &cache)) - return(rc); - - rc = pkrb5_cc_destroy(ctx, cache); - - if (ctx != NULL) - pkrb5_free_context(ctx); - - return(rc); -} - -static BOOL -GetSecurityLogonSessionData(PSECURITY_LOGON_SESSION_DATA * ppSessionData) -{ - NTSTATUS Status = 0; - HANDLE TokenHandle; - TOKEN_STATISTICS Stats; - DWORD ReqLen; - BOOL Success; - - if (!ppSessionData) - return FALSE; - *ppSessionData = NULL; - - Success = OpenProcessToken( GetCurrentProcess(), TOKEN_QUERY, &TokenHandle ); - if ( !Success ) - return FALSE; - - Success = GetTokenInformation( TokenHandle, TokenStatistics, &Stats, sizeof(TOKEN_STATISTICS), &ReqLen ); - CloseHandle( TokenHandle ); - if ( !Success ) - return FALSE; - - Status = pLsaGetLogonSessionData( &Stats.AuthenticationId, ppSessionData ); - if ( FAILED(Status) || !ppSessionData ) - return FALSE; - - return TRUE; -} - -// IsKerberosLogon() does not validate whether or not there are valid -// tickets in the cache. It validates whether or not it is reasonable -// to assume that if we attempted to retrieve valid tickets we could -// do so. Microsoft does not automatically renew expired tickets. -// Therefore, the cache could contain expired or invalid tickets. -// Microsoft also caches the user's password and will use it to -// retrieve new TGTs if the cache is empty and tickets are requested. - -static BOOL -IsKerberosLogon(VOID) -{ - PSECURITY_LOGON_SESSION_DATA pSessionData = NULL; - BOOL Success = FALSE; - - if ( GetSecurityLogonSessionData(&pSessionData) ) { - if ( pSessionData->AuthenticationPackage.Buffer ) { - WCHAR buffer[256]; - WCHAR *usBuffer; - int usLength; - - Success = FALSE; - usBuffer = (pSessionData->AuthenticationPackage).Buffer; - usLength = (pSessionData->AuthenticationPackage).Length; - if (usLength < 256) - { - lstrcpynW (buffer, usBuffer, usLength); - StringCbCatW (buffer, sizeof(buffer), L""); - if ( !lstrcmpW(L"Kerberos",buffer) ) - Success = TRUE; - } - } - pLsaFreeReturnBuffer(pSessionData); - } - return Success; -} - - -BOOL -khm_krb5_ms2mit(char * match_princ, BOOL match_realm, BOOL save_creds, - khm_handle * ret_ident) -{ -#ifdef NO_KRB5 - return(FALSE); -#else /* NO_KRB5 */ - krb5_context kcontext = 0; - krb5_error_code code = 0; - krb5_ccache ccache=0; - krb5_ccache mslsa_ccache=0; - krb5_creds creds; - krb5_cc_cursor cursor=0; - krb5_principal princ = 0; - khm_handle ident = NULL; - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - char ccname[KRB5_MAXCCH_CCNAME]; - char *cache_name = NULL; - char *princ_name = NULL; - BOOL rc = FALSE; - - kherr_reportf(L"Begin : khm_krb5_ms2mit. save_cred=%d\n", (int) save_creds); - - if ( !pkrb5_init_context ) - goto cleanup; - - if (code = pkrb5_init_context(&kcontext)) - goto cleanup; - - kherr_reportf(L"Resolving MSLSA\n"); - - if (code = pkrb5_cc_resolve(kcontext, "MSLSA:", &mslsa_ccache)) - goto cleanup; - - if ( save_creds ) { - kherr_reportf(L"Getting principal\n"); - if (code = pkrb5_cc_get_principal(kcontext, mslsa_ccache, &princ)) - goto cleanup; - - kherr_reportf(L"Unparsing name\n"); - if (code = pkrb5_unparse_name(kcontext, princ, &princ_name)) - goto cleanup; - - AnsiStrToUnicode(idname, sizeof(idname), princ_name); - - kherr_reportf(L"Unparsed name [%s]", idname); - - /* see if we have to match a specific principal */ - if (match_princ != NULL) { - if (strcmp(princ_name, match_princ)) { - kherr_reportf(L"Principal mismatch. Wanted [%S], found [%S]", - match_princ, princ_name); - goto cleanup; - } - } else if (match_realm) { - wchar_t * wdefrealm; - char defrealm[256]; - krb5_data * princ_realm; - - wdefrealm = khm_krb5_get_default_realm(); - if (wdefrealm == NULL) { - kherr_reportf(L"Can't determine default realm"); - goto cleanup; - } - - princ_realm = krb5_princ_realm(kcontext, princ); - UnicodeStrToAnsi(defrealm, sizeof(defrealm), wdefrealm); - - if (strncmp(defrealm, princ_realm->data, princ_realm->length)) { - kherr_reportf(L"Realm mismatch. Wanted [%S], found [%*S]", - defrealm, princ_realm->length, princ_realm->data); - PFREE(wdefrealm); - goto cleanup; - } - - PFREE(wdefrealm); - } - - if (KHM_SUCCEEDED(kcdb_identity_create(idname, - KCDB_IDENT_FLAG_CREATE, - &ident))) { - khm_size cb; - - cb = sizeof(ccname); - - khm_krb5_get_identity_default_ccacheA(ident, ccname, &cb); - - cache_name = ccname; - - } else { - /* the identity could not be created. we just use the - name of the principal as the ccache name. */ -#ifdef DEBUG - assert(FALSE); -#endif - kherr_reportf(L"Failed to create identity"); - StringCbPrintfA(ccname, sizeof(ccname), "API:%s", princ_name); - cache_name = ccname; - } - - kherr_reportf(L"Resolving target cache [%S]\n", cache_name); - - if (code = pkrb5_cc_resolve(kcontext, cache_name, &ccache)) { - kherr_reportf(L"Cannot resolve cache [%S] with code=%d. Trying default.\n", cache_name, code); - - if (code = pkrb5_cc_default(kcontext, &ccache)) { - kherr_reportf(L"Failed to resolve default ccache. Code=%d", code); - goto cleanup; - } - } - - kherr_reportf(L"Initializing ccache\n"); - if (code = pkrb5_cc_initialize(kcontext, ccache, princ)) - goto cleanup; - - kherr_reportf(L"Copying credentials\n"); - if (code = pkrb5_cc_copy_creds(kcontext, mslsa_ccache, ccache)) - goto cleanup; - - /* and mark the identity as having been imported */ - if (ident) { - khm_krb5_set_identity_flags(ident, K5IDFLAG_IMPORTED, K5IDFLAG_IMPORTED); - - if (ret_ident) { - *ret_ident = ident; - kcdb_identity_hold(*ret_ident); - } - } - - rc = TRUE; - - } else { - /* Enumerate tickets from cache looking for an initial ticket */ - if ((code = pkrb5_cc_start_seq_get(kcontext, mslsa_ccache, &cursor))) - goto cleanup; - - while (!(code = pkrb5_cc_next_cred(kcontext, mslsa_ccache, - &cursor, &creds))) { - if ( creds.ticket_flags & TKT_FLG_INITIAL ) { - rc = TRUE; - pkrb5_free_cred_contents(kcontext, &creds); - break; - } - pkrb5_free_cred_contents(kcontext, &creds); - } - pkrb5_cc_end_seq_get(kcontext, mslsa_ccache, &cursor); - } - -cleanup: - kherr_reportf(L" Received code=%d", code); - - if (princ_name) - pkrb5_free_unparsed_name(kcontext, princ_name); - if (princ) - pkrb5_free_principal(kcontext, princ); - if (ccache) - pkrb5_cc_close(kcontext, ccache); - if (mslsa_ccache) - pkrb5_cc_close(kcontext, mslsa_ccache); - if (kcontext) - pkrb5_free_context(kcontext); - if (ident) - kcdb_identity_release(ident); - - return(rc); -#endif /* NO_KRB5 */ -} - -#define KRB_FILE "KRB.CON" -#define KRBREALM_FILE "KRBREALM.CON" -#define KRB5_FILE "KRB5.INI" -#define KRB5_TMP_FILE "KRB5.INI.TMP" - -BOOL -khm_krb5_get_temp_profile_file(LPSTR confname, UINT szConfname) -{ - GetTempPathA(szConfname, confname); - confname[szConfname-1] = '\0'; - StringCchCatA(confname, szConfname, KRB5_TMP_FILE); - confname[szConfname-1] = '\0'; - return FALSE; -} - -#ifdef NOT_QUITE_IMPLEMENTED_YET -BOOL -khm_krb5_set_profile_file(krb5_context ctx, LPSTR confname) -{ - char *conffiles[2]; - - if (confname == NULL || - pkrb5_set_config_files == NULL || - ctx == NULL) - return FALSE; - - conffiles[0] = confname; - conffiles[1] = NULL; - - if (pkrb5_set_config_files(ctx, conffiles)) - return FALSE; - else - return TRUE; -} -#endif - -BOOL -khm_krb5_get_profile_file(LPSTR confname, UINT szConfname) -{ - char **configFile = NULL; - if (pkrb5_get_default_config_files(&configFile)) - { - GetWindowsDirectoryA(confname,szConfname); - confname[szConfname-1] = '\0'; - - StringCchCatA(confname, szConfname, "\\"); - StringCchCatA(confname, szConfname, KRB5_FILE); - - return FALSE; - } - - *confname = 0; - - if (configFile) - { - StringCchCopyA(confname, szConfname, *configFile); - pkrb5_free_config_files(configFile); - } - - if (!*confname) - { - GetWindowsDirectoryA(confname,szConfname); - confname[szConfname-1] = '\0'; - StringCchCatA(confname, szConfname, "\\"); - StringCchCatA(confname, szConfname, KRB5_FILE); - } - - return FALSE; -} - -BOOL -khm_get_krb4_con_file(LPSTR confname, UINT szConfname) -{ - if (hKrb5 && !hKrb4) { // hold krb.con where krb5.ini is located - CHAR krbConFile[MAX_PATH]=""; - LPSTR pFind; - - //strcpy(krbConFile, CLeashApp::m_krbv5_profile->first_file->filename); - if (khm_krb5_get_profile_file(krbConFile, sizeof(krbConFile))) { - GetWindowsDirectoryA(krbConFile,sizeof(krbConFile)); - krbConFile[MAX_PATH-1] = '\0'; - StringCchCatA(confname, szConfname, "\\"); - } - - pFind = strrchr(krbConFile, '\\'); - if (pFind) { - *pFind = '\0'; - StringCchCatA(krbConFile, ARRAYLENGTH(krbConFile), "\\"); - StringCchCatA(krbConFile, ARRAYLENGTH(krbConFile), KRB_FILE); - } - else - krbConFile[0] = '\0'; - - StringCchCopyA(confname, szConfname, krbConFile); - } - else if (hKrb4) { - size_t size = szConfname; - memset(confname, '\0', szConfname); - if (!pkrb_get_krbconf2(confname, &size)) - { // Error has happened - GetWindowsDirectoryA(confname,szConfname); - confname[szConfname-1] = '\0'; - StringCchCatA(confname, szConfname, "\\"); - StringCchCatA(confname, szConfname, KRB_FILE); - } - } - return FALSE; -} - -int -readstring(FILE * file, char * buf, int len) -{ - int c,i; - memset(buf, '\0', sizeof(buf)); - for (i=0, c=fgetc(file); c != EOF ; c=fgetc(file), i++) { - if (i < sizeof(buf)) { - if (c == '\n') { - buf[i] = '\0'; - return i; - } else { - buf[i] = (char) c; - } - } else { - if (c == '\n') { - buf[len-1] = '\0'; - return(i); - } - } - } - if (c == EOF) { - if (i > 0 && i < len) { - buf[i] = '\0'; - return(i); - } else { - buf[len-1] = '\0'; - return(-1); - } - } - return(-1); -} - -/*! \internal - \brief Return a list of configured realms - - The string that is returned is a set of null terminated unicode - strings, each of which denotes one realm. The set is terminated - by a zero length null terminated string. - - The caller should free the returned string using free() - - \return The string with the list of realms or NULL if the - operation fails. -*/ -wchar_t * -khm_krb5_get_realm_list(void) -{ - wchar_t * rlist = NULL; - - if (pprofile_get_subsection_names && pprofile_free_list) { - const char* rootSection[] = {"realms", NULL}; - const char** rootsec = rootSection; - char **sections = NULL, **cpp = NULL, *value = NULL; - - char krb5_conf[MAX_PATH+1]; - - if (!khm_krb5_get_profile_file(krb5_conf,sizeof(krb5_conf))) { - profile_t profile; - long retval; - const char *filenames[2]; - wchar_t * d; - size_t cbsize; - size_t t; - - filenames[0] = krb5_conf; - filenames[1] = NULL; - retval = pprofile_init(filenames, &profile); - if (!retval) { - retval = pprofile_get_subsection_names(profile, rootsec, - &sections); - - if (!retval) - { - /* first figure out how much space to allocate */ - cbsize = 0; - for (cpp = sections; *cpp; cpp++) - { - cbsize += sizeof(wchar_t) * (strlen(*cpp) + 1); - } - cbsize += sizeof(wchar_t); /* double null terminated */ - - rlist = PMALLOC(cbsize); - d = rlist; - for (cpp = sections; *cpp; cpp++) - { - AnsiStrToUnicode(d, cbsize, *cpp); - t = wcslen(d) + 1; - d += t; - cbsize -= sizeof(wchar_t) * t; - } - *d = L'\0'; - } - - pprofile_free_list(sections); - -#if 0 - retval = pprofile_get_string(profile, "libdefaults","noaddresses", 0, "true", &value); - if ( value ) { - disable_noaddresses = config_boolean_to_int(value); - pprofile_release_string(value); - } -#endif - pprofile_release(profile); - } - } - } else { - FILE * file; - char krb_conf[MAX_PATH+1]; - char * p; - size_t cbsize, t; - wchar_t * d; - - if (!khm_get_krb4_con_file(krb_conf,sizeof(krb_conf)) && -#if _MSC_VER >= 1400 && __STDC_WANT_SECURE_LIB__ - !fopen_s(&file, krb_conf, "rt") -#else - (file = fopen(krb_conf, "rt")) -#endif - ) - { - char lineBuf[256]; - - /*TODO: compute the actual required buffer size instead of hardcoding */ - cbsize = 16384; // arbitrary - rlist = PMALLOC(cbsize); - d = rlist; - - // Skip the default realm - readstring(file,lineBuf,sizeof(lineBuf)); - - // Read the defined realms - while (TRUE) - { - if (readstring(file,lineBuf,sizeof(lineBuf)) < 0) - break; - - if (*(lineBuf + strlen(lineBuf) - 1) == '\r') - *(lineBuf + strlen(lineBuf) - 1) = 0; - - for (p=lineBuf; *p ; p++) - { - if (isspace(*p)) { - *p = 0; - break; - } - } - - if ( strncmp(".KERBEROS.OPTION.",lineBuf,17) ) { - t = strlen(lineBuf) + 1; - if(cbsize > (1 + t*sizeof(wchar_t))) { - AnsiStrToUnicode(d, cbsize, lineBuf); - d += t; - cbsize -= t * sizeof(wchar_t); - } else - break; - } - } - - *d = L'\0'; - - fclose(file); - } - } - - return rlist; -} - -/*! \internal - \brief Get the default realm - - A string will be returned that specifies the default realm. The - caller should free the string using PFREE(). - - Returns NULL if the operation fails. -*/ -wchar_t * -khm_krb5_get_default_realm(void) -{ - wchar_t * realm; - size_t cch; - krb5_context ctx=0; - char * def = 0; - - pkrb5_init_context(&ctx); - - if (ctx == 0) - return NULL; - - pkrb5_get_default_realm(ctx,&def); - - if (def) { - cch = strlen(def) + 1; - realm = PMALLOC(sizeof(wchar_t) * cch); - AnsiStrToUnicode(realm, sizeof(wchar_t) * cch, def); - pkrb5_free_default_realm(ctx, def); - } else - realm = NULL; - - pkrb5_free_context(ctx); - - return realm; -} - -long -khm_krb5_set_default_realm(wchar_t * realm) { - krb5_context ctx=0; - char * def = 0; - long rv = 0; - char astr[K5_MAXCCH_REALM]; - - UnicodeStrToAnsi(astr, sizeof(astr), realm); - - pkrb5_init_context(&ctx); - pkrb5_get_default_realm(ctx,&def); - - if ((def && strcmp(def, astr)) || - !def) { - rv = pkrb5_set_default_realm(ctx, astr); - } - - if (def) { - pkrb5_free_default_realm(ctx, def); - } - - pkrb5_free_context(ctx); - - return rv; -} - -wchar_t * -khm_get_realm_from_princ(wchar_t * princ) { - wchar_t * t; - - if(!princ) - return NULL; - - for (t = princ; *t; t++) { - if(*t == L'\\') { /* escape */ - t++; - if(! *t) /* malformed */ - break; - } else if (*t == L'@') - break; - } - - if (*t == '@' && *(t+1) != L'\0') - return (t+1); - else - return NULL; -} - -long -khm_krb5_changepwd(char * principal, - char * password, - char * newpassword, - char** error_str) -{ - krb5_error_code rc = 0; - int result_code = 0; - krb5_data result_code_string, result_string; - krb5_context context = 0; - krb5_principal princ = 0; - krb5_get_init_creds_opt opts; - krb5_creds creds; - - result_string.data = 0; - result_code_string.data = 0; - - if ( !pkrb5_init_context ) - goto cleanup; - - if (rc = pkrb5_init_context(&context)) { - goto cleanup; - } - - if (rc = pkrb5_parse_name(context, principal, &princ)) { - goto cleanup; - } - - pkrb5_get_init_creds_opt_init(&opts); - pkrb5_get_init_creds_opt_set_tkt_life(&opts, 5*60); - pkrb5_get_init_creds_opt_set_renew_life(&opts, 0); - pkrb5_get_init_creds_opt_set_forwardable(&opts, 0); - pkrb5_get_init_creds_opt_set_proxiable(&opts, 0); - pkrb5_get_init_creds_opt_set_address_list(&opts,NULL); - - if (rc = pkrb5_get_init_creds_password(context, &creds, princ, - password, 0, 0, 0, - "kadmin/changepw", &opts)) { - if (rc == KRB5KRB_AP_ERR_BAD_INTEGRITY) { -#if 0 - com_err(argv[0], 0, - "Password incorrect while getting initial ticket"); -#endif - } else { -#if 0 - com_err(argv[0], ret, "getting initial ticket"); -#endif - } - goto cleanup; - } - - if (rc = pkrb5_change_password(context, &creds, newpassword, - &result_code, &result_code_string, - &result_string)) { -#if 0 - com_err(argv[0], ret, "changing password"); -#endif - goto cleanup; - } - - if (result_code) { - int len = result_code_string.length + - (result_string.length ? (sizeof(": ") - 1) : 0) + - result_string.length; - if (len && error_str) { - *error_str = PMALLOC(len + 1); - if (*error_str) - StringCchPrintfA(*error_str, len+1, - "%.*s%s%.*s", - result_code_string.length, - result_code_string.data, - result_string.length?": ":"", - result_string.length, - result_string.data); - } - rc = result_code; - goto cleanup; - } - - cleanup: - if (result_string.data) - pkrb5_free_data_contents(context, &result_string); - - if (result_code_string.data) - pkrb5_free_data_contents(context, &result_code_string); - - if (princ) - pkrb5_free_principal(context, princ); - - if (context) - pkrb5_free_context(context); - - return rc; -} - -khm_int32 KHMAPI -khm_krb5_creds_is_equal(khm_handle vcred1, khm_handle vcred2, void * dummy) { - if (kcdb_creds_comp_attr(vcred1, vcred2, KCDB_ATTR_LOCATION) || - kcdb_creds_comp_attr(vcred1, vcred2, attr_id_key_enctype) || - kcdb_creds_comp_attr(vcred1, vcred2, attr_id_tkt_enctype) || - kcdb_creds_comp_attr(vcred1, vcred2, attr_id_kvno)) - return 1; - else - return 0; -} - -void -khm_krb5_set_identity_flags(khm_handle identity, - khm_int32 flag_mask, - khm_int32 flag_value) { - - khm_int32 t = 0; - khm_size cb; - - cb = sizeof(t); - if (KHM_FAILED(kcdb_identity_get_attr(identity, - attr_id_krb5_idflags, - NULL, - &t, &cb))) { - t = 0; - } - - t &= ~flag_mask; - t |= (flag_value & flag_mask); - - kcdb_identity_set_attr(identity, - attr_id_krb5_idflags, - &t, sizeof(t)); -} - -khm_int32 -khm_krb5_get_identity_flags(khm_handle identity) { - khm_int32 t = 0; - khm_size cb; - - cb = sizeof(t); - kcdb_identity_get_attr(identity, - attr_id_krb5_idflags, - NULL, &t, &cb); - - return t; -} - -long -khm_krb5_get_temp_ccache(krb5_context ctx, - krb5_ccache * prcc) { - int rnd = rand(); - char ccname[MAX_PATH]; - long code = 0; - krb5_ccache cc = 0; - - StringCbPrintfA(ccname, sizeof(ccname), "MEMORY:TempCache%8x", rnd); - - code = pkrb5_cc_resolve(ctx, ccname, &cc); - - if (code == 0) - *prcc = cc; - - return code; -} - -/* - - The configuration information for each identity comes from a - multitude of layers organized as follows. The ordering is - decreasing in priority. When looking up a value, the value will be - looked up in each layer in turn starting at level 0. The first - instance of the value found will be the effective value. - - 0 : <identity configuration>\Krb5Cred - - 0.1: per user - - 0.2: per machine - - 1 : <plugin configuration>\Parameters\Realms\<realm of identity> - - 1.1: per user - - 1.2: per machine - - 2 : <plugin configuration>\Parameters - - 2.1: per user - - 2.2: per machine - - 2.3: schema - - */ -khm_int32 -khm_krb5_get_identity_config(khm_handle ident, - khm_int32 flags, - khm_handle * ret_csp) { - - khm_int32 rv = KHM_ERROR_SUCCESS; - khm_handle csp_i = NULL; - khm_handle csp_ik5 = NULL; - khm_handle csp_realms = NULL; - khm_handle csp_realm = NULL; - khm_handle csp_plugins = NULL; - khm_handle csp_krbcfg = NULL; - khm_handle csp_rv = NULL; - wchar_t realm[KCDB_IDENT_MAXCCH_NAME]; - - realm[0] = L'\0'; - - if (ident) { - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - wchar_t * trealm; - khm_size cb_idname = sizeof(idname); - - rv = kcdb_identity_get_name(ident, idname, &cb_idname); - if (KHM_SUCCEEDED(rv) && - (trealm = khm_get_realm_from_princ(idname)) != NULL) { - StringCbCopy(realm, sizeof(realm), trealm); - } - } - - if (ident) { - rv = kcdb_identity_get_config(ident, flags, &csp_i); - if (KHM_FAILED(rv)) - goto try_realm; - - rv = khc_open_space(csp_i, CSNAME_KRB5CRED, flags, &csp_ik5); - if (KHM_FAILED(rv)) - goto try_realm; - - try_realm: - - if (realm[0] == L'\0') - goto done_shadow_realm; - - rv = khc_open_space(csp_params, CSNAME_REALMS, flags, &csp_realms); - if (KHM_FAILED(rv)) - goto done_shadow_realm; - - rv = khc_open_space(csp_realms, realm, flags, &csp_realm); - if (KHM_FAILED(rv)) - goto done_shadow_realm; - - rv = khc_shadow_space(csp_realm, csp_params); - - done_shadow_realm: - - if (csp_ik5) { - if (csp_realm) - rv = khc_shadow_space(csp_ik5, csp_realm); - else - rv = khc_shadow_space(csp_ik5, csp_params); - - csp_rv = csp_ik5; - } else { - if (csp_realm) - csp_rv = csp_realm; - } - } - - if (csp_rv == NULL) { - - /* No valid identity specified or the specified identity - doesn't have any configuration. We default to the - parameters key. */ - - /* we don't just return csp_params since that's a global - handle that we shouldn't close until the plugin is - unloaded. The caller is going to close the returned handle - when it is done. So we need to create a new csp_params - that can safely be closed. */ - - rv = kmm_get_plugins_config(0, &csp_plugins); - if (KHM_FAILED(rv)) - goto done; - - rv = khc_open_space(csp_plugins, CSNAME_KRB5CRED, flags, &csp_krbcfg); - if (KHM_FAILED(rv)) - goto done; - - rv = khc_open_space(csp_krbcfg, CSNAME_PARAMS, flags, &csp_rv); - } - - done: - - *ret_csp = csp_rv; - - /* leave csp_ik5. If it's non-NULL, then it's the return value */ - /* leave csp_rv. It's the return value. */ - if (csp_i) - khc_close_space(csp_i); - if (csp_realms) - khc_close_space(csp_realms); - - /* csp_realm can also be a return value if csp_ik5 was NULL */ - if (csp_realm && csp_realm != csp_rv) - khc_close_space(csp_realm); - - if (csp_plugins) - khc_close_space(csp_plugins); - if (csp_krbcfg) - khc_close_space(csp_krbcfg); - - return rv; -} - -/* from get_in_tkt.c */ -static krb5_error_code -get_libdefault_string(profile_t profile, const char * realm, - const char * option, char ** ret_val) { - char realmstr[K5_MAXCCH_REALM]; - char **nameval = NULL; - const char * names[4]; - krb5_error_code code = 0; - - names[0] = "libdefaults"; - - if (!realm || !realm[0]) - goto try_number_two; - - StringCbCopyA(realmstr, sizeof(realmstr), realm); - - /* - * Try number one: - * - * [libdefaults] - * REALM = { - * option = <boolean> - * } - */ - - names[1] = realmstr; - names[2] = option; - names[3] = 0; - code = pprofile_get_values(profile, names, &nameval); - if (code == 0 && nameval && nameval[0]) - goto goodbye; - - try_number_two: - - /* - * Try number two: - * - * [libdefaults] - * option = <boolean> - */ - - names[1] = option; - names[2] = 0; - code = pprofile_get_values(profile, names, &nameval); - if (code == 0 && nameval && nameval[0]) - goto goodbye; - - goodbye: - if (!nameval) - return(ENOENT); - - if (!nameval[0]) { - code = ENOENT; - } else { - size_t cb; - - if (FAILED(StringCbLengthA(nameval[0], K5_MAXCCH_REALM * sizeof(char), &cb))) { - code = ENOMEM; - } else { - cb += sizeof(char); - *ret_val = PMALLOC(cb); - - if (!*ret_val) - code = ENOMEM; - else { - StringCbCopyA(*ret_val, cb, nameval[0]); - code = 0; - } - } - } - - pprofile_free_list(nameval); - - return code; -} - - -const struct escape_char_sequences { - wchar_t character; - wchar_t escape; -} file_cc_escapes[] = { - - /* in ASCII order */ - - {L'\"', L'd'}, - {L'$', L'$'}, - {L'%', L'r'}, - {L'\'', L'i'}, - {L'*', L's'}, - {L'/', L'f'}, - {L':', L'c'}, - {L'<', L'l'}, - {L'>', L'g'}, - {L'?', L'q'}, - {L'\\', L'b'}, - {L'|', L'p'} -}; - -static void -escape_string_for_filename(const wchar_t * s, - wchar_t * buf, - khm_size cb_buf) -{ - wchar_t * d; - int i; - - for (d = buf; *s && cb_buf > sizeof(wchar_t) * 3; s++) { - if (iswpunct(*s)) { - for (i=0; i < ARRAYLENGTH(file_cc_escapes); i++) { - if (*s == file_cc_escapes[i].character) - break; - } - - if (i < ARRAYLENGTH(file_cc_escapes)) { - *d++ = L'$'; - *d++ = file_cc_escapes[i].escape; - cb_buf -= sizeof(wchar_t) * 2; - continue; - } - } - - *d++ = *s; - cb_buf -= sizeof(wchar_t); - } - -#ifdef DEBUG - assert(cb_buf >= sizeof(wchar_t)); -#endif - *d++ = L'\0'; -} - -static khm_int32 -get_default_file_cache_for_identity(const wchar_t * idname, - wchar_t * ccname, - khm_size * pcb) -{ - wchar_t escf[KRB5_MAXCCH_CCNAME] = L""; - wchar_t tmppath[KRB5_MAXCCH_CCNAME] = L""; - wchar_t tccname[KRB5_MAXCCH_CCNAME]; - khm_size cb; - - escape_string_for_filename(idname, escf, sizeof(escf)); - GetTempPath(ARRAYLENGTH(tmppath), tmppath); - - /* The path returned by GetTempPath always ends in a backslash. */ - StringCbPrintf(tccname, sizeof(tccname), L"FILE:%skrb5cc.%s", tmppath, escf); - StringCbLength(tccname, sizeof(tccname), &cb); - cb += sizeof(wchar_t); - - if (ccname && *pcb >= cb) { - StringCbCopy(ccname, *pcb, tccname); - *pcb = cb; - return KHM_ERROR_SUCCESS; - } else { - *pcb = cb; - return KHM_ERROR_TOO_LONG; - } -} - -khm_int32 -khm_krb5_get_identity_default_ccache(khm_handle ident, wchar_t * buf, khm_size * pcb) { - khm_handle csp_id = NULL; - khm_int32 rv = KHM_ERROR_SUCCESS; - khm_size cbt; - - rv = khm_krb5_get_identity_config(ident, 0, &csp_id); - - cbt = *pcb; - if (KHM_SUCCEEDED(rv)) - rv = khc_read_string(csp_id, L"DefaultCCName", buf, &cbt); - - if ((KHM_FAILED(rv) && rv != KHM_ERROR_TOO_LONG) || - (KHM_SUCCEEDED(rv) && buf[0] == L'\0')) { - /* we need to figure out the default ccache from the principal - name */ - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - wchar_t ccname[KRB5_MAXCCH_CCNAME]; - khm_size cb; - khm_int32 use_file_cache = 0; - - khc_read_int32(csp_id, L"DefaultToFileCache", &use_file_cache); - - cb = sizeof(idname); - kcdb_identity_get_name(ident, idname, &cb); - - if (use_file_cache) { - cb = sizeof(ccname); - rv = get_default_file_cache_for_identity(idname, ccname, &cb); -#ifdef DEBUG - assert(KHM_SUCCEEDED(rv)); -#endif - } else { /* generate an API: cache */ - StringCbPrintf(ccname, sizeof(ccname), L"API:%s", idname); - } - khm_krb5_canon_cc_name(ccname, sizeof(ccname)); - - _reportf(L"Setting CCache [%s] for identity [%s]", ccname, idname); - - StringCbLength(ccname, sizeof(ccname), &cb); - cb += sizeof(wchar_t); - - if (buf && *pcb >= cb) { - StringCbCopy(buf, *pcb, ccname); - *pcb = cb; - rv = KHM_ERROR_SUCCESS; - } else { - *pcb = cb; - rv = KHM_ERROR_TOO_LONG; - } - } else if (KHM_SUCCEEDED(rv)) { - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - khm_size cb; - - *pcb = cbt; - - cb = sizeof(idname); - kcdb_identity_get_name(ident, idname, &cb); - - _reportf(L"Found CCache [%s] for identity [%s]", buf, idname); - } - - if (csp_id != NULL) - khc_close_space(csp_id); - - return rv; -} - -khm_int32 -khm_krb5_get_identity_default_ccacheA(khm_handle ident, char * buf, khm_size * pcb) { - wchar_t wccname[KRB5_MAXCCH_CCNAME]; - khm_size cbcc; - khm_int32 rv; - - cbcc = sizeof(wccname); - rv = khm_krb5_get_identity_default_ccache(ident, wccname, &cbcc); - - if (KHM_SUCCEEDED(rv)) { - cbcc = sizeof(char) * cbcc / sizeof(wchar_t); - if (buf == NULL || *pcb < cbcc) { - *pcb = cbcc; - rv = KHM_ERROR_TOO_LONG; - } else { - UnicodeStrToAnsi(buf, *pcb, wccname); - *pcb = cbcc; - rv = KHM_ERROR_SUCCESS; - } - } - - return rv; -} - -khm_int32 -khm_krb5_get_identity_params(khm_handle ident, k5_params * p) { - - khm_int32 rv = KHM_ERROR_SUCCESS; - khm_handle csp_id = NULL; - khm_int32 regf = 0; - khm_int32 proff = 0; - khm_int32 e; - khm_int32 v; - CHAR confname[MAX_PATH]; - CHAR realmname[K5_MAXCCH_REALM]; - - ZeroMemory(p, sizeof(*p)); - - rv = khm_krb5_get_identity_config(ident, 0, &csp_id); - if (KHM_FAILED(rv)) - goto done_reg; - - -#define GETVAL(vname, vfield, flag) \ - do { \ - e = khc_value_exists(csp_id, vname); \ - rv = khc_read_int32(csp_id, vname, &v); \ - if (KHM_FAILED(rv)) goto done_reg; \ - p->vfield = v; \ - if ((e & ~KCONF_FLAG_SCHEMA) != 0) regf |= flag; \ - } while(FALSE) - - /* Flags */ - GETVAL(L"Renewable", renewable, K5PARAM_F_RENEW); - GETVAL(L"Forwardable", forwardable, K5PARAM_F_FORW); - GETVAL(L"Proxiable", proxiable, K5PARAM_F_PROX); - GETVAL(L"Addressless", addressless, K5PARAM_F_ADDL); - GETVAL(L"PublicIP", publicIP, K5PARAM_F_PUBIP); - - /* Lifetime */ - GETVAL(L"DefaultLifetime", lifetime, K5PARAM_F_LIFE); - GETVAL(L"MaxLifetime", lifetime_max, K5PARAM_F_LIFE_H); - GETVAL(L"MinLifetime", lifetime_min, K5PARAM_F_LIFE_L); - - /* Renewable lifetime */ - GETVAL(L"DefaultRenewLifetime", renew_life, K5PARAM_F_RLIFE); - GETVAL(L"MaxRenewLifetime", renew_life_max, K5PARAM_F_RLIFE_H); - GETVAL(L"MinRenewLifetime", renew_life_min, K5PARAM_F_RLIFE_L); - -#undef GETVAL - - done_reg: - - if (csp_id) - khc_close_space(csp_id); - - /* if all the parameters were read from the registry, then we have - no reason to read from the profile file. */ - if (regf == K5PARAM_FM_ALL) { - p->source_reg = regf; - return KHM_ERROR_SUCCESS; - } - - if (rv) - return rv; - - /* we need to figure out the realm name, since there might be - per-realm configuration in the profile file. */ - - realmname[0] = '\0'; - - if (ident) { - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - khm_size cb; - - idname[0] = L'\0'; - cb = sizeof(idname); - rv = kcdb_identity_get_name(ident, idname, &cb); - if (KHM_SUCCEEDED(rv)) { - wchar_t * wrealm; - - wrealm = khm_get_realm_from_princ(idname); - if (wrealm) { - UnicodeStrToAnsi(realmname, sizeof(realmname), wrealm); - } - } - } - - /* If we get here, then some of the settings we read from the - configuration actually came from the schema. In other words, - the values weren't really defined for this identity. So we now - have to read the values from the krb5 configuration file. */ - - if (!khm_krb5_get_profile_file(confname, sizeof(confname))) { - profile_t profile; - const char * filenames[2]; - long retval; - - filenames[0] = confname; - filenames[1] = NULL; - - if (!pprofile_init(filenames, &profile)) { - - /* default ticket lifetime */ - if (!(regf & K5PARAM_F_LIFE)) { - char * value = NULL; - retval = get_libdefault_string(profile, realmname, - "ticket_lifetime", &value); - - if (retval == 0 && value) { - krb5_deltat d; - - retval = pkrb5_string_to_deltat(value, &d); - if (retval == KRB5_DELTAT_BADFORMAT) { - /* Historically some sites use relations of - the form 'ticket_lifetime = 24000' where - the unit is left out but is assumed to be - seconds. Then there are other sites which - use the form 'ticket_lifetime = 600' where - the unit is assumed to be minutes. While - these are technically wrong (a unit needs - to be specified), we try to accomodate for - this using the safe assumption that the - unit is seconds and tack an 's' to the end - and see if that works. */ - - size_t cch; - char tmpbuf[256]; - char * buf; - - do { - if (FAILED(StringCchLengthA(value, 1024 /* unresonably large size */, - &cch))) - break; - - cch += sizeof(char) * 2; /* NULL and new 's' */ - if (cch > ARRAYLENGTH(tmpbuf)) - buf = PMALLOC(cch * sizeof(char)); - else - buf = tmpbuf; - - StringCchCopyA(buf, cch, value); - StringCchCatA(buf, cch, "s"); - - retval = pkrb5_string_to_deltat(buf, &d); - if (retval == 0) { - p->lifetime = d; - proff |= K5PARAM_F_LIFE; - } - - if (buf != tmpbuf) - PFREE(buf); - - } while(0); - - } else if (retval == 0) { - p->lifetime = d; - proff |= K5PARAM_F_LIFE; - } - - PFREE(value); - } - } - - if (!(regf & K5PARAM_F_RLIFE)) { - char * value = NULL; - retval = get_libdefault_string(profile, realmname, - "renew_lifetime", &value); - if (retval == 0 && value) { - krb5_deltat d; - - retval = pkrb5_string_to_deltat(value, &d); - if (retval == 0) { - p->renew_life = d; - proff |= K5PARAM_F_RLIFE; - } - PFREE(value); - } - } - - if (!(regf & K5PARAM_F_FORW)) { - char * value = NULL; - retval = get_libdefault_string(profile, realmname, - "forwardable", &value); - if (retval == 0 && value) { - khm_boolean b; - - if (!khm_krb5_parse_boolean(value, &b)) - p->forwardable = b; - else - p->forwardable = FALSE; - PFREE(value); - proff |= K5PARAM_F_FORW; - } - } - - if (!(regf & K5PARAM_F_RENEW)) { - char * value = NULL; - retval = get_libdefault_string(profile, realmname, - "renewable", &value); - if (retval == 0 && value) { - khm_boolean b; - - if (!khm_krb5_parse_boolean(value, &b)) - p->renewable = b; - else - p->renewable = TRUE; - PFREE(value); - proff |= K5PARAM_F_RENEW; - } - } - - if (!(regf & K5PARAM_F_ADDL)) { - char * value = NULL; - retval = get_libdefault_string(profile, realmname, - "noaddresses", &value); - if (retval == 0 && value) { - khm_boolean b; - - if (!khm_krb5_parse_boolean(value, &b)) - p->addressless = b; - else - p->addressless = TRUE; - PFREE(value); - proff |= K5PARAM_F_ADDL; - } - } - - if (!(regf & K5PARAM_F_PROX)) { - char * value = NULL; - retval = get_libdefault_string(profile, realmname, - "proxiable", &value); - if (retval == 0 && value) { - khm_boolean b; - - if (!khm_krb5_parse_boolean(value, &b)) - p->proxiable = b; - else - p->proxiable = FALSE; - PFREE(value); - proff |= K5PARAM_F_PROX; - } - } - - pprofile_release(profile); - } - } - - p->source_reg = regf; - p->source_prof = proff; - - return rv; -} - -/* Note that p->source_reg and p->source_prof is used in special ways - here. All fields that are flagged in source_reg will be written to - the configuration (if they are different from what - khm_krb5_get_identity_params() reports). All fields that are - flagged in source_prof will be removed from the configuration - (thereby exposing the value defined in the profile file). */ -khm_int32 -khm_krb5_set_identity_params(khm_handle ident, const k5_params * p) { - khm_int32 rv = KHM_ERROR_SUCCESS; - khm_handle csp_id = NULL; - k5_params p_s; - khm_int32 source_reg = p->source_reg; - khm_int32 source_prof = p->source_prof; - - rv = khm_krb5_get_identity_config(ident, - KHM_PERM_WRITE | KHM_FLAG_CREATE | - KCONF_FLAG_WRITEIFMOD, - &csp_id); - if (KHM_FAILED(rv)) - goto done_reg; - - khm_krb5_get_identity_params(ident, &p_s); - - /* Remove any bits that don't make sense. Not all values can be - specified in the profile file. */ - source_prof &= K5PARAM_FM_PROF; - - /* if a flag appears in both source_prof and source_reg, remove - the flag from source_reg. */ - source_reg &= ~source_prof; - - /* we only write values that have changed, and that are flagged in - source_reg */ - - if ((source_reg & K5PARAM_F_RENEW) && - !!p_s.renewable != !!p->renewable) - khc_write_int32(csp_id, L"Renewable", !!p->renewable); - - if ((source_reg & K5PARAM_F_FORW) && - !!p_s.forwardable != !!p->forwardable) - khc_write_int32(csp_id, L"Forwardable", !!p->forwardable); - - if ((source_reg & K5PARAM_F_PROX) && - !!p_s.proxiable != !!p->proxiable) - khc_write_int32(csp_id, L"Proxiable", !!p->proxiable); - - if ((source_reg & K5PARAM_F_ADDL) && - !!p_s.addressless != !!p->addressless) - khc_write_int32(csp_id, L"Addressless", !!p->addressless); - - if ((source_reg & K5PARAM_F_PUBIP) && - p_s.publicIP != p->publicIP) - khc_write_int32(csp_id, L"PublicIP", p->publicIP); - - if ((source_reg & K5PARAM_F_LIFE) && - p_s.lifetime != p->lifetime) - khc_write_int32(csp_id, L"DefaultLifetime", p->lifetime); - - if ((source_reg & K5PARAM_F_LIFE_H) && - p_s.lifetime_max != p->lifetime_max) - khc_write_int32(csp_id, L"MaxLifetime", p->lifetime_max); - - if ((source_reg & K5PARAM_F_LIFE_L) && - p_s.lifetime_min != p->lifetime_min) - khc_write_int32(csp_id, L"MinLifetime", p->lifetime_min); - - if ((source_reg & K5PARAM_F_RLIFE) && - p_s.renew_life != p->renew_life) - khc_write_int32(csp_id, L"DefaultRenewLifetime", p->renew_life); - - if ((source_reg & K5PARAM_F_RLIFE_H) && - p_s.renew_life_max != p->renew_life_max) - khc_write_int32(csp_id, L"MaxRenewLifetime", p->renew_life_max); - - if ((source_reg & K5PARAM_F_RLIFE_L) && - p_s.renew_life_min != p->renew_life_min) - khc_write_int32(csp_id, L"MinRenewLifetime", p->renew_life_min); - - /* and now, remove the values that are present in source_prof. - Not all values are removed since not all values can be - specified in the profile file. */ - if (source_prof & K5PARAM_F_RENEW) - khc_remove_value(csp_id, L"Renewable", 0); - - if (source_prof & K5PARAM_F_FORW) - khc_remove_value(csp_id, L"Forwardable", 0); - - if (source_prof & K5PARAM_F_PROX) - khc_remove_value(csp_id, L"Proxiable", 0); - - if (source_prof & K5PARAM_F_ADDL) - khc_remove_value(csp_id, L"Addressless", 0); - - if (source_prof & K5PARAM_F_LIFE) - khc_remove_value(csp_id, L"DefaultLifetime", 0); - - if (source_prof & K5PARAM_F_RLIFE) - khc_remove_value(csp_id, L"DefaultRenewLifetime", 0); - - done_reg: - if (csp_id != NULL) - khc_close_space(csp_id); - - return rv; -} - -static const char *const conf_yes[] = { - "y", "yes", "true", "t", "1", "on", - 0, -}; - -static const char *const conf_no[] = { - "n", "no", "false", "nil", "0", "off", - 0, -}; - -int -khm_krb5_parse_boolean(const char *s, khm_boolean * b) -{ - const char *const *p; - - for(p=conf_yes; *p; p++) { - if (!_stricmp(*p,s)) { - *b = TRUE; - return 0; - } - } - - for(p=conf_no; *p; p++) { - if (!_stricmp(*p,s)) { - *b = FALSE; - return 0; - } - } - - /* Default to "no" */ - return KHM_ERROR_INVALID_PARAM; -} diff --git a/src/windows/identity/plugins/krb5/krb5funcs.h b/src/windows/identity/plugins/krb5/krb5funcs.h deleted file mode 100644 index d41ffb6b2..000000000 --- a/src/windows/identity/plugins/krb5/krb5funcs.h +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -/* Adapted from multiple Leash header files */ - -#ifndef __KHIMAIRA_KRB5FUNCS_H -#define __KHIMAIRA_KRB5FUNCS_H - -#include<stdlib.h> -#include<krb5.h> - -#include <windows.h> -#define SECURITY_WIN32 -#include <security.h> - -#if _WIN32_WINNT < 0x0501 -#define KHM_SAVE_WIN32_WINNT _WIN32_WINNT -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0501 -#endif -#include<ntsecapi.h> -#ifdef KHM_SAVE_WIN32_WINNT -#undef _WIN32_WINNT -#define _WIN32_WINNT KHM_SAVE_WIN32_WINNT -#undef KHM_SAVE_WIN32_WINNT -#endif - -#include <krb5common.h> - -#define LEASH_DEBUG_CLASS_GENERIC 0 -#define LEASH_DEBUG_CLASS_KRB4 1 -#define LEASH_DEBUG_CLASS_KRB4_APP 2 - -#define LEASH_PRIORITY_LOW 0 -#define LEASH_PRIORITY_HIGH 1 - -#define KRB5_DEFAULT_LIFE 60*60*10 /* 10 hours */ - -#define KRB5_MAXCCH_CCNAME 1024 - -#define KRB5_CONF_YES "yes" -#define KRB5_CONF_NO "no" - -typedef struct tag_k5params { - - khm_int32 source_reg; /* flags indicating which fields were - retrieved using the registry */ - khm_int32 source_prof; /* flags indicating which fields were - retrieved using krb5.ini */ - - khm_boolean renewable; - khm_boolean forwardable; - khm_boolean proxiable; - khm_boolean addressless; - - khm_ui_4 publicIP; - - krb5_deltat lifetime; - krb5_deltat lifetime_min; - krb5_deltat lifetime_max; - - krb5_deltat renew_life; - krb5_deltat renew_life_min; - krb5_deltat renew_life_max; - -} k5_params; - -#define K5PARAM_F_RENEW 0x00000001 -#define K5PARAM_F_FORW 0x00000002 -#define K5PARAM_F_PROX 0x00000004 -#define K5PARAM_F_ADDL 0x00000008 -#define K5PARAM_F_PUBIP 0x00000010 -#define K5PARAM_F_LIFE 0x00000020 -#define K5PARAM_F_RLIFE 0x00000040 -#define K5PARAM_F_LIFE_L 0x00000080 -#define K5PARAM_F_LIFE_H 0x00000100 -#define K5PARAM_F_RLIFE_L 0x00000200 -#define K5PARAM_F_RLIFE_H 0x00000400 - -#define K5PARAM_FM_ALL 0x000007ff -#define K5PARAM_FM_PROF 0x0000007f - -/* Credential and principal operations */ - -BOOL -khm_krb5_ms2mit(char * match_princ, - BOOL match_realm, - BOOL save_creds, - khm_handle * ret_ident); - -int -khm_krb5_kinit(krb5_context alt_ctx, - char * principal_name, - char * password, - char * ccache, - krb5_deltat lifetime, - DWORD forwardable, - DWORD proxiable, - krb5_deltat renew_life, - DWORD addressless, - DWORD publicIP, - krb5_prompter_fct prompter, - void * p_data, - char ** pp_error_message); - -long -khm_krb5_changepwd(char * principal, - char * password, - char * newpassword, - char** error_str); - -int -khm_krb5_destroy_by_credset(khm_handle p_cs); - -int -khm_krb5_destroy_identity(khm_handle identity); - -long -khm_convert524(krb5_context ctx); - -int -khm_krb5_renew_cred(khm_handle cred); - -int -khm_krb5_renew_ident(khm_handle identity); - -long -khm_krb5_list_tickets(krb5_context *krbv5Context); - -long -khm_krb5_copy_ccache_by_name(krb5_context in_ctx, - wchar_t * wscc_dest, - wchar_t * wscc_src); - -long -khm_krb5_get_temp_ccache(krb5_context ctx, - krb5_ccache * cc); - -khm_int32 KHMAPI -khm_krb5_creds_is_equal(khm_handle vcred1, khm_handle vcred2, void * dummy); - - -/* Configuration */ - -BOOL -khm_krb5_get_profile_file(LPSTR confname, UINT szConfname); - -BOOL -khm_krb5_get_temp_profile_file(LPSTR confname, UINT szConfname); - -wchar_t * -khm_krb5_get_default_realm(void); - -long -khm_krb5_set_default_realm(wchar_t * realm); - -wchar_t * -khm_krb5_get_realm_list(void); - -khm_int32 -khm_krb5_get_identity_config(khm_handle ident, - khm_int32 flags, - khm_handle * ret_csp); - -void -khm_krb5_set_identity_flags(khm_handle identity, - khm_int32 flag_mask, - khm_int32 flag_value); - -khm_int32 -khm_krb5_get_identity_flags(khm_handle identity); - -khm_int32 -khm_krb5_set_identity_params(khm_handle ident, const k5_params * p); - -khm_int32 -khm_krb5_get_identity_params(khm_handle ident, k5_params * p); - -khm_int32 -khm_krb5_get_identity_default_ccache(khm_handle ident, wchar_t * buf, khm_size * pcb); - -khm_int32 -khm_krb5_get_identity_default_ccacheA(khm_handle ident, char * buf, khm_size * pcb); - -/* Utility */ - -wchar_t * -khm_get_realm_from_princ(wchar_t * princ); - -long -khm_krb5_canon_cc_name(wchar_t * wcc_name, - size_t cb_cc_name); - -int -khm_krb5_cc_name_cmp(const wchar_t * cc_name_1, - const wchar_t * cc_name_2); - -int -khm_krb5_parse_boolean(const char *s, khm_boolean * b); - -#endif diff --git a/src/windows/identity/plugins/krb5/krb5identpro.c b/src/windows/identity/plugins/krb5/krb5identpro.c deleted file mode 100644 index 1b1ec403e..000000000 --- a/src/windows/identity/plugins/krb5/krb5identpro.c +++ /dev/null @@ -1,1861 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<krbcred.h> -#include<kherror.h> -#include<khmsgtypes.h> -#include<commctrl.h> -#include<strsafe.h> -#include<krb5.h> -#include<assert.h> - -#define K5_NCID_UN_LABEL (KHUI_CW_ID_MIN + 0) -#define K5_NCID_UN (KHUI_CW_ID_MIN + 1) -#define K5_NCID_REALM_LABEL (KHUI_CW_ID_MIN + 2) -#define K5_NCID_REALM (KHUI_CW_ID_MIN + 3) - -#define NC_UNCHANGE_TIMEOUT 3000 -#define NC_UNCHANGE_TIMER 2 -#define NC_REALMCHANGE_TIMEOUT NC_UNCHANGE_TIMEOUT -#define NC_REALMCHANGE_TIMER 3 - -typedef struct tag_k5_new_cred_data { - HWND hw_username_label; - HWND hw_username; - HWND hw_realm_label; - HWND hw_realm; -} k5_new_cred_data; - -static -void -trim_str(wchar_t * s, khm_size cch) { - wchar_t * c, * last_ws; - - for (c = s; *c && iswspace(*c) && ((khm_size)(c - s)) < cch; c++); - - if (((khm_size)(c - s)) >= cch) - return; - - if (c != s && ((khm_size)(c - s)) < cch) { -#if _MSC_VER >= 1400 && __STDC_WANT_SECURE_LIB__ - wmemmove_s(s, cch, c, cch - ((khm_size)(c - s))); -#else - memmove(s, c, (cch - ((khm_size)(c - s))) * sizeof(wchar_t)); -#endif - } - - last_ws = NULL; - for (c = s; *c && ((khm_size)(c - s)) < cch; c++) { - if (!iswspace(*c)) - last_ws = NULL; - else if (last_ws == NULL) - last_ws = c; - } - - if (last_ws) - *last_ws = L'\0'; -} - -/* Runs in the UI thread */ -int -k5_get_realm_from_nc(khui_new_creds * nc, - wchar_t * buf, - khm_size cch_buf) { - k5_new_cred_data * d; - khm_size s; - - d = (k5_new_cred_data *) nc->ident_aux; - buf[0] = L'\0'; - GetWindowText(d->hw_realm, buf, (int) cch_buf); - trim_str(buf, cch_buf); - - StringCchLength(buf, cch_buf, &s); - - return (int) s; -} - -/* set the primary identity of a new credentials dialog depending on - the selection of the username and realm - - Runs in the UI thread -*/ -static void -set_identity_from_ui(khui_new_creds * nc, - k5_new_cred_data * d) { - wchar_t un[KCDB_IDENT_MAXCCH_NAME]; - wchar_t * realm; - khm_size cch; - khm_size cch_left; - khm_handle ident; - LRESULT idx = CB_ERR; - khm_int32 rv = KHM_ERROR_SUCCESS; - - cch = GetWindowTextLength(d->hw_username); - - /* we already set the max length of the edit control to be this. - shouldn't exceed it unless the edit control is confused. */ - assert(cch < KCDB_IDENT_MAXCCH_NAME - 1); - - GetWindowText(d->hw_username, un, ARRAYLENGTH(un)); - trim_str(un, ARRAYLENGTH(un)); - - realm = khm_get_realm_from_princ(un); - if (realm) /* realm was specified */ - goto _set_ident; - - /* the cch we got from GetWindowTextLength can not be trusted to - be exact. For caveats see MSDN for GetWindowTextLength. */ - StringCchLength(un, KCDB_IDENT_MAXCCH_NAME, &cch); - - if (cch >= KCDB_IDENT_MAXCCH_NAME - 3) { - /* has to allow space for the '@' and at least a single - character realm, and the NULL terminator. */ - rv = KHM_ERROR_TOO_LONG; - goto _set_null_ident; - } - - realm = un + cch; /* now points at terminating NULL */ - cch_left = KCDB_IDENT_MAXCCH_NAME - cch; - - *realm++ = L'@'; - *realm = L'\0'; - cch_left--; - - cch = GetWindowTextLength(d->hw_realm); - if (cch == 0 || cch >= cch_left) { - rv = KHM_ERROR_INVALID_NAME; - goto _set_null_ident; - } - - GetWindowText(d->hw_realm, realm, (int) cch_left); - trim_str(realm, cch_left); - - _set_ident: - if (KHM_FAILED(rv = kcdb_identity_create(un, - KCDB_IDENT_FLAG_CREATE, - &ident))) { - goto _set_null_ident; - } - - khui_cw_set_primary_id(nc, ident); - - kcdb_identity_release(ident); - return; - - _set_null_ident: - { - khui_new_creds_by_type * nct = NULL; - wchar_t cmsg[256]; - - khui_cw_find_type(nc, credtype_id_krb5, &nct); - if (nct && nct->hwnd_panel) { - - switch(rv) { - case KHM_ERROR_TOO_LONG: - LoadString(hResModule, IDS_NCERR_IDENT_TOO_LONG, - cmsg, ARRAYLENGTH(cmsg)); - break; - - case KHM_ERROR_INVALID_NAME: - LoadString(hResModule, IDS_NCERR_IDENT_INVALID, - cmsg, ARRAYLENGTH(cmsg)); - break; - - default: - LoadString(hResModule, IDS_NCERR_IDENT_UNKNOWN, - cmsg, ARRAYLENGTH(cmsg)); - } - - SendMessage(nct->hwnd_panel, - KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, K5_SET_CRED_MSG), - (LPARAM) cmsg); - } - - khui_cw_set_primary_id(nc, NULL); - } - return; -} - -/* runs in the UI thread */ -static BOOL -update_crossfeed(khui_new_creds * nc, - k5_new_cred_data * d, - int ctrl_id_src) { - wchar_t un[KCDB_IDENT_MAXCCH_NAME]; - wchar_t * un_realm; - wchar_t realm[KCDB_IDENT_MAXCCH_NAME]; - khm_size cch; - khm_size cch_left; - int idx; - - cch = (khm_size) GetWindowTextLength(d->hw_username); -#ifdef DEBUG - assert(cch < KCDB_IDENT_MAXCCH_NAME); -#endif - if (cch == 0) - return FALSE; - - GetWindowText(d->hw_username, - un, - ARRAYLENGTH(un)); - trim_str(un, ARRAYLENGTH(un)); - - un_realm = khm_get_realm_from_princ(un); - - if (un_realm == NULL) { - EnableWindow(d->hw_realm, TRUE); - return FALSE; - } - - if (ctrl_id_src == K5_NCID_UN) { - - idx = (int)SendMessage(d->hw_realm, - CB_FINDSTRINGEXACT, - (WPARAM) -1, - (LPARAM) un_realm); - - if (idx != CB_ERR) { - wchar_t srealm[KCDB_IDENT_MAXCCH_NAME]; - - cch = SendMessage(d->hw_realm, - CB_GETLBTEXTLEN, - (WPARAM) idx, - 0); - -#ifdef DEBUG - assert(cch < ARRAYLENGTH(srealm) - 1); -#endif - SendMessage(d->hw_realm, - CB_GETLBTEXT, - (WPARAM) idx, - (LPARAM) srealm); - - if (!_wcsicmp(srealm, un_realm) && wcscmp(srealm, un_realm)) { - /* differ only by case */ - - StringCchCopy(un_realm, ARRAYLENGTH(un) - (un_realm - un), - srealm); - - SetWindowText(d->hw_username, un); - } - } - - SendMessage(d->hw_realm, - CB_SELECTSTRING, - (WPARAM) -1, - (LPARAM) un_realm); - - SetWindowText(d->hw_realm, - un_realm); - - if (GetFocus() == d->hw_realm) { - HWND hw_next = GetNextDlgTabItem(nc->hwnd, d->hw_realm, - FALSE); - if (hw_next) - SetFocus(hw_next); - } - - EnableWindow(d->hw_realm, FALSE); - - return TRUE; - } - /* else... */ - - cch_left = KCDB_IDENT_MAXCCH_NAME - (un_realm - un); - - cch = (khm_size) GetWindowTextLength(d->hw_realm); - -#ifdef DEBUG - assert(cch < KCDB_IDENT_MAXCCH_NAME); -#endif - if (cch == 0) - return FALSE; - - GetWindowText(d->hw_realm, realm, - ARRAYLENGTH(realm)); - trim_str(realm, ARRAYLENGTH(realm)); - - idx = (int)SendMessage(d->hw_realm, - CB_FINDSTRINGEXACT, - (WPARAM) -1, - (LPARAM) realm); - - if (idx != CB_ERR) { - wchar_t srealm[KCDB_IDENT_MAXCCH_NAME]; - - SendMessage(d->hw_realm, - CB_GETLBTEXT, - (WPARAM) idx, - (LPARAM) srealm); - - if (!_wcsicmp(srealm, realm) && wcscmp(srealm, realm)) { - StringCbCopy(realm, sizeof(realm), srealm); - - SetWindowText(d->hw_realm, srealm); - } - } - - StringCchCopy(un_realm, cch_left, realm); - - SendMessage(d->hw_username, - CB_SELECTSTRING, - (WPARAM) -1, - (LPARAM) un); - - SetWindowText(d->hw_username, un); - - return TRUE; -} - -/* Handle window messages for the identity specifiers - - runs in UI thread */ -static LRESULT -handle_wnd_msg(khui_new_creds * nc, - HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - k5_new_cred_data * d; - - d = (k5_new_cred_data *) nc->ident_aux; - - switch(uMsg) { - case WM_COMMAND: - switch(wParam) { - case MAKEWPARAM(K5_NCID_UN, CBN_EDITCHANGE): - /* the username has changed. Instead of handling this - for every keystroke, set a timer that elapses some - time afterwards and then handle the event. */ - SetTimer(hwnd, NC_UNCHANGE_TIMER, - NC_UNCHANGE_TIMEOUT, NULL); - return TRUE; - - case MAKEWPARAM(K5_NCID_UN, CBN_KILLFOCUS): - case MAKEWPARAM(K5_NCID_UN, CBN_CLOSEUP): - KillTimer(hwnd, NC_UNCHANGE_TIMER); - - update_crossfeed(nc,d,K5_NCID_UN); - set_identity_from_ui(nc,d); - return TRUE; - - case MAKEWPARAM(K5_NCID_REALM,CBN_EDITCHANGE): - SetTimer(hwnd, NC_REALMCHANGE_TIMER, - NC_REALMCHANGE_TIMEOUT, NULL); - return TRUE; - - case MAKEWPARAM(K5_NCID_REALM,CBN_KILLFOCUS): - case MAKEWPARAM(K5_NCID_REALM,CBN_CLOSEUP): - KillTimer(hwnd, NC_REALMCHANGE_TIMER); - - update_crossfeed(nc,d,K5_NCID_REALM); - set_identity_from_ui(nc, d); - return TRUE; - } - break; - - case WM_TIMER: - if(wParam == NC_UNCHANGE_TIMER) { - KillTimer(hwnd, NC_UNCHANGE_TIMER); - - update_crossfeed(nc, d, K5_NCID_UN); - set_identity_from_ui(nc,d); - return TRUE; - } else if (wParam == NC_REALMCHANGE_TIMER) { - KillTimer(hwnd, NC_REALMCHANGE_TIMER); - - update_crossfeed(nc, d, K5_NCID_REALM); - set_identity_from_ui(nc, d); - return TRUE; - } - break; - } - return FALSE; -} - -/* UI Callback - - runs in UI thread */ -static LRESULT KHMAPI -ui_cb(khui_new_creds * nc, - UINT cmd, - HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - - k5_new_cred_data * d; - - d = (k5_new_cred_data *) nc->ident_aux; - - switch(cmd) { - case WMNC_IDENT_INIT: - { - wchar_t defident[KCDB_IDENT_MAXCCH_NAME]; - wchar_t wbuf[1024]; - wchar_t * ms = NULL; - wchar_t * t; - wchar_t * defrealm = NULL; - LRESULT lr; - khm_size cb_ms; - khm_size cb; - HWND hw_parent; - khm_int32 rv; - khm_handle hident; - - hw_parent = (HWND) lParam; - defident[0] = L'\0'; - -#ifdef DEBUG - assert(d == NULL); - assert(hw_parent != NULL); -#endif - - d = PMALLOC(sizeof(*d)); - assert(d); - ZeroMemory(d, sizeof(*d)); - - khui_cw_lock_nc(nc); - nc->ident_aux = (LPARAM) d; - khui_cw_unlock_nc(nc); - - LoadString(hResModule, IDS_NC_USERNAME, - wbuf, ARRAYLENGTH(wbuf)); - - d->hw_username_label = CreateWindow - (L"STATIC", - wbuf, - SS_SIMPLE | WS_CHILD | WS_VISIBLE, - 0, 0, 100, 100, /* bogus values */ - hw_parent, - (HMENU) K5_NCID_UN_LABEL, - hInstance, - NULL); - assert(d->hw_username_label != NULL); - - d->hw_username = CreateWindow - (L"COMBOBOX", - L"", - CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | - WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, - 0, 0, 100, 100, /* bogus values */ - hw_parent, - (HMENU) K5_NCID_UN, - hInstance, - NULL); - assert(d->hw_username != NULL); - - SendMessage(d->hw_username, - CB_LIMITTEXT, - (WPARAM)(KCDB_IDENT_MAXCCH_NAME - 1), - 0); - - SendMessage(d->hw_username, - CB_SETEXTENDEDUI, - (WPARAM) TRUE, - 0); - - khui_cw_add_control_row(nc, - d->hw_username_label, - d->hw_username, - KHUI_CTRLSIZE_SMALL); - - LoadString(hResModule, IDS_NC_REALM, - wbuf, ARRAYLENGTH(wbuf)); - - d->hw_realm_label = CreateWindow - (L"STATIC", - wbuf, - SS_SIMPLE | WS_CHILD | WS_VISIBLE, - 0, 0, 100, 100, /* bogus */ - hw_parent, - (HMENU) K5_NCID_REALM_LABEL, - hInstance, - NULL); - assert(d->hw_realm_label != NULL); - - d->hw_realm = CreateWindow - (L"COMBOBOX", - L"", - CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | - WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, - 0, 0, 100, 100, /* bogus */ - hw_parent, - (HMENU) K5_NCID_REALM, - hInstance, - NULL); - assert(d->hw_realm != NULL); - - SendMessage(d->hw_realm, - CB_LIMITTEXT, - (WPARAM) (KCDB_IDENT_MAXCCH_NAME - 1), - 0); - - SendMessage(d->hw_realm, - CB_SETEXTENDEDUI, - (WPARAM) TRUE, - 0); - - khui_cw_add_control_row(nc, - d->hw_realm_label, - d->hw_realm, - KHUI_CTRLSIZE_SMALL); - - /* add the LRU realms and principals to the dropdown - lists */ - rv = khc_read_multi_string(csp_params, - L"LRUPrincipals", - NULL, - &cb_ms); - - if (rv != KHM_ERROR_TOO_LONG || cb_ms <= sizeof(wchar_t) * 2) - goto _add_lru_realms; - - ms = PMALLOC(cb_ms); - assert(ms != NULL); - - cb = cb_ms; - rv = khc_read_multi_string(csp_params, - L"LRUPrincipals", - ms, - &cb); - - assert(KHM_SUCCEEDED(rv)); - - /* the first of these is considered the default identity - if no other default is known */ - StringCbCopy(defident, sizeof(defident), ms); - - t = ms; - while(t && *t) { - SendMessage(d->hw_username, - CB_ADDSTRING, - 0, - (LPARAM) t); - - t = multi_string_next(t); - } - - _add_lru_realms: - /* add the default realm first */ - defrealm = khm_krb5_get_default_realm(); - if (defrealm) { - SendMessage(d->hw_realm, - CB_ADDSTRING, - 0, - (LPARAM) defrealm); - } - - rv = khc_read_multi_string(csp_params, - L"LRURealms", - NULL, - &cb); - - if (rv != KHM_ERROR_TOO_LONG) - goto _done_adding_lru; - - if (ms != NULL) { - if (cb_ms < cb) { - PFREE(ms); - ms = PMALLOC(cb); - assert(ms); - cb_ms = cb; - } - } else { - ms = PMALLOC(cb); - cb_ms = cb; - } - - rv = khc_read_multi_string(csp_params, - L"LRURealms", - ms, - &cb); - - assert(KHM_SUCCEEDED(rv)); - - for (t = ms; t && *t; t = multi_string_next(t)) { - lr = SendMessage(d->hw_realm, - CB_FINDSTRINGEXACT, - (WPARAM) -1, - (LPARAM) t); - if (lr != CB_ERR) - continue; - - SendMessage(d->hw_realm, - CB_ADDSTRING, - 0, - (LPARAM) t); - } - _done_adding_lru: - - { - khm_int32 inc_realms = 0; - - if (KHM_FAILED(khc_read_int32(csp_params, - L"UseFullRealmList", - &inc_realms)) || - !inc_realms) - goto _done_adding_all_realms; - } - - if(ms) - PFREE(ms); - - ms = khm_krb5_get_realm_list(); - if(ms) { - for (t = ms; t && *t; t = multi_string_next(t)) { - lr = SendMessage(d->hw_realm, - CB_FINDSTRINGEXACT, - (WPARAM) -1, - (LPARAM) t); - if (lr != CB_ERR) - continue; - - SendMessage(d->hw_realm, - CB_ADDSTRING, - 0, - (LPARAM) t); - } - } - _done_adding_all_realms: - - /* set the current selection of the realms list */ - if (defrealm) { - SendMessage(d->hw_realm, - CB_SELECTSTRING, - (WPARAM) -1, - (LPARAM) defrealm); - } else { - SendMessage(d->hw_realm, - CB_SETCURSEL, - (WPARAM) 0, - (LPARAM) 0); - } - - if (defrealm) - PFREE(defrealm); - - if (ms) - PFREE(ms); - - /* now see about that default identity */ - if (nc->ctx.identity) { - cb = sizeof(defident); - kcdb_identity_get_name(nc->ctx.identity, - defident, - &cb); - } - - if (defident[0] == L'\0' && - KHM_SUCCEEDED(kcdb_identity_get_default(&hident))) { - cb = sizeof(defident); - kcdb_identity_get_name(hident, defident, &cb); - kcdb_identity_release(hident); - } - - if (defident[0] == L'\0') { - DWORD dw; - - dw = ARRAYLENGTH(defident); - GetUserName(defident, &dw); - } - - t = khm_get_realm_from_princ(defident); - if (t) { - /* there is a realm */ - assert(t != defident); - *--t = L'\0'; - t++; - - SendMessage(d->hw_realm, - CB_SELECTSTRING, - (WPARAM) -1, - (LPARAM) t); - - SendMessage(d->hw_realm, - WM_SETTEXT, - 0, - (LPARAM) t); - } - - if (defident[0] != L'\0') { - /* there is a username */ - SendMessage(d->hw_username, - CB_SELECTSTRING, - (WPARAM) -1, - (LPARAM) defident); - - SendMessage(d->hw_username, - WM_SETTEXT, - 0, - (LPARAM) defident); - } - - set_identity_from_ui(nc, d); - } - return TRUE; - - case WMNC_IDENT_WMSG: - return handle_wnd_msg(nc, hwnd, uMsg, wParam, lParam); - - case WMNC_IDENT_PREPROCESS: - { -#ifdef DEBUG - assert(d != NULL); -#endif - if (d) { - set_identity_from_ui(nc, d); - } - } - return TRUE; - - case WMNC_IDENT_EXIT: - { -#ifdef DEBUG - assert(d != NULL); -#endif - khui_cw_lock_nc(nc); - nc->ident_aux = 0; - khui_cw_unlock_nc(nc); - - /* since we created all the windows as child windows of - the new creds window, they will be destroyed when that - window is destroyed. */ - PFREE(d); - } - return TRUE; - } - return FALSE; -} - -static khm_int32 -k5_ident_validate_name(khm_int32 msg_type, - khm_int32 msg_subtype, - khm_ui_4 uparam, - void * vparam) { - krb5_principal princ = NULL; - char princ_name[KCDB_IDENT_MAXCCH_NAME]; - kcdb_ident_name_xfer * nx; - krb5_error_code code; - wchar_t * atsign; - - nx = (kcdb_ident_name_xfer *) vparam; - - if(UnicodeStrToAnsi(princ_name, sizeof(princ_name), - nx->name_src) == 0) { - nx->result = KHM_ERROR_INVALID_NAME; - return KHM_ERROR_SUCCESS; - } - - assert(k5_identpro_ctx != NULL); - - code = pkrb5_parse_name(k5_identpro_ctx, - princ_name, - &princ); - - if (code) { - nx->result = KHM_ERROR_INVALID_NAME; - return KHM_ERROR_SUCCESS; - } - - if (princ != NULL) - pkrb5_free_principal(k5_identpro_ctx, - princ); - - /* krb5_parse_name() accepts principal names with no realm or an - empty realm. We don't. */ - atsign = wcschr(nx->name_src, L'@'); - if (atsign == NULL || atsign[1] == L'\0') { - nx->result = KHM_ERROR_INVALID_NAME; - } else { - nx->result = KHM_ERROR_SUCCESS; - } - - return KHM_ERROR_SUCCESS; -} - -static void -k5_update_last_default_identity(khm_handle ident) { - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - khm_size cb; - - cb = sizeof(idname); - if (KHM_FAILED(kcdb_identity_get_name(ident, idname, &cb))) - return; - - assert(csp_params); - - khc_write_string(csp_params, L"LastDefaultIdent", idname); -} - -static khm_int32 -k5_ident_set_default_int(khm_handle def_ident) { - wchar_t id_ccname[KRB5_MAXCCH_CCNAME]; - khm_size cb; - DWORD dw; - LONG l; - HKEY hk_ccname; - DWORD dwType; - DWORD dwSize; - wchar_t reg_ccname[KRB5_MAXCCH_CCNAME]; - -#ifdef DEBUG - assert(def_ident != NULL); -#endif - - cb = sizeof(id_ccname); - if (KHM_FAILED(kcdb_identity_get_attr(def_ident, attr_id_krb5_ccname, NULL, - id_ccname, &cb))) { - _reportf(L"The specified identity does not have the Krb5CCName property"); - - cb = sizeof(id_ccname); - if (KHM_FAILED(khm_krb5_get_identity_default_ccache(def_ident, id_ccname, &cb))) { - return KHM_ERROR_INVALID_PARAM; - } - } - - _reportf(L"Found Krb5CCName property : %s", id_ccname); - - StringCbLength(id_ccname, sizeof(id_ccname), &cb); - cb += sizeof(wchar_t); - - _reportf(L"Setting default CC name in the registry"); - - l = RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\MIT\\kerberos5", 0, - KEY_READ | KEY_WRITE, &hk_ccname); - - if (l != ERROR_SUCCESS) - l = RegCreateKeyEx(HKEY_CURRENT_USER, L"Software\\MIT\\kerberos5", 0, - NULL, REG_OPTION_NON_VOLATILE, KEY_READ | KEY_WRITE, - NULL, &hk_ccname, &dw); - - if (l != ERROR_SUCCESS) { - _reportf(L"Can't create registry key : %d", l); - _end_task(); - return KHM_ERROR_UNKNOWN; - } - - dwSize = sizeof(reg_ccname); - - l = RegQueryValueEx(hk_ccname, L"ccname", NULL, &dwType, (LPBYTE) reg_ccname, - &dwSize); - - if (l != ERROR_SUCCESS || - dwType != REG_SZ || - khm_krb5_cc_name_cmp(reg_ccname, id_ccname)) { - - /* we have to write the new value in */ - - l = RegSetValueEx(hk_ccname, L"ccname", 0, REG_SZ, (BYTE *) id_ccname, - (DWORD) cb); - } - - RegCloseKey(hk_ccname); - - if (l == ERROR_SUCCESS) { - _reportf(L"Successfully set the default ccache"); - k5_update_last_default_identity(def_ident); - return KHM_ERROR_SUCCESS; - } else { - _reportf(L"Can't set the registry value : %d", l); - return KHM_ERROR_UNKNOWN; - } -} - -static khm_int32 -k5_ident_set_default(khm_int32 msg_type, - khm_int32 msg_subtype, - khm_ui_4 uparam, - void * vparam) { - - /* - Currently, setting the default identity simply sets the - "ccname" registry value at "Software\MIT\kerberos5". - */ - - if (uparam) { - /* an identity is being made default */ - khm_handle def_ident = (khm_handle) vparam; - khm_int32 rv; - -#ifdef DEBUG - assert(def_ident != NULL); -#endif - - { - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - khm_size cb; - - cb = sizeof(idname); - kcdb_identity_get_name(def_ident, idname, &cb); - - _begin_task(0); - _report_cs1(KHERR_DEBUG_1, L"Setting default identity [%1!s!]", _cstr(idname)); - _describe(); - } - - rv = k5_ident_set_default_int(def_ident); - - _end_task(); - - return rv; - - } else { - /* the default identity is being forgotten */ - - /* we don't really do anything about this case */ - } - - return KHM_ERROR_SUCCESS; -} - -static khm_int32 -k5_ident_get_ui_cb(khm_int32 msg_type, - khm_int32 msg_subtype, - khm_ui_4 uparam, - void * vparam) { - khui_ident_new_creds_cb * cb; - - cb = (khui_ident_new_creds_cb *) vparam; - - *cb = ui_cb; - - return KHM_ERROR_SUCCESS; -} - -static khm_int32 -k5_ident_notify_create(khm_int32 msg_type, - khm_int32 msg_subtype, - khm_ui_4 uparam, - void * vparam) { - - /* a new identity has been created. What we want to do at - this point is to check if the identity belongs to krb5 - and to see if it is the default. */ - - krb5_ccache cc = NULL; - krb5_error_code code; - krb5_principal princ = NULL; - char * princ_nameA = NULL; - wchar_t princ_nameW[KCDB_IDENT_MAXCCH_NAME]; - wchar_t id_nameW[KCDB_IDENT_MAXCCH_NAME]; - khm_size cb; - khm_handle ident; - - /* if there is a default identity already, we assume we don't need - to check this one. */ - - khm_handle def_ident; - - if (KHM_SUCCEEDED(kcdb_identity_get_default(&def_ident))) { - kcdb_identity_release(def_ident); - - return KHM_ERROR_SUCCESS; - } - - ident = (khm_handle) vparam; - - assert(k5_identpro_ctx != NULL); - - code = pkrb5_cc_default(k5_identpro_ctx, &cc); - if (code) - goto _nc_cleanup; - - code = pkrb5_cc_get_principal(k5_identpro_ctx, - cc, - &princ); - if (code) - goto _nc_cleanup; - - code = pkrb5_unparse_name(k5_identpro_ctx, - princ, - &princ_nameA); - if (code) - goto _nc_cleanup; - - AnsiStrToUnicode(princ_nameW, - sizeof(princ_nameW), - princ_nameA); - - cb = sizeof(id_nameW); - - if (KHM_FAILED(kcdb_identity_get_name(ident, - id_nameW, - &cb))) - goto _nc_cleanup; - - if (!wcscmp(id_nameW, princ_nameW)) { - kcdb_identity_set_default_int(ident); - } - - _nc_cleanup: - if (princ_nameA) - pkrb5_free_unparsed_name(k5_identpro_ctx, - princ_nameA); - if (princ) - pkrb5_free_principal(k5_identpro_ctx, - princ); - if (cc) - pkrb5_cc_close(k5_identpro_ctx, cc); - - return KHM_ERROR_SUCCESS; -} - -struct k5_ident_update_data { - khm_handle identity; - - FILETIME ft_expire; /* expiration */ - FILETIME ft_issue; /* issue */ - FILETIME ft_rexpire; /* renew expiration */ - wchar_t ccname[KRB5_MAXCCH_CCNAME]; - khm_int32 k5_flags; -}; - -/* The logic here has to reflect the logic in khm_krb5_list_tickets(). - We use this to handle an identity update request because some other - plug-in or maybe NetIDMgr itself is about to do something - important(tm) with the identity and needs to make sure that the - properties of the identity are up-to-date. */ -static khm_int32 KHMAPI -k5_ident_update_apply_proc(khm_handle cred, - void * rock) { - struct k5_ident_update_data * d = (struct k5_ident_update_data *) rock; - khm_handle ident = NULL; - khm_int32 t; - khm_int32 flags; - FILETIME t_cexpire; - FILETIME t_rexpire; - khm_size cb; - khm_int32 rv = KHM_ERROR_SUCCESS; - - if (KHM_FAILED(kcdb_cred_get_type(cred, &t)) || - t != credtype_id_krb5 || - KHM_FAILED(kcdb_cred_get_identity(cred, &ident))) - - return KHM_ERROR_SUCCESS; - - if (!kcdb_identity_is_equal(ident,d->identity)) - - goto _cleanup; - - if (KHM_FAILED(kcdb_cred_get_flags(cred, &flags))) - - flags = 0; - - if (flags & KCDB_CRED_FLAG_INITIAL) { - cb = sizeof(t_cexpire); - if (KHM_SUCCEEDED(kcdb_cred_get_attr(cred, - KCDB_ATTR_EXPIRE, - NULL, - &t_cexpire, - &cb))) { - if ((d->ft_expire.dwLowDateTime == 0 && - d->ft_expire.dwHighDateTime == 0) || - CompareFileTime(&t_cexpire, &d->ft_expire) > 0) { - goto update_identity; - } - } - } - - goto _cleanup; - - update_identity: - - d->ft_expire = t_cexpire; - - cb = sizeof(d->ccname); - if (KHM_FAILED(kcdb_cred_get_attr(cred, KCDB_ATTR_LOCATION, NULL, d->ccname, &cb))) { - d->ccname[0] = L'\0'; - } - - cb = sizeof(d->k5_flags); - if (KHM_FAILED(kcdb_cred_get_attr(cred, attr_id_krb5_flags, NULL, - &d->k5_flags, &cb))) { - d->k5_flags = 0; - } - - cb = sizeof(d->ft_issue); - if (KHM_FAILED(kcdb_cred_get_attr(cred, KCDB_ATTR_ISSUE, NULL, &d->ft_issue, &cb))) { - ZeroMemory(&d->ft_issue, sizeof(d->ft_issue)); - } - - cb = sizeof(t_rexpire); - if ((d->k5_flags & TKT_FLG_RENEWABLE) && - KHM_SUCCEEDED(kcdb_cred_get_attr(cred, - KCDB_ATTR_RENEW_EXPIRE, - NULL, - &t_rexpire, - &cb))) { - d->ft_rexpire = t_rexpire; - } else { - ZeroMemory(&d->ft_rexpire, sizeof(d->ft_rexpire)); - } - - _cleanup: - if (ident) - kcdb_identity_release(ident); - - return rv; -} - -static khm_int32 -k5_ident_update(khm_int32 msg_type, - khm_int32 msg_subtype, - khm_ui_4 uparam, - void * vparam) { - -#if 0 - struct k5_ident_update_data d; -#endif - khm_handle ident; - khm_handle tident; - krb5_ccache cc = NULL; - char * ccname; - krb5_error_code code; - khm_size cb; - wchar_t wid_ccname[MAX_PATH]; - wchar_t w_ccname[MAX_PATH]; - - ident = (khm_handle) vparam; - if (ident == NULL) - return KHM_ERROR_SUCCESS; - -#if 0 - /* we are going to skip doing this here since - khm_krb5_list_tickets() performs this function for us each time - we enumerate tickets. Since it also gets run each time our - list of tickets changes and since we are basing this operation - on existing tickets, we are unlikely to find anything new - here. */ - ZeroMemory(&d, sizeof(d)); - d.identity = ident; - - kcdb_credset_apply(NULL, - k5_ident_update_apply_proc, - (void *) &d); - - if (d.ft_expire.dwLowDateTime != 0 || - d.ft_expire.dwHighDateTime != 0) { - - /* we found a TGT */ - - kcdb_identity_set_attr(ident, KCDB_ATTR_EXPIRE, - &d.ft_expire, sizeof(d.ft_expire)); - if (d.ft_issue.dwLowDateTime != 0 || - d.ft_issue.dwHighDateTime != 0) - kcdb_identity_set_attr(ident, KCDB_ATTR_ISSUE, - &d.ft_issue, sizeof(d.ft_issue)); - else - kcdb_identity_set_attr(ident, KCDB_ATTR_ISSUE, NULL, 0); - - if (d.ft_rexpire.dwLowDateTime != 0 || - d.ft_rexpire.dwHighDateTime != 0) - kcdb_identity_set_attr(ident, KCDB_ATTR_RENEW_EXPIRE, - &d.ft_rexpire, sizeof(d.ft_rexpire)); - else - kcdb_identity_set_attr(ident, KCDB_ATTR_RENEW_EXPIRE, NULL, 0); - - kcdb_identity_set_attr(ident, attr_id_krb5_flags, - &d.k5_flags, sizeof(d.k5_flags)); - - if (d.ccname[0]) - kcdb_identity_set_attr(ident, attr_id_krb5_ccname, - d.ccname, KCDB_CBSIZE_AUTO); - else - kcdb_identity_set_attr(ident, attr_id_krb5_ccname, NULL, 0); - - } else { - /* Clear out the attributes. We don't have any information - about this identity */ - kcdb_identity_set_attr(ident, KCDB_ATTR_EXPIRE, NULL, 0); - kcdb_identity_set_attr(ident, KCDB_ATTR_ISSUE, NULL, 0); - kcdb_identity_set_attr(ident, KCDB_ATTR_RENEW_EXPIRE, NULL, 0); - kcdb_identity_set_attr(ident, attr_id_krb5_flags, NULL, 0); - kcdb_identity_set_attr(ident, attr_id_krb5_ccname, NULL, 0); - } -#endif - - if (KHM_SUCCEEDED(kcdb_identity_get_default(&tident))) { - kcdb_identity_release(tident); - goto _iu_cleanup; - } - - cb = sizeof(wid_ccname); - if (KHM_FAILED(kcdb_identity_get_attr(ident, - attr_id_krb5_ccname, - NULL, - wid_ccname, - &cb))) - goto _iu_cleanup; - - if(k5_identpro_ctx == NULL) - goto _iu_cleanup; - - code = pkrb5_cc_default(k5_identpro_ctx, &cc); - if (code) - goto _iu_cleanup; - - ccname = pkrb5_cc_get_name(k5_identpro_ctx, cc); - if (ccname == NULL) - goto _iu_cleanup; - - AnsiStrToUnicode(w_ccname, sizeof(w_ccname), ccname); - - khm_krb5_canon_cc_name(w_ccname, sizeof(w_ccname)); - khm_krb5_canon_cc_name(wid_ccname, sizeof(wid_ccname)); - - if (!_wcsicmp(w_ccname, wid_ccname)) - kcdb_identity_set_default_int(ident); - - _iu_cleanup: - if (cc && k5_identpro_ctx) - pkrb5_cc_close(k5_identpro_ctx, cc); - - return KHM_ERROR_SUCCESS; -} - -static khm_boolean -k5_refresh_default_identity(krb5_context ctx) { - /* just like notify_create, except now we set the default identity - based on what we find in the configuration */ - krb5_ccache cc = NULL; - krb5_error_code code; - krb5_principal princ = NULL; - char * princ_nameA = NULL; - wchar_t princ_nameW[KCDB_IDENT_MAXCCH_NAME]; - char * ccname = NULL; - khm_handle ident = NULL; - khm_boolean found_default = FALSE; - - assert(ctx != NULL); - - _begin_task(0); - _report_cs0(KHERR_DEBUG_1, L"Refreshing default identity"); - _describe(); - - code = pkrb5_cc_default(ctx, &cc); - if (code) { - _reportf(L"Can't open default ccache. code=%d", code); - goto _nc_cleanup; - } - - code = pkrb5_cc_get_principal(ctx, cc, &princ); - if (code) { - /* try to determine the identity from the ccache name */ - ccname = pkrb5_cc_get_name(ctx, cc); - - if (ccname) { - char * namepart = strchr(ccname, ':'); - - _reportf(L"CC name is [%S]", ccname); - - if (namepart == NULL) - namepart = ccname; - else - namepart++; - - _reportf(L"Checking if [%S] is a valid identity name", namepart); - - AnsiStrToUnicode(princ_nameW, sizeof(princ_nameW), namepart); - if (kcdb_identity_is_valid_name(princ_nameW)) { - kcdb_identity_create(princ_nameW, KCDB_IDENT_FLAG_CREATE, &ident); - if (ident) { - _reportf(L"Setting [%S] as the default identity", namepart); - kcdb_identity_set_default_int(ident); - found_default = TRUE; - } - } - } else { - _reportf(L"Can't determine ccache name"); - } - - goto _nc_cleanup; - } - - code = pkrb5_unparse_name(ctx, princ, &princ_nameA); - if (code) - goto _nc_cleanup; - - AnsiStrToUnicode(princ_nameW, sizeof(princ_nameW), princ_nameA); - - _reportf(L"Found principal [%s]", princ_nameW); - - if (KHM_FAILED(kcdb_identity_create(princ_nameW, KCDB_IDENT_FLAG_CREATE, &ident))) { - _reportf(L"Failed to create identity"); - goto _nc_cleanup; - } - - _reportf(L"Setting default identity to [%s]", princ_nameW); - kcdb_identity_set_default_int(ident); - - found_default = TRUE; - - _nc_cleanup: - - _end_task(); - - if (princ_nameA) - pkrb5_free_unparsed_name(ctx, princ_nameA); - - if (princ) - pkrb5_free_principal(ctx, princ); - - if (cc) - pkrb5_cc_close(ctx, cc); - - if (ident) - kcdb_identity_release(ident); - - return found_default; -} - -static khm_int32 -k5_ident_init(khm_int32 msg_type, - khm_int32 msg_subtype, - khm_ui_4 uparam, - void * vparam) { - - khm_boolean found_default; - khm_handle ident; - - found_default = k5_refresh_default_identity(k5_identpro_ctx); - - if (!found_default) { - wchar_t widname[KCDB_IDENT_MAXCCH_NAME]; - khm_size cb; - - cb = sizeof(widname); - - assert(csp_params); - - if (KHM_SUCCEEDED(khc_read_string(csp_params, L"LastDefaultIdent", - widname, &cb))) { - ident = NULL; - kcdb_identity_create(widname, KCDB_IDENT_FLAG_CREATE, &ident); - if (ident) { - kcdb_identity_set_default_int(ident); - kcdb_identity_release(ident); - - found_default = TRUE; - } - } - } - - if (!found_default) { - - /* There was no default ccache and we don't have a - "LastDefaultIdent" value. Next we see if there are any - identities that have credentials which have a Krb5CCName - property (i.e. an identity that has a Kerberos 5 TGT), and - make it the default. - - Note that since the Krb5Ident plug-in has a dependency on - Krb5Cred, by the time this code runs, we already have a - listing of Kerberos 5 tickets and identities. */ - - wchar_t * idlist = NULL; - wchar_t * thisid; - khm_size cb = 0; - khm_size n_idents = 0; - khm_int32 rv; - wchar_t ccname[KRB5_MAXCCH_CCNAME]; - FILETIME ft_expire; - FILETIME ft_now; - FILETIME ft_threshold; - BOOL match_all = FALSE; - - rv = kcdb_identity_enum(0, 0, NULL, &cb, &n_idents); - - TimetToFileTimeInterval(5 * 60, &ft_threshold); - GetSystemTimeAsFileTime(&ft_now); - ft_now = FtAdd(&ft_now, &ft_threshold); - - while (rv == KHM_ERROR_TOO_LONG && n_idents > 0) { - if (idlist) { - PFREE(idlist); - idlist = NULL; - } - - idlist = PMALLOC(cb); - - if (idlist == NULL) - break; - - rv = kcdb_identity_enum(0, 0, idlist, &cb, &n_idents); - } - - if (KHM_SUCCEEDED(rv)) { - - /* first we try to find an identity that has a valid TGT. - If that fails, then we try to find an identity with - *any* TGT. */ - - try_again: - - for (thisid = idlist; - thisid && *thisid && !found_default; - thisid = multi_string_next(thisid)) { - - if (KHM_SUCCEEDED(kcdb_identity_create(thisid, 0, &ident))) { - khm_size cb_ft = sizeof(FILETIME); - cb = sizeof(ccname); - - if (KHM_SUCCEEDED(kcdb_identity_get_attr(ident, attr_id_krb5_ccname, - NULL, ccname, &cb)) && - (match_all || - (KHM_SUCCEEDED(kcdb_identity_get_attr(ident, KCDB_ATTR_EXPIRE, - NULL, &ft_expire, &cb_ft)) && - CompareFileTime(&ft_expire, &ft_now) > 0))) { - - /* found one */ - k5_ident_set_default_int(ident); - kcdb_identity_set_default_int(ident); - found_default = TRUE; - - } - - kcdb_identity_release(ident); - ident = NULL; - } - } - - if (!found_default && !match_all) { - match_all = TRUE; - goto try_again; - } - } - - if (idlist) { - PFREE(idlist); - idlist = NULL; - } - } - - return KHM_ERROR_SUCCESS; -} - -static khm_int32 -k5_ident_exit(khm_int32 msg_type, - khm_int32 msg_subtype, - khm_ui_4 uparam, - void * vparam) { - /* don't really do anything */ - return KHM_ERROR_SUCCESS; -} - -/* forward dcl */ -khm_int32 KHMAPI -k5_ident_name_comp_func(const void * dl, khm_size cb_dl, - const void * dr, khm_size cb_dr); - -static khm_int32 -k5_ident_compare_name(khm_int32 msg_type, - khm_int32 msg_subtype, - khm_ui_4 uparam, - void * vparam) { - kcdb_ident_name_xfer *px; - - px = (kcdb_ident_name_xfer *) vparam; - - /* note that k5_ident_name_comp_func() ignores the size - specifiers. So we can just pass in 0's. */ - px->result = k5_ident_name_comp_func(px->name_src, 0, - px->name_alt, 0); - - return KHM_ERROR_SUCCESS; -} - -#if 0 -/* copy and paste template for ident provider messages */ -static khm_int32 -k5_ident_(khm_int32 msg_type, - khm_int32 msg_subtype, - khm_ui_4 uparam, - void * vparam) { -} -#endif - -khm_int32 KHMAPI -k5_msg_ident(khm_int32 msg_type, - khm_int32 msg_subtype, - khm_ui_4 uparam, - void * vparam) -{ - switch(msg_subtype) { - case KMSG_IDENT_INIT: - return k5_ident_init(msg_type, - msg_subtype, - uparam, - vparam); - - case KMSG_IDENT_EXIT: - return k5_ident_exit(msg_type, - msg_subtype, - uparam, - vparam); - - case KMSG_IDENT_VALIDATE_NAME: - return k5_ident_validate_name(msg_type, - msg_subtype, - uparam, - vparam); - - case KMSG_IDENT_VALIDATE_IDENTITY: - /* TODO: handle KMSG_IDENT_VALIDATE_IDENTITY */ - break; - - case KMSG_IDENT_CANON_NAME: - /* TODO: handle KMSG_IDENT_CANON_NAME */ - break; - - case KMSG_IDENT_COMPARE_NAME: - return k5_ident_compare_name(msg_type, - msg_subtype, - uparam, - vparam); - - case KMSG_IDENT_SET_DEFAULT: - return k5_ident_set_default(msg_type, - msg_subtype, - uparam, - vparam); - - case KMSG_IDENT_SET_SEARCHABLE: - /* TODO: handle KMSG_IDENT_SET_SEARCHABLE */ - break; - - case KMSG_IDENT_GET_INFO: - /* TODO: handle KMSG_IDENT_GET_INFO */ - break; - - case KMSG_IDENT_UPDATE: - return k5_ident_update(msg_type, - msg_subtype, - uparam, - vparam); - - case KMSG_IDENT_ENUM_KNOWN: - /* TODO: handle KMSG_IDENT_ENUM_KNOWN */ - break; - - case KMSG_IDENT_GET_UI_CALLBACK: - return k5_ident_get_ui_cb(msg_type, - msg_subtype, - uparam, - vparam); - - case KMSG_IDENT_NOTIFY_CREATE: - return k5_ident_notify_create(msg_type, - msg_subtype, - uparam, - vparam); - } - - return KHM_ERROR_SUCCESS; -} - -/* note that we are ignoring the size specifiers. We can do that - because we are guaranteed that dl and dr point to NULL terminated - unicode strings when used with credential data buffers. We also - use the fact that we are ignoring the size specifiers when we call - this function from k5_ident_compare_name() to avoid calculating the - length of the string. */ -khm_int32 KHMAPI -k5_ident_name_comp_func(const void * dl, khm_size cb_dl, - const void * dr, khm_size cb_dr) { - wchar_t * idl = (wchar_t *) dl; - wchar_t * idr = (wchar_t *) dr; - wchar_t * rl; - wchar_t * rr; - khm_int32 r; - - rl = khm_get_realm_from_princ(idl); - rr = khm_get_realm_from_princ(idr); - - if (rl == NULL && rr == NULL) - return wcscmp(idl, idr); - else if (rl == NULL) - return 1; - else if (rr == NULL) - return -1; - - r = wcscmp(rl, rr); - if (r == 0) - return wcscmp(idl, idr); - else - return r; -} - - -/* Identity change notification thread */ - -HANDLE h_ccname_exit_event; -HANDLE h_ccname_thread; - -DWORD WINAPI k5_ccname_monitor_thread(LPVOID lpParameter) { - - HKEY hk_ccname; - HANDLE h_notify; - HANDLE h_waits[2]; - - khm_int32 rv = KHM_ERROR_SUCCESS; - DWORD dwType; - DWORD dwSize; - DWORD dwDisp; - wchar_t reg_ccname[KRB5_MAXCCH_CCNAME]; - LONG l; - - PDESCTHREAD(L"Krb5 CCName Monitor", L"Krb5"); - - l = RegOpenKeyEx(HKEY_CURRENT_USER, - L"Software\\MIT\\kerberos5", - 0, - KEY_READ | KEY_WRITE, - &hk_ccname); - - if (l != ERROR_SUCCESS) - l = RegCreateKeyEx(HKEY_CURRENT_USER, - L"Software\\MIT\\kerberos5", - 0, - NULL, - REG_OPTION_NON_VOLATILE, - KEY_READ | KEY_WRITE, - NULL, - &hk_ccname, - &dwDisp); - - if (l != ERROR_SUCCESS) { - rv = KHM_ERROR_UNKNOWN; - goto _exit; - } - - dwSize = sizeof(reg_ccname); - - l = RegQueryValueEx(hk_ccname, - L"ccname", - NULL, - &dwType, - (LPBYTE) reg_ccname, - &dwSize); - - if (l != ERROR_SUCCESS || - dwType != REG_SZ) { - - reg_ccname[0] = L'\0'; - } - - h_notify = CreateEvent(NULL, FALSE, FALSE, L"Local\\Krb5CCNameChangeNotifier"); - - if (h_notify == NULL) - goto _exit_0; - - /* begin wait loop */ - - h_waits[0] = h_ccname_exit_event; - h_waits[1] = h_notify; - - do { - DWORD dwrv; - - l = RegNotifyChangeKeyValue(hk_ccname, FALSE, - REG_NOTIFY_CHANGE_LAST_SET, - h_notify, TRUE); - - if (l != ERROR_SUCCESS) { - rv = KHM_ERROR_UNKNOWN; - break; - } - - dwrv = WaitForMultipleObjects(2, h_waits, FALSE, INFINITE); - - if (dwrv == WAIT_OBJECT_0) { - /* exit! */ - break; - - } else if (dwrv == WAIT_OBJECT_0 + 1) { - /* change notify! */ - wchar_t new_ccname[KRB5_MAXCCH_CCNAME]; - - dwSize = sizeof(new_ccname); - - l = RegQueryValueEx(hk_ccname, - L"ccname", - NULL, - &dwType, - (LPBYTE) new_ccname, - &dwSize); - - if (l != ERROR_SUCCESS || - dwType != REG_SZ) { - new_ccname[0] = L'\0'; - } - - if (_wcsicmp(new_ccname, reg_ccname)) { - krb5_context ctx = NULL; - - l = pkrb5_init_context(&ctx); - if (l == 0 && ctx != NULL) { - k5_refresh_default_identity(ctx); - StringCbCopy(reg_ccname, sizeof(reg_ccname), new_ccname); - } - - if (ctx) - pkrb5_free_context(ctx); - } - - } else { - /* something went wrong */ - rv = KHM_ERROR_UNKNOWN; - break; - } - - } while (TRUE); - - CloseHandle(h_notify); - - _exit_0: - - RegCloseKey(hk_ccname); - - _exit: - ExitThread(rv); -} - -khm_int32 -k5_msg_system_idpro(khm_int32 msg_type, khm_int32 msg_subtype, - khm_ui_4 uparam, void * vparam) { - - switch(msg_subtype) { - case KMSG_SYSTEM_INIT: - { - - pkrb5_init_context(&k5_identpro_ctx); - kcdb_identity_set_type(credtype_id_krb5); - - if (KHM_FAILED(kcdb_type_get_id(TYPENAME_KRB5_PRINC, - &type_id_krb5_princ))) { - kcdb_type dt; - kcdb_type * pstr; - - kcdb_type_get_info(KCDB_TYPE_STRING, &pstr); - - ZeroMemory(&dt, sizeof(dt)); - dt.name = TYPENAME_KRB5_PRINC; - dt.id = KCDB_TYPE_INVALID; - dt.flags = KCDB_TYPE_FLAG_CB_AUTO; - dt.cb_min = pstr->cb_min; - dt.cb_max = pstr->cb_max; - dt.toString = pstr->toString; - dt.isValid = pstr->isValid; - dt.comp = k5_ident_name_comp_func; - dt.dup = pstr->dup; - - kcdb_type_register(&dt, &type_id_krb5_princ); - - type_regd_krb5_princ = TRUE; - - kcdb_type_release_info(pstr); - } - - if (type_id_krb5_princ != -1) { - kcdb_attrib * attr; - - kcdb_attrib_get_info(KCDB_ATTR_ID_NAME, &attr); - - attr->type = type_id_krb5_princ; - - kcdb_attrib_release_info(attr); - } - - h_ccname_exit_event = CreateEvent(NULL, FALSE, FALSE, NULL); - if (h_ccname_exit_event) { - h_ccname_thread = CreateThread(NULL, - 200 * 1024, - k5_ccname_monitor_thread, - NULL, - 0, - NULL); - } else { - h_ccname_thread = NULL; - } - } - break; - - case KMSG_SYSTEM_EXIT: - { - - if (h_ccname_thread) { - SetEvent(h_ccname_exit_event); - WaitForSingleObject(h_ccname_thread, INFINITE); - CloseHandle(h_ccname_thread); - CloseHandle(h_ccname_exit_event); - - h_ccname_exit_event = NULL; - h_ccname_thread = NULL; - } - - if (k5_identpro_ctx) { - pkrb5_free_context(k5_identpro_ctx); - k5_identpro_ctx = NULL; - } - - if (type_id_krb5_princ != -1) { - kcdb_attrib * attr; - - kcdb_attrib_get_info(KCDB_ATTR_ID_NAME, &attr); - - attr->type = KCDB_TYPE_STRING; - - kcdb_attrib_release_info(attr); - } - - /* allow a brief moment for any stale references to die */ - Sleep(100); - - if (type_regd_krb5_princ) { - kcdb_type_unregister(type_id_krb5_princ); - } - } - break; - } - - return KHM_ERROR_SUCCESS; -} - -khm_int32 KHMAPI -k5_ident_callback(khm_int32 msg_type, khm_int32 msg_subtype, - khm_ui_4 uparam, void * vparam) { - switch(msg_type) { - case KMSG_SYSTEM: - return k5_msg_system_idpro(msg_type, msg_subtype, uparam, vparam); - - case KMSG_IDENT: - return k5_msg_ident(msg_type, msg_subtype, uparam, vparam); - } - - return KHM_ERROR_SUCCESS; -} diff --git a/src/windows/identity/plugins/krb5/krb5main.c b/src/windows/identity/plugins/krb5/krb5main.c deleted file mode 100644 index fc64e27f3..000000000 --- a/src/windows/identity/plugins/krb5/krb5main.c +++ /dev/null @@ -1,497 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<krbcred.h> -#include<kherror.h> - -kmm_module h_khModule; /* KMM's handle to this module */ -HINSTANCE hInstance; -HMODULE hResModule; /* HMODULE to the resource library */ -const wchar_t * k5_facility = L"Krb5Cred"; - -khm_int32 type_id_enctype = -1; -khm_int32 type_id_addr_list = -1; -khm_int32 type_id_krb5_flags = -1; -khm_int32 type_id_krb5_princ = -1; -khm_int32 type_id_kvno = -1; - -BOOL type_regd_enctype = FALSE; -BOOL type_regd_addr_list = FALSE; -BOOL type_regd_krb5_flags = FALSE; -BOOL type_regd_krb5_princ = FALSE; -BOOL type_regd_kvno = FALSE; - -khm_int32 attr_id_key_enctype = -1; -khm_int32 attr_id_tkt_enctype = -1; -khm_int32 attr_id_addr_list = -1; -khm_int32 attr_id_krb5_flags = -1; -khm_int32 attr_id_krb5_ccname = -1; -khm_int32 attr_id_kvno = -1; -khm_int32 attr_id_krb5_idflags = -1; - -BOOL attr_regd_key_enctype = FALSE; -BOOL attr_regd_tkt_enctype = FALSE; -BOOL attr_regd_addr_list = FALSE; -BOOL attr_regd_krb5_flags = FALSE; -BOOL attr_regd_krb5_ccname = FALSE; -BOOL attr_regd_kvno = FALSE; -BOOL attr_regd_krb5_idflags = FALSE; - -khm_handle csp_plugins = NULL; -khm_handle csp_krbcred = NULL; -khm_handle csp_params = NULL; - -BOOL is_k5_identpro = TRUE; - -khm_ui_4 k5_commctl_version; - -kmm_module_locale locales[] = { - LOCALE_DEF(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US), L"krb5cred_en_us.dll", KMM_MLOC_FLAG_DEFAULT) -}; -int n_locales = ARRAYLENGTH(locales); - -/* These two should not do anything */ -void init_krb() { -} - -void exit_krb() { -} - -/* called by the NetIDMgr module manager */ -KHMEXP_EXP khm_int32 KHMAPI init_module(kmm_module h_module) { - khm_int32 rv = KHM_ERROR_SUCCESS; - kmm_plugin_reg pi; - wchar_t buf[256]; - - h_khModule = h_module; - - rv = kmm_set_locale_info(h_module, locales, n_locales); - if(KHM_SUCCEEDED(rv)) { - hResModule = kmm_get_resource_hmodule(h_module); - } else - goto _exit; - - k5_commctl_version = khm_get_commctl_version(NULL); - - /* register the plugin */ - ZeroMemory(&pi, sizeof(pi)); - pi.name = KRB5_PLUGIN_NAME; - pi.type = KHM_PITYPE_CRED; - pi.icon = LoadImage(hResModule, MAKEINTRESOURCE(IDI_PLUGIN), - IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR | LR_DEFAULTSIZE); - pi.flags = 0; - pi.msg_proc = k5_msg_callback; - pi.description = buf; - pi.dependencies = NULL; - LoadString(hResModule, IDS_PLUGIN_DESC, - buf, ARRAYLENGTH(buf)); - kmm_provide_plugin(h_module, &pi); - - ZeroMemory(&pi, sizeof(pi)); - pi.name = KRB5_IDENTPRO_NAME; - pi.type = KHM_PITYPE_IDENT; - pi.icon = LoadImage(hResModule, MAKEINTRESOURCE(IDI_PLUGIN), - IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR | LR_DEFAULTSIZE); - pi.flags = 0; - pi.msg_proc = k5_ident_callback; - pi.description = buf; - pi.dependencies = KRB5_PLUGIN_NAME L"\0"; - LoadString(hResModule, IDS_IDENTPRO_DESC, - buf, ARRAYLENGTH(buf)); - kmm_provide_plugin(h_module, &pi); - - if(KHM_FAILED(rv = init_imports())) - goto _exit; - - if(KHM_FAILED(rv = init_error_funcs())) - goto _exit; - - /* Register common data types */ - if(KHM_FAILED(kcdb_type_get_id(TYPENAME_ENCTYPE, &type_id_enctype))) { - kcdb_type type; - kcdb_type *t32; - - kcdb_type_get_info(KCDB_TYPE_INT32, &t32); - - type.id = KCDB_TYPE_INVALID; - type.name = TYPENAME_ENCTYPE; - type.flags = KCDB_TYPE_FLAG_CB_FIXED; - type.cb_max = t32->cb_max; - type.cb_min = t32->cb_min; - type.isValid = t32->isValid; - type.comp = t32->comp; - type.dup = t32->dup; - type.toString = enctype_toString; - - rv = kcdb_type_register(&type, &type_id_enctype); - kcdb_type_release_info(t32); - - if(KHM_FAILED(rv)) - goto _exit; - type_regd_enctype = TRUE; - } - - if(KHM_FAILED(kcdb_type_get_id(TYPENAME_ADDR_LIST, &type_id_addr_list))) { - kcdb_type type; - kcdb_type *tdata; - - kcdb_type_get_info(KCDB_TYPE_DATA, &tdata); - - type.id = KCDB_TYPE_INVALID; - type.name = TYPENAME_ADDR_LIST; - type.flags = KCDB_TYPE_FLAG_CB_MIN; - type.cb_min = 0; - type.cb_max = 0; - type.isValid = tdata->isValid; - type.comp = addr_list_comp; - type.dup = tdata->dup; - type.toString = addr_list_toString; - - rv = kcdb_type_register(&type, &type_id_addr_list); - kcdb_type_release_info(tdata); - - if(KHM_FAILED(rv)) - goto _exit; - type_regd_addr_list = TRUE; - } - - if(KHM_FAILED(kcdb_type_get_id(TYPENAME_KRB5_FLAGS, &type_id_krb5_flags))) { - kcdb_type type; - kcdb_type *t32; - - kcdb_type_get_info(KCDB_TYPE_INT32, &t32); - - type.id = KCDB_TYPE_INVALID; - type.name = TYPENAME_KRB5_FLAGS; - type.flags = KCDB_TYPE_FLAG_CB_FIXED; - type.cb_max = t32->cb_max; - type.cb_min = t32->cb_min; - type.isValid = t32->isValid; - type.comp = t32->comp; - type.dup = t32->dup; - type.toString = krb5flags_toString; - - rv = kcdb_type_register(&type, &type_id_krb5_flags); - kcdb_type_release_info(t32); - - if(KHM_FAILED(rv)) - goto _exit; - type_regd_krb5_flags = TRUE; - } - - if (KHM_FAILED(kcdb_type_get_id(TYPENAME_KVNO, &type_id_kvno))) { - kcdb_type type; - kcdb_type *t32; - - kcdb_type_get_info(KCDB_TYPE_INT32, &t32); - - type.id = KCDB_TYPE_INVALID; - type.name = TYPENAME_KVNO; - type.flags = KCDB_TYPE_FLAG_CB_FIXED; - type.cb_max = t32->cb_max; - type.cb_min = t32->cb_min; - type.isValid = t32->isValid; - type.comp = t32->comp; - type.dup = t32->dup; - type.toString = kvno_toString; - - rv = kcdb_type_register(&type, &type_id_kvno); - kcdb_type_release_info(t32); - - if (KHM_FAILED(rv)) - goto _exit; - - type_regd_kvno = TRUE; - } - - /* Register common attributes */ - if(KHM_FAILED(kcdb_attrib_get_id(ATTRNAME_KEY_ENCTYPE, &attr_id_key_enctype))) { - kcdb_attrib attrib; - wchar_t sbuf[KCDB_MAXCCH_SHORT_DESC]; - wchar_t lbuf[KCDB_MAXCCH_SHORT_DESC]; - /* although we are loading a long descriptoin, it still fits - in the short descriptoin buffer */ - - ZeroMemory(&attrib, sizeof(attrib)); - - attrib.name = ATTRNAME_KEY_ENCTYPE; - attrib.id = KCDB_ATTR_INVALID; - attrib.type = type_id_enctype; - attrib.flags = KCDB_ATTR_FLAG_TRANSIENT; - LoadString(hResModule, IDS_KEY_ENCTYPE_SHORT_DESC, sbuf, ARRAYLENGTH(sbuf)); - LoadString(hResModule, IDS_KEY_ENCTYPE_LONG_DESC, lbuf, ARRAYLENGTH(lbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = lbuf; - - rv = kcdb_attrib_register(&attrib, &attr_id_key_enctype); - - if(KHM_FAILED(rv)) - goto _exit; - - attr_regd_key_enctype = TRUE; - } - - if(KHM_FAILED(kcdb_attrib_get_id(ATTRNAME_TKT_ENCTYPE, &attr_id_tkt_enctype))) { - kcdb_attrib attrib; - wchar_t sbuf[KCDB_MAXCCH_SHORT_DESC]; - wchar_t lbuf[KCDB_MAXCCH_SHORT_DESC]; - /* although we are loading a long descriptoin, it still fits - in the short descriptoin buffer */ - - ZeroMemory(&attrib, sizeof(attrib)); - - attrib.name = ATTRNAME_TKT_ENCTYPE; - attrib.id = KCDB_ATTR_INVALID; - attrib.type = type_id_enctype; - attrib.flags = KCDB_ATTR_FLAG_TRANSIENT; - LoadString(hResModule, IDS_TKT_ENCTYPE_SHORT_DESC, sbuf, ARRAYLENGTH(sbuf)); - LoadString(hResModule, IDS_TKT_ENCTYPE_LONG_DESC, lbuf, ARRAYLENGTH(lbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = lbuf; - - rv = kcdb_attrib_register(&attrib, &attr_id_tkt_enctype); - - if(KHM_FAILED(rv)) - goto _exit; - - attr_regd_tkt_enctype = TRUE; - } - - if(KHM_FAILED(kcdb_attrib_get_id(ATTRNAME_ADDR_LIST, &attr_id_addr_list))) { - kcdb_attrib attrib; - wchar_t sbuf[KCDB_MAXCCH_SHORT_DESC]; - wchar_t lbuf[KCDB_MAXCCH_SHORT_DESC]; - /* although we are loading a long descriptoin, it still fits - in the short descriptoin buffer */ - - ZeroMemory(&attrib, sizeof(attrib)); - - attrib.name = ATTRNAME_ADDR_LIST; - attrib.id = KCDB_ATTR_INVALID; - attrib.type = type_id_addr_list; - attrib.flags = KCDB_ATTR_FLAG_TRANSIENT; - LoadString(hResModule, IDS_ADDR_LIST_SHORT_DESC, sbuf, ARRAYLENGTH(sbuf)); - LoadString(hResModule, IDS_ADDR_LIST_LONG_DESC, lbuf, ARRAYLENGTH(lbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = lbuf; - - rv = kcdb_attrib_register(&attrib, &attr_id_addr_list); - - if(KHM_FAILED(rv)) - goto _exit; - - attr_regd_addr_list = TRUE; - } - - if(KHM_FAILED(kcdb_attrib_get_id(ATTRNAME_KRB5_FLAGS, &attr_id_krb5_flags))) { - kcdb_attrib attrib; - wchar_t sbuf[KCDB_MAXCCH_SHORT_DESC]; - - /* although we are loading a long descriptoin, it still fits - in the short descriptoin buffer */ - - ZeroMemory(&attrib, sizeof(attrib)); - - attrib.name = ATTRNAME_KRB5_FLAGS; - attrib.id = KCDB_ATTR_INVALID; - attrib.type = type_id_krb5_flags; - attrib.flags = KCDB_ATTR_FLAG_TRANSIENT; - LoadString(hResModule, IDS_KRB5_FLAGS_SHORT_DESC, sbuf, ARRAYLENGTH(sbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = NULL; - - rv = kcdb_attrib_register(&attrib, &attr_id_krb5_flags); - - if(KHM_FAILED(rv)) - goto _exit; - - attr_regd_krb5_flags = TRUE; - } - - if(KHM_FAILED(kcdb_attrib_get_id(ATTRNAME_KRB5_CCNAME, &attr_id_krb5_ccname))) { - kcdb_attrib attrib; - wchar_t sbuf[KCDB_MAXCCH_SHORT_DESC]; - wchar_t lbuf[KCDB_MAXCCH_SHORT_DESC]; - /* although we are loading a long descriptoin, it still fits - in the short descriptoin buffer */ - - ZeroMemory(&attrib, sizeof(attrib)); - - attrib.name = ATTRNAME_KRB5_CCNAME; - attrib.id = KCDB_ATTR_INVALID; - attrib.type = KCDB_TYPE_STRING; - attrib.flags = - KCDB_ATTR_FLAG_PROPERTY | - KCDB_ATTR_FLAG_TRANSIENT; - LoadString(hResModule, IDS_KRB5_CCNAME_SHORT_DESC, sbuf, ARRAYLENGTH(sbuf)); - LoadString(hResModule, IDS_KRB5_CCNAME_LONG_DESC, lbuf, ARRAYLENGTH(lbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = lbuf; - - rv = kcdb_attrib_register(&attrib, &attr_id_krb5_ccname); - - if(KHM_FAILED(rv)) - goto _exit; - - attr_regd_krb5_ccname = TRUE; - } - - if (KHM_FAILED(kcdb_attrib_get_id(ATTRNAME_KVNO, &attr_id_kvno))) { - kcdb_attrib attrib; - wchar_t sbuf[KCDB_MAXCCH_SHORT_DESC]; - wchar_t lbuf[KCDB_MAXCCH_LONG_DESC]; - /* although we are loading a long description, it still fits - in the short description buffer */ - - ZeroMemory(&attrib, sizeof(attrib)); - - attrib.name = ATTRNAME_KVNO; - attrib.id = KCDB_ATTR_INVALID; - attrib.type = type_id_kvno; - attrib.flags = KCDB_ATTR_FLAG_TRANSIENT; - LoadString(hResModule, IDS_KVNO_SHORT_DESC, sbuf, ARRAYLENGTH(sbuf)); - LoadString(hResModule, IDS_KVNO_LONG_DESC, lbuf, ARRAYLENGTH(lbuf)); - attrib.short_desc = sbuf; - attrib.long_desc = lbuf; - - rv = kcdb_attrib_register(&attrib, &attr_id_kvno); - - if (KHM_FAILED(rv)) - goto _exit; - - attr_regd_kvno = TRUE; - } - - if (KHM_FAILED(kcdb_attrib_get_id(ATTRNAME_KRB5_IDFLAGS, &attr_id_krb5_idflags))) { - kcdb_attrib attrib; - - ZeroMemory(&attrib, sizeof(attrib)); - - attrib.name = ATTRNAME_KRB5_IDFLAGS; - attrib.id = KCDB_ATTR_INVALID; - attrib.type = KCDB_TYPE_INT32; - attrib.flags = KCDB_ATTR_FLAG_PROPERTY | - KCDB_ATTR_FLAG_HIDDEN; - /* we don't bother localizing these strings since the - attribute is hidden. The user will not see these - descriptions anyway. */ - attrib.short_desc = L"Krb5 ID flags"; - attrib.long_desc = L"Kerberos 5 Identity Flags"; - - rv = kcdb_attrib_register(&attrib, &attr_id_krb5_idflags); - - if (KHM_FAILED(rv)) - goto _exit; - - attr_regd_krb5_idflags = TRUE; - } - - rv = kmm_get_plugins_config(0, &csp_plugins); - if(KHM_FAILED(rv)) goto _exit; - - rv = khc_load_schema(csp_plugins, schema_krbconfig); - if(KHM_FAILED(rv)) goto _exit; - - rv = khc_open_space(csp_plugins, CSNAME_KRB5CRED, 0, &csp_krbcred); - if(KHM_FAILED(rv)) goto _exit; - - rv = khc_open_space(csp_krbcred, CSNAME_PARAMS, 0, &csp_params); - if(KHM_FAILED(rv)) goto _exit; - -_exit: - return rv; -} - -/* called by the NetIDMgr module manager */ -KHMEXP_EXP khm_int32 KHMAPI exit_module(kmm_module h_module) { - exit_imports(); - exit_error_funcs(); - - if(attr_regd_key_enctype) - kcdb_attrib_unregister(attr_id_key_enctype); - if(attr_regd_tkt_enctype) - kcdb_attrib_unregister(attr_id_tkt_enctype); - if(attr_regd_addr_list) - kcdb_attrib_unregister(attr_id_addr_list); - if(attr_regd_krb5_flags) - kcdb_attrib_unregister(attr_id_krb5_flags); - if(attr_regd_krb5_ccname) - kcdb_attrib_unregister(attr_id_krb5_ccname); - if(attr_regd_kvno) - kcdb_attrib_unregister(attr_id_kvno); - if(attr_regd_krb5_idflags) - kcdb_attrib_unregister(attr_id_krb5_idflags); - - if(type_regd_enctype) - kcdb_type_unregister(type_id_enctype); - if(type_regd_addr_list) - kcdb_type_unregister(type_id_addr_list); - if(type_regd_krb5_flags) - kcdb_type_unregister(type_id_krb5_flags); - if(type_regd_kvno) - kcdb_type_unregister(type_id_kvno); - - if(csp_params) { - khc_close_space(csp_params); - csp_params = NULL; - } - - if(csp_krbcred) { - khc_close_space(csp_krbcred); - csp_krbcred = NULL; - } - - if(csp_plugins) { - khc_unload_schema(csp_plugins, schema_krbconfig); - khc_close_space(csp_plugins); - csp_plugins = NULL; - } - - return KHM_ERROR_SUCCESS; /* the return code is ignored */ -} - -BOOL WINAPI DllMain( - HINSTANCE hinstDLL, - DWORD fdwReason, - LPVOID lpvReserved -) -{ - switch(fdwReason) { - case DLL_PROCESS_ATTACH: - hInstance = hinstDLL; - init_krb(); - break; - case DLL_PROCESS_DETACH: - exit_krb(); - break; - case DLL_THREAD_ATTACH: - break; - case DLL_THREAD_DETACH: - break; - } - - return TRUE; -} diff --git a/src/windows/identity/plugins/krb5/krb5newcreds.c b/src/windows/identity/plugins/krb5/krb5newcreds.c deleted file mode 100644 index 7f2b93198..000000000 --- a/src/windows/identity/plugins/krb5/krb5newcreds.c +++ /dev/null @@ -1,2925 +0,0 @@ -/* - * 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 (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<krbcred.h> -#include<kherror.h> -#include<khmsgtypes.h> -#include<strsafe.h> -#include<krb5.h> - -#include<commctrl.h> - -#include<assert.h> - -extern LPVOID k5_main_fiber; -extern LPVOID k5_kinit_fiber; - -typedef struct k5_dlg_data_t { - khui_new_creds * nc; - - khui_tracker tc_lifetime; - khui_tracker tc_renew; - - BOOL dirty; /* is the data in sync with the - configuration store? */ - BOOL sync; /* is the data in sync with the kinit - request? */ - DWORD renewable; - DWORD forwardable; - DWORD proxiable; - DWORD addressless; - DWORD publicIP; - - wchar_t * cred_message; /* overrides the credential text, if - non-NULL */ - BOOL pwd_change; /* force a password change */ -} k5_dlg_data; - - -INT_PTR -k5_handle_wm_initdialog(HWND hwnd, - WPARAM wParam, - LPARAM lParam) -{ - HWND hw; - k5_dlg_data * d; - khui_new_creds_by_type * nct; - - d = PMALLOC(sizeof(*d)); - ZeroMemory(d, sizeof(*d)); - /* lParam is a pointer to a khui_new_creds structure */ - d->nc = (khui_new_creds *) lParam; - khui_cw_find_type(d->nc, credtype_id_krb5, &nct); - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LPARAM) d); -#pragma warning(pop) - - nct->aux = (LPARAM) d; - - if (d->nc->subtype == KMSG_CRED_NEW_CREDS) { - khui_tracker_initialize(&d->tc_lifetime); - khui_tracker_initialize(&d->tc_renew); - - hw = GetDlgItem(hwnd, IDC_NCK5_LIFETIME_EDIT); - khui_tracker_install(hw, &d->tc_lifetime); - - hw = GetDlgItem(hwnd, IDC_NCK5_RENEW_EDIT); - khui_tracker_install(hw, &d->tc_renew); - } - return TRUE; -} - -INT_PTR -k5_handle_wm_destroy(HWND hwnd, - WPARAM wParam, - LPARAM lParam) -{ - k5_dlg_data * d; - khui_new_creds_by_type * nct = NULL; - - d = (k5_dlg_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (!d) - return TRUE; - - khui_cw_find_type(d->nc, credtype_id_krb5, &nct); - -#ifdef DEBUG - assert(nct); -#endif - - nct->aux = 0; - - if (d->nc->subtype == KMSG_CRED_NEW_CREDS) { - khui_tracker_kill_controls(&d->tc_renew); - khui_tracker_kill_controls(&d->tc_lifetime); - } - - PFREE(d); - SetWindowLongPtr(hwnd, DWLP_USER, 0); - - return TRUE; -} - -LRESULT -k5_force_password_change(k5_dlg_data * d) { - /* we are turning this dialog into a change password dialog... */ - wchar_t wbuf[KHUI_MAXCCH_BANNER]; - - khui_cw_clear_prompts(d->nc); - - LoadString(hResModule, IDS_NC_PWD_BANNER, - wbuf, ARRAYLENGTH(wbuf)); - khui_cw_begin_custom_prompts(d->nc, 3, NULL, wbuf); - - LoadString(hResModule, IDS_NC_PWD_PWD, - wbuf, ARRAYLENGTH(wbuf)); - khui_cw_add_prompt(d->nc, KHUI_NCPROMPT_TYPE_PASSWORD, - wbuf, NULL, KHUI_NCPROMPT_FLAG_HIDDEN); - - LoadString(hResModule, IDS_NC_PWD_NPWD, - wbuf, ARRAYLENGTH(wbuf)); - khui_cw_add_prompt(d->nc, KHUI_NCPROMPT_TYPE_NEW_PASSWORD, - wbuf, NULL, KHUI_NCPROMPT_FLAG_HIDDEN); - - LoadString(hResModule, IDS_NC_PWD_NPWD_AGAIN, - wbuf, ARRAYLENGTH(wbuf)); - khui_cw_add_prompt(d->nc, KHUI_NCPROMPT_TYPE_NEW_PASSWORD_AGAIN, - wbuf, NULL, KHUI_NCPROMPT_FLAG_HIDDEN); - - d->pwd_change = TRUE; - - if (is_k5_identpro && - d->nc->n_identities > 0 && - d->nc->identities[0]) { - - kcdb_identity_set_flags(d->nc->identities[0], - KCDB_IDENT_FLAG_VALID, - KCDB_IDENT_FLAG_VALID); - - } - - PostMessage(d->nc->hwnd, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_UPDATE_CREDTEXT), - (LPARAM) d->nc); - - return TRUE; -} - -INT_PTR -k5_handle_wmnc_notify(HWND hwnd, - WPARAM wParam, - LPARAM lParam) -{ - switch(HIWORD(wParam)) { - case WMNC_DIALOG_MOVE: - { - k5_dlg_data * d; - - d = (k5_dlg_data *)(LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - return TRUE; - - if (d->nc->subtype == KMSG_CRED_NEW_CREDS) { - khui_tracker_reposition(&d->tc_lifetime); - khui_tracker_reposition(&d->tc_renew); - } - - return TRUE; - } - break; - - case WMNC_DIALOG_SETUP: - { - k5_dlg_data * d; - BOOL old_sync; - - d = (k5_dlg_data *)(LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - return TRUE; - - if (d->nc->subtype == KMSG_CRED_PASSWORD) - return TRUE; - - /* we save the value of the 'sync' field here because some - of the notifications that are generated while setting - the controls overwrite the field. */ - old_sync = d->sync; - - /* need to update the controls with d->* */ - SendDlgItemMessage(hwnd, IDC_NCK5_RENEWABLE, - BM_SETCHECK, - (d->renewable? BST_CHECKED : BST_UNCHECKED), - 0); - EnableWindow(GetDlgItem(hwnd, IDC_NCK5_RENEW_EDIT), - !!d->renewable); - - khui_tracker_refresh(&d->tc_lifetime); - khui_tracker_refresh(&d->tc_renew); - - SendDlgItemMessage(hwnd, IDC_NCK5_FORWARDABLE, - BM_SETCHECK, - (d->forwardable ? BST_CHECKED : BST_UNCHECKED), - 0); - - SendDlgItemMessage(hwnd, IDC_NCK5_ADDRESS, - BM_SETCHECK, - (d->addressless ? BST_CHECKED : BST_UNCHECKED), - 0); - - SendDlgItemMessage(hwnd, IDC_NCK5_PUBLICIP, - IPM_SETADDRESS, - 0, d->publicIP); - - EnableWindow(GetDlgItem(hwnd, IDC_NCK5_PUBLICIP), !d->addressless); - - d->sync = old_sync; - } - break; - - case WMNC_CREDTEXT_LINK: - { - k5_dlg_data * d; - khui_htwnd_link * l; - khui_new_creds * nc; - wchar_t linktext[128]; - - d = (k5_dlg_data *)(LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d == NULL) - return TRUE; - - nc = d->nc; - l = (khui_htwnd_link *) lParam; - - if (!l) - break; - - StringCchCopyN(linktext, ARRAYLENGTH(linktext), - l->id, l->id_len); - - if (!wcscmp(linktext, L"Krb5Cred:!Passwd")) { - return k5_force_password_change(d); - } - } - break; - - case WMNC_UPDATE_CREDTEXT: - { - k5_dlg_data * d; - khui_new_creds * nc; - khui_new_creds_by_type * nct; - wchar_t sbuf[1024]; - wchar_t fbuf[256]; - wchar_t tbuf[256]; - size_t cbsize; - khm_int32 flags; - - d = (k5_dlg_data *)(LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - return TRUE; - - nc = d->nc; - khui_cw_find_type(nc, credtype_id_krb5, &nct); - - if(nct == NULL) - break; - - if(nct->credtext) - PFREE(nct->credtext); - nct->credtext = NULL; - - tbuf[0] = L'\0'; - - if (nc->n_identities > 0 && - KHM_SUCCEEDED(kcdb_identity_get_flags(nc->identities[0], - &flags)) && - (flags & KCDB_IDENT_FLAG_VALID) && - nc->subtype == KMSG_CRED_NEW_CREDS && - !d->pwd_change) { - - if (is_k5_identpro) - k5_get_realm_from_nc(nc, tbuf, ARRAYLENGTH(tbuf)); - else - GetDlgItemText(hwnd, IDC_NCK5_REALM, tbuf, - ARRAYLENGTH(tbuf)); - - /*TODO: if additional realms were specified, then those - must be listed as well */ - LoadString(hResModule, IDS_KRB5_CREDTEXT_0, - fbuf, ARRAYLENGTH(fbuf)); - StringCbPrintf(sbuf, sizeof(sbuf), fbuf, - tbuf); - - StringCbLength(sbuf, sizeof(sbuf), &cbsize); - cbsize += sizeof(wchar_t); - - nct->credtext = PMALLOC(cbsize); - - StringCbCopy(nct->credtext, cbsize, sbuf); - } else if (nc->n_identities > 0 && - (nc->subtype == KMSG_CRED_PASSWORD || - (nc->subtype == KMSG_CRED_NEW_CREDS && d->pwd_change))) { - cbsize = sizeof(tbuf); - kcdb_identity_get_name(nc->identities[0], tbuf, &cbsize); - - LoadString(hResModule, IDS_KRB5_CREDTEXT_P0, - fbuf, ARRAYLENGTH(fbuf)); - StringCbPrintf(sbuf, sizeof(sbuf), fbuf, tbuf); - - StringCbLength(sbuf, sizeof(sbuf), &cbsize); - cbsize += sizeof(wchar_t); - - nct->credtext = PMALLOC(cbsize); - - StringCbCopy(nct->credtext, cbsize, sbuf); - } else { - if (d->cred_message) { - StringCbLength(d->cred_message, KHUI_MAXCB_BANNER, - &cbsize); - cbsize += sizeof(wchar_t); - - nct->credtext = PMALLOC(cbsize); - - StringCbCopy(nct->credtext, cbsize, d->cred_message); - } - } - } - break; - - case WMNC_IDENTITY_CHANGE: - { - /* There has been a change of identity */ - k5_dlg_data * d; - - d = (k5_dlg_data *)(LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - break; - - kmq_post_sub_msg(k5_sub, KMSG_CRED, - KMSG_CRED_DIALOG_NEW_IDENTITY, - 0, (void *) d->nc); - } - break; - - case WMNC_DIALOG_PREPROCESS: - { - k5_dlg_data * d; - - d = (k5_dlg_data *)(LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - break; - - if(!d->sync && d->nc->result == KHUI_NC_RESULT_PROCESS) { - kmq_post_sub_msg(k5_sub, KMSG_CRED, - KMSG_CRED_DIALOG_NEW_OPTIONS, - 0, (void *) d->nc); - } - } - break; - - case K5_SET_CRED_MSG: - { - k5_dlg_data * d; - khm_size cb; - wchar_t * msg; - - d = (k5_dlg_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - break; - - msg = (wchar_t *) lParam; - - if (d->cred_message) { - PFREE(d->cred_message); - d->cred_message = NULL; - } - - if (msg && - SUCCEEDED(StringCbLength(msg, - KHUI_MAXCB_MESSAGE, - &cb))) { - cb += sizeof(wchar_t); - d->cred_message = PMALLOC(cb); -#ifdef DEBUG - assert(d->cred_message); -#endif - StringCbCopy(d->cred_message, cb, msg); - } - } - break; - } - - return 0; -} - -INT_PTR -k5_handle_wm_notify(HWND hwnd, - WPARAM wParam, - LPARAM lParam) { - LPNMHDR pnmh; - k5_dlg_data * d; - - pnmh = (LPNMHDR) lParam; - if (pnmh->idFrom == IDC_NCK5_PUBLICIP && - pnmh->code == IPN_FIELDCHANGED) { - - d = (k5_dlg_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - return 0; - - SendDlgItemMessage(hwnd, IDC_NCK5_PUBLICIP, - IPM_GETADDRESS, - 0, (LPARAM) &d->publicIP); - - d->dirty = TRUE; - d->sync = FALSE; - - return TRUE; - } - - return 0; -} - -INT_PTR -k5_handle_wm_command(HWND hwnd, - WPARAM wParam, - LPARAM lParam) -{ - int cid; - int notif; - k5_dlg_data * d; - - d = (k5_dlg_data *)(LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - return FALSE; - - cid = LOWORD(wParam); - notif = HIWORD(wParam); - - if(notif == BN_CLICKED && cid == IDC_NCK5_RENEWABLE) { - int c; - c = (int) SendDlgItemMessage(hwnd, IDC_NCK5_RENEWABLE, - BM_GETCHECK, 0, 0); - if(c==BST_CHECKED) { - EnableWindow(GetDlgItem(hwnd, IDC_NCK5_RENEW_EDIT), TRUE); - d->renewable = TRUE; - } else { - EnableWindow(GetDlgItem(hwnd, IDC_NCK5_RENEW_EDIT), FALSE); - d->renewable = FALSE; - } - d->dirty = TRUE; - d->sync = FALSE; - } else if(notif == BN_CLICKED && cid == IDC_NCK5_FORWARDABLE) { - int c; - c = (int) SendDlgItemMessage(hwnd, IDC_NCK5_FORWARDABLE, - BM_GETCHECK, 0, 0); - if(c==BST_CHECKED) { - d->forwardable = TRUE; - } else { - d->forwardable = FALSE; - } - d->dirty = TRUE; - d->sync = FALSE; - } else if (notif == BN_CLICKED && cid == IDC_NCK5_ADDRESS) { - int c; - - c = (int) SendDlgItemMessage(hwnd, IDC_NCK5_ADDRESS, - BM_GETCHECK, 0, 0); - - if (c==BST_CHECKED) { - d->addressless = TRUE; - } else { - d->addressless = FALSE; - } - d->dirty = TRUE; - d->sync = FALSE; - - EnableWindow(GetDlgItem(hwnd, IDC_NCK5_PUBLICIP), !d->addressless); - } else if (notif == EN_CHANGE && (cid == IDC_NCK5_RENEW_EDIT || - cid == IDC_NCK5_LIFETIME_EDIT)) { - d->dirty = TRUE; - d->sync = FALSE; - } else if((notif == CBN_SELCHANGE || - notif == CBN_KILLFOCUS) && - cid == IDC_NCK5_REALM && - !is_k5_identpro) { - /* find out what the realm of the current identity - is, and if they are the same, then we don't do - anything */ - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - wchar_t realm[KCDB_IDENT_MAXCCH_NAME]; - wchar_t *r; - khm_size cbsize; - khm_handle ident; - int idx; - - if(d->nc->n_identities > 0) { - if(notif == CBN_SELCHANGE) { - idx = (int) SendDlgItemMessage(hwnd, IDC_NCK5_REALM, - CB_GETCURSEL, 0, 0); - SendDlgItemMessage(hwnd, IDC_NCK5_REALM, - CB_GETLBTEXT, idx, (LPARAM) realm); - } else { - GetDlgItemText(hwnd, IDC_NCK5_REALM, - realm, ARRAYLENGTH(realm)); - } - cbsize = sizeof(idname); - if(KHM_SUCCEEDED(kcdb_identity_get_name(d->nc->identities[0], - idname, &cbsize))) { - r = wcschr(idname, L'@'); - if(r && !wcscmp(realm, r+1)) - return 0; /* nothing to do */ - - if(!r) { - r = idname + wcslen(idname); - *r++ = L'@'; - *r++ = 0; - } - - /* if we get here, we have a new user */ - StringCchCopy(r+1, - ARRAYLENGTH(idname) - ((r+1) - idname), - realm); - if(KHM_SUCCEEDED(kcdb_identity_create(idname, - KCDB_IDENT_FLAG_CREATE, - &ident))) { - khui_cw_set_primary_id(d->nc, ident); - kcdb_identity_release(ident); - } - return 0; - } - } - - /* if we get here, we have a new realm, but there is no - identity */ - PostMessage(d->nc->hwnd, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_UPDATE_CREDTEXT), 0); - } - - return 0; -} - - -/* Dialog procedure for the Krb5 credentials type panel. - - NOTE: Runs in the context of the UI thread -*/ -INT_PTR CALLBACK -k5_nc_dlg_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) -{ - switch(uMsg) { - case WM_INITDIALOG: - return k5_handle_wm_initdialog(hwnd, wParam, lParam); - - case WM_COMMAND: - return k5_handle_wm_command(hwnd, wParam, lParam); - - case KHUI_WM_NC_NOTIFY: - return k5_handle_wmnc_notify(hwnd, wParam, lParam); - - case WM_NOTIFY: - return k5_handle_wm_notify(hwnd, wParam, lParam); - - case WM_DESTROY: - return k5_handle_wm_destroy(hwnd, wParam, lParam); - } - return FALSE; -} - -/* forward dcl */ -krb5_error_code KRB5_CALLCONV -k5_kinit_prompter(krb5_context context, - void *data, - const char *name, - const char *banner, - int num_prompts, - krb5_prompt prompts[]); - - - -fiber_job g_fjob; /* global fiber job object */ - -static BOOL -k5_cached_kinit_prompter(void); - -static BOOL -k5_cp_check_continue(void); - -/* - Runs in the context of the krb5 plugin's slave fiber -*/ -VOID CALLBACK -k5_kinit_fiber_proc(PVOID lpParameter) -{ - while(TRUE) - { - if(g_fjob.command == FIBER_CMD_KINIT) { - char * error_msg = NULL; - - g_fjob.state = FIBER_STATE_KINIT; - - if (g_fjob.error_message) { - PFREE(g_fjob.error_message); - g_fjob.error_message = NULL; - } - - g_fjob.prompt_set = 0; - - if (k5_cached_kinit_prompter()) { - SwitchToFiber(k5_main_fiber); - - if (g_fjob.command != FIBER_CMD_CONTINUE) - goto _switch_to_main; - - if (!k5_cp_check_continue()) { - g_fjob.code = KRB5KRB_AP_ERR_BAD_INTEGRITY; - goto _switch_to_main; - } - } - -#ifdef DEBUG - /* log the state of g_fjob.* */ - _reportf(L"g_fjob state prior to calling khm_krb5_kinit() :"); - _reportf(L" g_fjob.principal = [%S]", g_fjob.principal); - _reportf(L" g_fjob.code = %d", g_fjob.code); - _reportf(L" g_fjob.state = %d", g_fjob.state); - _reportf(L" g_fjob.prompt_set= %d", g_fjob.prompt_set); - _reportf(L" g_fjob.valid_principal = %d", (int) g_fjob.valid_principal); - _reportf(L" g_fjob.ccache = [%s]", g_fjob.ccache); -#endif - - /* If we don't know if we have a valid principal, we - restrict the options that are set when we call kinit. - This way we will be able to use the response from the - KDC to verify the principal. */ - - g_fjob.retry_if_valid_principal = (g_fjob.forwardable || - g_fjob.proxiable || - g_fjob.renewable); - - retry_kinit: - if (error_msg) { - free(error_msg); - error_msg = NULL; - } - - g_fjob.code = - khm_krb5_kinit(0, - g_fjob.principal, - g_fjob.password, - g_fjob.ccache, - g_fjob.lifetime, - g_fjob.valid_principal ? g_fjob.forwardable : 0, - g_fjob.valid_principal ? g_fjob.proxiable : 0, - (g_fjob.valid_principal && g_fjob.renewable ? g_fjob.renew_life : 0), - g_fjob.addressless, - g_fjob.publicIP, - k5_kinit_prompter, - &g_fjob, - &error_msg); - - /* If the principal was found to be valid, and if we - restricted the options that were being passed to kinit, - then we need to retry the kinit call. This time we use - the real options. */ - if (g_fjob.state == FIBER_STATE_RETRY_KINIT) { -#ifdef DEBUG - assert(g_fjob.valid_principal); -#endif - g_fjob.state = FIBER_STATE_KINIT; - goto retry_kinit; - } - - if (error_msg) { - wchar_t tmp[1024]; - - if (AnsiStrToUnicode(tmp, sizeof(tmp), error_msg)) { - g_fjob.error_message = PWCSDUP(tmp); - } - - free(error_msg); - error_msg = NULL; - } - } - - _switch_to_main: - g_fjob.state = FIBER_STATE_NONE; - - SwitchToFiber(k5_main_fiber); - } -} - -/* return TRUE if we should go ahead with creds acquisition */ -static BOOL -k5_cp_check_continue(void) { - khm_size i; - khm_size n_p; - khui_new_creds_prompt * p; - size_t cch; - -#ifdef DEBUG - assert(g_fjob.nc); -#endif - - if (KHM_FAILED(khui_cw_get_prompt_count(g_fjob.nc, &n_p))) { -#ifdef DEBUG - assert(FALSE); -#endif - return TRUE; - } - - khui_cw_sync_prompt_values(g_fjob.nc); - - g_fjob.null_password = FALSE; - - /* we are just checking whether there was a password field that - was left empty, in which case we can't continue with the - credentials acquisition. */ - for (i=0; i < n_p; i++) { - if(KHM_FAILED(khui_cw_get_prompt(g_fjob.nc, - (int) i, - &p))) - continue; - if(p->type == KHUI_NCPROMPT_TYPE_PASSWORD) { - if (p->value == NULL || - FAILED(StringCchLength(p->value, KHUI_MAXCCH_PROMPT, - &cch)) || - cch == 0) { - g_fjob.null_password = TRUE; - return FALSE; - } else - break; - } - } - - return TRUE; -} - -/* returns true if we find cached prompts */ -static BOOL -k5_cached_kinit_prompter(void) { - BOOL rv = FALSE; - khm_handle ident; - khm_handle csp_idconfig = NULL; - khm_handle csp_k5config = NULL; - khm_handle csp_prcache = NULL; - khm_size cb; - khm_size n_cur_prompts; - khm_int32 n_prompts; - khm_int32 i; - khm_int64 iexpiry; - FILETIME expiry; - FILETIME current; - -#ifdef DEBUG - assert(g_fjob.nc); -#endif - - ident = g_fjob.identity; - if (!ident) - return FALSE; - - /* don't need to hold ident, since it is already held in g_fjob - and it doesn't change until we return */ - - if (KHM_FAILED(kcdb_identity_get_config(ident, 0, &csp_idconfig)) || - - KHM_FAILED(khc_open_space(csp_idconfig, CSNAME_KRB5CRED, - 0, &csp_k5config)) || - - KHM_FAILED(khc_open_space(csp_k5config, CSNAME_PROMPTCACHE, - 0, &csp_prcache)) || - - KHM_FAILED(khc_read_int32(csp_prcache, L"PromptCount", - &n_prompts)) || - n_prompts == 0) - - goto _cleanup; - - if (KHM_SUCCEEDED(khc_read_int64(csp_prcache, L"ExpiresOn", &iexpiry))) { - /* has the cache expired? */ - expiry = IntToFt(iexpiry); - GetSystemTimeAsFileTime(&current); - - if (CompareFileTime(&expiry, &current) < 0) - /* already expired */ - goto _cleanup; - } else { - /* if there is no value for ExpiresOn, we assume the prompts - have already expired. */ - goto _cleanup; - } - - /* we found a prompt cache. We take this to imply that the - principal is valid. */ - g_fjob.valid_principal = TRUE; - - /* check if there are any prompts currently showing. If there are - we check if they are the same as the ones we are going to show. - In which case we just reuse the exisitng prompts */ - if (KHM_FAILED(khui_cw_get_prompt_count(g_fjob.nc, - &n_cur_prompts)) || - n_prompts != (khm_int32) n_cur_prompts) - goto _show_new_prompts; - - for(i = 0; i < n_prompts; i++) { - wchar_t wsname[8]; - wchar_t wprompt[KHUI_MAXCCH_PROMPT]; - khm_handle csp_p = NULL; - khm_int32 p_type; - khm_int32 p_flags; - khui_new_creds_prompt * p; - - if (KHM_FAILED(khui_cw_get_prompt(g_fjob.nc, i, &p))) - break; - - StringCbPrintf(wsname, sizeof(wsname), L"%d", i); - - if (KHM_FAILED(khc_open_space(csp_prcache, wsname, 0, &csp_p))) - break; - - cb = sizeof(wprompt); - if (KHM_FAILED(khc_read_string(csp_p, L"Prompt", - wprompt, &cb))) { - khc_close_space(csp_p); - break; - } - - if (KHM_FAILED(khc_read_int32(csp_p, L"Type", &p_type))) - p_type = 0; - - if (KHM_FAILED(khc_read_int32(csp_p, L"Flags", &p_flags))) - p_flags = 0; - - if ( /* if we received a prompt string, - then it should be the same as the - one that is displayed */ - (wprompt[0] && - (p->prompt == NULL || - wcscmp(wprompt, p->prompt))) || - - /* if we didn't receive one, then - there shouldn't be one displayed. - This case really shouldn't happen - in reality, but we check anyway. */ - (!wprompt[0] && - p->prompt != NULL) || - - /* the type should match */ - (p_type != p->type) || - - /* if this prompt should be hidden, - then it must also be so */ - (p_flags != p->flags) - ) { - - khc_close_space(csp_p); - break; - - } - - - khc_close_space(csp_p); - } - - if (i == n_prompts) { - rv = TRUE; - goto _cleanup; - } - - _show_new_prompts: - - khui_cw_clear_prompts(g_fjob.nc); - - { - wchar_t wbanner[KHUI_MAXCCH_BANNER]; - wchar_t wpname[KHUI_MAXCCH_PNAME]; - - cb = sizeof(wbanner); - if (KHM_FAILED(khc_read_string(csp_prcache, L"Banner", - wbanner, &cb))) - wbanner[0] = 0; - - cb = sizeof(wpname); - if (KHM_FAILED(khc_read_string(csp_prcache, L"Name", - wpname, &cb))) - wpname[0] = 0; - - khui_cw_begin_custom_prompts(g_fjob.nc, - n_prompts, - (wbanner[0]? wbanner: NULL), - (wpname[0]? wpname: NULL)); - } - - for(i = 0; i < n_prompts; i++) { - wchar_t wsname[8]; - wchar_t wprompt[KHUI_MAXCCH_PROMPT]; - khm_handle csp_p = NULL; - khm_int32 p_type; - khm_int32 p_flags; - - StringCbPrintf(wsname, sizeof(wsname), L"%d", i); - - if (KHM_FAILED(khc_open_space(csp_prcache, wsname, 0, &csp_p))) - break; - - cb = sizeof(wprompt); - if (KHM_FAILED(khc_read_string(csp_p, L"Prompt", - wprompt, &cb))) { - khc_close_space(csp_p); - break; - } - - if (KHM_FAILED(khc_read_int32(csp_p, L"Type", &p_type))) - p_type = 0; - - if (KHM_FAILED(khc_read_int32(csp_p, L"Flags", &p_flags))) - p_flags = 0; - - khui_cw_add_prompt(g_fjob.nc, p_type, wprompt, NULL, p_flags); - - khc_close_space(csp_p); - } - - if (i < n_prompts) { - khui_cw_clear_prompts(g_fjob.nc); - } else { - rv = TRUE; - } - - _cleanup: - - if (csp_prcache) - khc_close_space(csp_prcache); - - if (csp_k5config) - khc_close_space(csp_k5config); - - if (csp_idconfig) - khc_close_space(csp_idconfig); - - return rv; -} - -/* Runs in the context of the Krb5 plugin's slave fiber */ -krb5_error_code KRB5_CALLCONV -k5_kinit_prompter(krb5_context context, - void *data, - const char *name, - const char *banner, - int num_prompts, - krb5_prompt prompts[]) -{ - int i; - khui_new_creds * nc; - krb5_prompt_type * ptypes; - khm_size ncp; - krb5_error_code code = 0; - BOOL new_prompts = TRUE; - khm_handle csp_prcache = NULL; - -#ifdef DEBUG - _reportf(L"k5_kinit_prompter() received %d prompts with name=[%S] banner=[%S]", - num_prompts, - name, banner); - for (i=0; i < num_prompts; i++) { - _reportf(L"Prompt[%d]: string[%S]", i, prompts[i].prompt); - } -#endif - - /* we got prompts? Then we assume that the principal is valid */ - - if (!g_fjob.valid_principal) { - g_fjob.valid_principal = TRUE; - - /* if the flags that were used to call kinit were restricted - because we didn't know the validity of the principal, then - we need to go back and retry the call with the correct - flags. */ - if (g_fjob.retry_if_valid_principal) { - _reportf(L"Retrying kinit call due to restricted flags on first call."); - g_fjob.state = FIBER_STATE_RETRY_KINIT; - return KRB5_LIBOS_PWDINTR; - } - } - - nc = g_fjob.nc; - - if(pkrb5_get_prompt_types) - ptypes = pkrb5_get_prompt_types(context); - else - ptypes = NULL; - - /* check if we are already showing the right prompts */ - khui_cw_get_prompt_count(nc, &ncp); - - if (num_prompts != (int) ncp) - goto _show_new_prompts; - - for (i=0; i < num_prompts; i++) { - wchar_t wprompt[KHUI_MAXCCH_PROMPT]; - khui_new_creds_prompt * p; - - if(prompts[i].prompt) { - AnsiStrToUnicode(wprompt, sizeof(wprompt), - prompts[i].prompt); - } else { - wprompt[0] = 0; - } - - if (KHM_FAILED(khui_cw_get_prompt(nc, i, &p))) - break; - - if ( /* if we received a prompt string, - then it should be the same as the - one that is displayed */ - (wprompt[0] && - (p->prompt == NULL || - wcscmp(wprompt, p->prompt))) || - /* if we didn't receive one, then - there shouldn't be one displayed. - This case really shouldn't happen - in reality, but we check anyway. */ - (!wprompt[0] && - p->prompt != NULL) || - /* the type should match */ - (ptypes && - ptypes[i] != p->type) || - (!ptypes && - p->type != 0) || - /* if this prompt should be hidden, - then it must also be so */ - (prompts[i].hidden && - !(p->flags & KHUI_NCPROMPT_FLAG_HIDDEN)) || - (!prompts[i].hidden && - (p->flags & KHUI_NCPROMPT_FLAG_HIDDEN)) - ) - break; - } - - if (i < num_prompts) - goto _show_new_prompts; - - new_prompts = FALSE; - - /* ok. looks like we are already showing the same set of prompts - that we were supposed to show. Sync up the values and go - ahead. */ - khui_cw_sync_prompt_values(nc); - goto _process_prompts; - - _show_new_prompts: - /* special case. if there are no actual input controls involved, - then we have to show an alerter window and pass through */ - if (num_prompts == 0) { - wchar_t wbanner[KHUI_MAXCCH_BANNER]; - wchar_t wname[KHUI_MAXCCH_PNAME]; - wchar_t wident[KCDB_IDENT_MAXCCH_NAME]; - wchar_t wmsg[KHUI_MAXCCH_MESSAGE]; - wchar_t wfmt[KHUI_MAXCCH_BANNER]; - khm_size cb; - - if (!banner) { - code = 0; - g_fjob.null_password = FALSE; - goto _exit; - } else { - AnsiStrToUnicode(wbanner, sizeof(wbanner), banner); - } - - if (name) { - AnsiStrToUnicode(wname, sizeof(wname), name); - } else { - LoadString(hResModule, - IDS_KRB5_WARNING, - wname, - ARRAYLENGTH(wname)); - } - - cb = sizeof(wident); - if (KHM_FAILED(kcdb_identity_get_name(g_fjob.identity, wident, &cb))) - wident[0] = L'\0'; - - LoadString(hResModule, - IDS_KRB5_WARN_FMT, - wfmt, - ARRAYLENGTH(wfmt)); - - StringCbPrintf(wmsg, sizeof(wmsg), wfmt, wident, wbanner); - - khui_alert_show_simple(wname, wmsg, KHERR_WARNING); - - code = 0; - g_fjob.null_password = FALSE; - goto _exit; - } - - /* in addition to showing new prompts, we also cache the set of - prompts. */ - if(g_fjob.prompt_set == 0) { - khm_handle csp_idconfig = NULL; - khm_handle csp_idk5 = NULL; - - kcdb_identity_get_config(g_fjob.identity, - KHM_FLAG_CREATE, - &csp_idconfig); - - if (csp_idconfig != NULL) - khc_open_space(csp_idconfig, - CSNAME_KRB5CRED, - KHM_FLAG_CREATE, - &csp_idk5); - - if (csp_idk5 != NULL) - khc_open_space(csp_idk5, - CSNAME_PROMPTCACHE, - KHM_FLAG_CREATE, - &csp_prcache); - - khc_close_space(csp_idconfig); - khc_close_space(csp_idk5); - } - - { - wchar_t wbanner[KHUI_MAXCCH_BANNER]; - wchar_t wname[KHUI_MAXCCH_PNAME]; - FILETIME current; - FILETIME lifetime; - FILETIME expiry; - khm_int64 iexpiry; - khm_int32 t = 0; - - if(banner) - AnsiStrToUnicode(wbanner, sizeof(wbanner), banner); - if(name) - AnsiStrToUnicode(wname, sizeof(wname), name); - - khui_cw_clear_prompts(nc); - - khui_cw_begin_custom_prompts( - nc, - num_prompts, - (banner)?wbanner:NULL, - (name)?wname:NULL); - - if (csp_prcache) { - - if (banner) - khc_write_string(csp_prcache, - L"Banner", - wbanner); - else - khc_write_string(csp_prcache, - L"Banner", - L""); - - if (name) - khc_write_string(csp_prcache, - L"Name", - wname); - else if (csp_prcache) - khc_write_string(csp_prcache, - L"Name", - L""); - - khc_write_int32(csp_prcache, - L"PromptCount", - (khm_int32) num_prompts); - - GetSystemTimeAsFileTime(&current); -#ifdef USE_PROMPT_CACHE_LIFETIME - khc_read_int32(csp_params, L"PromptCacheLifetime", &t); - if (t == 0) - t = 172800; /* 48 hours */ -#else - khc_read_int32(csp_params, L"MaxRenewLifetime", &t); - if (t == 0) - t = 2592000; /* 30 days */ - t += 604800; /* + 7 days */ -#endif - TimetToFileTimeInterval(t, &lifetime); - expiry = FtAdd(&current, &lifetime); - iexpiry = FtToInt(&expiry); - - khc_write_int64(csp_prcache, L"ExpiresOn", iexpiry); - } - } - - for(i=0; i < num_prompts; i++) { - wchar_t wprompt[KHUI_MAXCCH_PROMPT]; - - if(prompts[i].prompt) { - AnsiStrToUnicode(wprompt, sizeof(wprompt), - prompts[i].prompt); - } else { - wprompt[0] = 0; - } - - khui_cw_add_prompt( - nc, - (ptypes?ptypes[i]:0), - wprompt, - NULL, - (prompts[i].hidden?KHUI_NCPROMPT_FLAG_HIDDEN:0)); - - if (csp_prcache) { - khm_handle csp_p = NULL; - wchar_t wnum[8]; /* should be enough for 10 - million prompts */ - - wnum[0] = 0; - StringCbPrintf(wnum, sizeof(wnum), L"%d", i); - - khc_open_space(csp_prcache, wnum, - KHM_FLAG_CREATE, &csp_p); - - if (csp_p) { - khc_write_string(csp_p, L"Prompt", wprompt); - khc_write_int32(csp_p, L"Type", (ptypes?ptypes[i]:0)); - khc_write_int32(csp_p, L"Flags", - (prompts[i].hidden? - KHUI_NCPROMPT_FLAG_HIDDEN:0)); - - khc_close_space(csp_p); - } - } - } - - if (csp_prcache) { - khc_close_space(csp_prcache); - csp_prcache = NULL; - } - - _process_prompts: - /* switch back to main thread if we showed new prompts */ - if (new_prompts) - SwitchToFiber(k5_main_fiber); - - /* we get here after the user selects an action that either - cancles the credentials acquisition operation or triggers the - actual acquisition of credentials. */ - if(g_fjob.command != FIBER_CMD_CONTINUE && - g_fjob.command != FIBER_CMD_KINIT) { - code = KRB5_LIBOS_PWDINTR; - goto _exit; - } - - g_fjob.null_password = FALSE; - - /* otherwise, we need to get the data back from the UI and - return 0 */ - for(i=0; i<num_prompts; i++) { - krb5_data * d; - wchar_t wbuf[512]; - khm_size cbbuf; - size_t cch; - - d = prompts[i].reply; - - cbbuf = sizeof(wbuf); - if(KHM_SUCCEEDED(khui_cw_get_prompt_value(nc, i, wbuf, &cbbuf))) { - UnicodeStrToAnsi(d->data, d->length, wbuf); - if(SUCCEEDED(StringCchLengthA(d->data, d->length, &cch))) - d->length = (unsigned int) cch; - else - d->length = 0; - } else { -#ifdef DEBUG - assert(FALSE); -#endif - d->length = 0; - } - - if (ptypes && - ptypes[i] == KRB5_PROMPT_TYPE_PASSWORD && - d->length == 0) - - g_fjob.null_password = TRUE; - } - - _exit: - - g_fjob.prompt_set++; - - /* entering a NULL password is equivalent to cancelling out */ - if (g_fjob.null_password) - return KRB5_LIBOS_PWDINTR; - else - return code; -} - - -void -k5_read_dlg_params(k5_dlg_data * d, khm_handle identity) -{ - k5_params p; - - khm_krb5_get_identity_params(identity, &p); - - d->renewable = p.renewable; - d->forwardable = p.forwardable; - d->proxiable = p.proxiable; - d->addressless = p.addressless; - d->publicIP = p.publicIP; - - d->tc_lifetime.current = p.lifetime; - d->tc_lifetime.max = p.lifetime_max; - d->tc_lifetime.min = p.lifetime_min; - - d->tc_renew.current = p.renew_life; - d->tc_renew.max = p.renew_life_max; - d->tc_renew.min = p.renew_life_min; - - /* however, if this has externally supplied defaults, we have to - use them too. */ - if (d->nc && d->nc->ctx.vparam && - d->nc->ctx.cb_vparam == sizeof(NETID_DLGINFO)) { - LPNETID_DLGINFO pdlginfo; - - pdlginfo = (LPNETID_DLGINFO) d->nc->ctx.vparam; - if (pdlginfo->size == NETID_DLGINFO_V1_SZ && - pdlginfo->in.use_defaults == 0) { - d->forwardable = pdlginfo->in.forwardable; - d->addressless = pdlginfo->in.noaddresses; - d->tc_lifetime.current = pdlginfo->in.lifetime; - d->tc_renew.current = pdlginfo->in.renew_till; - - if (pdlginfo->in.renew_till == 0) - d->renewable = FALSE; - else - d->renewable = TRUE; - - d->proxiable = pdlginfo->in.proxiable; - d->publicIP = pdlginfo->in.publicip; - } - } - - /* once we read the new data, in, it is no longer considered - dirty */ - d->dirty = FALSE; - d->sync = FALSE; -} - -void -k5_ensure_identity_ccache_is_watched(khm_handle identity, char * ccache) -{ - /* if we used a FILE: ccache, we should add it to FileCCList. - Otherwise the tickets are not going to get listed. */ - do { - wchar_t thisccache[MAX_PATH]; - wchar_t * ccpath; - khm_size cb_cc; - wchar_t * mlist = NULL; - khm_size cb_mlist; - khm_int32 rv; - khm_size t; - - if (ccache != NULL && - strncmp(ccache, "FILE:", 5) != 0) - break; - - if (ccache == NULL) { - cb_cc = sizeof(thisccache); - rv = khm_krb5_get_identity_default_ccache(identity, thisccache, &cb_cc); -#ifdef DEBUG - assert(KHM_SUCCEEDED(rv)); -#endif - } else { - thisccache[0] = L'\0'; - AnsiStrToUnicode(thisccache, sizeof(thisccache), ccache); - } - - if (wcsncmp(thisccache, L"FILE:", 5)) - break; - - /* the FileCCList is a list of paths. We have to strip out - the FILE: prefix. */ - ccpath = thisccache + 5; - - _reportf(L"Checking if ccache [%s] is in FileCCList", ccpath); - - StringCbLength(ccpath, sizeof(thisccache) - sizeof(wchar_t) * 5, &cb_cc); - cb_cc += sizeof(wchar_t); - - rv = khc_read_multi_string(csp_params, L"FileCCList", NULL, &cb_mlist); - if (rv == KHM_ERROR_TOO_LONG && cb_mlist > sizeof(wchar_t) * 2) { - cb_mlist += cb_cc; - mlist = PMALLOC(cb_mlist); - - t = cb_mlist; - rv = khc_read_multi_string(csp_params, L"FileCCList", mlist, &t); -#ifdef DEBUG - assert(KHM_SUCCEEDED(rv)); -#endif - if (KHM_FAILED(rv)) - goto failed_filecclist; - - if (multi_string_find(mlist, ccpath, 0) == NULL) { - t = cb_mlist; - multi_string_append(mlist, &t, ccpath); - - khc_write_multi_string(csp_params, L"FileCCList", mlist); - _reportf(L"Added CCache to list"); - } else { - _reportf(L"The CCache is already in the list"); - } - } else { - cb_mlist = cb_cc + sizeof(wchar_t); - mlist = PMALLOC(cb_mlist); - - multi_string_init(mlist, cb_mlist); - t = cb_mlist; - multi_string_append(mlist, &t, ccpath); - - khc_write_multi_string(csp_params, L"FileCCList", mlist); - - _reportf(L"FileCCList was empty. Added CCache"); - } - - failed_filecclist: - - if (mlist) - PFREE(mlist); - - } while(FALSE); -} - -void -k5_write_dlg_params(k5_dlg_data * d, khm_handle identity, char * ccache) -{ - - k5_params p; - - ZeroMemory(&p, sizeof(p)); - - p.source_reg = K5PARAM_FM_ALL; /* we want to write all the - settings to the registry, if - necessary. */ - - p.renewable = d->renewable; - p.forwardable = d->forwardable; - p.proxiable = d->proxiable; - p.addressless = d->addressless; - p.publicIP = d->publicIP; - - p.lifetime = (krb5_deltat) d->tc_lifetime.current; - p.lifetime_max = (krb5_deltat) d->tc_lifetime.max; - p.lifetime_min = (krb5_deltat) d->tc_lifetime.min; - - p.renew_life = (krb5_deltat) d->tc_renew.current; - p.renew_life_max = (krb5_deltat) d->tc_renew.max; - p.renew_life_min = (krb5_deltat) d->tc_renew.min; - - khm_krb5_set_identity_params(identity, &p); - - k5_ensure_identity_ccache_is_watched(identity, ccache); - - /* as in k5_read_dlg_params, once we write the data in, the local - data is no longer dirty */ - d->dirty = FALSE; -} - -void -k5_free_kinit_job(void) -{ - if (g_fjob.principal) - PFREE(g_fjob.principal); - - if (g_fjob.password) - PFREE(g_fjob.password); - - if (g_fjob.identity) - kcdb_identity_release(g_fjob.identity); - - if (g_fjob.ccache) - PFREE(g_fjob.ccache); - - if (g_fjob.error_message) - PFREE(g_fjob.error_message); - - ZeroMemory(&g_fjob, sizeof(g_fjob)); -} - -void -k5_prep_kinit_job(khui_new_creds * nc) -{ - khui_new_creds_by_type * nct; - k5_dlg_data * d; - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - khm_size cbbuf; - size_t size; - khm_handle ident; - LPNETID_DLGINFO pdlginfo; - - khui_cw_find_type(nc, credtype_id_krb5, &nct); - if (!nct) - return; - - d = (k5_dlg_data *)(LONG_PTR) - GetWindowLongPtr(nct->hwnd_panel, DWLP_USER); - - if (!d) - return; - - khui_cw_lock_nc(nc); - ident = nc->identities[0]; - kcdb_identity_hold(ident); - khui_cw_unlock_nc(nc); - - cbbuf = sizeof(idname); - kcdb_identity_get_name(ident, idname, &cbbuf); - StringCchLength(idname, ARRAYLENGTH(idname), &size); - size++; - - k5_free_kinit_job(); - - g_fjob.command = FIBER_CMD_KINIT; - g_fjob.nc = nc; - g_fjob.nct = nct; - g_fjob.dialog = nct->hwnd_panel; - g_fjob.principal = PMALLOC(size); - UnicodeStrToAnsi(g_fjob.principal, size, idname); - g_fjob.password = NULL; - g_fjob.lifetime = (krb5_deltat) d->tc_lifetime.current; - g_fjob.forwardable = d->forwardable; - g_fjob.proxiable = d->proxiable; - g_fjob.renewable = d->renewable; - g_fjob.renew_life = (krb5_deltat) d->tc_renew.current; - g_fjob.addressless = d->addressless; - g_fjob.publicIP = d->publicIP; - g_fjob.code = 0; - g_fjob.identity = ident; - g_fjob.prompt_set = 0; - g_fjob.valid_principal = FALSE; - g_fjob.ccache = NULL; - g_fjob.retry_if_valid_principal = FALSE; - - /* the value for - retry_if_valid_principal is not - necessarily the correct value here, - but the correct value will be - assigned k5_kinit_fiber_proc(). */ - - /* if we have external parameters, we should use them as well */ - if (nc->ctx.cb_vparam == sizeof(NETID_DLGINFO) && - (pdlginfo = nc->ctx.vparam) && - pdlginfo->size == NETID_DLGINFO_V1_SZ) { - wchar_t * t; - - if (pdlginfo->in.ccache[0] && - SUCCEEDED(StringCchLength(pdlginfo->in.ccache, - NETID_CCACHE_NAME_SZ, - &size))) { - g_fjob.ccache = PMALLOC(sizeof(char) * (size + 1)); -#ifdef DEBUG - assert(g_fjob.ccache); -#endif - UnicodeStrToAnsi(g_fjob.ccache, size + 1, - pdlginfo->in.ccache); - - /* this is the same as the output cache */ - - StringCbCopy(pdlginfo->out.ccache, sizeof(pdlginfo->out.ccache), - pdlginfo->in.ccache); - } else { - wchar_t ccache[MAX_PATH]; - - g_fjob.ccache = NULL; - size = sizeof(ccache); - - khm_krb5_get_identity_default_ccache(ident, ccache, &size); - - StringCbCopy(pdlginfo->out.ccache, sizeof(pdlginfo->out.ccache), - ccache); - } - - t = khm_get_realm_from_princ(idname); - - if (t) { - StringCbCopy(pdlginfo->out.realm, - sizeof(pdlginfo->out.realm), - t); - - if ((t - idname) > 1) { - StringCchCopyN(pdlginfo->out.username, - ARRAYLENGTH(pdlginfo->out.username), - idname, - (t - idname) - 1); - } else { - StringCbCopy(pdlginfo->out.username, - sizeof(pdlginfo->out.username), - L""); - } - } else { - StringCbCopy(pdlginfo->out.username, - sizeof(pdlginfo->out.username), - idname); - StringCbCopy(pdlginfo->out.realm, - sizeof(pdlginfo->out.realm), - L""); - } - } - - /* leave identity held, since we added a reference above */ -} - -static khm_int32 KHMAPI -k5_find_tgt_filter(khm_handle cred, - khm_int32 flags, - void * rock) { - khm_handle ident = (khm_handle) rock; - khm_handle cident = NULL; - khm_int32 f; - khm_int32 rv; - - if (KHM_SUCCEEDED(kcdb_cred_get_identity(cred, - &cident)) && - cident == ident && - KHM_SUCCEEDED(kcdb_cred_get_flags(cred, &f)) && - (f & KCDB_CRED_FLAG_INITIAL) && - !(f & KCDB_CRED_FLAG_EXPIRED)) - rv = 1; - else - rv = 0; - - if (cident) - kcdb_identity_release(cident); - - return rv; -} - -khm_int32 -k5_remove_from_LRU(khm_handle identity) -{ - wchar_t * wbuf = NULL; - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - khm_size cb; - khm_size cb_ms; - khm_int32 rv = KHM_ERROR_SUCCESS; - - cb = sizeof(idname); - rv = kcdb_identity_get_name(identity, idname, &cb); - assert(rv == KHM_ERROR_SUCCESS); - - rv = khc_read_multi_string(csp_params, L"LRUPrincipals", NULL, &cb_ms); - if (rv != KHM_ERROR_TOO_LONG) - cb_ms = sizeof(wchar_t) * 2; - - wbuf = PMALLOC(cb_ms); - assert(wbuf); - - cb = cb_ms; - - if (rv == KHM_ERROR_TOO_LONG) { - rv = khc_read_multi_string(csp_params, L"LRUPrincipals", wbuf, &cb); - assert(KHM_SUCCEEDED(rv)); - - if (multi_string_find(wbuf, idname, KHM_CASE_SENSITIVE) != NULL) { - multi_string_delete(wbuf, idname, KHM_CASE_SENSITIVE); - } - } else { - multi_string_init(wbuf, cb_ms); - } - - rv = khc_write_multi_string(csp_params, L"LRUPrincipals", wbuf); - - if (wbuf) - PFREE(wbuf); - - return rv; -} - -khm_int32 -k5_update_LRU(khm_handle identity) -{ - wchar_t * wbuf = NULL; - wchar_t * idname = NULL; - wchar_t * realm = NULL; - khm_size cb; - khm_size cb_ms; - khm_int32 rv = KHM_ERROR_SUCCESS; - - rv = kcdb_identity_get_name(identity, NULL, &cb); - assert(rv == KHM_ERROR_TOO_LONG); - - idname = PMALLOC(cb); - assert(idname); - - rv = kcdb_identity_get_name(identity, idname, &cb); - assert(KHM_SUCCEEDED(rv)); - - rv = khc_read_multi_string(csp_params, L"LRUPrincipals", NULL, &cb_ms); - if (rv != KHM_ERROR_TOO_LONG) - cb_ms = cb + sizeof(wchar_t); - else - cb_ms += cb + sizeof(wchar_t); - - wbuf = PMALLOC(cb_ms); - assert(wbuf); - - cb = cb_ms; - - if (rv == KHM_ERROR_TOO_LONG) { - rv = khc_read_multi_string(csp_params, L"LRUPrincipals", wbuf, &cb); - assert(KHM_SUCCEEDED(rv)); - - if (multi_string_find(wbuf, idname, KHM_CASE_SENSITIVE) != NULL) { - /* it's already there. We remove it here and add it at - the top of the LRU list. */ - multi_string_delete(wbuf, idname, KHM_CASE_SENSITIVE); - } - } else { - multi_string_init(wbuf, cb_ms); - } - - cb = cb_ms; - rv = multi_string_prepend(wbuf, &cb, idname); - assert(KHM_SUCCEEDED(rv)); - - rv = khc_write_multi_string(csp_params, L"LRUPrincipals", wbuf); - - realm = khm_get_realm_from_princ(idname); - if (realm == NULL || *realm == L'\0') - goto _done_with_LRU; - - cb = cb_ms; - rv = khc_read_multi_string(csp_params, L"LRURealms", wbuf, &cb); - - if (rv == KHM_ERROR_TOO_LONG) { - PFREE(wbuf); - wbuf = PMALLOC(cb); - assert(wbuf); - - cb_ms = cb; - - rv = khc_read_multi_string(csp_params, L"LRURealms", wbuf, &cb); - - assert(KHM_SUCCEEDED(rv)); - } else if (rv == KHM_ERROR_SUCCESS) { - if (multi_string_find(wbuf, realm, KHM_CASE_SENSITIVE) != NULL) { - /* remove the realm and add it at the top later. */ - multi_string_delete(wbuf, realm, KHM_CASE_SENSITIVE); - } - } else { - multi_string_init(wbuf, cb_ms); - } - - cb = cb_ms; - rv = multi_string_prepend(wbuf, &cb, realm); - - if (rv == KHM_ERROR_TOO_LONG) { - wbuf = PREALLOC(wbuf, cb); - - rv = multi_string_prepend(wbuf, &cb, realm); - - assert(KHM_SUCCEEDED(rv)); - } - - rv = khc_write_multi_string(csp_params, L"LRURealms", wbuf); - - assert(KHM_SUCCEEDED(rv)); - - _done_with_LRU: - - if (wbuf) - PFREE(wbuf); - if (idname) - PFREE(idname); - - return rv; -} - -/* Handler for CRED type messages - - Runs in the context of the Krb5 plugin -*/ -khm_int32 KHMAPI -k5_msg_cred_dialog(khm_int32 msg_type, - khm_int32 msg_subtype, - khm_ui_4 uparam, - void * vparam) -{ - khm_int32 rv = KHM_ERROR_SUCCESS; - - switch(msg_subtype) { - - case KMSG_CRED_PASSWORD: - case KMSG_CRED_NEW_CREDS: - { - khui_new_creds * nc; - khui_new_creds_by_type * nct; - wchar_t wbuf[256]; - size_t cbsize; - - nc = (khui_new_creds *) vparam; - - nct = PMALLOC(sizeof(*nct)); - ZeroMemory(nct, sizeof(*nct)); - - nct->type = credtype_id_krb5; - nct->ordinal = 1; - - LoadString(hResModule, IDS_KRB5_NC_NAME, - wbuf, ARRAYLENGTH(wbuf)); - StringCbLength(wbuf, sizeof(wbuf), &cbsize); - cbsize += sizeof(wchar_t); - - nct->name = PMALLOC(cbsize); - StringCbCopy(nct->name, cbsize, wbuf); - - nct->h_module = hResModule; - nct->dlg_proc = k5_nc_dlg_proc; - if (nc->subtype == KMSG_CRED_PASSWORD) - nct->dlg_template = MAKEINTRESOURCE(IDD_NC_KRB5_PASSWORD); - else - nct->dlg_template = MAKEINTRESOURCE(IDD_NC_KRB5); - - khui_cw_add_type(nc, nct); - } - break; - - case KMSG_CRED_RENEW_CREDS: - { - khui_new_creds * nc; - khui_new_creds_by_type * nct; - - nc = (khui_new_creds *) vparam; - - nct = PMALLOC(sizeof(*nct)); - ZeroMemory(nct, sizeof(*nct)); - - nct->type = credtype_id_krb5; - - khui_cw_add_type(nc, nct); - } - break; - - case KMSG_CRED_DIALOG_PRESTART: - { - khui_new_creds * nc; - khui_new_creds_by_type * nct; - k5_dlg_data * d; - HWND hwnd; - wchar_t * realms; - wchar_t * t; - wchar_t * defrealm; - - nc = (khui_new_creds *) vparam; - - khui_cw_find_type(nc, credtype_id_krb5, &nct); - - if(!nct) - break; - - hwnd = nct->hwnd_panel; - d = (k5_dlg_data *)(LONG_PTR) - GetWindowLongPtr(nct->hwnd_panel, DWLP_USER); - - /* this can be NULL if the dialog was closed while the - plug-in thread was processing. */ - if (d == NULL) - break; - - if (!is_k5_identpro) { - - /* enumerate all realms and place in realms combo box */ - SendDlgItemMessage(hwnd, IDC_NCK5_REALM, - CB_RESETCONTENT, - 0, 0); - - realms = khm_krb5_get_realm_list(); - if(realms) { - for (t = realms; t && *t; t = multi_string_next(t)) { - SendDlgItemMessage(hwnd, IDC_NCK5_REALM, - CB_ADDSTRING, - 0, (LPARAM) t); - } - PFREE(realms); - } - - /* and set the default realm */ - defrealm = khm_krb5_get_default_realm(); - if(defrealm) { - SendDlgItemMessage(hwnd, IDC_NCK5_REALM, - CB_SELECTSTRING, - (WPARAM) -1, - (LPARAM) defrealm); - - SendDlgItemMessage(hwnd, IDC_NCK5_REALM, - WM_SETTEXT, - 0, (LPARAM) defrealm); - PFREE(defrealm); - } - } else { /* if krb5 is the identity provider */ - HWND hw_realms; - - /* in this case, the realm selection is done by the - identity provider prompts. */ - - hw_realms = GetDlgItem(hwnd, IDC_NCK5_REALM); -#ifdef DEBUG - assert(hw_realms); -#endif - EnableWindow(hw_realms, FALSE); - } - - if (nc->subtype == KMSG_CRED_NEW_CREDS) { - k5_read_dlg_params(d, NULL); - } - - PostMessage(hwnd, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0,WMNC_DIALOG_SETUP), 0); - } - break; - - case KMSG_CRED_DIALOG_NEW_IDENTITY: - { - khui_new_creds * nc; - khui_new_creds_by_type * nct; - k5_dlg_data * d; - - nc = (khui_new_creds *) vparam; - - khui_cw_find_type(nc, credtype_id_krb5, &nct); - if (!nct) - break; - - d = (k5_dlg_data *)(LONG_PTR) - GetWindowLongPtr(nct->hwnd_panel, DWLP_USER); - - if (d == NULL) - break; - - /* we only load the identity specific defaults if the user - hasn't changed the options */ - khui_cw_lock_nc(nc); - - /* ?: It might be better to not load identity defaults if - the user has already changed options in the dialog. */ - if(/* !d->dirty && */ nc->n_identities > 0 && - nc->subtype == KMSG_CRED_NEW_CREDS) { - - k5_read_dlg_params(d, nc->identities[0]); - - PostMessage(nct->hwnd_panel, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0,WMNC_DIALOG_SETUP), 0); - } - - khui_cw_unlock_nc(nc); - - /* reset the force-password-change flag if this is a new - identity. */ - d->pwd_change = FALSE; - } - - /* fallthrough */ - case KMSG_CRED_DIALOG_NEW_OPTIONS: - { - khui_new_creds * nc; - khui_new_creds_by_type * nct; - k5_dlg_data * d; - - nc = (khui_new_creds *) vparam; - - khui_cw_find_type(nc, credtype_id_krb5, &nct); - if (!nct) - break; - - d = (k5_dlg_data *)(LONG_PTR) - GetWindowLongPtr(nct->hwnd_panel, DWLP_USER); - if (d == NULL) - break; - - if (nc->subtype == KMSG_CRED_PASSWORD) { - khm_size n_prompts = 0; - - khui_cw_get_prompt_count(nc, &n_prompts); - - if (nc->n_identities == 0) { - if (n_prompts) - khui_cw_clear_prompts(nc); - } else if (n_prompts != 3) { - wchar_t wbuf[KHUI_MAXCCH_BANNER]; - - khui_cw_clear_prompts(nc); - - LoadString(hResModule, IDS_NC_PWD_BANNER, - wbuf, ARRAYLENGTH(wbuf)); - khui_cw_begin_custom_prompts(nc, 3, NULL, wbuf); - - LoadString(hResModule, IDS_NC_PWD_PWD, - wbuf, ARRAYLENGTH(wbuf)); - khui_cw_add_prompt(nc, KHUI_NCPROMPT_TYPE_PASSWORD, - wbuf, NULL, KHUI_NCPROMPT_FLAG_HIDDEN); - - LoadString(hResModule, IDS_NC_PWD_NPWD, - wbuf, ARRAYLENGTH(wbuf)); - khui_cw_add_prompt(nc, KHUI_NCPROMPT_TYPE_NEW_PASSWORD, - wbuf, NULL, KHUI_NCPROMPT_FLAG_HIDDEN); - - LoadString(hResModule, IDS_NC_PWD_NPWD_AGAIN, - wbuf, ARRAYLENGTH(wbuf)); - khui_cw_add_prompt(nc, KHUI_NCPROMPT_TYPE_NEW_PASSWORD_AGAIN, - wbuf, NULL, KHUI_NCPROMPT_FLAG_HIDDEN); - } - - return KHM_ERROR_SUCCESS; - } - /* else; nc->subtype == KMSG_CRED_NEW_CREDS */ - - assert(nc->subtype == KMSG_CRED_NEW_CREDS); - - /* If we are forcing a password change, then we don't do - anything here. Note that if the identity changed, then - this field would have been reset, so we would proceed - as usual. */ - if (d->pwd_change) - return KHM_ERROR_SUCCESS; - -#if 0 - /* Clearing the prompts at this point is a bad idea since - the prompter depends on the prompts to know if this set - of prompts is the same as the new set and if so, use - the values entered in the old prompts as responses to - the new one. */ - khui_cw_clear_prompts(nc); -#endif - - /* if the fiber is already in a kinit, cancel it */ - if(g_fjob.state == FIBER_STATE_KINIT) { - khm_boolean clear_prompts = TRUE; - - khui_cw_lock_nc(nc); - if (nc->n_identities > 0 && - kcdb_identity_is_equal(nc->identities[0], g_fjob.identity)) { - clear_prompts = FALSE; - } - khui_cw_unlock_nc(nc); - - g_fjob.command = FIBER_CMD_CANCEL; - SwitchToFiber(k5_kinit_fiber); - /* we get here when the cancel operation completes */ - k5_free_kinit_job(); - - if (clear_prompts) - khui_cw_clear_prompts(nc); - } - - khui_cw_lock_nc(nc); - - if(nc->n_identities > 0) { - khm_handle ident = nc->identities[0]; - - kcdb_identity_hold(ident); - - k5_prep_kinit_job(nc); - - /* after the switch to the fiber, the dialog will be - back in sync with the kinit thread. */ - d->sync = TRUE; - - khui_cw_unlock_nc(nc); - - SwitchToFiber(k5_kinit_fiber); - /* we get here when the fiber switches back */ - if(g_fjob.state == FIBER_STATE_NONE) { - wchar_t msg[KHUI_MAXCCH_BANNER]; - khm_size cb; - int code; - - code = g_fjob.code; - - /* Special case. If the users' password has - expired, we force a password change dialog on - top of the new credentials dialog using a set - of custom prompts, but only if we are the - identity provider. */ - if (g_fjob.code == KRB5KDC_ERR_KEY_EXP && - is_k5_identpro) { - - k5_force_password_change(d); - goto done_with_bad_princ; - - } - - if(g_fjob.code == KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN && - is_k5_identpro) { - kcdb_identity_set_flags(ident, - KCDB_IDENT_FLAG_INVALID, - KCDB_IDENT_FLAG_INVALID); - - khui_cw_clear_prompts(nc); - } - - if (d->cred_message) { - PFREE(d->cred_message); - d->cred_message = NULL; - } - - if (g_fjob.error_message) { - StringCbCopy(msg, sizeof(msg), g_fjob.error_message); - goto have_message; - } - - msg[0] = L'\0'; - - switch(g_fjob.code) { - case 0: - /* we succeeded. This can actually happen if - there was an external program that prompted - for credentials. */ - break; - - case KRB5KDC_ERR_NAME_EXP: - /* principal expired */ - LoadString(hResModule, IDS_K5ERR_NAME_EXPIRED, - msg, ARRAYLENGTH(msg)); - break; - - case KRB5KDC_ERR_KEY_EXP: - { - /* password needs changing. */ - LoadString(hResModule, IDS_K5ERR_KEY_EXPIRED, - msg, ARRAYLENGTH(msg)); - } - break; - - default: - { - DWORD dw_dummy; - kherr_suggestion sug_dummy; - wchar_t fmt[KHUI_MAXCCH_BANNER]; - wchar_t desc[KHUI_MAXCCH_BANNER]; - - LoadString(hResModule, IDS_K5ERR_FMT, - fmt, ARRAYLENGTH(fmt)); - - khm_err_describe(g_fjob.code, - desc, - sizeof(desc), - &dw_dummy, - &sug_dummy); - - StringCbPrintf(msg, sizeof(msg), fmt, desc); - } - } - - have_message: - - if (msg[0]) { - StringCbLength(msg, sizeof(msg), &cb); - cb += sizeof(wchar_t); - - d->cred_message = PMALLOC(cb); - StringCbCopy(d->cred_message, cb, msg); - } - - done_with_bad_princ: - - k5_free_kinit_job(); - - if (is_k5_identpro) { - if (code == 0) - kcdb_identity_set_flags(ident, - KCDB_IDENT_FLAG_VALID, - KCDB_IDENT_FLAG_VALID); - else - kcdb_identity_set_flags(ident, - KCDB_IDENT_FLAG_UNKNOWN, - KCDB_IDENT_FLAG_UNKNOWN); - } - - } else if(g_fjob.state == FIBER_STATE_KINIT) { - /* this is what we want. Leave the fiber there. */ - - if(is_k5_identpro) - kcdb_identity_set_flags(ident, - KCDB_IDENT_FLAG_VALID, - KCDB_IDENT_FLAG_VALID); - } else { - /* huh?? */ -#ifdef DEBUG - assert(FALSE); -#endif - } - - /* since the attributes of the identity have changed, - we should update the cred text as well */ - kcdb_identity_release(ident); - khui_cw_lock_nc(nc); - PostMessage(nc->hwnd, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_UPDATE_CREDTEXT), 0); - } else { - khui_cw_unlock_nc(nc); - khui_cw_clear_prompts(nc); - khui_cw_lock_nc(nc); - } - - khui_cw_unlock_nc(nc); - } - break; - - case KMSG_CRED_PROCESS: - { - khui_new_creds * nc; - khui_new_creds_by_type * nct; - k5_dlg_data * d; - - khm_int32 r = 0; - - nc = (khui_new_creds *) vparam; - - khui_cw_find_type(nc, credtype_id_krb5, &nct); - - if(!nct) - break; - - /* reset the null_password flag, just in case */ - g_fjob.null_password = FALSE; - - if (nc->subtype == KMSG_CRED_NEW_CREDS) { - d = (k5_dlg_data *) nct->aux; - if (d == NULL) - break; - - if (d->pwd_change) { - /* we are forcing a password change */ - goto change_password; - } - - _begin_task(0); - _report_mr0(KHERR_NONE, MSG_CTX_INITAL_CREDS); - _describe(); - - if (g_fjob.state == FIBER_STATE_KINIT) { - if(nc->result == KHUI_NC_RESULT_CANCEL) { - g_fjob.command = FIBER_CMD_CANCEL; - SwitchToFiber(k5_kinit_fiber); - - /* if we cancelled out, then we shouldn't care - about the return code. */ -#ifdef DEBUG - assert(g_fjob.state == FIBER_STATE_NONE); -#endif - g_fjob.code = 0; - - _reportf(L"Cancelling"); - } else if (nc->result == KHUI_NC_RESULT_PROCESS) { - khui_cw_sync_prompt_values(nc); - g_fjob.command = FIBER_CMD_CONTINUE; - SwitchToFiber(k5_kinit_fiber); - - /* We get back here once the fiber finishes - processing */ -#ifdef DEBUG - } else { - assert(FALSE); -#endif - } - } else { - /* we weren't in a KINIT state */ - if (nc->result == KHUI_NC_RESULT_CANCEL) { - /* nothing to report */ - g_fjob.code = 0; - } else if (nc->result == KHUI_NC_RESULT_PROCESS) { - /* g_fjob.code should have the result of the - last kinit attempt. We should leave it - as-is */ -#ifdef DEBUG - } else { - /* unknown result */ - assert(FALSE); -#endif - } - } - - /* special case: if there was no password entered, and - if there is a valid TGT we allow the credential - acquisition to go through */ - if (g_fjob.state == FIBER_STATE_NONE && - g_fjob.code && - g_fjob.null_password && - - (nc->n_identities == 0 || - nc->identities[0] == NULL || - KHM_SUCCEEDED(kcdb_credset_find_filtered - (NULL, - -1, - k5_find_tgt_filter, - nc->identities[0], - NULL, - NULL)))) { - _reportf(L"No password entered, but a valid TGT exists. Continuing"); - g_fjob.code = 0; - } else if (g_fjob.state == FIBER_STATE_NONE && - g_fjob.code == 0 && - nc->n_identities > 0 && - nc->identities[0] != NULL) { - - /* we had a password and we used it to get - tickets. We should reset the IMPORTED flag now - since the tickets are not imported. */ - - khm_krb5_set_identity_flags(nc->identities[0], - K5IDFLAG_IMPORTED, - 0); - } - - if(g_fjob.code != 0) { - wchar_t tbuf[1024]; - DWORD suggestion = 0; - kherr_suggestion suggest_code; - - if (g_fjob.error_message) { - StringCbCopy(tbuf, sizeof(tbuf), g_fjob.error_message); - } else { - khm_err_describe(g_fjob.code, tbuf, sizeof(tbuf), - &suggestion, &suggest_code); - } - - _report_cs0(KHERR_ERROR, tbuf); - if (suggestion != 0) - _suggest_mr(suggestion, suggest_code); - - _resolve(); - - r = KHUI_NC_RESPONSE_FAILED; - - if (suggest_code == KHERR_SUGGEST_RETRY) { - r |= KHUI_NC_RESPONSE_NOEXIT | - KHUI_NC_RESPONSE_PENDING; - } - -#ifdef DEBUG - assert(g_fjob.state == FIBER_STATE_NONE); -#endif - - if (g_fjob.valid_principal && - nc->n_identities > 0 && - nc->identities[0]) { - /* the principal was valid, so we can go ahead - and update the LRU */ - k5_update_LRU(nc->identities[0]); - } - - } else if (nc->result == KHUI_NC_RESULT_PROCESS && - g_fjob.state == FIBER_STATE_NONE) { - krb5_context ctx = NULL; - - _reportf(L"Tickets successfully acquired"); - - r = KHUI_NC_RESPONSE_SUCCESS | - KHUI_NC_RESPONSE_EXIT; - - /* if we successfully obtained credentials, we - should save the current settings in the - identity config space */ - - assert(nc->n_identities > 0); - assert(nc->identities[0]); - - k5_write_dlg_params(d, nc->identities[0], g_fjob.ccache); - - /* We should also quickly refresh the credentials - so that the identity flags and ccache - properties reflect the current state of - affairs. This has to be done here so that - other credentials providers which depend on - Krb5 can properly find the initial creds to - obtain their respective creds. */ - - khm_krb5_list_tickets(&ctx); - - if (nc->set_default) { - _reportf(L"Setting default identity"); - kcdb_identity_set_default(nc->identities[0]); - } - - /* If there is no default identity, then make this the default */ - kcdb_identity_refresh(nc->identities[0]); - { - khm_handle tdefault = NULL; - - if (KHM_SUCCEEDED(kcdb_identity_get_default(&tdefault))) { - kcdb_identity_release(tdefault); - } else { - _reportf(L"There was no default identity. Setting default"); - kcdb_identity_set_default(nc->identities[0]); - } - } - - /* and update the LRU */ - k5_update_LRU(nc->identities[0]); - - if (ctx != NULL) - pkrb5_free_context(ctx); - } else if (g_fjob.state == FIBER_STATE_NONE) { - /* the user cancelled the operation */ - r = KHUI_NC_RESPONSE_EXIT | - KHUI_NC_RESPONSE_SUCCESS; - } - - if(g_fjob.state == FIBER_STATE_NONE) { - khui_cw_set_response(nc, credtype_id_krb5, r); - - if (r & KHUI_NC_RESPONSE_NOEXIT) { - /* if we are retrying the call, we should - restart the kinit fiber */ -#ifdef DEBUG - assert(r & KHUI_NC_RESPONSE_PENDING); -#endif - - k5_prep_kinit_job(nc); - SwitchToFiber(k5_kinit_fiber); - } else { - /* free up the fiber data fields. */ - k5_free_kinit_job(); - } - } else { - khui_cw_set_response(nc, credtype_id_krb5, - KHUI_NC_RESPONSE_NOEXIT | - KHUI_NC_RESPONSE_PENDING | r); - } - - _end_task(); - } else if (nc->subtype == KMSG_CRED_RENEW_CREDS) { - - FILETIME ftidexp = {0,0}; - FILETIME ftcurrent; - khm_size cb; - - GetSystemTimeAsFileTime(&ftcurrent); - - _begin_task(0); - _report_mr0(KHERR_NONE, MSG_CTX_RENEW_CREDS); - _describe(); - - if (nc->ctx.scope == KHUI_SCOPE_IDENT || - (nc->ctx.scope == KHUI_SCOPE_CREDTYPE && - nc->ctx.cred_type == credtype_id_krb5) || - (nc->ctx.scope == KHUI_SCOPE_CRED && - nc->ctx.cred_type == credtype_id_krb5)) { - int code; - - if (nc->ctx.scope == KHUI_SCOPE_CRED && - nc->ctx.cred != NULL) { - - /* get the expiration time for the identity first. */ - cb = sizeof(ftidexp); -#ifdef DEBUG - assert(nc->ctx.identity != NULL); -#endif - kcdb_identity_get_attr(nc->ctx.identity, - KCDB_ATTR_EXPIRE, - NULL, - &ftidexp, - &cb); - - code = khm_krb5_renew_cred(nc->ctx.cred); - - } else if (nc->ctx.scope == KHUI_SCOPE_IDENT && - nc->ctx.identity != 0) { - /* get the current identity expiration time */ - cb = sizeof(ftidexp); - - kcdb_identity_get_attr(nc->ctx.identity, - KCDB_ATTR_EXPIRE, - NULL, - &ftidexp, - &cb); - - code = khm_krb5_renew_ident(nc->ctx.identity); - } else { - - _reportf(L"No identity specified. Can't renew Kerberos tickets"); - - code = 1; /* it just has to be non-zero */ - } - - if (code == 0) { - _reportf(L"Tickets successfully renewed"); - - khui_cw_set_response(nc, credtype_id_krb5, - KHUI_NC_RESPONSE_EXIT | - KHUI_NC_RESPONSE_SUCCESS); - } else if (nc->ctx.identity == 0) { - - _report_mr0(KHERR_ERROR, MSG_ERR_NO_IDENTITY); - - khui_cw_set_response(nc, credtype_id_krb5, - KHUI_NC_RESPONSE_EXIT | - KHUI_NC_RESPONSE_FAILED); - } else if (CompareFileTime(&ftcurrent, &ftidexp) < 0) { - wchar_t tbuf[1024]; - DWORD suggestion; - kherr_suggestion sug_id; - - /* if we failed to get new tickets, but the - identity is still valid, then we assume that - the current tickets are still good enough - for other credential types to obtain their - credentials. */ - - khm_err_describe(code, tbuf, sizeof(tbuf), - &suggestion, &sug_id); - - _report_cs0(KHERR_WARNING, tbuf); - if (suggestion) - _suggest_mr(suggestion, sug_id); - - _resolve(); - - khui_cw_set_response(nc, credtype_id_krb5, - KHUI_NC_RESPONSE_EXIT | - KHUI_NC_RESPONSE_SUCCESS); - } else { - wchar_t tbuf[1024]; - DWORD suggestion; - kherr_suggestion sug_id; - - khm_err_describe(code, tbuf, sizeof(tbuf), - &suggestion, &sug_id); - - _report_cs0(KHERR_ERROR, tbuf); - if (suggestion) - _suggest_mr(suggestion, sug_id); - - _resolve(); - - khui_cw_set_response(nc, credtype_id_krb5, - ((sug_id == KHERR_SUGGEST_RETRY)?KHUI_NC_RESPONSE_NOEXIT:KHUI_NC_RESPONSE_EXIT) | - KHUI_NC_RESPONSE_FAILED); - } - } else { - khui_cw_set_response(nc, credtype_id_krb5, - KHUI_NC_RESPONSE_EXIT | - KHUI_NC_RESPONSE_SUCCESS); - } - - _end_task(); - } else if (nc->subtype == KMSG_CRED_PASSWORD && - nc->result == KHUI_NC_RESULT_PROCESS) { - - change_password: - /* we jump here if there was a password change forced */ - - _begin_task(0); - _report_mr0(KHERR_NONE, MSG_CTX_PASSWD); - _describe(); - - khui_cw_lock_nc(nc); - - if (nc->result == KHUI_NC_RESULT_CANCEL) { - - khui_cw_set_response(nc, credtype_id_krb5, - KHUI_NC_RESPONSE_SUCCESS | - KHUI_NC_RESPONSE_EXIT); - - } else if (nc->n_identities == 0 || - nc->identities[0] == NULL) { - _report_mr0(KHERR_ERROR, MSG_PWD_NO_IDENTITY); - _suggest_mr(MSG_PWD_S_NO_IDENTITY, KHERR_SUGGEST_RETRY); - - khui_cw_set_response(nc, credtype_id_krb5, - KHUI_NC_RESPONSE_FAILED | - KHUI_NC_RESPONSE_NOEXIT); - - } else { - wchar_t widname[KCDB_IDENT_MAXCCH_NAME]; - char idname[KCDB_IDENT_MAXCCH_NAME]; - wchar_t wpwd[KHUI_MAXCCH_PASSWORD]; - char pwd[KHUI_MAXCCH_PASSWORD]; - wchar_t wnpwd[KHUI_MAXCCH_PASSWORD]; - char npwd[KHUI_MAXCCH_PASSWORD]; - wchar_t wnpwd2[KHUI_MAXCCH_PASSWORD]; - wchar_t * wresult; - char * result; - khm_size n_prompts = 0; - khm_size cb; - khm_int32 rv = KHM_ERROR_SUCCESS; - long code = 0; - khm_handle ident; - - khui_cw_get_prompt_count(nc, &n_prompts); - assert(n_prompts == 3); - - ident = nc->identities[0]; - cb = sizeof(widname); - rv = kcdb_identity_get_name(ident, widname, &cb); - if (KHM_FAILED(rv)) { -#ifdef DEBUG - assert(FALSE); -#endif - _report_mr0(KHERR_ERROR, MSG_PWD_UNKNOWN); - goto _pwd_exit; - } - - cb = sizeof(wpwd); - rv = khui_cw_get_prompt_value(nc, 0, wpwd, &cb); - if (KHM_FAILED(rv)) { -#ifdef DEBUG - assert(FALSE); -#endif - _report_mr0(KHERR_ERROR, MSG_PWD_UNKNOWN); - goto _pwd_exit; - } - - cb = sizeof(wnpwd); - rv = khui_cw_get_prompt_value(nc, 1, wnpwd, &cb); - if (KHM_FAILED(rv)) { -#ifdef DEBUG - assert(FALSE); -#endif - _report_mr0(KHERR_ERROR, MSG_PWD_UNKNOWN); - goto _pwd_exit; - } - - cb = sizeof(wnpwd2); - rv = khui_cw_get_prompt_value(nc, 2, wnpwd2, &cb); - if (KHM_FAILED(rv)) { -#ifdef DEBUG - assert(FALSE); -#endif - _report_mr0(KHERR_ERROR, MSG_PWD_UNKNOWN); - goto _pwd_exit; - } - - if (wcscmp(wnpwd, wnpwd2)) { - rv = KHM_ERROR_INVALID_PARAM; - _report_mr0(KHERR_ERROR, MSG_PWD_NOT_SAME); - _suggest_mr(MSG_PWD_S_NOT_SAME, KHERR_SUGGEST_INTERACT); - goto _pwd_exit; - } - - if (!wcscmp(wpwd, wnpwd)) { - rv = KHM_ERROR_INVALID_PARAM; - _report_mr0(KHERR_ERROR, MSG_PWD_SAME); - _suggest_mr(MSG_PWD_S_SAME, KHERR_SUGGEST_INTERACT); - goto _pwd_exit; - } - - UnicodeStrToAnsi(idname, sizeof(idname), widname); - UnicodeStrToAnsi(pwd, sizeof(pwd), wpwd); - UnicodeStrToAnsi(npwd, sizeof(npwd), wnpwd); - - result = NULL; - - code = khm_krb5_changepwd(idname, - pwd, - npwd, - &result); - - if (code) - rv = KHM_ERROR_UNKNOWN; - else { - khm_handle csp_idcfg = NULL; - krb5_context ctx = NULL; - - /* we set a new password. now we need to get - initial credentials. */ - - d = (k5_dlg_data *) nct->aux; - - if (d == NULL) { - rv = KHM_ERROR_UNKNOWN; - goto _pwd_exit; - } - - if (nc->subtype == KMSG_CRED_PASSWORD) { - /* since this was just a password change, - we need to load new credentials options - from the configuration store. */ - - k5_read_dlg_params(d, nc->identities[0]); - } - - /* the password change phase is now done */ - d->pwd_change = FALSE; - -#ifdef DEBUG - _reportf(L"Calling khm_krb5_kinit()"); -#endif - code = khm_krb5_kinit(NULL, /* context (create one) */ - idname, /* principal_name */ - npwd, /* new password */ - NULL, /* ccache name (figure out the identity cc)*/ - (krb5_deltat) d->tc_lifetime.current, - d->forwardable, - d->proxiable, - (krb5_deltat)((d->renewable)?d->tc_renew.current:0), - d->addressless, /* addressless */ - d->publicIP, /* public IP */ - NULL, /* prompter */ - NULL, /* prompter data */ - NULL /* error message */); - - if (code) { - rv = KHM_ERROR_UNKNOWN; - goto _pwd_exit; - } - - /* save the settings that we used for - obtaining the ticket. */ - if (nc->subtype == KMSG_CRED_NEW_CREDS) { - - k5_write_dlg_params(d, nc->identities[0], NULL); - - /* and then update the LRU too */ - k5_update_LRU(nc->identities[0]); - } - - /* and do a quick refresh of the krb5 tickets - so that other plug-ins that depend on krb5 - can look up tickets inside NetIDMgr */ - khm_krb5_list_tickets(&ctx); - - /* if there was no default identity, we make - this one the default. */ - kcdb_identity_refresh(nc->identities[0]); - { - khm_handle tdefault = NULL; - - if (KHM_SUCCEEDED(kcdb_identity_get_default(&tdefault))) { - kcdb_identity_release(tdefault); - } else { - _reportf(L"There was no default identity. Setting defualt"); - kcdb_identity_set_default(nc->identities[0]); - } - } - - if (ctx != NULL) - pkrb5_free_context(ctx); - - if (nc->subtype == KMSG_CRED_PASSWORD) { - /* if we obtained new credentials as a - result of successfully changing the - password, we also schedule an identity - renewal for this identity. This allows - the other credential types to obtain - credentials for this identity. */ - khui_action_context ctx; - - _reportf(L"Scheduling renewal of [%s] after password change", - widname); - - khui_context_create(&ctx, - KHUI_SCOPE_IDENT, - nc->identities[0], - KCDB_CREDTYPE_INVALID, - NULL); - khui_action_trigger(KHUI_ACTION_RENEW_CRED, - &ctx); - - khui_context_release(&ctx); - } - } - - /* result is only set when code != 0 */ - if (code && result) { - size_t len; - - StringCchLengthA(result, KHERR_MAXCCH_STRING, - &len); - wresult = PMALLOC((len + 1) * sizeof(wchar_t)); -#ifdef DEBUG - assert(wresult); -#endif - AnsiStrToUnicode(wresult, (len + 1) * sizeof(wchar_t), - result); - - _report_cs1(KHERR_ERROR, L"%1!s!", _cstr(wresult)); - _resolve(); - - PFREE(result); - PFREE(wresult); - - /* we don't need to report anything more */ - code = 0; - } - - _pwd_exit: - if (KHM_FAILED(rv)) { - if (code) { - wchar_t tbuf[1024]; - DWORD suggestion; - kherr_suggestion sug_id; - - khm_err_describe(code, tbuf, sizeof(tbuf), - &suggestion, &sug_id); - _report_cs0(KHERR_ERROR, tbuf); - - if (suggestion) - _suggest_mr(suggestion, sug_id); - - _resolve(); - } - - khui_cw_set_response(nc, credtype_id_krb5, - KHUI_NC_RESPONSE_NOEXIT| - KHUI_NC_RESPONSE_FAILED); - } else { - khui_cw_set_response(nc, credtype_id_krb5, - KHUI_NC_RESPONSE_SUCCESS | - KHUI_NC_RESPONSE_EXIT); - } - } - - khui_cw_unlock_nc(nc); - - _end_task(); - } /* KMSG_CRED_PASSWORD */ - } - break; - - case KMSG_CRED_END: - { - khui_new_creds * nc; - khui_new_creds_by_type * nct; - - nc = (khui_new_creds *) vparam; - khui_cw_find_type(nc, credtype_id_krb5, &nct); - - if(!nct) - break; - - khui_cw_del_type(nc, credtype_id_krb5); - - if (nct->name) - PFREE(nct->name); - if (nct->credtext) - PFREE(nct->credtext); - - PFREE(nct); - - k5_free_kinit_job(); - } - break; - - case KMSG_CRED_IMPORT: - { - khm_int32 t = 0; - -#ifdef DEBUG - assert(csp_params); -#endif - khc_read_int32(csp_params, L"MsLsaImport", &t); - - if (t != K5_LSAIMPORT_NEVER) { - krb5_context ctx = NULL; - khm_handle id_default = NULL; - khm_handle id_imported = NULL; - BOOL imported; - - imported = khm_krb5_ms2mit(NULL, (t == K5_LSAIMPORT_MATCH), TRUE, - &id_imported); - if (imported) { - if (id_imported) - k5_ensure_identity_ccache_is_watched(id_imported, NULL); - - khm_krb5_list_tickets(&ctx); - - if (ctx) - pkrb5_free_context(ctx); - - kcdb_identity_refresh(id_imported); - - if (KHM_SUCCEEDED(kcdb_identity_get_default(&id_default))) { - kcdb_identity_release(id_default); - id_default = NULL; - } else { - _reportf(L"There was no default identity. Setting default"); - kcdb_identity_set_default(id_imported); - } - - /* and update the LRU */ - k5_update_LRU(id_imported); - } - - if (id_imported) - kcdb_identity_release(id_imported); - } - } - break; - } - - return rv; -} diff --git a/src/windows/identity/plugins/krb5/krb5plugin.c b/src/windows/identity/plugins/krb5/krb5plugin.c deleted file mode 100644 index d8877a9c0..000000000 --- a/src/windows/identity/plugins/krb5/krb5plugin.c +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<krbcred.h> -#include<kherror.h> -#include<khmsgtypes.h> -#include<commctrl.h> -#include<strsafe.h> -#include<krb5.h> - -#ifdef DEBUG -#include<assert.h> -#endif - -khm_int32 credtype_id_krb5 = KCDB_CREDTYPE_INVALID; -khm_boolean krb5_initialized = FALSE; -khm_handle krb5_credset = NULL; - -khm_handle k5_sub = NULL; - -LPVOID k5_main_fiber = NULL; -LPVOID k5_kinit_fiber = NULL; - -VOID CALLBACK k5_kinit_fiber_proc(PVOID lpParameter); - -krb5_context k5_identpro_ctx = NULL; - -/* The system message handler. - - Runs in the context of the plugin thread */ -khm_int32 KHMAPI -k5_msg_system(khm_int32 msg_type, khm_int32 msg_subtype, - khm_ui_4 uparam, void * vparam) -{ - khm_int32 rv = KHM_ERROR_SUCCESS; - - switch(msg_subtype) { - case KMSG_SYSTEM_INIT: - { - kcdb_credtype ct; - wchar_t buf[KCDB_MAXCCH_SHORT_DESC]; - size_t cbsize; - - /* perform critical registrations and initialization - stuff */ - ZeroMemory(&ct, sizeof(ct)); - ct.id = KCDB_CREDTYPE_AUTO; - ct.name = KRB5_CREDTYPE_NAME; - - if(LoadString(hResModule, IDS_KRB5_SHORT_DESC, - buf, ARRAYLENGTH(buf))) { - StringCbLength(buf, KCDB_MAXCB_SHORT_DESC, &cbsize); - cbsize += sizeof(wchar_t); - ct.short_desc = PMALLOC(cbsize); - StringCbCopy(ct.short_desc, cbsize, buf); - } - - /* even though ideally we should be setting limits - based KCDB_MAXCB_LONG_DESC, our long description - actually fits nicely in KCDB_MAXCB_SHORT_DESC */ - if(LoadString(hResModule, IDS_KRB5_LONG_DESC, - buf, ARRAYLENGTH(buf))) { - StringCbLength(buf, KCDB_MAXCB_SHORT_DESC, &cbsize); - cbsize += sizeof(wchar_t); - ct.long_desc = PMALLOC(cbsize); - StringCbCopy(ct.long_desc, cbsize, buf); - } - - ct.icon = NULL; /* TODO: set a proper icon */ - - kmq_create_subscription(k5_msg_callback, &ct.sub); - - ct.is_equal = khm_krb5_creds_is_equal; - - rv = kcdb_credtype_register(&ct, &credtype_id_krb5); - - if(KHM_SUCCEEDED(rv)) - rv = kcdb_credset_create(&krb5_credset); - - if(ct.short_desc) - PFREE(ct.short_desc); - - if(ct.long_desc) - PFREE(ct.long_desc); - - if(KHM_SUCCEEDED(rv)) { - krb5_context ctx = NULL; - - krb5_initialized = TRUE; - - /* now convert this thread to a fiber and create a - separate fiber to do kinit stuff */ - k5_main_fiber = ConvertThreadToFiber(NULL); - k5_kinit_fiber = CreateFiber(0,k5_kinit_fiber_proc,NULL); - - ZeroMemory(&g_fjob, sizeof(g_fjob)); - - kmq_create_subscription(k5_msg_callback, &k5_sub); - - k5_register_config_panels(); - - khm_krb5_list_tickets(&ctx); - - if(ctx != NULL) - pkrb5_free_context(ctx); - } - } - break; - - case KMSG_SYSTEM_EXIT: - - k5_unregister_config_panels(); - - if(credtype_id_krb5 >= 0) { - /* basically just unregister the credential type */ - kcdb_credtype_unregister(credtype_id_krb5); - - /* kcdb knows how to deal with bad handles */ - kcdb_credset_delete(krb5_credset); - krb5_credset = NULL; - } - - if(k5_main_fiber != NULL) { - if (k5_kinit_fiber) { -#ifdef DEBUG - assert(k5_kinit_fiber != GetCurrentFiber()); -#endif -#ifdef CLEANUP_FIBERS_ON_EXIT - DeleteFiber(k5_kinit_fiber); - CloseHandle(k5_kinit_fiber); -#endif - k5_kinit_fiber = NULL; - } - - k5_main_fiber = NULL; - } - - if(k5_sub != NULL) { - kmq_delete_subscription(k5_sub); - k5_sub = NULL; - } - - break; - } - - return rv; -} - -khm_int32 KHMAPI -k5_msg_kcdb(khm_int32 msg_type, khm_int32 msg_subtype, - khm_ui_4 uparam, void * vparam) -{ - khm_int32 rv = KHM_ERROR_SUCCESS; - - switch(msg_subtype) { - case KMSG_KCDB_IDENT: - if (uparam == KCDB_OP_DELCONFIG) { - k5_remove_from_LRU((khm_handle) vparam); - } - break; - } - - return rv; -} - - -/* Handler for CRED type messages - - Runs in the context of the Krb5 plugin -*/ -khm_int32 KHMAPI -k5_msg_cred(khm_int32 msg_type, khm_int32 msg_subtype, - khm_ui_4 uparam, void * vparam) -{ - khm_int32 rv = KHM_ERROR_SUCCESS; - - switch(msg_subtype) { - case KMSG_CRED_REFRESH: - { - krb5_context ctx = NULL; - - khm_krb5_list_tickets(&ctx); - - if(ctx != NULL) - pkrb5_free_context(ctx); - } - break; - - case KMSG_CRED_DESTROY_CREDS: - { - khui_action_context * ctx; - - ctx = (khui_action_context *) vparam; - - if (ctx->credset) { - _begin_task(0); - _report_mr0(KHERR_INFO, MSG_ERR_CTX_DESTROY_CREDS); - _describe(); - - khm_krb5_destroy_by_credset(ctx->credset); - - _end_task(); - } - } - break; - - case KMSG_CRED_PP_BEGIN: - k5_pp_begin((khui_property_sheet *) vparam); - break; - - case KMSG_CRED_PP_END: - k5_pp_end((khui_property_sheet *) vparam); - break; - - default: - if(IS_CRED_ACQ_MSG(msg_subtype)) - return k5_msg_cred_dialog(msg_type, msg_subtype, - uparam, vparam); - } - - return rv; -} - -/* The main message handler. We don't do much here, except delegate - to other message handlers - - Runs in the context of the Krb5 plugin -*/ -khm_int32 KHMAPI -k5_msg_callback(khm_int32 msg_type, khm_int32 msg_subtype, - khm_ui_4 uparam, void * vparam) -{ - switch(msg_type) { - case KMSG_SYSTEM: - return k5_msg_system(msg_type, msg_subtype, uparam, vparam); - case KMSG_CRED: - return k5_msg_cred(msg_type, msg_subtype, uparam, vparam); - case KMSG_KCDB: - return k5_msg_kcdb(msg_type, msg_subtype, uparam, vparam); - } - return KHM_ERROR_SUCCESS; -} diff --git a/src/windows/identity/plugins/krb5/krb5props.c b/src/windows/identity/plugins/krb5/krb5props.c deleted file mode 100644 index d1553e6d6..000000000 --- a/src/windows/identity/plugins/krb5/krb5props.c +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<krbcred.h> -#include<kherror.h> -#include<khmsgtypes.h> -#include<commctrl.h> -#include<strsafe.h> -#include<krb5.h> -#ifdef DEBUG -#include<assert.h> -#endif - -/* Property page - - Runs in the context of the UI thread. - */ -INT_PTR CALLBACK krb5_pp_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam - ) -{ - switch(uMsg) { - case WM_INITDIALOG: - { - khui_property_sheet * s; - PROPSHEETPAGE * p; - wchar_t buf[512]; - wchar_t unavailable[64]; - khm_size cbsize; - khm_int32 rv; - khm_int32 tflags; - - p = (PROPSHEETPAGE *) lParam; - s = (khui_property_sheet *) p->lParam; - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) s); -#pragma warning(pop) - - LoadString(hResModule, IDS_UNAVAILABLE, - unavailable, ARRAYLENGTH(unavailable)); - - if(s->cred) { - cbsize = sizeof(buf); - kcdb_cred_get_name(s->cred, buf, &cbsize); - SetDlgItemText(hwnd, IDC_PPK5_NAME, buf); - - cbsize = sizeof(buf); - rv = kcdb_cred_get_attr_string(s->cred, - KCDB_ATTR_ISSUE, - buf, &cbsize, 0); - if (KHM_SUCCEEDED(rv)) - SetDlgItemText(hwnd, IDC_PPK5_ISSUE, buf); - else - SetDlgItemText(hwnd, IDC_PPK5_ISSUE, unavailable); - - cbsize = sizeof(buf); - rv = kcdb_cred_get_attr_string(s->cred, - KCDB_ATTR_EXPIRE, - buf, &cbsize, 0); - if (KHM_SUCCEEDED(rv)) - SetDlgItemText(hwnd, IDC_PPK5_VALID, buf); - else - SetDlgItemText(hwnd, IDC_PPK5_VALID, unavailable); - - cbsize = sizeof(buf); - rv = kcdb_cred_get_attr_string(s->cred, - KCDB_ATTR_RENEW_EXPIRE, - buf, &cbsize, 0); - if (KHM_SUCCEEDED(rv)) - SetDlgItemText(hwnd, IDC_PPK5_RENEW, buf); - else - SetDlgItemText(hwnd, IDC_PPK5_RENEW, unavailable); - - tflags = 0; - cbsize = sizeof(tflags); - rv = kcdb_cred_get_attr(s->cred, - attr_id_krb5_flags, - NULL, - &tflags, - &cbsize); - if (KHM_SUCCEEDED(rv)) { - -#define ADDBITFLAG(f,s) \ - if (tflags & f) { \ - LoadString(hResModule, s, buf, ARRAYLENGTH(buf)); \ - SendDlgItemMessage(hwnd, IDC_PPK5_FLAGS, LB_ADDSTRING, 0, (LPARAM) buf); \ - } - - ADDBITFLAG(TKT_FLG_FORWARDABLE, IDS_FLG_FORWARDABLE); - ADDBITFLAG(TKT_FLG_FORWARDED, IDS_FLG_FORWARDED); - ADDBITFLAG(TKT_FLG_PROXIABLE, IDS_FLG_PROXIABLE); - ADDBITFLAG(TKT_FLG_PROXY, IDS_FLG_PROXY); - ADDBITFLAG(TKT_FLG_MAY_POSTDATE, IDS_FLG_MAY_POSTDATE); - ADDBITFLAG(TKT_FLG_POSTDATED, IDS_FLG_POSTDATED); - ADDBITFLAG(TKT_FLG_INVALID, IDS_FLG_INVALID); - ADDBITFLAG(TKT_FLG_RENEWABLE, IDS_FLG_RENEWABLE); - ADDBITFLAG(TKT_FLG_INITIAL, IDS_FLG_INITIAL); - ADDBITFLAG(TKT_FLG_PRE_AUTH, IDS_FLG_PRE_AUTH); - ADDBITFLAG(TKT_FLG_HW_AUTH, IDS_FLG_HW_AUTH); - ADDBITFLAG(TKT_FLG_TRANSIT_POLICY_CHECKED, IDS_FLG_TRANSIT_POL); - ADDBITFLAG(TKT_FLG_OK_AS_DELEGATE, IDS_FLG_OK_DELEGATE); - ADDBITFLAG(TKT_FLG_ANONYMOUS, IDS_FLG_ANONYMOUS); - -#undef ADDBITFLAG - - } - } else { -#ifdef DEBUG - assert(FALSE); -#endif - } - } - return FALSE; - } - - return FALSE; -} - -void k5_pp_begin(khui_property_sheet * s) -{ - PROPSHEETPAGE *p; - - if(s->credtype == credtype_id_krb5 && - s->cred) { - p = PMALLOC(sizeof(*p)); - ZeroMemory(p, sizeof(*p)); - - p->dwSize = sizeof(*p); - p->dwFlags = 0; - p->hInstance = hResModule; - p->pszTemplate = MAKEINTRESOURCE(IDD_PP_KRB5C); - p->pfnDlgProc = krb5_pp_proc; - p->lParam = (LPARAM) s; - khui_ps_add_page(s, credtype_id_krb5, 0, p, NULL); - } -} - -void k5_pp_end(khui_property_sheet * s) -{ - khui_property_page * p = NULL; - - khui_ps_find_page(s, credtype_id_krb5, &p); - if(p) { - if(p->p_page) - PFREE(p->p_page); - p->p_page = NULL; - } -} diff --git a/src/windows/identity/plugins/krb5/krbconfig.csv b/src/windows/identity/plugins/krb5/krbconfig.csv deleted file mode 100644 index 3bb30ea77..000000000 --- a/src/windows/identity/plugins/krb5/krbconfig.csv +++ /dev/null @@ -1,45 +0,0 @@ -Name,Type,Value,Description -Krb5Cred,KC_SPACE,0,Kerberos V Credentials Provider - Module,KC_STRING,MITKrb5, - Description,KC_STRING,Kerberos V Credentials Provider, - Type,KC_INT32,1, - Flags,KC_INT32,0, - Parameters,KC_SPACE,0,Parameters for KrbCred - CreateMissingConfig,KC_INT32,0,Create missing configuration files - MsLsaImport,KC_INT32,1,Automatically import MSLSA credentials: 0-never 1-always 2-if principle matches - MsLsaList,KC_INT32,1,Include MSLSA in the credentials list - FileCCList,KC_STRING,,List of file CCaches to include in listing - AutoRenewTickets,KC_INT32,1,Automatically renew expiring tickets - DefaultLifetime,KC_INT32,36000,Default ticket lifetime - MaxLifetime,KC_INT32,86400,Maximum lifetime - MinLifetime,KC_INT32,60,Minimum lifetime - Forwardable,KC_INT32,1,Obtain forwardable tickets (boolean) - Proxiable,KC_INT32,0,Obtain proxiable tickets (boolean) - Addressless,KC_INT32,1,Obtain addressless tickets (boolean) - PublicIP,KC_INT32,0,Additional public IP address to use (int32) - Renewable,KC_INT32,1,Obtain renewable tickets (boolean) - DefaultRenewLifetime,KC_INT32,604800,Default renewable lifetime - MaxRenewLifetime,KC_INT32,2592000,Maximum renewable lifetime - MinRenewLifetime,KC_INT32,60,Maximum renewable lifetime - UseFullRealmList,KC_INT32,0,Use the full list of realms in the New Creds dialog - LRURealms,KC_STRING,, - LRUPrincipals,KC_STRING,, - LastDefaultIdent,KC_STRING,,Last known default identity - PromptCacheLifetime,KC_INT32,172800,Lifetime of the prompt cache in seconds - DefaultCCName,KC_STRING,,Default CC name (only per identity) - DefaultToFileCache,KC_INT32,0,"If no DefaultCCName is specified for an identity, use a generated FILE: cache instead of an API: cache" - PromptCache,KC_SPACE,0,Cache of prompts (only per identity) - Name,KC_STRING,, - Banner,KC_STRING,, - PromptCount,KC_INT32,0, - ExpiresOn,KC_INT64,0,FILETIME of when the prompt cache is set to expire - (n),KC_SPACE,0,Parameters for each prompt - Prompt,KC_STRING,, - Type,KC_INT32,0, - Flags,KC_INT32,0, - (n),KC_ENDSPACE,0, - PromptCache,KC_ENDSPACE,0, - Realms,KC_SPACE,0,Realm specific configuration (same schema as per identity config) - Realms,KC_ENDSPACE,0, - Parameters,KC_ENDSPACE,0, -Krb5Cred,KC_ENDSPACE,0, diff --git a/src/windows/identity/plugins/krb5/krbcred.h b/src/windows/identity/plugins/krb5/krbcred.h deleted file mode 100644 index d90a39e46..000000000 --- a/src/windows/identity/plugins/krb5/krbcred.h +++ /dev/null @@ -1,243 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KRBAFSCRED_H -#define __KHIMAIRA_KRBAFSCRED_H - -#include<windows.h> - -/* While we generally pull resources out of hResModule, the message - strings for all the languages are kept in the main DLL. */ -#define KHERR_HMODULE hInstance -#define KHERR_FACILITY k5_facility -#define KHERR_FACILITY_ID 64 - -#include<netidmgr.h> - -#include<krb5funcs.h> -#include<krb5common.h> -#include<errorfuncs.h> -#include<dynimport.h> - -#include<langres.h> -#include<datarep.h> -#include<krb5_msgs.h> - -typedef enum tag_k5_lsa_import { - K5_LSAIMPORT_NEVER = 0, - K5_LSAIMPORT_ALWAYS = 1, - K5_LSAIMPORT_MATCH = 2, /* only when the principal name matches */ -} k5_lsa_import; - -#define TYPENAME_ENCTYPE L"EncType" -#define TYPENAME_ADDR_LIST L"AddrList" -#define TYPENAME_KRB5_FLAGS L"Krb5Flags" -#define TYPENAME_KRB5_PRINC L"Krb5Principal" -#define TYPENAME_KVNO L"Kvno" - -#define ATTRNAME_KEY_ENCTYPE L"KeyEncType" -#define ATTRNAME_TKT_ENCTYPE L"TktEncType" -#define ATTRNAME_ADDR_LIST L"AddrList" -#define ATTRNAME_KRB5_FLAGS L"Krb5Flags" -#define ATTRNAME_KRB5_CCNAME L"Krb5CCName" -#define ATTRNAME_KVNO L"Kvno" -#define ATTRNAME_KRB5_IDFLAGS L"Krb5IDFlags" - -/* Flag bits for Krb5IDFlags property */ - -/* identity was imported from MSLSA: */ -#define K5IDFLAG_IMPORTED 0x00000001 - -void init_krb(); -void exit_krb(); - -/* globals */ -extern kmm_module h_khModule; -extern HMODULE hResModule; -extern HINSTANCE hInstance; -extern const wchar_t * k5_facility; - -extern khm_int32 type_id_enctype; -extern khm_int32 type_id_addr_list; -extern khm_int32 type_id_krb5_flags; -extern khm_int32 type_id_krb5_princ; -extern khm_int32 type_id_kvno; - -extern BOOL type_regd_krb5_princ; - -extern khm_int32 attr_id_key_enctype; -extern khm_int32 attr_id_tkt_enctype; -extern khm_int32 attr_id_addr_list; -extern khm_int32 attr_id_krb5_flags; -extern khm_int32 attr_id_krb5_ccname; -extern khm_int32 attr_id_kvno; -extern khm_int32 attr_id_krb5_idflags; - -extern khm_ui_4 k5_commctl_version; - -#define IS_COMMCTL6() (k5_commctl_version >= 0x60000) - -/* Configuration spaces */ -#define CSNAME_KRB5CRED L"Krb5Cred" -#define CSNAME_PARAMS L"Parameters" -#define CSNAME_PROMPTCACHE L"PromptCache" -#define CSNAME_REALMS L"Realms" - -/* plugin constants */ -#define KRB5_PLUGIN_NAME L"Krb5Cred" -#define KRB5_IDENTPRO_NAME L"Krb5Ident" - -#define KRB5_CREDTYPE_NAME L"Krb5Cred" - -/* limits */ -/* maximum number of characters in a realm name */ -#define K5_MAXCCH_REALM 256 - -/* maximum number of characters in a host name */ -#define K5_MAXCCH_HOST 128 - -/* maximum number of KDC's per realm */ -#define K5_MAX_KDC 64 - -/* maximum number of domains that map to a realm */ -#define K5_MAX_DOMAIN_MAPPINGS 32 - -extern khm_handle csp_plugins; -extern khm_handle csp_krbcred; -extern khm_handle csp_params; - -extern kconf_schema schema_krbconfig[]; - -/* other globals */ -extern khm_int32 credtype_id_krb5; - -extern khm_boolean krb5_initialized; - -extern khm_handle krb5_credset; - -extern khm_handle k5_sub; - -extern krb5_context k5_identpro_ctx; - -extern BOOL is_k5_identpro; - -/* plugin callbacks */ -khm_int32 KHMAPI k5_msg_callback(khm_int32 msg_type, khm_int32 msg_subtype, khm_ui_4 uparam, void * vparam); -khm_int32 KHMAPI k5_ident_callback(khm_int32 msg_type, khm_int32 msg_subtype, khm_ui_4 uparam, void * vparam); - -/* kinit fiber */ -typedef struct _fiber_job_t { - int command; - - khui_new_creds * nc; - khui_new_creds_by_type * nct; - HWND dialog; - - khm_handle identity; - char * principal; - char * password; - char * ccache; - krb5_deltat lifetime; - DWORD forwardable; - DWORD proxiable; - DWORD renewable; - krb5_deltat renew_life; - DWORD addressless; - DWORD publicIP; - - int code; - int state; - int prompt_set; - wchar_t *error_message; - - BOOL null_password; - BOOL valid_principal; - BOOL retry_if_valid_principal; -} fiber_job; - -extern fiber_job g_fjob; /* global fiber job object */ - -#define FIBER_CMD_KINIT 1 -#define FIBER_CMD_CANCEL 2 -#define FIBER_CMD_CONTINUE 3 - -#define FIBER_STATE_NONE 0 -#define FIBER_STATE_KINIT 1 -#define FIBER_STATE_RETRY_KINIT 2 - -#define K5_SET_CRED_MSG WMNC_USER - -void -k5_pp_begin(khui_property_sheet * s); - -void -k5_pp_end(khui_property_sheet * s); - -khm_int32 KHMAPI -k5_msg_cred_dialog(khm_int32 msg_type, - khm_int32 msg_subtype, - khm_ui_4 uparam, - void * vparam); - -khm_int32 KHMAPI -k5_msg_ident(khm_int32 msg_type, - khm_int32 msg_subtype, - khm_ui_4 uparam, - void * vparam); - -khm_int32 -k5_remove_from_LRU(khm_handle identity); - -int -k5_get_realm_from_nc(khui_new_creds * nc, - wchar_t * buf, - khm_size cch_buf); - -void -k5_register_config_panels(void); - -void -k5_unregister_config_panels(void); - -INT_PTR CALLBACK -k5_ccconfig_dlgproc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); - -INT_PTR CALLBACK -k5_id_tab_dlgproc(HWND hwndDlg, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); - -INT_PTR CALLBACK -k5_ids_tab_dlgproc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); - -#endif diff --git a/src/windows/identity/plugins/krb5/lang/en_us/langres.rc b/src/windows/identity/plugins/krb5/lang/en_us/langres.rc deleted file mode 100644 index 9d110f5af..000000000 --- a/src/windows/identity/plugins/krb5/lang/en_us/langres.rc +++ /dev/null @@ -1,509 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "..\..\langres.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "afxres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "..\\..\\langres.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""afxres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_NC_KRB5 DIALOGEX 0, 0, 300, 166 -STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "Kerberos v5 Credential Options",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP,7,7,286,11 - LTEXT "Realm",IDC_STATIC,7,25,52,13 - COMBOBOX IDC_NCK5_REALM,60,25,233,51,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "Specify &additional realms ...",IDC_NCK5_ADD_REALMS,181,43,112,16,BS_NOTIFY | NOT WS_VISIBLE | WS_DISABLED - LTEXT "&Lifetime",IDC_STATIC,7,67,61,12 - EDITTEXT IDC_NCK5_LIFETIME_EDIT,85,67,107,12,ES_AUTOHSCROLL - CONTROL "&Renewable for",IDC_NCK5_RENEWABLE,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,7,87,64,12 - EDITTEXT IDC_NCK5_RENEW_EDIT,85,87,108,12,ES_AUTOHSCROLL - CONTROL "Can be &forwarded to other machines",IDC_NCK5_FORWARDABLE, - "Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,7,107,132,12 - CONTROL "Addressless",IDC_NCK5_ADDRESS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,128,54,10 - LTEXT "Additional IP address",IDC_STATIC,118,129,68,8,NOT WS_VISIBLE - CONTROL "",IDC_NCK5_PUBLICIP,"SysIPAddress32",NOT WS_VISIBLE | WS_TABSTOP,193,125,100,15 -END - -IDD_PP_KRB5C DIALOGEX 0, 0, 235, 156 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Kerberos v5" -FONT 8, "MS Shell Dlg", 0, 0, 0x0 -BEGIN - LTEXT "Name",IDC_STATIC,7,7,19,8 - LTEXT "Valid till",IDC_STATIC,7,39,24,8 - LTEXT "Renewable till",IDC_STATIC,7,55,45,12 - LTEXT "Issued on",IDC_STATIC,7,23,32,8 - LTEXT "Credential flags",IDC_STATIC,7,75,51,8 - EDITTEXT IDC_PPK5_NAME,72,7,156,12,ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_PPK5_ISSUE,72,23,156,12,ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_PPK5_VALID,72,39,156,12,ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_PPK5_RENEW,72,55,156,12,ES_AUTOHSCROLL | ES_READONLY - LISTBOX IDC_PPK5_FLAGS,72,74,156,75,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP -END - -IDD_PP_KRB5 DIALOGEX 0, 0, 235, 156 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Kerberos v5" -FONT 8, "MS Shell Dlg", 0, 0, 0x0 -BEGIN - LTEXT "Default realm",IDC_STATIC,7,7,44,8 - LTEXT "Default lifetime",IDC_STATIC,7,22,49,8 - LTEXT "Minimum lifetime",IDC_STATIC,7,37,52,8 - LTEXT "Maximum lifetime",IDC_STATIC,7,52,55,8 - LTEXT "Renewable lifetime",IDC_STATIC,7,67,61,8 - LTEXT "Min. Renewable lifetime",IDC_STATIC,7,82,76,8 - LTEXT "Max. Renewable lifetime",IDC_STATIC,7,97,79,8 - GROUPBOX "Default credential flags",IDC_STATIC,7,113,221,36 - CONTROL "Proxiable",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,129,45,10 - CONTROL "Renewable",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,129,51,10 - CONTROL "Forwardable",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,89,129,56,10 - LTEXT "ATHENA.MIT.EDU",IDC_STATIC,95,7,133,11,0,WS_EX_CLIENTEDGE - LTEXT "10 hours",IDC_STATIC,95,22,133,11,0,WS_EX_CLIENTEDGE - LTEXT "1 minute",IDC_STATIC,95,37,133,11,0,WS_EX_CLIENTEDGE - LTEXT "7 days",IDC_STATIC,95,52,133,11,0,WS_EX_CLIENTEDGE - LTEXT "7 days",IDC_STATIC,95,67,133,11,0,WS_EX_CLIENTEDGE - LTEXT "1 minute",IDC_STATIC,95,82,133,11,0,WS_EX_CLIENTEDGE - LTEXT "21 days",IDC_STATIC,95,97,133,11,0,WS_EX_CLIENTEDGE -END - -IDD_CONFIG DIALOGEX 0, 0, 255, 182 -STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - LTEXT "Default Realm",IDC_CFG_LBL_REALM,13,9,46,8 - COMBOBOX IDC_CFG_DEFREALM,76,7,166,51,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP - CONTROL "Include all configured realms in New Credentials realm list",IDC_CFG_INCREALMS, - "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,76,26,166,22 - PUSHBUTTON "Configure Realms ...",IDC_CFG_CFGREALMS,76,46,84,14,NOT WS_VISIBLE | WS_DISABLED - GROUPBOX "Configuration File",IDC_CFG_CFGFILEGRP,7,59,241,47 - LTEXT "Location",IDC_CFG_LBL_CFGFILE,13,74,28,8 - EDITTEXT IDC_CFG_CFGFILE,76,71,166,14,ES_AUTOHSCROLL | ES_READONLY - PUSHBUTTON "Browse...",IDC_CFG_BROWSE,145,89,44,14,NOT WS_VISIBLE - CONTROL "Create file if missing",IDC_CFG_CREATECONFIG,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,76,93,80,10 - PUSHBUTTON "Load into realm editor ...",IDC_CFG_BROWSE2,26,89,100,14,NOT WS_VISIBLE - GROUPBOX "Microsoft Windows® Options",IDC_CFG_WINGRP,7,110,241,65 - LTEXT "Hostname",IDC_CFG_LBL_HOSTNAME,13,123,33,8 - EDITTEXT IDC_CFG_HOSTNAME,76,120,166,14,ES_AUTOHSCROLL | ES_READONLY - LTEXT "Domain",IDC_CFG_LBL_DOMAIN,13,141,24,8 - EDITTEXT IDC_CFG_DOMAIN,76,138,166,14,ES_AUTOHSCROLL | ES_READONLY - LTEXT "Import credentials",IDC_LBL_IMPORT,13,158,45,8 - COMBOBOX IDC_CFG_IMPORT,76,156,166,51,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP -END - -IDD_CFG_REALMS DIALOGEX 0, 0, 255, 182 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "",IDC_CFG_REALMS,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_TABSTOP,7,19,81,148 - GROUPBOX "Kerberos v5 Servers",IDC_CFG_SERVERSGRP,93,7,155,91 - GROUPBOX "Domain to Realm mappings",IDC_CFG_DOMAINGRP,93,101,155,74 - CONTROL "",IDC_CFG_KDC,"SysListView32",LVS_REPORT | LVS_EDITLABELS | LVS_ALIGNLEFT | WS_TABSTOP,99,19,143,72 - CONTROL "",IDC_CFG_DMAP,"SysListView32",LVS_REPORT | LVS_EDITLABELS | LVS_ALIGNLEFT | WS_TABSTOP,99,111,143,56 -END - -IDD_CFG_IDS_TAB DIALOGEX 0, 0, 235, 151 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - LTEXT "Ticket &lifetime",IDC_CFG_LBL_DEFLIFE,7,10,44,8 - EDITTEXT IDC_CFG_DEFLIFE,94,7,134,14,ES_AUTOHSCROLL - LTEXT "Ticket re&newable lifetime",IDC_CFG_LBL_DEFRLIFE,7,29,80,8 - EDITTEXT IDC_CFG_DEFRLIFE,94,26,134,14,ES_AUTOHSCROLL - CONTROL "&Renewable",IDC_CFG_RENEW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,47,51,10 - CONTROL "&Forwardable",IDC_CFG_FORWARD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,47,56,10 - CONTROL "&Addressless",IDC_CFG_ADDRESSLESS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,63,54,10 - GROUPBOX "Credential lifetime range",IDC_CFG_LIFEGRP,7,79,221,31 - LTEXT "From",IDC_STATIC,13,93,17,8 - EDITTEXT IDC_CFG_LRNG_MIN,38,90,79,14,ES_AUTOHSCROLL - LTEXT "To",IDC_STATIC,125,93,9,8 - EDITTEXT IDC_CFG_LRNG_MAX,143,90,79,14,ES_AUTOHSCROLL - GROUPBOX "Credential renewable lifetime range",IDC_STATIC,7,113,221,31 - LTEXT "From",IDC_STATIC,13,128,17,8 - EDITTEXT IDC_CFG_RLRNG_MIN,38,125,79,14,ES_AUTOHSCROLL - LTEXT "To",IDC_STATIC,125,128,9,8 - EDITTEXT IDC_CFG_RLRNG_MAX,143,125,79,14,ES_AUTOHSCROLL -END - -IDD_CFG_ID_TAB DIALOGEX 0, 0, 235, 151 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - LTEXT "Credential lifetime",IDC_CFG_LBL_DEFLIFE,7,10,58,8 - EDITTEXT IDC_CFG_DEFLIFE,91,7,137,14,ES_AUTOHSCROLL - CONTROL "Renewable for",IDC_CFG_RENEW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,41,63,10 - EDITTEXT IDC_CFG_DEFRLIFE,91,39,137,14,ES_AUTOHSCROLL - CONTROL "Can be forwarded to other machines",IDC_CFG_FORWARD, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,59,133,10 - CONTROL "Addressless",IDC_CFG_ADDRESSLESS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,77,54,10 - LTEXT "Additional IP address",IDC_STATIC,91,78,68,8,NOT WS_VISIBLE - CONTROL "",IDC_CFG_PUBLICIP,"SysIPAddress32",NOT WS_VISIBLE | WS_TABSTOP,128,89,100,15 - LTEXT "Credential cache",IDC_STATIC,7,132,58,8 - EDITTEXT IDC_CFG_CCACHE,91,130,137,14,ES_AUTOHSCROLL -END - -IDD_NC_KRB5_PASSWORD DIALOGEX 0, 0, 300, 166 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "Kerberos v5 Change Password Options",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP,7,7,286,11 - LTEXT "Realm",IDC_STATIC,7,25,52,13 - COMBOBOX IDC_NCK5_REALM,60,25,233,51,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "Specify &additional realms ...",IDC_NCK5_ADD_REALMS,181,43,112,16,BS_NOTIFY | WS_DISABLED -END - -IDD_CFG_CACHES DIALOGEX 0, 0, 255, 182 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - GROUPBOX "File-based Credential Caches",IDC_CFG_FCGRP,7,26,241,149 - CONTROL "",IDC_CFG_FCLIST,"SysListView32",LVS_REPORT | LVS_SORTASCENDING | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,13,37,229,97 - EDITTEXT IDC_CFG_FCNAME,13,139,173,14,ES_AUTOHSCROLL - PUSHBUTTON "&Browse ...",IDC_CFG_BROWSE,192,139,50,14 - PUSHBUTTON "Add",IDC_CFG_ADD,13,156,50,14 - PUSHBUTTON "Remove Selected",IDC_CFG_REMOVE,88,156,80,14 - CONTROL "Include all API: credentials caches",IDC_CFG_INCAPI, - "Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,123,7,125,10 - CONTROL "Include Windows LSA cache (MSLSA:)",IDC_CFG_INCMSLSA, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,7,136,10 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_NC_KRB5, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 293 - TOPMARGIN, 7 - BOTTOMMARGIN, 159 - END - - IDD_PP_KRB5C, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 228 - TOPMARGIN, 7 - BOTTOMMARGIN, 149 - END - - IDD_PP_KRB5, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 228 - TOPMARGIN, 7 - BOTTOMMARGIN, 149 - END - - IDD_CONFIG, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 248 - VERTGUIDE, 13 - VERTGUIDE, 76 - VERTGUIDE, 242 - TOPMARGIN, 7 - BOTTOMMARGIN, 175 - END - - IDD_CFG_REALMS, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 248 - VERTGUIDE, 93 - VERTGUIDE, 99 - VERTGUIDE, 242 - TOPMARGIN, 7 - BOTTOMMARGIN, 175 - HORZGUIDE, 19 - HORZGUIDE, 167 - END - - IDD_CFG_IDS_TAB, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 228 - VERTGUIDE, 13 - VERTGUIDE, 94 - VERTGUIDE, 222 - TOPMARGIN, 7 - BOTTOMMARGIN, 144 - END - - IDD_CFG_ID_TAB, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 228 - VERTGUIDE, 91 - TOPMARGIN, 7 - BOTTOMMARGIN, 144 - END - - IDD_NC_KRB5_PASSWORD, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 293 - TOPMARGIN, 7 - BOTTOMMARGIN, 159 - END - - IDD_CFG_CACHES, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 248 - VERTGUIDE, 7 - VERTGUIDE, 13 - VERTGUIDE, 242 - TOPMARGIN, 7 - BOTTOMMARGIN, 175 - END -END -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_PLUGIN ICON "..\\..\\images\\krb5plugin.ico" -IDI_DELETED ICON "..\\..\\images\\deleted.ico" -IDI_NEW ICON "..\\..\\images\\new.ico" -IDI_NORMAL ICON "..\\..\\images\\normal.ico" -IDI_MODIFIED ICON "..\\..\\images\\modified.ico" - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE -BEGIN - IDS_UNK_ADDR_FMT "Unknown address type %d" - IDS_KRB5_CREDTEXT_0 "<p><a id=""SwitchPanel"" param=""Krb5Cred""><b>Krb5</b></a><tab>: Tickets for realm %s</p>" - IDS_KRB5_CCNAME_SHORT_DESC "Kerberos v5 CCache" - IDS_KEY_ENCTYPE_SHORT_DESC "Session EncType" - IDS_TKT_ENCTYPE_SHORT_DESC "Service EncType" - IDS_KEY_ENCTYPE_LONG_DESC "Session Key Encryption Type" - IDS_TKT_ENCTYPE_LONG_DESC "Service Encryption Type" - IDS_ADDR_LIST_SHORT_DESC "Addresses" - IDS_ADDR_LIST_LONG_DESC "Address List" - IDS_ETYPE_NULL "NULL" - IDS_ETYPE_DES_CBC_CRC "DES-CBC-CRC" -END - -STRINGTABLE -BEGIN - IDS_ETYPE_DES_CBC_MD4 "DES-CBC-MD4" - IDS_ETYPE_DES_CBC_MD5 "DES-CBC-MD5" - IDS_ETYPE_DES_CBC_RAW "DES-CBC-RAW" - IDS_ETYPE_DES3_CBC_SHA "DES3-CBC-SHA" - IDS_ETYPE_DES3_CBC_RAW "DES3-CBC-RAW" - IDS_ETYPE_DES_HMAC_SHA1 "DES-HMAC-SHA1" - IDS_ETYPE_DES3_CBC_SHA1 "DES3-CBC-SHA1" - IDS_ETYPE_AES128_CTS_HMAC_SHA1_96 "AES128_CTS-HMAC-SHA1_96" - IDS_ETYPE_AES256_CTS_HMAC_SHA1_96 "AES256_CTS-HMAC-SHA1_96" - IDS_ETYPE_CAMELLIA128_CTS_CMAC "CAMELLIA128_CTS-CMAC" - IDS_ETYPE_CAMELLIA256_CTS_CMAC "CAMELLIA256_CTS-CMAC" - IDS_ETYPE_ARCFOUR_HMAC "RC4-HMAC-NT" - IDS_ETYPE_ARCFOUR_HMAC_EXP "RC4-HMAC-NT-EXP" - IDS_ETYPE_UNKNOWN "(Unknown)" - IDS_ETYPE_LOCAL_DES3_HMAC_SHA1 "LOCAL-DES3-HMAC-SHA1" - IDS_ETYPE_LOCAL_RC4_MD4 "LOCAL-RC4-MD4" - IDS_KRB5_SHORT_DESC "Kerberos v5 credentials" - IDS_KRB5_LONG_DESC "Kerberos v5 credentials" -END - -STRINGTABLE -BEGIN - IDS_KRB4_SHORT_DESC "Kerberos v4" - IDS_KRB4_LONG_DESC "Kerberos v4 credentials" - IDS_KRB5_FLAGS_SHORT_DESC "Kerberos v5 Flags" - IDS_RENEW_TILL_SHORT_DESC "Renew Till" - IDS_RENEW_TILL_LONG_DESC "Renewable Till" - IDS_RENEW_FOR_SHORT_DESC "Renew for" - IDS_RENEW_FOR_LONG_DESC "Renewable for" - IDS_KRB5_CCNAME_LONG_DESC "Kerberos v5 Primary Credentials Cache" - IDS_NC_USERNAME "Username" - IDS_NC_REALM "Realm" - IDS_KRB5_WARNING "Kerberos v5 Warning" - IDS_K5ERR_NAME_EXPIRED "<p><a id=""SwitchPanel"" param=""Krb5Cred""><b>Krb5</b></a><tab>: The selected principal name has expired.</p><p><tab> Please contact your system administrator.</p>" - IDS_K5ERR_KEY_EXPIRED "<p><a id=""SwitchPanel"" param=""Krb5Cred""><b>Krb5</b></a><tab>: The password for the selected identity has expired.</p><p><tab> Click <a id=""Krb5Cred:!Passwd"">here</a> to change the password</p>" - IDS_KRB5_WARN_FMT "Kerberos v5: %s\n\n%s" - IDS_K5ERR_FMT "<p><a id=""SwitchPanel"" param=""Krb5Cred""><b>Krb5</b></a><tag>: %s</p>" - IDS_K5CFG_SHORT_DESC "Kerberos v5" -END - -STRINGTABLE -BEGIN - IDS_K5CFG_LONG_DESC "Kerberos v5 Configuration" - IDS_K5RLM_SHORT_DESC "Realms" - IDS_K5RLM_LONG_DESC "Kerberos Realm Configuration" - IDS_K5CFG_IDS_SHORT_DESC "Kerberos v5" - IDS_K5CFG_IDS_LONG_DESC "Kerberos v5 options for all identities" - IDS_K5CFG_ID_SHORT_DESC "Kerberos v5" - IDS_K5CFG_ID_LONG_DESC "Kerberos v5 options for this identity" - IDS_PLUGIN_DESC "Kerberos v5 Credentials Provider" - IDS_NC_PWD_BANNER "Changing Kerberos v5 Password" - IDS_NC_PWD_PWD "Current Password" - IDS_NC_PWD_NPWD "New Password" - IDS_NC_PWD_NPWD_AGAIN "New Password again" - IDS_KRB5_CREDTEXT_P0 "<p><a id=""SwitchPanel"" param=""Krb5Cred""><b>Krb5</b></a><tab>: Changing password for %s</p>" - IDS_K5CFG_IMPORT_OPTIONS "Never,Always,Only when the principal matches" - IDS_IDENTPRO_DESC "Kerberos v5 Identity Provider" - IDS_K5CCC_SHORT_DESC "Credential Caches" -END - -STRINGTABLE -BEGIN - IDS_K5CCC_LONG_DESC "Kerberos v5 Credential Caches" - IDS_CFG_FCTITLE "File based Credential Caches" - IDS_CFG_FCN_WARNING "Warning:" - IDS_CFG_FCN_W_NOTFOUND "The credentials cache you specified does not exist." - IDS_CFG_FCN_W_RELATIVE "The path you specified not an absolute path." - IDS_CFG_FCOPENTITLE "Select a credential cache to add" - IDS_UNAVAILABLE "(Not available)" - IDS_FLG_FORWARDABLE "Forwardable" - IDS_FLG_FORWARDED "Forwarded" - IDS_FLG_PROXIABLE "Proxiable" - IDS_FLG_PROXY "Proxy" - IDS_FLG_MAY_POSTDATE "May postdate" - IDS_FLG_POSTDATED "Postdated" - IDS_FLG_INVALID "Invalid" - IDS_FLG_RENEWABLE "Renewable" - IDS_FLG_INITIAL "Initial" -END - -STRINGTABLE -BEGIN - IDS_FLG_PRE_AUTH "Pre-authenticated" - IDS_FLG_HW_AUTH "Hardware authentication" - IDS_FLG_TRANSIT_POL "Transit policy checked" - IDS_FLG_OK_DELEGATE "Approved for delegation" - IDS_FLG_ANONYMOUS "Anonymous" - IDS_K5ERR_CANTWRITEPROFILE - "The Kerberos v5 profile file could not be written" - IDS_K5ERR_PROFNOWRITE "The file %s could not be opened as a profile file for writing." - IDS_K5ERR_PROFUSETEMP "The file %s could not be opened for writing. The current changes will be saved to %s temporarily." - IDS_K5ERR_PROFSUGGEST "This may be due to not having privileges to modify the configuration file. Please contact your system administrator to resolve the issue." - IDS_CFG_RE_REALMS "Kerberos Realms" - IDS_CFG_RE_KDCS "Kerberos Servers" - IDS_CFG_RE_DMAPS "Domain mappings" - IDS_CFG_RE_KDCS_R "Kerberos Servers for %s" - IDS_CFG_RE_DMAPS_R "Domains that map to %s" - IDS_CFG_RE_HEAD_SVR "Server" - IDS_CFG_RE_HEAD_ADMIN "Admin" -END - -STRINGTABLE -BEGIN - IDS_CFG_RE_HEAD_MASTER "Master" - IDS_CFG_RE_HEAD_DOMAIN "Domain" - IDS_CFG_RE_NEWREALM "<New realm...>" - IDS_YES "Yes" - IDS_NO "No" - IDS_CFG_RE_NEWSERVER "<New server...>" - IDS_CFG_RE_NEWDMAP "<New domain mapping...>" - IDS_KRB5_NC_NAME "Kerberos v5" - IDS_NCERR_IDENT_TOO_LONG "The identity name is too long." - IDS_NCERR_IDENT_INVALID "The identity name is invalid." - IDS_NCERR_IDENT_UNKNOWN "An unknown error occurred while validating the identity name." - IDS_CFG_RE_ARNUT "Can't add new realm %s" - IDS_CFG_RE_ARNUM "The new realm name %s can't be added because there is already a realm with the same name listed. Please type another name." - IDS_CFG_RE_ASNUT "Can't add new server %s for realm %s" - IDS_CFG_RE_ASNUM "There already is a server named %s for realm %s. The new server can not be added." - IDS_CFG_RE_DMNUT "Can't add new domain map %s for realm %s" -END - -STRINGTABLE -BEGIN - IDS_CFG_RE_DMNUM "There already is a domain named %s mapping to realm %s. The new domain map could not be added." - IDS_CFG_RE_MNR "&Add new realm" - IDS_CFG_RE_MDR "&Remove realm" - IDS_CFG_RE_MNK "&Add new server" - IDS_CFG_RE_MDK "&Remove server" - IDS_CFG_RE_MAK "Toggle a&dmin server" - IDS_CFG_RE_MMK "Toggle &master KDC" - IDS_CFG_RE_MND "&Add new domain mapping" - IDS_CFG_RE_MDD "&Remove domain mapping" - IDS_KVNO_SHORT_DESC "Kvno" - IDS_KVNO_LONG_DESC "Key version number" -END - -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - - diff --git a/src/windows/identity/plugins/krb5/lang/krb5_msgs.mc b/src/windows/identity/plugins/krb5/lang/krb5_msgs.mc deleted file mode 100644 index 1e9869972..000000000 --- a/src/windows/identity/plugins/krb5/lang/krb5_msgs.mc +++ /dev/null @@ -1,199 +0,0 @@ -; // ** krb5_msgs.mc - -; /* Since .mc files can contain strings from any language, we define -; all our messages in one file in the /lang/ directory instead of -; language specific subdirectories. */ - -; /* The type is set to (wchar_t *) because that's what we will be -; feeding kherr_report() function. */ - -; // MessageIdTypedef=LPWSTR - -; /* Severity values as defined in the message definition file are -; currently ignored. */ - -SeverityNames=( - Success=0x0 -) - -LanguageNames=( - English=0x409:MSG_ENU -) - -OutputBase=16 - -; /* Actual messages start here */ - -MessageId=1 -Severity=Success -SymbolicName=MSG_INITIAL -Language=English -Initial placeholder message -. - -MessageId= -SymbolicName=MSG_CTX_INITAL_CREDS -Language=English -Obtaining initial Krb5 credentials -. - -MessageId= -SymbolicName=MSG_CTX_RENEW_CREDS -Language=English -Renewing Krb5 credentials -. - -MessageId= -SymbolicName=MSG_ERR_UNKNOWN -Language=English -An unknown error has occurred. -. - -MessageId= -SymbolicName=MSG_ERR_PR_UNKNOWN -Language=English -You have entered an unknown username/instance/realm combination. -. - -MessageId= -SymbolicName=MSG_ERR_TKFIL -Language=English -The tickets could not be accessed from the memory location where they were stored. -. - -MessageId= -SymbolicName=MSG_ERR_S_TKFIL -Language=English -This may be due to a problem with the memory where your tickets are stored. Restarting your computer might be worth a try. -. - -MessageId= -SymbolicName=MSG_ERR_CLOCKSKEW -Language=English -Your computer's clock is out of sync with the Kerberos server. -. - -MessageId= -SymbolicName=MSG_ERR_S_CLOCKSKEW -Language=English -Synchronize your clock withe the Kerberos server. -. - -MessageId= -SymbolicName=MSG_ERR_KDC_CONTACT -Language=English -Cannot contact the Kerberos server for the requested realm. -. - -MessageId= -SymbolicName=MSG_ERR_INSECURE_PW -Language=English -You have entered an insecure or weak password. -. - -MessageId= -SymbolicName=MSG_ERR_NO_IDENTITY -Language=English -There were no identities for which to renew credentials. -. - -MessageId= -SymbolicName=MSG_CTX_PASSWD -Language=English -Changing Kerberos 5 Password -. - -MessageId= -SymbolicName=MSG_PWD_UNKNOWN -Language=English -Unknown error -. - -MessageId= -SymbolicName=MSG_PWD_NOT_SAME -Language=English -The new passwords are not the same. -. - -MessageId= -SymbolicName=MSG_PWD_S_NOT_SAME -Language=English -The new password is asked for twice to protect against a mistake when setting the new password. Both instances of the new password must be the same. Please correct this and try again. -. - -MessageId= -SymbolicName=MSG_PWD_SAME -Language=English -The new and the old passwords are the same. -. - -MessageId= -SymbolicName=MSG_PWD_S_SAME -Language=English -Please type a new password to continue. -. - -MessageId= -SymbolicName=MSG_PWD_NO_IDENTITY -Language=English -There are no identities selected. -. - -MessageId= -SymbolicName=MSG_PWD_S_NO_IDENTITY -Language=English -Please select an identity to change the password. -. - -MessageId= -SymbolicName=MSG_ERR_S_INTEGRITY -Language=English -This is commonly caused by an incorrect password. Please verify that the password is correct and note that passwords are case sensitive. -. - -MessageId= -SymbolicName=MSG_ERR_CTX_DESTROY_CREDS -Language=English -Destroying Krb5 tickets -. - -MessageId= -SymbolicName=MSG_ERR_NETDOWN -Language=English -A network connection is unavailable -. - -MessageId= -SymbolicName=MSG_ERR_S_NETRETRY -Language=English -Please check your network connection or contact your network administrator for assistance. -. - -MessageId= -SymbolicName=MSG_ERR_TEMPDOWN -Language=English -A temporary network error caused the operation to fail -. - -MessageId= -SymbolicName=MSG_ERR_S_TEMPDOWN -Language=English -Please try again in a few minutes -. - -MessageId= -SymbolicName=MSG_ERR_NOHOST -Language=English -A server could not be reached -. - -MessageId= -SymbolicName=MSG_ERR_S_NOHOST -Language=English -This can be caused by the server being unavailable, network errors, or improper configuration. Please try again or contact your administrator for assistance. -. - -MessageId= -SymbolicName=MSG_ -Language=English -. diff --git a/src/windows/identity/plugins/krb5/langres.h b/src/windows/identity/plugins/krb5/langres.h deleted file mode 100644 index 2c6566d78..000000000 --- a/src/windows/identity/plugins/krb5/langres.h +++ /dev/null @@ -1,216 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by C:\work\pismere\athena\auth\krb5\src\windows\identity\plugins\krb5\lang\en_us\langres.rc -// -#define IDS_UNK_ADDR_FMT 101 -#define IDD_NC_KRB5 102 -#define IDS_KRB5_CREDTEXT_0 102 -#define IDS_KRB5_CCNAME_SHORT_DESC 103 -#define IDS_KEY_ENCTYPE_SHORT_DESC 104 -#define IDD_CONFIG 104 -#define IDS_TKT_ENCTYPE_SHORT_DESC 105 -#define IDD_CFG_REALMS 105 -#define IDS_KEY_ENCTYPE_LONG_DESC 106 -#define IDD_CFG_IDS_TAB 106 -#define IDS_TKT_ENCTYPE_LONG_DESC 107 -#define IDD_PP_KRB5C 107 -#define IDS_ADDR_LIST_SHORT_DESC 108 -#define IDD_PP_KRB5 108 -#define IDS_ADDR_LIST_LONG_DESC 109 -#define IDD_CFG_ID_TAB 109 -#define IDS_ETYPE_NULL 110 -#define IDD_NC_KRB5_PASSWORD 110 -#define IDS_ETYPE_DES_CBC_CRC 111 -#define IDD_CFG_CACHES 111 -#define IDS_ETYPE_DES_CBC_MD4 112 -#define IDI_PLUGIN 112 -#define IDS_ETYPE_DES_CBC_MD5 113 -#define IDI_DELETED 113 -#define IDS_ETYPE_DES_CBC_RAW 114 -#define IDI_NEW 114 -#define IDS_ETYPE_DES3_CBC_SHA 115 -#define IDI_NORMAL 115 -#define IDS_ETYPE_DES3_CBC_RAW 116 -#define IDI_MODIFIED 116 -#define IDS_ETYPE_DES_HMAC_SHA1 117 -#define IDS_ETYPE_DES3_CBC_SHA1 118 -#define IDS_ETYPE_AES128_CTS_HMAC_SHA1_96 119 -#define IDS_ETYPE_AES256_CTS_HMAC_SHA1_96 120 -#define IDS_ETYPE_ARCFOUR_HMAC 121 -#define IDS_ETYPE_ARCFOUR_HMAC_EXP 122 -#define IDS_ETYPE_UNKNOWN 123 -#define IDS_ETYPE_LOCAL_DES3_HMAC_SHA1 124 -#define IDS_ETYPE_LOCAL_RC4_MD4 125 -#define IDS_KRB5_SHORT_DESC 126 -#define IDS_KRB5_LONG_DESC 127 -#define IDS_KRB4_SHORT_DESC 128 -#define IDS_KRB4_LONG_DESC 129 -#define IDS_KRB5_FLAGS_SHORT_DESC 130 -#define IDS_RENEW_TILL_SHORT_DESC 131 -#define IDS_RENEW_TILL_LONG_DESC 132 -#define IDS_RENEW_FOR_SHORT_DESC 133 -#define IDS_RENEW_FOR_LONG_DESC 134 -#define IDS_KRB5_CCNAME_LONG_DESC 135 -#define IDS_NC_USERNAME 136 -#define IDS_NC_REALM 137 -#define IDS_KRB5_WARNING 138 -#define IDS_K5ERR_NAME_EXPIRED 139 -#define IDS_K5ERR_KEY_EXPIRED 140 -#define IDS_KRB5_WARN_FMT 141 -#define IDS_K5ERR_FMT 142 -#define IDS_K5CFG_SHORT_DESC 143 -#define IDS_K5CFG_LONG_DESC 144 -#define IDS_K5RLM_SHORT_DESC 145 -#define IDS_K5RLM_LONG_DESC 146 -#define IDS_K5CFG_IDS_SHORT_DESC 147 -#define IDS_K5CFG_IDS_LONG_DESC 148 -#define IDS_K5CFG_ID_SHORT_DESC 149 -#define IDS_K5CFG_ID_LONG_DESC 150 -#define IDS_PLUGIN_DESC 151 -#define IDS_NC_PWD_BANNER 152 -#define IDS_NC_PWD_PWD 153 -#define IDS_NC_PWD_NPWD 154 -#define IDS_NC_PWD_NPWD_AGAIN 155 -#define IDS_KRB5_CREDTEXT_P0 156 -#define IDS_K5CFG_IMPORT_OPTIONS 157 -#define IDS_IDENTPRO_DESC 158 -#define IDS_K5CCC_SHORT_DESC 159 -#define IDS_K5CCC_LONG_DESC 160 -#define IDS_CFG_FCTITLE 161 -#define IDS_CFG_FCN_WARNING 162 -#define IDS_CFG_FCN_W_NOTFOUND 163 -#define IDS_CFG_FCN_W_RELATIVE 164 -#define IDS_CFG_FCOPENTITLE 165 -#define IDS_UNAVAILABLE 166 -#define IDS_FLG_FORWARDABLE 167 -#define IDS_FLG_FORWARDED 168 -#define IDS_FLG_PROXIABLE 169 -#define IDS_FLG_PROXY 170 -#define IDS_FLG_MAY_POSTDATE 171 -#define IDS_FLG_POSTDATED 172 -#define IDS_FLG_INVALID 173 -#define IDS_FLG_RENEWABLE 174 -#define IDS_FLG_INITIAL 175 -#define IDS_FLG_PRE_AUTH 176 -#define IDS_FLG_HW_AUTH 177 -#define IDS_FLG_TRANSIT_POL 178 -#define IDS_FLG_OK_DELEGATE 179 -#define IDS_FLG_ANONYMOUS 180 -#define IDS_K5ERR_CANTWRITEPROFILE 181 -#define IDS_K5ERR_PROFNOWRITE 182 -#define IDS_K5ERR_PROFUSETEMP 183 -#define IDS_K5ERR_PROFSUGGEST 184 -#define IDS_CFG_RE_REALMS 185 -#define IDS_CFG_RE_KDCS 186 -#define IDS_CFG_RE_DMAPS 187 -#define IDS_CFG_RE_KDCS_R 188 -#define IDS_CFG_RE_DMAPS_R 189 -#define IDS_CFG_RE_HEAD_SVR 190 -#define IDS_CFG_RE_HEAD_ADMIN 191 -#define IDS_CFG_RE_HEAD_MASTER 192 -#define IDS_CFG_RE_HEAD_DOMAIN 193 -#define IDS_CFG_RE_NEWREALM 194 -#define IDS_YES 195 -#define IDS_NO 196 -#define IDS_CFG_RE_NEWSERVER 197 -#define IDS_CFG_RE_NEWDMAP 198 -#define IDS_KRB5_NC_NAME 199 -#define IDS_NCERR_IDENT_TOO_LONG 200 -#define IDS_NCERR_IDENT_INVALID 201 -#define IDS_NCERR_IDENT_UNKNOWN 202 -#define IDS_CFG_RE_ARNUT 203 -#define IDS_CFG_RE_ARNUM 204 -#define IDS_CFG_RE_ASNUT 205 -#define IDS_CFG_RE_ASNUM 206 -#define IDS_CFG_RE_DMNUT 207 -#define IDS_CFG_RE_DMNUM 208 -#define IDS_CFG_RE_MNR 209 -#define IDS_CFG_RE_MDR 210 -#define IDS_CFG_RE_MNK 211 -#define IDS_CFG_RE_MDK 212 -#define IDS_CFG_RE_MAK 213 -#define IDS_CFG_RE_MMK 214 -#define IDS_CFG_RE_MND 215 -#define IDS_CFG_RE_MDD 216 -#define IDS_KVNO_SHORT_DESC 217 -#define IDS_KVNO_LONG_DESC 218 -#define IDC_NCK5_RENEWABLE 1002 -#define IDC_NCK5_FORWARDABLE 1004 -#define IDC_NCK5_REALM 1005 -#define IDC_NCK5_ADD_REALMS 1006 -#define IDC_NCK5_LIFETIME_EDIT 1008 -#define IDC_NCK5_RENEW_EDIT 1009 -#define IDC_PPK5_CRENEW 1014 -#define IDC_PPK5_CFORWARD 1015 -#define IDC_PPK5_CPROXY 1016 -#define IDC_PPK5_NAME 1017 -#define IDC_PPK5_ISSUE 1018 -#define IDC_PPK5_VALID 1019 -#define IDC_PPK5_RENEW 1020 -#define IDC_CHECK2 1022 -#define IDC_CHECK4 1024 -#define IDC_PPK5_LIFETIME 1024 -#define IDC_CHECK5 1025 -#define IDC_CFG_LBL_REALM 1025 -#define IDC_CFG_DEFREALM 1026 -#define IDC_CFG_LBL_CFGFILE 1029 -#define IDC_CFG_CFGFILE 1030 -#define IDC_CFG_WINGRP 1031 -#define IDC_LBL_IMPORT 1032 -#define IDC_CFG_IMPORT 1033 -#define IDC_CFG_LBL_HOSTNAME 1034 -#define IDC_CFG_HOSTNAME 1035 -#define IDC_CFG_LBL_DOMAIN 1036 -#define IDC_CFG_DOMAIN 1037 -#define IDC_CFG_CREATECONFIG 1038 -#define IDC_CFG_BROWSE 1039 -#define IDC_CFG_CFGFILEGRP 1040 -#define IDC_CFG_CFGREALMS 1041 -#define IDC_CFG_BROWSE2 1042 -#define IDC_CFG_REALMS 1044 -#define IDC_CFG_DOMAINGRP 1045 -#define IDC_CFG_SERVERSGRP 1046 -#define IDC_LIST3 1047 -#define IDC_CFG_KDC 1047 -#define IDC_LIST4 1048 -#define IDC_CFG_DMAP 1048 -#define IDC_CFG_LBL_DEFLIFE 1049 -#define IDC_CFG_DEFLIFE 1050 -#define IDC_CFG_LBL_DEFRLIFE 1051 -#define IDC_CFG_DEFRLIFE 1052 -#define IDC_CFG_LIFEGRP 1053 -#define IDC_CFG_LRNG_MIN 1054 -#define IDC_CFG_LRNG_MAX 1055 -#define IDC_CFG_RLRNG_MIN 1056 -#define IDC_CFG_RLRNG_MAX 1057 -#define IDC_CFG_CCACHE 1058 -#define IDC_CFG_FCGRP 1059 -#define IDC_CFG_FCLIST 1060 -#define IDC_CFG_FCNAME 1062 -#define IDC_CFG_ADD 1064 -#define IDC_CFG_REMOVE 1065 -#define IDC_CFG_INCAPI 1066 -#define IDC_CFG_INCMSLSA 1067 -#define IDC_PPK5_FLAGS 1072 -#define IDC_CFG_INCREALMS 1073 -#define IDC_NCK5_ADDRESS 1074 -#define IDC_IPADDRESS1 1075 -#define IDC_NCK5_PUBLICIP 1075 -#define IDC_CFG_PUBLICIP 1075 -#define IDC_CFG_RENEW 1076 -#define IDC_CHECK3 1077 -#define IDC_CFG_ADDRESSLESS 1077 -#define IDC_CFG_FORWARD 1078 -#define IDC_CHECK1 1079 -#define ID_FOO_BAR 40001 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 219 -#define _APS_NEXT_COMMAND_VALUE 40002 -#define _APS_NEXT_CONTROL_VALUE 1080 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/src/windows/identity/plugins/krb5/version.rc b/src/windows/identity/plugins/krb5/version.rc deleted file mode 100644 index c894dff63..000000000 --- a/src/windows/identity/plugins/krb5/version.rc +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright (c) 2004 Massachusetts Institute of Technology - * - * 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<netidmgr_intver.h> - -#ifndef LANGVER - -#define STR_FILEDESC "Kerberos v5 Plugin for Network Identity Manager" -#define STR_INTNAME "krb5cred" -#define STR_ORIGNAME "krb5cred.dll" - -#else - -#ifdef LANG_en_us - -#define STR_FILEDESC "English(US) language resources for the Keberos 5 plugin" -#define STR_INTNAME "krb5cred_en_us" -#define STR_ORIGNAME "krb5cred_en_us.dll" - -#else - -#error Unknown langugae - -#endif - -#endif - -1 VERSIONINFO - FILEVERSION KH_VERSION_LIST - PRODUCTVERSION KH_VERSION_LIST - FILEFLAGSMASK KH_VER_FILEFLAGMASK - FILEFLAGS KH_VER_FILEFLAGS - FILEOS KH_VER_FILEOS - FILETYPE KH_VER_FILETYPEDLL - FILESUBTYPE 0 - { - BLOCK "StringFileInfo" - { - BLOCK "040904b0" - { - VALUE "CompanyName", KH_VERSTR_COMPANY_1033 - VALUE "FileDescription", STR_FILEDESC - VALUE "FileVersion", KH_VERSTR_VERSION_1033 - VALUE "InternalName", STR_INTNAME - VALUE "LegalCopyright", KH_VERSTR_COPYRIGHT_1033 - VALUE "OriginalFilename", STR_ORIGNAME - VALUE "ProductName", "Network Identity Manager" - VALUE "ProductVersion", KH_VERSTR_PRODUCT_1033 -#ifdef KH_VERSTR_COMMENT_1033 - VALUE "Comment", KH_VERSTR_COMMENT_1033 -#endif -#ifndef LANGVER - VALUE NIMV_MODULE, "MITKrb5" - VALUE NIMV_PLUGINS, "Krb5Cred,Krb5Ident" - VALUE NIMV_APIVER, KH_VERSION_STRINGAPI - VALUE NIMV_SUPPORT, "http://web.mit.edu/kerberos" -#endif - } - } - - BLOCK "VarFileInfo" - { - VALUE "Translation", 0x409, 0x4b0 - } - } diff --git a/src/windows/identity/sample/templates/credprov/Makefile b/src/windows/identity/sample/templates/credprov/Makefile deleted file mode 100644 index 898c614ca..000000000 --- a/src/windows/identity/sample/templates/credprov/Makefile +++ /dev/null @@ -1,278 +0,0 @@ -# -# Copyright (c) 2006 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. - -# Environment variables -# --------------------- -# -# Before running the makefile, set the environment variable KFWSDKDIR -# to the directory containing the Kerberos for Windows SDK version 3.1 -# or later. The path should not end in a backslash. - -# Configuration settings -# ---------------------- - -# Declare a few things about our plug-in. - -# TODO: Change the plug-in name -PLUGINNAME=MyPlugin - -# TODO: Change the module name -MODULENAME=MyModule - -# TODO: Change the credtype name -CREDTYPENAME=MyCred - -# TODO: Change this as appropriate -DLLBASENAME=myplugin - -# Version info - -# TODO: Change the version numbers -VERMAJOR=0 -VERMINOR=1 -VERAUX =0 -VERPATCH=0 - -# Leave these as-is -VERLIST=$(VERMAJOR).$(VERMINOR).$(VERAUX).$(VERPATCH) -VERLISTC=$(VERMAJOR),$(VERMINOR),$(VERAUX),$(VERPATCH) - -# Various checks - -!ifndef MSSDK -! error Platform SDK environment variables not set. -!endif - -!ifndef KFWSDKDIR -! error KFWSDKDIR environment variable not set. -!endif - -# Directories - -BUILDROOT=. - -!ifdef NODEBUG -BUILDTYPE=release -!else -BUILDTYPE=debug -!endif - -!ifndef CPU -!error Environment variable 'CPU' is not defined. -!endif - -DEST=$(BUILDROOT)\dest\$(CPU)_$(BUILDTYPE) -OBJ=$(BUILDROOT)\obj\$(CPU)_$(BUILDTYPE) - -!ifndef NIDMRAWDIRS -KFWINCDIR=$(KFWSDKDIR)\inc -NIDMINCDIR=$(KFWINCDIR)\netidmgr -NIDMLIBDIR=$(KFWSDKDIR)\lib\$(CPU) -!else -NIDMINCDIR=$(KFWSDKDIR)\inc -NIDMLIBDIR=$(KFWSDKDIR) -!endif - -# Win32.mak - -!include <Win32.Mak> - -# Program macros - -CD=cd -RM=del /q -MKDIR=mkdir -RMDIR=rmdir -ECHO=echo -CP=copy /y -LINK=link -MC=mc - -# Lots more macros - -incflags = -I"$(NIDMINCDIR)" -I"$(OBJ)" -I. -rincflags = /i "$(NIDMINCDIR)" /i "$(OBJ)" /i . - -ldebug = $(ldebug) /DEBUG -cdebug = $(cdebug) -Os -Zi - -cdefines = $(cdefines) -DUNICODE -D_UNICODE - -C2OBJ=$(CC) $(cdebug) $(cflags) $(incflags) $(cdefines) /Fo"$@" /c $** - -DLLGUILINK=$(LINK) /NOLOGO $(ldebug) $(dlllflags) $(guilibsmt) /OUT:"$@" /IMPLIB:$(DEST)\$(@B).lib $** - -DLLRESLINK=$(LINK) /NOLOGO /DLL /NOENTRY /MACHINE:$(PROCESSOR_ARCHITECTURE) /OUT:"$@" $** - -RC2RES=$(RC) $(RFLAGS) $(rincflags) /fo "$@" $** - -MC2RC=$(MC) $(MCFLAGS) -h "$(OBJ)\" -m 1024 -r "$(OBJ)\" -x "$(OBJ)\" $** - -{}.c{$(OBJ)}.obj: - $(C2OBJ) - -{$(OBJ)}.c{$(OBJ)}.obj: - $(C2OBJ) - -{}.rc{$(OBJ)}.res: - $(RC2RES) - -mkdirs:: -!if !exist($(DEST)) - $(MKDIR) "$(DEST)" -!endif -!if !exist($(OBJ)) - $(MKDIR) "$(OBJ)" -!endif - -clean:: - $(RM) "$(OBJ)\*.*" - $(RM) "$(DEST)\*.*" - -.SUFFIXES: .h - -# -# Manifest handling -# -# Starting with Visual Studio 8, the C compiler and the linker -# generate manifests so that the applications will link with the -# correct side-by-side DLLs at run-time. These are required for -# correct operation under Windows XP. We also have custom manifests -# which need to be merged with the manifests that VS creates. -# -# The syntax for invoking the _VC_MANIFEST_EMBED_foo macro is: -# $(_VC_MANIFEST_EMBED_???) <any additional manifests that need to be merged in> -# - -!ifndef MT -MT=mt.exe -nologo -!endif - -_VC_MANIFEST_EMBED_EXE= \ -if exist "$@.manifest" $(MT) -outputresource:"$@";1 -manifest "$@.manifest" - -_VC_MANIFEST_EMBED_DLL=$(_VC_MANIFEST_EMBED_EXE) - -# Note that if you are merging manifests, then the VS generated -# manifest should be cleaned up after calling _VC_MANIFEST_EMBED_???. -# This ensures that even if the DLL or EXE is executed in-place, the -# embedded manifest will be used. Otherwise the $@.manifest file will -# be used. -_VC_MANIFEST_CLEAN= \ -if exist "$@.manifest" $(RM) "$@.manifest" - -# End of manifest handling - - -# Now for the actual build stuff - -DLL=$(DEST)\$(DLLBASENAME).dll - -LIBFILES= \ - "$(NIDMLIBDIR)\nidmgr32.lib" - -OBJFILES= \ - $(OBJ)\credacq.obj \ - $(OBJ)\credtype.obj \ - $(OBJ)\main.obj \ - $(OBJ)\plugin.obj \ - $(OBJ)\proppage.obj \ - $(OBJ)\config_main.obj \ - $(OBJ)\config_id.obj \ - $(OBJ)\config_ids.obj - -DLLRESFILE=$(OBJ)\version.res - -CONFIGHEADER=$(OBJ)\credacq_config.h - -all: mkdirs $(CONFIGHEADER) $(DLL) lang - -$(CONFIGHEADER): Makefile - $(CP) << "$@" -/* This is a generated file. Do not modify directly. */ - -#pragma once - -#define MYPLUGIN_DLLBASE "$(DLLBASENAME)" - -#define MYPLUGIN_NAME "$(PLUGINNAME)" - -#define MYMODULE_NAME "$(MODULENAME)" - -#define MYCREDTYPE_NAME "$(CREDTYPENAME)" - -#define VERSION_MAJOR $(VERMAJOR) -#define VERSION_MINOR $(VERMINOR) -#define VERSION_AUX $(VERAUX) -#define VERSION_PATCH $(VERPATCH) - -#define VERSION_LIST $(VERLIST) -#define VERSION_LISTC $(VERLISTC) -#define VERSION_STRING "$(VERLIST)" - -<< - -clean:: - $(RM) $(CONFIGHEADER) - -$(DLL): $(OBJFILES) $(DLLRESFILE) - $(DLLGUILINK) $(LIBFILES) - $(_VC_MANIFEST_EMBED_DLL) - $(_VC_MANIFEST_CLEAN) - -clean:: - $(RM) $(DLL) - -# Language specific resources - -# (repeat the following block as needed, redefining LANG for each -# supported language) - -# English-US -LANG=en_us - -LANGDLL=$(DEST)\$(DLLBASENAME)_$(LANG).dll - -lang:: $(LANGDLL) - -$(LANGDLL): $(OBJ)\langres_$(LANG).res $(OBJ)\version_$(LANG).res - $(DLLRESLINK) - $(_VC_MANIFEST_EMBED_DLL) - $(_VC_MANIFEST_CLEAN) - -clean:: - $(RM) $(LANGDLL) - -$(OBJ)\version_$(LANG).res: version.rc - $(RC) $(RFLAGS) $(rincflags) /d LANGRES /d LANG_$(LANG) /fo $@ $** - -clean:: - $(RM) $(OBJ)\version_$(LANG).res - -$(OBJ)\langres_$(LANG).res: lang\$(LANG)\langres.rc - $(RC2RES) - -clean:: - $(RM) $(OBJ)\langres_$(LANG).res - -# /English-US diff --git a/src/windows/identity/sample/templates/credprov/README b/src/windows/identity/sample/templates/credprov/README deleted file mode 100644 index 2ecf88188..000000000 --- a/src/windows/identity/sample/templates/credprov/README +++ /dev/null @@ -1,250 +0,0 @@ - - Network Identity Manager - - Credentials Provider Plug-in Template - ------------------------------------------------------------------- - - CONTENTS - - 1. INTRODUCTION - 2. COPYRIGHT AND LICENSE - 3. ROADMAP OF THE TEMPLATE - 4. BUILD REQUIREMENTS - 5. BUILDING - 6. RUNNING THE PLUG-IN - 7. KNOWN ISSUES - 8. SUPPORT / BUG REPORTS - ------------------------------------------------------------------- - -1. INTRODUCTION - - This directory and subdirectories contain a plug-in template for - creating a credentials provider plug-in for Network Identity - Manager. A credentials manager plug-in provides knowledge of a - specifc credentials type to the NetIDMgr application and manages - those credentials on behalf of NetIDMgr. - - This version of the template adheres to the following version - constraints: - - Network Identity Manager API version : 5 - - (This API version corresponds to the MIT Kerberos for Windows - version 3.1). - - The source files in this template can be used to build the plug-in - DLL and the US English resource DLL for the plug-in. In its - current form, the plug-in doesn't do any credentials management. - However, it implements a number of stub functions that can be - filled in to perform the necessary credentials management - operations. - ------------------------------------------------------------------- - -2. COPYRIGHT AND LICENSE - - Copyright (c) 2006 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. - ------------------------------------------------------------------- - -3. ROADMAP OF THE TEMPLATE - - The template consists of the following files and directories: - - .\README - - This file. - - .\Makefile - - The primary (and only) Makefile used by 'nmake' to build the - plug-in. In addition to providing build directives, it also - contains a set of macros which defines the names and version - information that is used throughout the plug-in code. - - Look for the 'Configuration Settings' section of the Makefile - for the macros. If you are basing a plug-in on this template, - you will want to change these macros. These macros will be - used to generate 'credacq_config.h', a header file included by - 'credprov.h' so that the values of the macros can be used in C - code. - - .\credprov.h - - The main header file for all the C source files in the - plug-in. - - .\main.c - - Provides the entry points for the module. - - .\plugin.c - - Provides the message processing functions and support routines - for implementing the plug-in. Note that some of the message - processing routines have been moved to other sources files - based on their use. - - .\credtype.c - - Functions for handling our credentials type. - - .\credacq.c - - Handlers for the credentials acquisition messages including - handling the user interface for the new credentials dialogs. - - .\proppage.c - - Dialog procedures and support code for displaying property - sheets for credentials that belong to our credentials type. - - .\config_main.c - - Dialog procedures and support code for providing the general - configuration panel for this plug-in. - - .\config_id.c - - Dialog procedures and support code for providing per-identity - configuration for this plug-in. - - .\config_ids.c - - Dialog procedures and support code for providing configuration - for defaults across all identities. - - .\version.rc - - Version information for the plug-in as well as all the - language resource DLLs. - - .\langres.h - - Declarations for the language resources (see below). In its - current form, it was generated via Visual Studio while editing - the language resouces file. - - .\images\plugin.ico - - A generic plug-in icon. - - .\lang\en_us\langres.rc - - US-English language resources. This will be used to create - the language resource DLL. - ------------------------------------------------------------------- - -4. BUILD REQUIREMENTS - - Microsoft(R) Platform SDK (Windows Server 2003 or later) - - (http://www.microsoft.com/msdownload/platformsdk/sdkupdate/) - - Microsoft(R) Visual C++ (Visual Studio 2003 or later) - - Although not tested, the template should build using the - Microsoft Visual C++ toolkit. - - MIT Kerberos for Windows (version 3.1 or later) SDK - - At the current time, version 3.1 is still in beta. However, - the template will not work with the 3.0 SDK due to a number of - changes that were made to the NetIDMgr API between 3.0 and - 3.1. - ------------------------------------------------------------------- - -5. BUILDING - - The build process is fairly starightforward. The source is set up - to build using 'nmake', a build tool distributed with the Platform - SDK as well as with Visual Studio. - - 1. Open a command prompt with a suitable build environment. - - From a plain command prompt, you can set up a debug build - environment targetting Windows XP (32-bit) with: - - > "%PROGRAMFILES%\Microsoft Platform SDK\SetEnv.Cmd" /XP32 /DEBUG - - 2. Set the environment variable KFWSDKDIR to point to the root of - the Kerberos for Windows 3.1 SDK. (i.e. %KFWSDKDIR%\inc - should be the include directory of the SDK) - - > SET KFWSDKDIR=%PROGRAMFILES%\MIT\Kerberos - - 3. Start the build: - - > NMAKE all - - The build target 'all' builds the plug-in and the language - resources. There is an additional build target 'clean' which - removes the temporary files and the binaries generated during - the build. - - Assuming everything goes well, the plug-in binaries should be - created under a subdirectory under 'dest'. The name of the - subdirectory reflects the target architecture and the build - type ('debug' or 'release'). - ------------------------------------------------------------------- - -6. RUNNING THE PLUG-IN - - Once the binaries for the plug-in have been built, you need to - register the plug-in with NetIDMgr by adding a registry value as - follows: - - [HKEY_CURRENT_USER\Software\MIT\NetIDMgr\PluginManager\Modules\<Module name>] - "ImagePath"="<path>" - - The <path> should be the full path to the plug-in DLL. - - <Module name> is the name of the module that you built. The - default value specified in the template is 'MyModule'. This is - the value of the macro 'MODULENAME' defined in the 'Makefile'. - - Once this is done, you need to restart NetIDMgr so that it will - pick up the new plug-in. - ------------------------------------------------------------------- - -7. KNOWN ISSUES - - 1. With the current MIT Kerberos for Windows 3.1 beta, NetIDMgr - will fail to load the plug-in when tries to load the plug-in - for the first time. Restarting NetIDMgr will fix the problem. - This will be fixed in a future beta and the final release of - KfW 3.1 - ------------------------------------------------------------------- - -8. SUPPORT / BUG REPORTS - - Problems should be sent to netidmgr@secure-endpoints.com - ------------------------------------------------------------------- diff --git a/src/windows/identity/sample/templates/credprov/config_id.c b/src/windows/identity/sample/templates/credprov/config_id.c deleted file mode 100644 index 0fd08617b..000000000 --- a/src/windows/identity/sample/templates/credprov/config_id.c +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (c) 2006 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 "credprov.h" -#include <assert.h> - -/* Dialog procedures and support functions for handling configuration - dialogs for per-identity configuration. When the configuration - dialog is activated, an instance of this dialog will be created for - each identity that the user touches. */ - -/* The structure that we use to hold state information for the - dialog. */ -typedef struct tag_config_id_dlg_data { - khui_config_init_data cfg; /* instance information for this - dialog */ - - khm_handle ident; /* handle to the identity for this - dialog */ - - /* TODO: Add any fields for holding state here */ -} config_id_dlg_data; - -INT_PTR CALLBACK -config_id_dlgproc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - - config_id_dlg_data * d; - - switch (uMsg) { - case WM_INITDIALOG: - { - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - khm_size cb; - khm_int32 rv; - - d = malloc(sizeof(*d)); - assert(d); - ZeroMemory(d, sizeof(*d)); - - /* for subpanels, lParam is a pointer to a - khui_config_init_data strucutre that provides the - instance and context information. It's not a - persistent strucutre, so we have to make a copy. */ - d->cfg = *((khui_config_init_data *) lParam); - - cb = sizeof(idname); - rv = khui_cfg_get_name(d->cfg.ctx_node, idname, &cb); - assert(KHM_SUCCEEDED(rv)); - - rv = kcdb_identity_create(idname, 0, &d->ident); - assert(KHM_SUCCEEDED(rv)); - - /* TODO: perform any other required initialization */ - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) d); -#pragma warning(pop) - } - break; - - case KHUI_WM_CFG_NOTIFY: - d = (config_id_dlg_data *) - GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - break; - - if (HIWORD(wParam) == WMCFG_APPLY) { - /* TODO: apply changes */ - - return TRUE; - } - break; - - case WM_DESTROY: - { - d = (config_id_dlg_data *) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d) { - if (d->ident) - kcdb_identity_release(d->ident); - - /* TODO: perform any other required uninitialization */ - - free(d); - SetWindowLongPtr(hwnd, DWLP_USER, 0); - } - } - break; - } - - return FALSE; - -} diff --git a/src/windows/identity/sample/templates/credprov/config_ids.c b/src/windows/identity/sample/templates/credprov/config_ids.c deleted file mode 100644 index ecc49b20c..000000000 --- a/src/windows/identity/sample/templates/credprov/config_ids.c +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2006 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 "credprov.h" -#include<assert.h> - -/* Dialog procedures and support functions for handling configuration - dialogs for all identities. */ - -/* The structure that we use to hold state information for the - dialog. */ -typedef struct tag_config_ids_dlg_data { - khui_config_init_data cfg; /* instance information for this - dialog */ - - /* TODO: Add any fields for holding state here */ -} config_ids_dlg_data; - -INT_PTR CALLBACK -config_ids_dlgproc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - - config_ids_dlg_data * d; - - switch (uMsg) { - case WM_INITDIALOG: - { - d = malloc(sizeof(*d)); - assert(d); - ZeroMemory(d, sizeof(*d)); - - /* for subpanels, lParam is a pointer to a - khui_config_init_data strucutre that provides the - instance and context information. It's not a - persistent strucutre, so we have to make a copy. */ - d->cfg = *((khui_config_init_data *) lParam); - - /* TODO: perform any additional initialization */ - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) d); -#pragma warning(pop) - } - break; - - case KHUI_WM_CFG_NOTIFY: - d = (config_ids_dlg_data *) - GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - break; - - if (HIWORD(wParam) == WMCFG_APPLY) { - /* TODO: apply changes */ - - return TRUE; - } - break; - - case WM_DESTROY: - d = (config_ids_dlg_data *) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d) { - /* TODO: Perform any additional uninitialization */ - - free (d); - SetWindowLongPtr(hwnd, DWLP_USER, 0); - } - break; - } - - return FALSE; -} diff --git a/src/windows/identity/sample/templates/credprov/config_main.c b/src/windows/identity/sample/templates/credprov/config_main.c deleted file mode 100644 index cf8061b81..000000000 --- a/src/windows/identity/sample/templates/credprov/config_main.c +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (c) 2006 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 "credprov.h" -#include <assert.h> - -/* Dialog procedures and support functions for handling configuration - dialogs for general plug-in configuration. */ - -/* Structure for holding dialog data for the configuration window. */ -typedef struct tag_config_main_dlg_data { - khui_config_node cnode; - - /* TODO: add fields as needed */ -} config_main_dlg_data; - -INT_PTR CALLBACK -config_dlgproc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - - config_main_dlg_data * d; - - switch (uMsg) { - case WM_INITDIALOG: - d = malloc(sizeof(*d)); - assert(d); - ZeroMemory(d, sizeof(*d)); - - /* for configuration panels that are not subpanels, lParam is - a held handle to the configuration node. The handle will - be held for the lifetime of the window. */ - - d->cnode = (khui_config_node) lParam; - - /* TODO: perform any other required initialization stuff - here */ - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) d); -#pragma warning(pop) - - break; - - case KHUI_WM_CFG_NOTIFY: - { - d = (config_main_dlg_data *) - GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - break; - - /* WMCFG_APPLY is the only notification we care about */ - - if (HIWORD(wParam) == WMCFG_APPLY) { - /* TODO: Apply changes and update the state */ - - return TRUE; - } - } - break; - - case WM_DESTROY: - d = (config_main_dlg_data *) - GetWindowLongPtr(hwnd, DWLP_USER); - - /* TODO: perform any other required uninitialization here */ - - if (d) { - free(d); - SetWindowLongPtr(hwnd, DWLP_USER); - } - - break; - } - - return FALSE; - -} diff --git a/src/windows/identity/sample/templates/credprov/credacq.c b/src/windows/identity/sample/templates/credprov/credacq.c deleted file mode 100644 index a65686ea4..000000000 --- a/src/windows/identity/sample/templates/credprov/credacq.c +++ /dev/null @@ -1,408 +0,0 @@ -/* - * Copyright (c) 2006 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 "credprov.h" -#include<assert.h> - -/* This file provides handlers for the credentials acquisition - messages including handling the user interface for the new - credentials dialogs. */ - -/********************************************************************* - -These are stubs for the Window message for the dialog panel. This -dialog panel is the one that is added to the new credentials window -for obtaining new credentials. - -Note that all the UI callbacks run under the UI thread. - - *********************************************************************/ - -/* This structure will hold all the state information we will need to - access from the new credentials panel for our credentials type. */ -struct nc_dialog_data { - khui_new_creds * nc; - khui_new_creds_by_type * nct; - - /* TODO: add any other state information here */ -}; - -/* Note: This callback runs under the UI thread */ -INT_PTR -handle_wm_initdialog(HWND hwnd, WPARAM wParam, LPARAM lParam) { - khui_new_creds * nc = NULL; - khui_new_creds_by_type * nct = NULL; - struct nc_dialog_data * d = NULL; - - nc = (khui_new_creds *) lParam; - khui_cw_find_type(nc, credtype_id, &nct); - - assert(nct); - - d = malloc(sizeof(*d)); - ZeroMemory(d, sizeof(*d)); - - d->nc = nc; - d->nct = nct; - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LPARAM) d); -#pragma warning(pop) - - nct->aux = (LPARAM) d; /* we can use the auxiliary field to - hold a pointer to d */ - - /* TODO: Perform any additional initialization here */ - - return FALSE; -} - -/* Note: This callback runs under the UI thread */ -INT_PTR -handle_khui_wm_nc_notify(HWND hwnd, WPARAM wParam, LPARAM lParam) { - - struct nc_dialog_data * d; - - /* Refer to the khui_wm_nc_notifications enumeration in the - NetIDMgr SDK for the full list of notification messages that - can be sent. */ - - d = (struct nc_dialog_data *) GetWindowLongPtr(hwnd, DWLP_USER); - - if (!d) - return TRUE; - - /* these should be set by now */ - assert(d->nc); - assert(d->nct); - - switch (HIWORD(wParam)) { - case WMNC_UPDATE_CREDTEXT: - { - wchar_t fmt[KHUI_MAXCCH_LONG_DESC]; - wchar_t tbuf[256]; - - /* we are being requested to update the credentials - text. We already allocated a buffer when we created the - nct structure. So we can just set the text here.*/ - - /* TODO: The credtext should reflect the credentials that - will be obtained when the new credentials operation - completes. */ - - LoadString(hResModule, IDS_NC_CT_TEMPLATE, - fmt, ARRAYLENGTH(fmt)); - - LoadString(hResModule, IDS_GEN_NONE, - tbuf, ARRAYLENGTH(tbuf)); - - assert(d->nct->credtext); - - StringCbPrintf(d->nct->credtext, KHUI_MAXCB_LONG_DESC, - fmt, tbuf); - } - break; - - case WMNC_CREDTEXT_LINK: - break; - - case WMNC_IDENTITY_CHANGE: - break; - - case WMNC_DIALOG_PREPROCESS: - break; - } - - return TRUE; -} - -/* Note: This callback runs under the UI thread */ -INT_PTR -handle_wm_command(HWND hwnd, WPARAM wParam, LPARAM lParam) { - - struct nc_dialog_data * d; - - d = (struct nc_dialog_data *) GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - return FALSE; - - /* TODO: handle WM_COMMAND */ - return FALSE; -} - -/* Note: This callback runs under the UI thread */ -INT_PTR -handle_wm_destroy(HWND hwnd, WPARAM wParam, LPARAM lParam) { - - struct nc_dialog_data * d; - - d = (struct nc_dialog_data *) GetWindowLongPtr(hwnd, DWLP_USER); - - if (d) { - d->nc = NULL; - d->nct = NULL; - - free(d); - SetWindowLongPtr(hwnd, DWLP_USER, 0); - } - - /* TODO: Perform any additional uninitialization */ - - return FALSE; -} - -/* Dialog procedure for the new credentials panel for our credentials - type. We just dispatch messages here to other functions here. - - Note that this procedure runs under the UI thread. - */ -INT_PTR CALLBACK -nc_dlg_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - - switch (uMsg) { - case WM_INITDIALOG: - return handle_wm_initdialog(hwnd, wParam, lParam); - - case WM_COMMAND: - return handle_wm_command(hwnd, wParam, lParam); - - case KHUI_WM_NC_NOTIFY: - return handle_khui_wm_nc_notify(hwnd, wParam, lParam); - - case WM_DESTROY: - return handle_wm_destroy(hwnd, wParam, lParam); - - /* TODO: add code for handling other windows messages here. */ - } - - return FALSE; -} - -/******************************************************************* - -The following section contains function stubs for each of the -credentials messages that a credentials provider is likely to want to -handle. It doesn't include a few messages, but they should be easy to -add. Please see the documentation for each of the KMSG_CRED_* -messages for documentation on how to handle each of the messages. - -********************************************************************/ - - -/* Handler for KMSG_CRED_NEW_CREDS */ -khm_int32 -handle_kmsg_cred_new_creds(khui_new_creds * nc) { - - wchar_t wshortdesc[KHUI_MAXCCH_SHORT_DESC]; - size_t cb = 0; - khui_new_creds_by_type * nct = NULL; - - /* This is a minimal handler that just adds a dialog pane to the - new credentials window to handle new credentials acquisition - for this credentials type. */ - - /* TODO: add additional initialization etc. as needed */ - - nct = malloc(sizeof(*nct)); - ZeroMemory(nct, sizeof(*nct)); - - nct->type = credtype_id; - nct->ordinal = -1; - - LoadString(hResModule, IDS_CT_SHORT_DESC, - wshortdesc, ARRAYLENGTH(wshortdesc)); - StringCbLength(wshortdesc, sizeof(wshortdesc), &cb); -#ifdef DEBUG - assert(cb > 0); -#endif - cb += sizeof(wchar_t); - - nct->name = malloc(cb); - StringCbCopy(nct->name, cb, wshortdesc); - - /* while we are at it, we should also allocate space for the - credential text. */ - nct->credtext = malloc(KHUI_MAXCB_LONG_DESC); - ZeroMemory(nct->credtext, KHUI_MAXCB_LONG_DESC); - - nct->h_module = hResModule; - nct->dlg_proc = nc_dlg_proc; - nct->dlg_template = MAKEINTRESOURCE(IDD_NEW_CREDS); - - khui_cw_add_type(nc, nct); - - return KHM_ERROR_SUCCESS; -} - -/* Handler for KMSG_CRED_RENEW_CREDS */ -khm_int32 -handle_kmsg_cred_renew_creds(khui_new_creds * nc) { - - khui_new_creds_by_type * nct; - - /* This is a minimal handler that just adds this credential type - to the list of credential types that are participating in this - renewal operation. */ - - /* TODO: add additional initialization etc. as needed */ - - nct = malloc(sizeof(*nct)); - ZeroMemory(nct, sizeof(*nct)); - - nct->type = credtype_id; - - khui_cw_add_type(nc, nct); - - return KHM_ERROR_SUCCESS; -} - -/* Handler for KMSG_CRED_DIALOG_PRESTART */ -khm_int32 -handle_kmsg_cred_dialog_prestart(khui_new_creds * nc) { - /* TODO: Handle this message */ - - /* The message is sent after the dialog has been created. The - window handle for the created dialog can be accessed through - the hwnd_panel member of the khui_new_creds_by_type structure - that was added for this credentials type. */ - return KHM_ERROR_SUCCESS; -} - -/* Handler for KMSG_CRED_DIALOG_NEW_IDENTITY */ -/* Not a message sent out by NetIDMgr. See documentation of - KMSG_CRED_DIALOG_NEW_IDENTITY */ -khm_int32 -handle_kmsg_cred_dialog_new_identity(khm_ui_4 uparam, - void * vparam) { - /* TODO: Handle this message */ - return KHM_ERROR_SUCCESS; -} - -/* Handler for KMSG_CRED_DIALOG_NEW_OPTIONS */ -/* Not a message sent out by NetIDMgr. See documentation of - KMSG_CRED_DIALOG_NEW_OPTIONS */ -khm_int32 -handle_kmsg_cred_dialog_new_options(khm_ui_4 uparam, - void * vparam) { - /* TODO: Handle this message */ - return KHM_ERROR_SUCCESS; -} - -/* Handler for KMSG_CRED_PROCESS */ -khm_int32 -handle_kmsg_cred_process(khui_new_creds * nc) { - /* TODO: Handle this message */ - - /* This is where the credentials acquisition should be performed - as determined by the UI. Note that this message is sent even - when the user clicks 'cancel'. The value of nc->result should - be checked before performing any credentials acquisition. If - the value is KHUI_NC_RESULT_CANCEL, then no credentials should - be acquired. Otherwise, the value would be - KHUI_NC_RESULT_PROCESS. */ - - return KHM_ERROR_SUCCESS; -} - -/* Handler for KMSG_CRED_END */ -khm_int32 -handle_kmsg_cred_end(khui_new_creds * nc) { - - khui_new_creds_by_type * nct = NULL; - - /* TODO: Perform any additional uninitialization as needed. */ - - khui_cw_find_type(nc, credtype_id, &nct); - - if (nct) { - - khui_cw_del_type(nc, credtype_id); - - if (nct->name) - free(nct->name); - if (nct->credtext) - free(nct->credtext); - - free(nct); - - } - - return KHM_ERROR_SUCCESS; -} - -/* Handler for KMSG_CRED_IMPORT */ -khm_int32 -handle_kmsg_cred_import(void) { - - /* TODO: Handle this message */ - - return KHM_ERROR_SUCCESS; -} - - -/****************************************************** - Dispatch each message to individual handlers above. - */ -khm_int32 KHMAPI -handle_cred_acq_msg(khm_int32 msg_type, - khm_int32 msg_subtype, - khm_ui_4 uparam, - void * vparam) { - - khm_int32 rv = KHM_ERROR_SUCCESS; - - switch(msg_subtype) { - case KMSG_CRED_NEW_CREDS: - return handle_kmsg_cred_new_creds((khui_new_creds *) vparam); - - case KMSG_CRED_RENEW_CREDS: - return handle_kmsg_cred_renew_creds((khui_new_creds *) vparam); - - case KMSG_CRED_DIALOG_PRESTART: - return handle_kmsg_cred_dialog_prestart((khui_new_creds *) vparam); - - case KMSG_CRED_PROCESS: - return handle_kmsg_cred_process((khui_new_creds *) vparam); - - case KMSG_CRED_DIALOG_NEW_IDENTITY: - return handle_kmsg_cred_dialog_new_identity(uparam, vparam); - - case KMSG_CRED_DIALOG_NEW_OPTIONS: - return handle_kmsg_cred_dialog_new_options(uparam, vparam); - - case KMSG_CRED_END: - return handle_kmsg_cred_end((khui_new_creds *) vparam); - - case KMSG_CRED_IMPORT: - return handle_kmsg_cred_import(); - } - - return rv; -} diff --git a/src/windows/identity/sample/templates/credprov/credprov.h b/src/windows/identity/sample/templates/credprov/credprov.h deleted file mode 100644 index 14670934d..000000000 --- a/src/windows/identity/sample/templates/credprov/credprov.h +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Copyright (c) 2006 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$ */ - -/* only include this header file once */ -#pragma once - -#ifndef _UNICODE -#ifndef RC_INVOKED -/* This template relies on _UNICODE being defined to call the correct - APIs. */ -#error This template needs to be compiled with _UNICODE -#endif -#endif - -/* Pull in configuration macros from the Makefile */ -#include "credacq_config.h" - -/* declare a few macros about our plugin */ - -/* The following macro will be used throughout the template to refer - to the name of the plugin. The macro is actually defined the - Makefile generated configuration header file. Modify the - PLUGINNAME Makefile macro.*/ -#ifndef MYPLUGIN_NAME -#error MYPLUGIN_NAME not defined -#endif - -/* Also define the unicde equivalent of the name. In general strings - in NetIDMgr are unicode. */ -#define MYPLUGIN_NAMEW _T(MYPLUGIN_NAME) - -/* The name of the module. This is distinct from the name of the - plugin for several reasons. One of which is that a single module - can provide multiple plugins. Also, having a module name distinct - from a plugin name allows multiple vendors to provide the same - plugin. For example, the module name for the MIT Kerberos 5 plugin - is MITKrb5 while the plugin name is Krb5Cred. The macro is - actually defined in the Makefile generated configuration header - file. Modify the MODULENAME Makefile macro.*/ -#ifndef MYMODULE_NAME -#error MYMODULE_NAME not defined -#endif - -#define MYMODULE_NAMEW _T(MYMODULE_NAME) - -/* When logging events from our plugin, the event logging API can - optionally take a facility name to provide a friendly label to - identify where each event came from. We will default to the plugin - name, although it can be anything. */ -#define MYPLUGIN_FACILITYW MYPLUGIN_NAMEW - -/* Base name of the DLL that will be providing the plugin. We use it - to construct names of the DLLs that will contain localized - resources. This is defined in the Makefile and fed in to the build - through there. The macro to change in the Makefile is - DLLBASENAME. */ -#ifndef MYPLUGIN_DLLBASE -#error MYPLUGIN_DLLBASE Not defined! -#endif - -#define MYPLUGIN_DLLBASEW _T(MYPLUGIN_DLLBASE) - -/* Name of the credentials type that will be registered by the plugin. - This macro is actually defined in the Makefile generated - configuration header file. Change the CREDTYPENAME macro in the - Makefile. */ -#ifndef MYCREDTYPE_NAME -#error MYCREDTYPE_NAME not defined -#endif - -#define MYCREDTYPE_NAMEW _T(MYCREDTYPE_NAME) - -/* Configuration node names. We just concatenate a few strings - together, although you should feel free to completely define your - own. */ - -#define CONFIGNODE_MAIN MYCREDTYPE_NAMEW L"Config" -#define CONFIGNODE_ALL_ID MYCREDTYPE_NAMEW L"AllIdents" -#define CONFIGNODE_PER_ID MYCREDTYPE_NAMEW L"PerIdent" - -#include<windows.h> -/* include the standard NetIDMgr header files */ -#include<netidmgr.h> -#include<tchar.h> - -/* declarations for language resources */ -#include "langres.h" - -#ifndef NOSTRSAFE -#include<strsafe.h> -#endif - -/*************************************************** - Externals -***************************************************/ - -extern kmm_module h_khModule; -extern HINSTANCE hInstance; -extern HMODULE hResModule; - -extern const wchar_t * my_facility; - -extern khm_int32 credtype_id; - -/* Function declarations */ - -/* in plugin.c */ -khm_int32 KHMAPI -plugin_msg_proc(khm_int32 msg_type, - khm_int32 msg_subtype, - khm_ui_4 uparam, - void * vparam); - -/* in credtype.c */ -khm_int32 KHMAPI -cred_is_equal(khm_handle cred1, - khm_handle cred2, - void * rock); - -/* in credacq.c */ -khm_int32 KHMAPI -handle_cred_acq_msg(khm_int32 msg_type, - khm_int32 msg_subtype, - khm_ui_4 uparam, - void * vparam); - -/* in proppage.c */ -INT_PTR CALLBACK -pp_cred_dlg_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); - -/* in config_id.c */ -INT_PTR CALLBACK -config_id_dlgproc(HWND hwndDlg, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); - -/* in config_ids.c */ -INT_PTR CALLBACK -config_ids_dlgproc(HWND hwndDlg, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); - -/* in config_main.c */ -INT_PTR CALLBACK -config_dlgproc(HWND hwndDlg, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); diff --git a/src/windows/identity/sample/templates/credprov/credtype.c b/src/windows/identity/sample/templates/credprov/credtype.c deleted file mode 100644 index cee7df19a..000000000 --- a/src/windows/identity/sample/templates/credprov/credtype.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2006 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 AND - * 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 "credprov.h" - -/* Functions for handling our credentials type. -*/ - -khm_int32 KHMAPI -cred_is_equal(khm_handle cred1, - khm_handle cred2, - void * rock) { - - khm_int32 result; - - /* TODO: Check any additional fields to determine if the two - credentials are equal or not. */ - - /* Note that this is actually a comparison function. It should - return 0 if the credentials are found to be equal, and non-zero - if they are not. We just set this to 0 if we don't need to - check any additional fields and accept the two credentials as - being equal. By the time this function is called, the - identity, name and type of the credentials have already been - found to be equal. */ - result = 0; - - return result; -} diff --git a/src/windows/identity/sample/templates/credprov/images/plugin.ico b/src/windows/identity/sample/templates/credprov/images/plugin.ico deleted file mode 100644 index 99ffbc411b5f9cf6244bd011297fdb6194a5478b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9110 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 U#!gL^-VAqF8Gl23W3Smi0oL6$(EtDd diff --git a/src/windows/identity/sample/templates/credprov/lang/en_us/langres.rc b/src/windows/identity/sample/templates/credprov/lang/en_us/langres.rc deleted file mode 100644 index ebffa5410..000000000 --- a/src/windows/identity/sample/templates/credprov/lang/en_us/langres.rc +++ /dev/null @@ -1,204 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "..\..\langres.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "afxres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "..\\..\\langres.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""afxres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_PLUGIN ICON "..\\..\\images\\plugin.ico" - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_PP_CRED DIALOGEX 0, 0, 235, 156 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Property Page" -FONT 8, "MS Shell Dlg", 0, 0, 0x0 -BEGIN - LTEXT "TODO: layout property page",IDC_STATIC,60,73,110,8 -END - -IDD_PP_IDENT DIALOGEX 0, 0, 235, 156 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Property Page" -FONT 8, "MS Shell Dlg", 0, 0, 0x0 -BEGIN - LTEXT "TODO: layout property page",IDC_STATIC,60,73,106,8 -END - -IDD_NEW_CREDS DIALOGEX 0, 0, 300, 166 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "My Cred Options",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP,7,7,286,11 -END - -IDD_CONFIG DIALOGEX 0, 0, 255, 182 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN -END - -IDD_CONFIG_ID DIALOGEX 0, 0, 235, 151 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN -END - -IDD_CONFIG_IDS DIALOGEX 0, 0, 235, 151 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_PP_CRED, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 228 - TOPMARGIN, 7 - BOTTOMMARGIN, 149 - END - - IDD_PP_IDENT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 228 - TOPMARGIN, 7 - BOTTOMMARGIN, 149 - END - - IDD_NEW_CREDS, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 293 - TOPMARGIN, 7 - BOTTOMMARGIN, 159 - END - - IDD_CONFIG, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 248 - TOPMARGIN, 7 - BOTTOMMARGIN, 175 - END - - IDD_CONFIG_ID, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 228 - TOPMARGIN, 7 - BOTTOMMARGIN, 144 - END - - IDD_CONFIG_IDS, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 228 - TOPMARGIN, 7 - BOTTOMMARGIN, 144 - END -END -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE -BEGIN - IDS_PLUGIN_DESC "My Credentials Provider Plugin" - IDS_CT_SHORT_DESC "My Cred" - IDS_CT_LONG_DESC "My Credential" -END - -STRINGTABLE -BEGIN - IDS_NC_CT_TEMPLATE "<p><a id=""SwitchPanel"" param=""MyCred""><b>My Cred</b></a><tab>: %s</p>" - IDS_NC_CT_TEMPLATE_NL "<p><tab> %s</p>" - IDS_GEN_NONE "(none)" - IDS_CFG_SHORT_DESC "My Creds" - IDS_CFG_LONG_DESC "My Creds Options" - IDS_CFG_IDS_SHORT_DESC "My Creds" - IDS_CFG_IDS_LONG_DESC "My Creds Options for all identities" - IDS_CFG_ID_SHORT_DESC "My Creds" - IDS_CFG_ID_LONG_DESC "My Creds Options for this identity" -END - -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/src/windows/identity/sample/templates/credprov/langres.h b/src/windows/identity/sample/templates/credprov/langres.h deleted file mode 100644 index f59404a8d..000000000 --- a/src/windows/identity/sample/templates/credprov/langres.h +++ /dev/null @@ -1,34 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by C:\work\pismere\athena\auth\krb5\src\windows\identity\sample\templates\credprov\lang\en_us\langres.rc -// -#define IDD_PP_CRED 106 -#define IDD_PP_IDENT 107 -#define IDS_PLUGIN_DESC 109 -#define IDS_CT_SHORT_DESC 110 -#define IDI_PLUGIN 110 -#define IDS_CT_LONG_DESC 111 -#define IDD_NEW_CREDS 112 -#define IDS_NC_CT_TEMPLATE 112 -#define IDS_NC_CT_TEMPLATE_NL 113 -#define IDD_CONFIG 113 -#define IDS_GEN_NONE 114 -#define IDD_CONFIG_ID 114 -#define IDS_CFG_SHORT_DESC 115 -#define IDD_CONFIG_IDS 115 -#define IDS_CFG_LONG_DESC 116 -#define IDS_CFG_IDS_SHORT_DESC 117 -#define IDS_CFG_IDS_LONG_DESC 118 -#define IDS_CFG_ID_SHORT_DESC 119 -#define IDS_CFG_ID_LONG_DESC 120 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 116 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1039 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/src/windows/identity/sample/templates/credprov/main.c b/src/windows/identity/sample/templates/credprov/main.c deleted file mode 100644 index 07da40d57..000000000 --- a/src/windows/identity/sample/templates/credprov/main.c +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright (c) 2006 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 "credprov.h" - -/* This file provides the entry points for the module. The purpose of - each entry point is explained below. -*/ - -kmm_module h_khModule; /* KMM's handle to this module */ -HINSTANCE hInstance; /* handle to our DLL */ -HMODULE hResModule; /* handle to DLL containing language specific resources */ - -const wchar_t * my_facility = MYPLUGIN_FACILITYW; - -/* locales and n_locales are used to provide information to NetIDMgr - about the locales that we support. Each locale that is supported - is represented by a single line below. NetIDMgr will pick a - suitable locale from this list as described in the documentation - for kmm_set_locale_info(). */ -kmm_module_locale locales[] = { - - /* there needs to be at least one language that is supported. - Here we declare that to be US English, and make it the - default. */ - LOCALE_DEF(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US), - MYPLUGIN_DLLBASEW L"_en_us.dll", /* this is the name of - the DLL. We paste a - trailer to basename - of the DLL. This - DLL should reside in - the same directory - as the plugin - DLL. */ - KMM_MLOC_FLAG_DEFAULT) -}; -int n_locales = ARRAYLENGTH(locales); - -/******************************************************************* - init_module - ***************************************************************** - - This is the entry point for the module. Each module can provide - multiple plugins and each plugin will need a separate entry point. - Generally, the module entry point will set up localized resources - and register the plugins. - -*/ -KHMEXP khm_int32 KHMAPI init_module(kmm_module h_module) { - - khm_int32 rv = KHM_ERROR_SUCCESS; - kmm_plugin_reg pi; - wchar_t description[KMM_MAXCCH_DESC]; - int t; - - h_khModule = h_module; - - rv = kmm_set_locale_info(h_module, locales, n_locales); - if(KHM_SUCCEEDED(rv)) { - /* if the call succeeded, then NetIDMgr has picked a localized - resource DLL for us to use. */ - hResModule = kmm_get_resource_hmodule(h_module); - } else - goto _exit; - - /* TODO: Perform any other required initialization operations. */ - - /* register our plugin */ - ZeroMemory(&pi, sizeof(pi)); - - pi.name = MYPLUGIN_NAMEW; /* name of the plugin */ - pi.type = KHM_PITYPE_CRED; /* type. This is a credentials - provider. Setting this type has - the effect of having the plugin - entrypoint being automatically - subscribed to credentials provider - messages. */ - - /* An icon is optional, but we provide one anyway. */ - pi.icon = LoadImage(hResModule, MAKEINTRESOURCE(IDI_PLUGIN), - IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR | LR_DEFAULTSIZE); - pi.flags = 0; - pi.msg_proc = plugin_msg_proc; - pi.description = description; - pi.dependencies = NULL; - t = LoadString(hResModule, IDS_PLUGIN_DESC, - description, ARRAYLENGTH(description)); - if (!t) - description[0] = L'\0'; - else - description[ARRAYLENGTH(description) - 1] = L'\0'; - - rv = kmm_provide_plugin(h_module, &pi); - - /* TODO: register any additional plugins */ - - /* Returning a successful code (KHM_ERROR_SUCCESS) will cause the - plugins to be initialized. If no plugin is successfully - registered while processing init_module or if a code other than - KHM_ERROR_SUCCESS is returned, the module will be immediately - unloaded. */ - - _exit: - return rv; -} - -/********************************************************** - Exit module - ******************************************************** - - Called by the NetIDMgr module manager when unloading the module. - This will get called even if the module is being unloaded due to an - error code returned by init_module(). This callback is required. */ -KHMEXP khm_int32 KHMAPI exit_module(kmm_module h_module) { - - /* Unregistering the plugin is not required at this point. */ - - /* TODO: Perform any other required cleanup here. */ - - return KHM_ERROR_SUCCESS; /* the return code is ignored */ -} - -/* General DLL initialization. It is advisable to not do anything - here and also keep in mind that the plugin will be loaded at a time - where some threads have already started. So DLL_THREAD_ATTACH will - not fire for every thread. In addition, the plugin will be - unloaded before the application and all the threads terminate. */ -BOOL WINAPI DllMain(HINSTANCE hinstDLL, - DWORD fdwReason, - LPVOID lpvReserved) -{ - switch(fdwReason) { - case DLL_PROCESS_ATTACH: - hInstance = hinstDLL; - break; - - case DLL_PROCESS_DETACH: - break; - - case DLL_THREAD_ATTACH: - break; - - case DLL_THREAD_DETACH: - break; - } - - return TRUE; -} diff --git a/src/windows/identity/sample/templates/credprov/plugin.c b/src/windows/identity/sample/templates/credprov/plugin.c deleted file mode 100644 index 9b1b0ce94..000000000 --- a/src/windows/identity/sample/templates/credprov/plugin.c +++ /dev/null @@ -1,382 +0,0 @@ -/* - * Copyright (c) 2006 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 "credprov.h" -#include<assert.h> - -/* This file provides the message processing function and the support - routines for implementing our plugin. Note that some of the - message processing routines have been moved to other source files - based on their use. -*/ - -khm_int32 credtype_id = KCDB_CREDTYPE_INVALID; -khm_handle g_credset = NULL; - -/* Handler for system messages. The only two we handle are - KMSG_SYSTEM_INIT and KMSG_SYSTEM_EXIT. */ -khm_int32 KHMAPI -handle_kmsg_system(khm_int32 msg_type, - khm_int32 msg_subtype, - khm_ui_4 uparam, - void * vparam) { - khm_int32 rv = KHM_ERROR_SUCCESS; - - switch (msg_subtype) { - - /* This is the first message that will be received by a - plugin. We use it to perform initialization operations - such as registering any credential types, data types and - attributes. */ - case KMSG_SYSTEM_INIT: - { - kcdb_credtype ct; - wchar_t short_desc[KCDB_MAXCCH_SHORT_DESC]; - wchar_t long_desc[KCDB_MAXCCH_LONG_DESC]; - khui_config_node cnode; - khui_config_node_reg creg; - - /* First and foremost, we need to register a credential - type. */ - ZeroMemory(&ct, sizeof(ct)); - ct.id = KCDB_CREDTYPE_AUTO; - ct.name = MYCREDTYPE_NAMEW; - - short_desc[0] = L'\0'; - LoadString(hResModule, IDS_CT_SHORT_DESC, - short_desc, ARRAYLENGTH(short_desc)); - - long_desc[0] = L'\0'; - LoadString(hResModule, IDS_CT_LONG_DESC, - long_desc, ARRAYLENGTH(long_desc)); - - ct.icon = NULL; /* We skip the icon for now, but you - can assign a handle to an icon - here. The icon will be used to - represent the credentials type.*/ - - kmq_create_subscription(plugin_msg_proc, &ct.sub); - - ct.is_equal = cred_is_equal; - - rv = kcdb_credtype_register(&ct, &credtype_id); - - /* We create a global credential set that we use in the - plug-in thread. This alleviates the need to create one - everytime we need one. Keep in mind that this should - only be used in the plug-in thread and should not be - touched from the UI thread or any other thread. */ - kcdb_credset_create(&g_credset); - - /* TODO: Perform additional initialization operations. */ - - /* TODO: Also list out the credentials of this type that - already exist. */ - - /* Now we register our configuration panels. */ - - - /* This configuration panel is the one that controls - general options. We leave the identity specific and - identity defaults for other configuration panels. */ - - ZeroMemory(&creg, sizeof(creg)); - - short_desc[0] = L'\0'; - - LoadString(hResModule, IDS_CFG_SHORT_DESC, - short_desc, ARRAYLENGTH(short_desc)); - - long_desc[0] = L'\0'; - - LoadString(hResModule, IDS_CFG_LONG_DESC, - long_desc, ARRAYLENGTH(long_desc)); - - creg.name = CONFIGNODE_MAIN; - creg.short_desc = short_desc; - creg.long_desc = long_desc; - creg.h_module = hResModule; - creg.dlg_template = MAKEINTRESOURCE(IDD_CONFIG); - creg.dlg_proc = config_dlgproc; - creg.flags = 0; - - khui_cfg_register(NULL, &creg); - - /* Now we do the identity specific and identity default - configuration panels. "KhmIdentities" is a predefined - configuration node under which all the identity spcific - configuration is managed. */ - - if (KHM_FAILED(khui_cfg_open(NULL, L"KhmIdentities", &cnode))) { - /* this should always work */ - assert(FALSE); - rv = KHM_ERROR_NOT_FOUND; - break; - } - - /* First the tab panel for defaults for all identities */ - - ZeroMemory(&creg, sizeof(creg)); - - short_desc[0] = L'\0'; - LoadString(hResModule, IDS_CFG_IDS_SHORT_DESC, - short_desc, ARRAYLENGTH(short_desc)); - long_desc[0] = L'\0'; - LoadString(hResModule, IDS_CFG_IDS_LONG_DESC, - long_desc, ARRAYLENGTH(long_desc)); - - creg.name = CONFIGNODE_ALL_ID; - creg.short_desc = short_desc; - creg.long_desc = long_desc; - creg.h_module = hResModule; - creg.dlg_template = MAKEINTRESOURCE(IDD_CONFIG_IDS); - creg.dlg_proc = config_ids_dlgproc; - creg.flags = KHUI_CNFLAG_SUBPANEL; - - khui_cfg_register(cnode, &creg); - - /* Now the panel for per identity configuration */ - - ZeroMemory(&creg, sizeof(creg)); - - short_desc[0] = L'\0'; - LoadString(hResModule, IDS_CFG_ID_SHORT_DESC, - short_desc, ARRAYLENGTH(short_desc)); - long_desc[0] = L'\0'; - LoadString(hResModule, IDS_CFG_ID_LONG_DESC, - long_desc, ARRAYLENGTH(long_desc)); - - creg.name = CONFIGNODE_PER_ID; - creg.short_desc = short_desc; - creg.long_desc = long_desc; - creg.h_module = hResModule; - creg.dlg_template = MAKEINTRESOURCE(IDD_CONFIG_ID); - creg.dlg_proc = config_id_dlgproc; - creg.flags = KHUI_CNFLAG_SUBPANEL | KHUI_CNFLAG_PLURAL; - - khui_cfg_register(cnode, &creg); - - khui_cfg_release(cnode); - } - break; - - /* This is the last message that will be received by the - plugin. */ - case KMSG_SYSTEM_EXIT: - { - khui_config_node cnode; - khui_config_node cn_idents; - - /* It should not be assumed that initialization of the - plugin went well at this point since we receive a - KMSG_SYSTEM_EXIT even if the initialization failed. */ - - if (credtype_id != KCDB_CREDTYPE_INVALID) { - kcdb_credtype_unregister(credtype_id); - credtype_id = KCDB_CREDTYPE_INVALID; - } - - if (g_credset) { - kcdb_credset_delete(g_credset); - g_credset = NULL; - } - - /* Now unregister any configuration nodes we registered. */ - - if (KHM_SUCCEEDED(khui_cfg_open(NULL, CONFIGNODE_MAIN, &cnode))) { - khui_cfg_remove(cnode); - khui_cfg_release(cnode); - } - - if (KHM_SUCCEEDED(khui_cfg_open(NULL, L"KhmIdentities", &cn_idents))) { - if (KHM_SUCCEEDED(khui_cfg_open(cn_idents, - CONFIGNODE_ALL_ID, - &cnode))) { - khui_cfg_remove(cnode); - khui_cfg_release(cnode); - } - - if (KHM_SUCCEEDED(khui_cfg_open(cn_idents, - CONFIGNODE_PER_ID, - &cnode))) { - khui_cfg_remove(cnode); - khui_cfg_release(cnode); - } - - khui_cfg_release(cn_idents); - } - - /* TODO: Perform additional uninitialization - operations. */ - } - break; - } - - return rv; -} - -/* Handler for credentials the refresh message. */ -khm_int32 -handle_kmsg_cred_refresh(void) { - /* TODO: Re-enumerate the credentials of our credentials type */ - - /* - Re-enumerating credentials would look something like this: - - - flush all credentials from g_credset (kcdb_credset_flush()) - - - list out the credentials and add them to g_credset - - - collect the credentials from g_credset to the root credentials - set. (kcdb_credset_collect()) - - Note that when listing credentials, each credential must be - populated with enough information to locate the actual - credential at a later time. - */ - - return KHM_ERROR_SUCCESS; -} - -/* Handler for destroying credentials */ -khm_int32 -handle_kmsg_cred_destroy_creds(khui_action_context * ctx) { - /* TODO: Destroy credentials of our type as specified by the - action context passed in through vparam. */ - - /* The credential set in ctx->credset contains the credentials - that are to be destroyed. */ - - return KHM_ERROR_SUCCESS; -} - -/* Begin a property sheet */ -khm_int32 -handle_kmsg_cred_pp_begin(khui_property_sheet * ps) { - - /* TODO: Provide the information necessary to show a property - page for a credentials belonging to our credential type. */ - - PROPSHEETPAGE *p; - - if (ps->credtype == credtype_id && - ps->cred) { - /* We have been requested to show a property sheet for one of - our credentials. */ - p = malloc(sizeof(*p)); - ZeroMemory(p, sizeof(*p)); - - p->dwSize = sizeof(*p); - p->dwFlags = 0; - p->hInstance = hResModule; - p->pszTemplate = MAKEINTRESOURCE(IDD_PP_CRED); - p->pfnDlgProc = pp_cred_dlg_proc; - p->lParam = (LPARAM) ps; - khui_ps_add_page(ps, credtype_id, 0, p, NULL); - } - - return KHM_ERROR_SUCCESS; -} - -/* End a property sheet */ -khm_int32 -handle_kmsg_cred_pp_end(khui_property_sheet * ps) { - /* TODO: Handle the end of a property sheet. */ - - khui_property_page * p = NULL; - - khui_ps_find_page(ps, credtype_id, &p); - if (p) { - if (p->p_page) - free(p->p_page); - p->p_page = NULL; - } - - return KHM_ERROR_SUCCESS; -} - -/* IP address change notification */ -khm_int32 -handle_kmsg_cred_addr_change(void) { - /* TODO: Handle this message. */ - - return KHM_ERROR_SUCCESS; -} - -/* Message dispatcher for credentials messages. */ -khm_int32 KHMAPI -handle_kmsg_cred(khm_int32 msg_type, - khm_int32 msg_subtype, - khm_ui_4 uparam, - void * vparam) { - khm_int32 rv = KHM_ERROR_SUCCESS; - - switch(msg_subtype) { - case KMSG_CRED_REFRESH: - return handle_kmsg_cred_refresh(); - - case KMSG_CRED_DESTROY_CREDS: - return handle_kmsg_cred_destroy_creds((khui_action_context *) vparam); - - case KMSG_CRED_PP_BEGIN: - return handle_kmsg_cred_pp_begin((khui_property_sheet *) vparam); - - case KMSG_CRED_PP_END: - return handle_kmsg_cred_pp_end((khui_property_sheet *) vparam); - - case KMSG_CRED_ADDR_CHANGE: - return handle_kmsg_cred_addr_change(); - - default: - /* Credentials acquisition messages are all handled in a - different source file. */ - if (IS_CRED_ACQ_MSG(msg_subtype)) - return handle_cred_acq_msg(msg_type, msg_subtype, - uparam, vparam); - } - - return rv; -} - - -/* This is the main message handler for our plugin. All the plugin - messages end up here where we either handle it directly or dispatch - it to other handlers. */ -khm_int32 KHMAPI plugin_msg_proc(khm_int32 msg_type, - khm_int32 msg_subtype, - khm_ui_4 uparam, - void * vparam) { - - switch(msg_type) { - case KMSG_SYSTEM: - return handle_kmsg_system(msg_type, msg_subtype, uparam, vparam); - - case KMSG_CRED: - return handle_kmsg_cred(msg_type, msg_subtype, uparam, vparam); - } - - return KHM_ERROR_SUCCESS; -} diff --git a/src/windows/identity/sample/templates/credprov/proppage.c b/src/windows/identity/sample/templates/credprov/proppage.c deleted file mode 100644 index dc6148ae1..000000000 --- a/src/windows/identity/sample/templates/credprov/proppage.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2006 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 "credprov.h" - -/* Dialog procedure and support code for displaying property sheets - for credentials of type MyCred. */ - -/* Dialog procedure for the property sheet. This will run under the - UI thread when a property sheet is being displayed for one of our - credentials.. */ -INT_PTR CALLBACK -pp_cred_dlg_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - - switch (uMsg) { - case WM_INITDIALOG: - { - khui_property_sheet * ps; - PROPSHEETPAGE * p; - - p = (PROPSHEETPAGE *) lParam; - ps = (khui_property_sheet *) p->lParam; - - /* TODO: Populate the property sheet controls with values - extracted from the credential. (ps->cred) */ - - return FALSE; - } - } - - return FALSE; -} diff --git a/src/windows/identity/sample/templates/credprov/version.rc b/src/windows/identity/sample/templates/credprov/version.rc deleted file mode 100644 index 47b032c4f..000000000 --- a/src/windows/identity/sample/templates/credprov/version.rc +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (c) 2006 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 "credprov.h" -#include<netidmgr_version.h> - -/* We use the same version.rc file for the main plugin DLL as well as - for the localized resource DLLs.*/ - -#ifndef LANGVER - -#define STR_FILEDESC "My Credentials Provider Plugin for NetIDMgr" -#define STR_INTNAME MYPLUGIN_NAME -#define STR_ORIGNAME MYPLUGIN_DLLBASE ".dll" - -#else - -#ifdef LANG_en_us - -#define STR_FILEDESC "English(US) language resources for My Credentials Provider" -#define STR_INTNAME MYPLUGIN_DLLBASE "_en_us" -#define STR_ORIGNAME MYPLUGIN_DLLBASE "_en_us.dll" - -#else - -#error Unknown langugae - -#endif - -#endif - -1 VERSIONINFO - FILEVERSION VERSION_LISTC - PRODUCTVERSION VERSION_LISTC - FILEFLAGSMASK KH_VER_FILEFLAGMASK - FILEFLAGS KH_VER_FILEFLAGS - FILEOS KH_VER_FILEOS - FILETYPE KH_VER_FILETYPEDLL - FILESUBTYPE 0 - { - - BLOCK "StringFileInfo" - { - BLOCK "040904b0" - { - VALUE "CompanyName", "My Company" - VALUE "FileDescription", "My Credentials Provider Plugin" - VALUE "FileVersion", VERSION_STRING - VALUE "InternalName", STR_INTNAME - VALUE "LegalCopyright", "(C) 2006 My Company" - VALUE "OriginalFilename", STR_ORIGNAME - VALUE "ProductName", "My Plugin Product" - VALUE "ProductVersion", VERSION_STRING -#ifndef LANGVER - VALUE NIMV_MODULE, MYMODULE_NAME - -/* if more than one plugin is provided by this module, then all of - those plugins should be listed here separated by commas. */ - VALUE NIMV_PLUGINS, MYPLUGIN_NAME - - VALUE NIMV_APIVER, KH_VERSION_STRINGAPI - VALUE NIMV_SUPPORT, "http://example.com/myplugin" -#endif - } - } - - BLOCK "VarFileInfo" - { - VALUE "Translation", 0x409, 1200 - } - } diff --git a/src/windows/identity/ui/Makefile b/src/windows/identity/ui/Makefile deleted file mode 100644 index cf20127a3..000000000 --- a/src/windows/identity/ui/Makefile +++ /dev/null @@ -1,109 +0,0 @@ -# -# Copyright (c) 2004 Massachusetts Institute of Technology -# -# 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. - - -MODULE=ui -!include <../config/Makefile.w32> - -EXEFILE=$(BINDIR)\netidmgr.exe - -MANIFESTFILE=$(BINDIR)\netidmgr.exe.static.manifest - -OBJFILES= \ - $(OBJ)\main.obj \ - $(OBJ)\mainmenu.obj \ - $(OBJ)\toolbar.obj \ - $(OBJ)\statusbar.obj \ - $(OBJ)\notifier.obj \ - $(OBJ)\timer.obj \ - $(OBJ)\uiconfig.obj \ - $(OBJ)\mainwnd.obj \ - $(OBJ)\credwnd.obj \ - $(OBJ)\htwnd.obj \ - $(OBJ)\passwnd.obj \ - $(OBJ)\newcredwnd.obj \ - $(OBJ)\propertywnd.obj \ - $(OBJ)\credfuncs.obj \ - $(OBJ)\configwnd.obj \ - $(OBJ)\aboutwnd.obj \ - $(OBJ)\reqdaemon.obj \ - $(OBJ)\addrchange.obj \ - $(OBJ)\debugfuncs.obj \ - $(OBJ)\taskbar.obj \ - $(OBJ)\cfg_general_wnd.obj \ - $(OBJ)\cfg_identities_wnd.obj \ - $(OBJ)\cfg_notif_wnd.obj \ - $(OBJ)\cfg_plugins_wnd.obj \ - $(OBJ)\cfg_appear_wnd.obj - -RESFILES= \ - $(OBJ)\khapp.res \ - $(OBJ)\appver.res - -!if ("$(CPU)" == "IA64" ) || ("$(CPU)" == "AMD64" ) || ("$(CPU)" == "ALPHA64" ) -LIBFILES=$(LIBDIR)\nidmgr64.lib -!else -LIBFILES=$(LIBDIR)\nidmgr32.lib -!endif - -SDKLIBFILES= \ - comctl32.lib \ - shell32.lib \ - htmlhelp.lib \ - iphlpapi.lib \ - shlwapi.lib \ - msimg32.lib \ - ole32.lib - -!if "$(APPVER)" != "5.0" -SDKLIBFILES = $(SDKLIBFILES) uxtheme.lib -!endif - -$(OBJ)\uiconfig.c: uiconfig.csv $(CONFDIR)\csvschema.cfg - $(CCSV) $** $@ - -$(OBJ)\khapp.res: lang\en_us\khapp.rc - $(RC2RES) - -$(OBJ)\appver.res: appver.rc - $(RC2RES) - -!if "$(KH_BUILD)"=="RETAIL" -$(MANIFESTFILE): netidmgr.manifest.$(CPU).$(KH_CLVER) -!else -$(MANIFESTFILE): netidmgr.manifest.$(CPU).$(KH_CLVER).debug -!endif - $(CP) $** $@ - -!if ("$(CPU)" == "IA64" ) || ("$(CPU)" == "AMD64" ) || ("$(CPU)" == "ALPHA64" ) -SCLIB=bufferoverflowu.lib -!else -SCLIB= -!endif - -$(EXEFILE): $(OBJFILES) $(RESFILES) $(LIBFILES) - $(EXEGUILINK) $(SDKLIBFILES) $(SCLIB) - $(_VC_MANIFEST_EMBED_EXE) $(MANIFESTFILE) - $(_VC_MANIFEST_CLEAN) - -all: mkdirs $(MANIFESTFILE) $(EXEFILE) diff --git a/src/windows/identity/ui/Makefile.w2k b/src/windows/identity/ui/Makefile.w2k deleted file mode 100644 index a64aea7c3..000000000 --- a/src/windows/identity/ui/Makefile.w2k +++ /dev/null @@ -1,91 +0,0 @@ -# -# Copyright (c) 2004 Massachusetts Institute of Technology -# -# 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. - - -MODULE=ui -!include <../config/Makefile.w2k> - -EXEFILE=$(BINDIR)\netidmgr.exe - -OBJFILES= \ - $(OBJ)\main.obj \ - $(OBJ)\mainmenu.obj \ - $(OBJ)\toolbar.obj \ - $(OBJ)\statusbar.obj \ - $(OBJ)\notifier.obj \ - $(OBJ)\timer.obj \ - $(OBJ)\uiconfig.obj \ - $(OBJ)\mainwnd.obj \ - $(OBJ)\credwnd.obj \ - $(OBJ)\htwnd.obj \ - $(OBJ)\passwnd.obj \ - $(OBJ)\newcredwnd.obj \ - $(OBJ)\propertywnd.obj \ - $(OBJ)\credfuncs.obj \ - $(OBJ)\configwnd.obj \ - $(OBJ)\aboutwnd.obj \ - $(OBJ)\reqdaemon.obj \ - $(OBJ)\addrchange.obj \ - $(OBJ)\debugfuncs.obj \ - $(OBJ)\cfg_general_wnd.obj \ - $(OBJ)\cfg_identities_wnd.obj \ - $(OBJ)\cfg_notif_wnd.obj \ - $(OBJ)\cfg_plugins_wnd.obj \ - $(OBJ)\cfg_appear_wnd.obj - -RESFILES= \ - $(OBJ)\khapp.res \ - $(OBJ)\appver.res - -!if ("$(CPU)" == "IA64" ) || ("$(CPU)" == "AMD64" ) || ("$(CPU)" == "ALPHA64" ) -LIBFILES=$(LIBDIR)\nidmgr64.lib -!else -LIBFILES=$(LIBDIR)\nidmgr32.lib -!endif - -SDKLIBFILES= \ - comctl32.lib \ - shell32.lib \ - htmlhelp.lib \ - iphlpapi.lib \ - shlwapi.lib - -$(OBJ)\uiconfig.c: uiconfig.csv $(CONFDIR)\csvschema.cfg - $(CCSV) $** $@ - -$(OBJ)\khapp.res: lang\en_us\khapp.rc - $(RC2RES) - -$(OBJ)\appver.res: appver.rc - $(RC2RES) - -!if ("$(CPU)" == "IA64" ) || ("$(CPU)" == "AMD64" ) || ("$(CPU)" == "ALPHA64" ) -SCLIB=bufferoverflowu.lib -!else -SCLIB= -!endif - -$(EXEFILE): $(OBJFILES) $(RESFILES) $(LIBFILES) - $(EXEGUILINK) $(SDKLIBFILES) $(SCLIB) - -all: mkdirs $(EXEFILE) diff --git a/src/windows/identity/ui/aboutwnd.c b/src/windows/identity/ui/aboutwnd.c deleted file mode 100644 index a9efcfbff..000000000 --- a/src/windows/identity/ui/aboutwnd.c +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<khmapp.h> -#include<netidmgr_intver.h> -#include<tlhelp32.h> - -#if DEBUG -#include<assert.h> -#endif - -INT_PTR CALLBACK -about_dlg_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - - switch(uMsg) { - case WM_INITDIALOG: - { - HANDLE hsnap; - HWND hw; - - SetDlgItemText(hwnd, IDC_PRODUCT, - TEXT(KH_VERSTR_PRODUCT_1033)); - /* retain the original copyright strings */ -#ifdef OVERRIDE_COPYRIGHT - SetDlgItemText(hwnd, IDC_COPYRIGHT, - TEXT(KH_VERSTR_COPYRIGHT_1033)); -#endif - SetDlgItemText(hwnd, IDC_BUILDINFO, - TEXT(KH_VERSTR_BUILDINFO_1033)); - - hsnap = - CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, - 0); - - if (hsnap != INVALID_HANDLE_VALUE) { - LVCOLUMN lvc; - MODULEENTRY32 mod; - RECT r; - - hw = GetDlgItem(hwnd, IDC_MODULES); -#ifdef DEBUG - assert(hw != NULL); -#endif - - GetWindowRect(hw, &r); - OffsetRect(&r, -r.left, -r.top); - - ZeroMemory(&lvc, sizeof(lvc)); - lvc.mask = LVCF_TEXT | LVCF_WIDTH; - - lvc.pszText = L"Name"; - lvc.cx = r.right / 4; - - ListView_InsertColumn(hw, 0, &lvc); - - lvc.pszText = L"Path"; - lvc.cx = (r.right * 3) / 4; - ListView_InsertColumn(hw, 1, &lvc); - - ZeroMemory(&mod, sizeof(mod)); - mod.dwSize = sizeof(mod); - - /* done with columns, now for the actual data */ - if (!Module32First(hsnap, &mod)) - goto _done_with_modules; - - do { - - LVITEM lvi; - int idx; - - ZeroMemory(&lvi, sizeof(lvi)); - - lvi.mask = LVIF_TEXT; - lvi.pszText = mod.szModule; - idx = ListView_InsertItem(hw, &lvi); - - lvi.mask = LVIF_TEXT; - lvi.iItem = idx; - lvi.iSubItem = 1; - lvi.pszText = mod.szExePath; - ListView_SetItem(hw, &lvi); - - ZeroMemory(&mod, sizeof(mod)); - mod.dwSize = sizeof(mod); - } while(Module32Next(hsnap, &mod)); - - _done_with_modules: - CloseHandle(hsnap); - } - - khm_add_dialog(hwnd); - khm_enter_modal(hwnd); - } - return FALSE; - - case WM_DESTROY: - khm_del_dialog(hwnd); - return TRUE; - - case WM_CLOSE: - khm_leave_modal(); - DestroyWindow(hwnd); - return TRUE; - - case WM_COMMAND: - if (wParam == MAKEWPARAM(IDOK, BN_CLICKED)) { - khm_leave_modal(); - DestroyWindow(hwnd); - } - return TRUE; - } - - return FALSE; -} - -void -khm_create_about_window(void) { - HWND hwnd; - hwnd = CreateDialog(khm_hInstance, - MAKEINTRESOURCE(IDD_ABOUT), - khm_hwnd_main, - about_dlg_proc); - - ShowWindow(hwnd, SW_SHOW); - /* no need to keep track of the hwnd, since we add it to the - dialog chain in the dialog procedure */ -} diff --git a/src/windows/identity/ui/aboutwnd.h b/src/windows/identity/ui/aboutwnd.h deleted file mode 100644 index 7da709d93..000000000 --- a/src/windows/identity/ui/aboutwnd.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_ABOUTWND_H -#define __KHIMAIRA_ABOUTWND_H - -void -khm_create_about_window(void); - -#endif diff --git a/src/windows/identity/ui/addrchange.c b/src/windows/identity/ui/addrchange.c deleted file mode 100644 index 9058ebec7..000000000 --- a/src/windows/identity/ui/addrchange.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<khmapp.h> -#include<iphlpapi.h> - -static HANDLE evt_terminate = NULL; -static HANDLE h_thread = NULL; - -DWORD WINAPI -addr_change_thread(LPVOID dummy) { - - HANDLE h_waits[2]; - HANDLE h_notify; - - OVERLAPPED overlap; - DWORD ret; - - PDESCTHREAD(L"Address change waiter", L"App"); - - ZeroMemory(&overlap, sizeof(overlap)); - - h_notify = NULL; - overlap.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); - - do { - ret = NotifyAddrChange(&h_notify, &overlap); - - if (ret != ERROR_IO_PENDING) { - goto _end_thread; /* some error */ - } - - h_waits[0] = overlap.hEvent; - h_waits[1] = evt_terminate; - - ret = WaitForMultipleObjects(2, h_waits, FALSE, INFINITE); - - if ( ret == WAIT_OBJECT_0 ) { - Sleep(3000); /* wait for things to settle down */ - kmq_post_message(KMSG_CRED, KMSG_CRED_ADDR_CHANGE, 0, 0); - } else { - goto _end_thread; - } - } while(TRUE); - - _end_thread: - ExitThread(0); -} - -void -khm_addr_change_notifier_init(void) { - evt_terminate = CreateEvent(NULL, FALSE, FALSE, NULL); - h_thread = CreateThread(NULL, - 64 * 4096, - addr_change_thread, - NULL, - 0, - NULL); -} - -void -khm_addr_change_notifier_exit(void) { - if (h_thread && evt_terminate) { - SetEvent(evt_terminate); - WaitForSingleObject(h_thread, INFINITE); - - CloseHandle(h_thread); - CloseHandle(evt_terminate); - } -} diff --git a/src/windows/identity/ui/addrchange.h b/src/windows/identity/ui/addrchange.h deleted file mode 100644 index 2f605af8c..000000000 --- a/src/windows/identity/ui/addrchange.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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_ADDRCHANGE_H -#define __NETIDMGR_ADDRCHANGE_H - -void -khm_addr_change_notifier_init(void); - -void -khm_addr_change_notifier_exit(void); - -#endif diff --git a/src/windows/identity/ui/appglobal.h b/src/windows/identity/ui/appglobal.h deleted file mode 100644 index 235826d07..000000000 --- a/src/windows/identity/ui/appglobal.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_APPGLOBAL_H -#define __KHIMAIRA_APPGLOBAL_H - -/* Helpfile */ -#define NIDM_HELPFILE L"netidmgr.chm" - -/* global data */ -extern HINSTANCE khm_hInstance; -extern int khm_nCmdShow; -extern const wchar_t * khm_facility; -extern kconf_schema schema_uiconfig[]; -extern khm_ui_4 khm_commctl_version; -extern const khm_version app_version; - -#define IS_COMMCTL6() (khm_commctl_version >= 0x60000) - -/* The structure used to send command-line options to a remote - NetIDMgr session for versions prior to 1.2. */ -typedef struct tag_khm_startup_options_v1 { - BOOL seen; - BOOL processing; - - BOOL init; - BOOL import; - BOOL renew; - BOOL destroy; - - BOOL autoinit; - BOOL exit; - BOOL error_exit; - - BOOL no_main_window; -} khm_startup_options_v1; - -/* Used on NetIDMgr version 1.2.x */ -typedef struct tag_khm_startup_options_v2 { - khm_int32 magic; /* set to STARTUP_OPTIONS_MAGIC */ - DWORD cb_size; /* size of structure, in bytes */ - - BOOL init; - BOOL import; - BOOL renew; - BOOL destroy; - - BOOL autoinit; - BOOL remote_exit; - - khm_int32 code; -} khm_startup_options_v2; - -/* Used on NetIDMgr version 1.3.1 and later */ -typedef struct tag_khm_startup_options_v3 { - struct tag_khm_startup_options_v2 v2opt; - - khm_int32 remote_display; /* combination of SOPTS_DISPLAY_* */ -} khm_startup_options_v3; - -#define STARTUP_OPTIONS_MAGIC 0x1f280e41 - -/* The following macros are used with - tag_khm_startup_options_v3->remote_display */ - -/* Show (unhide) the main window. */ -#define SOPTS_DISPLAY_SHOW 0x00000001 - -/* Hide the main window. (Can't be used with SOPTS_DISPLAY_SHOW) */ -#define SOPTS_DISPLAY_HIDE 0x00000002 - -/* Suppress the default action on the remote end */ -#define SOPTS_DISPLAY_NODEF 0x00000004 - -/* Used internally. */ -typedef struct tag_khm_startup_options_int { - khm_boolean seen; - khm_boolean processing; - khm_boolean remote; /* is this a remote request? */ - - khm_boolean init; - khm_boolean import; - khm_boolean renew; - khm_boolean destroy; - - khm_boolean autoinit; - khm_boolean exit; - khm_boolean remote_exit; - - khm_boolean error_exit; - - khm_boolean no_main_window; - khm_int32 display; /* SOPTS_DISPLAY_* */ - - LONG pending_renewals; -} khm_startup_options; - -extern khm_startup_options khm_startup; - -/* Used to query a remote instance of NetIDMgr for the version. */ -typedef struct tag_khm_query_app_version_v1 { - khm_int32 magic; - - khm_int32 code; - - khm_version ver_caller; - khm_version ver_remote; - - khm_boolean request_swap; -} khm_query_app_version; - -#define KHM_QUERY_APP_VER_MAGIC 0x38f8c2eb - -void khm_add_dialog(HWND dlg); -void khm_del_dialog(HWND dlg); -BOOL khm_is_dialog_active(void); - -void khm_enter_modal(HWND hwnd); -void khm_leave_modal(void); - -void khm_add_property_sheet(khui_property_sheet * s); -void khm_del_property_sheet(khui_property_sheet * s); - -void khm_init_gui(void); -void khm_exit_gui(void); - -void khm_parse_commandline(); -void khm_register_window_classes(void); - -HWND khm_html_help(HWND hwnd, wchar_t * suffix, UINT command, DWORD_PTR data); - -WPARAM khm_message_loop_int(khm_boolean * p_exit); - -int khm_compare_version(const khm_version * v1, const khm_version * v2); - -#define MAX_RES_STRING 1024 - -#define ELLIPSIS L"..." - -#endif diff --git a/src/windows/identity/ui/appver.rc b/src/windows/identity/ui/appver.rc deleted file mode 100644 index 324ad5231..000000000 --- a/src/windows/identity/ui/appver.rc +++ /dev/null @@ -1,40 +0,0 @@ - -#include<windows.h> -#include<netidmgr_intver.h> - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION KH_VERSION_LIST - PRODUCTVERSION KH_VERSION_LIST - FILEFLAGSMASK 0x17L - FILEFLAGS KH_VER_FILEFLAGS - FILEOS KH_VER_FILEOS - FILETYPE 0x0L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", KH_VERSTR_COMPANY_1033 - VALUE "FileDescription", "Network Identity Manager" - VALUE "FileVersion", KH_VERSTR_VERSION_1033 - VALUE "InternalName", "NetIDMgr" - VALUE "LegalCopyright", KH_VERSTR_COPYRIGHT_1033 - VALUE "OriginalFilename", "netidmgr.exe" - VALUE "ProductName", "Network Identity Manager" - VALUE "ProductVersion", KH_VERSTR_PRODUCT_1033 -#ifdef KH_VERSTR_COMMENT_1033 - VALUE "Comment", KH_VERSTR_COMMENT_1033 -#endif - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END diff --git a/src/windows/identity/ui/cfg_appear_wnd.c b/src/windows/identity/ui/cfg_appear_wnd.c deleted file mode 100644 index 93f72857c..000000000 --- a/src/windows/identity/ui/cfg_appear_wnd.c +++ /dev/null @@ -1,440 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<khmapp.h> -#include<assert.h> - -static int text_sizes[] = { - 4,6,8,9,10,12,14,16,18 -}; - -typedef struct tag_dlg_data { - khui_config_node node; - HWND hwnd; - LOGFONT lf_base; - LOGFONT lf_work; - HFONT c_font_normal; - HFONT c_font_bold; - int size_idx[ARRAYLENGTH(text_sizes)]; -} dlg_data; - -static void -read_params(HWND hwnd, dlg_data * d) { - - HDC hdc; - - hdc = GetWindowDC(hwnd); - - khm_get_cw_element_font(hdc, - NULL, - FALSE, - &d->lf_base); - - d->lf_work = d->lf_base; - - ReleaseDC(hwnd, hdc); -} - - -static void -write_params(dlg_data * d) { - khm_boolean applied = FALSE; - - if (memcmp(&d->lf_work, &d->lf_base, sizeof(LOGFONT))) { - khm_set_cw_element_font(NULL, &d->lf_work); - d->lf_base = d->lf_work; - applied = TRUE; - } - - khui_cfg_set_flags(d->node, - (applied)? KHUI_CNFLAG_APPLIED: 0, - KHUI_CNFLAG_APPLIED | KHUI_CNFLAG_MODIFIED); -} - -static void -check_for_modification(dlg_data * d) { - - khui_cfg_set_flags(d->node, - ((memcmp(&d->lf_work, &d->lf_base, sizeof(LOGFONT)))? - KHUI_CNFLAG_MODIFIED: 0), - KHUI_CNFLAG_MODIFIED); -} - -static void -refresh_view(HWND hwnd, dlg_data * d) { - wchar_t sample[256]; - HFONT hf; - LOGFONT lf; - - LoadString(khm_hInstance, IDS_APR_SAMPLE_TEXT_NORMAL, - sample, ARRAYLENGTH(sample)); - - SetDlgItemText(hwnd, IDC_CFG_SAMPLE_NORMAL, sample); - - LoadString(khm_hInstance, IDS_APR_SAMPLE_TEXT_SEL, - sample, ARRAYLENGTH(sample)); - - SetDlgItemText(hwnd, IDC_CFG_SAMPLE_BOLD, sample); - - lf = d->lf_work; - hf = CreateFontIndirect(&lf); - if (hf == NULL) - return; - - SendDlgItemMessage(hwnd, IDC_CFG_SAMPLE_NORMAL, WM_SETFONT, (WPARAM) hf, TRUE); - - if (d->c_font_normal) - DeleteObject(d->c_font_normal); - - d->c_font_normal = hf; - - lf.lfWeight = FW_BOLD; - - hf = CreateFontIndirect(&lf); - if (hf == NULL) - return; - - SendDlgItemMessage(hwnd, IDC_CFG_SAMPLE_BOLD, WM_SETFONT, (WPARAM) hf, TRUE); - - if (d->c_font_bold) - DeleteObject(d->c_font_bold); - - d->c_font_bold = hf; -} - -struct sel_update_blob { - dlg_data * d; - HDC hdc; -}; - -static int CALLBACK -enum_font_proc(ENUMLOGFONTEXDV * plfe, - ENUMTEXTMETRIC * pntm, - DWORD font_type, - LPARAM lParam) { - struct sel_update_blob * blob = (struct sel_update_blob *) lParam; - LOGFONT * plf = &plfe->elfEnumLogfontEx.elfLogFont; - LRESULT lr; - - lr = SendDlgItemMessage(blob->d->hwnd, - IDC_CFG_FONTS, - CB_SELECTSTRING, - (WPARAM) -1, - (LPARAM) plf->lfFaceName); - - if (lr == CB_ERR) { - SendDlgItemMessage(blob->d->hwnd, - IDC_CFG_FONTS, - CB_SELECTSTRING, - (WPARAM) -1, - (LPARAM) plfe->elfEnumLogfontEx.elfFullName); - } - - return FALSE; -} - -static void -update_selection(dlg_data * d, BOOL update_fonts, BOOL update_effects) { - LOGFONT lf; - struct sel_update_blob blob; - HDC hdc; - - if (update_fonts) { - - ZeroMemory(&lf, sizeof(lf)); - - lf.lfCharSet = ANSI_CHARSET; - StringCbCopy(lf.lfFaceName, sizeof(lf.lfFaceName), - d->lf_work.lfFaceName); - - hdc = GetWindowDC(d->hwnd); - - blob.d = d; - blob.hdc = hdc; - - EnumFontFamiliesEx(hdc, &lf, (FONTENUMPROC) enum_font_proc, - (LPARAM) &blob, 0); - - ReleaseDC(d->hwnd, hdc); - } - - if (update_effects) { - int i; - HDC hdc; - int pt_height; - - if (d->lf_work.lfWeight >= FW_BOLD) - CheckDlgButton(d->hwnd, IDC_CFG_BOLD, BST_CHECKED); - else - CheckDlgButton(d->hwnd, IDC_CFG_BOLD, BST_UNCHECKED); - - if (d->lf_work.lfItalic) - CheckDlgButton(d->hwnd, IDC_CFG_ITALICS, BST_CHECKED); - else - CheckDlgButton(d->hwnd, IDC_CFG_ITALICS, BST_UNCHECKED); - - hdc = GetWindowDC(d->hwnd); - - pt_height = MulDiv(d->lf_work.lfHeight, 72, - GetDeviceCaps(hdc, LOGPIXELSY)); - - - ReleaseDC(d->hwnd, hdc); - - if (pt_height < 0) - pt_height = - pt_height; - - for (i=0; i < ARRAYLENGTH(text_sizes); i++) { - if (text_sizes[i] >= pt_height) - break; - } - - if (i >= ARRAYLENGTH(text_sizes)) - i = ARRAYLENGTH(text_sizes) - 1; - - SendDlgItemMessage(d->hwnd, IDC_CFG_SIZE, CB_SETCURSEL, - d->size_idx[i], 0); - } -} - -static int CALLBACK -enum_font_families_proc(ENUMLOGFONTEXDV * plfe, - ENUMTEXTMETRIC * pntm, - DWORD font_type, - LPARAM lParam) { - - dlg_data * d = (dlg_data *) lParam; - - SendDlgItemMessage(d->hwnd, IDC_CFG_FONTS, - CB_ADDSTRING, 0, - (LPARAM) plfe->elfEnumLogfontEx.elfLogFont.lfFaceName); - - return TRUE; -} - -INT_PTR CALLBACK -khm_cfg_appearance_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - - dlg_data * d; - - switch(uMsg) { - case WM_INITDIALOG: - { - HWND hw_cb; - LOGFONT lf; - HDC hdc; - int i; - wchar_t buf[4]; - - d = PMALLOC(sizeof(*d)); -#ifdef DEBUG - assert(d != NULL); -#endif - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) d); -#pragma warning(pop) - - ZeroMemory(d, sizeof(*d)); - - d->node = (khui_config_node) lParam; - d->hwnd = hwnd; - - read_params(hwnd, d); - - hw_cb = GetDlgItem(hwnd, IDC_CFG_FONTS); -#ifdef DEBUG - assert(hw_cb); -#endif - SendMessage(hw_cb, CB_RESETCONTENT, 0, 0); - - ZeroMemory(&lf, sizeof(lf)); - lf.lfCharSet = ANSI_CHARSET; - - hdc = GetWindowDC(hwnd); - - EnumFontFamiliesEx(hdc, &lf, (FONTENUMPROC) enum_font_families_proc, - (LPARAM) d, 0); - - ReleaseDC(hwnd, hdc); - - - for (i=0; i < ARRAYLENGTH(text_sizes); i++) { - LRESULT idx; - - StringCbPrintf(buf, sizeof(buf), L"%d", text_sizes[i]); - - idx = SendDlgItemMessage(hwnd, IDC_CFG_SIZE, - CB_ADDSTRING, 0, (LPARAM) buf); - - SendDlgItemMessage(hwnd, IDC_CFG_SIZE, - CB_SETITEMDATA, idx, text_sizes[i]); - - d->size_idx[i] = (int) idx; - } - - update_selection(d, TRUE, TRUE); - - refresh_view(hwnd, d); - } - return FALSE; - - case WM_COMMAND: - d = (dlg_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - return FALSE; - - if (wParam == MAKEWPARAM(IDC_CFG_FONTS, CBN_SELCHANGE)) { - LRESULT idx; - wchar_t facename[LF_FACESIZE]; - - idx = SendDlgItemMessage(hwnd, IDC_CFG_FONTS, - CB_GETCURSEL, - 0, 0); - - if (idx == CB_ERR) - return TRUE; - - if (SendDlgItemMessage(hwnd, IDC_CFG_FONTS, - CB_GETLBTEXTLEN, idx, 0) - >= ARRAYLENGTH(facename)) - return TRUE; - - SendDlgItemMessage(hwnd, IDC_CFG_FONTS, - CB_GETLBTEXT, idx, - (LPARAM) facename); - - ZeroMemory(d->lf_work.lfFaceName, - sizeof(d->lf_work.lfFaceName)); - - StringCbCopy(d->lf_work.lfFaceName, - sizeof(d->lf_work.lfFaceName), - facename); - - update_selection(d, FALSE, FALSE); - - refresh_view(hwnd, d); - - check_for_modification(d); - - } else if (wParam == MAKEWPARAM(IDC_CFG_BOLD, BN_CLICKED)) { - - if (IsDlgButtonChecked(hwnd, IDC_CFG_BOLD) == BST_CHECKED) { - d->lf_work.lfWeight = FW_BOLD; - } else { - d->lf_work.lfWeight = 0; - } - - refresh_view(hwnd, d); - - check_for_modification(d); - - } else if (wParam == MAKEWPARAM(IDC_CFG_ITALICS, BN_CLICKED)) { - - d->lf_work.lfItalic = (BYTE) - (IsDlgButtonChecked(hwnd, IDC_CFG_ITALICS) == BST_CHECKED); - - refresh_view(hwnd, d); - - check_for_modification(d); - - } else if (wParam == MAKEWPARAM(IDC_CFG_REVERT, BN_CLICKED)) { - HDC hdc; - - hdc = GetWindowDC(hwnd); - - khm_get_cw_element_font(hdc, NULL, TRUE, &d->lf_work); - - ReleaseDC(hwnd, hdc); - - update_selection(d, TRUE, TRUE); - - refresh_view(hwnd, d); - - check_for_modification(d); - - } else if (wParam == MAKEWPARAM(IDC_CFG_SIZE, CBN_SELCHANGE)) { - HDC hdc; - LPARAM idx; - int points; - - idx = SendDlgItemMessage(hwnd, IDC_CFG_SIZE, - CB_GETCURSEL, 0, 0); - if (idx == CB_ERR) - return TRUE; - - points = (int) SendDlgItemMessage(hwnd, IDC_CFG_SIZE, - CB_GETITEMDATA, idx, 0); - - hdc = GetWindowDC(hwnd); - - d->lf_work.lfHeight = -MulDiv(points, - GetDeviceCaps(hdc, LOGPIXELSY), - 72); - - ReleaseDC(hwnd, hdc); - - refresh_view(hwnd, d); - - check_for_modification(d); - } - - return TRUE; - - case WM_DESTROY: - d = (dlg_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); - - if (d) { - if (d->c_font_bold) - DeleteObject(d->c_font_bold); - - if (d->c_font_normal) - DeleteObject(d->c_font_normal); - - PFREE(d); - SetWindowLongPtr(hwnd, DWLP_USER, 0); - } - return TRUE; - - case KHUI_WM_CFG_NOTIFY: - d = (dlg_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - return FALSE; - - if (HIWORD(wParam) == WMCFG_APPLY) { - write_params(d); - khui_action_trigger(KHUI_ACTION_LAYOUT_RELOAD, NULL); - } - - return TRUE; - } - - return FALSE; -} diff --git a/src/windows/identity/ui/cfg_general_wnd.c b/src/windows/identity/ui/cfg_general_wnd.c deleted file mode 100644 index bb2635855..000000000 --- a/src/windows/identity/ui/cfg_general_wnd.c +++ /dev/null @@ -1,424 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<shlwapi.h> -#include<khmapp.h> -#include<assert.h> - -typedef struct tag_cfg_data { - BOOL auto_init; - BOOL auto_start; - BOOL auto_import; - BOOL keep_running; - BOOL auto_detect_net; - BOOL log_to_file; - BOOL destroy_creds; - khm_int32 notif_action; -} cfg_data; - -typedef struct tag_dlg_data { - khui_config_node node; - cfg_data saved; - cfg_data work; -} dlg_data; - -static void -read_params(dlg_data * dd) { - cfg_data * d; - khm_handle csp_cw; - khm_int32 t; - - d = &dd->saved; - - if (KHM_FAILED(khc_open_space(NULL, L"CredWindow", KHM_PERM_READ, - &csp_cw))) { -#ifdef DEBUG - assert(FALSE); -#endif - return; - } - - khc_read_int32(csp_cw, L"AutoInit", &t); - d->auto_init = !!t; - - khc_read_int32(csp_cw, L"AutoStart", &t); - d->auto_start = !!t; - - khc_read_int32(csp_cw, L"AutoImport", &t); - d->auto_import = !!t; - - khc_read_int32(csp_cw, L"KeepRunning", &t); - d->keep_running = !!t; - - khc_read_int32(csp_cw, L"AutoDetectNet", &t); - d->auto_detect_net = !!t; - - khc_read_int32(csp_cw, L"LogToFile", &t); - d->log_to_file = !!t; - - khc_read_int32(csp_cw, L"DestroyCredsOnExit", &t); - d->destroy_creds = !!t; - - khc_read_int32(csp_cw, L"NotificationAction", &t); - d->notif_action = t; - - khc_close_space(csp_cw); - - dd->work = *d; -} - -static void -write_params(dlg_data * dd) { - cfg_data * d, * s; - khm_handle csp_cw; - BOOL applied = FALSE; - - d = &dd->work; - s = &dd->saved; - - if (KHM_FAILED(khc_open_space(NULL, L"CredWindow", KHM_PERM_WRITE, - &csp_cw))) { -#ifdef DEBUG - assert(FALSE); -#endif - return; - } - - if (!!d->auto_init != !!s->auto_init) { - khc_write_int32(csp_cw, L"AutoInit", d->auto_init); - applied = TRUE; - } - - if (!!d->auto_start != !!s->auto_start) { - khc_write_int32(csp_cw, L"AutoStart", d->auto_start); - applied = TRUE; - } - - if (!!d->auto_import != !!s->auto_import) { - khc_write_int32(csp_cw, L"AutoImport", d->auto_import); - applied = TRUE; - } - - if (!!d->keep_running != !!s->keep_running) { - khc_write_int32(csp_cw, L"KeepRunning", d->keep_running); - applied = TRUE; - } - - if (!!d->auto_detect_net != !!s->auto_detect_net) { - khc_write_int32(csp_cw, L"AutoDetectNet", d->auto_detect_net); - applied = TRUE; - } - - if (!!d->log_to_file != !!s->log_to_file) { - khc_write_int32(csp_cw, L"LogToFile", d->log_to_file); - applied = TRUE; - - if (d->log_to_file) { - khm_start_file_log(); - } else { - khm_stop_file_log(); - } - } - - if (!!d->destroy_creds != !!s->destroy_creds) { - khc_write_int32(csp_cw, L"DestroyCredsOnExit", d->destroy_creds); - applied = TRUE; - } - - if (d->notif_action != s->notif_action) { - khc_write_int32(csp_cw, L"NotificationAction", d->notif_action); - applied = TRUE; - } - - khc_close_space(csp_cw); - - khui_cfg_set_flags(dd->node, - (applied) ? KHUI_CNFLAG_APPLIED : 0, - KHUI_CNFLAG_APPLIED | KHUI_CNFLAG_MODIFIED); - - *s = *d; -} - -static void -check_for_modification(dlg_data * dd) { - cfg_data * d, * s; - d = &dd->work; - s = &dd->saved; - - if (!!d->auto_init != !!s->auto_init || - !!d->auto_start != !!s->auto_start || - !!d->auto_import != !!s->auto_import || - !!d->keep_running != !!s->keep_running || - !!d->auto_detect_net != !!s->auto_detect_net || - !!d->log_to_file != !!s->log_to_file || - !!d->destroy_creds != !!s->destroy_creds || - d->notif_action != s->notif_action) { - - khui_cfg_set_flags(dd->node, - KHUI_CNFLAG_MODIFIED, - KHUI_CNFLAG_MODIFIED); - - } else { - - khui_cfg_set_flags(dd->node, - 0, - KHUI_CNFLAG_MODIFIED); - - } -} - - -static void -strip_ampersands(wchar_t * str) { - wchar_t *f, *t; - - for(f = t = str; *f; f++) - if (*f != L'&') - *t++ = *f; - - *t = L'\0'; -} - -static void -refresh_view(HWND hwnd, dlg_data * d) { - wchar_t buf[512]; - khm_size i; - - CheckDlgButton(hwnd, IDC_CFG_AUTOINIT, - (d->work.auto_init?BST_CHECKED:BST_UNCHECKED)); - CheckDlgButton(hwnd, IDC_CFG_AUTOSTART, - (d->work.auto_start?BST_CHECKED:BST_UNCHECKED)); - CheckDlgButton(hwnd, IDC_CFG_AUTOIMPORT, - (d->work.auto_import?BST_CHECKED:BST_UNCHECKED)); - CheckDlgButton(hwnd, IDC_CFG_KEEPRUNNING, - (d->work.keep_running?BST_CHECKED:BST_UNCHECKED)); - CheckDlgButton(hwnd, IDC_CFG_NETDETECT, - (d->work.auto_detect_net?BST_CHECKED:BST_UNCHECKED)); - CheckDlgButton(hwnd, IDC_CFG_LOGTOFILE, - (d->work.log_to_file?BST_CHECKED:BST_UNCHECKED)); - CheckDlgButton(hwnd, IDC_CFG_DESTROYALL, - (d->work.destroy_creds?BST_CHECKED:BST_UNCHECKED)); - - /* we need populate the notification action combo box control and - set the current selection to match the default action. */ - - if (n_khm_notifier_actions != (khm_size) SendDlgItemMessage(hwnd, IDC_CFG_NOTACTION, - CB_GETCOUNT, 0, 0)) { - - for (i=0; i < n_khm_notifier_actions; i++) { - int idx; - - khm_get_action_caption(khm_notifier_actions[i], - buf, sizeof(buf)); - - strip_ampersands(buf); - - idx = (int) SendDlgItemMessage(hwnd, IDC_CFG_NOTACTION, - CB_INSERTSTRING, i, - (LPARAM) buf); - -#ifdef DEBUG - if (idx != (int) i) { - assert(FALSE); - } -#endif - } - } - - for (i=0; i < n_khm_notifier_actions; i++) { - if (khm_notifier_actions[i] == d->work.notif_action) - break; - } - - if (i >= n_khm_notifier_actions) { - d->work.notif_action = khm_notifier_actions[0]; - i = 0; - } - - SendDlgItemMessage(hwnd, IDC_CFG_NOTACTION, CB_SETCURSEL, i, 0); - - /* in addition, we correct the label on the trace log control to - reflect the actual path that is going to get used */ - if (GetDlgItemText(hwnd, IDC_CFG_LOGPATH, buf, - ARRAYLENGTH(buf)) == 0) { - - khm_get_file_log_path(sizeof(buf), buf); - - SetDlgItemText(hwnd, IDC_CFG_LOGPATH, buf); - } -} - -static void -refresh_data(HWND hwnd, dlg_data * d) { - int idx; - - d->work.auto_init = (IsDlgButtonChecked(hwnd, IDC_CFG_AUTOINIT) - == BST_CHECKED); - d->work.auto_start = (IsDlgButtonChecked(hwnd, IDC_CFG_AUTOSTART) - == BST_CHECKED); - d->work.auto_import = (IsDlgButtonChecked(hwnd, IDC_CFG_AUTOIMPORT) - == BST_CHECKED); - d->work.keep_running = (IsDlgButtonChecked(hwnd, IDC_CFG_KEEPRUNNING) - == BST_CHECKED); - d->work.auto_detect_net = (IsDlgButtonChecked(hwnd, IDC_CFG_NETDETECT) - == BST_CHECKED); - d->work.log_to_file = (IsDlgButtonChecked(hwnd, IDC_CFG_LOGTOFILE) - == BST_CHECKED); - d->work.destroy_creds = (IsDlgButtonChecked(hwnd, IDC_CFG_DESTROYALL) - == BST_CHECKED); - - idx = (int) SendDlgItemMessage(hwnd, IDC_CFG_NOTACTION, CB_GETCURSEL, 0, 0); - if (idx < 0) - idx = 0; - else if (idx >= (int) n_khm_notifier_actions) - idx = (int) n_khm_notifier_actions - 1; - - d->work.notif_action = khm_notifier_actions[idx]; -} - -INT_PTR CALLBACK -khm_cfg_general_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - dlg_data * d; - - switch(uMsg) { - case WM_INITDIALOG: - d = PMALLOC(sizeof(*d)); -#ifdef DEBUG - assert(d != NULL); -#endif - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) d); -#pragma warning(pop) - - ZeroMemory(d, sizeof(*d)); - - d->node = (khui_config_node) lParam; - - read_params(d); - - refresh_view(hwnd, d); - - return FALSE; - - case WM_DESTROY: - d = (dlg_data *) (DWORD_PTR) GetWindowLongPtr(hwnd, DWLP_USER); - if (d) { - PFREE(d); - SetWindowLongPtr(hwnd, DWLP_USER, 0); - } - return TRUE; - - case WM_COMMAND: - d = (dlg_data *) (DWORD_PTR) GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - return FALSE; - - if (HIWORD(wParam) == BN_CLICKED) { - if (LOWORD(wParam) == IDC_CFG_SHOWLOG) { - /* we need to display the logfile */ - wchar_t buf[512]; - - buf[0] = L'\0'; - khm_get_file_log_path(sizeof(buf), buf); - - if (!buf[0] || - !PathFileExists(buf)) { - - wchar_t title[256]; - wchar_t msg[550]; - wchar_t fmt[256]; - - LoadString(khm_hInstance, IDS_CFG_LOGF_CS, - title, ARRAYLENGTH(title)); - LoadString(khm_hInstance, IDS_CFG_LOGF_CSR, - fmt, ARRAYLENGTH(fmt)); - - StringCbPrintf(msg, sizeof(msg), fmt, buf); - - MessageBox(hwnd, title, msg, MB_OK); - - } else { - wchar_t cmdline[550]; - STARTUPINFO si; - PROCESS_INFORMATION pi; - - StringCbCopy(cmdline, sizeof(cmdline), L"notepad.exe "); - StringCbCat(cmdline, sizeof(cmdline), L"\""); - StringCbCat(cmdline, sizeof(cmdline), buf); - StringCbCat(cmdline, sizeof(cmdline), L"\""); - - ZeroMemory(&si, sizeof(si)); - si.cb = sizeof(si); - ZeroMemory(&pi, sizeof(pi)); - - CreateProcess(NULL, - cmdline, - NULL, NULL, - FALSE, - 0, NULL, NULL, - &si, - &pi); - - if (pi.hProcess) - CloseHandle(pi.hProcess); - if (pi.hThread) - CloseHandle(pi.hThread); - - } - } else { - refresh_data(hwnd, d); - check_for_modification(d); - } - } else if (HIWORD(wParam) == CBN_SELCHANGE) { - refresh_data(hwnd, d); - check_for_modification(d); - } - - khm_set_dialog_result(hwnd, 0); - - return TRUE; - - case KHUI_WM_CFG_NOTIFY: - d = (dlg_data *) (DWORD_PTR) GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - return FALSE; - - if (HIWORD(wParam) == WMCFG_APPLY) { - write_params(d); - } - - khm_set_dialog_result(hwnd, 0); - - return TRUE; - } - - return FALSE; -} diff --git a/src/windows/identity/ui/cfg_identities_wnd.c b/src/windows/identity/ui/cfg_identities_wnd.c deleted file mode 100644 index d419e2837..000000000 --- a/src/windows/identity/ui/cfg_identities_wnd.c +++ /dev/null @@ -1,1573 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<khmapp.h> -#include<assert.h> -#if _WIN32_WINNT >= 0x0501 -#include<uxtheme.h> -#endif - -static khui_config_node -get_window_node(HWND hwnd) { - return (khui_config_node) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); -} - -static void -set_window_node(HWND hwnd, khui_config_node node) { -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, - (LONG_PTR) node); -#pragma warning(pop) -} - -static void -add_subpanels(HWND hwnd, - khui_config_node ctx_node, - khui_config_node ref_node) { - - HWND hw_tab; - HWND hw_target; - khui_config_node sub; - khui_config_node_reg reg; - khui_config_init_data idata; - int idx; - - hw_tab = GetDlgItem(hwnd, IDC_CFG_TAB); - hw_target = GetDlgItem(hwnd, IDC_CFG_TARGET); -#ifdef DEBUG - assert(hw_tab); - assert(hw_target); -#endif - - if (KHM_FAILED(khui_cfg_get_first_subpanel(ref_node, &sub))) { -#ifdef DEBUG - assert(FALSE); -#endif - return; - } - - idx = 0; - while(sub) { - HWND hwnd_panel; - TCITEM tci; - int iid; - - khui_cfg_get_reg(sub, &reg); - - if ((ctx_node == ref_node && (reg.flags & KHUI_CNFLAG_PLURAL)) || - (ctx_node != ref_node && !(reg.flags & KHUI_CNFLAG_PLURAL))) - goto _next_node; - - idata.ctx_node = ctx_node; - idata.this_node = sub; - idata.ref_node = ref_node; - - hwnd_panel = CreateDialogParam(reg.h_module, - reg.dlg_template, - hwnd, - reg.dlg_proc, - (LPARAM) &idata); - -#ifdef DEBUG - assert(hwnd_panel); -#endif -#if _WIN32_WINNT >= 0x0501 - EnableThemeDialogTexture(hwnd_panel, ETDT_ENABLETAB); -#endif - - ShowWindow(hwnd_panel, SW_HIDE); - - ZeroMemory(&tci, sizeof(tci)); - - tci.mask = TCIF_PARAM | TCIF_TEXT; - tci.lParam = (LPARAM) sub; - tci.pszText = (LPWSTR) reg.short_desc; - - iid = TabCtrl_InsertItem(hw_tab, 0, &tci); - idx++; - - if (reg.flags & KHUI_CNFLAG_PLURAL) { - khui_cfg_set_param_inst(sub, ctx_node, iid); - khui_cfg_set_hwnd_inst(sub, ctx_node, hwnd_panel); - } else { - khui_cfg_set_param(sub, iid); - khui_cfg_set_hwnd(sub, hwnd_panel); - } - - _next_node: - - khui_cfg_get_next_release(&sub); - } - - TabCtrl_SetCurSel(hw_tab, 0); -} - -static void -apply_all(HWND hwnd, - HWND hw_tab, - khui_config_node noderef) { - TCITEM tci; - HWND hw; - khui_config_node_reg reg; - int idx; - int count; - BOOL cont = TRUE; - - count = TabCtrl_GetItemCount(hw_tab); - - for (idx = 0; idx < count && cont; idx++) { - - ZeroMemory(&tci, sizeof(tci)); - - tci.mask = TCIF_PARAM; - TabCtrl_GetItem(hw_tab, - idx, - &tci); - -#ifdef DEBUG - assert(tci.lParam); -#endif - khui_cfg_get_reg((khui_config_node) tci.lParam, &reg); - if (reg.flags & KHUI_CNFLAG_PLURAL) - hw = khui_cfg_get_hwnd_inst((khui_config_node) tci.lParam, - noderef); - else - hw = khui_cfg_get_hwnd((khui_config_node) tci.lParam); -#ifdef DEBUG - assert(hw); -#endif - - SendMessage(hw, KHUI_WM_CFG_NOTIFY, - MAKEWPARAM(0, WMCFG_APPLY), (LPARAM) &cont); - } -} - -static void -show_tab_panel(HWND hwnd, - khui_config_node node, - HWND hw_tab, - int idx, - BOOL show) { - TCITEM tci; - HWND hw; - HWND hw_target; - HWND hw_firstctl; - RECT r; - RECT rref; - khui_config_node_reg reg; - - ZeroMemory(&tci, sizeof(tci)); - - tci.mask = TCIF_PARAM; - TabCtrl_GetItem(hw_tab, - idx, - &tci); - -#ifdef DEBUG - assert(tci.lParam); -#endif - khui_cfg_get_reg((khui_config_node) tci.lParam, &reg); - if (reg.flags & KHUI_CNFLAG_PLURAL) - hw = khui_cfg_get_hwnd_inst((khui_config_node) tci.lParam, - node); - else - hw = khui_cfg_get_hwnd((khui_config_node) tci.lParam); -#ifdef DEBUG - assert(hw); -#endif - - if (!show) { - ShowWindow(hw, SW_HIDE); - return; - } - - hw_target = GetDlgItem(hwnd, IDC_CFG_TARGET); -#ifdef DEBUG - assert(hw_target); -#endif - GetWindowRect(hwnd, &rref); - GetWindowRect(hw_target, &r); - - OffsetRect(&r, -rref.left, -rref.top); - - SetWindowPos(hw, - hw_tab, - r.left, r.top, - r.right - r.left, r.bottom - r.top, - SWP_NOACTIVATE | SWP_NOOWNERZORDER | - SWP_SHOWWINDOW); - - hw_firstctl = GetNextDlgTabItem(hw, NULL, FALSE); - if (hw_firstctl) { - SetFocus(hw_firstctl); - } -} - -static INT_PTR -handle_cfg_notify(HWND hwnd, - WPARAM wParam, - LPARAM lParam) { - khui_config_node node; - HWND hw; - - node = get_window_node(hwnd); - if (node == NULL) - return TRUE; - - if (HIWORD(wParam) == WMCFG_APPLY) { - - hw = GetDlgItem(hwnd, IDC_CFG_TAB); - - apply_all(hwnd, - hw, - node); - } - - return TRUE; -} - -static INT_PTR -handle_notify(HWND hwnd, - WPARAM wParam, - LPARAM lParam) { - LPNMHDR lpnm; - int i; - - - khui_config_node node; - - lpnm = (LPNMHDR) lParam; - node = get_window_node(hwnd); - if (node == NULL) - return FALSE; - - if (lpnm->idFrom == IDC_CFG_TAB) { - switch(lpnm->code) { - case TCN_SELCHANGING: - i = TabCtrl_GetCurSel(lpnm->hwndFrom); - - show_tab_panel(hwnd, - node, - lpnm->hwndFrom, - i, - FALSE); - break; - - case TCN_SELCHANGE: - i = TabCtrl_GetCurSel(lpnm->hwndFrom); - - show_tab_panel(hwnd, - node, - lpnm->hwndFrom, - i, - TRUE); - break; - } - return TRUE; - } else { - return FALSE; - } -} - -typedef struct tag_ident_props { - BOOL monitor; - BOOL auto_renew; - BOOL sticky; -} ident_props; - -typedef struct tag_ident_data { - khm_handle ident; - wchar_t * idname; - int lv_idx; - - BOOL removed; /* this identity was marked for removal */ - BOOL applied; - BOOL purged; /* this identity was actually removed */ - - khm_int32 flags; - - ident_props saved; - ident_props work; - - HWND hwnd; -} ident_data; - -typedef struct tag_global_props { - BOOL monitor; - BOOL auto_renew; - BOOL sticky; -} global_props; - -typedef struct tag_idents_data { - BOOL valid; - - ident_data * idents; - khm_size n_idents; - khm_size nc_idents; -#define IDENTS_DATA_ALLOC_INCR 8 - - /* global options */ - global_props saved; - global_props work; - BOOL applied; - - int refcount; - - HIMAGELIST hi_status; - int idx_id; - int idx_default; - int idx_modified; - int idx_applied; - int idx_deleted; - - HWND hwnd; - khui_config_init_data cfg; -} idents_data; - -static idents_data cfg_idents = {FALSE, NULL, 0, 0, - {0, 0, 0}, - {0, 0, 0}, - FALSE, - - 0, NULL }; - -static void -read_params_ident(ident_data * d) { - khm_handle csp_ident; - khm_handle csp_cw; - khm_int32 t; - - if (KHM_FAILED(kcdb_identity_get_config(d->ident, - KHM_PERM_READ, - &csp_ident))) { - csp_ident = NULL; - } - - if (KHM_SUCCEEDED(khc_open_space(NULL, L"CredWindow", KHM_PERM_READ, - &csp_cw))) { - if (csp_ident) { - khc_shadow_space(csp_ident, - csp_cw); - khc_close_space(csp_cw); - } else { - csp_ident = csp_cw; - } - csp_cw = NULL; - } else { -#ifdef DEBUG - assert(FALSE); -#endif - d->saved.monitor = TRUE; - d->saved.auto_renew = TRUE; - d->saved.sticky = FALSE; - d->work = d->saved; - - if (csp_ident) - khc_close_space(csp_ident); - - return; - } - - if (KHM_FAILED(khc_read_int32(csp_ident, L"Monitor", &t))) { -#ifdef DEBUG - assert(FALSE); -#endif - d->saved.monitor = TRUE; - } else { - d->saved.monitor = !!t; - } - - if (KHM_FAILED(khc_read_int32(csp_ident, L"AllowAutoRenew", &t))) { -#ifdef DEBUG - assert(FALSE); -#endif - d->saved.auto_renew = TRUE; - } else { - d->saved.auto_renew = !!t; - } - - if (KHM_FAILED(khc_read_int32(csp_ident, L"Sticky", &t))) { - d->saved.sticky = FALSE; - } else { - d->saved.sticky = !!t; - } - - khc_close_space(csp_ident); - - d->work = d->saved; - d->applied = FALSE; -} - -static void -write_params_ident(ident_data * d) { - khm_handle csp_ident; - - if (d->saved.monitor == d->work.monitor && - d->saved.auto_renew == d->work.auto_renew && - d->saved.sticky == d->work.sticky && - !d->removed) - return; - - if (KHM_FAILED(kcdb_identity_get_config(d->ident, KHM_PERM_WRITE, - &csp_ident))) { -#ifdef DEBUG - assert(FALSE); -#endif - return; - } - - if (d->removed) { - khm_handle h = NULL; - khm_int32 flags = 0; - - khc_remove_space(csp_ident); - - /* calling kcdb_identity_get_config() will update the - KCDB_IDENT_FLAG_CONFIG flag for the identity to reflect the - fact that it nolonger has a configuration. */ - kcdb_identity_get_config(d->ident, 0, &h); - if (h) { - /* what the ? */ -#ifdef DEBUG - assert(FALSE); -#endif - khc_close_space(h); - } -#ifdef DEBUG - kcdb_identity_get_flags(d->ident, &flags); - assert(!(flags & KCDB_IDENT_FLAG_CONFIG)); -#endif - - d->purged = TRUE; - - } else { - - if (d->saved.monitor != d->work.monitor) - khc_write_int32(csp_ident, L"Monitor", !!d->work.monitor); - - if (d->saved.auto_renew != d->work.auto_renew) - khc_write_int32(csp_ident, L"AllowAutoRenew", - !!d->work.auto_renew); - - if (d->saved.sticky != d->work.sticky) { - kcdb_identity_set_flags(d->ident, - (d->work.sticky)?KCDB_IDENT_FLAG_STICKY:0, - KCDB_IDENT_FLAG_STICKY); - } - } - - khc_close_space(csp_ident); - - d->saved = d->work; - - d->applied = TRUE; - - if (d->hwnd && !d->removed) - PostMessage(d->hwnd, KHUI_WM_CFG_NOTIFY, - MAKEWPARAM(0, WMCFG_UPDATE_STATE), 0); - - khm_refresh_config(); -} - -static void -write_params_idents(void) { - khm_handle csp_cw = NULL; - - if (KHM_SUCCEEDED(khc_open_space(NULL, L"CredWindow", - KHM_FLAG_CREATE, &csp_cw))) { - if (cfg_idents.work.monitor != cfg_idents.saved.monitor) { - khc_write_int32(csp_cw, L"DefaultMonitor", - !!cfg_idents.work.monitor); - cfg_idents.saved.monitor = cfg_idents.work.monitor; - cfg_idents.applied = TRUE; - } - if (cfg_idents.work.auto_renew != cfg_idents.saved.auto_renew) { - khc_write_int32(csp_cw, L"DefaultAllowAutoRenew", - !!cfg_idents.work.auto_renew); - cfg_idents.saved.auto_renew = cfg_idents.work.auto_renew; - cfg_idents.applied = TRUE; - } - if (cfg_idents.work.sticky != cfg_idents.saved.sticky) { - khc_write_int32(csp_cw, L"DefaultSticky", - !!cfg_idents.work.sticky); - cfg_idents.saved.sticky = cfg_idents.work.sticky; - cfg_idents.applied = TRUE; - } - - khc_close_space(csp_cw); - csp_cw = NULL; - } - -#if 0 - for (i=0; i < (int)cfg_idents.n_idents; i++) { - write_params_ident(&cfg_idents.idents[i]); - } -#endif - - if (cfg_idents.hwnd) - PostMessage(cfg_idents.hwnd, KHUI_WM_CFG_NOTIFY, - MAKEWPARAM(0, WMCFG_UPDATE_STATE), 0); -} - -static void -init_idents_data(void) { - khm_int32 rv; - wchar_t * t; - wchar_t * widnames = NULL; - khm_size cb; - int n_tries = 0; - int i; - khm_handle csp_cw = NULL; - - if (cfg_idents.valid) - return; - -#ifdef DEBUG - assert(cfg_idents.idents == NULL); - assert(cfg_idents.n_idents == 0); - assert(cfg_idents.nc_idents == 0); -#endif - - if (KHM_SUCCEEDED(khc_open_space(NULL, L"CredWindow", 0, &csp_cw))) { - khm_int32 t; - - if (KHM_SUCCEEDED(khc_read_int32(csp_cw, L"DefaultMonitor", &t))) - cfg_idents.saved.monitor = !!t; - else - cfg_idents.saved.monitor = TRUE; - - if (KHM_SUCCEEDED(khc_read_int32(csp_cw, L"DefaultAllowAutoRenew", &t))) - cfg_idents.saved.auto_renew = !!t; - else - cfg_idents.saved.auto_renew = TRUE; - - if (KHM_SUCCEEDED(khc_read_int32(csp_cw, L"DefaultSticky", &t))) - cfg_idents.saved.sticky = !!t; - else - cfg_idents.saved.sticky = FALSE; - - khc_close_space(csp_cw); - csp_cw = NULL; - - } else { - - cfg_idents.saved.monitor = TRUE; - cfg_idents.saved.auto_renew = TRUE; - cfg_idents.saved.sticky = FALSE; - - } - - cfg_idents.work = cfg_idents.saved; - cfg_idents.applied = FALSE; - - do { - rv = kcdb_identity_enum(KCDB_IDENT_FLAG_CONFIG, - KCDB_IDENT_FLAG_CONFIG, - NULL, - &cb, - &cfg_idents.n_idents); - - if (rv != KHM_ERROR_TOO_LONG || - cfg_idents.n_idents == 0 || - cb == 0) - break; - - if (widnames) - PFREE(widnames); - widnames = PMALLOC(cb); -#ifdef DEBUG - assert(widnames); -#endif - - rv = kcdb_identity_enum(KCDB_IDENT_FLAG_CONFIG, - KCDB_IDENT_FLAG_CONFIG, - widnames, - &cb, - &cfg_idents.n_idents); - n_tries++; - } while(KHM_FAILED(rv) && - n_tries < 5); - - if (KHM_FAILED(rv) || - cfg_idents.n_idents == 0) { - cfg_idents.n_idents = 0; - goto _cleanup; - } - - cfg_idents.idents = PMALLOC(sizeof(*cfg_idents.idents) * - cfg_idents.n_idents); -#ifdef DEBUG - assert(cfg_idents.idents); -#endif - ZeroMemory(cfg_idents.idents, - sizeof(*cfg_idents.idents) * cfg_idents.n_idents); - cfg_idents.nc_idents = cfg_idents.n_idents; - - i = 0; - for (t = widnames; t && *t; t = multi_string_next(t)) { - khm_handle ident; - - if (KHM_FAILED(kcdb_identity_create(t, 0, &ident))) { - cfg_idents.n_idents--; - continue; - } - - StringCbLength(t, KCDB_IDENT_MAXCB_NAME, &cb); - cb += sizeof(wchar_t); - - cfg_idents.idents[i].idname = PMALLOC(cb); -#ifdef DEBUG - assert(cfg_idents.idents[i].idname); -#endif - StringCbCopy(cfg_idents.idents[i].idname, cb, t); - - cfg_idents.idents[i].ident = ident; - cfg_idents.idents[i].removed = FALSE; - - kcdb_identity_get_flags(ident, &cfg_idents.idents[i].flags); -#ifdef DEBUG - assert(cfg_idents.idents[i].flags & KCDB_IDENT_FLAG_CONFIG); -#endif - - read_params_ident(&cfg_idents.idents[i]); - - i++; - /* leave identity held */ - } - - _cleanup: - - cfg_idents.valid = TRUE; - - if (widnames) - PFREE(widnames); -} - -static void -free_idents_data(void) { - int i; - - if (!cfg_idents.valid) - return; - - for (i=0; i< (int) cfg_idents.n_idents; i++) { - if (cfg_idents.idents[i].ident) - kcdb_identity_release(cfg_idents.idents[i].ident); - if (cfg_idents.idents[i].idname) - PFREE(cfg_idents.idents[i].idname); - } - - if (cfg_idents.idents) - PFREE(cfg_idents.idents); - - cfg_idents.idents = NULL; - cfg_idents.n_idents = 0; - cfg_idents.nc_idents = 0; - cfg_idents.valid = FALSE; -} - -static void -hold_idents_data(void) { - if (!cfg_idents.valid) - init_idents_data(); -#ifdef DEBUG - assert(cfg_idents.valid); -#endif - cfg_idents.refcount++; -} - -static void -release_idents_data(void) { -#ifdef DEBUG - assert(cfg_idents.valid); -#endif - cfg_idents.refcount--; - - if (cfg_idents.refcount == 0) - free_idents_data(); -} - - -static void -refresh_data_idents(HWND hwnd) { - cfg_idents.work.monitor = - (IsDlgButtonChecked(hwnd, IDC_CFG_MONITOR) == BST_CHECKED); - cfg_idents.work.auto_renew = - (IsDlgButtonChecked(hwnd, IDC_CFG_RENEW) == BST_CHECKED); - cfg_idents.work.sticky = - (IsDlgButtonChecked(hwnd, IDC_CFG_STICKY) == BST_CHECKED); -} - -static void -refresh_view_idents_state(HWND hwnd) { - BOOL modified; - BOOL applied; - khm_int32 flags = 0; - - applied = cfg_idents.applied; - modified = (cfg_idents.work.monitor != cfg_idents.saved.monitor || - cfg_idents.work.auto_renew != cfg_idents.saved.auto_renew || - cfg_idents.work.sticky != cfg_idents.saved.sticky); - - if (modified) - flags |= KHUI_CNFLAG_MODIFIED; - if (applied) - flags |= KHUI_CNFLAG_APPLIED; - - khui_cfg_set_flags_inst(&cfg_idents.cfg, flags, - KHUI_CNFLAG_APPLIED | KHUI_CNFLAG_MODIFIED); -} - -struct ctrl_row_dimensions { - RECT enclosure; - RECT label; - RECT control; -}; - -typedef struct tag_add_ident_data { - khui_new_creds * nc; - - struct ctrl_row_dimensions dim_small; - struct ctrl_row_dimensions dim_medium; - struct ctrl_row_dimensions dim_large; - int row_gap; - - int current_y; - int current_x; - - HWND hwnd_last_ctrl; -} add_ident_data; - -void -get_ctrl_row_metrics(struct ctrl_row_dimensions * dim, HWND hw_lbl, HWND hw_ctl) { - - assert(hw_lbl); - assert(hw_ctl); - - GetWindowRect(hw_lbl, &dim->label); - GetWindowRect(hw_ctl, &dim->control); - - UnionRect(&dim->enclosure, &dim->label, &dim->control); - OffsetRect(&dim->label, - -dim->enclosure.left, - -dim->enclosure.top); - OffsetRect(&dim->control, - -dim->enclosure.left, - -dim->enclosure.top); - OffsetRect(&dim->enclosure, - -dim->enclosure.left, - -dim->enclosure.top); -} - -/* dialog box procedure for the "Add new identity" dialog */ -INT_PTR CALLBACK -khm_cfg_add_ident_proc(HWND hwnd, - UINT umsg, - WPARAM wParam, - LPARAM lParam) { - add_ident_data * d; - - switch(umsg) { - case WM_INITDIALOG: - /* we create a new credentials blob and pull in the identity - selectors from the identity provider. */ - d = PMALLOC(sizeof(*d)); - ZeroMemory(d, sizeof(*d)); - - khui_cw_create_cred_blob(&d->nc); -#ifdef DEBUG - assert(d->nc != NULL); -#endif - if (d->nc == NULL) { - PFREE(d); - break; - } - - if (KHM_FAILED(kcdb_identpro_get_ui_cb(&d->nc->ident_cb))) { - /* this should have worked. The only reason it would fail - is if there is no identity provider or if the identity - provider does not support providing idnetity - selectors. */ - khui_cw_destroy_cred_blob(d->nc); - PFREE(d); - break; - } - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) d); -#pragma warning(pop) - - /* get metrics for dynamic controls */ - get_ctrl_row_metrics(&d->dim_small, - GetDlgItem(hwnd, IDC_SM_LBL), - GetDlgItem(hwnd, IDC_SM_CTL)); - get_ctrl_row_metrics(&d->dim_medium, - GetDlgItem(hwnd, IDC_MED_LBL), - GetDlgItem(hwnd, IDC_MED_CTL)); - get_ctrl_row_metrics(&d->dim_large, - GetDlgItem(hwnd, IDC_LG_LBL), - GetDlgItem(hwnd, IDC_LG_CTL)); - - { - RECT rlbl; - RECT rctl; - RECT rwnd; - - GetWindowRect(GetDlgItem(hwnd, IDC_SM_LBL), - &rlbl); - GetWindowRect(GetDlgItem(hwnd, IDC_SM_CTL), - &rctl); - GetWindowRect(hwnd, &rwnd); - - OffsetRect(&rlbl, -rwnd.left, -rwnd.top); - OffsetRect(&rctl, -rwnd.left, -rwnd.top); - - d->current_x = rlbl.left; - d->current_y = rctl.top - GetSystemMetrics(SM_CYCAPTION); - - GetWindowRect(GetDlgItem(hwnd, IDC_MED_CTL), - &rlbl); - OffsetRect(&rlbl, -rwnd.left, -rwnd.top); - - d->row_gap = rlbl.top - rctl.bottom; - } - - d->nc->hwnd = hwnd; - - /* now call the UI callback and make it create the - controls. */ - d->nc->ident_cb(d->nc, WMNC_IDENT_INIT, NULL, 0, 0, - (LPARAM) hwnd); - - break; - - case WM_DESTROY: - d = (add_ident_data *)(LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - break; - - d->nc->ident_cb(d->nc, WMNC_IDENT_EXIT, NULL, 0, 0, 0); - - khui_cw_destroy_cred_blob(d->nc); - PFREE(d); - SetWindowLongPtr(hwnd, DWLP_USER, 0); - break; - - case KHUI_WM_NC_NOTIFY: - d = (add_ident_data *)(LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - break; - - switch(HIWORD(wParam)) { - case WMNC_ADD_CONTROL_ROW: - { - khui_control_row * row; - RECT r_lbl, r_inp, r_enc; - struct ctrl_row_dimensions * dim; - HFONT hf; - - row = (khui_control_row *) lParam; - -#ifdef DEBUG - assert(row->label); - assert(row->input); - assert(d); -#endif - - if (row->size == KHUI_CTRLSIZE_SMALL) { - dim = &d->dim_small; - } else if (row->size == KHUI_CTRLSIZE_HALF) { - dim = &d->dim_medium; - } else { - dim = &d->dim_large; -#ifdef DEBUG - assert(row->size == KHUI_CTRLSIZE_FULL); -#endif - } - - CopyRect(&r_enc, &dim->enclosure); - CopyRect(&r_lbl, &dim->label); - CopyRect(&r_inp, &dim->control); - - OffsetRect(&r_enc, d->current_x, d->current_y); - OffsetRect(&r_lbl, r_enc.left, r_enc.top); - OffsetRect(&r_inp, r_enc.left, r_enc.top); - - d->current_y += r_enc.bottom - r_enc.top; - - hf = (HFONT) SendDlgItemMessage(hwnd, IDOK, WM_GETFONT, 0, 0); - - if (row->label) { - SetWindowPos(row->label, - ((d->hwnd_last_ctrl != NULL)? - d->hwnd_last_ctrl : - HWND_TOP), - r_lbl.left, r_lbl.top, - r_lbl.right - r_lbl.left, - r_lbl.bottom - r_lbl.top, - SWP_DEFERERASE | SWP_NOACTIVATE | - SWP_NOOWNERZORDER); - if (hf) - SendMessage(row->label, WM_SETFONT, - (WPARAM) hf, - TRUE); - d->hwnd_last_ctrl = row->label; - } - - if (row->input) { - SetWindowPos(row->input, - ((d->hwnd_last_ctrl != NULL)? - d->hwnd_last_ctrl : - HWND_TOP), - r_inp.left, r_inp.top, - r_inp.right - r_inp.left, - r_inp.bottom - r_inp.top, - SWP_DEFERERASE | SWP_NOACTIVATE | - SWP_NOOWNERZORDER); - if (hf) - SendMessage(row->input, WM_SETFONT, - (WPARAM) hf, - TRUE); - d->hwnd_last_ctrl = row->input; - } - } - break; - - case WMNC_IDENTITY_CHANGE: - break; - } - return TRUE; - - case WM_COMMAND: - if (LOWORD(wParam) == IDOK) { - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - wchar_t err_msg[1024]; - khm_handle ident = NULL; - 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); - - if (!d || !d->nc) - break; - - if (d->nc->ident_cb) - d->nc->ident_cb(d->nc, WMNC_IDENT_PREPROCESS, NULL, 0, 0, 0); - - /* check if there was an identity selected */ - if (d->nc->n_identities == 0 || - d->nc->identities[0] == NULL) { - - StringCbCopy(idname, sizeof(idname), L""); - - LoadString(khm_hInstance, IDS_CFG_IDNAME_NON, - err_msg, ARRAYLENGTH(err_msg)); - - goto show_failure; - } - - ident = d->nc->identities[0]; - kcdb_identity_hold(ident); - - 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, - &csp_ident))) { - wchar_t fmt[256]; - - LoadString(khm_hInstance, IDS_CFG_IDNAME_CCC, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(err_msg, sizeof(err_msg), fmt, rv); - - kcdb_identity_release(ident); - ident = NULL; - - goto show_failure; - } - - /* create a value so that the configuration space will - actually be created in the registry. We don't want - this new identity to be sticky. */ - khc_write_int32(csp_ident, L"Sticky", 0); - - khm_refresh_config(); - - kcdb_identity_release(ident); - khc_close_space(csp_ident); - - EndDialog(hwnd, 0); - break; - - show_failure: - { - wchar_t title[512]; - wchar_t fmt[256]; - - if (!err_msg[0]) - break; - - LoadString(khm_hInstance, IDS_CFG_IDNAME_PRB, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(title, sizeof(title), fmt, idname); - - MessageBox(hwnd, err_msg, title, MB_OK | MB_ICONSTOP); - - /* don't end the dialog yet */ - break; - } - break; - - } else if (LOWORD(wParam) == IDCANCEL) { - EndDialog(hwnd, 1); - } else { - d = (add_ident_data *)(LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - if (d && d->nc && d->nc->ident_cb) { - return d->nc->ident_cb(d->nc, WMNC_IDENT_WMSG, - hwnd, umsg, wParam, lParam); - } - } - break; - } - - return FALSE; -} - -/* dialog procedure for the "general" pane of the "identities" - configuration node. */ -INT_PTR CALLBACK -khm_cfg_ids_tab_proc(HWND hwnd, - UINT umsg, - WPARAM wParam, - LPARAM lParam) { - - switch(umsg) { - case WM_INITDIALOG: - { - HICON hicon; - - hold_idents_data(); - - cfg_idents.hwnd = hwnd; - cfg_idents.cfg = *((khui_config_init_data *) lParam); - - /* add the status icons */ - if (cfg_idents.hi_status) - goto _done_with_icons; - - cfg_idents.hi_status = - ImageList_Create(GetSystemMetrics(SM_CXSMICON), - GetSystemMetrics(SM_CYSMICON), - ILC_COLOR8 | ILC_MASK, - 4,4); - - hicon = - LoadImage(khm_hInstance, MAKEINTRESOURCE(IDI_ID), - IMAGE_ICON, - GetSystemMetrics(SM_CXSMICON), - GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR); - - cfg_idents.idx_id = ImageList_AddIcon(cfg_idents.hi_status, - hicon); - - DestroyIcon(hicon); - - hicon = LoadImage(khm_hInstance, MAKEINTRESOURCE(IDI_CFG_DEFAULT), - IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), - GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR); - - cfg_idents.idx_default = ImageList_AddIcon(cfg_idents.hi_status, - hicon) + 1; - - DestroyIcon(hicon); - - hicon = LoadImage(khm_hInstance, MAKEINTRESOURCE(IDI_CFG_MODIFIED), - IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), - GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR); - - cfg_idents.idx_modified = ImageList_AddIcon(cfg_idents.hi_status, - hicon) + 1; - - DestroyIcon(hicon); - - hicon = LoadImage(khm_hInstance, MAKEINTRESOURCE(IDI_CFG_APPLIED), - IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), - GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR); - - cfg_idents.idx_applied = ImageList_AddIcon(cfg_idents.hi_status, - hicon) + 1; - - DestroyIcon(hicon); - - hicon = LoadImage(khm_hInstance, MAKEINTRESOURCE(IDI_CFG_DELETED), - IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), - GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR); - - cfg_idents.idx_deleted = ImageList_AddIcon(cfg_idents.hi_status, - hicon) + 1; - - DestroyIcon(hicon); - - _done_with_icons: - - CheckDlgButton(hwnd, IDC_CFG_MONITOR, - (cfg_idents.work.monitor)?BST_CHECKED:BST_UNCHECKED); - CheckDlgButton(hwnd, IDC_CFG_RENEW, - (cfg_idents.work.auto_renew)?BST_CHECKED:BST_UNCHECKED); - CheckDlgButton(hwnd, IDC_CFG_STICKY, - (cfg_idents.work.sticky)?BST_CHECKED:BST_UNCHECKED); - - } - return FALSE; - - case WM_COMMAND: - - if (HIWORD(wParam) == BN_CLICKED) { - UINT ctrl = LOWORD(wParam); - - switch(ctrl) { - case IDC_CFG_MONITOR: - case IDC_CFG_RENEW: - case IDC_CFG_STICKY: - refresh_data_idents(hwnd); - break; - - case IDC_CFG_ADDIDENT: - DialogBoxParam(khm_hInstance, - MAKEINTRESOURCE(IDD_CFG_ADDIDENT), - hwnd, - khm_cfg_add_ident_proc, - (LPARAM) hwnd); - break; - } - - refresh_view_idents_state(hwnd); - } - - khm_set_dialog_result(hwnd, 0); - return TRUE; - - case KHUI_WM_CFG_NOTIFY: - { - switch(HIWORD(wParam)) { - case WMCFG_APPLY: - write_params_idents(); - break; - - case WMCFG_UPDATE_STATE: - refresh_view_idents_state(hwnd); - break; - } - } - return TRUE; - - case WM_DESTROY: - cfg_idents.hwnd = NULL; - - if (cfg_idents.hi_status != NULL) { - ImageList_Destroy(cfg_idents.hi_status); - cfg_idents.hi_status = NULL; - } - release_idents_data(); - - khm_set_dialog_result(hwnd, 0); - - return TRUE; - } - - return FALSE; -} - -/* dialog procedure for the "Identities" configuration node */ -INT_PTR CALLBACK -khm_cfg_identities_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - HWND hw; - switch(uMsg) { - case WM_INITDIALOG: - set_window_node(hwnd, (khui_config_node) lParam); - add_subpanels(hwnd, (khui_config_node) lParam, - (khui_config_node) lParam); - hw = GetDlgItem(hwnd, IDC_CFG_TAB); - show_tab_panel(hwnd, - (khui_config_node) lParam, - hw, - TabCtrl_GetCurSel(hw), - TRUE); - return FALSE; - - case WM_DESTROY: - return 0; - - case KHUI_WM_CFG_NOTIFY: - return handle_cfg_notify(hwnd, wParam, lParam); - - case WM_NOTIFY: - return handle_notify(hwnd, wParam, lParam); - } - - return FALSE; -} - -static ident_data * -find_ident_by_node(khui_config_node node) { - khm_size cb; - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - int i; - khm_handle ident = NULL; - - cb = sizeof(idname); - khui_cfg_get_name(node, idname, &cb); - - for (i=0; i < (int)cfg_idents.n_idents; i++) { - if (!wcscmp(cfg_idents.idents[i].idname, idname)) - break; - } - - 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. */ - if (KHM_FAILED(kcdb_identity_create(idname, 0, &ident))) - return NULL; - - if (cfg_idents.n_idents >= cfg_idents.nc_idents) { - cfg_idents.nc_idents = UBOUNDSS(cfg_idents.n_idents + 1, - IDENTS_DATA_ALLOC_INCR, - IDENTS_DATA_ALLOC_INCR); -#ifdef DEBUG - assert(cfg_idents.nc_idents > cfg_idents.n_idents); -#endif - cfg_idents.idents = PREALLOC(cfg_idents.idents, - sizeof(*cfg_idents.idents) * - cfg_idents.nc_idents); -#ifdef DEBUG - assert(cfg_idents.idents); -#endif - ZeroMemory(&(cfg_idents.idents[cfg_idents.n_idents]), - sizeof(*cfg_idents.idents) * - (cfg_idents.nc_idents - cfg_idents.n_idents)); - } - - i = (int) cfg_idents.n_idents; - - StringCbLength(idname, KCDB_IDENT_MAXCB_NAME, &cb); - cb += sizeof(wchar_t); - - cfg_idents.idents[i].idname = PMALLOC(cb); -#ifdef DEBUG - assert(cfg_idents.idents[i].idname); -#endif - StringCbCopy(cfg_idents.idents[i].idname, cb, idname); - - cfg_idents.idents[i].ident = ident; - cfg_idents.idents[i].removed = FALSE; - - kcdb_identity_get_flags(ident, &cfg_idents.idents[i].flags); -#ifdef DEBUG - assert(cfg_idents.idents[i].flags & KCDB_IDENT_FLAG_CONFIG); -#endif - - read_params_ident(&cfg_idents.idents[i]); - - cfg_idents.n_idents++; - - /* leave ident held. */ - - return &cfg_idents.idents[i]; -} - -static void -refresh_view_ident(HWND hwnd, khui_config_node node) { - ident_data * d; - - d = find_ident_by_node(node); -#ifdef DEBUG - assert(d); -#endif - - CheckDlgButton(hwnd, IDC_CFG_MONITOR, - (d->work.monitor? BST_CHECKED: BST_UNCHECKED)); - CheckDlgButton(hwnd, IDC_CFG_RENEW, - (d->work.auto_renew? BST_CHECKED: BST_UNCHECKED)); - CheckDlgButton(hwnd, IDC_CFG_STICKY, - (d->work.sticky? BST_CHECKED: BST_UNCHECKED)); -} - -static void -mark_remove_ident(HWND hwnd, khui_config_init_data * idata) { - ident_data * d; - - d = find_ident_by_node(idata->ctx_node); -#ifdef DEBUG - assert(d); -#endif - - if (d->removed) - return; - - d->removed = TRUE; - - khui_cfg_set_flags_inst(idata, KHUI_CNFLAG_MODIFIED, - KHUI_CNFLAG_MODIFIED); - - EnableWindow(GetDlgItem(hwnd, IDC_CFG_REMOVE), FALSE); -} - -static void -refresh_data_ident(HWND hwnd, khui_config_init_data * idata) { - ident_data * d; - - d = find_ident_by_node(idata->ctx_node); -#ifdef DEBUG - assert(d); -#endif - - if (IsDlgButtonChecked(hwnd, IDC_CFG_MONITOR) == BST_CHECKED) - d->work.monitor = TRUE; - else - d->work.monitor = FALSE; - - if (IsDlgButtonChecked(hwnd, IDC_CFG_RENEW) == BST_CHECKED) - d->work.auto_renew = TRUE; - else - d->work.auto_renew = FALSE; - - if (IsDlgButtonChecked(hwnd, IDC_CFG_STICKY) == BST_CHECKED) - d->work.sticky = TRUE; - else - d->work.sticky = FALSE; - - if (d->work.monitor != d->saved.monitor || - d->work.auto_renew != d->saved.auto_renew || - d->work.sticky != d->saved.sticky) { - - khui_cfg_set_flags_inst(idata, KHUI_CNFLAG_MODIFIED, - KHUI_CNFLAG_MODIFIED); - - } else { - khui_cfg_set_flags_inst(idata, 0, - KHUI_CNFLAG_MODIFIED); - } -} - -/* dialog procedure for the "general" pane of individual identity - configuration nodes. */ -INT_PTR CALLBACK -khm_cfg_id_tab_proc(HWND hwnd, - UINT umsg, - WPARAM wParam, - LPARAM lParam) { - - khui_config_init_data * idata; - - switch(umsg) { - case WM_INITDIALOG: - { - ident_data * d; - - hold_idents_data(); - - idata = (khui_config_init_data *) lParam; - - khui_cfg_init_dialog_data(hwnd, idata, 0, NULL, NULL); - - refresh_view_ident(hwnd, idata->ctx_node); - - d = find_ident_by_node(idata->ctx_node); - if (d) - d->hwnd = hwnd; -#ifdef DEBUG - else - assert(FALSE); -#endif - } - return FALSE; - - case WM_COMMAND: - khui_cfg_get_dialog_data(hwnd, &idata, NULL); - - if (HIWORD(wParam) == BN_CLICKED) { - switch(LOWORD(wParam)) { - case IDC_CFG_MONITOR: - case IDC_CFG_RENEW: - case IDC_CFG_STICKY: - - refresh_data_ident(hwnd, idata); - if (cfg_idents.hwnd) - PostMessage(cfg_idents.hwnd, KHUI_WM_CFG_NOTIFY, - MAKEWPARAM(1, WMCFG_UPDATE_STATE), 0); - break; - - case IDC_CFG_REMOVE: - mark_remove_ident(hwnd, idata); - if (cfg_idents.hwnd) - PostMessage(cfg_idents.hwnd, KHUI_WM_CFG_NOTIFY, - MAKEWPARAM(1, WMCFG_UPDATE_STATE), 0); - break; - } - } - - khm_set_dialog_result(hwnd, 0); - return TRUE; - - case WM_DESTROY: - { - ident_data * d; - - khui_cfg_get_dialog_data(hwnd, &idata, NULL); - - d = find_ident_by_node(idata->ctx_node); - if (d) - d->hwnd = NULL; - - release_idents_data(); - khui_cfg_free_dialog_data(hwnd); - khm_set_dialog_result(hwnd, 0); - } - return TRUE; - - case KHUI_WM_CFG_NOTIFY: - { - ident_data * d; - BOOL * cont; - - khui_cfg_get_dialog_data(hwnd, &idata, NULL); - - switch (HIWORD(wParam)) { - case WMCFG_APPLY: - cont = (BOOL *) lParam; - d = find_ident_by_node(idata->ctx_node); - write_params_ident(d); - 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: - refresh_view_ident(hwnd, idata->ctx_node); - refresh_data_ident(hwnd, idata); - break; - } - } - return TRUE; - } - - return FALSE; -} - -/* dialog procedure for individual identity configuration nodes */ -INT_PTR CALLBACK -khm_cfg_identity_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - HWND hw; - - switch(uMsg) { - case WM_INITDIALOG: - { - khui_config_node refnode = NULL; - - set_window_node(hwnd, (khui_config_node) lParam); - - khui_cfg_open(NULL, L"KhmIdentities", &refnode); -#ifdef DEBUG - assert(refnode != NULL); -#endif - add_subpanels(hwnd, - (khui_config_node) lParam, - refnode); - - hw = GetDlgItem(hwnd, IDC_CFG_TAB); - - show_tab_panel(hwnd, - (khui_config_node) lParam, - hw, - TabCtrl_GetCurSel(hw), - TRUE); - - khui_cfg_release(refnode); - } - return FALSE; - - case WM_DESTROY: - return 0; - - case KHUI_WM_CFG_NOTIFY: - return handle_cfg_notify(hwnd, wParam, lParam); - - case WM_NOTIFY: - return handle_notify(hwnd, wParam, lParam); - } - return FALSE; -} diff --git a/src/windows/identity/ui/cfg_notif_wnd.c b/src/windows/identity/ui/cfg_notif_wnd.c deleted file mode 100644 index 5bb2d6667..000000000 --- a/src/windows/identity/ui/cfg_notif_wnd.c +++ /dev/null @@ -1,350 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<khmapp.h> -#include<assert.h> - -typedef struct tag_notif_data { - khui_config_node node; - - BOOL modified; - - BOOL monitor; - BOOL renew; - BOOL halflife; - BOOL warn1; - BOOL warn2; - - khui_tracker tc_renew; - khui_tracker tc_warn1; - khui_tracker tc_warn2; -} notif_data; - -static void -read_params(notif_data * d) { - khm_handle csp_cw; - khm_int32 rv; - khm_int32 t; - - rv = khc_open_space(NULL, L"CredWindow", KHM_PERM_READ, &csp_cw); - assert(KHM_SUCCEEDED(rv)); - - rv = khc_read_int32(csp_cw, L"Monitor", &t); - assert(KHM_SUCCEEDED(rv)); - d->monitor = !!t; - - rv = khc_read_int32(csp_cw, L"AllowAutoRenew", &t); - assert(KHM_SUCCEEDED(rv)); - d->renew = !!t; - - rv = khc_read_int32(csp_cw, L"RenewAtHalfLife", &t); - assert(KHM_SUCCEEDED(rv)); - d->halflife = !!t; - - rv = khc_read_int32(csp_cw, L"AllowWarn", &t); - assert(KHM_SUCCEEDED(rv)); - d->warn1 = !!t; - - rv = khc_read_int32(csp_cw, L"AllowCritical", &t); - assert(KHM_SUCCEEDED(rv)); - d->warn2 = !!t; - - rv = khc_read_int32(csp_cw, L"AutoRenewThreshold", &t); - assert(KHM_SUCCEEDED(rv)); - d->tc_renew.current = t; - - rv = khc_read_int32(csp_cw, L"WarnThreshold", &t); - assert(KHM_SUCCEEDED(rv)); - d->tc_warn1.current = t; - - rv = khc_read_int32(csp_cw, L"CriticalThreshold", &t); - assert(KHM_SUCCEEDED(rv)); - d->tc_warn2.current = t; - - rv = khc_read_int32(csp_cw, L"MaxThreshold", &t); - assert(KHM_SUCCEEDED(rv)); - d->tc_renew.max = t; - d->tc_warn1.max = t; - d->tc_warn2.max = t; - - rv = khc_read_int32(csp_cw, L"MinThreshold", &t); - assert(KHM_SUCCEEDED(rv)); - d->tc_renew.min = t; - d->tc_warn1.min = t; - d->tc_warn2.min = t; - - khc_close_space(csp_cw); - - d->modified = FALSE; -} - -static void -check_for_modification(notif_data * d) { - notif_data t; - - ZeroMemory(&t, sizeof(t)); - - read_params(&t); - - if ((!!d->monitor) != (!!t.monitor) || - (!!d->renew) != (!!t.renew) || - (!!d->halflife) != (!!t.halflife) || - (!!d->warn1) != (!!t.warn1) || - (!!d->warn2) != (!!t.warn2) || - d->tc_renew.current != t.tc_renew.current || - d->tc_warn1.current != t.tc_warn1.current || - d->tc_warn2.current != t.tc_warn2.current) { - - khui_cfg_set_flags(d->node, - KHUI_CNFLAG_MODIFIED, - KHUI_CNFLAG_MODIFIED); - - d->modified = TRUE; - - } else { - khui_cfg_set_flags(d->node, - 0, - KHUI_CNFLAG_MODIFIED); - - d->modified = FALSE; - } -} - -static void -write_params(notif_data * d) { - khm_handle csp_cw; - khm_int32 rv; - - if (!d->modified) - return; - - rv = khc_open_space(NULL, L"CredWindow", KHM_PERM_WRITE, &csp_cw); - assert(KHM_SUCCEEDED(rv)); - - rv = khc_write_int32(csp_cw, L"Monitor", d->monitor); - assert(KHM_SUCCEEDED(rv)); - - rv = khc_write_int32(csp_cw, L"AllowAutoRenew", d->renew); - assert(KHM_SUCCEEDED(rv)); - - rv = khc_write_int32(csp_cw, L"RenewAtHalfLife", d->halflife); - assert(KHM_SUCCEEDED(rv)); - - rv = khc_write_int32(csp_cw, L"AllowWarn", d->warn1); - assert(KHM_SUCCEEDED(rv)); - - rv = khc_write_int32(csp_cw, L"AllowCritical", d->warn2); - assert(KHM_SUCCEEDED(rv)); - - - rv = khc_write_int32(csp_cw, L"AutoRenewThreshold", - (khm_int32) d->tc_renew.current); - assert(KHM_SUCCEEDED(rv)); - - rv = khc_write_int32(csp_cw, L"WarnThreshold", - (khm_int32) d->tc_warn1.current); - assert(KHM_SUCCEEDED(rv)); - - rv = khc_write_int32(csp_cw, L"CriticalThreshold", - (khm_int32) d->tc_warn2.current); - assert(KHM_SUCCEEDED(rv)); - - khc_close_space(csp_cw); - - khui_cfg_set_flags(d->node, - KHUI_CNFLAG_APPLIED, - KHUI_CNFLAG_APPLIED | KHUI_CNFLAG_MODIFIED); - - khm_timer_refresh(hwnd_notifier); -} - -static void -refresh_view(HWND hwnd, notif_data * d) { - CheckDlgButton(hwnd, IDC_NOTIF_MONITOR, - (d->monitor?BST_CHECKED:BST_UNCHECKED)); - CheckDlgButton(hwnd, IDC_NOTIF_RENEW, - (d->renew?BST_CHECKED:BST_UNCHECKED)); - CheckDlgButton(hwnd, IDC_NOTIF_HALFLIFE, - (d->halflife?BST_CHECKED:BST_UNCHECKED)); - CheckDlgButton(hwnd, IDC_NOTIF_WARN1, - (d->warn1?BST_CHECKED:BST_UNCHECKED)); - CheckDlgButton(hwnd, IDC_NOTIF_WARN2, - (d->warn2?BST_CHECKED:BST_UNCHECKED)); - khui_tracker_refresh(&d->tc_renew); - khui_tracker_refresh(&d->tc_warn1); - khui_tracker_refresh(&d->tc_warn2); - if (!d->monitor) { - EnableWindow(GetDlgItem(hwnd, IDC_NOTIF_RENEW), FALSE); - EnableWindow(GetDlgItem(hwnd, IDC_NOTIF_HALFLIFE), FALSE); - EnableWindow(GetDlgItem(hwnd, IDC_NOTIF_WARN1), FALSE); - EnableWindow(GetDlgItem(hwnd, IDC_NOTIF_WARN2), FALSE); - EnableWindow(GetDlgItem(hwnd, IDC_NOTIF_RENEW_THR), FALSE); - EnableWindow(GetDlgItem(hwnd, IDC_NOTIF_WARN1_THR), FALSE); - EnableWindow(GetDlgItem(hwnd, IDC_NOTIF_WARN2_THR), FALSE); - } else { - EnableWindow(GetDlgItem(hwnd, IDC_NOTIF_RENEW), TRUE); - EnableWindow(GetDlgItem(hwnd, IDC_NOTIF_HALFLIFE), TRUE); - EnableWindow(GetDlgItem(hwnd, IDC_NOTIF_WARN1), TRUE); - EnableWindow(GetDlgItem(hwnd, IDC_NOTIF_WARN2), TRUE); - EnableWindow(GetDlgItem(hwnd, IDC_NOTIF_RENEW_THR), !!(d->renew)); - EnableWindow(GetDlgItem(hwnd, IDC_NOTIF_WARN1_THR), !!(d->warn1)); - EnableWindow(GetDlgItem(hwnd, IDC_NOTIF_WARN2_THR), !!(d->warn2)); - } -} - -static void -refresh_data(HWND hwnd, notif_data * d) { - d->monitor = (IsDlgButtonChecked(hwnd, IDC_NOTIF_MONITOR) - == BST_CHECKED); - d->renew = (IsDlgButtonChecked(hwnd, IDC_NOTIF_RENEW) - == BST_CHECKED); - d->halflife = (IsDlgButtonChecked(hwnd, IDC_NOTIF_HALFLIFE) - == BST_CHECKED); - d->warn1 = (IsDlgButtonChecked(hwnd, IDC_NOTIF_WARN1) - == BST_CHECKED); - d->warn2 = (IsDlgButtonChecked(hwnd, IDC_NOTIF_WARN2) - == BST_CHECKED); - - check_for_modification(d); -} - -INT_PTR CALLBACK -khm_cfg_notifications_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - - notif_data * d; - - switch(uMsg) { - case WM_INITDIALOG: { - HWND hw; - - d = PMALLOC(sizeof(*d)); -#ifdef DEBUG - assert(d != NULL); -#endif - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) d); -#pragma warning(pop) - - ZeroMemory(d, sizeof(*d)); - - d->node = (khui_config_node) lParam; - - khui_tracker_initialize(&d->tc_renew); - khui_tracker_initialize(&d->tc_warn1); - khui_tracker_initialize(&d->tc_warn2); - - read_params(d); - - hw = GetDlgItem(hwnd, IDC_NOTIF_RENEW_THR); - khui_tracker_install(hw, &d->tc_renew); - - hw = GetDlgItem(hwnd, IDC_NOTIF_WARN1_THR); - khui_tracker_install(hw, &d->tc_warn1); - - hw = GetDlgItem(hwnd, IDC_NOTIF_WARN2_THR); - khui_tracker_install(hw, &d->tc_warn2); - - refresh_view(hwnd, d); - - /* normally we should return TRUE, but in this case we return - FALSE since we don't want to inadvertently steal the focus - from the treeview. */ - return FALSE; - } - - case WM_COMMAND: { - d = (notif_data *) (DWORD_PTR) GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - return FALSE; - - if (HIWORD(wParam) == BN_CLICKED) { - refresh_data(hwnd, d); - refresh_view(hwnd, d); - - check_for_modification(d); - } else if (HIWORD(wParam) == EN_CHANGE) { - SetTimer(hwnd, 1, 500, NULL); - } - - khm_set_dialog_result(hwnd, 0); - - return TRUE; - } - - case WM_TIMER: { - d = (notif_data *) (DWORD_PTR) GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - return FALSE; - - KillTimer(hwnd, 1); - check_for_modification(d); - - khm_set_dialog_result(hwnd, 0); - - return TRUE; - } - - case WM_DESTROY: { - d = (notif_data *) (DWORD_PTR) GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - return FALSE; - - khui_tracker_kill_controls(&d->tc_renew); - khui_tracker_kill_controls(&d->tc_warn1); - khui_tracker_kill_controls(&d->tc_warn2); - - PFREE(d); - - SetWindowLongPtr(hwnd, DWLP_USER, 0); - - khm_set_dialog_result(hwnd, 0); - - return TRUE; - } - - case KHUI_WM_CFG_NOTIFY: { - d = (notif_data *) (DWORD_PTR) GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - return FALSE; - - if (HIWORD(wParam) == WMCFG_APPLY) { - write_params(d); - } - - khm_set_dialog_result(hwnd, 0); - - return TRUE; - } - - } - - return FALSE; -} diff --git a/src/windows/identity/ui/cfg_plugins_wnd.c b/src/windows/identity/ui/cfg_plugins_wnd.c deleted file mode 100644 index dc26f097b..000000000 --- a/src/windows/identity/ui/cfg_plugins_wnd.c +++ /dev/null @@ -1,654 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<khmapp.h> -#include<assert.h> - -#define MAX_PLUGINS 256 - -typedef struct tag_plugin_data { - kmm_plugin_info plugin; - kmm_module_info module; -} plugin_data; - -typedef struct tag_plugin_dlg_data { - plugin_data * info[MAX_PLUGINS]; - khm_size n_info; - - plugin_data * selected; - HICON plugin_ico; -} plugin_dlg_data; - -void update_dialog_fields(HWND hwnd, - plugin_dlg_data * d, - plugin_data * info) { - wchar_t buf[256]; - UINT resid; - wchar_t * t; - khm_handle csp_module = NULL; - - d->selected = info; - - if (info->plugin.reg.description) - SetDlgItemText(hwnd, IDC_CFG_DESC, info->plugin.reg.description); - else { - wchar_t fmt[128]; - - LoadString(khm_hInstance, IDS_CFG_NODESC, fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(buf, sizeof(buf), fmt, info->plugin.reg.name); - SetDlgItemText(hwnd, IDC_CFG_DESC, buf); - } - - switch(info->plugin.state) { - case KMM_PLUGIN_STATE_FAIL_INIT: - resid = IDS_PISTATE_FAILINIT; - break; - - case KMM_PLUGIN_STATE_FAIL_UNKNOWN: - resid = IDS_PISTATE_FAILUNK; - break; - - case KMM_PLUGIN_STATE_FAIL_MAX_FAILURE: - resid = IDS_PISTATE_FAILMAX; - break; - - case KMM_PLUGIN_STATE_FAIL_NOT_REGISTERED: - resid = IDS_PISTATE_FAILREG; - break; - - case KMM_PLUGIN_STATE_FAIL_DISABLED: - resid = IDS_PISTATE_FAILDIS; - break; - - case KMM_PLUGIN_STATE_FAIL_LOAD: - resid = IDS_PISTATE_FAILLOD; - break; - - case KMM_PLUGIN_STATE_NONE: - case KMM_PLUGIN_STATE_PLACEHOLDER: - resid = IDS_PISTATE_PLACEHOLD; - break; - - case KMM_PLUGIN_STATE_REG: - case KMM_PLUGIN_STATE_PREINIT: - resid = IDS_PISTATE_REG; - break; - - case KMM_PLUGIN_STATE_HOLD: - resid = IDS_PISTATE_HOLD; - break; - - case KMM_PLUGIN_STATE_INIT: - resid = IDS_PISTATE_INIT; - break; - - case KMM_PLUGIN_STATE_RUNNING: - resid = IDS_PISTATE_RUN; - break; - - case KMM_PLUGIN_STATE_EXITED: - resid = IDS_PISTATE_EXIT; - break; - - default: -#ifdef DEBUG - assert(FALSE); -#endif - resid = IDS_PISTATE_FAILUNK; - } - - LoadString(khm_hInstance, resid, - buf, ARRAYLENGTH(buf)); - - SetDlgItemText(hwnd, IDC_CFG_STATE, buf); - - SendDlgItemMessage(hwnd, IDC_CFG_DEPS, - LB_RESETCONTENT, 0, 0); - - for (t = info->plugin.reg.dependencies; t && *t; - t = multi_string_next(t)) { - SendDlgItemMessage(hwnd, IDC_CFG_DEPS, - LB_INSERTSTRING, (WPARAM) -1, (LPARAM) t); - } - - if (info->plugin.reg.module) - SetDlgItemText(hwnd, IDC_CFG_MODULE, - info->plugin.reg.module); - else - SetDlgItemText(hwnd, IDC_CFG_MODULE, - L""); - - if (info->module.reg.vendor) - SetDlgItemText(hwnd, IDC_CFG_VENDOR, - info->module.reg.vendor); - else - SetDlgItemText(hwnd, IDC_CFG_VENDOR, - L""); - - StringCbPrintf(buf, sizeof(buf), L"%u.%u.%u.%u", - (unsigned int) info->module.product_version.major, - (unsigned int) info->module.product_version.minor, - (unsigned int) info->module.product_version.patch, - (unsigned int) info->module.product_version.aux); - - SetDlgItemText(hwnd, IDC_CFG_VERSION, buf); - - if (info->plugin.reg.icon) { - SendDlgItemMessage(hwnd, IDC_CFG_ICON, - STM_SETICON, - (WPARAM) info->plugin.reg.icon, - 0); - } else { - SendDlgItemMessage(hwnd, IDC_CFG_ICON, - STM_SETICON, - (WPARAM) d->plugin_ico, - 0); - } - - if (KHM_SUCCEEDED(kmm_get_module_config(info->module.reg.name, - 0, &csp_module)) && - (khc_value_exists(csp_module, L"ImagePath") & - (KCONF_FLAG_MACHINE | KCONF_FLAG_USER))) { - - EnableWindow(GetDlgItem(hwnd, IDC_CFG_UNREGISTER), TRUE); - } else { - EnableWindow(GetDlgItem(hwnd, IDC_CFG_UNREGISTER), FALSE); - } - - if (csp_module) - khc_close_space(csp_module); - - if (info->plugin.flags & KMM_PLUGIN_FLAG_DISABLED) { - EnableWindow(GetDlgItem(hwnd, IDC_CFG_ENABLE), TRUE); - EnableWindow(GetDlgItem(hwnd, IDC_CFG_DISABLE), FALSE); - } else { - EnableWindow(GetDlgItem(hwnd, IDC_CFG_ENABLE), FALSE); - EnableWindow(GetDlgItem(hwnd, IDC_CFG_DISABLE), TRUE); - } -} - -#define IDX_PLUGIN_NORMAL 1 -#define IDX_PLUGIN_DISABLED 2 -#define IDX_PLUGIN_ERROR 3 - -INT_PTR CALLBACK -khm_cfg_plugins_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - - plugin_dlg_data * d; - - switch(uMsg) { - case WM_INITDIALOG: - { - kmm_plugin p; - kmm_plugin pn; - kmm_module m; - khm_size i; - LVCOLUMN lvc; - RECT r; - HWND hw; - wchar_t buf[256]; - HIMAGELIST h_ilist; - HICON h_icon; - - d = PMALLOC(sizeof(*d)); -#ifdef DEBUG - assert(d); -#endif - ZeroMemory(d, sizeof(*d)); -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) d); -#pragma warning(pop) - - p = NULL; - i = 0; - do { - if (KHM_FAILED(kmm_get_next_plugin(p, &pn))) - break; - - if (p) - kmm_release_plugin(p); - p = pn; - -#ifdef DEBUG - assert(d->info[i] == NULL); -#endif - d->info[i] = PMALLOC(sizeof(*(d->info[i]))); -#ifdef DEBUG - assert(d->info[i]); -#endif - ZeroMemory(&d->info[i]->plugin, - sizeof(d->info[i]->plugin)); - - if (KHM_FAILED(kmm_get_plugin_info_i(p, &d->info[i]->plugin))) { - PFREE(d->info[i]); - d->info[i] = NULL; - break; - } - - ZeroMemory(&d->info[i]->module, - sizeof(d->info[i]->module)); - - if (KHM_SUCCEEDED(kmm_load_module(d->info[i]->plugin.reg.module, - KMM_LM_FLAG_NOLOAD, - &m))) { - kmm_get_module_info_i(m, &d->info[i]->module); - kmm_release_module(m); - } - - i ++; - - if (i == MAX_PLUGINS) - break; - } while(p); - - if (p) - kmm_release_plugin(p); - - d->n_info = i; - - /* now populate the list view */ - hw = GetDlgItem(hwnd, IDC_CFG_PLUGINS); -#ifdef DEBUG - assert(hw); -#endif - - h_ilist = ImageList_Create(GetSystemMetrics(SM_CXSMICON), - GetSystemMetrics(SM_CYSMICON), - ILC_COLOR8, - 4, 4); - - h_icon = LoadImage(khm_hInstance, - MAKEINTRESOURCE(IDI_CFG_PLUGIN), - IMAGE_ICON, - GetSystemMetrics(SM_CXSMICON), - GetSystemMetrics(SM_CYSMICON), - LR_DEFAULTCOLOR); -#ifdef DEBUG - assert(h_icon); -#endif - ImageList_AddIcon(h_ilist, h_icon); - DestroyIcon(h_icon); - - h_icon = LoadImage(khm_hInstance, - MAKEINTRESOURCE(IDI_CFG_PLUGIN_DIS), - IMAGE_ICON, - GetSystemMetrics(SM_CXSMICON), - GetSystemMetrics(SM_CYSMICON), - LR_DEFAULTCOLOR); -#ifdef DEBUG - assert(h_icon); -#endif - ImageList_AddIcon(h_ilist, h_icon); - DestroyIcon(h_icon); - - h_icon = LoadImage(khm_hInstance, - MAKEINTRESOURCE(IDI_CFG_PLUGIN_ERR), - IMAGE_ICON, - GetSystemMetrics(SM_CXSMICON), - GetSystemMetrics(SM_CYSMICON), - LR_DEFAULTCOLOR); -#ifdef DEBUG - assert(h_icon); -#endif - ImageList_AddIcon(h_ilist, h_icon); - DestroyIcon(h_icon); - - ListView_SetImageList(hw, h_ilist, LVSIL_STATE); - - ZeroMemory(&lvc, sizeof(lvc)); - - lvc.mask = LVCF_TEXT | LVCF_WIDTH; - GetWindowRect(hw, &r); - lvc.cx = ((r.right - r.left) * 95) / 100; - lvc.pszText = buf; - - LoadString(khm_hInstance, IDS_CFG_PI_COL_PLUGINS, - buf, ARRAYLENGTH(buf)); - - ListView_InsertColumn(hw, 0, &lvc); - - for(i=0; i<d->n_info; i++) { - LVITEM lvi; - - ZeroMemory(&lvi, sizeof(lvi)); - - lvi.mask = LVIF_PARAM | LVIF_TEXT | LVIF_STATE; - lvi.lParam = (LPARAM) d->info[i]; - lvi.pszText = d->info[i]->plugin.reg.name; - - if (d->info[i]->plugin.flags & KMM_PLUGIN_FLAG_DISABLED) { - lvi.state = INDEXTOSTATEIMAGEMASK(IDX_PLUGIN_DISABLED); - } else if (d->info[i]->plugin.state < 0) { - lvi.state = INDEXTOSTATEIMAGEMASK(IDX_PLUGIN_ERROR); - } else { - lvi.state = INDEXTOSTATEIMAGEMASK(IDX_PLUGIN_NORMAL); - } - - ListView_InsertItem(hw, &lvi); - } - - d->plugin_ico = - (HICON) LoadImage(khm_hInstance, - MAKEINTRESOURCE(IDI_CFG_PLUGIN), - IMAGE_ICON, - GetSystemMetrics(SM_CXICON), - GetSystemMetrics(SM_CYICON), - LR_DEFAULTCOLOR); - } - return FALSE; - - case WM_NOTIFY: - { - LPNMHDR lpnm; - HWND hw; - - d = (plugin_dlg_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - return FALSE; - - if (wParam == IDC_CFG_PLUGINS && - (lpnm = (LPNMHDR) lParam) && - lpnm->code == LVN_ITEMCHANGED) { - - LVITEM lvi; - - hw = GetDlgItem(hwnd, IDC_CFG_PLUGINS); -#ifdef DEBUG - assert(hw); -#endif - if (ListView_GetSelectedCount(hw) != 1) { - SetDlgItemText(hwnd, IDC_CFG_DESC, L""); - SetDlgItemText(hwnd, IDC_CFG_STATE, L""); - SetDlgItemText(hwnd, IDC_CFG_MODULE, L""); - SetDlgItemText(hwnd, IDC_CFG_VENDOR, L""); - SetDlgItemText(hwnd, IDC_CFG_VERSION, L""); - EnableWindow(GetDlgItem(hwnd, IDC_CFG_ENABLE), FALSE); - EnableWindow(GetDlgItem(hwnd, IDC_CFG_DISABLE), FALSE); - EnableWindow(GetDlgItem(hwnd, IDC_CFG_UNREGISTER), FALSE); - SendDlgItemMessage(hwnd, IDC_CFG_DEPS, - LB_RESETCONTENT, 0, 0); - SendDlgItemMessage(hwnd, IDC_CFG_ICON, STM_SETICON, - (WPARAM) d->plugin_ico, 0); - d->selected = NULL; - } else { - int idx; - plugin_data * info; - - idx = ListView_GetNextItem(hw, -1, LVNI_SELECTED); -#ifdef DEBUG - assert(idx != -1); -#endif - ZeroMemory(&lvi, sizeof(lvi)); - lvi.iItem = idx; - lvi.iSubItem = 0; - lvi.mask = LVIF_PARAM; - - ListView_GetItem(hw, &lvi); -#ifdef DEBUG - assert(lvi.lParam != 0); -#endif - info = (plugin_data *) lvi.lParam; - - update_dialog_fields(hwnd, d, info); - } - } - } - return TRUE; - - case WM_COMMAND: - { - - d = (plugin_dlg_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - return FALSE; - - switch (wParam) { - case MAKEWPARAM(IDC_CFG_ENABLE, BN_CLICKED): - if (d->selected != NULL) { - khui_alert * alert = NULL; - wchar_t buf[KHUI_MAXCCH_MESSAGE]; - wchar_t fmt[KHUI_MAXCCH_MESSAGE]; - kmm_plugin p; - - khui_alert_create_empty(&alert); - - LoadString(khm_hInstance, IDS_CFG_P_ENBCNFT, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(buf, sizeof(buf), fmt, d->selected->plugin.reg.name); - khui_alert_set_title(alert, buf); - - LoadString(khm_hInstance, IDS_CFG_P_ENBCNFM, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(buf, sizeof(buf), fmt, d->selected->plugin.reg.name); - khui_alert_set_message(alert, buf); - - khui_alert_set_severity(alert, KHERR_INFO); - - khui_alert_show_modal(alert); - - kmm_enable_plugin(d->selected->plugin.h_plugin, TRUE); - - khui_alert_release(alert); - - p = d->selected->plugin.h_plugin; - kmm_hold_plugin(p); - kmm_release_plugin_info_i(&d->selected->plugin); - kmm_get_plugin_info_i(p, &d->selected->plugin); - kmm_release_plugin(p); - - update_dialog_fields(hwnd, d, d->selected); - } - break; - - case MAKEWPARAM(IDC_CFG_DISABLE, BN_CLICKED): - if (d->selected != NULL) { - khui_alert * alert = NULL; - wchar_t buf[KHUI_MAXCCH_MESSAGE]; - wchar_t fmt[KHUI_MAXCCH_MESSAGE]; - wchar_t depends[KHUI_MAXCCH_MESSAGE]; - khm_size i; - kmm_plugin p; - - khui_alert_create_empty(&alert); -#ifdef DEBUG - assert(alert); -#endif - if (alert == NULL) - break; - - LoadString(khm_hInstance, IDS_CFG_P_DELCNFT, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(buf, sizeof(buf), fmt, d->selected->plugin.reg.name); - khui_alert_set_title(alert, buf); - - LoadString(khm_hInstance, IDS_CFG_P_DELCNFM, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(buf, sizeof(buf), fmt, d->selected->plugin.reg.name); - khui_alert_set_message(alert, buf); - - depends[0] = L'\0'; - - for (i=0; i<d->n_info; i++) { - wchar_t * t; - - t = d->info[i]->plugin.reg.dependencies; - - while(t) { - if (!wcscmp(t, d->selected->plugin.reg.name)) { - if (depends[0]) - StringCbCat(depends, sizeof(depends), L", "); - StringCbCat(depends, sizeof(depends), - d->info[i]->plugin.reg.name); - break; - } - t = multi_string_next(t); - } - } - - if (depends[0]) { - LoadString(khm_hInstance, IDS_CFG_P_DELCNFS, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(buf, sizeof(buf), fmt, depends); - khui_alert_set_suggestion(alert, buf); - } else { - LoadString(khm_hInstance, IDS_CFG_P_DELNDEP, - buf, ARRAYLENGTH(buf)); - khui_alert_set_suggestion(alert, buf); - } - - khui_alert_add_command(alert, KHUI_PACTION_YES); - khui_alert_add_command(alert, KHUI_PACTION_NO); - - khui_alert_set_severity(alert, KHERR_WARNING); - - if (KHM_SUCCEEDED(khui_alert_show_modal(alert)) && - alert->response == KHUI_PACTION_YES) { - kmm_enable_plugin(d->selected->plugin.h_plugin, FALSE); - } - - khui_alert_release(alert); - - p = d->selected->plugin.h_plugin; - kmm_hold_plugin(p); - kmm_release_plugin_info_i(&d->selected->plugin); - kmm_get_plugin_info_i(p, &d->selected->plugin); - kmm_release_plugin(p); - - update_dialog_fields(hwnd, d, d->selected); - } - break; - - case MAKEWPARAM(IDC_CFG_UNREGISTER, BN_CLICKED): - { - khui_alert * alert = NULL; - wchar_t buf[KHUI_MAXCCH_MESSAGE]; - wchar_t fmt[KHUI_MAXCCH_MESSAGE]; - wchar_t plist[KHUI_MAXCCH_MESSAGE]; - khm_size i; - - if (d->selected == NULL) { -#ifdef DEBUG - assert(FALSE); -#endif - break; - } - - khui_alert_create_empty(&alert); - - LoadString(khm_hInstance, IDS_CFG_P_UNRCNFT, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(buf, sizeof(buf), fmt, - d->selected->plugin.reg.name); - - khui_alert_set_title(alert, buf); - - LoadString(khm_hInstance, IDS_CFG_P_UNRCNFM, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(buf, sizeof(buf), fmt, - d->selected->plugin.reg.name); - - khui_alert_set_message(alert, buf); - - plist[0] = L'\0'; - for (i=0; i < d->n_info; i++) { - if (!wcscmp(d->info[i]->module.reg.name, - d->selected->module.reg.name)) { - if (plist[0]) - StringCbCat(plist, sizeof(plist), L", "); - StringCbCat(plist, sizeof(plist), - d->info[i]->plugin.reg.name); - } - } - -#ifdef DEBUG - /* there should have been at least one plugin */ - assert(plist[0]); -#endif - - LoadString(khm_hInstance, IDS_CFG_P_UNRCNFS, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(buf, sizeof(buf), fmt, plist); - khui_alert_set_suggestion(alert, buf); - - khui_alert_add_command(alert, KHUI_PACTION_YES); - khui_alert_add_command(alert, KHUI_PACTION_NO); - - khui_alert_set_severity(alert, KHERR_WARNING); - - if (KHM_SUCCEEDED(khui_alert_show_modal(alert)) && - alert->response == KHUI_PACTION_YES) { - kmm_unregister_module(d->selected->module.reg.name, 0); - - update_dialog_fields(hwnd, d, d->selected); - } - } - break; - - case MAKEWPARAM(IDC_CFG_REGISTER, BN_CLICKED): - { - - } - break; - } - } - return TRUE; - - case WM_DESTROY: - { - khm_size i; - - d = (plugin_dlg_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); -#ifdef DEBUG - assert(d); -#endif - if (d == NULL) - return TRUE; - - for (i=0; i<d->n_info; i++) { -#ifdef DEBUG - assert(d->info[i]); -#endif - kmm_release_plugin_info_i(&d->info[i]->plugin); - kmm_release_module_info_i(&d->info[i]->module); - PFREE(d->info[i]); - } - - PFREE(d); - SetWindowLongPtr(hwnd, DWLP_USER, 0); - - khm_set_dialog_result(hwnd, 0); - } - return TRUE; - } - return FALSE; -} diff --git a/src/windows/identity/ui/configwnd.c b/src/windows/identity/ui/configwnd.c deleted file mode 100644 index cf3cdfdd0..000000000 --- a/src/windows/identity/ui/configwnd.c +++ /dev/null @@ -1,1243 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<khmapp.h> -#include<assert.h> - -static HWND cfgui_hwnd = NULL; - -typedef struct tag_cfgui_wnd_data { - khui_config_node current; - HWND hw_current; - HWND hw_generic_pane; - HBRUSH hbr_white; - HFONT hf_title; - khui_bitmap kbmp_logo; - HIMAGELIST hi_status; - BOOL modified; - int idx_default; - int idx_modified; - int idx_applied; -} cfgui_wnd_data; - -static cfgui_wnd_data * -cfgui_get_wnd_data(HWND hwnd) { - return (cfgui_wnd_data *)(LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); -} - -static void -cfgui_set_wnd_data(HWND hwnd, cfgui_wnd_data * d) { -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) d); -#pragma warning(pop) -} - -static void -cfgui_add_node(cfgui_wnd_data * d, - HWND hwtv, - khui_config_node node, - khui_config_node parent, - BOOL sorted) { - - khui_config_node_reg reg; - khui_config_node c; - wchar_t wbuf[256]; - const wchar_t * short_desc; - TVINSERTSTRUCT s; - HTREEITEM hItem; - - if (node) { - khui_cfg_get_reg(node, &reg); - short_desc = reg.short_desc; - } else { - short_desc = wbuf; - LoadString(khm_hInstance, IDS_CFG_ROOT_NAME, - wbuf, ARRAYLENGTH(wbuf)); - reg.flags = 0; - } - - ZeroMemory(&s, sizeof(s)); - - s.hParent = (node)? - (HTREEITEM) khui_cfg_get_param(parent): - TVI_ROOT; - - s.hInsertAfter = (sorted)? TVI_SORT: TVI_FIRST; - - s.itemex.mask = - TVIF_CHILDREN | - TVIF_PARAM | - TVIF_TEXT | - TVIF_STATE; - - { - khui_config_node n; - - if (KHM_SUCCEEDED(khui_cfg_get_first_child(node, - &n))) { - s.itemex.cChildren = 1; - s.itemex.state = TVIS_EXPANDED; - s.itemex.stateMask = TVIS_EXPANDED; - khui_cfg_release(n); - } else { - s.itemex.cChildren = 0; - s.itemex.state = 0; - s.itemex.stateMask = TVIS_EXPANDED; - } - - s.itemex.state |= INDEXTOSTATEIMAGEMASK(d->idx_default); - s.itemex.stateMask |= TVIS_STATEIMAGEMASK; - } - - s.itemex.lParam = (LPARAM) node; - khui_cfg_hold(node); - - s.itemex.pszText = (LPWSTR) short_desc; - - hItem = TreeView_InsertItem(hwtv, &s); - - khui_cfg_set_param(node, (LPARAM) hItem); - - if (KHM_SUCCEEDED(khui_cfg_get_first_child(node, - &c))) { - do { - cfgui_add_node(d, hwtv, c, node, - !!(reg.flags & KHUI_CNFLAG_SORT_CHILDREN)); - } while (KHM_SUCCEEDED(khui_cfg_get_next_release(&c))); - } -} - -static void -cfgui_initialize_dialog(HWND hwnd) { - cfgui_wnd_data * d; - HWND hwtv; - HWND hwtitle; - HFONT hf; - HDC hdc; - HICON hicon; - - d = cfgui_get_wnd_data(hwnd); - if (d == NULL) - return; - - /* create and fill the image list for the treeview */ - - d->hi_status = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), - ILC_COLOR8 | ILC_MASK, - 4,4); - - hicon = LoadImage(khm_hInstance, MAKEINTRESOURCE(IDI_CFG_DEFAULT), - IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR); - - /* note that we can't use index 0 because that is used to indicate - that there is no state image for the node */ - do { - d->idx_default = ImageList_AddIcon(d->hi_status, hicon); - } while(d->idx_default == 0); - - DestroyIcon(hicon); - - hicon = LoadImage(khm_hInstance, MAKEINTRESOURCE(IDI_CFG_MODIFIED), - IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR); - - d->idx_modified = ImageList_AddIcon(d->hi_status, hicon); - - DestroyIcon(hicon); - - hicon = LoadImage(khm_hInstance, MAKEINTRESOURCE(IDI_CFG_APPLIED), - IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR); - - d->idx_applied = ImageList_AddIcon(d->hi_status, hicon); - - DestroyIcon(hicon); - - /* now for the treeview */ - hwtv = GetDlgItem(hwnd, IDC_CFG_NODELIST); - - TreeView_SetImageList(hwtv, d->hi_status, TVSIL_STATE); - - cfgui_add_node(d, hwtv, NULL, NULL, FALSE); - - hdc = GetDC(hwnd); - hf = CreateFont(-MulDiv(12, - GetDeviceCaps(hdc, LOGPIXELSY), - 72), - 0, /* nWidth */ - 0, /* nEscapement */ - 0, /* nOrientation */ - FW_BOLD, /* fnWeight */ - TRUE, /* fdwItalic */ - FALSE, /* fdwUnderline */ - FALSE, /* fdwStrikeOut */ - DEFAULT_CHARSET, /* fdwCharSet */ - OUT_DEFAULT_PRECIS, /* fdwOutputPrecision */ - CLIP_DEFAULT_PRECIS, /* fdwClipPrecision */ - DEFAULT_QUALITY, /* fdwQuality */ - FF_SWISS | DEFAULT_PITCH, /* pitch&family */ - NULL); /* face */ - ReleaseDC(hwnd, hdc); - - d->hf_title = hf; - - hwtitle = GetDlgItem(hwnd, IDC_CFG_TITLE); - - SendMessage(hwtitle, - WM_SETFONT, - (WPARAM) hf, - (LPARAM) FALSE); -} - -static void -cfgui_free_node(HWND hwtv, HTREEITEM hItem) { - TVITEMEX iex; - HTREEITEM hChItem; - - ZeroMemory(&iex, sizeof(iex)); - - iex.mask = TVIF_PARAM; - iex.hItem = hItem; - - if (TreeView_GetItem(hwtv, &iex)) { - khui_config_node node; - - node = (khui_config_node) iex.lParam; - khui_cfg_release(node); - } - - hChItem = TreeView_GetChild(hwtv, hItem); - while(hChItem) { - cfgui_free_node(hwtv, hChItem); - - hChItem = TreeView_GetNextSibling(hwtv, hChItem); - } -} - -static void -cfgui_uninitialize_dialog(HWND hwnd) { - cfgui_wnd_data * d; - HWND hwtv; - - d = cfgui_get_wnd_data(hwnd); - if (d == NULL) - return; - - hwtv = GetDlgItem(hwnd, IDC_CFG_NODELIST); - - cfgui_free_node(hwtv, TreeView_GetRoot(hwtv)); - - if (d->hf_title) - DeleteObject(d->hf_title); - - if (d->hi_status) - ImageList_Destroy(d->hi_status); -} - -static HWND -cfgui_create_config_node_window(HWND hwnd, khui_config_node node) { - khui_config_node_reg reg; - khm_int32 rv; - HWND hw_new; - - khui_config_node parent; - - if (KHM_SUCCEEDED(khui_cfg_get_parent(node, &parent))) { - HWND hwp; - - hwp = khui_cfg_get_hwnd(parent); - - if (hwp == NULL) - cfgui_create_config_node_window(hwnd, parent); - - khui_cfg_release(parent); - } - - rv = khui_cfg_get_reg(node, &reg); -#ifdef DEBUG - assert(KHM_SUCCEEDED(rv)); -#endif - hw_new = CreateDialogParam(reg.h_module, - reg.dlg_template, - hwnd, - reg.dlg_proc, - (LPARAM) node); -#ifdef DEBUG - assert(hw_new); -#endif - khui_cfg_set_hwnd(node, hw_new); - - return hw_new; -} - -static void -cfgui_activate_node(HWND hwnd, khui_config_node node) { - - cfgui_wnd_data * d; - HTREEITEM hItem; - HWND hw_new; - HWND hwtv; - - d = cfgui_get_wnd_data(hwnd); - if (d == NULL) - return; - - hwtv = GetDlgItem(hwnd, IDC_CFG_NODELIST); - hItem = (HTREEITEM) khui_cfg_get_param(node); - -#ifdef DEBUG - assert(hItem); - assert(hwtv); -#endif - - if (node == NULL) { - hw_new = d->hw_generic_pane; - } else { - - hw_new = khui_cfg_get_hwnd(node); - - if (hw_new == NULL) { - hw_new = cfgui_create_config_node_window(hwnd, node); - } - } - - if (hw_new == d->hw_current) - return; /* nothing to do */ - - { - RECT r_title; - RECT r_pane; - HWND hw; - - if (d->hw_current) - ShowWindow(d->hw_current, SW_HIDE); - - hw = GetDlgItem(hwnd, IDC_CFG_TITLE); -#ifdef DEBUG - assert(hw); -#endif - GetWindowRect(hw, &r_title); - - hw = GetDlgItem(hwnd, IDC_CFG_PANE); -#ifdef DEBUG - assert(hw); -#endif - GetWindowRect(hw, &r_pane); - - OffsetRect(&r_pane, -r_title.left, -r_title.top); - - SetWindowPos(hw_new, - hwtv, - r_pane.left, r_pane.top, - r_pane.right - r_pane.left, - r_pane.bottom - r_pane.top, - SWP_NOOWNERZORDER | - SWP_SHOWWINDOW | - SWP_NOACTIVATE); - } - - if (node == NULL) { - wchar_t wbuf[256]; - - LoadString(khm_hInstance, IDS_CFG_ROOT_TITLE, - wbuf, ARRAYLENGTH(wbuf)); - - SetDlgItemText(hwnd, IDC_CFG_TITLE, wbuf); - } else { - khm_int32 rv; - khui_config_node_reg reg; - - rv = khui_cfg_get_reg(node, &reg); -#ifdef DEBUG - assert(KHM_SUCCEEDED(rv)); -#endif - SetDlgItemText(hwnd, IDC_CFG_TITLE, reg.long_desc); - } - - d->hw_current = hw_new; - d->current = node; - - TreeView_SelectItem(hwtv, hItem); -} - -static BOOL -cfgui_check_mod_state(khui_config_node node) { - khm_int32 flags; - khui_config_node c = NULL; - BOOL rv = FALSE; - - flags = khui_cfg_get_flags(node); - - if (flags & KHUI_CNFLAG_MODIFIED) - return TRUE; - - if (KHM_FAILED(khui_cfg_get_first_child(node, &c))) - return FALSE; - - while(c) { - rv = (rv || cfgui_check_mod_state(c)); - khui_cfg_get_next_release(&c); - } - - return rv; -} - -static void -cfgui_apply_settings(khui_config_node node) { - HWND hwnd; - khui_config_node c; - khm_int32 flags; - - hwnd = khui_cfg_get_hwnd(node); - flags = khui_cfg_get_flags(node); - - if (hwnd && (flags & KHUI_CNFLAG_MODIFIED)) { - SendMessage(hwnd, KHUI_WM_CFG_NOTIFY, - MAKEWPARAM(0, WMCFG_APPLY), - (LPARAM) node); - } - - if (KHM_FAILED(khui_cfg_get_first_child(node, &c))) - return; - - while (c) { - cfgui_apply_settings(c); - khui_cfg_get_next_release(&c); - } -} - -static void -cfgui_remove_item(HWND hwtv, - HTREEITEM hItem) { - khui_config_node node; - HTREEITEM hChild; - TVITEMEX itemex; - - for (hChild = TreeView_GetChild(hwtv, hItem); - hChild; - hChild = TreeView_GetChild(hwtv, hItem)) { - - cfgui_remove_item(hwtv, hChild); - - } - - ZeroMemory(&itemex, sizeof(itemex)); - - itemex.mask = TVIF_PARAM; - itemex.hItem = hItem; - - TreeView_GetChild(hwtv, &itemex); - - node = (khui_config_node) itemex.lParam; - - if (node) { - HWND hw; - hw = khui_cfg_get_hwnd(node); - - if (hw) - DestroyWindow(hw); - - khui_cfg_release(node); - } - - TreeView_DeleteItem(hwtv, hItem); -} - -struct cfgui_child_info { - HTREEITEM hItem; - khui_config_node node; - BOOL checked; -}; - -#define CI_ALLOC_INCR 8 - -static void -cfgui_sync_node(cfgui_wnd_data * d, - HWND hwtv, - khui_config_node c, - HTREEITEM hItem) { - khui_config_node child; - HTREEITEM hChild; - struct cfgui_child_info * childinfo = NULL; - khm_size n_childinfo = 0; - khm_size nc_childinfo = 0; - khm_size i; - - /* first, get the list of children from the treeview control */ - for (hChild = TreeView_GetChild(hwtv, hItem); - hChild; - hChild = TreeView_GetNextSibling(hwtv, hChild)) { - - if (n_childinfo >= nc_childinfo) { - nc_childinfo = UBOUNDSS(n_childinfo + 1, - CI_ALLOC_INCR, CI_ALLOC_INCR); -#ifdef DEBUG - assert(nc_childinfo > n_childinfo); -#endif - childinfo = PREALLOC(childinfo, - sizeof(*childinfo) * nc_childinfo); -#ifdef DEBUG - assert(childinfo); -#endif - } - - ZeroMemory(&childinfo[n_childinfo], - sizeof(childinfo[n_childinfo])); - - childinfo[n_childinfo].hItem = hChild; - childinfo[n_childinfo].checked = FALSE; - n_childinfo++; - } - - /* now, go through the list of actual nodes and make sure they - match up */ - child = NULL; - for (khui_cfg_get_first_child(c, &child); - child; - khui_cfg_get_next_release(&child)) { - - hChild = (HTREEITEM) khui_cfg_get_param(child); - - for (i=0; i < n_childinfo; i++) { - if (childinfo[i].hItem == hChild) - break; - } - - if (i < n_childinfo) { - childinfo[i].checked = TRUE; - } else { - /* add it to the list, so we can create the node in the - tree view control later. */ - if (n_childinfo >= nc_childinfo) { - nc_childinfo = UBOUNDSS(n_childinfo + 1, - CI_ALLOC_INCR, CI_ALLOC_INCR); -#ifdef DEBUG - assert(nc_childinfo > n_childinfo); -#endif - childinfo = PREALLOC(childinfo, - sizeof(*childinfo) * nc_childinfo); -#ifdef DEBUG - assert(childinfo); -#endif - } - - ZeroMemory(&childinfo[n_childinfo], - sizeof(childinfo[n_childinfo])); - - childinfo[n_childinfo].node = child; - khui_cfg_hold(child); - n_childinfo++; - } - } - - /* by this point, the childinfo list contains items of the - following forms: - - 1. childinfo[i].hItem != NULL && childinfo[i].checked == TRUE - - Corresponds to a tree view item that has a matching - configuration node. Nothing to do here. - - 2. childinfo[i].hItem != NULL && childinfo[i].checked == FALSE - - Corresponds to a tree view item that has no matching - configuration node. These should be removed. - - 3. childinfo[i].hItem == NULL && childinfo[i].node != NULL - - Corresponds to a configuration node that has no matching - tree view item. These nodes should be added. - */ - - /* first do the removals */ - for (i=0; i < n_childinfo; i++) { - if (childinfo[i].hItem == NULL) - break; /* nothing more to see from this point - on */ - if (!childinfo[i].checked) { - /* remove! */ - cfgui_remove_item(hwtv, childinfo[i].hItem); - } - } - - /* continue from where the previous loop left off */ - for (; i < n_childinfo; i++) { -#ifdef DEBUG - assert(childinfo[i].hItem == NULL); - assert(childinfo[i].node != NULL); -#endif - - cfgui_add_node(d, hwtv, childinfo[i].node, c, FALSE); - - khui_cfg_release(childinfo[i].node); - childinfo[i].node = NULL; - } - - if (childinfo) - PFREE(childinfo); - - /* finally recurse through to the next level */ - for (hChild = TreeView_GetChild(hwtv, hItem); - hChild; - hChild = TreeView_GetNextSibling(hwtv, hChild)) { - - TVITEMEX itemex; - - ZeroMemory(&itemex, sizeof(itemex)); - - itemex.mask = TVIF_PARAM; - itemex.hItem = hChild; - - TreeView_GetItem(hwtv, &itemex); - - if (itemex.lParam) { - child = (khui_config_node) itemex.lParam; - - cfgui_sync_node(d, hwtv, child, hChild); - } - } -} - -static void -cfgui_sync_node_list(cfgui_wnd_data * d, HWND hwnd) { - HWND hwtv; - HTREEITEM hItem; - - hwtv = GetDlgItem(hwnd, IDC_CFG_NODELIST); - hItem = TreeView_GetRoot(hwtv); - - cfgui_sync_node(d, hwtv, NULL, hItem); -} - -static void -cfgui_update_state(HWND hwnd, - khm_int32 flags, - khui_config_node node) { - cfgui_wnd_data * d; - HWND hwtv; - HTREEITEM hItem; - TVITEMEX itx; - int idx; - - d = cfgui_get_wnd_data(hwnd); - if (d == NULL) - return; - - hwtv = GetDlgItem(hwnd, IDC_CFG_NODELIST); - hItem = (HTREEITEM) khui_cfg_get_param(node); - - ZeroMemory(&itx, sizeof(itx)); - - if (flags & KHUI_CNFLAG_MODIFIED) - idx = d->idx_modified; - else if (flags & KHUI_CNFLAG_APPLIED) - idx = d->idx_applied; - else - idx = d->idx_default; - - itx.hItem = hItem; - itx.mask = TVIF_STATE; - itx.state = INDEXTOSTATEIMAGEMASK(idx); - itx.stateMask = TVIS_STATEIMAGEMASK; - - TreeView_SetItem(hwtv, &itx); - - if(cfgui_check_mod_state(NULL)) { - EnableWindow(GetDlgItem(hwnd, IDAPPLY), TRUE); - } else { - EnableWindow(GetDlgItem(hwnd, IDAPPLY), FALSE); - } -} - - -/* dialog procedure for the generic dialog */ -static INT_PTR CALLBACK -cfgui_dlgproc_generic(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - cfgui_wnd_data * d; - - switch(uMsg) { - case WM_INITDIALOG: - d = (cfgui_wnd_data *) lParam; - cfgui_set_wnd_data(hwnd, d); - return TRUE; - - case WM_CTLCOLORSTATIC: - d = cfgui_get_wnd_data(hwnd); - if (d == NULL) - break; - - return (BOOL)(DWORD_PTR) d->hbr_white; - - case WM_ERASEBKGND: - { - HDC hdc = (HDC) wParam; - RECT r_client; - RECT r_logo; - RECT r_fill; - - d = cfgui_get_wnd_data(hwnd); - if (d == NULL) - break; - - GetClientRect(hwnd, &r_client); - SetRectEmpty(&r_logo); - - r_logo.right = d->kbmp_logo.cx; - r_logo.bottom = d->kbmp_logo.cy; - - OffsetRect(&r_logo, - r_client.right - r_logo.right, - r_client.bottom - r_logo.bottom); - - khui_draw_bitmap(hdc, - r_logo.left, - r_logo.top, - &d->kbmp_logo); - - r_fill.left = 0; - r_fill.top = 0; - r_fill.right = r_logo.left; - r_fill.bottom = r_client.bottom; - FillRect(hdc, &r_fill, d->hbr_white); - - r_fill.left = r_logo.left; - r_fill.right = r_client.right; - r_fill.bottom = r_logo.top; - FillRect(hdc, &r_fill, d->hbr_white); - - SetWindowLongPtr(hwnd, DWLP_MSGRESULT, (LONG) TRUE); - } - return TRUE; - } - - return FALSE; -} - -static INT_PTR CALLBACK -cfgui_dlgproc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - - khui_config_node node; - cfgui_wnd_data * d; - - switch(uMsg) { - case WM_INITDIALOG: - node = (khui_config_node) lParam; - - khui_cfg_clear_params(); - - khui_cfg_set_configui_handle(hwnd); - - d = PMALLOC(sizeof(*d)); - ZeroMemory(d, sizeof(*d)); - - d->hbr_white = CreateSolidBrush(RGB(255,255,255)); - - d->hw_generic_pane = - CreateDialogParam(khm_hInstance, - MAKEINTRESOURCE(IDD_CFG_GENERIC), - hwnd, - cfgui_dlgproc_generic, - (LPARAM) d); - - khui_bitmap_from_hbmp(&d->kbmp_logo, - LoadImage( - khm_hInstance, - MAKEINTRESOURCE(IDB_LOGO_OPAQUE), - IMAGE_BITMAP, - 0, - 0, - LR_DEFAULTCOLOR)); - - cfgui_set_wnd_data(hwnd, d); - - cfgui_initialize_dialog(hwnd); - - cfgui_activate_node(hwnd, node); - - khm_add_dialog(hwnd); - khm_enter_modal(hwnd); - - return TRUE; - - case WM_DESTROY: - cfgui_hwnd = NULL; - - khui_cfg_set_configui_handle(NULL); - - cfgui_uninitialize_dialog(hwnd); - - d = cfgui_get_wnd_data(hwnd); - if (d == NULL) - break; - - khui_delete_bitmap(&d->kbmp_logo); - DeleteObject(d->hbr_white); - - cfgui_set_wnd_data(hwnd, NULL); - - khm_del_dialog(hwnd); - - SetForegroundWindow(khm_hwnd_main); - - PFREE(d); - - return FALSE; - - case WM_NOTIFY: - { - LPNMHDR lpnm; - LPNMTREEVIEW lptv; - LPNMTVGETINFOTIP lpgi; - khui_config_node node; - - lpnm = (LPNMHDR) lParam; - - switch (lpnm->code) { - case TVN_SELCHANGED: - lptv = (LPNMTREEVIEW) lParam; - cfgui_activate_node(hwnd, - (khui_config_node) - lptv->itemNew.lParam); - return TRUE; - - case TVN_GETINFOTIP: - lpgi = (LPNMTVGETINFOTIP) lParam; - node = (khui_config_node) lpgi->lParam; - - if (node) { - khm_int32 flags = 0; - - flags = khui_cfg_get_flags(node); - - if (flags & KHUI_CNFLAG_MODIFIED) { - LoadString(khm_hInstance, IDS_CFG_IT_MOD, - lpgi->pszText, lpgi->cchTextMax); - } else if (flags & KHUI_CNFLAG_APPLIED) { - LoadString(khm_hInstance, IDS_CFG_IT_APP, - lpgi->pszText, lpgi->cchTextMax); - } else { - LoadString(khm_hInstance, IDS_CFG_IT_NONE, - lpgi->pszText, lpgi->cchTextMax); - } - } else { - StringCchCopy(lpgi->pszText, lpgi->cchTextMax, L""); - } - - return TRUE; - } - } - return TRUE; - - case WM_CTLCOLORSTATIC: - { - d = cfgui_get_wnd_data(hwnd); - if (d == NULL) - break; - - return (BOOL)(DWORD_PTR) d->hbr_white; - } - /* implicit break */ - - case WM_COMMAND: - switch(wParam) { - case MAKEWPARAM(IDCANCEL, BN_CLICKED): - khm_leave_modal(); - DestroyWindow(hwnd); - break; - - case MAKEWPARAM(IDAPPLY, BN_CLICKED): - cfgui_apply_settings(NULL); - break; - - case MAKEWPARAM(IDOK, BN_CLICKED): - cfgui_apply_settings(NULL); - khm_leave_modal(); - DestroyWindow(hwnd); - break; - } - return TRUE; - - case KHUI_WM_CFG_NOTIFY: - switch(HIWORD(wParam)) { - case WMCFG_SHOW_NODE: - cfgui_activate_node(hwnd, (khui_config_node) lParam); - break; - - case WMCFG_UPDATE_STATE: - cfgui_update_state(hwnd, LOWORD(wParam), - (khui_config_node) lParam); - break; - - case WMCFG_SYNC_NODE_LIST: - d = cfgui_get_wnd_data(hwnd); - if (d == NULL) - break; - - cfgui_sync_node_list(d, hwnd); - break; - } - - return TRUE; - } - - return FALSE; -} - -static void -cfgui_create_window(khui_config_node node) { -#ifdef DEBUG - assert(cfgui_hwnd == NULL); -#endif - - khm_refresh_config(); - - cfgui_hwnd = CreateDialogParam(khm_hInstance, - MAKEINTRESOURCE(IDD_CFG_MAIN), - khm_hwnd_main, - cfgui_dlgproc, - (LPARAM) node); -#ifdef DEBUG - assert(cfgui_hwnd != NULL); -#endif - ShowWindow(cfgui_hwnd,SW_SHOW); -} - -static void -cfgui_destroy_window(void) { - if (cfgui_hwnd) - DestroyWindow(cfgui_hwnd); - /* cfgui_hwnd will be set to NULL in the dialog proc */ -} - -void -khm_show_config_pane(khui_config_node node) { - if (cfgui_hwnd != NULL) { - SendMessage(cfgui_hwnd, KHUI_WM_CFG_NOTIFY, - MAKEWPARAM(0, WMCFG_SHOW_NODE), - (LPARAM) node); - } else { - cfgui_create_window(node); - } -} - -void khm_refresh_config(void) { - khm_size cb; - khm_size n_idents; - wchar_t * idents = NULL; - wchar_t * t; - khm_int32 rv; - int n_tries = 0; - khui_config_node cfg_ids = NULL; - khui_config_node cfg_r = NULL; - khui_config_node cfg_iter = NULL; - khui_menu_def * omenu; - khm_boolean refresh_menu = FALSE; - - do { - rv = kcdb_identity_enum(KCDB_IDENT_FLAG_CONFIG, - KCDB_IDENT_FLAG_CONFIG, - NULL, - &cb, - &n_idents); - - if (rv != KHM_ERROR_TOO_LONG || - n_idents == 0) - return; - - if (idents) - PFREE(idents); - idents = PMALLOC(cb); -#ifdef DEBUG - assert(idents); -#endif - - rv = kcdb_identity_enum(KCDB_IDENT_FLAG_CONFIG, - KCDB_IDENT_FLAG_CONFIG, - idents, - &cb, - &n_idents); - - n_tries++; - } while(KHM_FAILED(rv) && - n_tries < 5); - - if (KHM_FAILED(rv)) - goto _cleanup; - - if (KHM_FAILED(khui_cfg_open(NULL, - L"KhmIdentities", - &cfg_ids))) - goto _cleanup; - - for(t = idents; t && *t; t = multi_string_next(t)) { - khui_config_node cfg_id = NULL; - - rv = khui_cfg_open(cfg_ids, - t, - &cfg_id); - - if (KHM_FAILED(rv)) { - khui_config_node_reg reg; - wchar_t wshort[KHUI_MAXCCH_SHORT_DESC]; - wchar_t wlong[KHUI_MAXCCH_LONG_DESC]; - wchar_t wfmt[KHUI_MAXCCH_SHORT_DESC]; - - ZeroMemory(&reg, sizeof(reg)); - - reg.name = t; - reg.short_desc = wshort; - reg.long_desc = wlong; - reg.h_module = khm_hInstance; - reg.dlg_template = MAKEINTRESOURCE(IDD_CFG_IDENTITY); - reg.dlg_proc = khm_cfg_identity_proc; - reg.flags = 0; - - LoadString(khm_hInstance, IDS_CFG_IDENTITY_SHORT, - wfmt, ARRAYLENGTH(wfmt)); - StringCbPrintf(wshort, sizeof(wshort), wfmt, t); - - LoadString(khm_hInstance, IDS_CFG_IDENTITY_LONG, - wfmt, ARRAYLENGTH(wfmt)); - StringCbPrintf(wlong, sizeof(wlong), wfmt, t); - - khui_cfg_register(cfg_ids, - &reg); - } else { - khui_cfg_release(cfg_id); - } - } - - for (khui_cfg_get_first_child(cfg_ids, &cfg_iter); - cfg_iter; - khui_cfg_get_next_release(&cfg_iter)) { - - wchar_t cfgname[KCDB_IDENT_MAXCCH_NAME]; - khm_size cb; - khm_handle tident = NULL; - khm_int32 tflags = 0; - - cb = sizeof(cfgname); - khui_cfg_get_name(cfg_iter, cfgname, &cb); - - if (KHM_FAILED(kcdb_identity_create(cfgname, 0, &tident)) || - KHM_FAILED(kcdb_identity_get_flags(tident, &tflags)) || - !(tflags & KCDB_IDENT_FLAG_ACTIVE) || - !(tflags & KCDB_IDENT_FLAG_CONFIG)) { - - /* this configuration node needs to be removed */ - - khui_cfg_remove(cfg_iter); - } - - if (tident) - kcdb_identity_release(tident); - } - - /* Now iterate through the root level configuration nodes and make - sure we have a menu item for each of them. */ - if (KHM_FAILED(khui_cfg_get_first_child(NULL, &cfg_r))) - goto _cleanup; - - omenu = khui_find_menu(KHUI_MENU_OPTIONS); - if (omenu == NULL) - goto _cleanup; - - khui_action_lock(); - - do { - khm_int32 action; - khm_int32 flags; - khui_action * paction; - wchar_t cname[KHUI_MAXCCH_NAME]; - wchar_t wshort[KHUI_MAXCCH_SHORT_DESC]; - khm_size cb; - khm_handle sub; - khui_config_node_reg reg; - - flags = khui_cfg_get_flags(cfg_r); - if (flags & KHUI_CNFLAG_SYSTEM) - goto _next_cfg; - - cb = sizeof(cname); - if (KHM_FAILED(khui_cfg_get_name(cfg_r, cname, &cb))) { -#ifdef DEBUG - assert(FALSE); -#endif - goto _next_cfg; - } - - paction = khui_find_named_action(cname); - - if (!paction) { - khui_cfg_get_reg(cfg_r, &reg); - - kmq_create_hwnd_subscription(khm_hwnd_main, &sub); - - StringCbCopy(wshort, sizeof(wshort), reg.short_desc); - StringCbCat(wshort, sizeof(wshort), L" ..."); - - action = khui_action_create(cname, - wshort, - reg.long_desc, - (void *) CFGACTION_MAGIC, - KHUI_ACTIONTYPE_TRIGGER, - sub); - - if (action == 0) { -#ifdef DEBUG - assert(FALSE); -#endif - goto _next_cfg; - } - - khui_menu_insert_action(omenu, (khm_size) -1, action, 0); - - refresh_menu = TRUE; - } - - _next_cfg: - if (KHM_FAILED(khui_cfg_get_next_release(&cfg_r))) - break; - } while(cfg_r); - - khui_action_unlock(); - - if (refresh_menu) { - khui_refresh_actions(); - } - - _cleanup: - if (cfg_ids) - khui_cfg_release(cfg_ids); - - if (cfg_r) - khui_cfg_release(cfg_r); - - if (idents) - PFREE(idents); -} - -void khm_init_config(void) { - wchar_t wshort[KHUI_MAXCCH_SHORT_DESC]; - wchar_t wlong[KHUI_MAXCCH_LONG_DESC]; - khui_config_node_reg reg; - khui_config_node node; - - reg.short_desc = wshort; - reg.long_desc = wlong; - reg.h_module = khm_hInstance; - reg.flags = KHUI_CNFLAG_SYSTEM; - - reg.name = L"KhmGeneral"; - reg.dlg_template = MAKEINTRESOURCE(IDD_CFG_GENERAL); - reg.dlg_proc = khm_cfg_general_proc; - LoadString(khm_hInstance, IDS_CFG_GENERAL_SHORT, - wshort, ARRAYLENGTH(wshort)); - LoadString(khm_hInstance, IDS_CFG_GENERAL_LONG, - wlong, ARRAYLENGTH(wlong)); - - khui_cfg_register(NULL, &reg); - - reg.name = L"KhmAppear"; - reg.dlg_template = MAKEINTRESOURCE(IDD_CFG_APPEAR); - reg.dlg_proc = khm_cfg_appearance_proc; - LoadString(khm_hInstance, IDS_CFG_APPEAR_SHORT, - wshort, ARRAYLENGTH(wshort)); - LoadString(khm_hInstance, IDS_CFG_APPEAR_LONG, - wlong, ARRAYLENGTH(wlong)); - - khui_cfg_register(NULL, &reg); - - reg.name = L"KhmIdentities"; - reg.dlg_template = MAKEINTRESOURCE(IDD_CFG_IDENTITIES); - reg.dlg_proc = khm_cfg_identities_proc; - LoadString(khm_hInstance, IDS_CFG_IDENTITIES_SHORT, - wshort, ARRAYLENGTH(wshort)); - LoadString(khm_hInstance, IDS_CFG_IDENTITIES_LONG, - wlong, ARRAYLENGTH(wlong)); - - khui_cfg_register(NULL, &reg); - - node = NULL; - khui_cfg_open(NULL, L"KhmIdentities", &node); -#ifdef DEBUG - assert(node); -#endif - - reg.name = L"KhmIdentitiesTab"; - reg.dlg_template = MAKEINTRESOURCE(IDD_CFG_IDS_TAB); - reg.dlg_proc = khm_cfg_ids_tab_proc; - LoadString(khm_hInstance, IDS_CFG_IDS_TAB_SHORT, - wshort, ARRAYLENGTH(wshort)); - LoadString(khm_hInstance, IDS_CFG_IDS_TAB_LONG, - wlong, ARRAYLENGTH(wlong)); - reg.flags = KHUI_CNFLAG_SUBPANEL | KHUI_CNFLAG_SYSTEM; - - khui_cfg_register(node, &reg); - - reg.name = L"KhmIdentitiesTabPlural"; - reg.dlg_template = MAKEINTRESOURCE(IDD_CFG_ID_TAB); - reg.dlg_proc = khm_cfg_id_tab_proc; - LoadString(khm_hInstance, IDS_CFG_ID_TAB_SHORT, - wshort, ARRAYLENGTH(wshort)); - LoadString(khm_hInstance, IDS_CFG_ID_TAB_LONG, - wlong, ARRAYLENGTH(wlong)); - reg.flags = KHUI_CNFLAG_PLURAL | KHUI_CNFLAG_SUBPANEL | KHUI_CNFLAG_SYSTEM; - - khui_cfg_register(node, &reg); - - reg.flags = KHUI_CNFLAG_SYSTEM; - khui_cfg_release(node); - - reg.name = L"KhmNotifications"; - reg.dlg_template = MAKEINTRESOURCE(IDD_CFG_NOTIF); - reg.dlg_proc = khm_cfg_notifications_proc; - LoadString(khm_hInstance, IDS_CFG_NOTIF_SHORT, - wshort, ARRAYLENGTH(wshort)); - LoadString(khm_hInstance, IDS_CFG_NOTIF_LONG, - wlong, ARRAYLENGTH(wlong)); - - khui_cfg_register(NULL, &reg); - - reg.name = L"KhmPlugins"; - reg.dlg_template = MAKEINTRESOURCE(IDD_CFG_PLUGINS); - reg.dlg_proc = khm_cfg_plugins_proc; - LoadString(khm_hInstance, IDS_CFG_PLUGINS_SHORT, - wshort, ARRAYLENGTH(wshort)); - LoadString(khm_hInstance, IDS_CFG_PLUGINS_LONG, - wlong, ARRAYLENGTH(wlong)); - - khui_cfg_register(NULL, &reg); -} - -void khm_exit_config(void) { -} diff --git a/src/windows/identity/ui/configwnd.h b/src/windows/identity/ui/configwnd.h deleted file mode 100644 index c1bacb21c..000000000 --- a/src/windows/identity/ui/configwnd.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_CONFIGWND_H -#define __KHIMAIRA_CONFIGWND_H - -#define CFGACTION_MAGIC 0x38f8 - -void -khm_show_config_pane(khui_config_node node); - -void khm_init_config(void); -void khm_exit_config(void); - -void khm_refresh_config(void); - -/* window procedures for other configuration windows */ -INT_PTR CALLBACK -khm_cfg_general_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); - -INT_PTR CALLBACK -khm_cfg_identities_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); - -INT_PTR CALLBACK -khm_cfg_identity_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); - -INT_PTR CALLBACK -khm_cfg_id_tab_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); - -INT_PTR CALLBACK -khm_cfg_ids_tab_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); - -INT_PTR CALLBACK -khm_cfg_notifications_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); - -INT_PTR CALLBACK -khm_cfg_plugins_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); - -INT_PTR CALLBACK -khm_cfg_appearance_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); -#endif diff --git a/src/windows/identity/ui/credfuncs.c b/src/windows/identity/ui/credfuncs.c deleted file mode 100644 index af0386313..000000000 --- a/src/windows/identity/ui/credfuncs.c +++ /dev/null @@ -1,1415 +0,0 @@ -/* - * 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 - * 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<khmapp.h> -#include<assert.h> - -static BOOL in_dialog = FALSE; -static CRITICAL_SECTION cs_dialog; -static HANDLE in_dialog_evt = NULL; -static LONG init_dialog = 0; -static khm_int32 dialog_result = 0; -static wchar_t dialog_identity[KCDB_IDENT_MAXCCH_NAME]; -static khui_new_creds * dialog_nc = NULL; - -static void -dialog_sync_init(void) { - if (InterlockedIncrement(&init_dialog) == 1) { -#ifdef DEBUG - assert(in_dialog_evt == NULL); - assert(in_dialog == FALSE); -#endif - - InitializeCriticalSection(&cs_dialog); - - in_dialog_evt = CreateEvent(NULL, - TRUE, - TRUE, - L"DialogCompletionEvent"); - } else { - InterlockedDecrement(&init_dialog); - if (in_dialog_evt == NULL) { - Sleep(100); - } - } -} - -BOOL -khm_cred_begin_dialog(void) { - BOOL rv; - - dialog_sync_init(); - - EnterCriticalSection(&cs_dialog); - - if (in_dialog) { - rv = FALSE; - - /* if a dialog is being displayed and we got a another request - to show one, we bring the existing one to the - foreground. */ - if (dialog_nc && dialog_nc->hwnd) { - khm_int32 t = 0; - - if (KHM_SUCCEEDED(khc_read_int32(NULL, - L"CredWindow\\Windows\\NewCred\\ForceToTop", - &t)) && - t != 0) { - - khm_activate_main_window(); - - SetWindowPos(dialog_nc->hwnd, HWND_TOP, 0, 0, 0, 0, - (SWP_NOMOVE | SWP_NOSIZE)); - } - } - - } else { - rv = TRUE; - in_dialog = TRUE; - ResetEvent(in_dialog_evt); - } - - LeaveCriticalSection(&cs_dialog); - return rv; -} - -void -khm_cred_end_dialog(khui_new_creds * nc) { - dialog_sync_init(); - - EnterCriticalSection(&cs_dialog); - if (in_dialog) { - in_dialog = FALSE; - SetEvent(in_dialog_evt); - } - dialog_result = nc->result; -#ifdef DEBUG - assert(dialog_nc == nc); -#endif - dialog_nc = NULL; - if (nc->subtype == KMSG_CRED_NEW_CREDS && - nc->n_identities > 0 && - nc->identities[0]) { - khm_size cb; - - cb = sizeof(dialog_identity); - if (KHM_FAILED(kcdb_identity_get_name(nc->identities[0], - dialog_identity, - &cb))) - dialog_identity[0] = 0; - } else { - dialog_identity[0] = 0; - } - LeaveCriticalSection(&cs_dialog); -} - -BOOL -khm_cred_is_in_dialog(void) { - BOOL rv; - - dialog_sync_init(); - - EnterCriticalSection(&cs_dialog); - rv = in_dialog; - LeaveCriticalSection(&cs_dialog); - - return rv; -} - -khm_int32 -khm_cred_wait_for_dialog(DWORD timeout, khm_int32 * result, - wchar_t * ident, khm_size cb_ident) { - khm_int32 rv; - - dialog_sync_init(); - - EnterCriticalSection(&cs_dialog); - if (!in_dialog) - rv = KHM_ERROR_NOT_FOUND; - else { - DWORD dw; - - do { - LeaveCriticalSection(&cs_dialog); - - dw = WaitForSingleObject(in_dialog_evt, timeout); - - EnterCriticalSection(&cs_dialog); - - if (!in_dialog) { - rv = KHM_ERROR_SUCCESS; - if (result) { - *result = dialog_result; - } - if (ident) { - StringCbCopy(ident, cb_ident, dialog_identity); - } - break; - } else if(dw == WAIT_TIMEOUT) { - rv = KHM_ERROR_TIMEOUT; - break; - } - } while(TRUE); - } - LeaveCriticalSection(&cs_dialog); - - return rv; -} - -/* Completion handler for KMSG_CRED messages. We control the overall - logic of credentials acquisition and other operations here. Once a - credentials operation is triggered, each successive message - completion notification will be used to dispatch the messages for - the next step in processing the operation. */ -void KHMAPI -kmsg_cred_completion(kmq_message *m) -{ - khui_new_creds * nc; - -#ifdef DEBUG - assert(m->type == KMSG_CRED); -#else - if(m->type != KMSG_CRED) - return; /* huh? */ -#endif - - switch(m->subtype) { - case KMSG_CRED_PASSWORD: - /* fallthrough */ - case KMSG_CRED_NEW_CREDS: - /* Cred types have attached themselves. Trigger the next - phase. */ - kmq_post_message(KMSG_CRED, KMSG_CRED_DIALOG_SETUP, 0, - m->vparam); - break; - - case KMSG_CRED_RENEW_CREDS: - nc = (khui_new_creds *) m->vparam; - - /* khm_cred_dispatch_process_message() deals with the case - where there are no credential types that wants to - participate in this operation. */ - khm_cred_dispatch_process_message(nc); - break; - - case KMSG_CRED_DIALOG_SETUP: - nc = (khui_new_creds *) m->vparam; - - khm_prep_newcredwnd(nc->hwnd); - - /* all the controls have been created. Now initialize them */ - if (nc->n_types > 0) { - kmq_post_subs_msg(nc->type_subs, - nc->n_types, - KMSG_CRED, - KMSG_CRED_DIALOG_PRESTART, - 0, - m->vparam); - } else { - PostMessage(nc->hwnd, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_DIALOG_PROCESS_COMPLETE), 0); - } - break; - - case KMSG_CRED_DIALOG_PRESTART: - /* all prestart stuff is done. Now to activate the dialog */ - nc = (khui_new_creds *) m->vparam; - khm_show_newcredwnd(nc->hwnd); - - kmq_post_subs_msg(nc->type_subs, - nc->n_types, - KMSG_CRED, - KMSG_CRED_DIALOG_START, - 0, - m->vparam); - /* at this point, the dialog window takes over. We let it run - the show until KMSG_CRED_DIALOG_END is posted by the dialog - procedure. */ - break; - - case KMSG_CRED_PROCESS: - /* a wave of these messages have completed. We should check - if there's more */ - nc = (khui_new_creds *) m->vparam; - - /* if we are done processing all the plug-ins, then check if - there were any errors reported. Otherwise we dispatch - another set of messages. */ - if(!khm_cred_dispatch_process_level(nc)) { - - if(kherr_is_error()) { - khui_alert * alert; - kherr_event * evt; - kherr_context * ctx; - wchar_t ws_tfmt[512]; - wchar_t w_idname[KCDB_IDENT_MAXCCH_NAME]; - wchar_t ws_title[ARRAYLENGTH(ws_tfmt) + KCDB_IDENT_MAXCCH_NAME]; - khm_size cb; - - /* For renewals, we suppress the error message for the - following case: - - - The renewal was for an identity - - - There are no identity credentials for the - identity (no credentials that have the same type - as the identity provider). */ - - if (nc->subtype == KMSG_CRED_RENEW_CREDS && - nc->ctx.scope == KHUI_SCOPE_IDENT && - nc->ctx.identity != NULL) { - khm_handle tcs = NULL; /* credential set */ - khm_size count = 0; - khm_int32 id_ctype = KCDB_CREDTYPE_INVALID; - khm_int32 delta = 0; - - kcdb_identity_get_type(&id_ctype); - kcdb_credset_create(&tcs); - kcdb_credset_collect(tcs, NULL, - nc->ctx.identity, - id_ctype, - &delta); - kcdb_credset_get_size(tcs, &count); - kcdb_credset_delete(tcs); - - if (count == 0) { - goto done_with_op; - } - } - - ctx = kherr_peek_context(); - evt = kherr_get_err_event(ctx); - kherr_evaluate_event(evt); - - khui_alert_create_empty(&alert); - - if (nc->subtype == KMSG_CRED_NEW_CREDS) { - - khui_alert_set_type(alert, KHUI_ALERTTYPE_ACQUIREFAIL); - - cb = sizeof(w_idname); - if (nc->n_identities == 0 || - KHM_FAILED(kcdb_identity_get_name(nc->identities[0], - w_idname, &cb))) { - /* an identity could not be determined */ - LoadString(khm_hInstance, IDS_NC_FAILED_TITLE, - ws_title, ARRAYLENGTH(ws_title)); - } else { - LoadString(khm_hInstance, IDS_NC_FAILED_TITLE_I, - ws_tfmt, ARRAYLENGTH(ws_tfmt)); - StringCbPrintf(ws_title, sizeof(ws_title), - ws_tfmt, w_idname); - khui_alert_set_ctx(alert, - KHUI_SCOPE_IDENT, - nc->identities[0], - KCDB_CREDTYPE_INVALID, - NULL); - } - - } else if (nc->subtype == KMSG_CRED_PASSWORD) { - - khui_alert_set_type(alert, KHUI_ALERTTYPE_CHPW); - - cb = sizeof(w_idname); - if (nc->n_identities == 0 || - KHM_FAILED(kcdb_identity_get_name(nc->identities[0], - w_idname, &cb))) { - LoadString(khm_hInstance, IDS_NC_PWD_FAILED_TITLE, - ws_title, ARRAYLENGTH(ws_title)); - } else { - LoadString(khm_hInstance, IDS_NC_PWD_FAILED_TITLE_I, - ws_tfmt, ARRAYLENGTH(ws_tfmt)); - StringCbPrintf(ws_title, sizeof(ws_title), - ws_tfmt, w_idname); - khui_alert_set_ctx(alert, - KHUI_SCOPE_IDENT, - nc->identities[0], - KCDB_CREDTYPE_INVALID, - NULL); - } - - } else if (nc->subtype == KMSG_CRED_RENEW_CREDS) { - - khui_alert_set_type(alert, KHUI_ALERTTYPE_RENEWFAIL); - - cb = sizeof(w_idname); - if (nc->ctx.identity == NULL || - KHM_FAILED(kcdb_identity_get_name(nc->ctx.identity, - w_idname, &cb))) { - LoadString(khm_hInstance, IDS_NC_REN_FAILED_TITLE, - ws_title, ARRAYLENGTH(ws_title)); - } else { - LoadString(khm_hInstance, IDS_NC_REN_FAILED_TITLE_I, - ws_tfmt, ARRAYLENGTH(ws_tfmt)); - StringCbPrintf(ws_title, sizeof(ws_title), - ws_tfmt, w_idname); - khui_alert_set_ctx(alert, - KHUI_SCOPE_IDENT, - nc->ctx.identity, - KCDB_CREDTYPE_INVALID, - NULL); - } - - } else { -#ifdef DEBUG - assert(FALSE); -#endif - } - - khui_alert_set_title(alert, ws_title); - khui_alert_set_severity(alert, evt->severity); - - if(!evt->long_desc) - khui_alert_set_message(alert, evt->short_desc); - else - khui_alert_set_message(alert, evt->long_desc); - - if(evt->suggestion) - khui_alert_set_suggestion(alert, evt->suggestion); - - if (nc->subtype == KMSG_CRED_RENEW_CREDS && - nc->ctx.identity != NULL) { - - khm_int32 n_cmd; - - n_cmd = khm_get_identity_new_creds_action(nc->ctx.identity); - - if (n_cmd != 0) { - khui_alert_add_command(alert, n_cmd); - khui_alert_add_command(alert, KHUI_PACTION_CLOSE); - - khui_alert_set_flags(alert, KHUI_ALERT_FLAG_DISPATCH_CMD, - KHUI_ALERT_FLAG_DISPATCH_CMD); - } - } - - khui_alert_show(alert); - khui_alert_release(alert); - - kherr_release_context(ctx); - - kherr_clear_error(); - } - - done_with_op: - - if (nc->subtype == KMSG_CRED_RENEW_CREDS) { - kmq_post_message(KMSG_CRED, KMSG_CRED_END, 0, - m->vparam); - } else { - PostMessage(nc->hwnd, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_DIALOG_PROCESS_COMPLETE), - 0); - } - } - break; - - case KMSG_CRED_END: - /* all is done. */ - { - khui_new_creds * nc; - khm_boolean continue_cmdline = TRUE; - - nc = (khui_new_creds *) m->vparam; - - if (nc->subtype == KMSG_CRED_NEW_CREDS || - nc->subtype == KMSG_CRED_PASSWORD) { - - khm_cred_end_dialog(nc); - - } else if (nc->subtype == KMSG_CRED_RENEW_CREDS) { - - /* if this is a renewal that was triggered while we - were processing the commandline, then we need to - update the pending renewal count. */ - - if (khm_startup.processing) { - LONG renewals; - renewals = InterlockedDecrement(&khm_startup.pending_renewals); - - if (renewals != 0) { - continue_cmdline = FALSE; - } - } - } - - khui_cw_destroy_cred_blob(nc); - - kmq_post_message(KMSG_CRED, KMSG_CRED_REFRESH, 0, 0); - - if (continue_cmdline) - kmq_post_message(KMSG_ACT, KMSG_ACT_CONTINUE_CMDLINE, 0, 0); - } - break; - - /* property sheet stuff */ - - case KMSG_CRED_PP_BEGIN: - /* all the pages should have been added by now. Just send out - the precreate message */ - kmq_post_message(KMSG_CRED, KMSG_CRED_PP_PRECREATE, 0, - m->vparam); - break; - - case KMSG_CRED_PP_END: - kmq_post_message(KMSG_CRED, KMSG_CRED_PP_DESTROY, 0, - m->vparam); - break; - - case KMSG_CRED_DESTROY_CREDS: -#ifdef DEBUG - assert(m->vparam != NULL); -#endif - khui_context_release((khui_action_context *) m->vparam); - PFREE(m->vparam); - - kmq_post_message(KMSG_CRED, KMSG_CRED_REFRESH, 0, 0); - - kmq_post_message(KMSG_ACT, KMSG_ACT_CONTINUE_CMDLINE, 0, 0); - break; - - case KMSG_CRED_IMPORT: - { - khm_boolean continue_cmdline = FALSE; - LONG pending_renewals; - - /* once an import operation ends, we have to trigger a - renewal so that other plug-ins that didn't participate - in the import operation can have a chance at getting - the necessary credentials. - - If we are in the middle of processing the commandline, - we have to be a little bit careful. We can't issue a - commandline conituation message right now because the - import action is still ongoing (since the renewals are - part of the action). Once the renewals have completed, - the completion handler will automatically issue a - commandline continuation message. However, if there - were no identities to renew, then we have to issue the - message ourselves. - */ - - InterlockedIncrement(&khm_startup.pending_renewals); - - khm_cred_renew_all_identities(); - - pending_renewals = InterlockedDecrement(&khm_startup.pending_renewals); - - if (pending_renewals == 0 && khm_startup.processing) - kmq_post_message(KMSG_ACT, KMSG_ACT_CONTINUE_CMDLINE, 0, 0); - } - break; - - case KMSG_CRED_REFRESH: - kcdb_identity_refresh_all(); - break; - } -} - -void khm_cred_import(void) -{ - _begin_task(KHERR_CF_TRANSITIVE); - _report_sr0(KHERR_NONE, IDS_CTX_IMPORT); - _describe(); - - kmq_post_message(KMSG_CRED, KMSG_CRED_IMPORT, 0, 0); - - _end_task(); -} - -void khm_cred_set_default(void) -{ - khui_action_context ctx; - khm_int32 rv; - - khui_context_get(&ctx); - - if (ctx.identity) { - rv = kcdb_identity_set_default(ctx.identity); - } - - khui_context_release(&ctx); -} - -void khm_cred_set_default_identity(khm_handle identity) -{ - kcdb_identity_set_default(identity); -} - -void khm_cred_destroy_creds(khm_boolean sync, khm_boolean quiet) -{ - khui_action_context * pctx; - - pctx = PMALLOC(sizeof(*pctx)); -#ifdef DEBUG - assert(pctx); -#endif - - khui_context_get(pctx); - - if(pctx->scope == KHUI_SCOPE_NONE && !quiet) { - /* this really shouldn't be necessary once we start enabling - and disbling actions based on context */ - wchar_t title[256]; - wchar_t message[256]; - - LoadString(khm_hInstance, - IDS_ALERT_NOSEL_TITLE, - title, - ARRAYLENGTH(title)); - - LoadString(khm_hInstance, - IDS_ALERT_NOSEL, - message, - ARRAYLENGTH(message)); - - khui_alert_show_simple(title, - message, - KHERR_WARNING); - - khui_context_release(pctx); - PFREE(pctx); - - return; - } - - _begin_task(KHERR_CF_TRANSITIVE); - _report_sr0(KHERR_NONE, IDS_CTX_DESTROY_CREDS); - _describe(); - - if (sync) - kmq_send_message(KMSG_CRED, - KMSG_CRED_DESTROY_CREDS, - 0, - (void *) pctx); - else - kmq_post_message(KMSG_CRED, - KMSG_CRED_DESTROY_CREDS, - 0, - (void *) pctx); - - _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_all_identities(void) -{ - khm_size count; - khm_size cb = 0; - khm_size n_idents = 0; - khm_int32 rv; - wchar_t * ident_names = NULL; - wchar_t * this_ident; - - kcdb_credset_get_size(NULL, &count); - - /* if there are no credentials, we just skip over the renew - action. */ - - if (count == 0) - return; - - ident_names = NULL; - - while (TRUE) { - if (ident_names) { - PFREE(ident_names); - ident_names = NULL; - } - - cb = 0; - rv = kcdb_identity_enum(KCDB_IDENT_FLAG_EMPTY, 0, - NULL, - &cb, &n_idents); - - if (n_idents == 0 || rv != KHM_ERROR_TOO_LONG || - cb == 0) - break; - - ident_names = PMALLOC(cb); - ident_names[0] = L'\0'; - - rv = kcdb_identity_enum(KCDB_IDENT_FLAG_EMPTY, 0, - ident_names, - &cb, &n_idents); - - if (KHM_SUCCEEDED(rv)) - break; - } - - if (ident_names) { - for (this_ident = ident_names; - this_ident && *this_ident; - this_ident = multi_string_next(this_ident)) { - khm_handle ident; - - if (KHM_FAILED(kcdb_identity_create(this_ident, 0, - &ident))) - continue; - - khm_cred_renew_identity(ident); - - kcdb_identity_release(ident); - } - - PFREE(ident_names); - ident_names = NULL; - } -} - -void khm_cred_renew_identity(khm_handle identity) -{ - khui_new_creds * c; - - khui_cw_create_cred_blob(&c); - - c->subtype = KMSG_CRED_RENEW_CREDS; - c->result = KHUI_NC_RESULT_PROCESS; - khui_context_create(&c->ctx, - KHUI_SCOPE_IDENT, - identity, - KCDB_CREDTYPE_INVALID, - NULL); - - _begin_task(KHERR_CF_TRANSITIVE); - _report_sr0(KHERR_NONE, IDS_CTX_RENEW_CREDS); - _describe(); - - /* if we are calling this while processing startup actions, we - need to keep track of how many we have issued. */ - if (khm_startup.processing) { - InterlockedIncrement(&khm_startup.pending_renewals); - } - - kmq_post_message(KMSG_CRED, KMSG_CRED_RENEW_CREDS, 0, (void *) c); - - _end_task(); -} - -void khm_cred_renew_cred(khm_handle cred) -{ - khui_new_creds * c; - - khui_cw_create_cred_blob(&c); - - c->subtype = KMSG_CRED_RENEW_CREDS; - c->result = KHUI_NC_RESULT_PROCESS; - khui_context_create(&c->ctx, - KHUI_SCOPE_CRED, - NULL, - KCDB_CREDTYPE_INVALID, - cred); - - _begin_task(KHERR_CF_TRANSITIVE); - _report_sr0(KHERR_NONE, IDS_CTX_RENEW_CREDS); - _describe(); - - /* if we are calling this while processing startup actions, we - need to keep track of how many we have issued. */ - if (khm_startup.processing) { - InterlockedIncrement(&khm_startup.pending_renewals); - } - - kmq_post_message(KMSG_CRED, KMSG_CRED_RENEW_CREDS, 0, (void *) c); - - _end_task(); -} - -void khm_cred_renew_creds(void) -{ - khui_new_creds * c; - - khui_cw_create_cred_blob(&c); - c->subtype = KMSG_CRED_RENEW_CREDS; - c->result = KHUI_NC_RESULT_PROCESS; - khui_context_get(&c->ctx); - - _begin_task(KHERR_CF_TRANSITIVE); - _report_sr0(KHERR_NONE, IDS_CTX_RENEW_CREDS); - _describe(); - - /* if we are calling this while processing startup actions, we - need to keep track of how many we have issued. */ - if (khm_startup.processing) { - InterlockedIncrement(&khm_startup.pending_renewals); - } - - kmq_post_message(KMSG_CRED, KMSG_CRED_RENEW_CREDS, 0, (void *) c); - - _end_task(); -} - -void khm_cred_change_password(wchar_t * title) -{ - khui_new_creds * nc; - LPNETID_DLGINFO pdlginfo; - khm_size cb; - - if (!khm_cred_begin_dialog()) - return; - - khui_cw_create_cred_blob(&nc); - nc->subtype = KMSG_CRED_PASSWORD; - dialog_nc = nc; - - khui_context_get(&nc->ctx); - - kcdb_identpro_get_ui_cb((void *) &nc->ident_cb); - - assert(nc->ident_cb); - - if (title) { - - if (SUCCEEDED(StringCbLength(title, KHUI_MAXCB_TITLE, &cb))) { - cb += sizeof(wchar_t); - - nc->window_title = PMALLOC(cb); -#ifdef DEBUG - assert(nc->window_title); -#endif - StringCbCopy(nc->window_title, cb, title); - } - } else if (nc->ctx.cb_vparam == sizeof(NETID_DLGINFO) && - (pdlginfo = nc->ctx.vparam) && - pdlginfo->size == NETID_DLGINFO_V1_SZ && - pdlginfo->in.title[0] && - SUCCEEDED(StringCchLength(pdlginfo->in.title, - NETID_TITLE_SZ, - &cb))) { - - cb = (cb + 1) * sizeof(wchar_t); - nc->window_title = PMALLOC(cb); -#ifdef DEBUG - assert(nc->window_title); -#endif - StringCbCopy(nc->window_title, cb, pdlginfo->in.title); - } - - khm_create_newcredwnd(khm_hwnd_main, nc); - - if (nc->hwnd != NULL) { - _begin_task(KHERR_CF_TRANSITIVE); - _report_sr0(KHERR_NONE, IDS_CTX_PASSWORD); - _describe(); - - kmq_post_message(KMSG_CRED, KMSG_CRED_PASSWORD, 0, - (void *) nc); - - _end_task(); - } else { - khui_cw_destroy_cred_blob(nc); - } -} - -void -khm_cred_obtain_new_creds_for_ident(khm_handle ident, wchar_t * title) -{ - khui_action_context ctx; - - if (ident == NULL) - khm_cred_obtain_new_creds(title); - - khui_context_get(&ctx); - - khui_context_set(KHUI_SCOPE_IDENT, - ident, - KCDB_CREDTYPE_INVALID, - NULL, - NULL, - 0, - NULL); - - khm_cred_obtain_new_creds(title); - - khui_context_set_indirect(&ctx); - - khui_context_release(&ctx); -} - -void khm_cred_obtain_new_creds(wchar_t * title) -{ - khui_new_creds * nc; - LPNETID_DLGINFO pdlginfo; - khm_size cb; - - if (!khm_cred_begin_dialog()) - return; - - khui_cw_create_cred_blob(&nc); - nc->subtype = KMSG_CRED_NEW_CREDS; - dialog_nc = nc; - - khui_context_get(&nc->ctx); - - kcdb_identpro_get_ui_cb((void *) &nc->ident_cb); - - if (nc->ident_cb == NULL) { - wchar_t title[256]; - wchar_t msg[512]; - wchar_t suggestion[512]; - khui_alert * a; - - LoadString(khm_hInstance, IDS_ERR_TITLE_NO_IDENTPRO, - title, ARRAYLENGTH(title)); - LoadString(khm_hInstance, IDS_ERR_MSG_NO_IDENTPRO, - msg, ARRAYLENGTH(msg)); - LoadString(khm_hInstance, IDS_ERR_SUGG_NO_IDENTPRO, - suggestion, ARRAYLENGTH(suggestion)); - - khui_alert_create_simple(title, - msg, - KHERR_ERROR, - &a); - khui_alert_set_suggestion(a, suggestion); - - khui_alert_show(a); - - khui_alert_release(a); - - khui_context_release(&nc->ctx); - nc->result = KHUI_NC_RESULT_CANCEL; - khm_cred_end_dialog(nc); - khui_cw_destroy_cred_blob(nc); - return; - } - - if (title) { - if (SUCCEEDED(StringCbLength(title, KHUI_MAXCB_TITLE, &cb))) { - cb += sizeof(wchar_t); - - nc->window_title = PMALLOC(cb); -#ifdef DEBUG - assert(nc->window_title); -#endif - StringCbCopy(nc->window_title, cb, title); - } - } else if (nc->ctx.cb_vparam == sizeof(NETID_DLGINFO) && - (pdlginfo = nc->ctx.vparam) && - pdlginfo->size == NETID_DLGINFO_V1_SZ && - pdlginfo->in.title[0] && - SUCCEEDED(StringCchLength(pdlginfo->in.title, - NETID_TITLE_SZ, - &cb))) { - - cb = (cb + 1) * sizeof(wchar_t); - nc->window_title = PMALLOC(cb); -#ifdef DEBUG - assert(nc->window_title); -#endif - StringCbCopy(nc->window_title, cb, pdlginfo->in.title); - } - - khm_create_newcredwnd(khm_hwnd_main, nc); - - if (nc->hwnd != NULL) { - _begin_task(KHERR_CF_TRANSITIVE); - _report_sr0(KHERR_NONE, IDS_CTX_NEW_CREDS); - _describe(); - - kmq_post_message(KMSG_CRED, KMSG_CRED_NEW_CREDS, 0, - (void *) nc); - - _end_task(); - } else { - khui_context_release(&nc->ctx); - nc->result = KHUI_NC_RESULT_CANCEL; - khm_cred_end_dialog(nc); - khui_cw_destroy_cred_blob(nc); - } -} - -/* this is called by khm_cred_dispatch_process_message and the - kmsg_cred_completion to initiate and continue checked broadcasts of - KMSG_CRED_DIALOG_PROCESS messages. - - Returns TRUE if more KMSG_CRED_DIALOG_PROCESS messages were - posted. */ -BOOL khm_cred_dispatch_process_level(khui_new_creds *nc) -{ - khm_size i,j; - khm_handle subs[KHUI_MAX_NCTYPES]; - int n_subs = 0; - BOOL cont = FALSE; - khui_new_creds_by_type *t, *d; - - /* at each level, we dispatch a wave of notifications to plug-ins - who's dependencies are all satisfied */ - EnterCriticalSection(&nc->cs); - - /* if any types have already completed, we mark them are processed - and skip them */ - for (i=0; i < nc->n_types; i++) { - t = nc->types[i]; - if(t->flags & KHUI_NC_RESPONSE_COMPLETED) - t->flags |= KHUI_NCT_FLAG_PROCESSED; - } - - for(i=0; i<nc->n_types; i++) { - t = nc->types[i]; - - if((t->flags & KHUI_NCT_FLAG_PROCESSED) || - (t->flags & KHUI_NC_RESPONSE_COMPLETED)) - continue; - - for(j=0; j<t->n_type_deps; j++) { - if(KHM_FAILED(khui_cw_find_type(nc, t->type_deps[j], &d))) - break; - - if(!(d->flags & KHUI_NC_RESPONSE_COMPLETED)) - break; - } - - if(j<t->n_type_deps) /* there are unmet dependencies */ - continue; - - /* all dependencies for this type have been met. */ - subs[n_subs++] = kcdb_credtype_get_sub(t->type); - t->flags |= KHUI_NCT_FLAG_PROCESSED; - cont = TRUE; - } - - LeaveCriticalSection(&nc->cs); - - /* the reason why we are posting messages in batches is because - when the message has completed we know that all the types that - have the KHUI_NCT_FLAG_PROCESSED set have completed processing. - Otherwise we have to individually track each message and update - the type */ - if(n_subs > 0) - kmq_post_subs_msg(subs, n_subs, KMSG_CRED, KMSG_CRED_PROCESS, 0, - (void *) nc); - - return cont; -} - -void -khm_cred_dispatch_process_message(khui_new_creds *nc) -{ - khm_size i; - BOOL pending; - wchar_t wsinsert[512]; - khm_size cbsize; - - /* see if there's anything to do. We can check this without - obtaining a lock */ - if(nc->n_types == 0 || - (nc->subtype == KMSG_CRED_NEW_CREDS && - nc->n_identities == 0) || - (nc->subtype == KMSG_CRED_PASSWORD && - nc->n_identities == 0)) - goto _terminate_job; - - /* check dependencies and stuff first */ - EnterCriticalSection(&nc->cs); - for(i=0; i<nc->n_types; i++) { - nc->types[i]->flags &= ~ KHUI_NCT_FLAG_PROCESSED; - } - LeaveCriticalSection(&nc->cs); - - /* Consindering all that can go wrong here and the desire to - handle errors here separately from others, we create a new task - for the purpose of tracking the credentials acquisition - process. */ - _begin_task(KHERR_CF_TRANSITIVE); - - /* Describe the context */ - if(nc->subtype == KMSG_CRED_NEW_CREDS) { - cbsize = sizeof(wsinsert); - kcdb_identity_get_name(nc->identities[0], wsinsert, &cbsize); - - _report_sr1(KHERR_NONE, IDS_CTX_PROC_NEW_CREDS, - _cstr(wsinsert)); - _resolve(); - } else if (nc->subtype == KMSG_CRED_RENEW_CREDS) { - cbsize = sizeof(wsinsert); - - if (nc->ctx.scope == KHUI_SCOPE_IDENT) - kcdb_identity_get_name(nc->ctx.identity, wsinsert, &cbsize); - else if (nc->ctx.scope == KHUI_SCOPE_CREDTYPE) { - if (nc->ctx.identity != NULL) - kcdb_identity_get_name(nc->ctx.identity, wsinsert, - &cbsize); - else - kcdb_credtype_get_name(nc->ctx.cred_type, wsinsert, - &cbsize); - } else if (nc->ctx.scope == KHUI_SCOPE_CRED) { - kcdb_cred_get_name(nc->ctx.cred, wsinsert, &cbsize); - } else { - StringCbCopy(wsinsert, sizeof(wsinsert), L"(?)"); - } - - _report_sr1(KHERR_NONE, IDS_CTX_PROC_RENEW_CREDS, - _cstr(wsinsert)); - _resolve(); - } else if (nc->subtype == KMSG_CRED_PASSWORD) { - cbsize = sizeof(wsinsert); - kcdb_identity_get_name(nc->identities[0], wsinsert, &cbsize); - - _report_sr1(KHERR_NONE, IDS_CTX_PROC_PASSWORD, - _cstr(wsinsert)); - _resolve(); - } else { - assert(FALSE); - } - - _describe(); - - pending = khm_cred_dispatch_process_level(nc); - - _end_task(); - - if(!pending) - goto _terminate_job; - - return; - - _terminate_job: - if (nc->subtype == KMSG_CRED_RENEW_CREDS) - kmq_post_message(KMSG_CRED, KMSG_CRED_END, 0, (void *) nc); - else - PostMessage(nc->hwnd, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_DIALOG_PROCESS_COMPLETE), 0); -} - -void -khm_cred_process_startup_actions(void) { - khm_handle defident = NULL; - - if (!khm_startup.processing) - return; - - if (khm_startup.init || - khm_startup.renew || - khm_startup.destroy || - khm_startup.autoinit) { - kcdb_identity_get_default(&defident); - } - - /* For asynchronous actions, we trigger the action and then exit - the loop. Once the action completes, the completion handler - will trigger a continuation message which will result in this - function getting called again. Then we can proceed with the - rest of the startup actions. */ - do { - if (khm_startup.init) { - - khm_cred_obtain_new_creds_for_ident(defident, NULL); - khm_startup.init = FALSE; - break; - } - - if (khm_startup.import) { - khm_cred_import(); - khm_startup.import = FALSE; - - /* we also set the renew command to false here because we - trigger a renewal for all the identities at the end of - the import operation anyway. */ - khm_startup.renew = FALSE; - break; - } - - if (khm_startup.renew) { - LONG pending_renewals; - - /* if there are no credentials, we just skip over the - renew action. */ - - khm_startup.renew = FALSE; - - InterlockedIncrement(&khm_startup.pending_renewals); - - khm_cred_renew_all_identities(); - - pending_renewals = InterlockedDecrement(&khm_startup.pending_renewals); - - if (pending_renewals != 0) - break; - - /* if there were no pending renewals, then we just fall - through. This means that either there were no - identities to renew, or all the renewals completed. If - all the renewals completed, then the commandline - contiuation message wasn't triggered. Either way, we - must fall through if the count is zero. */ - } - - if (khm_startup.destroy) { - - khm_startup.destroy = FALSE; - - if (defident) { - khm_cred_destroy_identity(defident); - break; - } - } - - if (khm_startup.autoinit) { - khm_size count = 0; - khm_handle credset = NULL; - khm_int32 ctype_ident = KCDB_CREDTYPE_INVALID; - khm_int32 delta = 0; - - khm_startup.autoinit = FALSE; - - kcdb_credset_create(&credset); - kcdb_identity_get_type(&ctype_ident); - - kcdb_credset_collect(credset, NULL, - defident, ctype_ident, - &delta); - - kcdb_credset_get_size(credset, &count); - - kcdb_credset_delete(credset); - - if (count == 0) { - if (defident) - khui_context_set(KHUI_SCOPE_IDENT, - defident, - KCDB_CREDTYPE_INVALID, - NULL, NULL, 0, - NULL); - else - khui_context_reset(); - - khm_cred_obtain_new_creds(NULL); - break; - } - } - - if (khm_startup.exit) { - PostMessage(khm_hwnd_main, - WM_COMMAND, - MAKEWPARAM(KHUI_ACTION_EXIT, 0), 0); - khm_startup.exit = FALSE; - break; - } - - if (khm_startup.display & SOPTS_DISPLAY_HIDE) { - khm_hide_main_window(); - } else if (khm_startup.display & SOPTS_DISPLAY_SHOW) { - khm_show_main_window(); - } - khm_startup.display = 0; - - /* when we get here, then we are all done with the command - line stuff */ - khm_startup.processing = FALSE; - khm_startup.remote = FALSE; - - kmq_post_message(KMSG_ACT, KMSG_ACT_END_CMDLINE, 0, 0); - } while(FALSE); - - if (defident) - kcdb_identity_release(defident); -} - -void -khm_cred_begin_startup_actions(void) { - khm_handle csp_cw; - - if (khm_startup.seen) - return; - - if (!khm_startup.remote && - KHM_SUCCEEDED(khc_open_space(NULL, L"CredWindow", 0, &csp_cw))) { - - khm_int32 t = 0; - - khc_read_int32(csp_cw, L"Autoinit", &t); - if (t) - khm_startup.autoinit = TRUE; - - t = 0; - khc_read_int32(csp_cw, L"AutoImport", &t); - if (t) - khm_startup.import = TRUE; - - khc_close_space(csp_cw); - - } - - /* if this is a remote request, and no specific options were - specified other than --renew, then we perform the default - action, as if the user clicked on the tray icon. */ - if (khm_startup.remote && - !khm_startup.exit && - !khm_startup.destroy && - !khm_startup.autoinit && - !khm_startup.init && - !khm_startup.remote_exit && - !khm_startup.import && - !khm_startup.display) { - - khm_int32 def_action = khm_get_default_notifier_action(); - - if (def_action > 0) { - khui_action_trigger(def_action, NULL); - } - } - - khm_startup.seen = TRUE; - khm_startup.processing = TRUE; - - khm_cred_process_startup_actions(); -} - -void -khm_cred_refresh(void) { - kmq_post_message(KMSG_CRED, KMSG_CRED_REFRESH, 0, NULL); -} - -void -khm_cred_addr_change(void) { - khm_handle csp_cw = NULL; - khm_int32 check_net = 0; - - wchar_t * ids = NULL; - wchar_t * t; - khm_size cb; - khm_size n_idents; - - FILETIME ft_now; - FILETIME ft_exp; - FILETIME ft_issue; - - if (KHM_SUCCEEDED(khc_open_space(NULL, L"CredWindow", - 0, &csp_cw))) { - khc_read_int32(csp_cw, L"AutoDetectNet", &check_net); - - khc_close_space(csp_cw); - } - - if (!check_net) - return; - - while(TRUE) { - if (ids) - PFREE(ids); - ids = NULL; - - if (kcdb_identity_enum(KCDB_IDENT_FLAG_VALID | - KCDB_IDENT_FLAG_RENEWABLE, - KCDB_IDENT_FLAG_VALID | - KCDB_IDENT_FLAG_RENEWABLE, - NULL, - &cb, - &n_idents) != KHM_ERROR_TOO_LONG) - break; - - ids = PMALLOC(cb); - - if (KHM_SUCCEEDED - (kcdb_identity_enum(KCDB_IDENT_FLAG_VALID | - KCDB_IDENT_FLAG_RENEWABLE, - KCDB_IDENT_FLAG_VALID | - KCDB_IDENT_FLAG_RENEWABLE, - ids, - &cb, - &n_idents))) - break; - } - - if (!ids) - return; - - GetSystemTimeAsFileTime(&ft_now); - - for (t=ids; t && *t; t = multi_string_next(t)) { - khm_handle ident; - - - if (KHM_FAILED - (kcdb_identity_create(t, 0, &ident))) - continue; - - cb = sizeof(ft_issue); - - if (KHM_SUCCEEDED - (kcdb_identity_get_attr(ident, KCDB_ATTR_ISSUE, NULL, - &ft_issue, &cb)) && - - (cb = sizeof(ft_exp)) && - KHM_SUCCEEDED - (kcdb_identity_get_attr(ident, KCDB_ATTR_EXPIRE, NULL, - &ft_exp, &cb)) && - - CompareFileTime(&ft_now, &ft_exp) < 0) { - - khm_int64 i_issue; - khm_int64 i_exp; - khm_int64 i_now; - - i_issue = FtToInt(&ft_issue); - i_exp = FtToInt(&ft_exp); - i_now = FtToInt(&ft_now); - - if (i_now > (i_issue + i_exp) / 2) { - - khm_cred_renew_identity(ident); - - } - } - - kcdb_identity_release(ident); - } -} diff --git a/src/windows/identity/ui/credfuncs.h b/src/windows/identity/ui/credfuncs.h deleted file mode 100644 index 051679647..000000000 --- a/src/windows/identity/ui/credfuncs.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * 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 - * 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 __KHIMAIRA_CREDFUNCS_H -#define __KHIMAIRA_CREDFUNCS_H - -void KHMAPI -kmsg_cred_completion(kmq_message *m); - -void -khm_cred_destroy_creds(khm_boolean sync, - khm_boolean quiet); - -void -khm_cred_destroy_identity(khm_handle identity); - -void -khm_cred_renew_all_identities(void); - -void -khm_cred_renew_identity(khm_handle identity); - -void -khm_cred_renew_cred(khm_handle cred); - -void -khm_cred_renew_creds(void); - -void -khm_cred_obtain_new_creds(wchar_t * window_title); - -void -khm_cred_obtain_new_creds_for_ident(khm_handle ident, wchar_t * title); - -void -khm_cred_set_default(void); - -void khm_cred_set_default_identity(khm_handle identity); - -void -khm_cred_change_password(wchar_t * window_title); - -void -khm_cred_dispatch_process_message(khui_new_creds *nc); - -BOOL -khm_cred_dispatch_process_level(khui_new_creds *nc); - -BOOL -khm_cred_is_in_dialog(void); - -khm_int32 -khm_cred_wait_for_dialog(DWORD timeout, khm_int32 * result, - wchar_t * ident, khm_size cb_ident); - -void -khm_cred_begin_startup_actions(void); - -void -khm_cred_process_startup_actions(void); - -void -khm_cred_refresh(void); - -void -khm_cred_addr_change(void); - -void -khm_cred_import(void); - -#endif diff --git a/src/windows/identity/ui/credwnd.c b/src/windows/identity/ui/credwnd.c deleted file mode 100644 index f7d7ca15e..000000000 --- a/src/windows/identity/ui/credwnd.c +++ /dev/null @@ -1,5952 +0,0 @@ -/* - * 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 - * 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<khmapp.h> -#include<prsht.h> -#include<assert.h> - -ATOM khui_credwnd_cls; -khm_int32 khui_cw_flag_id; - -khm_int32 attr_to_action[KCDB_ATTR_MAX_ID + 1]; - -/* forward declarations */ -static void -cw_select_row_creds(khui_credwnd_tbl * tbl, int row, int selected); - -static void -cw_set_row_context(khui_credwnd_tbl * tbl, int row); - -static void -cw_update_outline(khui_credwnd_tbl * tbl); - -static void -cw_update_selection_state(khui_credwnd_tbl * tbl); - -static void -cw_select_row(khui_credwnd_tbl * tbl, int row, WPARAM wParam); - - -khm_int32 bHideWatermarks = 0; - -void -khm_set_cw_element_font(wchar_t * name, LOGFONT * pfont) { - khm_handle csp_cw = NULL; - wchar_t * element_name; - - if (name == NULL) - element_name = L"FontBase"; - else - element_name = name; - - if (KHM_FAILED(khc_open_space(NULL, L"CredWindow", KHM_PERM_WRITE, - &csp_cw))) - return; - - khc_write_binary(csp_cw, element_name, pfont, sizeof(LOGFONT)); - - khc_close_space(csp_cw); -} - -void -khm_get_cw_element_font(HDC hdc, wchar_t * name, BOOL use_default, LOGFONT * pfont) { - khm_handle csp_cw = NULL; - khm_size cb; - wchar_t * element_name; - khm_boolean try_derive = FALSE; - - if (name == NULL) - element_name = L"FontBase"; - else - element_name = name; - - if (use_default) - goto _use_defaults; - - if (KHM_FAILED(khc_open_space(NULL, L"CredWindow", 0, - &csp_cw))) - goto _use_defaults; - - cb = sizeof(LOGFONT); - if (KHM_FAILED(khc_read_binary(csp_cw, element_name, pfont, - &cb)) || - cb != sizeof(LOGFONT)) { - try_derive = TRUE; - } - - if (try_derive) { - cb = sizeof(LOGFONT); - if (!name || - KHM_FAILED(khc_read_binary(csp_cw, L"FontBase", pfont, - &cb)) || - cb != sizeof(LOGFONT)) { - khc_close_space(csp_cw); - goto _use_defaults; - } - - if (!wcscmp(name, L"FontHeaderBold") || - !wcscmp(name, L"FontBold")) { - - pfont->lfWeight = FW_BOLD; - - } - } - - khc_close_space(csp_cw); - - return; - - _use_defaults: - - ZeroMemory(pfont, sizeof(*pfont)); - - if (name == NULL) { - LOGFONT lf = { - 0,0, - 0,0, - FW_THIN, - FALSE, - FALSE, - FALSE, - DEFAULT_CHARSET, - OUT_DEFAULT_PRECIS, - CLIP_DEFAULT_PRECIS, - DEFAULT_QUALITY, - FF_SWISS, - L"MS Shell Dlg"}; - - lf.lfHeight = -MulDiv(8, GetDeviceCaps(hdc, LOGPIXELSY), 72); - - *pfont = lf; - - } else if (!wcscmp(name, L"FontHeader")) { - LOGFONT lf = { - 0,0, - 0,0, - FW_THIN, - FALSE, - FALSE, - FALSE, - DEFAULT_CHARSET, - OUT_DEFAULT_PRECIS, - CLIP_DEFAULT_PRECIS, - DEFAULT_QUALITY, - FF_SWISS, - L"MS Shell Dlg"}; - - lf.lfHeight = -MulDiv(8, GetDeviceCaps(hdc, LOGPIXELSY), 72); - - *pfont = lf; - - } else if (!wcscmp(name, L"FontHeaderBold")) { - LOGFONT lf = { - 0,0, - 0,0, - FW_BOLD, - FALSE, - FALSE, - FALSE, - DEFAULT_CHARSET, - OUT_DEFAULT_PRECIS, - CLIP_DEFAULT_PRECIS, - DEFAULT_QUALITY, - FF_SWISS, - L"MS Shell Dlg"}; - - lf.lfHeight = -MulDiv(8, GetDeviceCaps(hdc, LOGPIXELSY), 72); - - *pfont = lf; - - } else if (!wcscmp(name, L"FontNormal")) { - LOGFONT lf = { - 0,0, - 0,0, - FW_THIN, - FALSE, - FALSE, - FALSE, - DEFAULT_CHARSET, - OUT_DEFAULT_PRECIS, - CLIP_DEFAULT_PRECIS, - DEFAULT_QUALITY, - FF_SWISS, - L"MS Shell Dlg"}; - - lf.lfHeight = -MulDiv(8, GetDeviceCaps(hdc, LOGPIXELSY), 72); - - *pfont = lf; - - } else if (!wcscmp(name, L"FontBold")) { - LOGFONT lf = { - 0,0, - 0,0, - FW_BOLD, - FALSE, - FALSE, - FALSE, - DEFAULT_CHARSET, - OUT_DEFAULT_PRECIS, - CLIP_DEFAULT_PRECIS, - DEFAULT_QUALITY, - FF_SWISS, - L"MS Shell Dlg"}; - - lf.lfHeight = -MulDiv(8, GetDeviceCaps(hdc, LOGPIXELSY), 72); - - *pfont = lf; - - } else { -#ifdef DEBUG - assert(FALSE); -#endif - } -} - -void -cw_refresh_attribs(HWND hwnd) { - khm_int32 act; - kcdb_attrib * attrib; - khui_menu_def * menu; - khm_int32 i; - - menu = khui_find_menu(KHUI_MENU_COLUMNS); -#ifdef DEBUG - assert(menu); -#endif - - for (i=0; i <= KCDB_ATTR_MAX_ID; i++) { - if (KHM_FAILED(kcdb_attrib_get_info(i, &attrib))) { - if (attr_to_action[i] != 0) { - /* the action should be removed */ - khui_menu_remove_action(menu, attr_to_action[i]); - khui_action_delete(attr_to_action[i]); - attr_to_action[i] = 0; - } - } else { - if (attr_to_action[i] == 0 && - !(attrib->flags & KCDB_ATTR_FLAG_HIDDEN) && - (attrib->short_desc || attrib->long_desc)) { - /* new action */ - khm_handle sub = NULL; - - kmq_create_hwnd_subscription(hwnd, &sub); - - act = khui_action_create(attrib->name, - (attrib->short_desc? - attrib->short_desc: attrib->long_desc), - NULL, - (void *)(UINT_PTR) i, - KHUI_ACTIONTYPE_TOGGLE, - sub); - - attr_to_action[i] = act; - - khui_menu_insert_action(menu, 5000, act, 0); - } - - kcdb_attrib_release_info(attrib); - } - } -} - -khm_int32 -cw_get_custom_attr_id(wchar_t * s) -{ - if(!wcscmp(s, CW_CANAME_FLAGS)) - return CW_CA_FLAGS; - if(!wcscmp(s, CW_CANAME_TYPEICON)) - return CW_CA_TYPEICON; - return 0; -} - -const wchar_t * -cw_get_custom_attr_string(khm_int32 attr_id) -{ - if (attr_id == CW_CA_FLAGS) - return CW_CANAME_FLAGS; - if (attr_id == CW_CA_TYPEICON) - return CW_CANAME_TYPEICON; - return NULL; -} - -void -cw_save_view(khui_credwnd_tbl * tbl, wchar_t * view_name) { - wchar_t * col_list = NULL; - khm_size cb_col_list; - khm_handle csp_cw = NULL; - khm_handle csp_views = NULL; - khm_handle csp_view = NULL; - khm_handle csp_cols = NULL; - khm_size cb; - int i; - - if (tbl->n_cols == 0) - return; - - cb_col_list = (KCONF_MAXCB_NAME + 1) * tbl->n_cols; - - col_list = PMALLOC(cb_col_list); -#ifdef DEBUG - assert(col_list); -#endif - - if (!col_list) - goto _cleanup; - - multi_string_init(col_list, cb_col_list); - - /* if we aren't saving to a specific view, and the view has been - customized, then we save it to "Custom_0", unless we are in the - mini mode, in which case we save it to "Custom_1" */ - if (!view_name && (tbl->flags & KHUI_CW_TBL_CUSTVIEW)) { - if (!(tbl->flags & KHUI_CW_TBL_EXPIDENT)) { - view_name = L"Custom_0"; - } else { - view_name = L"Custom_1"; - } - } - - if (view_name) { - if (KHM_FAILED(khc_open_space(NULL, L"CredWindow", - KHM_PERM_READ | KHM_PERM_WRITE, &csp_cw))) - goto _cleanup; - - if (KHM_FAILED(khc_open_space(csp_cw, L"Views", KHM_PERM_READ, &csp_views))) - goto _cleanup; - - if (KHM_FAILED(khc_open_space(csp_views, view_name, - KHM_PERM_WRITE | KHM_FLAG_CREATE, - &csp_view))) - goto _cleanup; - - /* if we are switching to a custom view, then we should mark - that as the default. */ - if (tbl->flags & KHUI_CW_TBL_CUSTVIEW) { - khc_write_string(csp_cw, ((!(tbl->flags & KHUI_CW_TBL_EXPIDENT))? - L"DefaultView": - L"DefaultViewMini"), view_name); - } - - } else { - csp_view = tbl->csp_view; - } - - if (!csp_view) - goto _cleanup; - - if (tbl->flags & KHUI_CW_TBL_EXPIDENT) { - khc_write_int32(csp_view, L"ExpandedIdentity", 1); - } else { - khm_int32 t; - if (KHM_SUCCEEDED(khc_read_int32(csp_view, L"ExpandedIdentity", &t)) && t) - khc_write_int32(csp_view, L"ExpandedIdentity", 0); - } - - if (tbl->flags & KHUI_CW_TBL_NOHEADER) { - khc_write_int32(csp_view, L"NoHeader", 1); - } else { - khm_int32 t; - if (KHM_SUCCEEDED(khc_read_int32(csp_view, L"NoHeader", &t)) && t) - khc_write_int32(csp_view, L"NoHeader", 0); - } - - if (KHM_FAILED(khc_open_space(csp_view, L"Columns", - KHM_PERM_WRITE | KHM_FLAG_CREATE, - &csp_cols))) - goto _cleanup; - - for (i=0; i < tbl->n_cols; i++) { - const wchar_t * attr_name; - kcdb_attrib * attrib = NULL; - khm_handle csp_col = NULL; - - if (tbl->cols[i].attr_id < 0) { - attr_name = cw_get_custom_attr_string(tbl->cols[i].attr_id); - } else { - if (KHM_FAILED(kcdb_attrib_get_info(tbl->cols[i].attr_id, - &attrib))) { -#ifdef DEBUG - assert(FALSE); -#endif - goto _clean_col; - } - - attr_name = attrib->name; - } -#ifdef DEBUG - assert(attr_name); -#endif - - cb = cb_col_list; - multi_string_append(col_list, &cb, attr_name); - - if (KHM_FAILED(khc_open_space(csp_cols, attr_name, - KHM_PERM_WRITE | KHM_FLAG_CREATE, - &csp_col))) - goto _clean_col; - - khc_write_int32(csp_col, L"Width", tbl->cols[i].width); - khc_write_int32(csp_col, L"SortIndex", tbl->cols[i].sort_index); - khc_write_int32(csp_col, L"Flags", tbl->cols[i].flags); - - _clean_col: - - if (csp_col) - khc_close_space(csp_col); - - if (attrib) - kcdb_attrib_release_info(attrib); - } - - khc_write_multi_string(csp_view, L"ColumnList", col_list); - - { - khm_version v = app_version; - - khc_write_binary(csp_view, L"_AppVersion", &v, sizeof(v)); - } - - _cleanup: - - if (view_name) { - if (csp_view) - khc_close_space(csp_view); - - if (csp_views) - khc_close_space(csp_views); - - if (csp_cw) - khc_close_space(csp_cw); - } - - if (csp_cols) - khc_close_space(csp_cols); - - if (col_list) - PFREE(col_list); -} - -static COLORREF -cw_mix_colors(COLORREF c1, COLORREF c2, int alpha) { - int r = (GetRValue(c1) * alpha + GetRValue(c2) * (255 - alpha)) / 255; - int g = (GetGValue(c1) * alpha + GetGValue(c2) * (255 - alpha)) / 255; - int b = (GetBValue(c1) * alpha + GetBValue(c2) * (255 - alpha)) / 255; - -#ifdef DEBUG - assert(alpha >= 0 && alpha < 256); -#endif - - return RGB(r,g,b); -} - -static COLORREF -cw_get_theme_color(khm_handle hc, const wchar_t * name, COLORREF ref_color) { - khm_int32 t; - COLORREF c; - int alpha; - - if (KHM_FAILED(khc_read_int32(hc, name, &t))) { -#ifdef DEBUG - assert(FALSE); -#endif - return ref_color; - } - - alpha = ((t >> 24) & 0xff); - c = (COLORREF) (t & 0xffffff); - return cw_mix_colors(ref_color, c, alpha); -} - -void -cw_load_view(khui_credwnd_tbl * tbl, wchar_t * view, HWND hwnd) { - khm_handle hc_cw = NULL; - khm_handle hc_vs = NULL; - khm_handle hc_v = NULL; - khm_handle hc_cs = NULL; - khm_handle hc_c = NULL; - wchar_t buf[KCONF_MAXCCH_NAME]; - wchar_t * clist = NULL; - khm_size cbsize; - wchar_t * iter = NULL; - int i; - HDC hdc; - LOGFONT log_font; - khm_int32 t; - const wchar_t * viewval; - khm_boolean reopen_csp = FALSE; - - tbl->hwnd = hwnd; - - if (khm_main_wnd_mode == KHM_MAIN_WND_MINI) - viewval = L"DefaultViewMini"; - else - viewval = L"DefaultView"; - - if(KHM_FAILED(khc_open_space(NULL, L"CredWindow", KHM_PERM_READ | KHM_PERM_WRITE, - &hc_cw))) - return; - - khc_read_int32(hc_cw, L"HideWatermarks", &bHideWatermarks); - - if(KHM_FAILED(khc_open_space(hc_cw, L"Views", KHM_PERM_READ, &hc_vs))) - goto _exit; - - if(!view) { - cbsize = sizeof(buf); - if(KHM_FAILED(khc_read_string(hc_cw, viewval, buf, &cbsize))) - goto _exit; - view = buf; - } else { - khc_write_string(hc_cw, viewval, view); - } - - /* in addition, if we are loading the default view, we should - also check the appropriate menu item */ - - if (!wcscmp(view, L"ByIdentity")) - khui_check_radio_action(khui_find_menu(KHUI_MENU_LAYOUT), - KHUI_ACTION_LAYOUT_ID); - else if (!wcscmp(view, L"ByLocation")) - khui_check_radio_action(khui_find_menu(KHUI_MENU_LAYOUT), - KHUI_ACTION_LAYOUT_LOC); - else if (!wcscmp(view, L"ByType")) - khui_check_radio_action(khui_find_menu(KHUI_MENU_LAYOUT), - KHUI_ACTION_LAYOUT_TYPE); - else if (!wcscmp(view, L"Custom_0")) - khui_check_radio_action(khui_find_menu(KHUI_MENU_LAYOUT), - KHUI_ACTION_LAYOUT_CUST); - else { - /* do nothing */ - } - - if (KHM_FAILED(khc_read_int32(hc_cw, L"ViewAllIdents", &tbl->view_all_idents))) - tbl->view_all_idents = 0; - - khui_check_action(KHUI_ACTION_VIEW_ALL_IDS, tbl->view_all_idents); - - kmq_post_message(KMSG_ACT, KMSG_ACT_REFRESH, 0, 0); - - if(KHM_FAILED(khc_open_space(hc_vs, view, 0, &hc_v))) - goto _exit; - - /* view data is very sensitive to version changes. We need to - check if this configuration data was created with this version - of NetIDMgr. If not, we switch to using a schema handle. */ - { - khm_version this_v = app_version; - khm_version cfg_v; - - cbsize = sizeof(cfg_v); - if (KHM_FAILED(khc_read_binary(hc_v, L"_AppVersion", &cfg_v, &cbsize)) || - khm_compare_version(&cfg_v, &this_v) != 0) { - - khc_close_space(hc_v); - - if (KHM_FAILED(khc_open_space(hc_vs, view, KCONF_FLAG_SCHEMA, - &hc_v)) && - (wcscmp(view, L"Custom_1") || - KHM_FAILED(khc_open_space(hc_vs, L"CompactIdentity", - KCONF_FLAG_SCHEMA, &hc_v)))) { - goto _exit; - } - - reopen_csp = TRUE; - } - } - - tbl->csp_view = hc_v; - - if(KHM_FAILED(khc_open_space(hc_v, L"Columns", - KHM_PERM_READ | (reopen_csp ? KCONF_FLAG_SCHEMA : 0), - &hc_cs))) - goto _exit; - - cbsize = 0; - if(khc_read_multi_string(hc_v, L"ColumnList", NULL, &cbsize) != KHM_ERROR_TOO_LONG) - goto _exit; - - /* temporary */ - clist = PMALLOC(cbsize); - - if(KHM_FAILED(khc_read_multi_string(hc_v, L"ColumnList", clist, &cbsize))) - goto _exit; - - tbl->n_cols = (int) multi_string_length_n(clist); - tbl->n_total_cols = UBOUNDSS(tbl->n_cols, - KHUI_CW_COL_INITIAL, KHUI_CW_COL_INCREMENT); - tbl->cols = PMALLOC(sizeof(khui_credwnd_col) * tbl->n_total_cols); - ZeroMemory(tbl->cols, sizeof(khui_credwnd_col) * tbl->n_total_cols); - - tbl->flags &= ~(KHUI_CW_TBL_CUSTVIEW | KHUI_CW_TBL_COLSKIP); - - if (KHM_SUCCEEDED(khc_read_int32(hc_v, L"ExpandedIdentity", &t)) && t) { - tbl->flags |= KHUI_CW_TBL_EXPIDENT; - } else { - tbl->flags &= ~KHUI_CW_TBL_EXPIDENT; - } - - if (KHM_SUCCEEDED(khc_read_int32(hc_v, L"NoHeader", &t)) && t) { - tbl->flags |= KHUI_CW_TBL_NOHEADER; - } else { - tbl->flags &= ~KHUI_CW_TBL_NOHEADER; - } - - iter = clist; - i = 0; - while(iter) { - khm_int32 attr_id; - - attr_id = cw_get_custom_attr_id(iter); - if(!attr_id) { - /* a KCDB attribute */ - if(KHM_FAILED(kcdb_attrib_get_id(iter, &attr_id))) { - tbl->flags |= KHUI_CW_TBL_COLSKIP; - goto _skip_col; - } - - if(kcdb_attrib_describe(attr_id, NULL, - &cbsize, KCDB_TS_SHORT) != KHM_ERROR_TOO_LONG || - cbsize == 0) { - tbl->flags |= KHUI_CW_TBL_COLSKIP; - goto _skip_col; - } - - tbl->cols[i].title = PMALLOC(cbsize); - kcdb_attrib_describe(attr_id, tbl->cols[i].title, &cbsize, KCDB_TS_SHORT); - - if (attr_id >= 0 && - attr_id <= KCDB_ATTR_MAX_ID && - attr_to_action[attr_id]) { - khui_check_action(attr_to_action[attr_id], TRUE); - } - - } else { - /* All current custom attributes are represented by icons, - not names */ - tbl->cols[i].title = NULL; - } - - tbl->cols[i].attr_id = attr_id; - - if(KHM_SUCCEEDED(khc_open_space(hc_cs, iter, - KHM_PERM_READ | (reopen_csp ? KCONF_FLAG_SCHEMA : 0), - &hc_c))) { - if(KHM_FAILED(khc_read_int32(hc_c, L"Flags", &(tbl->cols[i].flags)))) - tbl->cols[i].flags = 0; - if(KHM_FAILED(khc_read_int32(hc_c, L"Width", &(tbl->cols[i].width)))) - tbl->cols[i].width = 100; - if(KHM_FAILED(khc_read_int32(hc_c, L"SortIndex", - &(tbl->cols[i].sort_index)))) - tbl->cols[i].sort_index = -1; - khc_close_space(hc_c); - hc_c = NULL; - } else { - tbl->cols[i].flags = 0; - tbl->cols[i].width = -1; - tbl->cols[i].sort_index = -1; - } - i++; -_skip_col: - iter = multi_string_next(iter); - } - - /* refresh the menus since we checked a few items */ - kmq_post_message(KMSG_ACT, KMSG_ACT_REFRESH, 0, 0); - - /* adjust the number of columns. We may have skipped columns due to - inconsistencies above */ - tbl->n_cols = i; - - /* now that all the columns have been loaded, load the view - parameters */ - if(KHM_FAILED(khc_read_int32(hc_v, L"PaddingHorizontal", &(tbl->hpad)))) - khc_read_int32(hc_cw, L"PaddingHorizontal", &(tbl->hpad)); - if(KHM_FAILED(khc_read_int32(hc_v, L"PaddingVertical", &(tbl->vpad)))) - khc_read_int32(hc_cw, L"PaddingVertical", &(tbl->vpad)); - if(KHM_FAILED(khc_read_int32(hc_v, L"PaddingHeader", &(tbl->hpad_h)))) - khc_read_int32(hc_cw, L"PaddingHeader", &(tbl->hpad_h)); - if(KHM_FAILED(khc_read_int32(hc_v, L"WarnThreshold", &(tbl->threshold_warn)))) - khc_read_int32(hc_cw, L"WarnThreshold", &(tbl->threshold_warn)); - if(KHM_FAILED(khc_read_int32(hc_v, L"CriticalThreshold", - &(tbl->threshold_critical)))) - khc_read_int32(hc_cw, L"CriticalThreshold", - &(tbl->threshold_critical)); - - /* and the font resources and stuff */ - - tbl->flags |= KHUI_CW_TBL_INITIALIZED | KHUI_CW_TBL_COL_DIRTY | KHUI_CW_TBL_ACTIVE; - - hdc = GetWindowDC(hwnd); - - khm_get_cw_element_font(hdc, L"FontHeader", FALSE, &log_font); - tbl->hf_header = CreateFontIndirect(&log_font); - - if(tbl->hf_header && tbl->hwnd_header) - SendMessage(tbl->hwnd_header, WM_SETFONT, (WPARAM) tbl->hf_header, 0); - - khm_get_cw_element_font(hdc, L"FontHeaderBold", FALSE, &log_font); - tbl->hf_bold_header = CreateFontIndirect(&log_font); - - - khm_get_cw_element_font(hdc, L"FontNormal", FALSE, &log_font); - tbl->hf_normal = CreateFontIndirect(&log_font); - - khm_get_cw_element_font(hdc, L"FontBold", FALSE, &log_font); - tbl->hf_bold = CreateFontIndirect(&log_font); - - ReleaseDC(hwnd, hdc); - - khui_bitmap_from_hbmp(&(tbl->kbm_logo_shade), - LoadImage(khm_hInstance, - MAKEINTRESOURCE(IDB_LOGO_SHADE), - IMAGE_BITMAP, - 0, - 0, - LR_DEFAULTCOLOR)); - - { - -#define SEL_ALPHA 50 - - khm_handle hc_themes = NULL; - khm_handle hc_theme = NULL; - - COLORREF bg_s = 0; - COLORREF bg_normal = 0; - COLORREF bg_gray = 0; - COLORREF bg_hdr = 0; - COLORREF bg_hdr_cred = 0; - COLORREF bg_hdr_warn = 0; - COLORREF bg_hdr_crit = 0; - COLORREF bg_hdr_exp = 0; - - COLORREF bg_hdr_s = 0; - COLORREF bg_hdr_cred_s = 0; - COLORREF bg_hdr_warn_s = 0; - COLORREF bg_hdr_crit_s = 0; - COLORREF bg_hdr_exp_s = 0; - - cbsize = sizeof(buf); - if (KHM_SUCCEEDED(khc_read_string(hc_cw, L"DefaultTheme", buf, &cbsize)) && - KHM_SUCCEEDED(khc_open_space(hc_cw, L"Themes", KHM_PERM_READ, &hc_themes)) && - KHM_SUCCEEDED(khc_open_space(hc_themes, buf, KHM_PERM_READ, &hc_theme))) { - - bg_s = cw_get_theme_color(hc_theme, L"ClrSelection", 0); - bg_normal = cw_get_theme_color(hc_theme, L"ClrBackground", 0); - bg_gray = cw_get_theme_color(hc_theme, L"ClrGray", 0); - bg_hdr = cw_get_theme_color(hc_theme, L"ClrHeader", 0); - bg_hdr_cred = cw_get_theme_color(hc_theme, L"ClrHeaderCred", 0); - bg_hdr_warn = cw_get_theme_color(hc_theme, L"ClrHeaderWarn", 0); - bg_hdr_crit = cw_get_theme_color(hc_theme, L"ClrHeaderCrit", 0); - bg_hdr_exp = cw_get_theme_color(hc_theme, L"ClrHeaderExp", 0); - bg_hdr_s = cw_get_theme_color(hc_theme, L"ClrHeaderSel", bg_s); - bg_hdr_cred_s = cw_get_theme_color(hc_theme, L"ClrHeaderCredSel", bg_s); - bg_hdr_warn_s = cw_get_theme_color(hc_theme, L"ClrHeaderWarnSel", bg_s); - bg_hdr_crit_s = cw_get_theme_color(hc_theme, L"ClrHeaderCritSel", bg_s); - bg_hdr_exp_s = cw_get_theme_color(hc_theme, L"ClrHeaderExpSel", bg_s); - - tbl->cr_normal = cw_get_theme_color(hc_theme, L"ClrText", 0); - tbl->cr_s = cw_get_theme_color(hc_theme, L"ClrTextSel", bg_s); - tbl->cr_hdr_outline = cw_get_theme_color(hc_theme, L"ClrHeaderOutline", 0); - tbl->cr_hdr_normal = cw_get_theme_color(hc_theme, L"ClrTextHeader", 0); - tbl->cr_hdr_s = cw_get_theme_color(hc_theme, L"ClrTextHeaderSel", bg_s); - tbl->cr_hdr_gray = cw_get_theme_color(hc_theme, L"ClrTextHeaderGray", 0); - tbl->cr_hdr_gray_s = cw_get_theme_color(hc_theme, L"ClrTextHeaderGraySel", bg_s); - } else { -#ifdef DEBUG - assert(FALSE); -#endif - } - - if (hc_theme) - khc_close_space(hc_theme); - if (hc_themes) - khc_close_space(hc_themes); - hc_theme = hc_themes = NULL; - - if (khm_main_wnd_mode == KHM_MAIN_WND_MINI) { - bg_hdr = bg_normal; - tbl->cr_hdr_outline = bg_gray; - } - - tbl->hb_normal = CreateSolidBrush(bg_normal); - tbl->hb_grey = CreateSolidBrush(bg_gray); - tbl->hb_s = CreateSolidBrush(cw_mix_colors(bg_s, bg_normal, SEL_ALPHA)); - - tbl->hb_hdr_bg = CreateSolidBrush(bg_hdr); - tbl->hb_hdr_bg_cred = CreateSolidBrush(bg_hdr_cred); - tbl->hb_hdr_bg_warn = CreateSolidBrush(bg_hdr_warn); - tbl->hb_hdr_bg_crit = CreateSolidBrush(bg_hdr_crit); - tbl->hb_hdr_bg_exp = CreateSolidBrush(bg_hdr_exp); - - tbl->hb_hdr_bg_s = CreateSolidBrush(bg_s); - tbl->hb_hdr_bg_cred_s = CreateSolidBrush(bg_hdr_cred_s); - tbl->hb_hdr_bg_warn_s = CreateSolidBrush(bg_hdr_warn_s); - tbl->hb_hdr_bg_crit_s = CreateSolidBrush(bg_hdr_crit_s); - tbl->hb_hdr_bg_exp_s = CreateSolidBrush(bg_hdr_exp_s); - } - - tbl->ilist = khui_create_ilist(KHUI_SMICON_CX, KHUI_SMICON_CY-1, 20, 8, 0); - { - HBITMAP hbm; - -#define ADD_BITMAP(i) \ - hbm = LoadImage(khm_hInstance, MAKEINTRESOURCE(i), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); \ - if(hbm) { \ - khui_ilist_add_masked_id(tbl->ilist, hbm, KHUI_TOOLBAR_BGCOLOR, i); \ - DeleteObject(hbm); \ - } - - ADD_BITMAP(IDB_WDG_COLLAPSE); - ADD_BITMAP(IDB_WDG_EXPAND); - ADD_BITMAP(IDB_ID_SM); - ADD_BITMAP(IDB_ID_DIS_SM); - - ADD_BITMAP(IDB_TK_NEW_SM); - ADD_BITMAP(IDB_TK_REFRESH_SM); - ADD_BITMAP(IDB_WDG_COLLAPSE_HI); - ADD_BITMAP(IDB_WDG_EXPAND_HI); - - ADD_BITMAP(IDB_WDG_FLAG); - ADD_BITMAP(IDB_WDG_CREDTYPE); - ADD_BITMAP(IDB_FLAG_WARN); - ADD_BITMAP(IDB_FLAG_EXPIRED); - - ADD_BITMAP(IDB_FLAG_CRITICAL); - ADD_BITMAP(IDB_FLAG_RENEW); - ADD_BITMAP(IDB_WDG_STUCK); - ADD_BITMAP(IDB_WDG_STUCK_HI); - - ADD_BITMAP(IDB_WDG_STICK); - ADD_BITMAP(IDB_WDG_STICK_HI); - ADD_BITMAP(IDB_TK_SM); - -#undef ADD_BITMAP - } - - if (tbl->flags & KHUI_CW_TBL_EXPIDENT) { - tbl->hi_lg_ident = LoadImage(khm_hInstance, MAKEINTRESOURCE(IDI_MAIN_APP), - IMAGE_ICON, - GetSystemMetrics(SM_CXICON), - GetSystemMetrics(SM_CYICON), - LR_DEFAULTCOLOR); - } - - tbl->cursor_row = -1; - tbl->scr_left = 0; - tbl->scr_top = 0; - tbl->ext_height = 0; - tbl->ext_width = 0; - - if (reopen_csp) { - khc_close_space(hc_v); - - hc_v = NULL; - - khc_open_space(hc_vs, view, 0, &hc_v); - - tbl->csp_view = hc_v; - } - -_exit: - if(hc_cw) - khc_close_space(hc_cw); - if(hc_vs) - khc_close_space(hc_vs); - if(hc_cs) - khc_close_space(hc_cs); - if(clist) - PFREE(clist); - /* we leave hc_v held, because tbl->csp_view is the same handle. - We keep that open until the view is unloaded. */ -} - -khui_credwnd_ident * -cw_find_ident(khui_credwnd_tbl * tbl, khm_handle ident) { - khm_size i; - - for (i=0; i < tbl->n_idents; i++) { - if (kcdb_identity_is_equal(ident, tbl->idents[i].ident)) - break; - } - - if (i < tbl->n_idents) - return &tbl->idents[i]; - else - return NULL; -} - -khm_int32 KHMAPI -cw_credset_iter_func(khm_handle cred, void * rock) { - khui_credwnd_tbl * tbl = (khui_credwnd_tbl *) rock; - khm_handle ident = NULL; - khm_size i; - khui_credwnd_ident * cwi = NULL; - khm_int32 cred_credtype = KCDB_CREDTYPE_INVALID; - khm_int32 cred_flags = 0; - - kcdb_cred_get_identity(cred, &ident); - - if (ident == NULL) - goto _cleanup; - - for (i=0; i < tbl->n_idents; i++) { - if (kcdb_identity_is_equal(ident, tbl->idents[i].ident)) - break; - } - - if (i >= tbl->n_idents) { - khm_size cb; - - /* need to add this one */ - if (tbl->n_idents == tbl->nc_idents) { - tbl->nc_idents = UBOUNDSS(tbl->n_idents + 1, - CW_IDENT_ALLOC_INCR, - CW_IDENT_ALLOC_INCR); -#ifdef DEBUG - assert(tbl->nc_idents > tbl->n_idents); -#endif - tbl->idents = PREALLOC(tbl->idents, sizeof(tbl->idents[0]) * tbl->nc_idents); -#ifdef DEBUG - assert(tbl->idents); -#endif - ZeroMemory(&tbl->idents[tbl->n_idents], - sizeof(tbl->idents[0]) * (tbl->nc_idents - tbl->n_idents)); - } - - i = tbl->n_idents; - cwi = &tbl->idents[tbl->n_idents++]; - - ZeroMemory(cwi, sizeof(*cwi)); - - cwi->ident = ident; - kcdb_identity_hold(ident); - - cb = sizeof(cwi->name); - kcdb_identity_get_name(ident, cwi->name, &cb); - } - - cwi = &tbl->idents[i]; - - /* this is the first time we are seeing this identity. */ - if (cwi->credcount == 0) { - khm_size cb; - - cb = sizeof(cwi->credtype); - if (KHM_SUCCEEDED(kcdb_identity_get_attr(ident, KCDB_ATTR_TYPE, NULL, - &cwi->credtype, &cb))) { - cwi->credtype_name[0] = L'\0'; - - cb = sizeof(cwi->credtype_name); - if (KHM_FAILED(kcdb_identity_get_attr(ident, KCDB_ATTR_TYPE_NAME, NULL, - &cwi->credtype_name, &cb))) { - cb = sizeof(cwi->credtype_name); - kcdb_credtype_describe(cwi->credtype, cwi->credtype_name, - &cb, KCDB_TS_SHORT); - } - } else { - cwi->credtype = KCDB_CREDTYPE_INVALID; - cwi->credtype_name[0] = L'\0'; - } - - cb = sizeof(cwi->ft_expire); - if (KHM_FAILED(kcdb_identity_get_attr(ident, KCDB_ATTR_EXPIRE, NULL, - &cwi->ft_expire, &cb))) { - cwi->ft_expire = IntToFt(0); - } - - kcdb_identity_get_flags(cwi->ident, &cwi->ident_flags); - } - - cwi->credcount++; - - kcdb_cred_get_type(cred, &cred_credtype); - if (cred_credtype >= 0 && cred_credtype == cwi->credtype) { - cwi->id_credcount++; - - kcdb_cred_get_flags(cred, &cred_flags); - if (cred_flags & KCDB_CRED_FLAG_INITIAL) { - cwi->init_credcount++; - } - } - - _cleanup: - if (ident) - kcdb_identity_release(ident); - - return KHM_ERROR_SUCCESS; -} - -void -cw_update_creds(khui_credwnd_tbl * tbl) -{ - kcdb_cred_comp_field * fields; - kcdb_cred_comp_order comp_order; - int i; - khm_int32 n; - khm_int32 delta; - khm_handle hc; - khm_int32 flags; - - if(!tbl->credset) { - if(KHM_FAILED(kcdb_credset_create(&(tbl->credset)))) - return; - } - - kcdb_credset_purge(tbl->credset); - - kcdb_identity_refresh_all(); - - kcdb_credset_collect( - tbl->credset, - NULL, - NULL, - KCDB_CREDTYPE_ALL, - &delta); - - /* now we need to figure out how to sort the credentials */ - fields = PMALLOC(sizeof(kcdb_cred_comp_field) * tbl->n_cols); - ZeroMemory(fields, sizeof(kcdb_cred_comp_field) * tbl->n_cols); - - for(i=0, n=0; i<tbl->n_cols; i++) { - if((tbl->cols[i].flags & KHUI_CW_COL_SORT_INC) || - (tbl->cols[i].flags & KHUI_CW_COL_SORT_DEC) || - (tbl->cols[i].flags & KHUI_CW_COL_GROUP)) { - int si; - /* we need to sort by this column */ - si = tbl->cols[i].sort_index; - - if(si < 0 || si >= (int) tbl->n_cols) - { - /* this shouldn't happen */ - tbl->cols[i].flags &= ~(KHUI_CW_COL_SORT_INC | - KHUI_CW_COL_SORT_DEC | - KHUI_CW_COL_GROUP); - continue; - } - - fields[si].attrib = tbl->cols[i].attr_id; - if(tbl->cols[i].flags & KHUI_CW_COL_SORT_DEC) - fields[si].order = KCDB_CRED_COMP_DECREASING; - else - fields[si].order = KCDB_CRED_COMP_INCREASING; - - /* special case. if we are sorting by name, we group - initial tickets before non-initial tickets. - - Also, if we are sorting by credential type name, then - we allow the primary credential type first before - others. */ - - if (fields[si].attrib == KCDB_ATTR_NAME || - fields[si].attrib == KCDB_ATTR_TYPE_NAME) - fields[si].order |= KCDB_CRED_COMP_INITIAL_FIRST; - - if(si >= n) - n = si+1; - } - } - - /* we assume that the sort order is sane */ - /*TODO: don't assume; check if the sort order is sane */ - - comp_order.nFields = n; - comp_order.fields = fields; - - kcdb_credset_sort(tbl->credset, - kcdb_cred_comp_generic, - (void *) &comp_order); - - /* also, if new credentials were added, initialize the UI flag - attribute to 0 */ - if(delta & KCDB_DELTA_ADD) { - khm_size s; - - kcdb_credset_get_size(tbl->credset, &s); - for(i=0;i< (int) s;i++) { - if(KHM_FAILED(kcdb_credset_get_cred(tbl->credset, - (khm_int32) i, &hc))) - continue; /* lost a race */ - if(KHM_FAILED(kcdb_cred_get_attr(hc, khui_cw_flag_id, NULL, - NULL, NULL))) { - flags = 0; - kcdb_cred_set_attr(hc, khui_cw_flag_id, &flags, sizeof(flags)); - } - kcdb_cred_release(hc); - } - } - - /* refresh the per-identity information */ - for (i=0; i < (int) tbl->n_idents; i++) { - tbl->idents[i].credcount = 0; - tbl->idents[i].id_credcount = 0; - tbl->idents[i].init_credcount = 0; - tbl->idents[i].credtype_name[0] = L'\0'; - tbl->idents[i].credtype = KCDB_CREDTYPE_INVALID; - tbl->idents[i].ft_expire = IntToFt(0); - } - - kcdb_credset_apply(tbl->credset, cw_credset_iter_func, (void *) tbl); - - if (fields) - PFREE(fields); -} - -void -cw_del_outline(khui_credwnd_outline *o) { - khui_credwnd_outline * c; - if(!o) - return; - - /* the outline object is still in a list */ - if(o->next || o->prev) - return; - - if(o->header) - PFREE(o->header); - - if ((o->flags & KHUI_CW_O_DATAALLOC) && - o->data) - PFREE(o->data); - - if ((o->flags & KHUI_CW_O_RELIDENT) && - o->data) - kcdb_identity_release((khm_handle) o->data); - - LPOP(&(o->children), &c); - while(c) { - cw_del_outline(c); - LPOP(&(o->children), &c); - } - - ZeroMemory(o, sizeof(*o)); - PFREE(o); -} - -khui_credwnd_outline * -cw_new_outline_node(wchar_t * heading) { - khui_credwnd_outline * o; - size_t cblen; - - o = PMALLOC(sizeof(khui_credwnd_outline)); - ZeroMemory(o, sizeof(khui_credwnd_outline)); - - if(SUCCEEDED(StringCbLength(heading, KHUI_MAXCB_HEADING, &cblen))) { - cblen += sizeof(wchar_t); - o->header = PMALLOC(cblen); - StringCbCopy(o->header, cblen, heading); - } - o->start = -1; - - return o; -} - -/* buf is a handle to a credential or an identity. the kcdb_buf_* - functions work with either. */ -khm_int32 -cw_get_buf_exp_flags(khui_credwnd_tbl * tbl, khm_handle buf) -{ - khm_int32 flags; - long s; - FILETIME ft_expire; - FILETIME ft_current; - FILETIME ft_difference; - khm_size cbsize; - - cbsize = sizeof(ft_expire); - if(KHM_FAILED(kcdb_buf_get_attr(buf, KCDB_ATTR_EXPIRE, NULL, - &ft_expire, &cbsize))) - return 0; - - GetSystemTimeAsFileTime(&ft_current); - ft_difference = FtSub(&ft_expire, &ft_current); - - s = FtIntervalToSeconds(&ft_difference); - - flags = 0; - if(s < 0) - flags = CW_EXPSTATE_EXPIRED; - else if(s < tbl->threshold_critical) - flags = CW_EXPSTATE_CRITICAL; - else if(s < tbl->threshold_warn) - flags = CW_EXPSTATE_WARN; - else - flags = CW_EXPSTATE_NONE; - - return flags; -} - -VOID CALLBACK -cw_timer_proc(HWND hwnd, - UINT uMsg, - UINT_PTR idEvent, - DWORD dwTime) -{ - khui_credwnd_tbl * tbl; - khui_credwnd_row * r; - khm_int32 nflags; - int nr; - long ms; - FILETIME ft; - khm_size cbsize; - int timer_set = 0; - - KillTimer(hwnd, idEvent); - - tbl = (khui_credwnd_tbl *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (tbl == NULL) - return; - - r = (khui_credwnd_row *) idEvent; - nr = (int)(r - tbl->rows); - - if(nr < 0 || nr >= tbl->n_rows) - return; - - r->flags &= ~KHUI_CW_ROW_TIMERSET; - - if(r->flags & KHUI_CW_ROW_CRED) { - - nflags = cw_get_buf_exp_flags(tbl, (khm_handle) r->data); - if((r->flags & CW_EXPSTATE_MASK) != nflags) { - /* flags have changed */ - /* the outline needs to be updated */ - cw_update_outline(tbl); - InvalidateRect(tbl->hwnd, NULL, FALSE); - } else { - /* just invalidate the row */ - RECT rc,rr,ri; - - GetClientRect(tbl->hwnd, &rc); - rc.top += tbl->header_height; - - rr = r->r_ext; - OffsetRect(&rr, 0, tbl->header_height - tbl->scr_top); - - if(IntersectRect(&ri, &rc, &rr)) - InvalidateRect(tbl->hwnd, &ri, FALSE); - - cbsize = sizeof(ft); - if(KHM_SUCCEEDED(kcdb_cred_get_attr((khm_handle) r->data, - KCDB_ATTR_TIMELEFT, NULL, - &ft, &cbsize))) { - ms = FtIntervalMsToRepChange(&ft); - if(ms > 0) { - SetTimer(tbl->hwnd, (UINT_PTR) r, ms + 100, cw_timer_proc); - timer_set = 1; - } - } - - if (timer_set) - r->flags |= KHUI_CW_ROW_TIMERSET; - } - } else { - khui_credwnd_outline * o; - khui_credwnd_ident * cwi; - FILETIME ft_now; - - o = (khui_credwnd_outline *) r->data; - - /* we only handle timers for header rows if : - - 1. The table is displaying expanded identity information - 2. The row displaying an expanded view - 3. The relevant outline object is for an identity - - If these conditions aren't met, it is because we lost a - race killing this timer while switching modes. - */ - if (!(tbl->flags & KHUI_CW_TBL_EXPIDENT) || - !(r->flags & KHUI_CW_ROW_EXPVIEW) || - !(o->attr_id == KCDB_ATTR_ID)) - - return; - - nflags = cw_get_buf_exp_flags(tbl, (khm_handle) o->data); - if ((o->flags & CW_EXPSTATE_MASK) != nflags) { - cw_update_outline(tbl); - InvalidateRect(tbl->hwnd, NULL, FALSE); - } else { - RECT rc, rr, ri; - - GetClientRect(tbl->hwnd, &rc); - rc.top += tbl->header_height; - - rr = r->r_ext; - OffsetRect(&rr, 0, tbl->header_height - tbl->scr_top); - - if (IntersectRect(&ri, &rc, &rr)) - InvalidateRect(tbl->hwnd, &ri, FALSE); - - cwi = cw_find_ident(tbl, o->data); - - GetSystemTimeAsFileTime(&ft_now); - if (CompareFileTime(&cwi->ft_expire, &ft_now) > 0) { - ft = FtSub(&cwi->ft_expire, &ft_now); - ms = FtIntervalMsToRepChange(&ft); - if (ms > 0) { - SetTimer(tbl->hwnd, (UINT_PTR) r, ms + 100, cw_timer_proc); - timer_set = 1; - } - } - - if (timer_set) - r->flags |= KHUI_CW_ROW_TIMERSET; - } - } -} - -void -cw_set_tbl_row_cred(khui_credwnd_tbl * tbl, - int row, - khm_handle cred, - int col) -{ - FILETIME ft; - long ms; - khm_size cbsize; - - if((int) tbl->n_total_rows <= row) { - /* we need to resize the allocation */ - khui_credwnd_row * newrows; - int newsize; - - newsize = UBOUNDSS(row+1,KHUI_CW_ROW_INITIAL, KHUI_CW_ROW_INCREMENT); - newrows = PMALLOC(sizeof(khui_credwnd_row) * newsize); - memcpy(newrows, tbl->rows, sizeof(khui_credwnd_row) * tbl->n_rows); - PFREE(tbl->rows); - tbl->rows = newrows; - tbl->n_total_rows = newsize; - } - - tbl->rows[row].col = col; - tbl->rows[row].data = cred; - tbl->rows[row].flags = KHUI_CW_ROW_CRED; - - /* Set any required timer events */ - cbsize = sizeof(ft); - if(KHM_SUCCEEDED(kcdb_cred_get_attr(cred, KCDB_ATTR_TIMELEFT, NULL, &ft, &cbsize))) { - ms = FtIntervalMsToRepChange(&ft); - if(ms > 0) { - SetTimer(tbl->hwnd, (UINT_PTR) &(tbl->rows[row]), ms + 100, cw_timer_proc); - tbl->rows[row].flags |= KHUI_CW_ROW_TIMERSET; - } - } -} - -void -cw_set_tbl_row_header(khui_credwnd_tbl * tbl, - int row, int col, - khui_credwnd_outline * o) -{ - if((int) tbl->n_total_rows <= row) { - /* we need to resize the allocation */ - khui_credwnd_row * newrows; - int newsize; - - newsize = UBOUNDSS(row+1,KHUI_CW_ROW_INITIAL, KHUI_CW_ROW_INCREMENT); - newrows = PMALLOC(sizeof(khui_credwnd_row) * newsize); - memcpy(newrows, tbl->rows, sizeof(khui_credwnd_row) * tbl->n_rows); - PFREE(tbl->rows); - tbl->rows = newrows; - tbl->n_total_rows = newsize; - } - - tbl->rows[row].col = col; - tbl->rows[row].data = (khm_handle) o; - tbl->rows[row].flags = KHUI_CW_ROW_HEADER; - if(o->flags & KHUI_CW_O_SELECTED) - tbl->rows[row].flags |= KHUI_CW_ROW_SELECTED; - - /* if we are showing expanded identity information, we need to set - a timer so that we can update the identity row when the - identity changes. */ - if ((tbl->flags & KHUI_CW_TBL_EXPIDENT) && - tbl->cols[col].attr_id == KCDB_ATTR_ID_NAME) { - - khui_credwnd_ident * cwi; - - tbl->rows[row].flags |= KHUI_CW_ROW_EXPVIEW; - - cwi = cw_find_ident(tbl, o->data); - if (cwi && FtToInt(&cwi->ft_expire) != 0) { - FILETIME ft; - FILETIME ft_now; - - ft = cwi->ft_expire; - GetSystemTimeAsFileTime(&ft_now); - - if (CompareFileTime(&ft, &ft_now) > 0) { - long ms; - - ft = FtSub(&ft, &ft_now); - ms = FtIntervalMsToRepChange(&ft); - if (ms > 0) { - SetTimer(tbl->hwnd, (UINT_PTR) &(tbl->rows[row]), ms + 100, - cw_timer_proc); - tbl->rows[row].flags |= KHUI_CW_ROW_TIMERSET; - } - } - } - } -} - -static int -iwcscmp(const void * p1, const void * p2) { - const wchar_t * s1 = *(wchar_t **) p1; - const wchar_t * s2 = *(wchar_t **) p2; - - return wcscmp(s1, s2); -} - -#define MAX_GROUPING 256 - -static void -cw_update_outline(khui_credwnd_tbl * tbl) -{ - int i,j,n_rows; - int level; - int visible; - khm_size n_creds = 0; - khm_handle prevcred = NULL; - khm_handle thiscred = NULL; - /* grouping[0..n_grouping-1] are the columns that we are going to - group the display by. Say we are grouping by identity and then - by type, then grouping[0]=col# of identity and grouping[1]=col# - of type */ - khm_int32 grouping[MAX_GROUPING]; - khui_credwnd_outline * ol = NULL; - int n_grouping; - wchar_t buf[256]; - khm_size cbbuf; - khm_int32 flags; - int selected; - - /* this is called after calling cw_update_creds, so we assume - that the credentials are all loaded and sorted according to - grouping rules */ - - /* if the columns have changed, then any outline info we have - cached are unreliable */ - if(tbl->flags & KHUI_CW_TBL_COL_DIRTY) { - khui_credwnd_outline * o; - LPOP(&(tbl->outline), &o); - while(o) { - cw_del_outline(o); - LPOP(&(tbl->outline), &o); - } - tbl->n_rows = 0; - } - - /* Otherwise, we should reset the outline indices. Just the first - level is enough */ - if (tbl->outline) { - khui_credwnd_outline * o; - - o = tbl->outline; - while(o) { - o->start = -1; - o = LNEXT(o); - } - } - - /* determine the grouping order */ - n_grouping = min(MAX_GROUPING, tbl->n_cols); - for(i=0; i < n_grouping; i++) - grouping[i] = -1; - n_grouping = 0; - - for(i=0; i < (int) tbl->n_cols; i++) { - /* since cw_update_creds has run, the KHUI_CW_COL_GROUP flag - only exists for columns that has a valid sort_index */ - if(tbl->cols[i].flags & KHUI_CW_COL_GROUP) { -#ifdef DEBUG - assert(tbl->cols[i].sort_index < MAX_GROUPING); -#endif - if (tbl->cols[i].sort_index >= MAX_GROUPING) - continue; - - grouping[tbl->cols[i].sort_index] = i; - if(n_grouping <= tbl->cols[i].sort_index) - n_grouping = tbl->cols[i].sort_index + 1; - } - } - - /* if we have sorted by an index without grouping by it, we can't - establish any grouping beyond that index. */ - for(i=0; i < n_grouping; i++) { - if(grouping[i] == -1) - break; - } - n_grouping = i; - - if(!tbl->rows) { - /* we haven't allocated memory yet */ - tbl->n_total_rows = KHUI_CW_ROW_INITIAL; - tbl->n_rows = 0; - tbl->rows = PMALLOC(sizeof(khui_credwnd_row) * tbl->n_total_rows); - } else { - /* kill any pending timers */ - for(i=0; i < (int) tbl->n_rows; i++) - if(tbl->rows[i].flags & KHUI_CW_ROW_TIMERSET) { - KillTimer(tbl->hwnd, (UINT_PTR) &(tbl->rows[i])); - tbl->rows[i].flags &= ~KHUI_CW_ROW_TIMERSET; - } - } - - if(KHM_FAILED(kcdb_credset_get_size(tbl->credset, &n_creds))) - goto _exit; - - n_rows = 0; - prevcred = NULL; - ol = NULL; - - for(i=0; i < (int) n_creds; i++) { - if(KHM_FAILED(kcdb_credset_get_cred(tbl->credset, i, &thiscred))) - continue; - - /* if this credential appears to be the same as another for - this view, we skip it. */ - if(prevcred && n_grouping > 0) { - for(j=0; j < (int) tbl->n_cols; j++) { - if(kcdb_creds_comp_attr(prevcred, thiscred, - tbl->cols[j].attr_id)) - break; - } - - if(j >= (int) tbl->n_cols) { - if (n_rows > 0) { - tbl->rows[n_rows - 1].idx_end = i; - } - continue; - } - } - - if(!prevcred) - level = 0; - else { - for(j=0; j < n_grouping; j++) { - /* determine the grouping level at which thiscred - differs from prevcred */ - if(kcdb_creds_comp_attr(prevcred,thiscred, - tbl->cols[grouping[j]].attr_id)) - break; - } - level = j; - } - - /* now we have to walk up until we get to the parent of the - outline level we should be in */ - while(ol && ol->level >= level) { - - /* we are closing this outline level. */ - ol->length = n_rows - ol->start; - ol->idx_end = i - 1; - - if ((ol->flags & KHUI_CW_O_SELECTED) && - ol->length > 0) { - tbl->n_rows = n_rows; - cw_select_row_creds(tbl, ol->start, TRUE); - } - - ol = TPARENT(ol); - } - - if(ol) { - visible = (ol->flags & KHUI_CW_O_VISIBLE) && - (ol->flags & KHUI_CW_O_EXPAND); - selected = !!(ol->flags & KHUI_CW_O_SELECTED); - } else { - visible = TRUE; - selected = FALSE; - } - - /* now ol points to an outline node at the next highest level - or is NULL if level = 0 */ - - for(j=level; j < n_grouping; j++) { - khui_credwnd_outline * to; - /* now we search for an outline object at the next level - which matches the heading */ - cbbuf = sizeof(buf); - buf[0] = L'\0'; - if(KHM_FAILED - (kcdb_cred_get_attr_string(thiscred, - tbl->cols[grouping[j]].attr_id, - buf, &cbbuf, 0))) { - cbbuf = sizeof(wchar_t); - buf[0] = L'\0'; - } - - if(ol) - to = TFIRSTCHILD(ol); - else - to = tbl->outline; - - while(to) { - if(!wcscmp(buf, to->header)) - break; - to = LNEXT(to); - } - - if(to) { - /* found it */ - ol = to; - } else { - /* not found. create */ - to = cw_new_outline_node(buf); - if(ol) { - TADDCHILD(ol, to); - } else { - LPUSH(&(tbl->outline), to); - } - ol = to; - ol->flags = KHUI_CW_O_EXPAND; - ol->level = j; - ol->col = grouping[j]; - - if(tbl->cols[grouping[j]].attr_id == KCDB_ATTR_ID_NAME) { - khm_handle h; - if(KHM_SUCCEEDED(kcdb_identity_create(buf, 0, &h))) { - ol->attr_id = KCDB_ATTR_ID; - ol->data = (void *) h; - - /* the outline only lasts as long as the - credential, and the credential has a hold - on the identity. */ - kcdb_identity_release(h); - } - else - ol->data = 0; - } else if(tbl->cols[grouping[j]].attr_id == - KCDB_ATTR_TYPE_NAME) { - khm_int32 t; - - ol->attr_id = KCDB_ATTR_TYPE; - if(KHM_SUCCEEDED(kcdb_cred_get_type(thiscred, &t))) - ol->data = (void *)(ssize_t) t; - else - ol->data = (void *)(ssize_t) KCDB_CREDTYPE_INVALID; - } else { - khm_int32 rv; - khm_int32 alt_id; - kcdb_attrib * attrib; - - rv = - kcdb_attrib_get_info(tbl->cols[grouping[j]].attr_id, - &attrib); - assert(KHM_SUCCEEDED(rv)); - - if (attrib->flags & KCDB_ATTR_FLAG_ALTVIEW) - alt_id = attrib->alt_id; - else - alt_id = tbl->cols[grouping[j]].attr_id; - - ol->attr_id = alt_id; - - kcdb_attrib_release_info(attrib); - - rv = kcdb_cred_get_attr(thiscred, - alt_id, - NULL, - NULL, - &cbbuf); - if (rv != KHM_ERROR_TOO_LONG || cbbuf == 0) { - ol->data = NULL; - } else { - ol->data = PMALLOC(cbbuf); - assert(ol->data); - rv = kcdb_cred_get_attr(thiscred, - alt_id, - NULL, - ol->data, - &cbbuf); - assert(KHM_SUCCEEDED(rv)); - ol->cb_data = cbbuf; - ol->flags |= KHUI_CW_O_DATAALLOC; - } - } - } - - /* now ol points at the node at level j we want to be - in */ - ol->start = n_rows; - ol->length = 0; - ol->idx_start = i; - ol->idx_end = i; - ol->flags &= ~(CW_EXPSTATE_MASK | - KHUI_CW_O_SHOWFLAG | - KHUI_CW_O_STICKY | - KHUI_CW_O_EMPTY); - - /* if the outline node is for an identity, then we have to - check the expiration state for the identity. */ - - if (ol->attr_id == KCDB_ATTR_ID) { - khm_handle ident = (khm_handle) ol->data; - - flags = cw_get_buf_exp_flags(tbl, ident); - - if (flags) { - ol->flags |= flags; - ol->flags |= KHUI_CW_O_SHOWFLAG; - } else if (grouping[j] == tbl->n_cols - 1) { - /* if we aren't showing any creds under this - outline level, we should also show any - flags. */ - ol->flags |= KHUI_CW_O_SHOWFLAG; - } - } - - if (grouping[j] == tbl->n_cols - 1) { - ol->flags |= KHUI_CW_O_NOOUTLINE; - } else { - ol->flags &= ~KHUI_CW_O_NOOUTLINE; - } - - if(selected) { - ol->flags |= KHUI_CW_O_SELECTED; - } - if(visible) { - cw_set_tbl_row_header(tbl, n_rows, grouping[j], ol); - n_rows ++; - ol->flags |= KHUI_CW_O_VISIBLE; - } else { - ol->flags &= ~KHUI_CW_O_VISIBLE; - } - visible = visible && (ol->flags & KHUI_CW_O_EXPAND); - selected = (selected || (ol->flags & KHUI_CW_O_SELECTED)); - } - - /* we need to do this here too just in case we were already at - the level we were supposed to be in */ - if (ol) { - visible = visible && (ol->flags & KHUI_CW_O_EXPAND); - selected = (selected || (ol->flags & KHUI_CW_O_SELECTED)); - } - - if(visible && n_grouping > 0 && - grouping[n_grouping - 1] < tbl->n_cols - 1) { - khm_int32 c_flags; - - cw_set_tbl_row_cred(tbl, n_rows, thiscred, - grouping[n_grouping-1]); - - flags = cw_get_buf_exp_flags(tbl, thiscred); - if(flags) { - tbl->rows[n_rows].flags |= flags; - } - - kcdb_cred_get_flags(thiscred, &c_flags); - if(selected || - (c_flags & KCDB_CRED_FLAG_SELECTED)) { - tbl->rows[n_rows].flags |= KHUI_CW_ROW_SELECTED; - } - - tbl->rows[n_rows].idx_start = i; - tbl->rows[n_rows].idx_end = i; - - n_rows++; - } - - if(prevcred) - kcdb_cred_release(prevcred); - prevcred = thiscred; - } - - while(ol) { - /* close all open outline levels */ - - ol->length = n_rows - ol->start; - ol->idx_end = i - 1; - - if ((ol->flags & KHUI_CW_O_SELECTED) && - ol->length > 0) { - tbl->n_rows = n_rows; - cw_select_row_creds(tbl, ol->start, TRUE); - } - - ol = TPARENT(ol); - } - - if(prevcred) { - kcdb_cred_release(prevcred); - prevcred = NULL; - } - - /* Add any default identities with no credentials and sticky - identities that we haven't seen yet */ - if (n_grouping > 0 && - tbl->cols[grouping[0]].attr_id == KCDB_ATTR_ID_NAME) { - - khui_credwnd_outline * o; - wchar_t * idnames = NULL; - wchar_t * t; - khm_size n_idents; - khm_size cb_names; - wchar_t ** idarray = NULL; - int i; - - khm_int32 and_flags = 0; - khm_int32 eq_flags = 0; - - /* see if the default identity is in the list */ - { - khm_handle id_def = NULL; - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - khm_size cb; - khm_int32 flags; - - if (KHM_FAILED(kcdb_identity_get_default(&id_def))) { - goto done_with_defident; - } - - kcdb_identity_get_flags(id_def, &flags); - cb = sizeof(idname); - kcdb_identity_get_name(id_def, idname, &cb); - - for (o = tbl->outline; o; o = LNEXT(o)) { - if (!wcscmp(idname, o->header)) - break; - } - - if (o == NULL) { - o = cw_new_outline_node(idname); - LPUSH(&tbl->outline, o); - o->flags = KHUI_CW_O_RELIDENT; - o->level = 0; - o->col = grouping[0]; - o->data = id_def; - o->attr_id = KCDB_ATTR_ID; - o->start = -1; - } else { - kcdb_identity_release(id_def); - } - - if (o->start != -1) - goto done_with_defident; - - o->flags &= ~(KHUI_CW_O_SHOWFLAG | - KHUI_CW_O_NOOUTLINE | - KHUI_CW_O_STICKY); - o->flags |= KHUI_CW_O_EXPAND | KHUI_CW_O_VISIBLE | KHUI_CW_O_EMPTY; - - if (flags & KCDB_IDENT_FLAG_STICKY) - o->flags |= KHUI_CW_O_STICKY; - - o->start = n_rows; - o->length = 1; - o->idx_start = (khm_size) -1; - o->idx_end = (khm_size) -1; - - if (grouping[0] == tbl->n_cols - 1) - o->flags |= KHUI_CW_O_NOOUTLINE; - - cw_set_tbl_row_header(tbl, n_rows, grouping[0], o); - - n_rows ++; - - done_with_defident: - ; - } - - if (tbl->view_all_idents) { - and_flags = 0; - eq_flags = 0; - } else { - and_flags = KCDB_IDENT_FLAG_STICKY; - eq_flags = KCDB_IDENT_FLAG_STICKY; - } - - if (kcdb_identity_enum(and_flags, - eq_flags, - NULL, - &cb_names, - &n_idents) != KHM_ERROR_TOO_LONG || - n_idents == 0 || - cb_names == 0) - goto _cleanup_sticky; - - idnames = PMALLOC(cb_names); - idarray = PMALLOC(n_idents * sizeof(*idarray)); -#ifdef DEBUG - assert(idnames); - assert(idarray); -#endif - - if (KHM_FAILED(kcdb_identity_enum(and_flags, - eq_flags, - idnames, - &cb_names, - &n_idents))) - goto _cleanup_sticky; - - for (i=0, t=idnames; t && *t; t = multi_string_next(t), i++) { - idarray[i] = t; - } - - qsort(idarray, n_idents, sizeof(*idarray), iwcscmp); - - for (i=0; i < (int) n_idents; i++) { - khm_handle h; - khm_int32 f_sticky; - khm_int32 flags; - - if (KHM_FAILED(kcdb_identity_create(idarray[i], - KCDB_IDENT_FLAG_CREATE, &h))) - continue; - - kcdb_identity_get_flags(h, &flags); - - if (flags & KCDB_IDENT_FLAG_STICKY) - f_sticky = KHUI_CW_O_STICKY; - else - f_sticky = 0; - - for (o = tbl->outline; o; o = LNEXT(o)) { - if (!wcscmp(idarray[i], o->header)) - break; - } - - if (o) { - /* found it */ - if (o->start != -1) /* already visible? */ - continue; - o->flags &= (KHUI_CW_O_RELIDENT | KHUI_CW_O_SELECTED); - o->flags |= f_sticky | KHUI_CW_O_VISIBLE | KHUI_CW_O_EMPTY; - - if (!kcdb_identity_is_equal(o->data, h)) { - if (o->flags & KHUI_CW_O_RELIDENT) - kcdb_identity_release(o->data); - o->data = h; - o->flags |= KHUI_CW_O_RELIDENT; - kcdb_identity_hold(h); - } - } else { - /* not found. create */ - o = cw_new_outline_node(idarray[i]); - LPUSH(&tbl->outline, o); - o->flags = f_sticky | KHUI_CW_O_VISIBLE | KHUI_CW_O_EMPTY | KHUI_CW_O_RELIDENT; - o->level = 0; - o->col = grouping[0]; - o->data = h; - kcdb_identity_hold(h); - o->attr_id = KCDB_ATTR_ID; - } - - if (grouping[0] == tbl->n_cols - 1) - o->flags |= KHUI_CW_O_NOOUTLINE; - - kcdb_identity_release(h); - - o->flags &= ~KHUI_CW_O_EXPAND; - o->start = n_rows; - o->length = 1; - o->idx_start = (khm_size) -1; - o->idx_end = (khm_size) -1; - - cw_set_tbl_row_header(tbl, n_rows, grouping[0], o); - - n_rows ++; - } - - _cleanup_sticky: - if (idnames) - PFREE(idnames); - if (idarray) - PFREE(idarray); - } - - tbl->n_rows = n_rows; - tbl->flags |= KHUI_CW_TBL_ROW_DIRTY; - - tbl->flags &= ~KHUI_CW_TBL_COL_DIRTY; - - if (tbl->cursor_row >= tbl->n_rows) - tbl->cursor_row = tbl->n_rows - 1; - if (tbl->cursor_row < 0) - tbl->cursor_row = 0; - -_exit: - - { - khm_handle def_ident = NULL; - khm_int32 def_expstate = 0; - khm_boolean def_empty = TRUE; - - kcdb_identity_get_default(&def_ident); - if (def_ident) { - khui_credwnd_ident * cwi; - - cwi = cw_find_ident(tbl, def_ident); - if (cwi) { - def_empty = (cwi->id_credcount == 0); - } - - def_expstate = cw_get_buf_exp_flags(tbl, def_ident); - } - - if (def_empty) - khm_notify_icon_expstate(KHM_NOTIF_EMPTY); - else if ((def_expstate & CW_EXPSTATE_EXPIRED) == CW_EXPSTATE_EXPIRED) - khm_notify_icon_expstate(KHM_NOTIF_EXP); - else if ((def_expstate & CW_EXPSTATE_WARN) == CW_EXPSTATE_WARN || - (def_expstate & CW_EXPSTATE_CRITICAL) == CW_EXPSTATE_CRITICAL) - khm_notify_icon_expstate(KHM_NOTIF_WARN); - else - khm_notify_icon_expstate(KHM_NOTIF_OK); - } -} - -void -cw_unload_view(khui_credwnd_tbl * tbl) -{ -#define SafeDeleteObject(o) \ - do { \ - if(o) { \ - DeleteObject(o); \ - o = NULL; \ - } \ - } while(0) - - SafeDeleteObject(tbl->hf_header); - SafeDeleteObject(tbl->hf_normal); - SafeDeleteObject(tbl->hf_bold); - SafeDeleteObject(tbl->hf_bold_header); - - SafeDeleteObject(tbl->hb_grey); - SafeDeleteObject(tbl->hb_normal); - SafeDeleteObject(tbl->hb_s); - - SafeDeleteObject(tbl->hb_hdr_bg); - SafeDeleteObject(tbl->hb_hdr_bg_crit); - SafeDeleteObject(tbl->hb_hdr_bg_exp); - SafeDeleteObject(tbl->hb_hdr_bg_warn); - SafeDeleteObject(tbl->hb_hdr_bg_cred); - - SafeDeleteObject(tbl->hb_hdr_bg_s); - SafeDeleteObject(tbl->hb_hdr_bg_crit_s); - SafeDeleteObject(tbl->hb_hdr_bg_exp_s); - SafeDeleteObject(tbl->hb_hdr_bg_warn_s); - SafeDeleteObject(tbl->hb_hdr_bg_cred_s); - -#undef SafeDeleteObject - - if (tbl->hi_lg_ident) { - DestroyIcon(tbl->hi_lg_ident); - tbl->hi_lg_ident = NULL; - } - - if(tbl->credset) { - kcdb_credset_delete(tbl->credset); - tbl->credset = NULL; - } - if(tbl->ilist) { - khui_delete_ilist(tbl->ilist); - tbl->ilist = NULL; - } - - if(tbl->cols) { - int i; - - for(i=0; i < tbl->n_cols; i++) { - if(tbl->cols[i].title) - PFREE(tbl->cols[i].title); - Header_DeleteItem(tbl->hwnd_header, 0); - - if (tbl->cols[i].attr_id >= 0 && - tbl->cols[i].attr_id <= KCDB_ATTR_MAX_ID && - attr_to_action[tbl->cols[i].attr_id]) { - - khui_check_action(attr_to_action[tbl->cols[i].attr_id], FALSE); - - } - } - PFREE(tbl->cols); - tbl->cols = NULL; - tbl->n_cols = 0; - tbl->n_total_cols = 0; - - kmq_post_message(KMSG_ACT, KMSG_ACT_REFRESH, 0, 0); - } - - if(tbl->rows) { - PFREE(tbl->rows); - tbl->rows = NULL; - tbl->n_rows = 0; - tbl->n_total_rows = 0; - } - - khui_delete_bitmap(&tbl->kbm_logo_shade); - - if (tbl->csp_view) { - khc_close_space(tbl->csp_view); - tbl->csp_view = NULL; - } - - tbl->cell_height = 0; /* recalculate cell height next time */ - - if (tbl->idents) { - khm_size i; - - for (i=0; i < tbl->n_idents; i++) { - if (tbl->idents[i].ident) { - kcdb_identity_release(tbl->idents[i].ident); - } - } - - PFREE(tbl->idents); - tbl->idents = NULL; - tbl->n_idents = 0; - tbl->nc_idents = 0; - } -} - -void -cw_hditem_from_tbl_col(khui_credwnd_col * col, HDITEM *phi) -{ - size_t cchsize; - - phi->mask = HDI_FORMAT | HDI_LPARAM | HDI_WIDTH; - if(cw_is_custom_attr(col->attr_id)) { - if(col->attr_id == CW_CA_FLAGS) { - phi->fmt = 0; - } else if(col->attr_id == CW_CA_TYPEICON) { - phi->fmt = 0; - } else { - /* what the? */ - /*TODO: throw up and die */ - } - } else { - phi->mask |= HDI_TEXT; - phi->pszText = col->title; - StringCchLength(col->title, KCDB_MAXCCH_SHORT_DESC, &cchsize); - phi->cchTextMax = (int) cchsize; - phi->fmt = HDF_CENTER | HDF_STRING; - } - phi->lParam = col->attr_id; -#if (_WIN32_WINNT >= 0x501) - if (IS_COMMCTL6()) { - if(col->flags & KHUI_CW_COL_SORT_INC) { - phi->fmt |= HDF_SORTUP; - } else if(col->flags & KHUI_CW_COL_SORT_DEC) { - phi->fmt |= HDF_SORTDOWN; - } - } -#endif - if(col->width < 0) { - /*TODO: come up with a better way to handle this case */ - col->width = 200; - } - phi->cxy = col->width; -} - -int -cw_get_cell_height(HDC hdc, HFONT hf) { - SIZE size; - size_t cbbuf; - wchar_t buf[64]; - HFONT hfold = NULL; - - if (hf) - hfold = SelectFont(hdc, hf); - - LoadString(khm_hInstance, IDS_SAMPLE_STRING, buf, sizeof(buf)/sizeof(buf[0])); - StringCchLength(buf, sizeof(buf)/sizeof(buf[0]), &cbbuf); - GetTextExtentPoint32(hdc, buf, (int) cbbuf, &size); - - if (hf) - SelectFont(hdc, hfold); - - return size.cy; -} - -int -cw_update_header_column_width(khui_credwnd_tbl * tbl, int c) { - int idx; - HDITEM hi; - -#ifdef DEBUG - assert(c >= 0 && c < tbl->n_cols); -#endif - - if (tbl->hwnd_header == NULL) - return 0; - - idx = Header_OrderToIndex(tbl->hwnd_header, c); - ZeroMemory(&hi, sizeof(hi)); - hi.mask = HDI_WIDTH; - hi.cxy = tbl->cols[c].width; - return Header_SetItem(tbl->hwnd_header, idx, &hi); -} - -/* returns a bitmask indicating which measures were changed */ -int -cw_update_extents(khui_credwnd_tbl * tbl, - khm_boolean update_scroll) { - int ext_x = 0; - int ext_y = 0; - int i; - int filler_col = -1; - int fill_adjusted = 0; - - recompute_columns: - - ext_x = 0; - for(i=0; i < (int) tbl->n_cols; i++) { - tbl->cols[i].x = ext_x; - if (tbl->cols[i].flags & KHUI_CW_COL_FILLER) { - if (filler_col == -1) - filler_col = i; - } - ext_x += tbl->cols[i].width; - } - - if (filler_col != -1 && !fill_adjusted) { - RECT r; - int delta; - - GetClientRect(tbl->hwnd, &r); - - /* we decrement the width so that the width data area is - strictly less than the width of the client area. Windows - doesn't disable a scrollbar unless the range is strictly - less than the page size. */ - delta = ((r.right - r.left) - 1) - ext_x; - - if (tbl->cols[filler_col].width + delta <= GetSystemMetrics(SM_CXSMICON)) { - tbl->cols[filler_col].width = GetSystemMetrics(SM_CXICON); - } else { - tbl->cols[filler_col].width += delta; - } - - cw_update_header_column_width(tbl, filler_col); - - fill_adjusted = 1; - goto recompute_columns; - } - - if(!tbl->cell_height) { - HDC dc; - int maxheight = 0; - int height; - - dc = GetWindowDC(tbl->hwnd); - - maxheight = cw_get_cell_height(dc, tbl->hf_normal); - height = cw_get_cell_height(dc, tbl->hf_bold); - if (height > maxheight) - maxheight = height; - height = cw_get_cell_height(dc, tbl->hf_header); - if (height > maxheight) - maxheight = height; - height = cw_get_cell_height(dc, tbl->hf_bold_header); - if (height > maxheight) - maxheight = height; - - ReleaseDC(tbl->hwnd, dc); - - tbl->cell_height = height + tbl->vpad * 2; - } - - if (tbl->flags & KHUI_CW_TBL_EXPIDENT) { - RECT r; - - ext_y = 0; - r.left = 0; - r.right = ext_x; - - for (i=0; i < (int) tbl->n_rows; i++) { - r.top = ext_y; - if (tbl->rows[i].flags & KHUI_CW_ROW_EXPVIEW) { - ext_y += tbl->cell_height * CW_EXP_ROW_MULT; - } else { - ext_y += tbl->cell_height; - } - r.bottom = ext_y; - tbl->rows[i].r_ext = r; - } - } else { - RECT r; - - r.left = 0; - r.right = ext_x; - - for (i=0; i < (int) tbl->n_rows; i++) { - r.top = i * tbl->cell_height; - r.bottom = r.top + tbl->cell_height; - - tbl->rows[i].r_ext = r; - } - - ext_y = (int) tbl->n_rows * tbl->cell_height; - } - - tbl->ext_width = ext_x; - tbl->ext_height = ext_y; - - /* useful in the future when implementing variable height rows. - The KHUI_CW_TBL_ROW_DIRTY bit indicates that the rows have - changed and that the y extent has to be recalculated. */ - tbl->flags &= ~KHUI_CW_TBL_ROW_DIRTY; - - if(update_scroll) { - RECT r; - int cl_w; - int cl_h; - SCROLLINFO si; - WINDOWPOS pw; - HDLAYOUT hdl; - - /* update the header control first */ - - retry_update_scroll: - GetClientRect(tbl->hwnd, &r); - - cl_w = r.right - r.left; - cl_h = (r.bottom - r.top); - cl_h -= tbl->header_height; - - if(tbl->scr_top < 0 || tbl->ext_height < cl_h) - tbl->scr_top = 0; - else if(tbl->scr_top > tbl->ext_height - cl_h) - tbl->scr_top = tbl->ext_height - cl_h; - if(tbl->scr_left < 0 || tbl->ext_width < cl_w) - tbl->scr_left = 0; - else if(tbl->scr_left > tbl->ext_width - cl_w) - tbl->scr_left = tbl->ext_width - cl_w; - - /* adjustments for scrolling */ - r.left -= tbl->scr_left; - r.right = max(tbl->ext_width + r.left, r.right); - - hdl.prc = &r; - hdl.pwpos = &pw; - - Header_Layout(tbl->hwnd_header, &hdl); - - if(tbl->header_height == 0) { - tbl->header_height = pw.cy; - goto retry_update_scroll; - } else - tbl->header_height = pw.cy; - - SetWindowPos( - tbl->hwnd_header, - pw.hwndInsertAfter, - pw.x, - pw.y, - pw.cx, - pw.cy, - pw.flags); - - si.cbSize = sizeof(si); - si.nMin = 0; - si.nMax = tbl->ext_height; - si.nPage = cl_h; - si.nPos = tbl->scr_top; - si.fMask = SIF_ALL | SIF_DISABLENOSCROLL; - SetScrollInfo(tbl->hwnd, SB_VERT, &si, TRUE); - - si.cbSize = sizeof(si); - si.nMin = 0; - si.nMax = tbl->ext_width; - si.nPage = cl_w; - si.nPos = tbl->scr_left; - si.fMask = SIF_ALL | SIF_DISABLENOSCROLL; - SetScrollInfo(tbl->hwnd, SB_HORZ, &si, TRUE); - } - - return 0; -} - -void -cw_insert_header_cols(khui_credwnd_tbl * tbl) { - HWND hdr; - HDITEM hi; - int i; - - hdr = tbl->hwnd_header; - - for(i=0; i < (int) tbl->n_cols; i++) { - cw_hditem_from_tbl_col(&(tbl->cols[i]), &hi); - Header_InsertItem(hdr, 512, &hi); - } -} - -#define CW_ER_BLANK 0 -#define CW_ER_GREY 1 -#define CW_ER_SEL 2 - -#pragma warning(push) -#pragma warning(disable: 4701) -void -cw_erase_rect(HDC hdc, - khui_credwnd_tbl * tbl, - RECT * r_wnd, - RECT * r_erase, - int type) -{ - RECT rlogo; - RECT ri; - RECT t; - BOOL rie; - HBRUSH hbr; - - switch(type) { - case CW_ER_BLANK: - hbr = tbl->hb_normal; - break; - - case CW_ER_GREY: - hbr = tbl->hb_grey; - break; - - case CW_ER_SEL: - hbr = tbl->hb_s; - break; - - default: - return; - } - - if(tbl->kbm_logo_shade.cx != -1 && type == CW_ER_BLANK) { - rlogo.left = r_wnd->right - tbl->kbm_logo_shade.cx; - rlogo.right = r_wnd->right; - rlogo.top = r_wnd->bottom - tbl->kbm_logo_shade.cy; - rlogo.bottom = r_wnd->bottom; - if (bHideWatermarks) {rie = FALSE;} - else {rie = IntersectRect(&ri, r_erase, &rlogo);} - } else { - ZeroMemory(&rlogo, sizeof(rlogo)); - ZeroMemory(&ri, sizeof(ri)); - rie = FALSE; - } - - if(!rie) { - FillRect(hdc, r_erase, hbr); - } else { - HDC hdcb = CreateCompatibleDC(hdc); - HBITMAP hbmold = SelectObject(hdcb, tbl->kbm_logo_shade.hbmp); - - BitBlt(hdc, ri.left, ri.top, ri.right - ri.left, ri.bottom - ri.top, - hdcb, ri.left - rlogo.left, ri.top - rlogo.top, SRCCOPY); - - SelectObject(hdcb, hbmold); - DeleteDC(hdcb); - - if(r_erase->top < ri.top && r_erase->left < ri.left) { - t.left = r_erase->left; - t.top = r_erase->top; - t.right = ri.left; - t.bottom = ri.top; - FillRect(hdc, &t, hbr); - } - - if(r_erase->left < ri.left) { - t.left = r_erase->left; - t.top = ri.top; - t.right = ri.left; - t.bottom = ri.bottom; - FillRect(hdc, &t, hbr); - } - - if(r_erase->top < ri.top) { - t.left = ri.left; - t.top = r_erase->top; - t.right = ri.right; - t.bottom = ri.top; - FillRect(hdc, &t, hbr); - } - } -} -#pragma warning(pop) - -void -cw_draw_header(HDC hdc, - khui_credwnd_tbl * tbl, - int row, - RECT * r) -{ - int colattr; - HPEN pl, pold; - khui_credwnd_row * cr; - khui_credwnd_outline * o; - int selected = 0; - khm_int32 idf = 0; - khui_credwnd_ident * cwi = NULL; - - /* each header consists of a couple of widgets and some text */ - /* we need to figure out the background color first */ - - cr = &(tbl->rows[row]); - o = (khui_credwnd_outline *) cr->data; - - colattr = tbl->cols[cr->col].attr_id; - - if (colattr == KCDB_ATTR_ID_NAME) { - khm_handle ident = o->data; - - kcdb_identity_get_flags(ident, &idf); - cwi = cw_find_ident(tbl, ident); - } - - selected = o->flags & KHUI_CW_O_SELECTED; - - { - HBRUSH hbr; - - if(selected) { - if ((o->flags & CW_EXPSTATE_MASK) == CW_EXPSTATE_EXPIRED) - hbr = tbl->hb_hdr_bg_exp_s; - else if ((o->flags & CW_EXPSTATE_MASK) == CW_EXPSTATE_CRITICAL) - hbr = tbl->hb_hdr_bg_crit_s; - else if ((o->flags & CW_EXPSTATE_MASK) == CW_EXPSTATE_WARN) - hbr = tbl->hb_hdr_bg_warn_s; - else if ((colattr == KCDB_ATTR_ID_NAME) && !(o->flags & KHUI_CW_O_EMPTY) && - cwi && cwi->id_credcount > 0) - hbr = tbl->hb_hdr_bg_cred_s; - else - hbr = tbl->hb_hdr_bg_s; - } else { - if ((o->flags & CW_EXPSTATE_MASK) == CW_EXPSTATE_EXPIRED) - hbr = tbl->hb_hdr_bg_exp; - else if ((o->flags & CW_EXPSTATE_MASK) == CW_EXPSTATE_CRITICAL) - hbr = tbl->hb_hdr_bg_crit; - else if ((o->flags & CW_EXPSTATE_MASK) == CW_EXPSTATE_WARN) - hbr = tbl->hb_hdr_bg_warn; - else if ((colattr == KCDB_ATTR_ID_NAME) && !(o->flags & KHUI_CW_O_EMPTY) && - cwi && cwi->id_credcount > 0) - hbr = tbl->hb_hdr_bg_cred; - else - hbr = tbl->hb_hdr_bg; - } - - FillRect(hdc, r, hbr); - } - - /* draw the background */ - pl = CreatePen(PS_SOLID, 0, tbl->cr_hdr_outline); - pold = SelectObject(hdc, pl); - MoveToEx(hdc, r->left, r->bottom - 1, NULL); - LineTo(hdc,r->right,r->bottom - 1); - SelectObject(hdc, pold); - DeleteObject(pl); - - if (!(o->flags & KHUI_CW_O_NOOUTLINE) && - !(o->flags & KHUI_CW_O_EMPTY)) { - if((tbl->mouse_state & CW_MOUSE_WOUTLINE) && - tbl->mouse_row == row) { - if(o->flags & KHUI_CW_O_EXPAND) { - khui_ilist_draw_id(tbl->ilist, IDB_WDG_EXPAND_HI, - hdc, r->left, - (r->top + r->bottom - KHUI_SMICON_CY) / 2, 0); - } else { - khui_ilist_draw_id(tbl->ilist, IDB_WDG_COLLAPSE_HI, - hdc, r->left, - (r->top + r->bottom - KHUI_SMICON_CY) / 2, 0); - } - } else { - if(o->flags & KHUI_CW_O_EXPAND) { - khui_ilist_draw_id(tbl->ilist, IDB_WDG_EXPAND, - hdc, r->left, - (r->top + r->bottom - KHUI_SMICON_CY) / 2, 0); - } else { - khui_ilist_draw_id(tbl->ilist, IDB_WDG_COLLAPSE, - hdc, r->left, - (r->top + r->bottom - KHUI_SMICON_CY) / 2, 0); - } - } - - r->left += KHUI_SMICON_CX * 3 / 2; - } else if (!(o->flags & KHUI_CW_O_NOOUTLINE)) { - r->left += KHUI_SMICON_CX * 3 / 2; - } - - /* try to draw the icon, if there is one */ - if(colattr == KCDB_ATTR_ID_NAME) { - - khui_ilist_draw_id(tbl->ilist, - (((tbl->mouse_state & CW_MOUSE_WSTICKY) && - tbl->mouse_row == row)? - ((idf & KCDB_IDENT_FLAG_STICKY)? - IDB_WDG_STUCK_HI: - IDB_WDG_STICK_HI): - ((idf & KCDB_IDENT_FLAG_STICKY)? - IDB_WDG_STUCK: - IDB_WDG_STICK)), - hdc, - r->left, - (r->top + r->bottom - KHUI_SMICON_CY) / 2, 0); - - r->left += KHUI_SMICON_CX * 3 / 2; - - /* the TRUE part of the 'if' is for drawing large icons. It's - disabled for now until we have new icons. */ - if ((cr->flags & KHUI_CW_ROW_EXPVIEW) && FALSE) { - int cx = GetSystemMetrics(SM_CXICON); - int cy = GetSystemMetrics(SM_CYICON); - - DrawIcon(hdc, r->left, (r->top + r->bottom - cy) / 2, tbl->hi_lg_ident); - - r->left += cx + KHUI_SMICON_CX / 2; - - } else { - khui_ilist_draw_id(tbl->ilist, - (((o->flags & KHUI_CW_O_EMPTY) || - cwi == NULL || cwi->id_credcount == 0)? - IDB_ID_DIS_SM: - IDB_ID_SM), - hdc, - r->left, - (r->top + r->bottom - KHUI_SMICON_CY) / 2, 0); - r->left += KHUI_SMICON_CX * 3 / 2 ; - } - } - - - if (!(cr->flags & KHUI_CW_ROW_EXPVIEW)) { - - SetTextAlign(hdc, TA_BOTTOM | TA_LEFT); - - if(selected) - SetTextColor(hdc, tbl->cr_hdr_s); - else - SetTextColor(hdc, tbl->cr_hdr_normal); - - TextOut(hdc, r->left, r->bottom - tbl->vpad, o->header, (int) wcslen(o->header)); - - if (colattr == KCDB_ATTR_ID_NAME && - (idf & KCDB_IDENT_FLAG_DEFAULT)) { - wchar_t defstr[64]; - SIZE size; - - LoadString(khm_hInstance, IDS_CW_DEFAULT, - defstr, ARRAYLENGTH(defstr)); - - GetTextExtentPoint32(hdc, o->header, (int) wcslen(o->header), - &size); - - r->left += size.cx + KHUI_SMICON_CX * 2; - - TextOut(hdc, r->left, r->bottom - tbl->vpad, - defstr, (int) wcslen(defstr)); - } - } else { - - RECT tr; - int len; - wchar_t typestr[128]; - int cx_id; - SIZE size; - - /* expanded view */ -#ifdef DEBUG - assert(colattr == KCDB_ATTR_ID_NAME); -#endif - - CopyRect(&tr, r); - tr.bottom -= (tr.bottom - tr.top) / 2; /* drawing two lines of text */ - - if (selected) - SetTextColor(hdc, tbl->cr_hdr_s); - else - SetTextColor(hdc, tbl->cr_hdr_normal); - - len = (int) wcslen(o->header); - DrawText(hdc, o->header, len, &tr, DT_LEFT | DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS); - GetTextExtentPoint32(hdc, o->header, (int) len, &size); - cx_id = size.cx; - - typestr[0] = L'\0'; - - if ((idf & KCDB_IDENT_FLAG_DEFAULT)) { - if (cwi && cwi->credtype_name[0]) { - wchar_t fmt[64]; - - LoadString(khm_hInstance, IDS_CW_DEFAULTTF, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(typestr, sizeof(typestr), fmt, - cwi->credtype_name); - } else { - LoadString(khm_hInstance, IDS_CW_DEFAULT, - typestr, ARRAYLENGTH(typestr)); - } - } else if (cwi && cwi->credtype_name[0]) { - wchar_t fmt[64]; - - LoadString(khm_hInstance, IDS_CW_TYPEF, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(typestr, sizeof(typestr), fmt, - cwi->credtype_name); - } - - if (typestr[0]) { - int cx_str; - - len = (int) wcslen(typestr); - GetTextExtentPoint32(hdc, typestr, (int) len, &size); - cx_str = size.cx + KHUI_SMICON_CX / 2; - - tr.left = max(tr.right - cx_str, tr.left + cx_id + KHUI_SMICON_CX * 2); - if (selected) - SetTextColor(hdc, tbl->cr_hdr_s); - else - SetTextColor(hdc, tbl->cr_hdr_normal); - DrawText(hdc, typestr, len, &tr, DT_LEFT | DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS); - } - - CopyRect(&tr, r); - tr.top += (tr.bottom - tr.top) / 2; - - if (1) { - wchar_t buf[128]; - khui_credwnd_ident * cwi; - - buf[0] = L'\0'; - cwi = cw_find_ident(tbl, o->data); - - if (cwi) { -#ifdef SHOW_CREDENTIAL_COUNTS - if (cwi->credcount == 0) - LoadString(khm_hInstance, IDS_IDEXPDISP_NOCRED, - buf, ARRAYLENGTH(buf)); - else if (cwi->credcount == 1) - LoadString(khm_hInstance, IDS_IDEXPDISP_1CRED, - buf, ARRAYLENGTH(buf)); - else { - wchar_t fmt[128]; - LoadString(khm_hInstance, IDS_IDEXPDISP_NCRED, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(buf, sizeof(buf), fmt, (int) cwi->credcount); - } -#else - if (FtToInt(&cwi->ft_expire) != 0) { - FILETIME ft_now; - - GetSystemTimeAsFileTime(&ft_now); - if (CompareFileTime(&cwi->ft_expire, &ft_now) > 0) { - wchar_t fmt[64]; - wchar_t intstr[128]; - FILETIME ft; - khm_size cb; - - ft = FtSub(&cwi->ft_expire, &ft_now); - intstr[0] = L'\0'; - cb = sizeof(intstr); - FtIntervalToString(&ft, intstr, &cb); - - LoadString(khm_hInstance, IDS_CW_EXPIREF, - fmt, ARRAYLENGTH(fmt)); - StringCbPrintf(buf, sizeof(buf), fmt, intstr); - } else { - LoadString(khm_hInstance, IDS_CW_EXPIRED, - buf, ARRAYLENGTH(buf)); - } - } -#endif - - len = (int) wcslen(buf); - - if (selected) - SetTextColor(hdc, tbl->cr_hdr_s); - else - SetTextColor(hdc, tbl->cr_hdr_normal); - DrawText(hdc, buf, len, &tr, DT_LEFT | DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS); - } - } - } -} - -LRESULT -cw_handle_header_msg(khui_credwnd_tbl * tbl, LPNMHEADER ph) { - HDITEM hi; - - switch(ph->hdr.code) { - /*TODO:Make it track smoother */ - case HDN_BEGINTRACK: - { - ZeroMemory(&hi, sizeof(hi)); - hi.mask = HDI_ORDER; - Header_GetItem(tbl->hwnd_header, ph->iItem, &hi); - - if (tbl->cols[hi.iOrder].flags & (KHUI_CW_COL_FIXED_WIDTH | - KHUI_CW_COL_FILLER)) - return TRUE; - else - return FALSE; - } - - case HDN_TRACK: - return FALSE; - - case HDN_ENDTRACK: - { - hi.mask = HDI_ORDER; - Header_GetItem(ph->hdr.hwndFrom, ph->iItem, &hi); - if(ph->pitem->cxy != tbl->cols[hi.iOrder].width) { - tbl->cols[hi.iOrder].width = ph->pitem->cxy; - cw_update_extents(tbl, TRUE); - InvalidateRect(tbl->hwnd, NULL, FALSE); - } - } - break; - - case HDN_BEGINDRAG: - { - - ZeroMemory(&hi, sizeof(hi)); - hi.mask = HDI_ORDER; - Header_GetItem(tbl->hwnd_header, ph->iItem, &hi); - - if (tbl->cols[hi.iOrder].flags & KHUI_CW_COL_FIXED_POS) { - return TRUE; - } else { - return FALSE; - } - } - break; - - case HDN_ENDDRAG: - { - int drag_start_index; - int drag_end_index; - int i; - khui_credwnd_col tcol; - int sort_index = 0; - khm_int32 old_flags; - - if (ph->pitem == NULL) - return TRUE; - - hi.mask = HDI_ORDER; - Header_GetItem(tbl->hwnd_header, ph->iItem, &hi); - drag_start_index = hi.iOrder; - drag_end_index = ph->pitem->iOrder; - - /* the user dragged the column which was at drag_start_index - to drag_end_index. */ - - if (drag_end_index == drag_start_index) - return TRUE; - - /* we don't allow dragging in to the "fixed" area. */ - for (i=0; i < tbl->n_cols; i++) { - if (!(tbl->cols[i].flags & KHUI_CW_COL_FIXED_POS)) - break; - } - - if (drag_end_index <= i) - return TRUE; - - tcol = tbl->cols[drag_start_index]; - if (drag_end_index < drag_start_index) { - MoveMemory(&tbl->cols[drag_end_index + 1], - &tbl->cols[drag_end_index], - sizeof(tbl->cols[0]) * - (drag_start_index - drag_end_index)); - } else { - MoveMemory(&tbl->cols[drag_start_index], - &tbl->cols[drag_start_index + 1], - sizeof(tbl->cols[0]) * - (drag_end_index - drag_start_index)); - } - tbl->cols[drag_end_index] = tcol; - - old_flags = tbl->cols[drag_end_index].flags; - - if (drag_end_index < tbl->n_cols - 1) { - khm_int32 tflags = tbl->cols[drag_end_index + 1].flags; - - if (tflags & KHUI_CW_COL_GROUP) { - tbl->cols[drag_end_index].flags |= KHUI_CW_COL_GROUP; - } - - if ((tflags & (KHUI_CW_COL_SORT_INC | KHUI_CW_COL_SORT_DEC)) && - !(old_flags & (KHUI_CW_COL_SORT_INC | KHUI_CW_COL_SORT_DEC))) - tbl->cols[drag_end_index].flags |= KHUI_CW_COL_SORT_INC; - } - - if (drag_end_index > 0) { - khm_int32 tflags = tbl->cols[drag_end_index - 1].flags; - - if (!(tflags & KHUI_CW_COL_GROUP)) - tbl->cols[drag_end_index].flags &= ~KHUI_CW_COL_GROUP; - - if (!(tflags & (KHUI_CW_COL_SORT_INC | KHUI_CW_COL_SORT_DEC))) - tbl->cols[drag_end_index].flags &= - ~(KHUI_CW_COL_SORT_INC | KHUI_CW_COL_SORT_DEC); - } - - if (old_flags != tbl->cols[drag_end_index].flags) { - cw_hditem_from_tbl_col(&tbl->cols[drag_end_index], &hi); - hi.mask = HDI_FORMAT; - Header_SetItem(tbl->hwnd_header, ph->iItem, &hi); - } - - if ((old_flags ^ tbl->cols[drag_end_index].flags) & - KHUI_CW_COL_GROUP) - tbl->flags |= KHUI_CW_TBL_COL_DIRTY; - - for (i=0; i < tbl->n_cols; i++) { - if (tbl->cols[i].attr_id < 0) - continue; - - if (tbl->cols[i].flags & - (KHUI_CW_COL_GROUP | - KHUI_CW_COL_SORT_INC | - KHUI_CW_COL_SORT_DEC)) - tbl->cols[i].sort_index = sort_index++; - else - break; - } - - tbl->flags |= KHUI_CW_TBL_CUSTVIEW; - - cw_update_creds(tbl); - cw_update_outline(tbl); - cw_update_extents(tbl, TRUE); - cw_update_selection_state(tbl); - - InvalidateRect(tbl->hwnd, NULL, FALSE); - - return FALSE; - } - break; - - case HDN_ITEMCLICK: - { - int idx; - int hidx; - - hi.mask = HDI_ORDER; - Header_GetItem(tbl->hwnd_header, ph->iItem, &hi); - idx = hi.iOrder; - - if (idx < 0 || idx >= tbl->n_cols) - return FALSE; - - if (tbl->cols[idx].flags & KHUI_CW_COL_META) - return FALSE; - - if (tbl->cols[idx].flags & - (KHUI_CW_COL_SORT_INC | KHUI_CW_COL_SORT_DEC)) { - - tbl->cols[idx].flags ^= - (KHUI_CW_COL_SORT_INC | KHUI_CW_COL_SORT_DEC); - - cw_hditem_from_tbl_col(&tbl->cols[idx], &hi); - hi.mask = HDI_FORMAT; - Header_SetItem(tbl->hwnd_header, ph->iItem, &hi); - - } else { - int i; - int sort_idx = 0; - - for (i=0; i <= idx; i++) { - if (tbl->cols[i].attr_id < 0) - continue; - - if (!(tbl->flags & - (KHUI_CW_COL_SORT_INC | KHUI_CW_COL_SORT_DEC))) { - tbl->cols[i].flags |= KHUI_CW_COL_SORT_INC; - - cw_hditem_from_tbl_col(&tbl->cols[i], &hi); - hi.mask = HDI_FORMAT; - hidx = Header_OrderToIndex(tbl->hwnd_header, i); - Header_SetItem(tbl->hwnd_header, hidx, &hi); - } - - tbl->cols[i].sort_index = sort_idx++; - } - } - - tbl->flags |= KHUI_CW_TBL_CUSTVIEW; - - cw_update_creds(tbl); - cw_update_outline(tbl); - cw_update_extents(tbl, TRUE); - cw_update_selection_state(tbl); - - InvalidateRect(tbl->hwnd, NULL, FALSE); - - } - break; - - case HDN_ITEMDBLCLICK: - { - int idx; - int hidx; - - hi.mask = HDI_ORDER; - Header_GetItem(tbl->hwnd_header, ph->iItem, &hi); - idx = hi.iOrder; - - if (idx == 0 || idx >= tbl->n_cols) - return FALSE; - - if (tbl->cols[idx].flags & KHUI_CW_COL_GROUP) { - /* we are removing grouping from this level */ - - int i; - - for (i=idx; i < tbl->n_cols; i++) { - if (!(tbl->cols[i].flags & KHUI_CW_COL_GROUP)) - break; - - tbl->cols[i].flags &= ~KHUI_CW_COL_GROUP; - - cw_hditem_from_tbl_col(&tbl->cols[idx], &hi); - hi.mask = HDI_FORMAT; - hidx = Header_OrderToIndex(tbl->hwnd_header, i); - Header_SetItem(tbl->hwnd_header, hidx, &hi); - } - -#if 0 - } else if (tbl->cols[idx].flags & - (KHUI_CW_COL_SORT_INC | - KHUI_CW_COL_SORT_DEC)) { - int i; - - /* remove the sort condition from a column */ - - for (i=idx; i < tbl->n_cols; i++) { - if (!tbl->cols[i].flags & - (KHUI_CW_COL_SORT_INC | - KHUI_CW_COL_SORT_DEC)) - break; - - tbl->cols[i].flags &= - ~(KHUI_CW_COL_SORT_INC | - KHUI_CW_COL_SORT_DEC); - - cw_hditem_from_tbl_col(&tbl->cols[idx], &hi); - hi.mask = HDI_FORMAT; - hidx = Header_OrderToIndex(tbl->hwnd_header, i); - Header_SetItem(tbl->hwnd_header, hidx, &hi); - } -#endif - } else { - int i; - int sort_index = 0; - - for (i=0; i <= idx; i++) { - if (tbl->cols[i].attr_id < 0) - continue; - - if (!(tbl->cols[i].flags & KHUI_CW_COL_GROUP)) { - tbl->cols[i].flags |= KHUI_CW_COL_GROUP; - - if (!(tbl->cols[i].flags & - (KHUI_CW_COL_SORT_INC | - KHUI_CW_COL_SORT_DEC))) - tbl->cols[i].flags |= KHUI_CW_COL_SORT_INC; - - cw_hditem_from_tbl_col(&tbl->cols[i], &hi); - hi.mask = HDI_FORMAT; - hidx = Header_OrderToIndex(tbl->hwnd_header, i); - Header_SetItem(tbl->hwnd_header, hidx, &hi); - } - - tbl->cols[i].sort_index = sort_index++; - } - } - - tbl->flags |= KHUI_CW_TBL_COL_DIRTY; - tbl->flags |= KHUI_CW_TBL_CUSTVIEW; - - cw_update_creds(tbl); - cw_update_outline(tbl); - cw_update_extents(tbl, TRUE); - cw_update_selection_state(tbl); - - InvalidateRect(tbl->hwnd, NULL, FALSE); - } - break; - - case NM_CUSTOMDRAW: - { - LPNMCUSTOMDRAW cd; - int idx; - - cd = (LPNMCUSTOMDRAW) ph; - switch(cd->dwDrawStage) { - case CDDS_PREPAINT: - return CDRF_NOTIFYITEMDRAW; - - case CDDS_ITEMPREPAINT: - return CDRF_NOTIFYPOSTPAINT; - - case CDDS_ITEMPOSTPAINT: - if(cd->lItemlParam == CW_CA_FLAGS) - idx = IDB_WDG_FLAG; - else if(cd->lItemlParam == CW_CA_TYPEICON) - idx = IDB_WDG_CREDTYPE; - else - idx = -1; - - khui_ilist_draw_id(tbl->ilist, idx, cd->hdc, cd->rc.left, cd->rc.top, 0); - return 0; - } - } - break; - } - return 0; -} - -LRESULT -cw_wm_create(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - khui_credwnd_tbl * tbl; - - kmq_subscribe_hwnd(KMSG_CRED, hwnd); - kmq_subscribe_hwnd(KMSG_KCDB, hwnd); - kmq_subscribe_hwnd(KMSG_KMM, hwnd); - - /* freed in cw_wm_destroy */ - tbl = PMALLOC(sizeof(*tbl)); - ZeroMemory(tbl, sizeof(*tbl)); - - /* some versions of VC generate portability warnings for - SetWindowLongPtr */ -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, 0, (LONG_PTR) tbl); -#pragma warning(pop) - - cw_refresh_attribs(hwnd); - - tbl->hwnd_header = CreateWindowEx( - 0, - WC_HEADER, - (LPWSTR) NULL, - WS_CHILD | HDS_BUTTONS | - HDS_FULLDRAG | HDS_HORZ | HDS_HOTTRACK | - HDS_DRAGDROP -#if (_WIN32_WINNT >= 0x501) - | ((IS_COMMCTL6())?HDS_FLAT:0) -#endif - , - 0,0,0,0,hwnd, (HMENU) 0, khm_hInstance, NULL); - - cw_load_view(tbl, NULL /* default view */, hwnd); - cw_insert_header_cols(tbl); - - cw_update_creds(tbl); - cw_update_outline(tbl); - cw_select_row(tbl, tbl->cursor_row, 0); - cw_update_selection_state(tbl); - cw_update_extents(tbl, FALSE); - - { - RECT rect; - WINDOWPOS pw; - HDLAYOUT hdl; - - hdl.prc = &rect; - hdl.pwpos = &pw; - GetClientRect(hwnd, &rect); - - Header_Layout(tbl->hwnd_header, &hdl); - - SetWindowPos( - tbl->hwnd_header, - pw.hwndInsertAfter, - pw.x, - pw.y, - pw.cx, - pw.cy, - pw.flags | SWP_SHOWWINDOW); - } - - return DefWindowProc(hwnd, uMsg, wParam, lParam); -} - -LRESULT -cw_wm_destroy(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - khui_credwnd_tbl * tbl; - - kmq_unsubscribe_hwnd(KMSG_CRED, hwnd); - kmq_unsubscribe_hwnd(KMSG_KCDB, hwnd); - kmq_unsubscribe_hwnd(KMSG_KMM, hwnd); - - tbl = (khui_credwnd_tbl *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - - if (tbl) { - cw_save_view(tbl, NULL); - - cw_unload_view(tbl); - - PFREE(tbl); - SetWindowLongPtr(hwnd, 0, 0); - } - return DefWindowProc(hwnd, uMsg, wParam, lParam); -} - -/* handles WM_PAINT and WM_PRINTCLIENT */ -LRESULT -cw_wm_paint(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - khui_credwnd_tbl * tbl; - HDC hdc = NULL; - PAINTSTRUCT ps; - RECT r,rh; - HFONT hf_old = NULL; - int row_s, row_e; - int col_s, col_e; - int i,j,x,y,xs,xe,ys,ye; - int flag_col = -1; - int d_x = -1; - int selected = 0; - int rowheight = 0; - BOOL has_dc = FALSE; - BOOL has_updaterect = TRUE; - - tbl = (khui_credwnd_tbl *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (tbl == NULL) - goto _exit; - - if (wParam != 0) { - /* we assume that if wParam != 0, then that contains a device - context for us to draw in. Otherwise, we have to call - BeginPaint() to get one. */ - hdc = (HDC) wParam; - has_dc = TRUE; - } - - if (!has_dc && !GetUpdateRect(hwnd, &r, FALSE)) { - has_updaterect = FALSE; - } - - if (!has_dc) { - if (has_updaterect) - hdc = BeginPaint(hwnd, &ps); - else - hdc = GetDC(hwnd); - } - - if(tbl->hf_normal) - hf_old = SelectFont(hdc, tbl->hf_normal); - SetTextAlign(hdc, TA_LEFT | TA_TOP | TA_NOUPDATECP); - SetBkMode(hdc, TRANSPARENT); - - GetClientRect(hwnd,&r); - r.top += tbl->header_height; - - if(tbl->n_rows) { - /* remove the notification window if there is one */ - if(tbl->hwnd_notif) { - DestroyWindow(tbl->hwnd_notif); - tbl->hwnd_notif = NULL; - } - /* we compute the visible area in terms of rows and columns */ - /* row_s : first visible row */ - /* col_s : first visible column */ - /* row_e : last visible row */ - /* col_e : last visible column */ - /* ys : top edge of first visible row */ - /* xs : left edge of first visible column */ - - /* We *NEED* all the meta columns to be on the left */ - - row_s = 0; - ys = 0; - row_e = (int) tbl->n_rows; - x = 0; - col_s = -1; - col_e = -1; - xs = 0; - for(i=0; i < (int) tbl->n_cols; i++) { - if(col_e == -1 && x >= tbl->scr_left + (r.right - r.left)) { - col_e = i; - } - if(tbl->cols[i].attr_id == CW_CA_FLAGS) - flag_col = i; - if(d_x == -1 && !cw_is_custom_attr(tbl->cols[i].attr_id)) - d_x = x; - x += tbl->cols[i].width; - if(col_s == -1 && x > tbl->scr_left) { - col_s = i; - xs = tbl->cols[i].x; - } - } - - if(col_e == -1) - col_e = i; - - if(col_s == -1) - col_s = i; - - if(d_x != -1) - d_x += r.left - tbl->scr_left; - - xs += r.left - tbl->scr_left; - ys += r.top - tbl->scr_top; - xe = r.left + tbl->ext_width - tbl->scr_left; - ye = r.top + tbl->ext_height - tbl->scr_top; - - /* now draw */ - y = ys; - for(i=row_s; i < row_e; i++) { - selected = tbl->rows[i].flags & KHUI_CW_ROW_SELECTED; - rowheight = (tbl->rows[i].flags & KHUI_CW_ROW_EXPVIEW)? tbl->cell_height * CW_EXP_ROW_MULT : tbl->cell_height; - - if(tbl->cursor_row == i) { - if (tbl->rows[i].flags & KHUI_CW_ROW_HEADER) - SelectFont(hdc, tbl->hf_bold_header); - else - SelectFont(hdc, tbl->hf_bold); - } else if (tbl->rows[i].flags & KHUI_CW_ROW_HEADER) { - SelectFont(hdc, tbl->hf_header); - } - - x = xs; - if(tbl->rows[i].flags & KHUI_CW_ROW_HEADER) { - rh.left = xs; - rh.right = xs; - for(j=col_s; j < tbl->rows[i].col; j++) - rh.right += tbl->cols[j].width; - rh.top = y; - rh.bottom = y + rowheight; - if(rh.right > rh.left) { - cw_erase_rect(hdc, tbl, &r, &rh, (selected)?CW_ER_SEL:CW_ER_BLANK); - } - rh.left = rh.right; - rh.right = xe; - - cw_draw_header(hdc, tbl, i, &rh); - } - - if(selected) - SetTextColor(hdc, tbl->cr_s); - else - SetTextColor(hdc, tbl->cr_normal); - - x = xs; - rh.top = y; - rh.bottom = y + rowheight; - for(j=col_s; j < col_e; x += tbl->cols[j++].width) { - wchar_t buf[256]; - khm_size cbbuf; - - rh.left = x; - rh.right = x + tbl->cols[j].width; - - if(!cw_is_custom_attr(tbl->cols[j].attr_id)) { - if(!(tbl->rows[i].flags & KHUI_CW_ROW_HEADER)) { - cw_erase_rect(hdc, tbl, &r, &rh, (selected)?CW_ER_SEL:CW_ER_BLANK); - - if(j > tbl->rows[i].col) { - cbbuf = sizeof(buf); - if(KHM_FAILED(kcdb_cred_get_attr_string((khm_handle) tbl->rows[i].data, - tbl->cols[j].attr_id, buf, - &cbbuf, KCDB_TS_SHORT))) - continue; - - rh.left += tbl->hpad; - rh.right -= tbl->hpad; - - SetTextAlign(hdc, 0); - DrawText(hdc, buf, (int)((cbbuf / sizeof(wchar_t)) - 1), &rh, - DT_LEFT | DT_VCENTER | DT_NOCLIP | DT_SINGLELINE | DT_END_ELLIPSIS); - } - } - } else { - cw_erase_rect(hdc, tbl, &r, &rh, (selected)?CW_ER_SEL:CW_ER_BLANK); - - if(tbl->cols[j].attr_id == CW_CA_FLAGS) { - khui_credwnd_outline * o; - khm_int32 flag; - - if(tbl->rows[i].flags & KHUI_CW_ROW_HEADER) { - o = ((khui_credwnd_outline *) tbl->rows[i].data); - if(o->flags & KHUI_CW_O_SHOWFLAG) - flag = o->flags; - else - flag = 0; - } else { - flag = tbl->rows[i].flags; - } - - flag &= CW_EXPSTATE_MASK; - - if(flag == CW_EXPSTATE_WARN) { - khui_ilist_draw_id(tbl->ilist, IDB_FLAG_WARN, hdc, x, y, 0); - } else if(flag == CW_EXPSTATE_CRITICAL) { - khui_ilist_draw_id(tbl->ilist, IDB_FLAG_CRITICAL, hdc, x, y, 0); - } else if(flag == CW_EXPSTATE_EXPIRED) { - khui_ilist_draw_id(tbl->ilist, IDB_FLAG_EXPIRED, hdc, x, y, 0); - } else if(!(tbl->rows[i].flags & KHUI_CW_ROW_HEADER)) { - khm_int32 flags; - - if (KHM_SUCCEEDED(kcdb_cred_get_flags((khm_handle) tbl->rows[i].data, &flags)) && - (flags & KCDB_CRED_FLAG_RENEWABLE)) { - khui_ilist_draw_id(tbl->ilist, - IDB_FLAG_RENEW, - hdc, - x, y, 0); - } else { - khui_ilist_draw_id(tbl->ilist, - IDB_TK_SM, - hdc, - x, y, 0); - } - } - } - } - } - - if(tbl->cursor_row == i) { - rh.left = tbl->scr_left; - rh.right = tbl->scr_left + tbl->ext_width; - DrawFocusRect(hdc, &rh); - } - - if (tbl->cursor_row == i || - (tbl->rows[i].flags & KHUI_CW_ROW_HEADER)) { - SelectFont(hdc, tbl->hf_normal); - } - - y += rowheight; - - } - - if(xe < r.right) { - rh.left = xe; - rh.right = r.right; - rh.top = r.top; - rh.bottom = r.bottom; - - cw_erase_rect(hdc, tbl, &r, &rh, CW_ER_BLANK); - } - - if(ye < r.bottom) { - rh.left = r.left; - rh.right = (xe < r.right)?xe:r.right; - rh.top = ye; - rh.bottom = r.bottom; - - cw_erase_rect(hdc, tbl, &r, &rh, CW_ER_BLANK); - } - - } else { - wchar_t buf[512]; - cw_erase_rect(hdc, tbl, &r, &r, CW_ER_BLANK); - - if(tbl->hwnd_notif == NULL) { - LoadString(khm_hInstance, IDS_NO_CREDS, buf, sizeof(buf)/sizeof(buf[0])); - tbl->hwnd_notif = khm_create_htwnd( - tbl->hwnd, - buf, - r.left,r.top,r.right - r.left,tbl->cell_height * 4, - 0, /* This can be WS_EX_TRANSPARENT, but - we don't fully support it yet. */ - WS_VISIBLE); - if(tbl->hwnd_notif) { - SendMessage(tbl->hwnd_notif, WM_SETFONT, (WPARAM) tbl->hf_normal, (LPARAM) FALSE); - ShowWindow(tbl->hwnd_notif, SW_SHOW); - } - } - } - - if(tbl->hf_normal) - SelectFont(hdc, hf_old); - - if (!has_dc) { - if (has_updaterect) - EndPaint(hwnd,&ps); - else - ReleaseDC(hwnd, hdc); - } - - _exit: - return TRUE; -} - -LRESULT -cw_wm_size(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - RECT rect; - khui_credwnd_tbl * tbl; - - tbl = (khui_credwnd_tbl *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (tbl) { - cw_update_extents(tbl, TRUE); - - GetClientRect(hwnd, &rect); - - if(tbl->hwnd_notif) { - SetWindowPos(tbl->hwnd_notif, - tbl->hwnd_header, - rect.left, - tbl->header_height, - rect.right - rect.left, - tbl->cell_height * 4, - 0); - } - } - return DefWindowProc(hwnd, uMsg, wParam, lParam); -} - -LRESULT -cw_wm_notify(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - khui_credwnd_tbl * tbl; - LPNMHDR pnmh; - tbl = (khui_credwnd_tbl *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (tbl == NULL) - return 0; - - pnmh = (LPNMHDR) lParam; - if(pnmh->hwndFrom == tbl->hwnd_header) { - LPNMHEADER ph; - ph = (LPNMHEADER) lParam; - return cw_handle_header_msg(tbl, ph); - } - - return DefWindowProc(hwnd, uMsg, wParam, lParam); -} - -static void cw_pp_begin(khui_property_sheet * s); -static void cw_pp_precreate(khui_property_sheet * s); -static void cw_pp_end(khui_property_sheet * s); -static void cw_pp_destroy(khui_property_sheet *ps); - -LRESULT -cw_kmq_wm_dispatch(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - kmq_message * m; - khm_int32 rv = KHM_ERROR_SUCCESS; - khui_credwnd_tbl * tbl; - - tbl = (khui_credwnd_tbl *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - - kmq_wm_begin(lParam, &m); - - if (tbl == NULL) - goto _skip_message; - - if(m->type == KMSG_CRED) { - switch (m->subtype) { - case KMSG_CRED_ROOTDELTA: - cw_update_creds(tbl); - cw_update_outline(tbl); - cw_update_extents(tbl, TRUE); - cw_update_selection_state(tbl); - cw_select_row(tbl, tbl->cursor_row, 0); - InvalidateRect(hwnd, NULL, FALSE); - break; - - case KMSG_CRED_PP_BEGIN: - cw_pp_begin((khui_property_sheet *) m->vparam); - break; - - case KMSG_CRED_PP_PRECREATE: - cw_pp_precreate((khui_property_sheet *) m->vparam); - break; - - case KMSG_CRED_PP_END: - cw_pp_end((khui_property_sheet *) m->vparam); - break; - - case KMSG_CRED_PP_DESTROY: - cw_pp_destroy((khui_property_sheet *) m->vparam); - break; - } - } else if (m->type == KMSG_KCDB) { - if (m->subtype == KMSG_KCDB_IDENT && - m->uparam == KCDB_OP_MODIFY) { - - cw_update_outline(tbl); - cw_update_extents(tbl, TRUE); - cw_update_selection_state(tbl); - cw_set_row_context(tbl, tbl->cursor_row); - InvalidateRect(hwnd, NULL, FALSE); - - } - else if (m->subtype == KMSG_KCDB_IDENT && - m->uparam == KCDB_OP_NEW_DEFAULT) { - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - khm_size cb; - khm_handle defid = NULL; - - cw_update_outline(tbl); - cw_update_extents(tbl, TRUE); - InvalidateRect(hwnd, NULL, FALSE); - - cb = sizeof(idname); - - if (KHM_SUCCEEDED(kcdb_identity_get_default(&defid)) && - defid != NULL && - KHM_SUCCEEDED(kcdb_identity_get_name(defid, idname, &cb)) && - idname[0] != L'\0') { - - khm_notify_icon_tooltip(idname); - - } else { - - LoadString(khm_hInstance, IDS_NOTIFY_READY, - idname, ARRAYLENGTH(idname)); - khm_notify_icon_tooltip(idname); - } - - if (defid) - kcdb_identity_release(defid); - } - else if (m->subtype == KMSG_KCDB_ATTRIB && - (m->uparam == KCDB_OP_INSERT || - m->uparam == KCDB_OP_DELETE)) { - - cw_refresh_attribs(hwnd); - - } - } else if (m->type == KMSG_KMM && - m->subtype == KMSG_KMM_I_DONE) { - - if (tbl->flags & KHUI_CW_TBL_COLSKIP) { - wchar_t cname[KCONF_MAXCCH_NAME]; - khm_size cb; - - cname[0] = L'\0'; - - if (tbl->csp_view) { - cb = sizeof(cname); - khc_get_config_space_name(tbl->csp_view, - cname, - &cb); - } - - cw_unload_view(tbl); - - cw_load_view(tbl, ((cname[0])?cname: NULL), hwnd); - cw_insert_header_cols(tbl); - - cw_update_creds(tbl); - cw_update_outline(tbl); - cw_update_selection_state(tbl); - cw_update_extents(tbl, TRUE); - - InvalidateRect(tbl->hwnd, NULL, TRUE); - } - - } else if (m->type == KMSG_ACT && - m->subtype == KMSG_ACT_ACTIVATE) { - /* a column selector menu item was activated */ - - khm_int32 attr_id; - khm_int32 action; - khui_action * paction; - int i; - int first_non_fixed = -1; - - action = m->uparam; - paction = khui_find_action(action); - - if (paction == NULL) - goto _skip_action; - - attr_id = (khm_int32)(INT_PTR) paction->data; - - if (attr_id < 0 || attr_id > KCDB_ATTR_MAX_ID) - goto _skip_action; - - for (i=0; i < tbl->n_cols; i++) { - if (tbl->cols[i].attr_id >= 0 && - first_non_fixed == -1) - first_non_fixed = i; - - if (tbl->cols[i].attr_id == attr_id) - break; - } - - if (first_non_fixed == i && - i == tbl->n_cols - 1) { - /* this is the only non-fixed column. We don't allow - deleting it, althoguh there's nothing wrong with doing - so other than not being very useful. */ - goto _skip_action; - } - - if (i < tbl->n_cols) { - khm_int32 sort_index; - - /* we need to remove a column */ - - Header_DeleteItem(tbl->hwnd_header, i); - sort_index = tbl->cols[i].sort_index; - - if (tbl->cols[i].title) - PFREE(tbl->cols[i].title); - tbl->cols[i].title = NULL; - - if (i < tbl->n_cols - 1) { - MoveMemory(&tbl->cols[i], &tbl->cols[i+1], - sizeof(tbl->cols[0]) * (tbl->n_cols - (i + 1))); - } - tbl->n_cols--; - - /* fix the sort index */ - if (sort_index >= 0) { - for (i=0; i < tbl->n_cols; i++) { - if (tbl->cols[i].sort_index > sort_index) - tbl->cols[i].sort_index--; - } - } - - tbl->flags |= KHUI_CW_TBL_COL_DIRTY; - - cw_update_creds(tbl); - cw_update_outline(tbl); - cw_update_extents(tbl, TRUE); - cw_update_selection_state(tbl); - - InvalidateRect(tbl->hwnd, NULL, TRUE); - - khui_check_action(attr_to_action[attr_id], FALSE); - - tbl->flags |= KHUI_CW_TBL_CUSTVIEW; - - } else { - /* we need to add a column */ - wchar_t buf[KCDB_MAXCCH_SHORT_DESC]; - khm_size cb; - khm_int32 idx = tbl->n_cols; - HDITEM hi; - - /* for now, we only allow KHUI_CW_COL_INITIAL columns */ - if (tbl->n_rows == tbl->n_total_rows) - goto _skip_action; - - cb = sizeof(buf); - if (KHM_FAILED(kcdb_attrib_describe(attr_id, - buf, - &cb, - KCDB_TS_SHORT))) - goto _skip_action; - - tbl->cols[idx].attr_id = attr_id; - tbl->cols[idx].width = 100; - tbl->cols[idx].x = -1; - tbl->cols[idx].flags = 0; - tbl->cols[idx].sort_index = -1; - tbl->cols[idx].title = PMALLOC(cb); -#ifdef DEBUG - assert(tbl->cols[idx].title); -#endif - if (!tbl->cols[idx].title) - goto _skip_action; - - StringCbCopy(tbl->cols[idx].title, - cb, - buf); - - tbl->n_cols++; - - cw_hditem_from_tbl_col(&(tbl->cols[idx]), &hi); - Header_InsertItem(tbl->hwnd_header, 512, &hi); - - tbl->flags |= KHUI_CW_TBL_COL_DIRTY; - - cw_update_creds(tbl); - cw_update_outline(tbl); - cw_update_extents(tbl, TRUE); - cw_update_selection_state(tbl); - - InvalidateRect(tbl->hwnd, NULL, TRUE); - - khui_check_action(attr_to_action[attr_id], TRUE); - - tbl->flags |= KHUI_CW_TBL_CUSTVIEW; - } - - kmq_post_message(KMSG_ACT, KMSG_ACT_REFRESH, 0, 0); - - _skip_action: - ; - } - - _skip_message: - - return kmq_wm_end(m, rv); -} - -static void -cw_select_outline_level(khui_credwnd_outline * o, - BOOL select) -{ - while(o) { - if (select) - o->flags |= KHUI_CW_O_SELECTED; - else - o->flags &= ~KHUI_CW_O_SELECTED; - cw_select_outline_level(TFIRSTCHILD(o), select); - o = LNEXT(o); - } -} - -static void -cw_select_outline(khui_credwnd_outline * o, - BOOL select) -{ - if (select) - o->flags |= KHUI_CW_O_SELECTED; - else - o->flags &= ~KHUI_CW_O_SELECTED; -} - -static void -cw_select_row_creds(khui_credwnd_tbl * tbl, int row, int selected) { - - khm_size j; - khm_size idx_start, idx_end; - -#ifdef DEBUG - assert(row >= 0 && row < tbl->n_rows); -#endif - - if (row >= tbl->n_rows) - return; - - if (tbl->rows[row].flags & KHUI_CW_ROW_HEADER) { - khui_credwnd_outline * o; - - o = (khui_credwnd_outline *) tbl->rows[row].data; - idx_start = o->idx_start; - idx_end = o->idx_end; - } else { - idx_start = tbl->rows[row].idx_start; - idx_end = tbl->rows[row].idx_end; - } - - if (idx_start == -1 || idx_end == -1) - return; - - for (j = idx_start; j <= idx_end; j++) { - khm_handle cred = NULL; - - kcdb_credset_get_cred(tbl->credset, (khm_int32) j, &cred); - - if (cred) { - kcdb_cred_set_flags(cred, ((selected)?KCDB_CRED_FLAG_SELECTED:0), - KCDB_CRED_FLAG_SELECTED); - kcdb_cred_release(cred); - } - } -} - -static void -cw_unselect_all(khui_credwnd_tbl * tbl) -{ - int i; - - for(i=0; i<tbl->n_rows; i++) { - tbl->rows[i].flags &= ~KHUI_CW_ROW_SELECTED; - - cw_select_row_creds(tbl, i, FALSE); - } - - cw_select_outline_level(tbl->outline, FALSE); -} - -static void -cw_update_cred_row_selection_state(khui_credwnd_tbl * tbl, - int row) { - khm_int32 flags; - khm_size idx_start, idx_end; - khm_size k; - khm_boolean found_selected = FALSE; - khm_boolean found_unselected = FALSE; - khm_boolean row_select = TRUE; - -#ifdef DEBUG - assert(row >= 0 && row < tbl->n_rows); -#endif - if (row < 0 || row >= tbl->n_rows) - return; - - idx_start = tbl->rows[row].idx_start; - idx_end = tbl->rows[row].idx_end; - - for (k = idx_start; k <= idx_end && select; k++) { - khm_handle cred = NULL; - - if (KHM_SUCCEEDED(kcdb_credset_get_cred(tbl->credset, (khm_int32) k, - &cred))) { - kcdb_cred_get_flags(cred, &flags); - if (!(flags & KCDB_CRED_FLAG_SELECTED)) { - found_unselected = TRUE; - row_select = FALSE; - } else { - found_selected = TRUE; - } - kcdb_cred_release(cred); - } else { - row_select = FALSE; -#ifdef DEBUG - assert(FALSE); -#endif - } - } - - if (row_select) - tbl->rows[row].flags |= KHUI_CW_ROW_SELECTED; - else - tbl->rows[row].flags &= ~KHUI_CW_ROW_SELECTED; - - if (found_selected && found_unselected) { - /* if there were selected and unselected credentials - associated with the same row, we need to set the selection - state of all of them to match what the user is going to - see. */ - cw_select_row_creds(tbl, row, row_select); - } -} - -static void -cw_update_outline_selection_state(khui_credwnd_tbl * tbl, - khui_credwnd_outline * o) -{ - khm_boolean select = TRUE; - int j; - - for (j = o->start + 1; j < o->start + o->length; j++) { - if (tbl->rows[j].flags & KHUI_CW_ROW_HEADER) { - cw_update_outline_selection_state(tbl, - (khui_credwnd_outline *) - tbl->rows[j].data); - } else { - cw_update_cred_row_selection_state(tbl, j); - } - - if (!(tbl->rows[j].flags & KHUI_CW_ROW_SELECTED)) { - select = FALSE; - } - - if (tbl->rows[j].flags & KHUI_CW_ROW_HEADER) { - j += ((khui_credwnd_outline *) tbl->rows[j].data)->length - 1; - } - } - - /* special case : the header has been collapsed and we are just - using one row. In this case, the for loop above will do - nothing. */ - - if (o->length == 1) { - select = !!(o->flags & KHUI_CW_O_SELECTED); - } else { - cw_select_outline(o, select); - } - - if (select) { - tbl->rows[o->start].flags |= KHUI_CW_ROW_SELECTED; - } else { - tbl->rows[o->start].flags &= ~KHUI_CW_ROW_SELECTED; - } -} - -static void -cw_update_selection_state(khui_credwnd_tbl * tbl) -{ - int i; - - for (i=0; i < tbl->n_rows; i++) { - if (tbl->rows[i].flags & KHUI_CW_ROW_HEADER) { - khui_credwnd_outline * o; - - o = (khui_credwnd_outline *) tbl->rows[i].data; - - cw_update_outline_selection_state(tbl, o); - - i += o->length - 1; - } else { - cw_update_cred_row_selection_state(tbl, i); - } - } -} - -/* Examine the current row and set the UI context */ -static void -cw_set_row_context(khui_credwnd_tbl * tbl, int row) -{ - khui_credwnd_outline * o; - BOOL set_context = TRUE; - - if (row < 0 || row >= (int) tbl->n_rows) { - if (tbl->n_rows > 0) - row = 0; - else { - khui_context_reset(); - return; - } - } - - if (tbl->rows[row].flags & KHUI_CW_ROW_HEADER) { - - o = (khui_credwnd_outline *) tbl->rows[row].data; - - if (tbl->cols[o->col].attr_id == KCDB_ATTR_ID_NAME) { - if (TPARENT(o) != NULL) { - khui_credwnd_outline * op; - - op = TPARENT(o); - - if (tbl->cols[op->col].attr_id == KCDB_ATTR_TYPE_NAME && - TPARENT(op) == NULL) { - /* selected a credential type */ - khui_context_set(KHUI_SCOPE_CREDTYPE, - (khm_handle) o->data, - (khm_int32) (DWORD_PTR) op->data, - NULL, - NULL, - 0, - tbl->credset); - } else { - /* we can't narrow it down using the standard set - of scopes. We consider this to be an identity - selection because the user right-clicked on an - identity header. */ - khui_context_set(KHUI_SCOPE_IDENT, - (khm_handle) o->data, - KCDB_CREDTYPE_INVALID, - NULL, - NULL, - 0, - tbl->credset); - } - } else { - /* The user clicked on an identity header. Even - though not all credentials belonging to the - identity maybe within the scope right now, we still - consider this to be an identity scope. */ - khui_context_set(KHUI_SCOPE_IDENT, - (khm_handle) o->data, - KCDB_CREDTYPE_INVALID, - NULL, - NULL, - 0, - tbl->credset); - } - } else if (tbl->cols[o->col].attr_id == KCDB_ATTR_TYPE_NAME) { - if (TPARENT(o) == NULL) { - /* selected an entire cred type */ - khui_context_set(KHUI_SCOPE_CREDTYPE, - NULL, - (khm_int32) (DWORD_PTR) o->data, - NULL, - NULL, - 0, - tbl->credset); - } else { - khui_credwnd_outline * op; - - op = TPARENT(o); - if (tbl->cols[op->col].attr_id == KCDB_ATTR_ID_NAME) { - /* credtype under an identity. Even though not - all the credentials of this credtype belonging - to this identity might be within the scope, we - still consider this to be a type selection - under a specific identity. */ - khui_context_set(KHUI_SCOPE_CREDTYPE, - (khm_handle) op->data, - (khm_int32) (DWORD_PTR) o->data, - NULL, - NULL, - 0, - tbl->credset); - } else { - set_context = FALSE; - } - } - } else { - set_context = FALSE; - } - - if (!set_context) { - /* woohoo. cred group. yay. */ - khui_header headers[KHUI_MAX_HEADERS]; - khm_size n_headers = 0; - - do { - headers[n_headers].attr_id = - o->attr_id; - if (tbl->cols[o->col].attr_id == - KCDB_ATTR_ID_NAME) { - headers[n_headers].data = &(o->data); - headers[n_headers].cb_data = sizeof(khm_handle); - } else if (tbl->cols[o->col].attr_id == - KCDB_ATTR_TYPE_NAME) { - headers[n_headers].data = &(o->data); - headers[n_headers].cb_data = sizeof(khm_int32); - } else { - headers[n_headers].data = o->data; - headers[n_headers].cb_data = o->cb_data; - } - - n_headers++; - - o = TPARENT(o); - } while(o); - - khui_context_set(KHUI_SCOPE_GROUP, - NULL, - KCDB_CREDTYPE_INVALID, - NULL, - headers, - n_headers, - tbl->credset); - } - - } else { - khm_handle cred; - - cred = (khm_handle) tbl->rows[row].data; - - khui_context_set(KHUI_SCOPE_CRED, - NULL, - KCDB_CREDTYPE_INVALID, - cred, - NULL, - 0, - tbl->credset); - } -} - -static void -cw_select_all(khui_credwnd_tbl * tbl) -{ - int i; - - for(i=0; i<tbl->n_rows; i++) { - tbl->rows[i].flags |= KHUI_CW_ROW_SELECTED; - cw_select_row_creds(tbl, i, TRUE); - } - - cw_select_outline_level(tbl->outline, TRUE); - - cw_update_selection_state(tbl); - - cw_set_row_context(tbl, tbl->cursor_row); - - InvalidateRect(tbl->hwnd, NULL, FALSE); -} - -static void -cw_select_row(khui_credwnd_tbl * tbl, int row, WPARAM wParam) -{ - int i; - BOOL toggle; - BOOL extend; - int group_begin; - int group_end; - - if (wParam & MK_CONTROL) { - toggle = TRUE; - extend = FALSE; - } else if (wParam & MK_SHIFT) { - toggle = FALSE; - extend = TRUE; - } else { - toggle = FALSE; - extend = FALSE; - } - - if (row < 0 || row >= (int) tbl->n_rows) - return; - - if (tbl->rows[row].flags & KHUI_CW_ROW_HEADER) { - khui_credwnd_outline * o; - - o = (khui_credwnd_outline *) tbl->rows[row].data; - - group_begin = o->start; - group_end = o->start + o->length - 1; - } else { - group_begin = row; - group_end = row; - } - - if (!toggle && !extend) { - /* selecting a single row */ - cw_unselect_all(tbl); - - tbl->cursor_row = row; - tbl->anchor_row = row; - - for (i = group_begin; i <= group_end; i++) { - tbl->rows[i].flags |= KHUI_CW_ROW_SELECTED; - if (tbl->rows[i].flags & KHUI_CW_ROW_HEADER) - cw_select_outline((khui_credwnd_outline *) tbl->rows[i].data, TRUE); - cw_select_row_creds(tbl, i, TRUE); - } - } else if (toggle) { - BOOL select; - - tbl->cursor_row = row; - tbl->anchor_row = row; - - select = !(tbl->rows[row].flags & KHUI_CW_ROW_SELECTED); - - for (i = group_begin; i <= group_end; i++) { - if (select) - tbl->rows[i].flags |= KHUI_CW_ROW_SELECTED; - else - tbl->rows[i].flags &= ~KHUI_CW_ROW_SELECTED; - - if (tbl->rows[i].flags & KHUI_CW_ROW_HEADER) - cw_select_outline((khui_credwnd_outline *) tbl->rows[i].data, select); - - cw_select_row_creds(tbl, i, select); - } - } else if (extend) { - int range_begin; - int range_end; - - cw_unselect_all(tbl); - - range_begin = min(row, tbl->anchor_row); - range_end = max(row, tbl->anchor_row); - - for (i = range_begin; i <= range_end; i++) { - tbl->rows[i].flags |= KHUI_CW_ROW_SELECTED; - - if (tbl->rows[i].flags & KHUI_CW_ROW_HEADER) - cw_select_outline((khui_credwnd_outline *) tbl->rows[i].data, TRUE); - - cw_select_row_creds(tbl, i, TRUE); - } - - tbl->cursor_row = row; - } - - cw_update_selection_state(tbl); - - cw_set_row_context(tbl, tbl->cursor_row); - - InvalidateRect(tbl->hwnd, NULL, FALSE); -} - -static void -cw_toggle_outline_state(khui_credwnd_tbl * tbl, - khui_credwnd_outline * o) { - - int old_range_begin; - int old_range_end; - int new_range_begin; - int new_range_end; - - old_range_begin = o->start; - old_range_end = o->start + o->length - 1; - - o->flags ^= KHUI_CW_O_EXPAND; - - cw_update_outline(tbl); - cw_update_extents(tbl, TRUE); - - new_range_begin = o->start; - new_range_end = o->start + o->length - 1; - - if (tbl->cursor_row > old_range_end) { - tbl->cursor_row -= old_range_end - new_range_end; - } else if (tbl->cursor_row >= old_range_begin && - tbl->cursor_row <= old_range_end) { - tbl->cursor_row = new_range_begin; - } - - if (tbl->anchor_row > old_range_end) { - tbl->anchor_row -= old_range_end - new_range_end; - } else if (tbl->anchor_row >= old_range_begin && - tbl->anchor_row <= old_range_end) { - tbl->anchor_row = new_range_begin; - } - - InvalidateRect(tbl->hwnd, NULL, TRUE); - -} - -LRESULT cw_properties(HWND hwnd); - -LRESULT -cw_wm_mouse(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - khui_credwnd_tbl * tbl; - int x,y; - RECT r; - int row; - int col; - int i; - int nm_state,nm_row,nm_col; - - tbl = (khui_credwnd_tbl *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (tbl == NULL) - return 0; - - /* we are basically trying to capture events where the mouse is - hovering over one of the 'hotspots'. There are two kinds of - hotspots one is the little widget thinggy that you click on to - expand or collapse an outline. The other is a text cell that - is partially concealed. */ - - x = GET_X_LPARAM(lParam); - y = GET_Y_LPARAM(lParam); - x += tbl->scr_left; - y += tbl->scr_top - tbl->header_height; - - row = -1; - - for (i=0; i < tbl->n_rows; i++) { - if (y >= tbl->rows[i].r_ext.top && - y < tbl->rows[i].r_ext.bottom) { - row = i; - break; - } - } - - col = -1; - nm_state = CW_MOUSE_NONE; - nm_row = nm_col = -1; - - for(i=0; i < (int) tbl->n_cols; i++) { - if(x >= tbl->cols[i].x && - x < tbl->cols[i].x + tbl->cols[i].width) { - col = i; - break; - } - } - - if(wParam & MK_LBUTTON) - nm_state = CW_MOUSE_LDOWN; - - if(row >= 0 && row < (int) tbl->n_rows) { - nm_state |= CW_MOUSE_ROW; - nm_row = row; - nm_col = col; - if(tbl->rows[row].flags & KHUI_CW_ROW_HEADER) { - khui_credwnd_outline * o; - - o = (khui_credwnd_outline *) tbl->rows[row].data; - - /* are we on a widget then? */ - x -= tbl->cols[o->col].x; - - if (!(o->flags & KHUI_CW_O_NOOUTLINE)) { - if(x >= 0 && x < KHUI_SMICON_CX) /* hit */ { - nm_state |= CW_MOUSE_WOUTLINE | CW_MOUSE_WIDGET; - } else if (tbl->cols[tbl->rows[row].col].attr_id == - KCDB_ATTR_ID_NAME && - col == tbl->rows[row].col && - x >= KHUI_SMICON_CX * 3 / 2 && - x < KHUI_SMICON_CX * 5 / 2){ - nm_state |= CW_MOUSE_WSTICKY | CW_MOUSE_WIDGET; - } else if (tbl->cols[tbl->rows[row].col].attr_id == - KCDB_ATTR_ID_NAME && - col == tbl->rows[row].col && - x >= KHUI_SMICON_CX * 3 && - x < KHUI_SMICON_CX * 4) { - nm_state |= CW_MOUSE_WICON | CW_MOUSE_WIDGET; - } - } else if (tbl->cols[o->col].attr_id == KCDB_ATTR_ID_NAME) { - if (col == tbl->rows[row].col && - x >= 0 && - x < KHUI_SMICON_CX){ - - nm_state |= CW_MOUSE_WSTICKY | CW_MOUSE_WIDGET; - - } else if (col == tbl->rows[row].col && - x >= KHUI_SMICON_CX * 3 / 2 && - x < KHUI_SMICON_CX * 5 / 2) { - nm_state |= CW_MOUSE_WICON | CW_MOUSE_WIDGET; - } - } - } - } - - /* did the user drag the cursor off the current row? */ - if((tbl->mouse_state & CW_MOUSE_LDOWN) && - (nm_row != tbl->mouse_row)) { - nm_state &= ~CW_MOUSE_WMASK; - } - - if(!(nm_state & CW_MOUSE_LDOWN) && - (tbl->mouse_state & CW_MOUSE_LDOWN) && - tbl->mouse_row == nm_row) { - - if((nm_state & CW_MOUSE_WOUTLINE) && - (tbl->mouse_state & CW_MOUSE_WOUTLINE)) { - /* click on an outline widget */ - khui_credwnd_outline * o; - - o = (khui_credwnd_outline *) tbl->rows[nm_row].data; - tbl->mouse_state = CW_MOUSE_WIDGET | CW_MOUSE_WOUTLINE; - - cw_toggle_outline_state(tbl, o); - - return 0; - } else if ((nm_state & CW_MOUSE_WSTICKY) && - (tbl->mouse_state & CW_MOUSE_WSTICKY)) { - - khui_credwnd_outline * o; - khm_handle ident; - khm_int32 idf = 0; - - o = tbl->rows[nm_row].data; - ident = o->data; - - kcdb_identity_get_flags(ident, &idf); - idf &= KCDB_IDENT_FLAG_STICKY; - kcdb_identity_set_flags(ident, (idf ^ KCDB_IDENT_FLAG_STICKY), - KCDB_IDENT_FLAG_STICKY); - - tbl->mouse_state = CW_MOUSE_WIDGET | CW_MOUSE_WSTICKY; - - khm_refresh_identity_menus(); - - return 0; - } else if ((nm_state & CW_MOUSE_WICON) && - (tbl->mouse_state & CW_MOUSE_WICON)) { - /* click on an row icon */ - cw_select_row(tbl, nm_row, wParam); - cw_properties(hwnd); - } else { - /* click on a row */ - cw_select_row(tbl, nm_row, wParam); - - if (tbl->mouse_col == nm_col && - nm_col >= 0 && - tbl->cols[nm_col].attr_id == CW_CA_FLAGS && - !(tbl->rows[nm_row].flags & KHUI_CW_ROW_HEADER)) { - /* clicked on a cred icon */ - - cw_properties(hwnd); - } - } - } - - /* ok, now if we are changing state, we need to invalidate a few - regions */ - if (((tbl->mouse_state ^ nm_state) & (CW_MOUSE_WIDGET | - CW_MOUSE_WOUTLINE | - CW_MOUSE_WSTICKY)) || - tbl->mouse_row != nm_row) { - - if(tbl->mouse_state & CW_MOUSE_WOUTLINE) { - r.left = tbl->cols[tbl->mouse_col].x - tbl->scr_left; - r.top = tbl->mouse_row * tbl->cell_height + - tbl->header_height - tbl->scr_top; - r.right = r.left + KHUI_SMICON_CX; - r.bottom = r.top + tbl->cell_height; - InvalidateRect(tbl->hwnd, &r, TRUE); - } - if(tbl->mouse_state & CW_MOUSE_WSTICKY) { - if (tbl->flags & KHUI_CW_TBL_EXPIDENT) { - - if (tbl->mouse_row >= 0 && tbl->mouse_row < tbl->n_rows) { - r = tbl->rows[tbl->mouse_row].r_ext; - OffsetRect(&r, -tbl->scr_left, tbl->header_height - tbl->scr_top); - r.right = r.left + KHUI_SMICON_CX; - InvalidateRect(tbl->hwnd, &r, TRUE); - } - - } else { - r.left = KHUI_SMICON_CX * 3 / 2 + - tbl->cols[tbl->mouse_col].x - tbl->scr_left; - r.top = tbl->mouse_row * tbl->cell_height + - tbl->header_height - tbl->scr_top; - r.right = r.left + KHUI_SMICON_CX; - r.bottom = r.top + tbl->cell_height; - } - InvalidateRect(tbl->hwnd, &r, TRUE); - } - - if ((tbl->mouse_state & nm_state) & CW_MOUSE_LDOWN) { - if (tbl->mouse_row == nm_row) - tbl->mouse_col = nm_col; - } else { - tbl->mouse_col = nm_col; - tbl->mouse_row = nm_row; - } - tbl->mouse_state = nm_state; - - /* same code block as above */ - if(tbl->mouse_state & CW_MOUSE_WOUTLINE) { - r.left = tbl->cols[tbl->mouse_col].x - tbl->scr_left; - r.top = tbl->mouse_row * tbl->cell_height + - tbl->header_height - tbl->scr_top; - r.right = r.left + KHUI_SMICON_CX; - r.bottom = r.top + tbl->cell_height; - InvalidateRect(tbl->hwnd, &r, TRUE); - } - if(tbl->mouse_state & CW_MOUSE_WSTICKY) { - if (tbl->flags & KHUI_CW_TBL_EXPIDENT) { - - if (tbl->mouse_row >= 0 && tbl->mouse_row < tbl->n_rows) { - r = tbl->rows[tbl->mouse_row].r_ext; - OffsetRect(&r, -tbl->scr_left, tbl->header_height - tbl->scr_top); - r.right = r.left + KHUI_SMICON_CX; - InvalidateRect(tbl->hwnd, &r, TRUE); - } - - } else { - r.left = KHUI_SMICON_CX * 3 / 2 + - tbl->cols[tbl->mouse_col].x - tbl->scr_left; - r.top = tbl->mouse_row * tbl->cell_height + - tbl->header_height - tbl->scr_top; - r.right = r.left + KHUI_SMICON_CX; - r.bottom = r.top + tbl->cell_height; - } - InvalidateRect(tbl->hwnd, &r, TRUE); - } - } else if(tbl->mouse_state != nm_state) { - - if ((tbl->mouse_state & nm_state) & CW_MOUSE_LDOWN) { - if (tbl->mouse_row == nm_row) { - tbl->mouse_col = nm_col; - tbl->mouse_state = nm_state; - } - } else { - tbl->mouse_col = nm_col; - tbl->mouse_row = nm_row; - tbl->mouse_state = nm_state; - } - } - - /* if it was a double click, also show the property - window */ - if (uMsg == WM_LBUTTONDBLCLK) { - cw_properties(hwnd); - } - - return 0; -} - -LRESULT -cw_wm_hscroll(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - khui_credwnd_tbl * tbl; - SCROLLINFO si; - RECT cr; - RECT lr; - RECT sr; - int dx; - int newpos; - - tbl = (khui_credwnd_tbl *) (LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (tbl == NULL) - return 0; - - GetClientRect(hwnd, &cr); - dx = tbl->scr_left; - - switch(LOWORD(wParam)) { - case SB_LEFT: - newpos = 0; - break; - - case SB_RIGHT: - newpos = tbl->ext_width; - break; - - case SB_LINELEFT: - newpos = tbl->scr_left - (tbl->ext_width / 12); - break; - - case SB_LINERIGHT: - newpos = tbl->scr_left + (tbl->ext_width / 12); - break; - - case SB_PAGELEFT: - newpos = tbl->scr_left - (cr.right - cr.left); - break; - - case SB_PAGERIGHT: - newpos = tbl->scr_left + (cr.right - cr.left); - break; - - case SB_THUMBTRACK: - case SB_THUMBPOSITION: - ZeroMemory(&si, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_TRACKPOS; - GetScrollInfo(hwnd, SB_HORZ, &si); - - newpos = si.nTrackPos; - break; - - default: - return DefWindowProc(hwnd, uMsg, wParam, lParam); - } - - //cr.top += tbl->header_height; - tbl->scr_left = newpos; - cw_update_extents(tbl, TRUE); - - dx -= tbl->scr_left; - - /* exclude the watermark */ - lr.bottom = cr.bottom; - lr.right = cr.right; - lr.top = max(cr.bottom - tbl->kbm_logo_shade.cy, cr.top); - lr.left = max(cr.right - tbl->kbm_logo_shade.cx, cr.left); - - if(cr.top < lr.top && cr.left < cr.right) { - sr.left = cr.left; - sr.right = cr.right; - sr.top = cr.top; - sr.bottom = lr.top; - ScrollWindowEx( - hwnd, - dx, - 0, - &sr, - &sr, - NULL, - NULL, - SW_INVALIDATE | SW_SCROLLCHILDREN); - } - - if(cr.left < lr.left && lr.top < lr.bottom) { - sr.left = cr.left; - sr.right = lr.left; - sr.top = lr.top; - sr.bottom = lr.bottom; - ScrollWindowEx( - hwnd, - dx, - 0, - &sr, - &sr, - NULL, - NULL, - SW_INVALIDATE | SW_SCROLLCHILDREN); - } - - if(lr.top < lr.bottom && lr.left < lr.right) { - InvalidateRect(hwnd, &lr, FALSE); - } - - return DefWindowProc(hwnd, uMsg, wParam, lParam); -} - -static void -cw_vscroll_to_pos(HWND hwnd, khui_credwnd_tbl * tbl, int newpos) { - RECT cr; - RECT sr; - RECT lr; - int dy; - - GetClientRect(hwnd, &cr); - cr.top += tbl->header_height; - dy = tbl->scr_top; - - tbl->scr_top = newpos; - cw_update_extents(tbl, TRUE); - - dy -= tbl->scr_top; - - /* exclude watermark */ - lr.bottom = cr.bottom; - lr.right = cr.right; - lr.top = max(cr.bottom - tbl->kbm_logo_shade.cy, cr.top); - lr.left = max(cr.right - tbl->kbm_logo_shade.cx, cr.left); - - if(cr.left < lr.left && cr.top < cr.bottom) { - sr.left = cr.left; - sr.right = lr.left; - sr.top = cr.top; - sr.bottom = cr.bottom; - ScrollWindowEx( - hwnd, - 0, - dy, - &sr, - &sr, - NULL, - NULL, - SW_INVALIDATE); - } - - if(lr.left < lr.right && cr.top < lr.top) { - sr.left = lr.left; - sr.right = lr.right; - sr.top = cr.top; - sr.bottom = lr.top; - ScrollWindowEx( - hwnd, - 0, - dy, - &sr, - &sr, - NULL, - NULL, - SW_INVALIDATE); - } - - if(lr.top < lr.bottom && lr.left < lr.right) { - InvalidateRect(hwnd, &lr, FALSE); - } -} - -LRESULT -cw_wm_vscroll(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - khui_credwnd_tbl * tbl; - SCROLLINFO si; - int newpos; - RECT cr; - - tbl = (khui_credwnd_tbl *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (tbl == NULL) - return 0; - - GetClientRect(hwnd, &cr); - cr.top += tbl->header_height; - - switch(LOWORD(wParam)) { - case SB_LEFT: - newpos = 0; - break; - - case SB_BOTTOM: - newpos = tbl->ext_height; - break; - - case SB_LINEUP: - newpos = tbl->scr_top - (tbl->ext_height / 12); - break; - - case SB_LINEDOWN: - newpos = tbl->scr_top + (tbl->ext_height / 12); - break; - - case SB_PAGEUP: - newpos = tbl->scr_top - (cr.bottom - cr.top); - break; - - case SB_PAGEDOWN: - newpos = tbl->scr_top + (cr.bottom - cr.top); - break; - - case SB_THUMBTRACK: - case SB_THUMBPOSITION: - ZeroMemory(&si, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_TRACKPOS; - GetScrollInfo(hwnd, SB_VERT, &si); - - newpos = si.nTrackPos; - break; - - default: - return DefWindowProc(hwnd, uMsg, wParam, lParam); - } - - cw_vscroll_to_pos(hwnd, tbl, newpos); - - return DefWindowProc(hwnd, uMsg, wParam, lParam); -} - -static void -cw_ensure_row_visible(HWND hwnd, khui_credwnd_tbl * tbl, int row) { - RECT r; - int newpos; - - if (row < 0) - row = 0; - else if (row >= (int) tbl->n_rows) - row = (int) tbl->n_rows - 1; - - GetClientRect(hwnd, &r); - r.top += tbl->header_height; - - if (row * tbl->cell_height < tbl->scr_top) { - newpos = row * tbl->cell_height; - } else if ((row + 1) * tbl->cell_height - > tbl->scr_top + (r.bottom - r.top)) { - newpos = ((row + 1) * tbl->cell_height) - (r.bottom - r.top); - } else - return; - - cw_vscroll_to_pos(hwnd, tbl, newpos); -} - -static INT_PTR CALLBACK -cw_pp_ident_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) -{ - khui_property_sheet * s; - - switch(uMsg) { - case WM_INITDIALOG: - { - PROPSHEETPAGE * p; - khm_handle ident; - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - khm_size t; - khm_int32 i; - - p = (PROPSHEETPAGE *) lParam; - s = (khui_property_sheet *) p->lParam; - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) s); -#pragma warning(pop) - - ident = s->identity; - - t = sizeof(idname); - kcdb_identity_get_name(ident, idname, &t); - SetDlgItemText(hwnd, IDC_PP_IDNAME, idname); - - kcdb_identity_get_flags(ident, &i); - - CheckDlgButton(hwnd, IDC_PP_IDDEF, - ((i & KCDB_IDENT_FLAG_DEFAULT)?BST_CHECKED: - BST_UNCHECKED)); - - /* if it's default, you can't change it further */ - if (i & KCDB_IDENT_FLAG_DEFAULT) { - EnableWindow(GetDlgItem(hwnd, IDC_PP_IDDEF), FALSE); - } - - CheckDlgButton(hwnd, IDC_PP_IDSEARCH, - ((i & KCDB_IDENT_FLAG_SEARCHABLE)?BST_CHECKED: - BST_UNCHECKED)); - - CheckDlgButton(hwnd, IDC_PP_STICKY, - ((i & KCDB_IDENT_FLAG_STICKY)?BST_CHECKED: - BST_UNCHECKED)); - - khui_property_wnd_set_record(GetDlgItem(hwnd, IDC_PP_PROPLIST), - ident); - } - return TRUE; - - case WM_COMMAND: - s = (khui_property_sheet *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - if (s == NULL) - return 0; - - switch(wParam) { - case MAKEWPARAM(IDC_PP_IDDEF, BN_CLICKED): - /* fallthrough */ - case MAKEWPARAM(IDC_PP_STICKY, BN_CLICKED): - - if (s->status != KHUI_PS_STATUS_NONE) - PropSheet_Changed(s->hwnd, hwnd); - return TRUE; - - case MAKEWPARAM(IDC_PP_CONFIG, BN_CLICKED): - { - khui_config_node cfg_id = NULL; - khui_config_node cfg_ids = NULL; - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - khm_size cb; - khm_int32 rv; - - khm_refresh_config(); - - rv = khui_cfg_open(NULL, - L"KhmIdentities", - &cfg_ids); - - if (KHM_FAILED(rv)) - return TRUE; - - cb = sizeof(idname); - if (KHM_SUCCEEDED(kcdb_identity_get_name(s->identity, - idname, - &cb))) { - rv = khui_cfg_open(cfg_ids, - idname, - &cfg_id); - } - - if (cfg_id) - khm_show_config_pane(cfg_id); - else - khm_show_config_pane(cfg_ids); - - if (cfg_ids) - khui_cfg_release(cfg_ids); - if (cfg_id) - khui_cfg_release(cfg_id); - } - return TRUE; - } - return FALSE; - - case WM_NOTIFY: - { - LPPSHNOTIFY lpp; - khm_int32 flags; - - lpp = (LPPSHNOTIFY) lParam; - s = (khui_property_sheet *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - if (s == NULL) - return 0; - - switch(lpp->hdr.code) { - case PSN_APPLY: - flags = 0; - if (IsDlgButtonChecked(hwnd, IDC_PP_STICKY) == BST_CHECKED) - flags |= KCDB_IDENT_FLAG_STICKY; - if (IsDlgButtonChecked(hwnd, IDC_PP_IDDEF) == BST_CHECKED) - flags |= KCDB_IDENT_FLAG_DEFAULT; - - kcdb_identity_set_flags(s->identity, flags, - KCDB_IDENT_FLAG_STICKY | - KCDB_IDENT_FLAG_DEFAULT); - khm_refresh_identity_menus(); - return TRUE; - - case PSN_RESET: - kcdb_identity_get_flags(s->identity, &flags); - - CheckDlgButton(hwnd, - IDC_PP_IDDEF, - ((flags & KCDB_IDENT_FLAG_DEFAULT)?BST_CHECKED: - BST_UNCHECKED)); - - /* if it's default, you can't change it further */ - if (flags & KCDB_IDENT_FLAG_DEFAULT) { - EnableWindow(GetDlgItem(hwnd, IDC_PP_IDDEF), FALSE); - } - - CheckDlgButton(hwnd, IDC_PP_IDSEARCH, - ((flags & KCDB_IDENT_FLAG_SEARCHABLE)?BST_CHECKED:BST_UNCHECKED)); - - CheckDlgButton(hwnd, IDC_PP_STICKY, - ((flags & KCDB_IDENT_FLAG_STICKY)?BST_CHECKED:BST_UNCHECKED)); - return TRUE; - } - } - break; - } - return FALSE; -} - -static INT_PTR CALLBACK -cw_pp_cred_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam - ) -{ - switch(uMsg) { - case WM_INITDIALOG: - { - khui_property_sheet * s; - PROPSHEETPAGE * p; - khm_handle cred; - - p = (PROPSHEETPAGE *) lParam; - s = (khui_property_sheet *) p->lParam; - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) s); -#pragma warning(pop) - - cred = s->cred; - - khui_property_wnd_set_record( - GetDlgItem(hwnd, IDC_PP_CPROPLIST), - cred); - } - return TRUE; - } - return FALSE; -} - -static void -cw_pp_begin(khui_property_sheet * s) -{ - PROPSHEETPAGE *p; - - if(s->identity) { - p = PMALLOC(sizeof(*p)); - ZeroMemory(p, sizeof(*p)); - - p->dwSize = sizeof(*p); - p->dwFlags = 0; - p->hInstance = khm_hInstance; - p->pszTemplate = MAKEINTRESOURCE(IDD_PP_IDENT); - p->pfnDlgProc = cw_pp_ident_proc; - p->lParam = (LPARAM) s; - - khui_ps_add_page(s, KHUI_PPCT_IDENTITY, 129, p, NULL); - } - - if(s->cred) { - p = PMALLOC(sizeof(*p)); - ZeroMemory(p, sizeof(*p)); - - p->dwSize = sizeof(*p); - p->dwFlags = 0; - p->hInstance = khm_hInstance; - p->pszTemplate = MAKEINTRESOURCE(IDD_PP_CRED); - p->pfnDlgProc = cw_pp_cred_proc; - p->lParam = (LPARAM) s; - - khui_ps_add_page(s, KHUI_PPCT_CREDENTIAL, 128, p, NULL); - } -} - -static void -cw_pp_precreate(khui_property_sheet * s) -{ - khui_ps_show_sheet(khm_hwnd_main, s); - - khm_add_property_sheet(s); -} - -static void -cw_pp_end(khui_property_sheet * s) -{ - khui_property_page * p = NULL; - - khui_ps_find_page(s, KHUI_PPCT_IDENTITY, &p); - if(p) { - PFREE(p->p_page); - p->p_page = NULL; - } - - p = NULL; - - khui_ps_find_page(s, KHUI_PPCT_CREDENTIAL, &p); - if(p) { - PFREE(p->p_page); - p->p_page = NULL; - } -} - -static void -cw_pp_destroy(khui_property_sheet *ps) -{ - if(ps->ctx.scope == KHUI_SCOPE_CRED) { - if(ps->header.pszCaption) - PFREE((LPWSTR) ps->header.pszCaption); - } - - khui_context_release(&ps->ctx); - - khui_ps_destroy_sheet(ps); - - /* this is pretty weird because ps gets freed when - khui_ps_destroy_sheet() is called. However, since destroying - ps involves sending a WM_DESTROY message to the property sheet, - we still need to keep it on the property sheet chain (or else - the messages will not be delivered). This is only safe because - we are not relinquishing the thread in-between destroying ps - and removing it from the chain. */ - - /* TODO: fix this */ - khm_del_property_sheet(ps); -} - -LRESULT -cw_properties(HWND hwnd) -{ - /* show a property sheet of some sort */ - khui_action_context ctx; - khui_property_sheet * ps; - khui_credwnd_tbl * tbl; - - khui_context_get(&ctx); - tbl = (khui_credwnd_tbl *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (tbl == NULL) - return 0; - - if(ctx.scope == KHUI_SCOPE_NONE) { - khui_context_release(&ctx); - return FALSE; - } - - /* if still no context, then we can't show a property sheet */ - if(ctx.scope == KHUI_SCOPE_NONE) { - khui_context_release(&ctx); - return FALSE; - } - - khui_ps_create_sheet(&ps); - - if(ctx.scope == KHUI_SCOPE_IDENT) { - khm_handle ident; - khm_size t; - - ident = ctx.identity; - - ps->header.hInstance = khm_hInstance; - ps->header.pszIcon = MAKEINTRESOURCE(IDI_MAIN_APP); - - kcdb_identity_get_name(ident, NULL, &t); - - if(t > 0) { - ps->header.pszCaption = PMALLOC(t); - kcdb_identity_get_name(ident, - (wchar_t *) ps->header.pszCaption, &t); - } else { - ps->header.pszCaption = NULL; - } - - ps->ctx = ctx; - ps->identity = ident; - ps->credtype = KCDB_CREDTYPE_INVALID; - - kmq_post_message(KMSG_CRED, KMSG_CRED_PP_BEGIN, 0, (void *) ps); - - } else if(ctx.scope == KHUI_SCOPE_CREDTYPE) { - khm_size t = 0; - khm_int32 cred_type; - - if (ctx.identity == NULL) { - /* currently, we can't show a property sheet at this point - since most credentials providers don't provide a - property sheet that works without an identity. */ - - khui_context_release(&ctx); - khui_ps_destroy_sheet(ps); - return TRUE; - } - - cred_type = ctx.cred_type; - - ps->header.hInstance = khm_hInstance; - ps->header.pszIcon = MAKEINTRESOURCE(IDI_MAIN_APP); - - ps->ctx = ctx; - ps->credtype = cred_type; - - if(ctx.identity) { - ps->identity = ctx.identity; - /* also, if there is an associated identity, we assume that - the properties are for the specified credentials type - specific to the identity. Hence we change the title to - something else */ - kcdb_identity_get_name(ctx.identity, NULL, &t); - if (t > 0) { - ps->header.pszCaption = PMALLOC(t); - kcdb_identity_get_name(ctx.identity, (wchar_t *) ps->header.pszCaption, &t); - } else { - ps->header.pszCaption = NULL; - } - } else { - /* we don't actually reach here since we handle this case - above */ - kcdb_credtype_describe(cred_type, NULL, &t, KCDB_TS_LONG); - if(t > 0) { - ps->header.pszCaption = PMALLOC(t); - kcdb_credtype_describe(cred_type, (wchar_t *) ps->header.pszCaption, &t, KCDB_TS_LONG); - } else { - ps->header.pszCaption = NULL; - } - } - - kmq_post_message(KMSG_CRED, KMSG_CRED_PP_BEGIN, 0, (void *) ps); - } else if(ctx.scope == KHUI_SCOPE_CRED) { - khm_handle cred; - khm_size t; - - cred = ctx.cred; - - ps->header.hInstance = khm_hInstance; - ps->header.pszIcon = MAKEINTRESOURCE(IDI_MAIN_APP); - ps->ctx = ctx; - - kcdb_cred_get_name(cred, NULL, &t); - ps->header.pszCaption = PMALLOC(t); - kcdb_cred_get_name(cred, (LPWSTR) ps->header.pszCaption, &t); - - kcdb_cred_get_identity(cred, &ps->identity); - kcdb_cred_get_type(cred, &ps->credtype); - ps->cred = cred; - - kmq_post_message(KMSG_CRED, KMSG_CRED_PP_BEGIN, 0, (void *) ps); - } else { - khui_context_release(&ctx); - khui_ps_destroy_sheet(ps); - } - - /* by the way, if we are actually opening a property sheet, we - leave ctx held (which is now copied to ps->ctx). it will be - released when the property sheet is destroyed */ - - return TRUE; -} - -LRESULT -cw_wm_command(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - khui_credwnd_tbl * tbl; - - tbl = (khui_credwnd_tbl *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (tbl == NULL) - return 0; - - if(HIWORD(wParam) == BN_CLICKED && - LOWORD(wParam) == KHUI_HTWND_CTLID) { - - wchar_t wid[256]; - /* a hyperlink was activated */ - khui_htwnd_link * l; - l = (khui_htwnd_link *) lParam; - StringCchCopyN(wid, ARRAYLENGTH(wid), l->id, l->id_len); - wid[l->id_len] = 0; - - if(!wcscmp(wid, L"NewCreds")) { - PostMessage(khm_hwnd_main, WM_COMMAND, - MAKEWPARAM(KHUI_ACTION_NEW_CRED,0), 0); - } - return TRUE; - } - - switch(LOWORD(wParam)) - { - case KHUI_PACTION_ENTER: - /* enter key is a synonym for the default action, on the - context, which is to lauch a property sheet */ - /* fallthrough */ - case KHUI_ACTION_PROPERTIES: - { - return cw_properties(hwnd); - } - break; - - case KHUI_ACTION_LAYOUT_RELOAD: - { - wchar_t cname[KCONF_MAXCCH_NAME]; - khm_size cb; - - cname[0] = L'\0'; - - if (tbl->csp_view) { - cb = sizeof(cname); - khc_get_config_space_name(tbl->csp_view, - cname, - &cb); - } - - cw_unload_view(tbl); - - cw_load_view(tbl, ((cname[0])?cname: NULL), hwnd); - cw_insert_header_cols(tbl); - - cw_update_creds(tbl); - cw_update_outline(tbl); - cw_update_extents(tbl, TRUE); - cw_select_row(tbl, tbl->cursor_row, 0); - cw_update_selection_state(tbl); - - InvalidateRect(tbl->hwnd, NULL, TRUE); - } - break; - - case KHUI_ACTION_LAYOUT_ID: - { - cw_save_view(tbl, NULL); - cw_unload_view(tbl); - - cw_load_view(tbl, L"ByIdentity", hwnd); - cw_insert_header_cols(tbl); - - cw_update_creds(tbl); - cw_update_outline(tbl); - cw_update_extents(tbl, TRUE); - cw_select_row(tbl, tbl->cursor_row, 0); - cw_update_selection_state(tbl); - - InvalidateRect(tbl->hwnd, NULL, TRUE); - - } - break; - - case KHUI_ACTION_LAYOUT_LOC: - { - cw_save_view(tbl, NULL); - cw_unload_view(tbl); - - cw_load_view(tbl, L"ByLocation", hwnd); - cw_insert_header_cols(tbl); - - cw_update_creds(tbl); - cw_update_outline(tbl); - cw_update_extents(tbl, TRUE); - cw_select_row(tbl, tbl->cursor_row, 0); - cw_update_selection_state(tbl); - - InvalidateRect(tbl->hwnd, NULL, TRUE); - - } - break; - - case KHUI_ACTION_LAYOUT_TYPE: - { - cw_save_view(tbl, NULL); - cw_unload_view(tbl); - - cw_load_view(tbl, L"ByType", hwnd); - cw_insert_header_cols(tbl); - - cw_update_creds(tbl); - cw_update_outline(tbl); - cw_update_extents(tbl, TRUE); - cw_select_row(tbl, tbl->cursor_row, 0); - cw_update_selection_state(tbl); - - InvalidateRect(tbl->hwnd, NULL, TRUE); - - } - break; - - case KHUI_ACTION_LAYOUT_CUST: - { - cw_save_view(tbl, NULL); - cw_unload_view(tbl); - - cw_load_view(tbl, L"Custom_0", hwnd); - cw_insert_header_cols(tbl); - - cw_update_creds(tbl); - cw_update_outline(tbl); - cw_update_extents(tbl, TRUE); - cw_select_row(tbl, tbl->cursor_row, 0); - cw_update_selection_state(tbl); - - InvalidateRect(tbl->hwnd, NULL, TRUE); - - } - break; - - case KHUI_ACTION_LAYOUT_MINI: - { - cw_save_view(tbl, NULL); - cw_unload_view(tbl); - - cw_load_view(tbl, NULL, hwnd); - cw_insert_header_cols(tbl); - - cw_update_creds(tbl); - cw_update_outline(tbl); - cw_update_extents(tbl, TRUE); - cw_select_row(tbl, tbl->cursor_row, 0); - cw_update_selection_state(tbl); - - InvalidateRect(tbl->hwnd, NULL, TRUE); - } - break; - - case KHUI_ACTION_VIEW_ALL_IDS: - { - khm_handle hc_cw = NULL; - - tbl->view_all_idents = !tbl->view_all_idents; - - cw_update_outline(tbl); - cw_update_extents(tbl, TRUE); - cw_update_selection_state(tbl); - - InvalidateRect(tbl->hwnd, NULL, TRUE); - - if(KHM_SUCCEEDED(khc_open_space(NULL, L"CredWindow", KHM_PERM_READ | KHM_PERM_WRITE, - &hc_cw))) { - khc_write_int32(hc_cw, L"ViewAllIdents", tbl->view_all_idents); - khc_close_space(hc_cw); - } - - khui_check_action(KHUI_ACTION_VIEW_ALL_IDS, tbl->view_all_idents); - - khm_refresh_identity_menus(); - } - break; - - case KHUI_PACTION_UP: - case KHUI_PACTION_UP_EXTEND: - case KHUI_PACTION_UP_TOGGLE: - { /* cursor up */ - khm_int32 new_row; - WPARAM wp = 0; - - new_row = tbl->cursor_row - 1; - - /* checking both bounds. we make no assumption about the - value of cursor_row before this message */ - if(new_row < 0) - new_row = 0; - if(new_row >= (int) tbl->n_rows) - new_row = (int) tbl->n_rows - 1; - - if (LOWORD(wParam) == KHUI_PACTION_UP) - wp = 0; - else if (LOWORD(wParam) == KHUI_PACTION_UP_EXTEND) - wp = MK_SHIFT; - else if (LOWORD(wParam) == KHUI_PACTION_UP_TOGGLE) - wp = 0; //MK_CONTROL; - else { -#ifdef DEBUG - assert(FALSE); -#endif - } - - cw_select_row(tbl, new_row, wp); - cw_ensure_row_visible(hwnd, tbl, new_row); - } - break; - - case KHUI_PACTION_PGUP_EXTEND: - case KHUI_PACTION_PGUP: - { - khm_int32 new_row; - WPARAM wp; - RECT r; - - if (LOWORD(wParam) == KHUI_PACTION_PGUP_EXTEND) - wp = MK_SHIFT; - else - wp = 0; - - GetClientRect(hwnd, &r); - - new_row = tbl->cursor_row - - ((r.bottom - r.top) - tbl->header_height) / tbl->cell_height; - - if (new_row < 0) - new_row = 0; - if (new_row >= (int) tbl->n_rows) - new_row = (int) tbl->n_rows - 1; - - cw_select_row(tbl, new_row, wp); - cw_ensure_row_visible(hwnd, tbl, new_row); - } - break; - - case KHUI_PACTION_DOWN: - case KHUI_PACTION_DOWN_EXTEND: - case KHUI_PACTION_DOWN_TOGGLE: - { /* cursor down */ - khm_int32 new_row; - WPARAM wp = 0; - - new_row = tbl->cursor_row + 1; - - /* checking both bounds. we make no assumption about the - value of cursor_row before this message */ - if(new_row < 0) - new_row = 0; - if(new_row >= (int) tbl->n_rows) - new_row = (int) tbl->n_rows - 1; - - if (LOWORD(wParam) == KHUI_PACTION_DOWN) - wp = 0; - else if (LOWORD(wParam) == KHUI_PACTION_DOWN_EXTEND) - wp = MK_SHIFT; - else if (LOWORD(wParam) == KHUI_PACTION_DOWN_TOGGLE) - wp = 0; //MK_CONTROL; - else { -#ifdef DEBUG - assert(FALSE); -#endif - } - - cw_select_row(tbl, new_row, wp); - cw_ensure_row_visible(hwnd, tbl, new_row); - } - break; - - case KHUI_PACTION_PGDN_EXTEND: - case KHUI_PACTION_PGDN: - { - khm_int32 new_row; - RECT r; - WPARAM wp; - - if (LOWORD(wParam) == KHUI_PACTION_PGDN_EXTEND) - wp = MK_SHIFT; - else - wp = 0; - - GetClientRect(hwnd, &r); - - new_row = tbl->cursor_row + - ((r.bottom - r.top) - tbl->header_height) / tbl->cell_height; - - if (new_row < 0) - new_row = 0; - if (new_row >= (int) tbl->n_rows) - new_row = (int) tbl->n_rows - 1; - - cw_select_row(tbl, new_row, wp); - cw_ensure_row_visible(hwnd, tbl, new_row); - } - break; - - case KHUI_PACTION_SELALL: - { - cw_select_all(tbl); - } - break; - - case KHUI_PACTION_LEFT: - { /* collapse and up*/ - khui_credwnd_outline * o; - int r; - - if(tbl->cursor_row < 0 || tbl->cursor_row >= (int) tbl->n_rows) { - cw_select_row(tbl, 0, 0); - break; - } - - for(r = tbl->cursor_row; - (r >= 0 && !(tbl->rows[r].flags & KHUI_CW_ROW_HEADER)); - r--); - - if(r < 0) - break; - - /* If we were not on a header, we collapse the innermost - outline. Otherwise, we collpase up to the parent - outline level */ - - if(r != tbl->cursor_row) { - o = (khui_credwnd_outline *) tbl->rows[r].data; - - cw_toggle_outline_state(tbl, o); - } else { - o = (khui_credwnd_outline *) tbl->rows[r].data; - - if(o->flags & KHUI_CW_O_EXPAND) { - cw_toggle_outline_state(tbl, o); - } else { - o = TPARENT(o); - if(o) { - cw_toggle_outline_state(tbl, o); - r = o->start; - } else if(r > 0) - r--; - } - } - - cw_select_row(tbl, r, 0); - } - break; - - case KHUI_PACTION_RIGHT: - { /* expand and down*/ - khui_credwnd_outline * o; - int r; - - if(tbl->cursor_row < 0 || - tbl->cursor_row >= (int) tbl->n_rows) { - cw_select_row(tbl, 0, 0); - break; - } - - r = tbl->cursor_row; - - if(tbl->rows[r].flags & KHUI_CW_ROW_HEADER) { - o = (khui_credwnd_outline *) tbl->rows[r].data; - if(!(o->flags & KHUI_CW_O_EXPAND)) { - cw_toggle_outline_state(tbl, o); - } - } - - r++; - if (r >= (int) tbl->n_rows) - r = (int)tbl->n_rows - 1; - - cw_select_row(tbl, r, 0); - } - break; - } - return DefWindowProc(hwnd, uMsg, wParam, lParam); -} - -LRESULT -cw_wm_contextmenu(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - RECT r; - int x,y; - int row; - khui_credwnd_tbl * tbl; - - tbl = (khui_credwnd_tbl *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (tbl == NULL) - return 0; - - GetWindowRect(hwnd, &r); - - x = GET_X_LPARAM(lParam); - y = GET_Y_LPARAM(lParam); - - /* if the user invokes the context menu using the keyboard, we get - x=-1 and y=-1. In this case, we use the cursor_row as the - target row. */ - if (x == -1 && y == -1) { - - row = tbl->cursor_row; - - if (tbl->flags & KHUI_CW_TBL_EXPIDENT) { - int i; - - y = 0; - for (i=0; i < tbl->n_rows && i < row; i++) { - if (tbl->rows[i].flags & KHUI_CW_ROW_EXPVIEW) - y += tbl->cell_height * CW_EXP_ROW_MULT; - else - y += tbl->cell_height; - } - } else { - y = row * tbl->cell_height; - } - - x = r.left; - y = y + r.top + tbl->header_height - tbl->scr_top; - - goto have_row; - } - - x += tbl->scr_left - r.left; - y += tbl->scr_top - tbl->header_height - r.top; - - if (y < 0) { - /* context menu for header control */ - khm_menu_show_panel(KHUI_MENU_CWHEADER_CTX, - GET_X_LPARAM(lParam), - GET_Y_LPARAM(lParam)); - - return DefWindowProc(hwnd, uMsg, wParam, lParam); - } - - if (tbl->flags & KHUI_CW_TBL_EXPIDENT) { - int i, yt; - - yt = 0; - for (i=0; i < tbl->n_rows && yt < y; i++) { - if (tbl->rows[i].flags & KHUI_CW_ROW_EXPVIEW) - yt += tbl->cell_height * CW_EXP_ROW_MULT; - else - yt += tbl->cell_height; - if (yt > y) - break; - } - - row = i; - - } else { - row = y / tbl->cell_height; - } - - if(row < 0 || row >= (int) tbl->n_rows) - return FALSE; - - /* now, if the user has right clicked outside the selection, we - treat the right-click as a regular click before showing the - context menu. */ - if (!(tbl->rows[row].flags & KHUI_CW_ROW_SELECTED)) { - cw_select_row(tbl, row, 0); - } - - x = GET_X_LPARAM(lParam); - y = GET_Y_LPARAM(lParam); - - have_row: - - cw_set_row_context(tbl, row); - - khm_menu_show_panel(KHUI_MENU_IDENT_CTX, x, y); - - return DefWindowProc(hwnd, uMsg, wParam, lParam); -} - -/* copy and paste template */ -#if 0 -LRESULT -cw_wm_msg(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - return DefWindowProc(hwnd, uMsg, wParam, lParam); -} -#endif - -LRESULT CALLBACK -khm_credwnd_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) -{ - switch(uMsg) { - case WM_COMMAND: - return cw_wm_command(hwnd, uMsg, wParam, lParam); - - case WM_CREATE: - return cw_wm_create(hwnd, uMsg, wParam, lParam); - - case WM_DESTROY: - return cw_wm_destroy(hwnd, uMsg, wParam, lParam); - - case WM_ERASEBKGND: - /* we don't bother wasting cycles erasing the background - because the foreground elements completely cover the - client area */ - return FALSE; - - case WM_PAINT: - return cw_wm_paint(hwnd, uMsg, wParam, lParam); - - case WM_PRINTCLIENT: - return cw_wm_paint(hwnd, uMsg, wParam, lParam); - - case WM_SIZE: - return cw_wm_size(hwnd, uMsg, wParam, lParam); - - case WM_NOTIFY: - return cw_wm_notify(hwnd, uMsg, wParam, lParam); - - case WM_HSCROLL: - return cw_wm_hscroll(hwnd, uMsg, wParam, lParam); - - case WM_VSCROLL: - return cw_wm_vscroll(hwnd, uMsg, wParam, lParam); - - case KMQ_WM_DISPATCH: - return cw_kmq_wm_dispatch(hwnd, uMsg, wParam, lParam); - - case WM_LBUTTONDBLCLK: - case WM_LBUTTONDOWN: - case WM_MOUSEMOVE: - case WM_LBUTTONUP: - return cw_wm_mouse(hwnd, uMsg, wParam, lParam); - - case WM_CONTEXTMENU: - return cw_wm_contextmenu(hwnd, uMsg, wParam, lParam); - } - - return DefWindowProc(hwnd,uMsg,wParam,lParam); -} - -void -khm_measure_identity_menu_item(HWND hwnd, LPMEASUREITEMSTRUCT lpm, khui_action * act) -{ - wchar_t * cap; - HDC hdc; - SIZE sz; - size_t len; - HFONT hf_old; - - sz.cx = MENU_SIZE_ICON_X; - sz.cy = MENU_SIZE_ICON_Y; - - cap = act->caption; -#ifdef DEBUG - assert(cap); -#endif - hdc = GetDC(khm_hwnd_main); -#ifdef DEBUG - assert(hdc); -#endif - - StringCchLength(cap, KHUI_MAXCCH_NAME, &len); - - hf_old = SelectFont(hdc, (HFONT) GetStockObject(DEFAULT_GUI_FONT)); - - GetTextExtentPoint32(hdc, cap, (int) len, &sz); - - SelectFont(hdc, hf_old); - - ReleaseDC(khm_hwnd_main, hdc); - - lpm->itemWidth = sz.cx + sz.cy * 3 / 2 + GetSystemMetrics(SM_CXSMICON); - lpm->itemHeight = sz.cy * 3 / 2; -} - -void -khm_draw_identity_menu_item(HWND hwnd, LPDRAWITEMSTRUCT lpd, khui_action * act) -{ - khui_credwnd_tbl * tbl; - khm_handle ident; - size_t count = 0; - COLORREF old_clr; - wchar_t * cap; - size_t len; - int margin; - SIZE sz; - HBRUSH hbr; - COLORREF text_clr; - khm_int32 idflags; - khm_int32 expflags; - - tbl = (khui_credwnd_tbl *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (tbl == NULL) - return; - - ident = act->data; - cap = act->caption; -#ifdef DEBUG - assert(ident != NULL); - assert(cap != NULL); -#endif - - { - khui_credwnd_ident * cwi; - - cwi = cw_find_ident(tbl, ident); - if (cwi) { - count = cwi->id_credcount; - } else { - count = 0; - } - } - - expflags = cw_get_buf_exp_flags(tbl, ident); - - text_clr = tbl->cr_hdr_normal; - - if (lpd->itemState & (ODS_HOTLIGHT | ODS_SELECTED)) { - hbr = GetSysColorBrush(COLOR_HIGHLIGHT); - text_clr = GetSysColor(COLOR_HIGHLIGHTTEXT); - } else if (expflags == CW_EXPSTATE_EXPIRED) { - hbr = tbl->hb_hdr_bg_exp; - } else if (expflags == CW_EXPSTATE_WARN) { - hbr = tbl->hb_hdr_bg_warn; - } else if (expflags == CW_EXPSTATE_CRITICAL) { - hbr = tbl->hb_hdr_bg_crit; - } else if (count > 0) { - hbr = tbl->hb_hdr_bg_cred; - } else { - hbr = tbl->hb_hdr_bg; - } - - FillRect(lpd->hDC, &lpd->rcItem, hbr); - - SetBkMode(lpd->hDC, TRANSPARENT); - - old_clr = SetTextColor(lpd->hDC, text_clr); - - StringCchLength(cap, KHUI_MAXCCH_NAME, &len); - - GetTextExtentPoint32(lpd->hDC, cap, (int) len, &sz); - margin = sz.cy / 4; - - TextOut(lpd->hDC, lpd->rcItem.left + margin * 2 + GetSystemMetrics(SM_CXSMICON), - lpd->rcItem.top + margin, cap, (int) len); - - SetTextColor(lpd->hDC, old_clr); - - kcdb_identity_get_flags(ident, &idflags); - - if (idflags & KCDB_IDENT_FLAG_DEFAULT) { - HICON hic; - - hic = (HICON) LoadImage(khm_hInstance, MAKEINTRESOURCE(IDI_ENABLED), - IMAGE_ICON, - GetSystemMetrics(SM_CXSMICON), - GetSystemMetrics(SM_CYSMICON), - LR_DEFAULTCOLOR); - if (hic) { - DrawIconEx(lpd->hDC, - lpd->rcItem.left + margin, - lpd->rcItem.top + margin, - hic, - GetSystemMetrics(SM_CXSMICON), - GetSystemMetrics(SM_CYSMICON), - 0, - hbr, - DI_NORMAL); - DestroyIcon(hic); - } - } -} - -void -khm_register_credwnd_class(void) { - WNDCLASSEX wcx; - kcdb_attrib attrib; - khm_int32 attr_id; - - wcx.cbSize = sizeof(wcx); - wcx.style = CS_DBLCLKS | CS_OWNDC; - wcx.lpfnWndProc = khm_credwnd_proc; - wcx.cbClsExtra = 0; - wcx.cbWndExtra = sizeof(LONG_PTR); - wcx.hInstance = khm_hInstance; - wcx.hIcon = NULL; - wcx.hCursor = LoadCursor((HINSTANCE) NULL, IDC_ARROW); - wcx.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); - wcx.lpszMenuName = NULL; - wcx.lpszClassName = KHUI_CREDWND_CLASS_NAME; - wcx.hIconSm = NULL; - - khui_credwnd_cls = RegisterClassEx(&wcx); - - /* while we are at it, register the credwnd attribute type as well, and - obtain the type ID */ - if(KHM_FAILED(kcdb_attrib_get_id(KHUI_CREDWND_FLAG_ATTRNAME, &attr_id))) { - ZeroMemory(&attrib, sizeof(attrib)); - attrib.id = KCDB_ATTR_INVALID; - attrib.flags = KCDB_ATTR_FLAG_HIDDEN; - attrib.type = KCDB_TYPE_INT32; - attrib.name = KHUI_CREDWND_FLAG_ATTRNAME; - - kcdb_attrib_register(&attrib, &attr_id); - } - - khui_cw_flag_id = attr_id; -} - -void -khm_unregister_credwnd_class(void) { - UnregisterClass(MAKEINTATOM(khui_credwnd_cls), khm_hInstance); -} - -HWND -khm_create_credwnd(HWND parent) { - RECT r; - HWND hwnd; - - ZeroMemory(attr_to_action, sizeof(attr_to_action)); - - GetClientRect(parent, &r); - - hwnd = CreateWindowEx - (0, - MAKEINTATOM(khui_credwnd_cls), - L"", - WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, - r.left, - r.top, - r.right - r.left, - r.bottom - r.top, - parent, - NULL, - khm_hInstance, - NULL); - - return hwnd; -} diff --git a/src/windows/identity/ui/credwnd.h b/src/windows/identity/ui/credwnd.h deleted file mode 100644 index 7f9071014..000000000 --- a/src/windows/identity/ui/credwnd.h +++ /dev/null @@ -1,306 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_CREDWND_H -#define __KHIMAIRA_CREDWND_H - -#define KHUI_CREDWND_CLASS_NAME L"NetIDMgrCredWnd" - -#define KHUI_CREDWND_FLAG_ATTRNAME L"CredWndFlags" - -extern khm_int32 khui_cw_flag_id; - -/* The expiration states */ -#define CW_EXPSTATE_NONE 0x00000000 -#define CW_EXPSTATE_WARN 0x00000400 -#define CW_EXPSTATE_CRITICAL 0x00000800 -#define CW_EXPSTATE_EXPIRED 0x00000c00 - -#define CW_EXPSTATE_MASK 0x00000c00 - -typedef struct khui_credwnd_outline_t { - khm_int32 flags; /* combination of KHUI_CW_O_* */ - khm_int32 start; /* first row of outline */ - khm_int32 length; /* number of rows in outline */ - khm_int32 level; /* outline level */ - khm_int32 col; /* outline column */ - wchar_t *header; /* character string associated with header */ - khm_int32 attr_id; - void * data; /* level specific data : - Identity -> handle to identity - Type -> type ID - otherwise -> canonical data buffer - */ - khm_size cb_data; - - khm_size idx_start; /* index of the first cred in the credset */ - khm_size idx_end; /* index of the last cred in the credset */ - TDCL(struct khui_credwnd_outline_t); -} khui_credwnd_outline; - -#define KHUI_CW_O_EXPAND 0x00000001 -#define KHUI_CW_O_STICKY 0x00000002 -#define KHUI_CW_O_VISIBLE 0x00000004 -#define KHUI_CW_O_SHOWFLAG 0x00000008 -#define KHUI_CW_O_SELECTED 0x00000010 -#define KHUI_CW_O_DATAALLOC 0x00000020 -#define KHUI_CW_O_NOOUTLINE 0x00000040 -#define KHUI_CW_O_RELIDENT 0x00000080 -#define KHUI_CW_O_EMPTY 0x00000100 -/* NOTE: KHUI_CW_O_* shares the same bit-space as CW_EXPSTATE_* */ - -typedef struct khui_credwnd_row_t { - khm_int32 flags; - khm_int32 col; - khm_handle data; - khm_size idx_start; - khm_size idx_end; - RECT r_ext; /* extents of this row */ -} khui_credwnd_row; - -#define KHUI_CW_ROW_CRED 0x00000002 -#define KHUI_CW_ROW_HEADER 0x00000004 -#define KHUI_CW_ROW_TIMERSET 0x00000008 -#define KHUI_CW_ROW_SELECTED 0x00000010 -#define KHUI_CW_ROW_EXPVIEW 0x00000020 -/* NOTE: KHUI_CW_ROW_* shares the same bit-space as CW_EXPSTATE_* */ - -/* row allocation */ -/* initial number of rows to be allocated */ -#define KHUI_CW_ROW_INITIAL 512 -/* allocation increment, if we run out of space */ -#define KHUI_CW_ROW_INCREMENT 512 - -typedef struct khui_credwnd_col_t { - khm_int32 attr_id; - khm_int32 width; /* width of the column (screen units) */ - khm_int32 x; /* starting x coordinate (screen units) */ - khm_int32 flags; /* combination of KHUI_CW_COL_* */ - khm_int32 sort_index; - wchar_t * title; -} khui_credwnd_col; - -/* column allocation */ -/* initial number of columns to be allocated */ -#define KHUI_CW_COL_INITIAL 16 -/* allocation increment, if we run out of space */ -#define KHUI_CW_COL_INCREMENT 16 - -#define KHUI_CW_COL_AUTOSIZE 0x00000001 -#define KHUI_CW_COL_SORT_INC 0x00000002 -#define KHUI_CW_COL_SORT_DEC 0x00000004 -#define KHUI_CW_COL_GROUP 0x00000008 -#define KHUI_CW_COL_FIXED_WIDTH 0x00000010 -#define KHUI_CW_COL_FIXED_POS 0x00000020 -#define KHUI_CW_COL_META 0x00000040 -#define KHUI_CW_COL_FILLER 0x00000080 - -/* Custom column attributes (are not kcdb attributes) */ -#define CW_CA_FLAGS -1 -#define CW_CANAME_FLAGS L"_CWFlags" - -#define CW_CA_TYPEICON -2 -#define CW_CANAME_TYPEICON L"_CWTypeIcon" - -#define cw_is_custom_attr(i) ((i)<0) - -typedef struct tag_khui_credwnd_ident { - - khm_handle ident; - khm_int32 ident_flags; - khm_int32 credtype; - wchar_t name[KCDB_IDENT_MAXCCH_NAME]; - wchar_t credtype_name[KCDB_MAXCCH_NAME]; - - khm_size credcount; /* count of all credentials */ - khm_size id_credcount; /* count of identity credentials - (credentials that are of the - identity type */ - khm_size init_credcount; /* count of initial credentials */ - FILETIME ft_expire; - -} khui_credwnd_ident; - -#define CW_IDENT_ALLOC_INCR 4 - -#define CW_EXP_ROW_MULT 2 - -typedef struct khui_credwnd_tbl_t { - HWND hwnd; /* the window that this table belongs to */ - - khm_handle csp_view; /* handle to the configuration space - that defined the view */ - - khm_int32 scr_top; /* screen units */ - khm_int32 scr_left; /* screen units */ - khm_int32 ext_width; /* screen units */ - khm_int32 ext_height; /* screen units */ - khm_int32 cell_height; /* screen units */ - - HWND hwnd_header; /* header control */ - khm_int32 header_height; /* height of the header */ - HWND hwnd_notif; /* notification control */ - - khui_credwnd_col * cols; /* n_cols elements */ - khui_credwnd_row * rows; /* n_rows elements */ - int n_cols; - int n_total_cols; /* number of columns actually - allocated in cols */ - int n_rows; - int n_total_rows; /* number of rows actually allocated - in rows */ - - khui_credwnd_outline * outline; - - khm_int32 flags; /* combo of KHUI_CW_TBL_* */ - - int cursor_row; /* cursor and selection */ - int anchor_row; /* anchor, for range selections */ - - /* view parameters */ - khm_int32 hpad; - khm_int32 vpad; - khm_int32 hpad_h; /* horizontal padding correction for headers */ - khm_int32 threshold_warn; /* Warning threshold, in seconds*/ - khm_int32 threshold_critical; /* Critical threshold, in seconds */ - - /* graphics objects we are going to need. */ - HFONT hf_normal; /* normal text */ - HFONT hf_header; /* header text */ - HFONT hf_bold; /* bold text */ - HFONT hf_bold_header; /* bold header text */ - - HBRUSH hb_normal; /* normal background brush */ - HBRUSH hb_grey; /* normal background brush (greyed) */ - HBRUSH hb_s; /* normal background brush (selected) */ - - HBRUSH hb_hdr_bg; /* header background brush (normal) */ - HBRUSH hb_hdr_bg_cred; /* header background brush (valid creds) */ - HBRUSH hb_hdr_bg_exp; /* header background brush (expired) */ - HBRUSH hb_hdr_bg_warn; /* header background brush (warn) */ - HBRUSH hb_hdr_bg_crit; /* header background brush (critical) */ - - HBRUSH hb_hdr_bg_s; /* header background brush (selected) */ - HBRUSH hb_hdr_bg_cred_s;/* header background brush (valid creds) */ - HBRUSH hb_hdr_bg_exp_s; /* header background brush (expired,selected) */ - HBRUSH hb_hdr_bg_warn_s;/* header background brush (warn,selected) */ - HBRUSH hb_hdr_bg_crit_s;/* header background brush (critical,selected) */ - - COLORREF cr_normal; /* text color (normal) */ - COLORREF cr_s; /* text color (selected) */ - COLORREF cr_hdr_normal; /* header text color (normal) */ - COLORREF cr_hdr_s; /* header text color (selected) */ - COLORREF cr_hdr_gray; /* header text color (greyed) */ - COLORREF cr_hdr_gray_s; /* header text color (greyed,selected) */ - - COLORREF cr_hdr_outline;/* header outline color */ - - HCURSOR hc_hand; /* the HAND cursor */ - khui_ilist * ilist; /* image list */ - - HICON hi_lg_ident; /* large identity icon */ - - /* mouse state */ - khm_int32 mouse_state; /* state of the mouse can be combo of CW_MOUSE_* values */ - khm_int32 mouse_row; /* row that the mouse state applies to */ - khm_int32 mouse_col; /* col that the mouse state applies to */ - - khui_bitmap kbm_logo_shade; - - /* the credentials set */ - khm_handle credset; - - khui_credwnd_ident * idents; - khm_size n_idents; - khm_size nc_idents; - - khm_int32 view_all_idents; - -} khui_credwnd_tbl; - -#define KHUI_MAXCB_HEADING 256 - -/* table flags */ -#define KHUI_CW_TBL_INITIALIZED 0x00000001 -#define KHUI_CW_TBL_COL_DIRTY 0x00000002 -#define KHUI_CW_TBL_ROW_DIRTY 0x00000004 -#define KHUI_CW_TBL_ACTIVE 0x00000100 -#define KHUI_CW_TBL_CUSTVIEW 0x00000200 -#define KHUI_CW_TBL_COLSKIP 0x00000400 -#define KHUI_CW_TBL_EXPIDENT 0x00000800 -#define KHUI_CW_TBL_NOHEADER 0x00001000 - -/* mouse_state constants */ -#define CW_MOUSE_NONE 0x00000000 /* nothing interesting */ -#define CW_MOUSE_WIDGET 0x00000001 /* mouse is highlighting a - widget */ -#define CW_MOUSE_LDOWN 0x00000002 /* left button is down */ -#define CW_MOUSE_ROW 0x00000004 /* mouse is acive over a valid - row */ -#define CW_MOUSE_WOUTLINE 0x00000008 /* mouse is highlighting an - outline widget */ -#define CW_MOUSE_WSTICKY 0x00000010 /* mouse is highlighting a - sticky widget */ -#define CW_MOUSE_WICON 0x00000020 /* an icon widget. represents - the icon next to identities - and next to credentials. */ - -#define CW_MOUSE_WMASK 0x00000039 /* all widget bits */ - -void khm_unregister_credwnd_class(void); - -void khm_register_credwnd_class(void); - -HWND khm_create_credwnd(HWND parent); - -LRESULT CALLBACK khm_credwnd_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam - ); - -void cw_load_view(khui_credwnd_tbl * tbl, wchar_t * viewname, HWND hwnd); - -void cw_update_creds(khui_credwnd_tbl * tbl); - -void cw_unload_view(khui_credwnd_tbl * tbl); - -void cw_hditem_from_tbl_col(khui_credwnd_col * col, HDITEM *phi); - -int cw_update_extents(khui_credwnd_tbl * tbl, khm_boolean update_scroll); - -void cw_insert_header_cols(khui_credwnd_tbl * tbl); - -void khm_get_cw_element_font(HDC hdc, wchar_t * name, BOOL use_default, - LOGFONT * pfont); - -void khm_set_cw_element_font(wchar_t * name, LOGFONT * pfont); - -void khm_draw_identity_menu_item(HWND hwnd, LPDRAWITEMSTRUCT lpd, khui_action * act); - -void khm_measure_identity_menu_item(HWND hwnd, LPMEASUREITEMSTRUCT lpm, khui_action * act); - -#endif diff --git a/src/windows/identity/ui/debugfuncs.c b/src/windows/identity/ui/debugfuncs.c deleted file mode 100644 index ad478e5fd..000000000 --- a/src/windows/identity/ui/debugfuncs.c +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<tchar.h> - -#include<shlwapi.h> -#include<khmapp.h> - -#include<stdio.h> - -#if DEBUG -#include<assert.h> -#endif - -#define LOGFILENAME "nidmdbg.log" - -CRITICAL_SECTION cs_log; -FILE * logfile = NULL; -BOOL log_started = FALSE; - -wchar_t * -severity_string(kherr_severity severity) { - switch(severity) { - case KHERR_FATAL: - return L"FATAL"; - - case KHERR_ERROR: - return L"ERROR"; - - case KHERR_WARNING: - return L"Warning"; - - case KHERR_INFO: - return L"Info"; - - case KHERR_DEBUG_3: - return L"Debug(3)"; - - case KHERR_DEBUG_2: - return L"Debug(2)"; - - case KHERR_DEBUG_1: - return L"Debug(1)"; - - case KHERR_NONE: - return L"(None)"; - - default: - return L"(Unknown severity)"; - } -} - -void -fprint_systime(FILE * f, SYSTEMTIME *psystime) { - fprintf(logfile, - "%d-%d-%d %02d:%02d:%02d.%03d", - - (int) psystime->wYear, - (int) psystime->wMonth, - (int) psystime->wDay, - - (int) psystime->wHour, - (int) psystime->wMinute, - (int) psystime->wSecond, - (int) psystime->wMilliseconds); -} - -void KHMAPI -debug_event_handler(enum kherr_ctx_event e, - kherr_context * c) { - kherr_event * evt; - - EnterCriticalSection(&cs_log); - - if (!logfile) - goto _done; - - if (e == KHERR_CTX_BEGIN) { - SYSTEMTIME systime; - - GetSystemTime(&systime); - fprintf(logfile, - "%d\t", - c->serial); - - fprint_systime(logfile, &systime); - - fprintf(logfile, - "\t<< Context begin --\n"); - - } else if (e == KHERR_CTX_DESCRIBE) { - evt = kherr_get_desc_event(c); - if (evt) { - kherr_evaluate_event(evt); - fprintf(logfile, - "%d\t Description: %S\n", - c->serial, - (evt->long_desc)? evt->long_desc: evt->short_desc); - } - } else if (e == KHERR_CTX_END) { - SYSTEMTIME systime; - - fprintf(logfile, - "%d\t", - c->serial); - - GetSystemTime(&systime); - fprint_systime(logfile, &systime); - - fprintf(logfile, - "\t>> Context end --\n"); - - } else if (e == KHERR_CTX_EVTCOMMIT) { - evt = kherr_get_last_event(c); - if (evt && (evt->short_desc || evt->long_desc)) { - SYSTEMTIME systime; - - kherr_evaluate_event(evt); - FileTimeToSystemTime(&evt->time_ft, &systime); - - fprintf(logfile, - "%d[%d](%S)\t", - c->serial, - evt->thread_id, - (evt->facility ? evt->facility: L"")); - - fprint_systime(logfile, &systime); - - fprintf(logfile, - "\t%S: %S %S%S%S %S%S%S\n", - - severity_string(evt->severity), - - (evt->short_desc ? evt->short_desc: L""), - - (evt->short_desc ? L"(":L""), - (evt->long_desc ? evt->long_desc: L""), - (evt->short_desc ? L")":L""), - - (evt->suggestion ? L"[":L""), - (evt->suggestion ? evt->suggestion: L""), - (evt->suggestion ? L"]":L"") - ); - } - } - - _done: - - LeaveCriticalSection(&cs_log); -} - -void khm_get_file_log_path(khm_size cb_buf, wchar_t * buf) { -#ifdef DEBUG - assert(cb_buf > sizeof(wchar_t)); -#endif - *buf = L'\0'; - - GetTempPath((DWORD) cb_buf / sizeof(wchar_t), buf); - - StringCbCat(buf, cb_buf, _T(LOGFILENAME)); -} - -void khm_start_file_log(void) { - wchar_t temppath[MAX_PATH]; - khm_handle cs_cw = NULL; - khm_int32 t = 0; - - EnterCriticalSection(&cs_log); - - if (log_started) - goto _done; - - if (KHM_FAILED(khc_open_space(NULL, L"CredWindow", 0, &cs_cw))) - goto _done; - - if (KHM_FAILED(khc_read_int32(cs_cw, L"LogToFile", &t)) || - !t) - goto _done; - - khm_get_file_log_path(sizeof(temppath), temppath); - - logfile = NULL; -#if _MSC_VER >= 1400 && __STDC_WANT_SECURE_LIB__ - _wfopen_s(&logfile, temppath, L"w"); -#else - logfile = _wfopen(temppath, L"w"); -#endif - kherr_add_ctx_handler(debug_event_handler, - KHERR_CTX_BEGIN | - KHERR_CTX_END | - KHERR_CTX_DESCRIBE | - KHERR_CTX_EVTCOMMIT, - 0); - - log_started = TRUE; - - _done: - if (cs_cw) - khc_close_space(cs_cw); - - LeaveCriticalSection(&cs_log); -} - -void khm_stop_file_log(void) { - - EnterCriticalSection(&cs_log); - - if (!log_started) - goto _done; - - kherr_remove_ctx_handler(debug_event_handler, 0); - - if (logfile) - fclose (logfile); - logfile = NULL; - - log_started = FALSE; - - _done: - LeaveCriticalSection(&cs_log); -} - -void khm_init_debug(void) { - InitializeCriticalSection(&cs_log); - - khm_start_file_log(); -} - -void khm_exit_debug(void) { - khm_stop_file_log(); - - DeleteCriticalSection(&cs_log); -} diff --git a/src/windows/identity/ui/debugfuncs.h b/src/windows/identity/ui/debugfuncs.h deleted file mode 100644 index 6467185f3..000000000 --- a/src/windows/identity/ui/debugfuncs.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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_DEBUGFUNCS_H -#define __NETIDMGR_DEBUGFUNCS_H - -void khm_init_debug(void); -void khm_exit_debug(void); - -void khm_start_file_log(void); -void khm_stop_file_log(void); -void khm_get_file_log_path(khm_size cb_buf, wchar_t * buf); - -#endif diff --git a/src/windows/identity/ui/htwnd.c b/src/windows/identity/ui/htwnd.c deleted file mode 100644 index 29c4221a7..000000000 --- a/src/windows/identity/ui/htwnd.c +++ /dev/null @@ -1,1311 +0,0 @@ -/* -* Copyright (c) 2005 Massachusetts Institute of Technology -* -* 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<khmapp.h> -#include<crtdbg.h> - -ATOM khui_htwnd_cls; - -#define HTW_STYLE_NORMAL 0 - -/* There are currently 4 style "bits" and 3 sizes, which means - there can be 2^4*3=48 possible styles max. If someone is - feeling adventurous you can slightly improve performance of - the parser using this little fact. For now, I don't care. - (hint: combine size and style bits to form a single number - and use it as an index into the styles array) -*/ -#define HTW_STYLE_MAX 48 - -#define HTW_FORMAT_MAX 128 - -#define HTW_TAB_MAX 8 - -#define HTW_DEFAULT (-1) - -#define HTW_NORMAL_SIZE 8 -#define HTW_LARGE_SIZE 12 -#define HTW_HUGE_SIZE 20 - -/* font variant */ -#define FV_ABSOLUTE 0x10000000 - -#define FV_ITALIC 0x00000002 -#define FV_UNDERLINE 0x00000004 -#define FV_STRIKEOUT 0x00000008 -#define FV_BOLD 0x00000010 - -#define FV_NOITALIC 0x00020000 -#define FV_NOUNDERLINE 0x00040000 -#define FV_NOSTRIKEOUT 0x00080000 -#define FV_NOBOLD 0x00100000 - -#define FV_NONE 0x00000000 -#define FV_MASK 0x0000001f - -#define HTW_LINK_ALLOC 8 - -#define ALIGN_LEFT 0 -#define ALIGN_CENTER 1 -#define ALIGN_RIGHT 2 - -struct tx_tbl_t { - wchar_t * string; - LONG value; -} - -htw_color_table[] = { - {L"black", RGB(0,0,0)}, - {L"white", RGB(255,255,255)}, - {L"red", RGB(255,0,0)}, - {L"green", RGB(0,255,0)}, - {L"blue", RGB(0,0,255)}, - {L"grey", RGB(128,128,128)} -}, - -htw_size_table[] = { - {L"normal", HTW_NORMAL_SIZE}, - {L"large", HTW_LARGE_SIZE}, - {L"huge", HTW_HUGE_SIZE} -}, - -htw_align_table[] = { - {L"left", ALIGN_LEFT}, - {L"center", ALIGN_CENTER}, - {L"right", ALIGN_RIGHT} -}; - -typedef struct khui_htwnd_style_t { - LONG height; - LONG variation; /* combination of FV_* */ - - HFONT font; -} khui_htwnd_style; - -typedef struct khui_format_t { - int style_idx; - COLORREF color; -} khui_format; - -typedef struct format_stack_t { - khui_format stack[HTW_FORMAT_MAX]; - int stack_top; -} format_stack; - -typedef struct khui_htwnd_data_t { - int id; /* control ID */ - int flags; - wchar_t * text; - int scroll_left; - int scroll_top; - int ext_width; - int ext_height; - COLORREF bk_color; - HCURSOR hc_hand; - int l_pixel_y; - - khui_htwnd_style styles[HTW_STYLE_MAX]; - int n_styles; - - khui_htwnd_link ** links; - int n_links; - int max_links; - int active_link; - int md_link; - - int tabs[HTW_TAB_MAX]; - int n_tabs; -} khui_htwnd_data; - -static LONG table_lookup(struct tx_tbl_t * tbl, int n, wchar_t * v, int len) -{ - int i; - - for(i=0; i<n; i++) { - if(!_wcsnicmp(tbl[i].string, v, len)) - return tbl[i].value; - } - - return -1; -} - -static void clear_styles(khui_htwnd_data * d) -{ - int i; - - for(i=0; i<d->n_styles; i++) { - if(d->styles[i].font != NULL) { - DeleteObject(d->styles[i].font); - d->styles[i].font = NULL; - } - } - - d->n_styles = 0; -} - -static void format_init(format_stack * s) -{ - s->stack_top = -1; - ZeroMemory(s->stack, sizeof(s->stack)); -} - -static khui_format * format_current(format_stack * s) -{ - if(s->stack_top >= 0) - return &(s->stack[s->stack_top]); - else - return NULL; -} - -static int format_style(format_stack * s) -{ - if(s->stack_top >= 0) - return s->stack[s->stack_top].style_idx; - else - return 0; -} - -static COLORREF format_color(format_stack * s) -{ - if(s->stack_top >= 0) - return s->stack[s->stack_top].color; - else - return 0; -} - -static int format_level(format_stack * s) -{ - return s->stack_top; -} - -static void format_unwind(format_stack * s, int level) -{ - s->stack_top = level; -} - -static void format_push(format_stack * s, khui_htwnd_data * d, LONG height, LONG variation, COLORREF color) -{ - int i; - khui_format * top; - khui_htwnd_style * style; - - _ASSERT(s->stack_top < (HTW_FORMAT_MAX-1)); - - /* formatting is additive unless FV_NORMAL is set in variation */ - top = format_current(s); - if(top) { - style = &(d->styles[top->style_idx]); - if(height == HTW_DEFAULT) - height = style->height; - - if(variation == HTW_DEFAULT) - variation = style->variation; - else if(!(variation & FV_ABSOLUTE)) - variation |= style->variation; - - if(color == HTW_DEFAULT) - color = top->color; - } - - variation &= ~FV_ABSOLUTE; - variation ^= variation & (variation>>16); - variation &= FV_MASK; - - /* now look for an existing style that matches the requested one */ - for(i=0; i<d->n_styles; i++) { - style = &(d->styles[i]); - - if(style->height == height && - style->variation == variation) - break; - } - - s->stack_top++; - - if(i<d->n_styles) { - s->stack[s->stack_top].style_idx = i; - } else { - if(d->n_styles == HTW_STYLE_MAX) { - s->stack[s->stack_top].style_idx = 0; - } else { - s->stack[s->stack_top].style_idx = d->n_styles; - d->styles[d->n_styles].font = NULL; - d->styles[d->n_styles].height = height; - d->styles[d->n_styles].variation = variation; - d->n_styles++; - } - } - s->stack[s->stack_top].color = color; -} - -static void format_pop(format_stack * s) { - if(s->stack_top >= 0) - s->stack_top--; -} - -static wchar_t * token_end(wchar_t * s) { - while(iswalnum(*s) || *s == L'/') - s++; - return s; -} - -static wchar_t * skip_ws(wchar_t * s) { - while(iswspace(*s)) - s++; - return s; -} - -/* s points to something like " = \"value\"" - start and len will point to the start and - length of value. return value will point to the - character following the last double quote. */ -static wchar_t * read_attr(wchar_t * s, wchar_t ** start, int * len) -{ - wchar_t *e; - - *start = NULL; - *len = 0; - - do { - s = skip_ws(s); - if(*s != L'=') - break; - s = skip_ws(++s); - if(*s != L'"') - break; - e = wcschr(++s, L'"'); - if(!e) - break; - - *start = s; - *len = (int) (e - s); - - s = e + 1; - } while(FALSE); - - return s; -} - -/* -We currently support the following tags: - -<a [id="string"] [param="paramstring"]>link text</a> -<b>foo</b> -<u>foo</u> -<i>foo</i> - -<font [color="(color)"] [size="normal|large|huge|(point size)"]>foo</font> - (color)=black|white|red|green|blue|grey -<large>foo</large> -<huge>foo</huge> - -<center>foo</center> -<left>foo</left> -<right>foo</right> - -<p [align="left|center|right"]>foo</p> -<settab pos="(pos)"> -<tab> -*/ - -static int htw_parse_tag( - wchar_t * start, - wchar_t ** end, - int * align, - khui_htwnd_data * d, - format_stack * s, - PPOINT p_abs, - PPOINT p_rel, - int lh, - BOOL dry_run) -{ - wchar_t * c; - int n = 0; - - /* start initially points to the starting '<' */ - c = token_end(++start); - - if(!_wcsnicmp(start,L"a",c-start)) { - /* start of an 'a' tag */ - wchar_t * id_start = NULL; - int id_len = 0; - wchar_t * param_start = NULL; - int param_len = 0; - - /* We don't need to parse the link - if it is just a dry run */ - if(dry_run) { - format_push(s, d, HTW_DEFAULT, HTW_DEFAULT, RGB(0,0,255)); - *end = wcschr(start, L'>'); - return FALSE; - } - - while(c && *c && *c != L'>') { - wchar_t * e; - - c = skip_ws(c); - e = token_end(c); - - if(c==e) - break; - - if(!_wcsnicmp(c,L"id",e-c)) { - c = read_attr(e, &id_start, &id_len); - } else if(!_wcsnicmp(c,L"param",e-c)) { - c = read_attr(e, &param_start, &param_len); - } - } - - if(d->active_link == d->n_links) - format_push(s,d, HTW_DEFAULT, FV_UNDERLINE, RGB(0,0,255)); - else - format_push(s,d, HTW_DEFAULT, FV_NONE, RGB(0,0,255)); - - { - khui_htwnd_link * l; - - if(!d->links) { - d->links = PMALLOC(sizeof(khui_htwnd_link *) * HTW_LINK_ALLOC); - ZeroMemory(d->links, sizeof(khui_htwnd_link *) * HTW_LINK_ALLOC); - d->max_links = HTW_LINK_ALLOC; - d->n_links = 0; - } - - if(d->n_links >= d->max_links) { - khui_htwnd_link ** ll; - int n_new; - - n_new = UBOUNDSS(d->n_links + 1, HTW_LINK_ALLOC, HTW_LINK_ALLOC); - - ll = PMALLOC(sizeof(khui_htwnd_link *) * n_new); - ZeroMemory(ll, sizeof(khui_htwnd_link *) * n_new); - memcpy(ll, d->links, sizeof(khui_htwnd_link *) * d->max_links); - PFREE(d->links); - d->links = ll; - d->max_links = n_new; - } - - l = d->links[d->n_links]; - if(!l) { - l = PMALLOC(sizeof(khui_htwnd_link)); - d->links[d->n_links] = l; - } - - l->id = id_start; - l->id_len = id_len; - l->param = param_start; - l->param_len = param_len; - - l->r.left = p_abs->x; - l->r.top = p_abs->y; - - d->n_links++; - } - - } else if(!_wcsnicmp(start, L"/a", c - start)) { - khui_htwnd_link * l; - - c = wcschr(c,L'>'); - if(!c) - c = c + wcslen(c); - - format_pop(s); - - if(!dry_run) { - l = d->links[d->n_links - 1]; /* last link */ - l->r.right = p_abs->x; - l->r.bottom = p_abs->y + lh; - } - } else if(!_wcsnicmp(start, L"p", c - start)) { - wchar_t * e; - wchar_t * align_s = NULL; - int align_len = 0; - - c = skip_ws(c); - e = token_end(c); - - if(c != e && !_wcsnicmp(c,L"align",e-c)) { - c = read_attr(e, &align_s, &align_len); - } - - c = wcschr(c, L'>'); - if(!c) - c = c + wcslen(c); - - - if(align_s) - *align = table_lookup(htw_align_table, ARRAYLENGTH(htw_align_table), align_s, align_len); - else - *align = ALIGN_LEFT; - - n = 1; - } else if(!_wcsnicmp(start, L"b", c - start)) { - format_push(s,d, HTW_DEFAULT, FV_BOLD, (COLORREF) HTW_DEFAULT); - } else if(!_wcsnicmp(start, L"/b", c - start)) { - format_pop(s); - } else if(!_wcsnicmp(start, L"u", c - start)) { - format_push(s,d, HTW_DEFAULT, FV_UNDERLINE, (COLORREF) HTW_DEFAULT); - } else if(!_wcsnicmp(start, L"/u", c - start)) { - format_pop(s); - } else if(!_wcsnicmp(start, L"i", c - start)) { - format_push(s,d, HTW_DEFAULT, FV_ITALIC, (COLORREF) HTW_DEFAULT); - } else if(!_wcsnicmp(start, L"/i", c - start)) { - format_pop(s); - } else if(!_wcsnicmp(start, L"large", c - start)) { - format_push(s,d,-MulDiv(HTW_LARGE_SIZE, d->l_pixel_y, 72), HTW_DEFAULT, (COLORREF) HTW_DEFAULT); - } else if(!_wcsnicmp(start, L"/large", c - start)) { - format_pop(s); - } else if(!_wcsnicmp(start, L"huge", c - start)) { - format_push(s,d,-MulDiv(HTW_HUGE_SIZE, d->l_pixel_y, 72), HTW_DEFAULT, (COLORREF) HTW_DEFAULT); - } else if(!_wcsnicmp(start, L"/huge", c - start)) { - format_pop(s); - } else if(!_wcsnicmp(start, L"center", c - start)) { - c = wcschr(c, L'>'); - if(!c) - c = c + wcslen(c); - *align = ALIGN_CENTER; - n = 1; - } else if(!_wcsnicmp(start, L"left", c - start) || - !_wcsnicmp(start, L"p", c - start)) - { - c = wcschr(c, L'>'); - if(!c) - c = c + wcslen(c); - *align = ALIGN_LEFT; - n = 1; - } else if(!_wcsnicmp(start, L"right", c - start)) { - c = wcschr(c, L'>'); - if(!c) - c = c + wcslen(c); - *align = ALIGN_RIGHT; - n = 1; - } else if(!_wcsnicmp(start, L"/center", c - start) || - !_wcsnicmp(start, L"/left", c - start) || - !_wcsnicmp(start, L"/right", c - start) || - !_wcsnicmp(start, L"/p", c - start)) { - c = wcschr(c, L'>'); - if(!c) - c = c + wcslen(c); - *align = ALIGN_LEFT; - n = 1; - } else if(!_wcsnicmp(start, L"font", c - start)) { - wchar_t * color_s = NULL; - int color_len = 0; - wchar_t * size_s = NULL; - int size_len = 0; - LONG color = HTW_DEFAULT; - LONG h = HTW_DEFAULT; - - while(c && *c && *c != L'>') { - wchar_t * e; - - c = skip_ws(c); - e = token_end(c); - - if(c==e) - break; - - if(!_wcsnicmp(c,L"color",e-c)) { - c = read_attr(e, &color_s, &color_len); - } else if(!_wcsnicmp(c,L"size",e-c)) { - c = read_attr(e, &size_s, &size_len); - } - } - - if(color_s) - color = table_lookup(htw_color_table, ARRAYLENGTH(htw_color_table), color_s, color_len); - if(size_s) { - h = table_lookup(htw_size_table, ARRAYLENGTH(htw_size_table), size_s, size_len); - if(h) - h = -MulDiv(h, d->l_pixel_y, 72); - else - h = -MulDiv(HTW_NORMAL_SIZE, d->l_pixel_y, 72); - } - - format_push(s,d,h,HTW_DEFAULT,color); - } else if(!_wcsnicmp(start, L"/font", c - start)) { - format_pop(s); - } else if(!_wcsnicmp(start, L"settab", c - start)) { - wchar_t * e; - wchar_t * pos_s = NULL; - int pos_len; - - c = skip_ws(c); - e = token_end(c); - - if(c != e && !_wcsnicmp(c,L"pos",e-c)) { - c = read_attr(e, &pos_s, &pos_len); - } - - c = wcschr(c, L'>'); - if(!c) - c = c + wcslen(c); - - if(pos_s && d->n_tabs < HTW_TAB_MAX && !dry_run) { - wchar_t * dummy; - LONG bu; - int bx; - int dx; - - bu = GetDialogBaseUnits(); - bx = LOWORD(bu); - - dx = wcstol(pos_s, &dummy, 10); - - d->tabs[d->n_tabs++] = MulDiv(dx, bx, 4); - } - } else if(!_wcsnicmp(start, L"tab", c - start)) { - int i; - - if(!dry_run) { - for(i=0; i < d->n_tabs; i++) { - if(d->tabs[i] > p_rel->x) { - p_rel->x = d->tabs[i]; - break; - } - } - } - } - - if(*c) - c++; - *end = c; - - return n; -} - -static void htw_assert_style(HDC hdc, khui_htwnd_data * d, int style) -{ - LOGFONT lf; - - if(d->styles[style].font) - return; - - /*TODO: we need select different fonts depending on system locale */ - lf.lfHeight = d->styles[style].height; //-MulDiv(8, GetDeviceCaps(hdc, LOGPIXELSY), 72); - lf.lfWidth = 0; - lf.lfEscapement = 0; - lf.lfOrientation = 0; - lf.lfWeight = (d->styles[style].variation & FV_BOLD)? FW_BOLD: FW_NORMAL; - lf.lfItalic = (BYTE) !!(d->styles[style].variation & FV_ITALIC); - lf.lfUnderline = (BYTE) !!(d->styles[style].variation & FV_UNDERLINE); - lf.lfStrikeOut = (BYTE) !!(d->styles[style].variation & FV_STRIKEOUT); - lf.lfCharSet = DEFAULT_CHARSET; - lf.lfOutPrecision = OUT_DEFAULT_PRECIS; - lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; - lf.lfQuality = DEFAULT_QUALITY; - lf.lfPitchAndFamily = DEFAULT_PITCH; - - LoadString(khm_hInstance, IDS_DEFAULT_FONT, lf.lfFaceName, ARRAYLENGTH(lf.lfFaceName)); - - d->styles[style].font = CreateFontIndirect(&lf); -} - -static LRESULT htw_paint(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - PAINTSTRUCT ps; - HBRUSH hbk; - khui_htwnd_data * d; - RECT r; - SIZE s; - HDC hdc; - wchar_t * text; - format_stack s_stack; - - int align; - int y; - wchar_t * par_start; - int ext_width = 0; - int ext_height = 0; - - d = (khui_htwnd_data *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (d == NULL) - return 0; - - if(!GetUpdateRect(hwnd, &r, !(d->flags & KHUI_HTWND_TRANSPARENT))) - return 0; - - if(d->text == NULL) - return 0; - - text = d->text; - - hdc = BeginPaint(hwnd, &ps); - - GetClientRect(hwnd, &r); - -#ifdef DRAW_HTWND_CLIENT_EDGE - /* for the moment, we are skipping on the client edge. */ - if(d->flags & KHUI_HTWND_CLIENTEDGE) - DrawEdge(hdc, &r, EDGE_SUNKEN, BF_ADJUST | BF_RECT | BF_FLAT); -#endif - - hbk = GetSysColorBrush(COLOR_WINDOW); - FillRect(hdc, &r, hbk); - hbk = NULL; /* We don't need to destroy system - brushes */ - - /* push the default format */ - format_init(&s_stack); - - d->l_pixel_y = GetDeviceCaps(hdc, LOGPIXELSY); - format_push(&s_stack,d, -MulDiv(HTW_NORMAL_SIZE, d->l_pixel_y, 72), FV_NONE, RGB(0,0,0)); - - y = r.top - d->scroll_top; - - par_start = text; - - align = ALIGN_LEFT; - - SetTextAlign(hdc, TA_TOP | TA_LEFT | TA_NOUPDATECP); - if(d->flags & KHUI_HTWND_TRANSPARENT) - SetBkMode(hdc, TRANSPARENT); - - d->n_links = 0; - d->n_tabs = 0; - - while(*par_start) { - wchar_t * p = par_start; - wchar_t * c = NULL; - int p_width = 0; - int s_start; - int l_height = 0; - int x = 0; - POINT pt; - POINT pt_rel; - - s_start = format_level(&s_stack); - - /* begin dry run */ - while(*p) { - if(*p == L'<') { - int talign = -1; - int n = htw_parse_tag(p,&c,&talign,d,&s_stack,NULL,NULL,0,TRUE); - - if(n && p_width) - break; - - p = c; - - if(n && talign >= 0) - align = talign; - } else { - HFONT hfold; - c = wcschr(p, L'<'); - if(!c) - c = p + wcslen(p); - - htw_assert_style(hdc, d, format_style(&s_stack)); - hfold = SelectFont(hdc, d->styles[format_style(&s_stack)].font); - GetTextExtentPoint32(hdc, p, (int)(c - p), &s); - SelectFont(hdc, hfold); - - p_width += s.cx; - if(s.cy > l_height) - l_height = s.cy; - - p = c; - } - } - - /* dry run ends */ - - x = r.left - d->scroll_left; - - if(align == ALIGN_CENTER) { - if (r.right - r.left > p_width) - x += (r.right - r.left)/2 - p_width / 2; - } - - else if(align == ALIGN_RIGHT) { - if (r.right - r.left > p_width) - x += (r.right - r.left) - p_width; - } - - /* begin wet run */ - p = par_start; - format_unwind(&s_stack, s_start); /* unwind format stack */ - - p_width = 0; - - while(p && *p) { - if(*p == L'<') { - int talign = -1; - int n; - - pt.x = x + p_width; - pt.y = y; - pt_rel.x = p_width; - pt_rel.y = 0; - - n = htw_parse_tag(p, &c, &talign, d, &s_stack, &pt, &pt_rel, l_height, FALSE); - - if(n && p_width) { - break; - } - - p_width = pt_rel.x; - - p = c; - if(n && talign >= 0) - align = talign; - } else { - HFONT hfold; - RECT rd; - - c = wcschr(p, L'<'); - if(!c) - c = p + wcslen(p); - - htw_assert_style(hdc, d, format_style(&s_stack)); - hfold = SelectFont(hdc, d->styles[format_style(&s_stack)].font); - SetTextColor(hdc, format_color(&s_stack)); - - GetTextExtentPoint32(hdc, p, (int)(c - p), &s); - rd.left = x + p_width; - rd.top = y; - rd.right = rd.left + s.cx; - rd.bottom = rd.top + l_height; - - DrawText(hdc, p, (int)(c - p), &rd, - DT_BOTTOM | DT_LEFT | DT_SINGLELINE | DT_NOPREFIX); - - p_width += s.cx; - - SelectFont(hdc, hfold); - p = c; - } - } - - if (p_width > ext_width) - ext_width = p_width; - - y += l_height; - par_start = p; - } - - if (y > ext_height) - ext_height = y; - - EndPaint(hwnd, &ps); - - if (d->ext_width < ext_width || - d->ext_height < ext_height) { - SCROLLINFO si; - LONG l; - - /* the extents need to be adjusted. But first check if we - have exactly the right scroll bars we need. */ - if ((ext_width > (r.right - r.left) && - !(d->flags & KHUI_HTWND_HSCROLL)) || - (ext_height > (r.bottom - r.top) && - !(d->flags & KHUI_HTWND_VSCROLL)) || - - (ext_width <= (r.right - r.left) && - (d->flags & KHUI_HTWND_HSCROLL)) || - (ext_height <= (r.bottom - r.top) && - (d->flags & KHUI_HTWND_VSCROLL))) { - - /* need to add scroll bars */ - if (ext_width > (r.right - r.left)) - d->flags |= KHUI_HTWND_HSCROLL; - else - d->flags &= ~KHUI_HTWND_HSCROLL; - - if (ext_height > (r.bottom - r.top)) - d->flags |= KHUI_HTWND_VSCROLL; - else - d->flags &= ~KHUI_HTWND_VSCROLL; - - l = (LONG) GetWindowLongPtr(hwnd, GWL_STYLE); - l &= ~(WS_HSCROLL | WS_VSCROLL); - - l |= ((d->flags & KHUI_HTWND_HSCROLL) ? WS_HSCROLL : 0) | - ((d->flags & KHUI_HTWND_VSCROLL) ? WS_VSCROLL : 0); - - SetWindowLongPtr(hwnd, GWL_STYLE, l); - - InvalidateRect(hwnd, NULL, FALSE); - /* since the client area changed, we do another redraw - before updating the scroll bar positions. */ - } else { - d->ext_width = ext_width; - d->ext_height = ext_height; - - if (d->flags & KHUI_HTWND_HSCROLL) { - ZeroMemory(&si, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_ALL | SIF_DISABLENOSCROLL; - si.nMin = 0; - si.nMax = ext_width; - si.nPage = r.right - r.left; - si.nPos = d->scroll_left; - - SetScrollInfo(hwnd, SB_HORZ, &si, TRUE); - } - - if (d->flags & KHUI_HTWND_VSCROLL) { - ZeroMemory(&si, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_ALL | SIF_DISABLENOSCROLL; - si.nMin = 0; - si.nMax = ext_height; - si.nPage = r.bottom - r.top; - si.nPos = d->scroll_top; - - SetScrollInfo(hwnd, SB_VERT, &si, TRUE); - } - } - } - - return 0; -} - -LRESULT CALLBACK khui_htwnd_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam - ) -{ - switch(uMsg) { - case WM_CREATE: - { - CREATESTRUCT * cs; - khui_htwnd_data * d; - size_t cbsize; - - cs = (CREATESTRUCT *) lParam; - - d = PMALLOC(sizeof(*d)); - ZeroMemory(d, sizeof(*d)); - - if(cs->dwExStyle & WS_EX_TRANSPARENT) { - d->flags |= KHUI_HTWND_TRANSPARENT; - } - if(cs->dwExStyle & WS_EX_CLIENTEDGE) { - d->flags |= KHUI_HTWND_CLIENTEDGE; - } - if(cs->style & WS_HSCROLL) { - d->flags |= KHUI_HTWND_HSCROLL; - } - if(cs->style & WS_VSCROLL) { - d->flags |= KHUI_HTWND_VSCROLL; - } - d->id = (int)(INT_PTR) cs->hMenu; - - d->active_link = -1; - d->bk_color = RGB(255,255,255); - d->hc_hand = LoadCursor(NULL, IDC_HAND); - - if(SUCCEEDED(StringCbLength(cs->lpszName, KHUI_HTWND_MAXCB_TEXT, &cbsize))) { - cbsize += sizeof(wchar_t); - d->text = PMALLOC(cbsize); - StringCbCopy(d->text, cbsize, cs->lpszName); - } - - /* this is just a flag to the WM_PAINT handler that the - extents haven't been set yet. */ - d->ext_width = -1; - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, 0, (LONG_PTR) d); -#pragma warning(pop) - - return 0; - } - break; - - case WM_SETTEXT: - { - wchar_t * newtext; - size_t cbsize; - khui_htwnd_data * d; - BOOL rv; - - d = (khui_htwnd_data *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (d == NULL) - return 0; - - newtext = (wchar_t *) lParam; - - if(d->text) { - PFREE(d->text); - d->text = NULL; - } - - if(SUCCEEDED(StringCbLength(newtext, KHUI_HTWND_MAXCB_TEXT, &cbsize))) { - cbsize += sizeof(wchar_t); - d->text = PMALLOC(cbsize); - StringCbCopy(d->text, cbsize, newtext); - rv = TRUE; - } else - rv = FALSE; - - clear_styles(d); - - d->ext_width = -1; - d->scroll_left = 0; - d->scroll_top = 0; - - InvalidateRect(hwnd, NULL, TRUE); - - return rv; - } - break; - - case WM_DESTROY: - { - khui_htwnd_data * d; - int i; - - d = (khui_htwnd_data *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (d) { - if(d->text) - PFREE(d->text); - d->text = 0; - - if(d->links) { - for(i=0;i<d->max_links;i++) { - if(d->links[i]) - PFREE(d->links[i]); - } - PFREE(d->links); - } - - clear_styles(d); - - PFREE(d); - SetWindowLongPtr(hwnd, 0, 0); - } - } - break; - - case WM_ERASEBKGND: - { - HDC hdc = (HDC) wParam; - khui_htwnd_data * d; - HBRUSH hbr; - RECT r; - - d = (khui_htwnd_data *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (d == NULL) - return FALSE; - - GetClientRect(hwnd, &r); - hbr = GetSysColorBrush(COLOR_WINDOW); - FillRect(hdc, &r, hbr); - - /* no need to destroy the brush since it's a system - brush. */ - - return TRUE; - } - - case WM_SIZE: - { - khui_htwnd_data * d; - - d = (khui_htwnd_data *) (LONG_PTR) GetWindowLongPtr(hwnd, 0); - - if (d) { - d->ext_width = 0; - d->ext_height = 0; - } - } - return 0; - - case WM_PAINT: - htw_paint(hwnd, uMsg, wParam, lParam); - return 0; - - case WM_SETCURSOR: - { - khui_htwnd_data * d; - - if(hwnd != (HWND)wParam) - break; - - d = (khui_htwnd_data *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (d == NULL) - break; - - if(d->active_link >= 0) { - SetCursor(d->hc_hand); - return TRUE; - } - } - break; - - case WM_SETFOCUS: - { - khui_htwnd_data * d; - - d = (khui_htwnd_data *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (d == NULL) - break; - - d->flags |= KHUI_HTWND_FOCUS; - - InvalidateRect(hwnd, NULL, TRUE); - } - break; - - case WM_KILLFOCUS: - { - khui_htwnd_data * d; - - d = (khui_htwnd_data *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (d == NULL) - break; - - d->flags &= ~KHUI_HTWND_FOCUS; - - InvalidateRect(hwnd, NULL, TRUE); - } - break; - - case WM_LBUTTONDOWN: - { - khui_htwnd_data * d; - - d = (khui_htwnd_data *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (d == NULL) - break; - - d->md_link = d->active_link; - - SetCapture(hwnd); - } - break; - - case WM_LBUTTONUP: - { - khui_htwnd_data * d; - - d = (khui_htwnd_data *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (d == NULL) - break; - - if(d->md_link == d->active_link && d->md_link >= 0) { - /* clicked */ - SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(d->id, BN_CLICKED), (LPARAM) d->links[d->md_link]); - } - - ReleaseCapture(); - } - break; - - case WM_HSCROLL: - { - khui_htwnd_data * d; - int old_pos; - int new_pos; - int ext; - SCROLLINFO si; - RECT r; - - d = (khui_htwnd_data *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (d == NULL) - break; - - old_pos = new_pos = d->scroll_left; - ext = d->ext_width; - - switch(LOWORD(wParam)) { - case SB_THUMBPOSITION: - case SB_ENDSCROLL: - ZeroMemory(&si, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_POS; - GetScrollInfo(hwnd, SB_HORZ, &si); - new_pos = si.nPos; - break; - - case SB_THUMBTRACK: - ZeroMemory(&si, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_TRACKPOS; - GetScrollInfo(hwnd, SB_HORZ, &si); - new_pos = si.nTrackPos; - break; - - case SB_LINELEFT: - new_pos -= ext / 12; /* arbitrary unit */ - break; - - case SB_LINERIGHT: - new_pos += ext / 12; /* arbitrary unit */ - break; - - case SB_PAGELEFT: - GetClientRect(hwnd, &r); - new_pos -= r.right - r.left; - break; - - case SB_PAGERIGHT: - GetClientRect(hwnd, &r); - new_pos += r.right - r.left; - break; - } - - if (new_pos == old_pos) - break; - - GetClientRect(hwnd, &r); - - if (new_pos > ext - (r.right - r.left)) - new_pos = ext - (r.right - r.left); - - if (new_pos < 0) - new_pos = 0; - - if (new_pos == old_pos) - break; - - ZeroMemory(&si, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_POS; - si.nPos = new_pos; - SetScrollInfo(hwnd, SB_HORZ, &si, TRUE); - /* note that Windows sometimes adjusts the position after - setting it with SetScrollInfo. We have to look it up - again to see what value it ended up at. */ - GetScrollInfo(hwnd, SB_HORZ, &si); - new_pos = si.nPos; - - if (new_pos == old_pos) - break; - - d->scroll_left = new_pos; - - ScrollWindow(hwnd, old_pos - new_pos, 0, NULL, NULL); - - return 0; - } - break; - - case WM_MOUSEMOVE: - { - khui_htwnd_data * d; - int i; - POINT p; - int nl; - - d = (khui_htwnd_data *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (d == NULL) - break; - - p.x = GET_X_LPARAM(lParam) + d->scroll_left; - p.y = GET_Y_LPARAM(lParam) + d->scroll_top; - - for(i=0; i<d->n_links; i++) { - if(d->links && d->links[i] && PtInRect(&(d->links[i]->r), p)) - break; - } - - if(i == d->n_links) - nl = -1; - else - nl = i; - - if(d->active_link != nl) { - if(d->active_link >= 0) { - if(d->flags & KHUI_HTWND_TRANSPARENT) { - HWND parent = GetParent(hwnd); - if(parent) { - RECT rdest = d->links[d->active_link]->r; - - MapWindowPoints(hwnd, parent, (LPPOINT) &rdest, 2); - InvalidateRect(parent, &rdest, TRUE); - } - } - /* although we are invalidating the rect before setting active_link, - WM_PAINT will not be issued until wndproc returns */ - InvalidateRect(hwnd, &(d->links[d->active_link]->r), TRUE); - } - d->active_link = nl; - if(d->active_link >= 0) { - /* although we are invalidating the rect before setting active_link, - WM_PAINT will not be issued until wndproc returns */ - if(d->flags & KHUI_HTWND_TRANSPARENT) { - HWND parent = GetParent(hwnd); - if(parent) { - RECT rdest = d->links[d->active_link]->r; - - MapWindowPoints(hwnd, parent, (LPPOINT) &rdest, 2); - InvalidateRect(parent, &rdest, TRUE); - } - } - InvalidateRect(hwnd, &(d->links[d->active_link]->r), TRUE); - } - } - } - break; - } - - return DefWindowProc(hwnd, uMsg,wParam,lParam); -} - -void khm_register_htwnd_class(void) -{ - WNDCLASSEX wcx; - - wcx.cbSize = sizeof(wcx); - wcx.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; - wcx.lpfnWndProc = khui_htwnd_proc; - wcx.cbClsExtra = 0; - wcx.cbWndExtra = sizeof(LONG_PTR); - wcx.hInstance = khm_hInstance; - wcx.hIcon = NULL; - wcx.hCursor = LoadCursor((HINSTANCE) NULL, IDC_ARROW); - wcx.hbrBackground = CreateSolidBrush(RGB(255,255,255)); - wcx.lpszMenuName = NULL; - wcx.lpszClassName = KHUI_HTWND_CLASS; - wcx.hIconSm = NULL; - - khui_htwnd_cls = RegisterClassEx(&wcx); -} - -void khm_unregister_htwnd_class(void) -{ - UnregisterClass(MAKEINTATOM(khui_htwnd_cls), khm_hInstance); -} - -HWND khm_create_htwnd(HWND parent, LPWSTR text, int x, int y, int width, int height, DWORD ex_style, DWORD style) -{ - - return CreateWindowEx( - ex_style, - MAKEINTATOM(khui_htwnd_cls), - text, - style | WS_CHILD, - x,y,width,height, - parent, - (HMENU) KHUI_HTWND_CTLID, - khm_hInstance, - NULL); -} diff --git a/src/windows/identity/ui/htwnd.h b/src/windows/identity/ui/htwnd.h deleted file mode 100644 index f842d2d39..000000000 --- a/src/windows/identity/ui/htwnd.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_HTWND_H -#define __KHIMAIRA_HTWND_H - -#include<khuidefs.h> - -/* -We currently support the following tags: - -<a [id="string"] [param="paramstring"]>link text</a> -<center>foo</center> -<left>foo</left> -<right>foo</right> -*/ - -#define KHUI_HTWND_TRANSPARENT 1 -#define KHUI_HTWND_CLIENTEDGE 2 -#define KHUI_HTWND_HSCROLL 4 -#define KHUI_HTWND_VSCROLL 8 -#define KHUI_HTWND_FOCUS 2048 - -#define KHUI_HTWND_CLASS L"KhmHtWnd" -#define KHUI_HTWND_CTLID 2040 - -#define KHUI_HTWND_MAXCCH_TEXT 2048 -#define KHUI_HTWND_MAXCB_TEXT (sizeof(wchar_t) * KHUI_HTWND_MAXCCH_TEXT) - -HWND khm_create_htwnd(HWND parent, LPWSTR text, int x, int y, int width, int height, DWORD ex_style, DWORD style); -void khm_unregister_htwnd_class(void); -void khm_register_htwnd_class(void); - -#endif diff --git a/src/windows/identity/ui/images/app_notify_error.ico b/src/windows/identity/ui/images/app_notify_error.ico deleted file mode 100644 index 9fb30c53e792d60a03a03f64d3a94c33968e1bba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2862 zcmeHJZBSHY6h8aGLI`&e<s(oQn3Zr1LR3s7gcYwwN`y(JC1ziGXR<#{P4t5un;i9r zG&Iq~OlCTxBQ`XWVNu#<MY$$F*2b9-*Bxk9-0ZqBwvo)-)AQb4K*?;H@ux5I-1DA~ z=bZDNcZPk53}m9Dq$Ef)<r|1fh@cbnINB6Lv>vvIo=uy~L_HRwd=Ud=1A;es3E$Xq zi48uk=*AUQTrjxZZerobhoc*gDjYEgFIJrD(xs{n2`Q<nZh#O5p$dbl1|WwZ)#m}B zS8Y+7qdE(@eOJU^74fUOln{q-BtrZKQNTh%XiW`+BQ~umWF4{jV?$QA$sg-7xlLqn z0h9iO#Y85Tl}vt{%R18Jx7|3WIFb0qh1rT_G#bg+dV-9eKHBQjC^?{!Wxt1{b{{!m zbNYfLb@@nY36N90M)6)BmG&U6O`}f4)}PfVw@V|3s*$u`qm2QT@}TF{tfy)Z;yN`- zJ)zMn>M)fAH8OVfk~0{l_?;Tbz3}hVsQ5V0xQkNZcZQM2t5G?)1K2ydH7WsLYJsi2 zo9cXFat>>hfm+Em+bFjKId}Ka-U0O8;UPy~fMoO+zgwej^rW0cedI3%M+vG_h~6aR z-YasTb{1+%ts2z~gekWjxoTP{tMeM>Qb)$N9y0d&XeZ{9EAqE{NX85#?*NsfMi;ma z<g3Ry8gV|$aW7Q|F{53miQL7FZIpqS)IOZcqfsENQK2{wxH9Tz;S8zha|`?#=&>BO zEx}>RK)z(XC-hO*LV2B9<g)I3?@Zt}Pe8fZx<BU;>vi@8n^T@ldwASX)=-p^pHnjy zv82ARXmftf?8IU{qEf0aT)Jo~^tBJdkmab{P#AxgWm!&Qp6zMqYbvuJFwUE|>bco@ zwj@QF<|vtEj*;bu%uhUJx<^sc7gd|htE;M3n;*|yxK2^-F143dEPghlF4=B>rd(0% zV$GN3=|UDL%1R+u$Z`V2lvosep}=lmF3U6Q_PA)rkJ=5gJa^`ts0wi((PL5V_WqyE z{y(>qfZ#IVRiHTvu@^SsyVcUU%1_MmzGSZdk@@gN{YUE)klp}pl|$z)?_tjCWX}JT zxuBbQ#ShF~m;N({&MoL-o_T;dw*xtjFyH$bbMbNJCCGV;K6GySKIXI!nP-5X^AYnb z^e_kfxyP7GzF{u=o_WvUP5ZD*?=Vk&k2z%zbLM{L>_f<fy17T0i!g@;Uo$U850xI~ z9T&!Ph?&~sb}%Qr#hmmm_`8|Y!B2eqB1=d5IpI)0&+HuG`EKUY@0csVU)Ia~;yFEs zxSOK5?aWh}nXRqp0re%!%W$fX%^j!M{P8K4ynfCErvyDLImujgnt2WG2V9+R)$1Y0 z`{15oo<77JbKoTWwK`%BdUzV{FzsjNg_yzC^UMQ(Oz@Krqi1ne%tmkpEXTZz-zzrO zwy@=^GrBD^2tLq#h52H5f}euE%0kS}t2pB@?(bLTO_#3lOTiGod^yC8mw)GcHR2aB z<%rz}p#N>a9ATRbN8c~w{cjBX_78sr>VUfr$doUS_D$v+di%%uQ@j^$<X;&bb$ZTy z4z3M|1*m55FIQDa8yU+(ZQqXb4M$H;@cV=3i(hZ91tk$M3hvliHE=b(dT7)wa!~7u zaXx*}!%HuP!(|7*XhCcmfEVb$uUg-qYm-*J3BE~3@oQ~b-pYn@FeD)Qx|-mJtPO+y nSgpxz8nL+yAuEv|XTp1q@Scmr3(oa0x$vrU$GWT`tKarF-a&AK diff --git a/src/windows/identity/ui/images/app_notify_info.ico b/src/windows/identity/ui/images/app_notify_info.ico deleted file mode 100644 index 2e4d51960d37cec43364c88a0b30a76eb2d80106..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2862 zcmeHJZA_C_6h2V3bvlY;!Yp*KPCFcnI9QP3V&gyiXaAQter(y|SO%;y1yM`I4H_mi zGm6YDY_f=mA6ZbUGAXq>K8h5?TI8#iLJOtzg92^k_HB3G77TvOY|DNv-sHabp68yA z=bZO#&jpA821G|k<GKQpBLFf0PzID)uxBMeHez8p3HGc2Xj=u4OzYrG!b#gbIq0*c zA*DC?kS=bdi-HsZl}ZIc`Wzp@#Z7Qg2!;Wci#`XCg^qzGlZODAOdiBdL7_~Bddz}C zc@Tkug2H@|2ZIF#^6*+HlZIq@P>KP9g)+o(Wyxgp>OyyDPdk)Jnc)CZW++_v5hxD& z{DMHSFVQb>F@1?DhKnhUP%$tYtjgnqMvQpsVjG#L%?<|rg2(H`dfb4P7QIA9MnXx6 z1k`FJm`o<9t*wFV>}=@k(}JS05!`M!h(x(iRdo~w2lde0tbp?JQqX8LFg0a?hK4$j z6cquV&j*9S06951u&}TIN~IF?dOZ}0#ZXgIgJ*+KSy>5Mtri>(2VA_^0BLDyP+D37 zZEbB}u~?w4t`2SbK%r;^kH-UIu?S9{tirg1=&u>$O<}wSkVuLkH#Zluva*1~;Xr8# z`cSK(uC^9(KK}%{_kmc1wpCTgw;3wS%R!5LO~@}7`2_+2P$R#i$fpnaWMpK(6vkI5 z6tIAC4H(aXu`Xh)5{cyL+Py$tRN#M70bzK=@D?}WC1Eo!Wf|~x)W#Sd_Yn}yjEst7 zq_9{a<mH!EyuLOnW-|hO1m4>9{<id3)_NX?$K|gVzW2dv?+PO0ckWD$Wv~(0wQhAp z8t+w9e22?R;j-2xZA05wq41Ts6c(G!U6-7|;4$Ka!o(Cle?6C*oVA7%!-y9OQ&}to zSi*!=8`p5Qpv>hWLNkb36&L$vbS67xiQyXwYqttlGnS<ky;Zo9R(*Q>xBs(A|LUtS zJ}}5EX7f$E-Om0e4mvwJ*u6d4E5k#B#5_JutX8YZ<#MI|9Uqq)e@kt-{<}%j*+F!= zyTo7^A(Imm1UY!n$4Afe@pH{j*$wq)JWZD`ksGR3a=S}I`up`{bks<utX6{dWY+CI z_M{Ja#gR4Tva;&q$BvRyztoTm=Nrhis|rGM7#SWWg98I(Y;26!Y&J4G>n7L(Zu<TH zP))?5uj9pgMeT=*50Z-S%1QN!<K*<Or--UmN!;!k%fp8cA6P8rh2h~Lg0-acAoKHc z#OL#w&`0W?&py5M)t6t8ed4|3+rx**_wovw`+~f((t-c~^YqNj%=BX4S{OAN$>ih& zaXOte2ZFu_4oMD{9oSc>*(=I-mq;b#mimUrY#txNem9MI(j7cB&!0PIaylJOngjML zkHc>7!Fn_mAJ|`3`pw~{AF7VGcWF9(SZ@=)w}F<H>my6Hn>KCo-qY!ZF#iX0b8|lH z<YbT4I@yFgnk4&+%1&0F=)w2x8#9ek7V|h|8XcX{>+e0XPft(x+H6yHk7u6pdA$_o zPGPUTkF)8=>J#U>yEN3m{eEg>c!<Jpjv5;?Q56+O$Wr|6+qVa1W?a<l>@0<~qr6^E z$cKAo#&Sh*d5gCDcFUdK9!jsf`^ZmTUS43y9{X{?K0Qq#UkYs~%z;8K-B`mNs1q7$ zRcm%vXUBBkonES6ucKO(EmYm<)707edaAkk8ihGi(>5FBbU5tj=irjv@)hmb?QMTl z^lH1QYgeyO@$sAxhy47!0G-o>#c~1bkht9DS$mc8`i`^pXSz3R*buV+c=v7t*5|`# z={^r@Z@ZO?TqO5&cmMMD8xRD2zQjPWi|rQ}@ji#QHN5UU`#wj<QZb|vMkcN4Vh03% F!Ji+wZMOgb diff --git a/src/windows/identity/ui/images/app_notify_none.ico b/src/windows/identity/ui/images/app_notify_none.ico deleted file mode 100644 index cf60a3e6a38b22c96abf1af201a0452e212eeb26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2862 zcmeHJOG{%}5H53#iP5xiNbF9JCb`2bdecL%{0H*~W;YB>Z)VXjn}J!hs7O{49nfJG ziXzeoDu{^aN)e3@!u5$SeBv|W`~8g1>aT8cLuVLtF~h7p;k)P7sq<CUsdIDc5G9d9 z4u=DMGQCM6$|ZtKkgfE=O!PCxqOy-ZBol>Fh~CH?zy}EL?@e?@^UDh!{@9B@CipQB z3<ilsj|azII3{p(K(z6e7YH!>i9QC(q5h3N=Aq*VWa*jmV!ccgS??pUK2RQ&1A)Xo z5}+s%y;Wz#{V~4}2fZ+433`zx3l^&YkN$#~v8n_W=2ayzPu95I_zQ9?&15oBad9z) zLLu7R+@ywv2AY|fp^AzMy1cxk&dyHC&(Ei^u`xP4JfxPE7Fu3jrrO$CDl03ahldC1 z>+7T3+*~RxEv2EMA==&DrKYAPT3A@1>gsB`xw)b4?rth7Dx%5BNjg0}rM9*<T3=tM zy1Ke(AkWX|3_NGxf6svWM9c8Jc4oiyDrq^^uViX!iYY2uyh<wMq>L9fC@mH@9!^!w zc;&OYqH>zWt*WnlS+AqA%avwPRbQ6J6qOaPD@RqcJXRYN7Ps4OS6r&<v1VrLbjM4x zT~SqQrqc}B?RJ=LX1l6pI<xKK&Ed#KT&kL$oSrGs!N1L!EfJ=qg9wwbXcJjYHi3ze zv>dN4Cp`Y!bJq9R{-s0tE%5FMd<XqEzze_x7)`jp0_9KO59ogfz6ZVrP)R{5FX#65 zcJArv;laT{#yQM5pBZN`Z*On&!NCFJT;{H>t}~qFJ)ryv`~*lTNi8fa<jTrQ9vB$l ziHQlFySBE*TU%Q?_vGY+FD@>0dm9@YTu@Lj3*IN-7r=uW!xBSHO%0EZj>dfo@BI9n zudc2bb%KwMj#$P-9v&V(1h)iuE8ME8Dn`BFj*bpSjbYRyJ!bJ6i9~e1jEM~y6MNuF zzTO#J)FnL!U-D7s;{2VR9TprPAG3@beDNz>$suYb@9pjBe$LL$^m&GVS$jAf*5i|P z7<_|^{PM`ih|U)u#@es1ule@&mRDC-d1+~h#g6ze_~KW%{r&y=-pPI$IX8UY-QDrx z;v&z^&N6B=qn^k41{XQyxw*N7*bU$J_xFt2&*S6c`ka-Ol{jDg3U_L1O1Ew7+n2tD zFW-iIU((Od&&T=A&CP$+*Vl7vYb*Em_VPb{I}(TN9qt;8dxY)_>n{f00#s5`@&oQA z$FRlI)6)rgl3dE38*7pEOP)dd5%36K8onb(V`F2RrfDIpQ$wya%+-)@4g0R`@9%4f uLBoGR!+%2qMgBvn!u?lGc^{@E+~)}QIl_I8aGxXG=N^F{x*$dGbDsfUb5*DS diff --git a/src/windows/identity/ui/images/app_notify_warn.ico b/src/windows/identity/ui/images/app_notify_warn.ico deleted file mode 100644 index 9d43265ef75d08735e0931053b07553fa7c5c04d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2862 zcmeHJZBUd|6h49|lND4NshI>trj>ok^a+8e2<|#UGKRK!%`w|4bS!rrGKQ%c+W4_M zuG12mQtreSJGdyAB|5ygHq3wyC^&x0$3hD%>;g+HuzZ}(eOcZKe`G(L@sD@s?z!jQ z^E~IAd*8X|0!)KI2n`J-IUN>F1BeD79Y_y`?Lhzvnw!wWVf%D|su=)_xDEAi>Ku1# z<7<;Gn-AzO+ds(mE7>$rSy>6l*Xa-a1N196F~L`*rv3)@XtDuBN%m^BTB9MmkNi@t z22m&J=JVTBWIu#tM^dAkz-csOL^x5Bmmv+%Dh)^mb14QQ`a~RCDo!k<$q-mbTNOh6 zKYx|9+8kIJh}axBb)SNzJfs2bEpGt<0T7d;h0Lm2*yiv;jJXsX4hQ7AePA}5L4Mo@ zTCEn63<XeAQv;b~qqLNQ(c^=7YXxk{)xs9L2MQc+$SSXZ45tsgUg9aRz_n}FAd`4f ztmP1|H9`hqZ8jTN2&->&fYI#*g~<YP^Ko#y-C(s^K~YfyN|PDt>+3;9TnfDbRJIyO zBEFQ;3XrR^AUf9o+v@G0=iKF0kYVNVj6;Fb11i$T$H&2Lx062~Xzdgi@uU+rp66Lp z4@!z7iSl$houDNSi^T%zl&8U9fRzRl)YjI5oad(1gOYMnmD^w!ark^bSV?g-Ha0?* zdmNJV1+a^_%-(S@+MQsge9|n(!Q=5jX(`2IG{U7zmmpnl1i8ryX*`Ck98gibCW_Zg z@qR_T_u9Q3xLZ5GZqq{Fe`FP7Pp3TmflRb~ZqcjnF&6&XE2+^zd}7m^Yd0=Vf8qXx z3nJFfS;pA3c?ompE=ipK&Vq=DImwL8OIW;wvBdeCm&V3M%wa5HP0WjoJrp?qv7qSK z^^83_J>+@DV&0ye6fFyirP0dZd5k?d`x$xI1{ryHBmSxT7<>2i882^$3ZoEKKl@g| z11~-CpkiIrtf(-?B4<WE9vwu!lOtBlisBJ1kBlNFa-J-k#dQ|9B5cB9S%j!h`Mb0C zZ1~+e#@qVcoU23C;WErRAt2N4=Y>Y>%Ad@b-`s%*|8ilW(}Oo}-mJTE<Hpik31#ZN zsMwc>s*``>27SJS-*l)5b*(Nu*x84Lt^uTb7u(v}(B*RN_%}yfRt_%D(P5(g0H&1* znEay!*O;uhwV?&SaQux%*C0||z@DBS?Ca~p!NEZs9UT=WIbsOAT$hil@=Uny@Ci&Q zIf<#I6-f6p?sN>G&NYO;5}xXa$T2W5fOKE;IK?)Jr8<JC<ew(R{xRV{ad`3Tt|8pt z<HOF*PO<m)_9E3W37=pv;i`icOg5Kc>K|1S{zH2|Zf*18j`ktk)9n*;Z*6Twsx4w3 ze)kZ2z=AP9mtlPIDWv)(;S-5Z=@`UMJBIPIt`Tf*Zsuno@^p1|N&dNCne`OPe>;P5 zI-`V_{c;R<b`0Terw_k$jpFs|*YWb@%Sbf}sg6td^rNS6<L_rsQE?Vme^(&k(~6Ga z-mYQ%);)sXd&ZFJ6`ntT9<N-vf=x|L68`g(XK=UeEM`_WU}jYvDvOR{MsXSLYih?I zdVP4Pe-zCFV|d}h1+1>F7Uk8eS0#K&Nr|qoun><NIfAE8pT?G!7Hn^C=iiCAPyD=w zhlj<pqxy^V*1(2_1_{sik=`L|^YZd~ii?Z!;>C+o_KBa@B*)0eh?xJmbLXbuIY)ke zehAh3lDfJ&f#MS=4xyu?L!j?Q=<n|r=(`i>yAj65#)R(fZh>R&M3e5B5PHwe{D1Gc MY<kaC`rmW^0DMoEG5`Po diff --git a/src/windows/identity/ui/images/app_state_exp.ico b/src/windows/identity/ui/images/app_state_exp.ico deleted file mode 100644 index b365b6bf3287846dece7a69de55492169119af30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2862 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 Z1pY-TXM`~L`~9C`;FyhUGAB7@{{*b#F(?24 diff --git a/src/windows/identity/ui/images/app_state_ok.ico b/src/windows/identity/ui/images/app_state_ok.ico deleted file mode 100644 index 8363fb2c59ba6027c730104215c6e7d883308b1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2862 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 NP_xehi^K`1<R1!AB?|xm diff --git a/src/windows/identity/ui/images/app_state_warn.ico b/src/windows/identity/ui/images/app_state_warn.ico deleted file mode 100644 index 3510e5a5ce79be55a395a1ad97ea8da2a58b70ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2862 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 diff --git a/src/windows/identity/ui/images/cfg_applied.ico b/src/windows/identity/ui/images/cfg_applied.ico deleted file mode 100644 index 4fcdf843c8c4a41c4dd55f3e0ce0707f99a6b63c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1406 zcmc(eEpJp&5Qg6-CE1XQ)~u?4Dprpmwd<SIRIi)x4{8vriX|Z_Ij#ao5Sa1@Rw3vl zxUHe8qDiw!Ti2w4;W@KggD2d(b3WcZXWr+|xmQ}_-rQ7OubxOlMlXmiJtNjMpsm5O ze;ltpPNxz-O{dF_mZ4^|nPxv{y8Zr1>+9<p3<lcR*wEJ2mWIQjwzs#nv$LboXrzOK z1MThYX*?clcXwCQ*Qx#e)H}_Ui_o|EjpkQZdi(hcMn*W%h*(Yy&Cm?Zx|Yi&j_&A= z?&yx*w>9*J-k3D>hEAtI5A;9}gg{T`$vmT+jn?ot5*eFJsj{ar7z_r3!C)vP7z_r3 z!C){L3KIr{!C){L42D97!C){L3<iV25)BT6!#YQ1RRD#)-;D?Yy+1N6j=5vxBz0J- z4E*T~92SSA$^wVO;cz${4o8&=4u`>Ea2R^&91e%UVF<jEwn~W4@@8J;?bU$_@5ZVs zHQo)ThH1l~!PM|>{Mks-@NRh5ag;YY{tf?ze?Ovzf1@@Hh6Y2U4*l4uN<BRaJ#9Zm zY7qDZYyn5$S4Z19s6oIHor4Ff<7QL960igifnmJ@uml@}MS&2o@FU2>nFK7+>rpKI zZRn?f21CM-FeD5KL&8w66AS@E!jLco45T4g4@1I`FeD75CeUF>7!rmAAn^~9B^#4P zP7Y`8aAf7~Yh2IuQIp9;hlhtcIy%zv@v+X%&UAWus`K-6U0ht~^72yG*VnqcyVL#s zy>1^;A5KpAj;B<&e*?WEU(I^nK20rF*VEOtu(}riZT=U}Bgen$bwfdZ5O0Y0#7p8U T@vw?t^hEafy^5+`ub=b>y;{N6 diff --git a/src/windows/identity/ui/images/cfg_default.ico b/src/windows/identity/ui/images/cfg_default.ico deleted file mode 100644 index d6e7f24e0d3228aa1738113f11352a2ac04cc08f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1406 zcmc(euTNW16vw|LENK=5m@34ETJ=#_JPD>6ce4KgGf{<JvZTp%h;7Nl40@t!VjK-- zC<F;<GU`Ys&OZ0N)-2d%uf4y%z3+TK?|WaREk3)us_X3wY0T^mtxK<HTN=^VWEeN| zt<7>K@zrcL4D?L3SS+;oxzOW}&)VMJ)@U@+&d!eZ_VzR$kF~$QuY-dFO(qjfr&Apt zAM5DoNQZ}qn!QV%oTNVJTDc5;zy77``+L3r@)aYaIjzxRSQ?t48Jcx1hb@lo=#K8_ zj^1x;=ncKGXy^@{L4h9VfgT8fo~)B~MmZb3;cpZ&ZZf6Hp3Yz}7z_r3p^#uO7z_r3 z!C)v%7z_r3!C){L3LOT6!C){L3<gUyI1CQ!9GR5>3S<8?TF}t@Bg5jDJ4Q}XhoxfR zM`z-&I4l(l91e%W;cz${6%`x~gTvr3^ynN8hrwY8ypp~m#Ao=hu6TPoP~qL!RZ-*J zU}~5)3>r)g@5YafA`S0`cO6H0qvPN3Z}|5kYWO#@X)rVx8aec1Bb9o36h``fjARh_ z1#AIF;8#c6ImjU3h|a--)p2uEz!I<o5P@O60<Z)(2AcvQVBt%n4rdauM9-sG`rFV? z0S$(PAz?@u5{87KUMCm=hJ+zu2pA|sV?PWDL&A_SP@0AgL&A_SBmjwjP%ODI+2qu4 z)(%Hj?Y_tLTAy@!daARtGo7EGYd)Xr>gr0DmzTP^xzX+It?usb^ziVY)oP`urzbuB zPJO(%;D0<L-Toiw1NCav>-J@8xxQYmujRM8mj7-27te;{UybWP*7*!kJ*N$MRfOy8 GhWQ`3QQgV_ diff --git a/src/windows/identity/ui/images/cfg_deleted.ico b/src/windows/identity/ui/images/cfg_deleted.ico deleted file mode 100644 index 2ef11c7d11ada0ecc655db6d6a886301a516cf1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1406 zcmbW0u}fS*5XL{jz#$ge94Rakt5{DZq_P)mtnG&U2R11#&DDW`u$@H`NRh_B;2@A9 zPOVL>ECe}-c7_y_-|XFsMXKbzo86u7?e6z`v+tx8?u`xg>(vu!%;*JC(lcU3BicS# z^uu^%NGB3MO(u(umZ4^|nP%T-y8HG~tE;OTjYe8uU)Sd5rpDv3wzjsky}hlSogEz> z9%_GoUweCd+TGpN<aO%cAoWfc%6aJP#SdNF-01D6&lnluL?dF68k(UQnw6G|DUR;w zj_&A=UdtMKLvJJvy`j@7&;vct10m3pJjpY<v(Xy<#zw{>Q>xq37z_r3!C)|SBp3_^ zgTY`h7&;~l27|$1Fc=IS9R`EJU@#aA21_(J3=S)f%w7Q$`nnqt1bV$PERMNj<ZSA& z^fK_!88|EsOD_u?4u`|xa5x;jRB$*94uiu`rE@qO28SW=O4?pRd=@u(FK<-`D!d!B zda3blFf~jY1`Vc$cjIAWlZJQ0yB|mQM#sP5-|(*^YWO#5(_m;YH0n^tMpgRTqtMgV zF;auTFJKEe0>6H=#X$`MjwlXZtRFXv0+xU!fCvoxCjd*ZFqjkw0SiBZeK?bVC8{2s zrM`wb1vD5EhJ+zuNEi}^{yD)AFeD5KL%_f`1oL4?7!rnrfvpL27!rnrApuDIgUynK z$s}hFCwDlq?_G0T&-Fn^M@Kq7KGt+P)yc_;&d<+vc6O%A%S&BdUFrJzTDP~iy1&2I z!^4B_ex=@@p7KAQP~G|uRL6cjt9>g?&6n5O@|yqb*Zf~|sa8nCdTc8Flh>GQZFt@v vGUcy);91TeIBIR}@t80ChWvl~WkHtp!QdtFlz2mYSq9@oOP($2_SpXh;Q->| diff --git a/src/windows/identity/ui/images/cfg_mod.ico b/src/windows/identity/ui/images/cfg_mod.ico deleted file mode 100644 index 65e3691ffe37eef19d71f7f78ead1365cd01450e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1406 zcmc(fF;7%c5QPs3CL2Nl%{FYIR8mhPEj<YhHQmI2Kx47S1WQd!NNz`=CKfjQ0k^V{ zsiBdIf`n|MbR-tzcjp0OW$D|Ud*7VBch2|b?yj`JYh^`sJ%1#PxqC`<=`pdO5o6s9 z^WFWzT{@L`YdRe!Ms78m%{2Qy)6Z`owYa#b(P*UQ<z=m|u4+6UYciQ=eSKXU8yni) z-PQK?wzjsmw7I#d>5J6PPU@XbmGjWo(;qs$ywuxIpD{ARiAKbb8k(UQnsqIQC64as zj_&A=-nTXMhTcdTdP8SYpa*)O2ST7Hd6H+8voRX}Mj>O9DOL6i27|$1Fc=Jl1cSj~ zFc=I5Lt(;TFc=I5gTYYfFc=I5gTY`hSfasUa9HQatPY?s_g5o=K<|$Xi(~E>IYk|o zY6BlSHx7%#Qf-05;cz${4u_*!1&71nFgOgobq<Ha;4lPU$yhDKXLylUdwX}F!n?7m zT8(#usbShMXfQRr8y_}`G`t($bsXi5j(@|y;opy_;os;@gQ3CD=tDm?x>8S%!pzu@ zksbto0b9Tk_|?&N4tfx9MCaha>bThyummgtL||B70a${K!J<G2Sa=iE;Y<RS==~^` z{%z=|fCfXtkT4_+2}8nAUndv>hJ+zu2pA|supWklAz?@uC{3WlkT4_+2|(f>6iYTH zi<}xx?r>z)?rU66^g(-jd)nXM*TKPo4i67?a&n^M<71tjo$37iTo)G?y1Kg3_4T!G zZf^ARSL*%I5x?Up-R-}DK2fi-Ubm;I`R%ndS*mOPtgiWg%kO#kcNvg|ak93y_E73M m%Kehc|D;Rge-(JRw{N;#sxLI;U-6n=O>g5R^DE*F!M@)yXTp#G diff --git a/src/windows/identity/ui/images/cfg_plugin.ico b/src/windows/identity/ui/images/cfg_plugin.ico deleted file mode 100644 index 99ffbc411b5f9cf6244bd011297fdb6194a5478b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9110 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 U#!gL^-VAqF8Gl23W3Smi0oL6$(EtDd diff --git a/src/windows/identity/ui/images/cfg_plugin_dis.ico b/src/windows/identity/ui/images/cfg_plugin_dis.ico deleted file mode 100644 index 853ad401e772015a2e8f1c40dc39a06eb1f50e3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8854 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 U?GM}Q-3clXfUwzg_|naP0>*F&@&Et; diff --git a/src/windows/identity/ui/images/cfg_plugin_err.ico b/src/windows/identity/ui/images/cfg_plugin_err.ico deleted file mode 100644 index 1b1b4ee2e2046f33094256112192ae392f5bd9f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8854 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 diff --git a/src/windows/identity/ui/images/chpw-dis-sm.bmp b/src/windows/identity/ui/images/chpw-dis-sm.bmp deleted file mode 100644 index 230ad36a406bd2606a792c457e72942867da5bf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcmbVH!3}^Q5W~2DPe*V92Jr9vu46+<Lx7ZvBwVh&wg>l<_f$?sy>O3uw{#Xh)j0v{ zyE;LcV*csj8WR|0DlOV*lp4Vj*Xv29X_JjiBW)Mso2edT=js?iHl|KTAjxwJp%@Qg RF#?8|I*u3^{BI{)!VjzPl#&1d diff --git a/src/windows/identity/ui/images/chpw-dis.bmp b/src/windows/identity/ui/images/chpw-dis.bmp deleted file mode 100644 index 43468cb2a9a68415137887abb325a479e485320c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2430 zcmeH_O$q`r429#;8wldw6L<huZoHD$oa-3pbsi;6B2K9&Oraq^uOE-hT<?#)%;%!< ztoNk%sCOp^jUu-)pNkTvF-OK=r;Urn{?Z=sC*>b}jo-0cr6-pC866=>VubGHMy`9g zpZSf{=yNTJ%=eo-&=I(AH2K(_c5&MeVmhWY4xByUK@!`Mfokb+U)|;K!O|#tQ&Ps{ li(K^r%Ta6vw8_NxOCoh`2lQG{=OMQit;jbnmiBjhcmi)E#asXY diff --git a/src/windows/identity/ui/images/chpw-sm.bmp b/src/windows/identity/ui/images/chpw-sm.bmp deleted file mode 100644 index 4cc51e5794584f709d9d2c5aab0bb1a1cc92ad69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcmb7?p>KpR7{ytaOix{=r<MuiNyNm7CEFh`F@ZoLP9P8n1OickoT!+XKq5{c5D3Hs z0#On~#l*yk3IyWBvKM;cs91Kqe0}-)`fH%jho|+WF=`FJ!?-?<3*%<YjpMqSC~w== zUZSn*hGCGLCy;^f7e(<i6XU1JyhjQ$ilVYCC&GO13GM0U0ZC8|=&f{^Rzc!Ls;Zh2 zTJ^*iC|XL@u=>P<WQ^5yJ@II)m=n8F^_+C`C6H<Q(KO9rl=zY~<))L9O{&V;7Hro^ zIVb>RmSvptVHi5GCno)?06-vdWVn=j)cqzzg~{&4eIvIH96gdpJ5c~g905=1bh%zk zRu){3JCG2z<hovMhg_}TdYpq4Lf{CoF3<CDN8oxKgZy47xlp*D>RX-Z;OBqv-~JcJ CM>cW* diff --git a/src/windows/identity/ui/images/chpw.bmp b/src/windows/identity/ui/images/chpw.bmp deleted file mode 100644 index 43d0d5ed940f0216e399cacd57c024a82d9e3a60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2430 zcmcJQA#B?~6ox&s4FpfCRya)q1_c2H0YOux1r`(-6a)kW1Oylu7#J7?1O^xc1Q-Ma z3<MYi1R4yql0iVgfPq1PK|s_my=uL@IMNiizurB)dw1{4*>}D)f4LuxXVvlFX<um< zv=7E-ykY!&8Gr7)xX1UA@jlqc1Fmh~RW@5K^nlxL-&Z%u?RC4|PN%v_Zok*-wA;7U z#IhvUbsb*9a4`6DuBe3|xxVMI-pORLE7NN8n$_di>~2Rb1j!A8fTuX-CfUxKY-^(; zFZK{TF_~jJwI%OiI2^Kd$J}YUHN6aLMLFEYI9J_xz10^>Of3Yt-qC2p)*W*x=uR`U z_kdZ!N(Jsb6Hvv4Ai3l5*y;C6xzt!rV%{y35g$Vp7lPzQQRFxd^sS~mFTz>cau&7L z)NDq|h;4s4jaS;leYjtl<4EpoHgjE<u|m`3O=wz!Q`WeTw7CVf5F~d#|Lu8R7={~7 z9XB$+buSwpfpy~(<B7=-JHbqwyP+0><i>IA`#!suX-d;oyhv2yy45qkwD77+o>6UX zMlA%%T`rd#VNP3mLiOgYS^I%MF`iNjL2{EMA&dBdQe9ouP4g4Jbd;njmt1ZIK5#aa zgK?gyg&?^+9S_2FW}ho+AxQ3ey-w2ycCU&cNbcV^lH}%ZB+1oJc$HXk>5K3Eylx4X UROv<a|49YKAN<e%%T^DJCu(BJmH+?% diff --git a/src/windows/identity/ui/images/disabled.ico b/src/windows/identity/ui/images/disabled.ico deleted file mode 100644 index 6b6a9078c1dd7d32ae13c81919d5c85046256023..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2166 zcmbW2ze{9S6vxl31{EY~BPoP&EtXi{N(fA_7q+psyW~HxS#V%MvegI+!i5mFNCGL+ z_!o>UWFTHhr%i+nQ*4kxX1W)4@Z@vOy>B!jMaX?~f1K|<KR)li_f(`KPh@+0U9A1~ zMC2LsdNJjTk3>FR5cw2soBlbyBa4hQeA{O3HH1~)f70*Uiq6GiI2<yYqW%+AThX~p zvf;nAlpgyfZ*yg(*k@HRQ-q-kb%9(Q+Kp-#ceYkafF&!D#UY)wkt?2n&3Q&kh+Q3g z--qg8d8*ik7Q1Gc@7D}wTRt0^=Jl|x#ADkWs$Fi&Zo^mgHgG7JSXjbZf<@KayRr>D z=I-u^RiiD`teVA4+TX3B{jZUCptM;}b-19~@96!)@MP9)db94V*R0)lCri3EeW`=# zCH<Wa#*>rLxap0?v+ihozc!lc(qO7D>6e3vzFTWfCKgG2)3aQb({o#me>8i~*Xi5z zjx00!qRj2O)0%yIx#_&$Hrd6(-t*xvLz(>aoh&Xc%JTBEtgf!g#>R$hZf?rf)|Tw- z?8xr!t{fg7%E7^b?C<Z(-rk<{U#L8PuJT&0MSsuo<MkhM{r<h2eg6X$0zK003Fcx3 zw15`Sf@yq1<`U5(i-;c4Bf5np^n~uu7(JmgNk-4;8K;bp(G^><HGAd27)TyS6bK4@ zw_cthzz|>vFa#JJ35EbefFZyTU~o(r0t^9$kkDapbQl5*0fqoWfFURv9087C9Q=)d z$|)jageAffVewmrB~m<6D3Ub7;>W;dWD#MBu=ugS5#fk%L^vWGepGNo7$OW220OY4 zM}#55ko_-KE=Ne6a$)=N+UY<=?S!8nHMJ8=iK2-D38qBt#HM{miQ0+UOmwS_PW?pv zM16ZiiTcTO7!nMLbFjz8srcQaFf-a?<P0+PGHe-+Og(?J#=#k6II?kYWB#}a%CKZu zG7y=9{tCd73CuWUgbWKmI(c{|8J2A4;Vkwx*i%4*L19oB6b6MsVer=ph75zkpfF?@ zNJGaT28BUkP#8!}M~6XSP#6>drG6%v5~w&uazyM1hk9=FiSkswm7}90IX*s?)6-Kq zKR=hNt1G#<xR9Hh8@au`mGO8icXxL(old1`8ku}h`R2_VzT-ZpYu|uP<a5jNnrYU* zwP)7m8*V))b=3;(%>P@DF}udvY(^`THF+NdmR6?<556wc!9i^8zSY%2=CPKeHOp$g z+Xfe3w;m661hcNlWJ%=Lw<2$+BA0)PeA$S6^+M$9&qM~Fi2VFYWOP}4%-3Qp_AiFw BZvy}T diff --git a/src/windows/identity/ui/images/enabled.ico b/src/windows/identity/ui/images/enabled.ico deleted file mode 100644 index fc83ad85844df78657b89c0f1a89df059cd8704d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2166 zcmbW2v1?;T5Ql$y=fvhP=-jw6NO2M3dMj5x+#9ZO?QY3`;3gndP8R|J!**9BffQ-{ z4@3}15ig{(o0u~ga=`>5cM1`nd^1m$gi>5C?`ih!{C0Qdd$W&~)KQ}sFT`_0pMD^H zEUDi|;QGChzCingzAJsq=lS)r6OXp>{>&fBZ)q6KqB9zeH2QU<@z38fHk8FJnK37< z?HI!NZ`0SWUu$h`O&c2<+T7gK*4CD`x3{&kv!mVJUG44d>G=3qM@L6GJUrC?{=SBv znO?mzeWfeeA5}kH{i&<BZ}sJO-;*R^87o+A-Gr9V5?XQ%2A`7AGo6f{(KEU)E9eEi z;1u+N&O;TwqF3~aP|*$F@U2GXM4Jen2$Wcqc<D$_lVC_NBp4D5fdoT>A;FMfNH7E@ z3<-t=LxLf}5a=)@7!nK#h6F=0G&m9*$vLPkR6&txGb|aF3`@K+EScn)M46x&mM8;* znNEf!!xCkIBg2v5$Z%vhqEv8X7%~hQ1}|NPBg2qksIl+0Eg^Z@8$ZhH)q#rKg?UkG zau=8iNec-IOoiNq!9wmr?n3U^j>wHp{zCpje&3=({z7dE3<ZWl9emrUO1wP^Pg>tb zYEa2nVXJUd^2OFV2Q{d0ROjHuV!K&XVX3fGASwyt6M&_%urjG4R9N_7#9>b=EY<4~ zEdDk4E}+3+Fc=I5gTY`h#ODM<g~4Dj7%B{e!I%$&!C){L41~teVK5jB1_QvzUkPR` zG$v(YWc&<=MQopw^^v~O$;pXMPfvArcBb?5b6s9u>f+);*Vos&xw+BZ-JS05@AdHT zpvh!HMgPn7e0^oss<7(o{e|~mq37?Q`qzY&`M8uYY{GLgkj8EY(rr)rtt<V4z4@Fu zKVo;-1NIkYt@%0I$6jI`t<iFhat1$Leg?NEvn#{+`9Vt$<EG>1?9e-WP5$%X@t|$< zxc5IU4&DCpvK7C<-(4DC^?i6bz>435zX-7Ex5JA7D}GG(W=7!M{*sT&+Gt`%JLKwY zLG)U6HlZ)M&%>`KItyR15dSGa)6SavvsLo|;V%)){igu)1?@=NHcJ^pd6(aEE<!Z@ zMStGoKeoL_1GC{lYwGcN^z2dHu&LI~ZK7vkV|C2!wvmlL)L^o%!L+M`X?J+=*c<k& dH|p6BqpsPl+q&7<?U~uctz$ODpOWNp@DJ$!6Mp~z diff --git a/src/windows/identity/ui/images/flag-critical.bmp b/src/windows/identity/ui/images/flag-critical.bmp deleted file mode 100644 index d643fb31799d8d6ceac0eae8315e7bef993a5745..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcmbVKA#B_*6iqYfK*2N(RK-I>g@py>D;yXoC@4HoP!LcM5O~1gK!8Dj!2yGSfPjE# zI$&TB;7I`i1_l8J0RaZ5y~~fPk%8^&`{()nXUG5B_up<mM2p=be#Q8-j*IAe;UnaK zexyM}6#e=yd-|I_KE7w(H-6b}i=vq4c?xGgolXzUyvf7OApny#O#>M%Ns<I&<J}bx z&#i|5akCGvY6KR&g99+eNS|fdG)?za*svL{olVpTAo~HB$YvOD2GTRO8^>{Q_Io|W zJO5CJ*4b3MaXSA63}V$AAq43;=V@yiqph`vuJ<S+oXD~ErS8qpBPFFIeJ*&M+Bmb= zit8ajx){Er_fo5ErQwA<ta>Tpw1;0ZpX*_s*A@6Q19(eWCfD<{Z7b^PxR_81wWD1y zfc)5{vby6PmgMDn9;H-W*SwTpcHQPpr?o!zrn5t-b)0k{kwX8mADzb-!$ooV+Q2`* zDOr{`OkZVPS(TU)zZV?ak{-3ApIjT%i)H`=z|mn$0e;jTq;r<^-h0%Dmbm$RxoUKH i3~&INBBEE2k$!0ingLt*dBOwOcka)Npfu_KDgFjV+C<v` diff --git a/src/windows/identity/ui/images/flag-warning.bmp b/src/windows/identity/ui/images/flag-warning.bmp deleted file mode 100644 index edb3fc3c88595f8685a3188ff115b9131611ca2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcmbV~A#B?~6ox&G1w_+OHBeX$4HgU*RvH~B7zhXq2rLK~2nZ-J2rvi;FfcGMFeo@+ zO$7!91D<4X;DG}VJaFK^fz$r<RawEv_VnNLfA2n@{9bbN<@#;*9M{MnvEIF`H`&E= zJ;V8rxh^ea*{}bK<#O>?Ef(L-_4CE+^{On(5Q2{<rIfw~e-+Z_2>TMo7-0I!W^)gC z^!zELwPz5>;J=H5uY@3&{XSQIyW4v2Z)3XjC-p)gVQL|GEgGTY@u+;BKQOapcNgLZ zNp~T1LOUT2a^({$$c?jARVsft6dQJrb|j*bNrKmpjxplhmB{EUj+&-ceqWb!PIEb3 zbzlN^=GjYW$E7e-JT}Tdm}cf8bSbF-AO7%$E$-3NO>dO%x~>?WG!Aw|?-&;X&z$UP z8ZoySr|s~h{4n$wZ{C^rKFzG$6B(L*I;y5|W<82HLf}H>r*Ygj)qJogS*h9<ji95t zZL!t*uBrQ>S024%o`ti(TFjLh2AbGm3$q9TMdwI)5z!u96ilY~gdZ1z(JeBD226Rt TuS258AD|F|d0mHB{-5%1wIE^R diff --git a/src/windows/identity/ui/images/flag_expired.bmp b/src/windows/identity/ui/images/flag_expired.bmp deleted file mode 100644 index a3a40feecff222d6782d44a2e13ab4b51114b589..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 zcmX|;A&jFy6o%Q^WW|ZO&5F%t1>!_=L9AF&u>w)CVv{o`Dk>0&6%`0XMFpaw0<oe3 zQGq}p5Qqu{0zoba1i6gpB^4DF2m}IAQ9<q>-tGN)^ZMq!ZyqzRlOH$N%Ahg)cdT2i zuUJ>g1H7XAW{UEQ(;5<Re+JD4nTC{U8t<kF`yUvy8S+HJ&*$%!W$iw-TJ3CG8Uj)r z$IIms7#&&Ic3szf-)C8`jyiTPn3_qu7uX^RozG`r#IGC&Ti?I1yFGi}s;}{UUBJ}W z9eeVTL<xZBZHRYWH_uzf_o%Kt(Y76#w{6%{fDR}L(S|`lJPuB$HDKG#aWT@yJ25SU zz5L8@3P2P^#0S35A4~96btJhThXIZ@UR@L?dC8GTl7x6XpYi-r5BG!Ct{`~pcer-b zv}_bHUSwHDe3~YVr%VgVvUFA@0;WZPF_z2a(siAD1<&$4C%!0(Z=(bs)!*bP*v4zn znRqWa%95U;8}UL2%Ziygj6(Al%k+3W;To7yUNrnAVru9(X;oFk9}b5w44=oC#`eqD zpU$HXFAXALE=sQZ=rft@@J6&H9s|Uu+qO51UjDgSEN2cwaJRQC6s4M`As#QH+ag(2 dz2o${E)4;;BmlsOhyR!T{GqV`fDluf;J+)g&ISMg diff --git a/src/windows/identity/ui/images/flag_renewable.bmp b/src/windows/identity/ui/images/flag_renewable.bmp deleted file mode 100644 index 3a9dc386f2892cb8eb1d00d4f93c39a2ae953cc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1334 zcmeH^u}d3q6vw|7C2cI_2AdQmt+f?e^TR;UtJrcqLu(-+L{B(DVv#5ZJuodQ88T$J zA%nvWH{6gRLxv1D+;BsN8*aGah731k$dDm}!wnfSWXRx<_E+s7*gwGszu$Y02k*Vl z_ocGz3~r2_2Hw$#`S+&q__i>0>+b%m$|}T`2-CJuDwSaMEhN<>N{tfw{XTSE$7W*_ zrf;Hbm(d&b(DGWS89K`CG9;-0K@*@fst^nTqtOVC<DlJd<NEp<s(OiF5J2-ZG@DIW zt_9BI;Q1aDPeHL*M4?_ls>-406=B;p>h(GlTY>7UP)(Kg9K#>_7!HT%bUOInDnL;x zV09LXp}_N8$g%{nCc-jJY@6FiUMArNE;yA#tyZJESD>3Z-B&`vC}23Iz4{$YCKKqI zhF}=Lc5G-}4VtB)*Xu!cWUvYg%dt?V+O)1(C^yRpf&ewD3ukb!+cwprhN@5bbpdKq zg=mOyT^Ih9Pc@iO4O9#U0~m&Zl$C<-w{dn>gjAQ1zD&cR%*{pvRi_HAL+6_s#^W)% zgDzzrq1)|3wq;Zm1r@VGc|C}A%4%6iTWN3_hYIDBDcfi~x;gIzzwe&;A%0NczY36h z_K9K6lSwAYoHGn9E*7MV3;s=his$*~i-e@5r@sVV$e-|;48KLli@9&H*#1c@vmc8^ zmI>L4XU}r8`(NVgx%CeVge=d$3{7)9ADx}w4y_Tgn@BtfM`<44IX<R!n(u`rnnx0e z#79EJN2jOZIZ1jS{`z`jmypBf3rFmH<nzwV(ZbtPLVoN5OKW=@KbL@KhlGT(;aub( jmkUL5uMV<=#G`zQU&-fJ_!T;Xkmz6IGSl2maF6y6xZV)6 diff --git a/src/windows/identity/ui/images/help-sm.bmp b/src/windows/identity/ui/images/help-sm.bmp deleted file mode 100644 index 582bbb0d877a619a830f8696b8c057c04744653f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcmZ8fA&jFy6y;b?PHiqLDpp-iRII3|s93RLldC{hR3H#55ET^&L<M5R3IqayKp+qZ z1OkB|7X$)<pa}v|fj}S-h!Nx-OxwNO%b(`G_g`li_^-cL58R9uet%+pzpiiGkJ;zY z|0A%)433j!NtUjqC`#b_m&;|m0o=B&djRC1D6Cx98HT>@$IoKi1XFFJ(XPgB7~8fb zgs_;VswmI%u%%s6-lR*9YT2~}n=Txhw-j3$hJhr}b<;HazMsOzprsVJJq|Xf+h7o^ zA#Z4hQ*<5wDvF|N2j1vN)(<l_UJt1yUvlYm=tN<N>vUbK#_hsva0<i5ZF$nbWU_2} z$h7Y2x{Bi%`L$ik!3BgBB!8-o;g_>8Y9`YpX_{tj76-osVSwb->_3OeEK709iX@^r z5msSVxk;H6R|)e;i&Z}dK_2%#I<fHKrdbXS?2T}x`F1$901#es!z2eFvn-3^MA&`4 zYj!$=7YXV`v7pd;l8p6X;>hEOvMlkUh~@IH%39VP&zE&;DV^XD%Xt)!&pXWzf+&ir zs$v(!Q@O6I8|LF?$G?crZ~I?cnQ;)?anQxK2zNK&IDBY8Ico1a2_^17RP6-EvMhvI p5MOPYfEk#^AP7$X0AmIR^LC5S^Z9(AmOH8I8t(zIyTb^=e*s`uBF_K- diff --git a/src/windows/identity/ui/images/help.bmp b/src/windows/identity/ui/images/help.bmp deleted file mode 100644 index c7a8a930c47c0741da3b3a968ff26f88d1d9e636..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2430 zcmcgtEsUc;810R_6BR2imt1bes>_OsiWL<V6`RW@x1yqA1)>5`fj}TC5ET^&L<ItY zKvW<Q2t);<xgaVK6}<$3Kp+qZ1fqi6W2a^5ESuaVclYJZbmo2E_vW|E=)3&B^K5sh zzoL9W`Hb?e^9gmQ^9}wVU0R+AR6qZX{TE&CZR2@<xm-}Z9mUm)znCx2PZ`W5$@l$T zlp0|v2PfE3xesH<aRfnN;?bqjFS>#-YeJGl&+{PHvr3}3;L$DpxNu#!nT0m13!xgS zsve?v=#)e|0@v$O@Jo4Ds{5*jV%Mm60NpSQWf==QrL(&5Q7jjWB+GkNm4<xda4cV0 zRzUG2&3VTpiR*M$w?39AihApUXa#EIQwy`B7oSj*V7hu0i7{{tRDso16$QY4$$mjr z`L$7``AHN%lmriKqVs6SBifY2z`CwOfz{PkD<F!~u9gustCEWs$lDww1>+LD%Eh_) ze!qtTtBcWab@U)3N-|uhMV>b?_bQ&k4KG|c49cSc5mwhU&E0PIWG7@9Yr8bRw7Hjp zr*IG1r89r9sx0u>MpoCdti$0jFe0)DoqdvJX%mtggQs}Qix|v|)x{>@CJwYck%Kfz z7)VYCp27~|Rxe_L;FT_xP|bI>BhuCl!uZleYY(2n^4q<LY0<^M76&@kwnT8XO@O)o zzTK;*td@Pi#l~ooxh4GiQFSo}W45<5Tm&(6)$PtKWNrMQMHixg<N4%C1JFQFZ41+- ze0QodE>W*seQAy0mVKbpz^otU1{p8=g0^iKx*#d0idlOM+wD#i@T;{0U5K#vf$k<8 zw&Q*r&&j=bFRGi3OEH)!U?@b@prmQpH&608azhnZ-TM477gaYt45wtk-A+W^Fm2m5 z*VY{;p*s<m=)&g8ipJbL3h)L&KowZs`bxr$yS!9aSA#LRy$6O9o|j~KsZemj{CYH@ zuKt+Ubpv;)PG@zqhNWqW>#VA)(U>FGy;fZHhTKflGz~}6NX=MX<}Z&fmWH&&VljE* z2BU|Y+djqUVa!c=MNtgHz@9RRtS<U5pW8+Yr;JY$UMBhcpx|SO{e@y9>f9`f7F|%U TUYtK8s3_`}_qeA1N~7}&3xJzp diff --git a/src/windows/identity/ui/images/id-delete-dis-sm.bmp b/src/windows/identity/ui/images/id-delete-dis-sm.bmp deleted file mode 100644 index 68850ab8797e9a8e37eccc9fec3d8f92917612f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmb_ayJ`YK6g8wz@(C&P1?dDyqlk-@q88#tQP;PKTKHHWprEEmFoI~It%V?1Sc#$_ zDq4sj{z%%Bof|f!SYw1-I5Tq@&bepqohR<&T1D|Ftq&6JB-~24Qr%1ISIlozDh4?Y zhXeit@pv3wuK<t7^9_f?LFaHdjQM<y&1Q457SBJ!<#K^>EEWqi8V&S%J=AJ7bUGaZ zfdFB<-70ECA`#?rIi%BRM59q?wOY!}W;2XNBMOBAg25nGtCb=@n-$S+x6x=cP_0&x zNF+!jpU)H5=ksB?Tq<%||0<OVMxzl1g8{nTE<{m;)oLX!^X2#Z(eL+9@?T%yu-omZ z#&9?U^UXYS97la%daOUQ*-TM`^`%~a$MJZ?WHLdqSR}5=WTIRU1nSLivtF;)sMTKJ zbUI<P*^o>ou~;mq-hRJVtou`sdE<E=p->2RyB!9D0n_R9EKk-bm&@pMI%qbV<lpUf z(;Vdcb9<>&0(--FJSLq~Dn)<h98bPy^I?3JvvVvKL$BBSvwy~GwOaHSGMS7tkNQPi I*~caOClXBQf&c&j diff --git a/src/windows/identity/ui/images/id-delete-dis.bmp b/src/windows/identity/ui/images/id-delete-dis.bmp deleted file mode 100644 index 11aedd577570da0ec2024610d86ea48b80249fd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3186 zcmd^>S4&(`5Xa4X$QKB~zy=W?#D}%uT6R}m%UaeF6?H9WbXQ%wqHFIF3$cM6v0_2R z0%Ad9Ls7wk^$Ykh{<$;Z$|?k0*N}%?m|G5<^E)$V=08^%l=t3>FDKz{E7&K&J_`2E z>a%eFeeHd)vLX|&o0}W_k7h7rAvrn4EHfHQIab%#*RP71RO$qOe}DM-`9Y;p!OP1V za=HA`9335DV`BqPPtV6OnamC6=jR9v3`AL3nb}-7H+N{YTDI8OSVTodAuKEmK|w)~ z$z*VLc1BuS8f<NCh5dNJ+uK_hcY|83MqXYX&#SDgG>a>jD`7AgkeQi@^z?M3rluk( zDG3n~5wNqfLv?jEYHDhr*X!9|ih)G(g?Thi=I-u}&CSghb5$x|l$V!tj7myMP*_-q z?CfmlbUOBv{1(@yJy}~@BR@a?aV#=25^Zg5FXmCrsMUdJX=!0=YHC7VT^;YCsHlkj z_weultt)a(pA?IZjt;YU#MEd)F)%QI{{DXS^z`r=&CSisAiuM+vf%3KikO&~CtQt2 zgZB1zvw6h)`ZW@>v$L3)nZe}bB!-8FnN9H`pL23@U~g}a;^N{bOo~5oFD@?3=4!R^ z*x1;>+S(dcR#q@KH;1vYG4%HKqQ1T!QmOO_k8(+jFYPBdIM{5iPN&EI{yvV5j<CDC z%k262d5$&J3B^}rP>o6?5`=_=JdWk&=JGey>q|9tb#+y!gLK^9-s0@+jQKP+Jv|Ly zUtg{fVk#601Ox=Y$;la|rKMcQG;TB+;p5|j<KyEOGih(%zc*oMXbAWB_c%R0#n#pq z78VxxY?VqSTwGk3p-?E%*Vo5uH#Ro1f20$KhlghI#CQ<*+qYEw{JDdjogFMKEn#$Y z6rG)&NK8x=>fQrCemu?7uC6W|92~rgCvx}p_5>}^3;O26x$5BHAjH>C(5DQXoSay+ zw#az?q#Pm*AWaPq59jlv+NAf_)Wq}kpMO)mkfxIcPz_K`BqSuT-qSec?DIL6erIH4 zpsK2hHIVY7qN0LzJS8QC^`7c<YHI3DxuKz<tOcY8gM)*dJERE(1qDJsPv+hg9Uc9q zOzIyL-}Uu%&e`$taddZgqqeq|`waC~svAq=X*!?I?(*`IbA|GsbZ}&31g)*DtbJl% zH=SeYdqYD5>-@vR1Fo*Fu)V#_T0}KSXG=P?yuAFTe$t-lA7pWH5qEcYti9B4D85uH qq<5D3^{4sNx8vjE5f>N7Eb3Pi6BB=pXSxs4fY<&@ny&M&-hTnh2Waa6 diff --git a/src/windows/identity/ui/images/id-delete-sm.bmp b/src/windows/identity/ui/images/id-delete-sm.bmp deleted file mode 100644 index 3447d57a1e559b16e2319b71205f08cf86f98425..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmb`FT}YE*6vtod(nzTg46JUVl>`zw5`v(+2*W-GUgS+hS`q}U56pr&nMJy$bJG`e zO|;c0lu^)IO>Og?WHPr&+bp6K2`dVND2Oh8J?|S4$QBDa@IO2Up5Om@&f)B?{I*=u z!zi*rs8FatC{NlT@~===N|L7Ekxr-iA3E98hN<y72QU87zB4wxuDQ_6<YW|8eVX;H z1DD#V@Wv_k#MmN7DLCX|+3FkQ*WO}loeiVWOIcYjkw|8bqb=Rk1YS@*G{athk~I}B zB<VYOg^$Qz+bYgbS~|e+a46#+%nlEh@Ei@Jv(ziEFx?d%Mz`R8=&ZruBNz;4WVQKO zT^?>e|3FXd9aqNZIp&YDYLi!IHIL%rQDk{AEAQx%iOhZC@#{tUrr)!1M~BX?Snp%q zX0tedrKsp0fq;_HBauj8Z+9~F_A^5>A34<%revFoU3FGMV`EfRIfXh&rBWGrt%rC# zj@{|TRDYJrS~I7c+nAVmrr%E{lYeD3KCDLAfBq_aeAATo#@K$s!o%Q5*7ug~oyE~b zOJttQp;?aHf630i1jnt8ocShuCnIkb85I3%KH4rEZoHN=|3FcAqK*??_<}sOK((yU e@4u5Xuk|zFyN#`*n{%yh+@Ah_VwcV%m-;8)z3}1y diff --git a/src/windows/identity/ui/images/id-delete.bmp b/src/windows/identity/ui/images/id-delete.bmp deleted file mode 100644 index 5b1b680300e248f255dbb16f991fd7367d2e6a73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3186 zcmd^=YfM{Z7{?Dd7Ga|hmlzNi(M^Lg7?6e$gO?e$5i+17vXyHu(2fomV;ckFK*`J` zFeNZ3mr`Vam5C_W!9<6n$faCbC@}5}xnE?{T|TH^{=VmoHsf0x>lb~K|2ZemIeC8P zdCqzM?|Xq~cT&vqCPx>d-9%1A7L+qNK3N?silU`oV`F3ZKPoyd5rGjxlO#+?{ztuX z<M6S&pcgL^y^!C7=kwICztRo6P1#;-gq3>~SlR7{*uG#s!{l(z;>3ybCiA^Q1n?{$ zfJeC&?qyoMUZTOCqCVyw>@yl+=@1Kw8ppO*1qQBbFb_dN$*{80z}osY!oyQd;`)Tf z;E-Y%eqRjZV9gMGt90<L7=)X&2iqNk2=7lK5X}>A4B@I^=X99x1~%h>om~bLidv(& zZ*yZ2_U$;hM4|O#;M9%6|H~1)Q#}M{ejc8&Ei~k&s3lnL3IS!IHN<Rf>v8JTC8K%t z%=kr!kk~SVgzu*zxj7BtjY)(zj5BPy{#OJAgj-->JgJ$k8(^{O5Fc+Ek7fo$$06(I zIegSUhl_2$Af@##!xtzg@jj{huwn!+3-V#Pqi74)#-<SxNv28l>3xC2I|*t3G79^a zk=L_?PdXQnLD*-0m|<!Txjuqjo+8rE(Jf4hT7j1r5B>f9CUd!b5xyGz6}5NPQ8l!N z63q&(s27o`nnU8v2{^IEpe)Cq;_05cUdR6Z(dg~%HHjOal#B-L41T=(8*WV9W7uT_ zE6C}Z$DRXXSXfRN7~6JM!Nw~JHapS`F^bxNt7|0GYPHea&dyFm#)zR^d4!II2WXzY z55>qj3Q50x!!N<gx`oNVomC0vsL$YXBow*1QaCtdZF2vDv$GJlZnYZCq`#}IT#n4k zIT%`d4AtE4_-1?qGE!@H*8<p~S$Nj|4BSQeaO0<;u&kWPU0PZLN5>BdPlD#=7L$1T zf2mw9M>tQ2x~?I7H+c^ggR98xUO?(kv+&Q7<3J!6#WMMp+!YlHD3#4yV)}f>p0!#n z&ZS(y!6N~9!;=jc4>o)c1>kf_I_P`G<}u|tl}ZJlqsOr~wGw*^y5N}Iis!_i;;mpV zG#ZWBnQd)tV3YnGt<fN$c7*X>wtRr`dse0r`}~5T)9K90O(OjhRJY?a@xhbLQ;2Mw zK;ZQ|c=MVLuNC*hUUC)EQkhwq0mma5FQEP4<BoY;Xq|<qX$rx_^L;7@@lt^r{t>Ze zWd=nEP)GcT_N32stHcKvk$!s?LgKshKI1Oa!sl3&S(#z{81yVXMEBxDw9MQ`_3#>U z$gCt0-=)3YyQ~Ksp4hBRX>kdP<kv9&;1BdIKSIOA2IKo_WIiLv-sZtgfU>E{tW0{Q z&Ye#|vAhz4tB;{1zCiCcX|2<EH|_(ZXI(ZsPd~?{G8uTHIE0B4a7-WpCn^SYU)TR@ KJU#cnaQ+)%qlK>k diff --git a/src/windows/identity/ui/images/id-dis-sm.bmp b/src/windows/identity/ui/images/id-dis-sm.bmp deleted file mode 100644 index ee55b0f20786dd29a2ff11db0c6615bd4f984067..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcmb7?A#TJl5JlZAud1M;;Hn4M0~AK;HFAs`qF`YUU{Fx7pkPsDU=U#7l?)6F3=9Gc z3=FLP*iBVM*^TyVY>k{ZlbO-HyzX}-YmfU0=i&F<k;nW_@csL~obo`(`F7QH{k)~7 zX{xF!xx21QP)sp+&Dn|4(+9<Ur1W#P_rn`P3g7qr#6vNJ(Mrw*W3YiSJ{tm2!jjJ+ zRx80LxEMm<u&?7fpJMb*4MV{|YAL)mc)ZMya^{T`Xlm*$rFA|=XLPQITO~6*bq1~S z(T^x*U>v`IUov0hk<J;xId~;R3Zal!cq3&Q3);kZH~5sCR@3}BLl+p;CJ!cz&O5tE bj=<G^|0i7de|+1vSc&Vxj$tit-{tcUcV1I{ diff --git a/src/windows/identity/ui/images/id-dis.bmp b/src/windows/identity/ui/images/id-dis.bmp deleted file mode 100644 index 3c04aa2fa9ce7d3d71eb6a12dcf43521dc09f2e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3186 zcmd^=SxZ|{6ou`3=^rSCKK4m`2q_qiNlarj2_z0t(8M8W%wVF418P*9H8^0MaK>32 zP;mfJL5)!n6hv|S1OANFyHB|yEfmVV?MpB0+>nQSXYIZAIx0ipZ4`T?+~+5*K5+G( zt2a>}xz8U@<Xu!07607d-{XHQuh$2g&HhJKT^$tED~Uvk<m6;%wOVL28YCvFp-?D( zTQXUkAZA=#JS-LqtL*G-WM*a}H8m9mgMpnvtybgbijS8IVk#6Wc)eZ}6&1nlcEjOt zAU{7J#7|30LrO}@FHAb85FctZNvN%@MNLf&s;a6`US5vk;$k?RPUPj~G2Nv3wN{}_ zolcL=&Q4aLPzcS<&Fl;n6%|as&1OSZRu=Sn{R>wp(`YndY-|jpqoWua8bWVxFFHCp z(Ae0>bo+ch6ciM|Y&O62Stv6j!;F=c6)Z0=V_{(dlarH--QC^IG*?zuvRUWm=E7t$ zF|9&9WU*MWzrT;&-Cb;NZ)0_J6|=Lm7#<!5aT^*MP*zsPyhS}GPbDR31$oHnbm8RW z1n1}HI6gjR?6tKu%*@PSaBvVb<6tnzv|6oJrqk~a2x9K+?7-!6<Kf`}S65ezPrp&G z$H&K+*82K-`2Bu1SE=+f&d$yRF=@}*+e4U`n84H16D}_=ad2>e_4Rd3O-(URH8nM{ z{wkF!jEsy3=JC5t+^=69I64X=91df1bCdPAzrP=)rKKR>^z?iajmL8%kqDOsE^cOD z5FH(jn3x#m7q{Dki;D}<dBi0T$>nn96F&E1V`EtcUSD5}&ZK>j$z-4mC@Cr7eB}b| zB;`H*o{*3rI@9Cvfc!~0*w)sDy1F_90s+|VcBH4LLn4u2adA;pE@cd50Tt~?Utb?u zT3VQ2DRXr?9m`#Q_F}y0-lYES?d>to&dtqXU|;~WCv?xy-KJ8hMAb>NyScdmdFAx< zl;z;`^fbD<x<HxB-|J%N<Nu?zwUuSh^Yb%qZ*OsUc!;H?CD4A-Y?VqSwzjrJ)k*Ba z!a{6pY~b<nk?jrLH`HI+8_Hb%d}6;T(<#eya&j2UXf$Gee*UlVUZ0=ldUtpCPgt+H HVtxM(Di)S+ diff --git a/src/windows/identity/ui/images/id-new-dis-sm.bmp b/src/windows/identity/ui/images/id-new-dis-sm.bmp deleted file mode 100644 index d2a151c373c1a8ca7de594afd7d0d5548a26598f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmb`FJ8QyF7=|s~+x~=({RMT^;Am1&3r=E+w;*0nbP%<IcsD|WQBV<e5Oh!k5f>-x zqzJnBPrAO%IVDpqap(u{NlwV~p7UK8_Ul$h<5^js6g?=qS9GI$RMwyPywmB3)Ht8d z_z%V7arpfLd_LbVg~MUZGkE?DZnqmQmkSPu17@=sCX<PZWm!!=5{V$2%_5abAsUTR zFRRr`d5+^W`Ap^=-EJ4nW)szF70F~0UauDxiv=9_qRCe(6|7b(%;$3q1_Owqh(sbm z&$ruOHTjPZ38&Ku)9Dn8#e&`?m&?ImFdz^JQ2uy4V!2#i^g0|4Xf$Mu$72M8LA2X# zlu9M&^?Gc#TTCVsT9^HPe~~9Mu-olWtBG(ros=W}sMqTt{VSKte{$;lY&IM4JdaQ) z1e?u<*=z<9`FviJB_73M5&eE2k|e=sG(r#rv|26dIUEi(Jqm>aMxzlt9uH($ruAnS zhH_-Dl>@1Luh*mhllNFGM(0S)Z@pgA`>6X%&rYWUG7IT+TIomQ>fA4RUGwc5-XZ3z diff --git a/src/windows/identity/ui/images/id-new-dis.bmp b/src/windows/identity/ui/images/id-new-dis.bmp deleted file mode 100644 index 61c2fd21abf89d775c0bdca75429c043ff708aa5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3186 zcmd^BSubN@7&iBlxpE<yOyWw!g&4$$DpgfWks`KGTP-b$3Sy5fb|UsYwjlNpf`~AP zNF)+skKgi4-*<AFL5<}kb2BG-d)n`u?|Z)IeV_OFDi6v3Y{i$G>C@g6-%Rn<6rZeY zO`pH7!!K4=6vB0VeU1My42B$NwW;rl($X?fxpH-NLttPa0s;b{R4U=?tAI=<`)f!f zo}w^4J*CiSG#qhpafptNMtFEQLPA1#4+@0>PeUs85``&~$zd=Uke!{4%*;%rr>7%1 zIT?f>5fOo)prB`%v`;ZQR4V;ZQBi^N@^X}vl%TM%5V^Uz(CKtYN=jnh#Q9IIVlh>! zV6?Wjax^tHp{}lu_fS++#Qe2dEn;F~5F8wA#ubaHR)=ADco;)NL+J1CM`vdzT3T9A zQ&Ypdb8>Q!l9Ga`s3>!u#bQQAMqy!L0rT_on3<Wu*w`3jx3{-5=i=gGuC-dNhFmUZ zu3|N$(IjAJX9wHc+gM*;$I{XgrlzJaFfahZt*)*{K|uj)*u%qvx%&GDh|-Wwr^nIJ z5l&7{aBy(I*vreyn4FwMZ*MQC#${z?jOFF!#XOD1{AZZw=jYGHUefmF<|g#|Ox)bu zpt-r3>$bSK$hjUF8DXwfRaM-tgz4t?1INe5=Jn6c&XAg#%C&z9!_s(TV-rS4M{##| zhrYf(I5;?fbUQvi&YG&Ntwm^PD4d+WV{mZLj5jec0cU4tuD_*qUmGLbw6t{W@Biew z`uX|sdU<(yFdB_;baaG^iwonet*s$8HWofUJ~%u)H1FXx3`@^xKGj#D@M8>ndwW=0 zTeJ64uTUS8FWK7KvUgZo<Go{~AwegC?@^v<FT!<ye~*NO1X0|CeNn$iBodGZP(Jl~ zJrWZWLH)71x+*|oYio=9N0=w(o|Tma(kJDwp`ihlm6h!Cc6N3k4Q*^}nDIzAySuxh zxrT*>u@{gZP>)dlY;0`U3sfo<YngO3H#f&#NZ+Za#PFnZlk&T=vch_#^P4ymM>=OH z@5E2QARnQ#hVmhdz4uPFBfoWbcSl!O7xxSGUt3!n$aAGqDZIVCAFY3Nb;Z6&y?c6k z`smqP@ayaASsM=z54gO%#NOT>=druHo4HUfiLa%#W@l$PHy0Nd7N1+1BaCHaWUxkW zZ*SRq>AdOb>EZtiRBzIj@b1$)?epo_TYr<MlYZjk;~9(2u<7Y(baZsEAHQ{-kGx0c S1l3EJOZECl&4l^?`u+=Yr(8Aw diff --git a/src/windows/identity/ui/images/id-new-sm.bmp b/src/windows/identity/ui/images/id-new-sm.bmp deleted file mode 100644 index 9fb17b98c31a33b7339b15bcc5f97f5c02d1090d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmb`FUr1A77>5_#XZPI*5kwK8QDI0I-9&_thGC$Th!G7ETi7UfF^yJowzj!{2V|+0 zWT7E}o`@KzrwIS-oS~hjD?Dtm3L@9A+o!X|M94Z2z3{x>_gy@{mk-`!H9xjmign27 zyA8G*lo@QXlpFn5O>eVU3Y1FIH2w#dy4=)v-sSX--)XYnG@ViB@KM#Ta4;HYk2uE; z-y6z=*F`GY+@^kuD?-y)l7^@6I61s%WU1^7&J_L1cCV>_)f>e*sdGKHf>la!W>lkk zK&3n|!vUM$)b9>PdARU}zW66@ze;oY`Fm=gyk%GWGSwYEQ{NjFk@c_izg%S?@fqio zPV=)R_BLl|bO=R1k<gH&<xR6xRmJ1$<=$A1^R_(QFFtZ{JjK4F3RAMo$jArm_AIlr z$xZ#j4k(I(r#Hl@)=ny`7C6_MLJ-!l*>bqunLm1^{h6GWsl9fG6GI91yB2vox<;V{ zA!q6qGMwHpE;)@|(m7m{<Ls4H{K0Qnt=}0O)J-$GJOTP9ax}K(ag1lEA5L=Qc)aLE zB04=i>Az-7ND_gt%3L;&IG?3KlxVpyzwX3hONipi`n&Y+jpu`*N8Iv9=nz7LqW4W_ JZgl_U{u4v&2L}KE diff --git a/src/windows/identity/ui/images/id-new.bmp b/src/windows/identity/ui/images/id-new.bmp deleted file mode 100644 index 54830c1830327fe089be0aa95f594f863fe5af35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3186 zcmd^=e^8Tk9LMSZuDZPABIVNL5{8)k5Lag)Wr3Uw5-?!E*k}qDKLn(tfFp}U^3oJ1 z!ccQ&;2?)aR!9NDz{bXp0b{t0O@7G)I$(ln_3ryT-gcf^$9nj$@7?G5-aWT{U(fsV z<NbX-B=boJdij#4D+y;3%Sk-pu#!CQua>7A9H_7^jYfn2W5g$=B7`fjD+DPSjB@1> zmH_7?zhVW6=fAuL$3yLS=3pD1{+C!An!t$ZwVe-7aVOS`RajT1f?KH)tB)z@Z&>!l z<Js<^JVs1*WFp=?r^c4A)d)D-gH30;;d`=+=DUa#a3b0t*36XY7xgZpFAN}xL}ZNy zVbXpCebWnnNe?!h?4)&5d4G`0;xN;>g)2nrk9ws1phNOy9R%MEB1Seqvnl=TQ(a)4 zP-6K5T&B$6_#}LM)r5j(6LK4k$ZjyueEy|DL=fF?o$JL$!gVd}z;lQ1=b6Q@hr)Qf zAnF)HiDC?gu8m@U>oD>Nd-qRzT61`{25*pByBGGsIY&+R^je0wjY<&WeE%&}_L*^} zX9A_laU5(PL4K17>4eL>s0HVIA6S_>tco|niD>nUh-cKd@1<uzrqZL{@Ea}-PSNbL z&T)L+HjEE{G14`D=UWZdWf-s~W)v$vse>Rj^ATou_u@UZwY3$oi94YhpTmCf960f} zA#S^c5|ZzIS8vccj;qzeD`N<(@CmpEMnW!^+n6fV0C+qzva-f(?-t|d<>CtDe^!j1 z2@8(Z%)-rc9?1u$Q6wLxdrCn1$$Pg6YuH^VDHGeymPm~7^qhrAWU{?m4A1%-aYY4U zcmhb}J*ZSo!9Uajk5?_=9v(rss2=VcYT@lYNuOO;r$cP)H2nN#(A=#3PdqDErBWd) z`+Woi27~44gH<o(<Jn~vYz{CZGIAbAkKRR4&}}$7FCZ<=jQ;+`*U-v%cyDTI0(;vI zxO{LLE=S~WDr$hEe+#Z$`2*HvF#Lt+=xIjUtlY-NM)-t8VcS_Hf-8Gz@AawZ#7h1U zs-*X<NHjG3iM+g<OTtXg&H-Q2j5OkdyS~4USkkNhMLM{?ynua0zvIHiyF~9j6cpSc zeY1f2`s<9j!8>AUFQEM3)0P_u*<*&|3-j=eGlP{gh!;1`faNg+snh_Wa1tIKbEv8^ zFyeB!d`O8Ooob)ND}fgHN6aF#&IoEwsC&khI|6s#%Qi+^n-*KQP9rzhzPYs4lG>va z5>Z||2QT&l4oGGoQBR<lcoF4)l-Iin^zeO6W@B3ao0m5V4rdAqh5a)lI$nyboH}Sm z??5p&2bp$~_Wiv-4}nYWw$+=yLP~1iBTR}dlj#u{I0d!Z{@Kaela1pQr_puOLVGWD z-|TJBVRO<)*dA4l!otzVGAS;TSv^r+4xTUx(K}P{Ha{6*afy&t*ARa*qPTeEADPx% UFXgUO4xppM{+cc2H`sI5-<tTzOaK4? diff --git a/src/windows/identity/ui/images/id-refresh-dis.bmp b/src/windows/identity/ui/images/id-refresh-dis.bmp deleted file mode 100644 index 7d79343691bf8d24897c7d2c6ed7001bfb8728fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3186 zcmd^B*Gt@K6m{R1#TQ9nSrkhwh;<Z=eVnzf#uf|eNMegUHZ(RATQm{GhBdLoSRxWk z43;3tssV|?nyA5d|BSP9ZkRz_%_s@`vOoCdH(!~1zI)HP_l`2G=vM=ITs5Con(>Eb z{H__l7?@~2zddWe85nSApM!$~{2xbNUOrM&)6N~?;o<Q0_5IggMMdQg#Y&-YMR0I1 zf`Wn&5D)-=f0f`6%f!S4Mn*<(a&pqGaoxki6KiX0n3|fxhYugFjPL2`h2-R98HtIB zh>MFuR8$ng!oqO<`gP>w<jC98(-VGvelRsPmAQk11Kix)U}t9sYin!d<>g^>bMsR8 zzP?I1pPQSD?Cfl0WMtsZojc+;ZB|rNATu*l{JnPVn%srwxR#cdCTDqP-si@R8<?A$ z(~BDr5QysPYE)HK;lYCkC@n2TK|z7UlXtJLuSacdt=y%gqy)vq#li*eqf)7G_wHRC zenLV5EG#VW`t|GY;)aI)g~yK{%V=q7K|@1>+`-)39PRDxXlrXjYilc-o14Y9p`jrx zEiLi(?OXKq^}*56QMlm!=)YR62IIcBw|60KL_{P82L~}QFo53PUUYPHh@XLhf#~n= zM^8@=Iy*ac__nsT8V>Ds_Gp`&=I7^waiAv5%*-$|Gow3mwjSKR9V`1UUcA7>!~}+i zhb4B6jg1%^8<Y9a(2x$FF(I!@OG`SN)US(+3%tF(<+m#<D_B@q(CweaOioryoM>Zy zejc;4v#__f$IF*5!FxP<^hmg5j*u&3V`ErZS>gHf=VEhbXGhMFTX%PNi7T~D?VrWc z&hOpJ!ut9;Ha0e}y1FW{q#w*lV%yl*AR;0{a*15g7nSNy+`4rOuCA^!SUb|w(?x6K zpYx|rpI(T`7-VH-<M8kh+uPgX=aVN-M4#j-K0aRbSy)&o8dWG<#20FuzMhUhHAViZ ztNs1`3o+^M!-p*(&eyMB@$utF@rC)vTEjYX^X5&-Lq9*I@XEN*?z3mlL<{6oi%;!G zM@N4bPa9+6rl)7%{rkT~@6_t<?k={rw(#c78>v5Pb&BvnO?r8GAvQKv_FlbuCH!-p zx}^@acJ;mK7x`5x{iW7UPEO+J=m=lFe8HzrpCoU|E$z}r@=r}OR~Hu-1z(|1;PdCt zm&T-xZyHgFMp(;gYH9@c`1n|dPyczAI&yY)mKw%6xux&=eADjpt{xs9lH2$1-`D6W zOSDS;vnH|cl$V#ItgKA>kB^TJ7zf56BqT(1N)3#Rj9eO%{eyLtInO#r|B8x=q>jhL z#7N%M)zwK%$+7mXd^7IsJJi)x;u;wlDfY+{IiiMGi&)Q6Q&SNd8Y+2n8te3T#)+{x zy{7Lw`zC+4yu1wRaD03m-QC^NSJ-E$8>LctC7b#%Q&Li-7f>I}N!G#9(NXCu<Wbw# z_1U?~ep6GE)XkHV6XE3DyLXtLo<>(!mvGCTtgkO#1y6gHx?`VbPEz~KamJT*rLywJ m{&#6H&U>?Vv6d$#B?%U5fVPL6cm8Ltkyqy4&$Rhp+WH5N!v&ZC diff --git a/src/windows/identity/ui/images/id-refresh-sm-dis.bmp b/src/windows/identity/ui/images/id-refresh-sm-dis.bmp deleted file mode 100644 index c9d9addf15b1640dd3654fcfea5fe4342a43c086..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmcIixr^Fi5H+OF=1)kOb_G+|X>G7jR1m!ISW#3E6>m{c(M_>p1o6PaO7H>&u@J=7 zLczlGKS}%Yn+eLgn~)~?V7_bSy_q+R{OgbRB3@sF{j*>n1-ldMo#>OW|60!<L?W`w zI-k$@7ZwNv@bKV-!{K0)$z(8@Onmoxy?@PNHd|n|S{b9$=^&TOAr^}vl}aIzNTAhf z*_TSCa6BI0@cDc`kS`XC!C)}J@AvatqtU=<G+zH~HXG-8tvQiMqF%3~QmH_%*Q4ET zquFdC9*=V!i^T$VyB(oWi1~`e;!O>OLIIP>1jFGF9*+m(@tFBY`~AHbtJMno{T?cn zifhT`ayR&=rxJF%9R`B|`;|&1)M_>7QYaJ%27}B?`bwn|5{bkOe!JbGT>g&J>BRNV z=W{rnPLTd?w~I(5g6VXM(P)HpI*r+Ec7vyWY&IJ_K7Ql8{eGYQ`FtMHXjI@XGj_RL zGS}<=(VKc?Hk-Ll(n<YlG#aQ@t4Jo32#3SWk;!D<<R(1zq}6J1JjD>+<#J)YUSH!a z77Oe6UH)t~%Nj@<@lf4vxBH4E%;9jjdB5c8^?Hn_Kf2Qlbvm6t#=pc~?zLJCGz&C0 L)U(U~|2lsHLf+7d diff --git a/src/windows/identity/ui/images/id-refresh-sm.bmp b/src/windows/identity/ui/images/id-refresh-sm.bmp deleted file mode 100644 index 11d1893b4aaaf27f873feb2b411e9500fb8f9639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmb`FT}TsP6owaF1Y!QQbZ$$BW|)OVrD*0~7NijALR`*elo{Ed)zqBJn28#iX_`8S zWm=;w6Di6dTZt}j)NKs4f>I)kC<=mZpSFqOun3_8?>XOr^StM~I6L<IS}Jfwlp}{Z z<n54`LrVlQN1llRPl3Rx*%%)m=YJ@_{0bS`tL!VC(dM)aQcvq#z3P0$KX=G4G!WBf zA<{5PxPBO4c><m(aja0cBTn8%{Qh|4xpFi*4K|x?f#2b(R#ZK2P;^g_)btF$6Ctdw zmLXJzBF>euPPv{n>a~QP3}bIj8e?N)ZXW7-1G@exG^R<S3XT)dAw}F4NI<m|QBpi+ zvl(T+5?N6Qvb<o_rG;+%rRxUn*uQXN^fO^+5)nQLK-ezAw<HMfI2k6B$+a^fGm#Wk zD(W(|8(-g|XK?BpT_f+=crcmZ1F=LL%_F+8k7z|EI}3LaQLqVVX%M0&DcNe38*jB* zscUFt<kJr#kL|{z&j(3K6v?M5=zi2gc;N<CKKFP1%fCiKXIG~i@4Nwv#X?<UGcj3v zS#I!Q**i}pwSmNFW05oj;nCxR*XvbmDc-t(b@KfKgQOQ<CdFt&R;t76TqwRbMfkOe ziPgrDTXqERZXt?`S%2hp^(|Blex&TxB!?cqW&15FIhsm_hKA<m)6S-2d|;gG=ihF5 zT@x=peCOfBSC^0T7P7T9ZnJi~-L0R`Kke=1<$#&t>7VFFrcvm7>9}|Quk-WS+4pVZ VT`I4&QdHYav!P>A?5xLP>Tik!xZMB% diff --git a/src/windows/identity/ui/images/id-refresh.bmp b/src/windows/identity/ui/images/id-refresh.bmp deleted file mode 100644 index 6357fde4f1defcbde2a77393af3c4b5ffb7c7298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3186 zcmd^=Yfw~W7{_fYQCSvtSzveBg<W=)1;x0vuA-K@UWO4N3kF36xriEgM=`BYGaS)! zbX4S~f)^~ZaJ&>S5^}$zf_KSlrj?bK4}JS}b{!2SFr56-^v?Xx?K$W9o##34`M+aB zmWcXThf&xX1gQnN3VNlFM%X?XRpLH<EP6UFT)4phQM2YI6A~5Mt;SD{#Ng}yw^(e_ z;(ygEpRgFz+Zs>_Qf{rsc}pD*n`^NbG$1q?8@W9LqSsr`E!Qj>5*kBIO$`MF1yod2 zyfEK?>TLXSTJg<kVQ5whUb~vn?P#>VgN?y}ez7P0^-4sG^AK;Wr2mAO*vcKz`g))n zp-1PZLu>G0`poH6R#x_kZwilN{J}QN2ih33|12Z(&tTkr8m~<yi2U5ptr>)Nsh-z0 zYWfcHL@`B!VUagp$%FBpKLqbY9|p(!;1R4trB{=`FaIC8qa)*)_Vq;~1%)5JKv>~< zCKa@!o3#X|Sqiip^?0NW#BG5FO^OcPszE5;RpCBdgWEWFba4Zp@eOf<QF*J`y?gg_ zx#p+@l8ZY?`t~aGzPU>5vCB*^x`@PAcz&ypcbf<9TRhNg)}c;y=T(^)m!bZYmX?y2 zmq*~pK(rw`JePS{>o?5vLgS^Op`oEiZt$$RtgXDknu;5&F27F7$?u6R5av;k8?JlY zQRN8A)S%v>wes!E3KRjRF8KmSy@}g=EdxI=po!NZ*UQPw%ItDaXHN)=PGo1(9kw^# zVN3lFY^c7)_(iLbER!KWq(X5(jWWLzKSM)5t%w5!2cP9ED=S0wh8kD18sl5TC@Cr7 z#EBEn;+=Vx<H(o<zBvCghtB;({@Hu%YW@*bkPou2<Tw>6aop~L{X$2?!7BRus<H9$ zMDDF4V^@YXXIonvMMXt~hKJ%G<d0{d5cgDI8r`)Qow@HXTuf0*2c_Tt#<45+$*Me0 zKbbAkVQQR>24sE)0uom<JpBlMS<NUvJWP<;%%t#1c$y5Tjc%x>sFBTaMzL0H?Y}%q z$%c&^daSd$x|$hrb7=YT5mmPyaIpRon~qeGxNR?vfgae-m*8d|NARI`hV40xVPZJO zaYpRtNpUH3?Y94FlN(J<O+7L#HD~AK@=;nkXYW1c)Q#UUh6UpgCr4Z(Mcg1m6d}j7 zIuoCmRJLd3(AwIH-Z&6xt}{+YlsJFo`i$?A?MlGdfamg__Bkgvm+8^56xN(2e*Gud zt(IYXUV^AiP_2Z1J|d<@g;QQ$PH}ND<HIK4V3y!mDo6H>@a>N&tbFMLC(_c>dd0M` zTUuIJnzEcR6N3?H#n@yFpnr$px0f8SJtx5~-2r)o5|?l}wtF0~ua#k!CqYu~jI_+f z%6A>DqOq~D*UVF=PGOoHfqunabXzL085P89$pZVLh<?|_fANL-Z5terML9EM<PaPa zoUDBNZ)NzI{d&!_^eiwWlF9p<t@Fj=y@9!{$df+h)c_CrPOwF?LWX#i6h(*<-Do`- z*-!qL(CARapGmP>=fJwOk9*Brn6i@D`zlx<_+a9RE6g}@iIC6FF(U5_gEE>B$8IEL zMXJ^Bnwy)u<ZW+n$9IAs(l?~k*VlK6J)JMz?Sms`u(|HGRqLy6vi#&V5{_RXRPcP$ z-qW~mt7B4Be2@9+>gtG?5z%A3JLZ(A*%S(XWbvduXYL9<c$<~qT_g7BW$QXKG`j`U zJ2PJ>XLp>=*QUk9QUAk3YHvTJxZ_v$wcR7V_7)3EI(Sc5<BVDLghkJJsmz@jyV#MN z$IS<S(0Jz&MVEfD`hIHJHKK&I%{MZMqsNcGRHmiorOQ&t$lc57yN@|~`M!0%Nj-U$ wx96^6<=Wo==bii4o8!#vY@!q9GHp&0@64V@*vvQzzdZcX>+8+C{MYXJ6P@PDq5uE@ diff --git a/src/windows/identity/ui/images/id-sm.bmp b/src/windows/identity/ui/images/id-sm.bmp deleted file mode 100644 index 6edfb07d9514fc52ef00b7ce8bf79abbf1303028..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcmb7?p>Kmg6vkQh4@@qICr*&1qN3si0#Sh=*#x2zQHhwCKulIlR8&?@AdwY_$qEFb zk|q-s69`1bi4!L-`wl9aK)dzJ-OD@p@x8}`=`+8#T5-fD?1$67vmV>)*6DtC=;Ho% zoj-m(@4UfiNGe$$(qtZx9Wp|6iN>~#H6fcb2CUCln{+l}fPEtHoD4iM3H5lbgjCJp z6D1gVWEOb%yNqJr?ePk{7NRLOvBx<u@V5OP2HSKczRQdJ?rZM3=mGpk6dtQmi=$S0 zm_OF}YT-MM%h)=OV5_Axb@edc?6&dL<HS&+E_1Y}1o~8iJmy)XE0}|SdkN%Er91e7 zKlo)7wqvAZ7T^dT-^IkCezcI;;x!zPrVeGx#JuKTylUzy&x&l_nq$1if4F~?ysGng LBL9zW|Cjf_TVTQ7 diff --git a/src/windows/identity/ui/images/id.bmp b/src/windows/identity/ui/images/id.bmp deleted file mode 100644 index 72a93c6a947c4446c95f08f3bd3277e74225822a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3186 zcmd^=Yfw~W7{}>*V@}ODkvcWWG=%7&A?`G0S(wg_uxp7fF0dB_VFF1Fg)U51V~$xC zA-CN{6eSZi60x))S%n3HU3M36xr$umVrqH$(6?XjIkq!S(=^kZ)0cW@p7VY<XXbaF z|NDRb@5^!99uARLjCh8Nnk#CysE0zH63_dqX+}thRKXPp1o%HzN=7zuM(aN+Yt~jp zS}o9<nOpc1b3{GyMH{pBw=#2I3y=IwMe59on2TStu*lv?l-<L^au3gzx|w&NUH*s1 zKKpC-e4R-VQ<IR&%IYp+k9M)*h@WMLeZ*9FWqw$3JE5ZYKliMZx!kac#BX{rh)Osa zKwop2)n9e<VwImI6`gY5lI{<3BjT0y8EZ@<``i#&-w%@c-5}O8{cNo5mDy7NnuA^< z%G}I;fUA_LP03)_r4io0IKsP)SIKR-BJ(YE{j3vxzgpeRQo#)`?cnjx@9P|)&_jCD zW{Nu|C~BWzf7>-aZXV-3!G81nklgd@Cjz`8&iXk=Cr=A+NuG{WsI9@A#_`KPbFAk& zhyBx(x+mG!I!=LegdD*&o$e$4c#rI@`9kAR(d+VcDT;jiM$T4hJwyC(<rmHj+?3hn zos)dhGRE5%uF7Y;;Z#8O^<ptob3Uxcn!QaCv$?sMq||gglXqzvyUp3bTU2*nr%34i z!KG1I<K%Dq&>s8aTvsLFa=8>SrM$P<9Te=|i+}na&XHd^)q4Y*=yi{4O!kyj_({@t zfjN(&a=T()@Q$%N9BedMsd4!^-G7q`@06_X&L4+KC_B&6I0Gd%hibea*W>Z9J$DBy zR%wY?6is+kG|N_M*^--&^e*_Fn!D5KM6+f+VLK}cD|8XMr-4V)Kjj6T0k_+&I<v8{ zk!Ydcnj>!6FH-hKi<y-2envqZk+C{_KA)=G9HF13>LOc24sJd>K$7rk+}Axkf5^u( zB^}Jn{F34_o2pFh`Xo6Eq&)bjX_Ore!=%*@pc9#|sr2$>VJoYRn^a}S8!gm`Jd!f$ zpl?d#;5hjghLPq(x@Q*JJZRP?tIA9?r_y%q4lUz%I5%{Qs;+7FiY$`yPs;k3@;3CQ zbXA$fC8Zp29AfnLZ?sR`rMB;eocnoVK8@mTi!x+US6{CxQ<}N$Z{<?rsKh&Uk2;YH w(tVTHFvv?8?~uQ1x9Ys$oR`^bn9?#xOwVGiB@=yeDm5og{%gD-_rI|J4i5k2Jpcdz diff --git a/src/windows/identity/ui/images/id.ico b/src/windows/identity/ui/images/id.ico deleted file mode 100644 index aa15f05fd29d04bf0a23c94c7b63fa59dc369806..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2862 zcmeHJUu;ul6h9pu9f-Dr>1O}jc6U&=>Bdr6SMRn$r_5OmYKePeD7=h5kj%&=zF2u6 zh=x6hZ%X<!_qdo5eOfRMvMfC5P!vK4*3rbNciUatwfE=wZf_lsxgqM4oaXz^_xsNG zJLlK)HTRatLhH!kaIm*hy@e=9#F!XYP=7g5AMX{hkNT}d6YGiU#Tgzx9)fqTiCD=J zV!>0wTqI18;EnO|ae|2R1akosptvET%Z9~DBR4Xp#{jW@Ccj6vQ$>H=NH$;_5<b&X zBk~~Qc-QcYWctdY$0?%@PljKvWUPSivIz^2u>AdxVBOuPihHs%<lYJ^D=VXs6Gtf? z4pMqzl(f`!YIZuQ%P&z>a+0oTbh0l-x;jgWEKyLB=|b`h%}!5}B1!b-z9{LlDGKn} zD93ZEM!9r~V$F@D>pFchc!;J)lN9e(D1G??$F5UvqfFh*)is^8o72n{yc~_4IYIHR zFrWL9y8V7S8}Fl_EYrluSyHb~(qM0tMotgXp|C=!$uY{Y)*x%$XXwn)X+x(<6Ra=H zIp2vzS+A2~tV?HINugzIgtYWc{%*XN(>X3;If`;Ug=?u-FBcp0aDLc<|3L@#u4&Z) zYrE|ko4vezbG<ms_(_jVvWGU;?lG{p%3ZT17z~v^;w;9icC9OGvA486+E~KdnriJE z9^1Iv#FcgaXSX+2R8^bUwRKZd^DbF7v9;B|$>EF0N(t|@?|I4^2}De+Se{t_^u{~z z;~foFB@!_C)ypRGuWtYDbJq7?|6;_O>On?Hm+`VG%r9Ya<_3~)9mY!@7hbKE5S83e z+-|hEUD)ArBH(eOP4<;)t;qjo^c;E{>d+&(@Vw+f2lHDwUx4vWNkXgFyCNS8c`T_J zWM_WFr^gQCMcIR}M?$Bl$vSp8YoOG6aAa@$ihQ9zuP&mXs<?e|6!G0bw6gAy*Ml~f z3&;2O;Hz^VLjC^In*8+C7kHyH#Cp95vHp_>Ucs+dCOQ8su#{h&|I5$#d?<nE{M*o8 zC*z|defa%{DdZP4WLY2b#vcihqhx>fU+ABi8b^Pm6Ct0B*TW&CE}chVZXQc>IppWE zK;f_X;{Lu)4xwkeA8p<`47}Wfg&S9(Gf!{}bD1^y9~|6|4!)xx_wCqgFCg>NHGpdu z7I>^uU!Tu`-=`Q(97U|D0bN@q48Q+23cqpBME(2ZXK&xax95j(@w1Pi-MYs2sqrZC nSNr~=FUHV~b`~eGz7v}vZv0*SH*x7+@7I^^?}7b4ea`#=(=`(R diff --git a/src/windows/identity/ui/images/ident.png b/src/windows/identity/ui/images/ident.png deleted file mode 100644 index 904f0239bc7208ecdcbab6e99ad914ed84b24b28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 423 zcmV;Y0a*TtP)<h;3K|Lk000e1NJLTq000mG000jN1^@s6?Q>5r00004b3#c}2nYxW zd<bNS0000PbVXQnQ*UN;cVTj60C#tHE@^ISb7Ns}WiD@WXPfRk8UO$RIY~r8RCt`F zlfO#>Q2@t3cZ!fhaD#`{5agmoSRgewL_<r9)DT29G)WK+4haqhIkbq9+SngZQ-Rno z@kpYj=^%(k^VT4O6JFDm;@K&F*T?6>=RJ6muIqv!CJzI52{cWkTrML-|4|(R!!QVi zLX--5Zf`1s3tTQ2;c%GD(IL|Th0|<?>cib&f>x^qKxBS~RD6T6kp{VwBwFp>Ss=^u zufW>ET!6$*1n*~+>~Wl@dabv>?RIwwtS!#^*<Tyw{V_*6mH1<v3aov7o19-Y@v2KC zV!QSNy8<Bu7Zshi55f9&8bwh$&N~F{j|lMm^2+6Pot4!n%h8~1S=SXz)1=X8k}sSw zITa*!khBGR78Hv`CdU12Ztdamc>aX}r1sBb7zUCg;q&<%LE8dVRr?05{Qw>@XRbF% RR73y(002ovPDHLkV1i0iuBiY3 diff --git a/src/windows/identity/ui/images/import-dis.bmp b/src/windows/identity/ui/images/import-dis.bmp deleted file mode 100644 index 4257a1ad9ec59d426773ec0d2e6e8c81ea2e367f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2430 zcmeH`F;2uV5JgSN4UiB@i*f+kNK`bGu5%Ndo3I6yFX24^Wu$G8auoAsCae(H*#v2+ z*0M*=Zv5u^&*bs><=W|ZAl|d?ShuVzcSCgUY5rdy=5RRAaOc4uE?hJA-+iE6hGB3` z`?tbY^%~dr!F8=~THpIk36{8TyB#z3L4<eSlb~Ol-~@O7v1i5*nb1+~HGyk<PI2J| zC%8F{NH)48NMn2*ErIwWv+Pfm%Ym4pL16*S8f61r5=0*Y=%VT}m!ffH4x2_mY;5ND zJZ~mNSL#{ia@pVGJ33F2V4Dx<<(hD<8PIMy0Er3Hm?yabK48=~AIt;}TLMG#C}_2! zrqt3@d}vy5S|3r(Ko{`{WzQ#5RJz19goq7aEusBu1tbc$Yl$^<SubLNqLFD$W^Rby zDVs&wWaZ{1S%sU-1Z`WbJH+E9C>m%|V){0{ybVayX^8;I{4tVz7n`}Y11o<o`>^ux N!fO|<nR7NDJ^}lAHRb>S diff --git a/src/windows/identity/ui/images/import-sm-dis.bmp b/src/windows/identity/ui/images/import-sm-dis.bmp deleted file mode 100644 index b9398c3849040fc6db484cecdb33f3d7faf5178f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 zcmaKqF;2ul3`GZ!XrZJ_i*f+kNc5Cb=O~k#um#mzV)g(O6p_*(%~58b{lh4Lz;e9K z?Em(+C(kdpH^J?R_{ek5bH{TP9*7})T>H<rux%Uf%d*5dg=vh#80X00KL-Bobi(tT zAciSMi1VLB;m@CEJg1C%J6J{xLu@4<+X>&wN(-@!Sl0ZyifB5`cbz1;WP!l|ZXPXx zWyBm)f<hOHGa!em34lc2-rJs3r}!Sg)AY9;DXkh&dce~Typ}^RaRHc^y0&T^(Su;= zkr)m|6opr#xTHR*;fE2J&t+XO>JU4aoU82n)L&LSeXYp%ufd6ipGKl66bDRAT+5Uy zt6!U>`ZD+Bvw0WeYxg~X>`fUK3Z;%86#%Q|qX97gVa4vNk3d2fbH7K5V|}qY@8Apc C>DlD~ diff --git a/src/windows/identity/ui/images/import-sm.bmp b/src/windows/identity/ui/images/import-sm.bmp deleted file mode 100644 index bc7e4f4c91172fc161adb697e3be7a1c8eaf87f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcma))p>Kmg6vjK2AP~)hAWH?JqFE*@_yZ~`mds2{R3H!tL`B6!Ma2XHF@dP4Kp+qm z2n1pRQGq}p5Hvv`5C{YUfj~6-;ON#&tow5Ja_`>n-rc>s*|Tsv=p?{Cpx^cVW^mul z5BfN9h&>*UqPVzhk|efGY%Q7ZXF6Ar<)xx*)@$canWm{IGT_x}rK)OO*QaYb96Z3t zY#2uK4;4iL7|F3$S(eo`<#`TR*LBOXFeXA0h%ARCE(xV+y4~tHjBVQ(6J=S3Xx%ip z4bF%$W=JTGW57s`!Wf6xMDr6XNVPDx!vsqRpCk#$D2l=`B(UqcFILQG5iiX7@#AD7 z%;zGORCWDL20`HaJ~De}@kTlnHHKk_?1&#vH+v5W!9WE0>;xBuRrUcb@0eaJHySG+ zCc&^f5t0K&l8qBlZ!XPpJ^uR6O=pt21AtQOFN9kxodht&ury7#{6gh+8SWw(Wd9$F zU2u0!i*R0wqFVTADL6&hoMf-u#?`M6f<J@uCV45W4Q|8(o?0zTRMh8D=cBfGf4m_6 Nb5S*d?g0jKRbMrI9SZ;e diff --git a/src/windows/identity/ui/images/import.bmp b/src/windows/identity/ui/images/import.bmp deleted file mode 100644 index 6c1331dcae07b0d682d9a6eda5ecaf4a156b57c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2430 zcmcJQA&lZ!7{}R)CR>3(Og3x|fgqO=BUY>&F@ju34lx3OKp+qZ1OkDmK#<J{1frq> zQBhIRWSc#1kG=G=O}2tbm`f+i>@=a-<&q{>QBi@YXzt&>PT_HLm)l(SpV!B0OMm@; z-}~O{#gF{cT%wogzsK<%j^{X@<es6=<$g%-Cnsrl_idE>HrTs8x7BKr)`S|3xHZud zrQ_rZxpmk#(+BZ*=5o(%Cu%er^?I$>>kSj}{1EN$<MdMUga0=!FUjM_T<!JiZnxXU z8ygMBaiXtL5CjOSR;}XcZl^=gso$U8yy^G*Fsm;XU&BoQ3oDg!xmvBlHO2kq?OVjO zTCF_K+tKp>n?zwsvO#fwefMrO8ZDPg*L4xsp|;!YLj>V2@IBY{T^BuCCXBDH#+c{h zJp88XxM3OwD6o7e+qN?<z^>zvwngxcowRs_>BaP5!YRMT`}dQ{MAvmtG8bfk<fPm% zio(!$x6azKt+=fp+SXq8`@K%5Js1oquKD4EAWY};`Fg#E<wGGkdoI9%Z(FO?a!DHA zfj1$JPN&`Lc6pwsxYyU$q9|&b3U{zf6o=<H2qNajX5$}lEz>k~-CQi})e@(;h8wL` zbI|XP$770nb8{ohlA<W4X<CV39Ks703muQeO7h@2Hi!#NvzKN9CGU$a>-FJqh-6aS z+uK`JRTNn^3<H*-j1J2QH6aK7Qr7`B=JTDmjh&`(L>Cw5Bc2xof#R+|e$+Hgk|eAP zScV84mQfoSH}Jf<qH3~YXxiRvoQCMd*%^{Bo6RWh{rx9!%Vt=T9ZuYGQ=1bUG`6iU z{dK_!2->kMWj2#%GhLOBxTmKTBmv2!xSP!eP6yJ05qxIgF!>UfKgpkz^TkuHP~?=v zav0f5LlH$um|FTg+U=rUk_YrrR4SFG(<x?%;(qz^8L<n3sH!S6^_h{&vK*U;DW0;! zb)3f?iXrf9%UPMB@5RsqZl2>%QK(dki-JWeQ|>HaDz%Ku6)SA_VQG+bJl5m$1GAWR zihF;*K}od*HO@oj0?>RO4q%xp6pG-sP@m0KvOCw0RI6c+tb&V5M-@@rjq?Y%1PWpy z5z@e%^T;*JTb}3sOT&uCD@namT=n-q87W}O=kN#t8|St*Va7hww%LjOSm^s}u!(@k z>ZiERU)>>mIEBDvpxTs^JXA3=@fpD-%jD4>;bVuygp+_M?yH|av8bvz11B-}tjmfX ze<h5^SFMR$Fhi_SBJ5a4!p4nS%65N>ixbfafR3T(JgWxVApLBFsID-izajs4Mxf~T k-(#FiET5@Kc@-6(3eapArF#LcJl-<sG57Gs{~YK30vkKMb^rhX diff --git a/src/windows/identity/ui/images/khimaira-cfg.bmp b/src/windows/identity/ui/images/khimaira-cfg.bmp deleted file mode 100644 index d20b9eb3d84f919e2f1b58c32d80043800dafa55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30056 zcmeI4cU+WL_WvI{(qS54M=a4z*(95|iAF&|u%HH!ZbKAA>4G5GjSW-~!GZ`#M+BrJ z0z;W$dM^yU7pX%xyZil}XGV#;-|X%mzt?xnA9HgVCIf-t{d~^no^$SfVzS%y3?duf z!Q)!^IQITy7NRG6{cHHTuA2Nq_5wWok8&spC<!PDC<!PDC<!PDC<!PDC<!PDC<!PD zC<!PDC<!PDC<!PDC<!PDC<%ND0)PMe-=$J%TU%TGrydOr4V|5x<KyH1_{Tp!1&ROu zJEx|mcsyQgZ0wCsJ#OB-`Sj`2+S=NIfq}pM?Qj46tt<RHT3cJgu7=$WyB!vK^X|QS zk&%%P9z1yX@ZqCJ(J?U>!vgkyiJK?iCW22Y2%<l0*4laV{ybmhJ9UlkwY0w0)&2^n zYlPP^!fLF<=`7J!*Vod(>uTs}Y8YthF4ELp438RGOVl-%Xz480(KXQ2Hqg{sg264r z;g?}?%XA6L3A(E>x}WJ9ti<UZK79E6`SW>sdGM~Lr>7MT<G=huE|+`A_Tc497ZZ~c zGcqz>zI>UJlLPOzprD|*IH@Eq&}D;>rVQ3>1W`qhB?$8Qytx||sv2u+Z^dGb@t7a= zFkczye66Rw4zINmuWg9aSw_%Vg2OD*#4XXrF4M&=#}QWQ;*4<mh8X-Z3}!i&u!2BX zp{KWc$)Ys|i`Om2e5sHBlfkmj43?FbmwTK#=6>?zvuDpZ9L~td2w22_`2!UAWe7lf zYa1sA2R|R*g!qJyKo!4!{kp6ysUrCBUfuT_kXQs+fgqpFo%@Zt+K)Qgn=!hk7|d2Y z=C68~?=jlzwKe{P$9|@-x0--mj>GF~;THoaf*#;nse@aA*IS{7S+xke+JLYOtGg1U zXn;4=Cw#eBZS7LRVuLkCdWLY}_^eV(vrW5q@4kNhdTD7XIM};)?-a=6Km96T<!Ec? zXlv`_;OOOkIw3wD6jfAI1fbr$c~enQP?>!FqWNlV87*M73_(^Sv%XeS`$0#0ldiU@ zF4h#Ivk|BJ0|E0L0r#yQ?oW&KSL5-k01?3e_!#LgG14<I!sxBW8mz`**Wh5{R^u?M zu(~UBv{&MAUoX~KZ-8C4XwAAMtN47rP{;^zKe%DThV912K0ZFl$;l#-=nrD}@b;YS z91hw!9CCCza`2FgvvWjvcyV#D3{*vBWo30$+KT|2^$>vwf<chw2(o70>@QVR{;H|5 z8LPV;hcUxpx9H=4G9Y}fkN-xW@VSBhdOTqT7Qc*uUy8vP%DAl}06oGgJ={u+t`Qcq zR!`4}fM2agSgohOj-Y0Q)me@=T)$|gP$(3O#ThpOO-xLzjg9wh++=5C6CNH;B9Y#{ zef#ULzy7DI{(t{9V0F;m>7bL-kwXWM9zJ~R=usEvW7n=;1zaeo>S_|{P3^Nw`<KmM zh#+8GixI>KENk}c@6=R(($?9gqhp5E0oU4y$8NysenY@~K_INd6INmIhI)7-g5F9j zeiaV85`$T(qq|BMvkIfT28%J$(OHebtj6IC;Zb|x3N5XrI!iyp=mRK;L{ge?ce{y+ z{no8MyLQ`~7;iJ)5)>4am6g@l*f=>k`3W-$fk1G`@!%1sgU%m7op3qscH%^UpKpF% z9$ZjZ#Hm#Y*S3FQfFK$O0*@fA^|NPxqoVSorlyIO_BM?6HUf4F0k;8<`4)%&l7L^2 zBdo!JieO^bfOxPtLp1tuhB~@Nx;ksII3rzMBW;~!+S*IiHI}KX5>&OZb9I(2PytYo zWzk=!S#8~FyLGFlrKP|1{$u<17;pUX(4j+*A3tU?nL|TEpUUuo)j@|tN1P5hA3Ac} z+1d3tfO2(rbMtUNdDhn_IU#{kTT7>xRQVnJ3XMVpFIx)NAjsEq=6tWJx<y076r`o6 zYpjRegi4F>t)AW&IK8!a!b&{W2(SB@0q!#bW(`hjEe>O-qiLkAwHAvt)Ye_DrMW~+ zZP7wC{M<P@h^jWC0Y4ei;ijf03FXbvU1kTiZS%0SJZrt*+t%vnfuFZ*{Behc#Z{T$ z+uPeeNk#z{aoFMT5vRk)k2<@$xPYQgy1AWpclSQ!e#YZ;fQLu;ojWudiJcy9gGCc9 zNE_gf0*8mQJ73M4_k*gciH^201_Qd<1kxhte~ZI?rLX@v0k@8TTdjv*4Q7tVt-|OS z>1eHnM=hN-np%dcYKs=AV&=?OM{~A0YRCdTWENy25M|BH&218fxBZ^|rlzMYcL(j? z?`Lgw!rJPP&4HgSc5eKBgR84+e0)4u$LQ#&g5wcbIXfOYdho~zXBRh@6YeKmPr04+ zJax(!KzVwe_44xd^t^QG60ssV?7#+nnY7>!1YApDL7anpF@N3$4b2VOxQ#fy9|-z? z!Rmd3$A62*|3y!KJpl*S^qG#<Djlum80{q(^`#oxOXq7YovXfV?m{dwdx7ky$sgbc zemNTfP>_YTw@I$M9o}nddTQs6bJo`Wwg*nz*&MU8bJ}lv<bbWo#*HAb(9lq@)85`* zMH)V=$gW3@Iv;U%J9^yxxa(=xlO88ed3$)A@$wAx_6qd&KI7#DYj?z*YdJUFH-oBV z**pAcix6ZLf~=c2@2iFC-|OOj(8WUlen-&znn3s(hx;=mS~x7YHzWxwG&L4!sq3jN zG+3Zcn5C(PsLqiAf=4(%CLcd(A`#BpTU%NozB)TQ9tU{sGBtJIu_JK*{<C&AUJiE0 z?d=cQ+8?pCJ7#OY*J8(yKm6e9>zkjS-{0T=f4=~}{|&&(&;8V~!$;kmPn<g8=Hce< zb?P)|DZtz7oR3eCuaCcv&sksJ=<v|ExL?j6G=@bGLJ^M3K^PhWuDNs9sj7XWgZow& z^DPGdjW*`bx|pvqn6Dr=(AG4<>KbZm8K|jaR8_R+&M`n1=petT34V?af@mSgo+U_Q z*1fSYQCn+UM@L6@cX#UD%R9`>T+PkTTKybod%(-y_JqCt5eLU(_D;_B_Rfxuhi&bC z{O&vORe1jjV+G6f<)GjbM_pW9KveFY?x%e`JkNM~2m1H~`}qd@`T6_$o)7eodlCgM z@jUTnu(jzovk?eJuosZl;yH7cFHl>huC-26XT7%0m)hFvwY1i2Yp+3TKvlg3Dtam^ z*aZs~&O+q_DgrVe4+!LwUl8ikuC<EAjRFCe&R{c{Y!)jm`nJhWKiO~D61d0mf`g5p zgPohBqqC!fi=)#C2gegm_AUn<P9Adl^JnW=ESADp)z#JAyn4;+gsa;Lx6^K?yia-f zd3yzT`=0ajJMVu6SOxg`UAqt*|12gkF)=CWX>w%H9ox-6&Ot>5`2z--jh($<$pRHa zHT6~Mnt*7nhV~jY^%VeWp$c}+9NpQoA=8kdLLtrlKnlw6KOxAa&Fh;oZnf4ift7^E zW7bk=R4R=|D^7{szG>5b<IR4SJI~wOoN=&sw|6-1;NarmaNH4|*dMpIb3JJL<+}9> zW_A0Qo9Dc|PrA5z0ISm=DxW}KzmPNj7yQqhKXWE9AmH}ZONoiklai8BQc}`VZ&4rk z`+m3TYniSfJ5@tw>(8IRbfM}h4Rs@R_0{mGve0m$3U2;<4P+K%urr|KoIs7c5X5(d zYQE>*)|?xybrmgj;ug4Oz=~W;r%<R=D!C&6;2txpZ6@x!cb>JeJ>%fuZU>-H*E(iv z>tb&Y+)g^#ey(s<p}*X^c_9RKb+^+#r@j19QTd1X2V4k1XHY;uMCgqVpwcqZV`#5# zKXcl$TNMpMFnbMTHh!M^QdQLzY6}fj7Oa>*f7vXR<?tecdXwD7<&>bPwEcWxoU>`| zCFjQYi><5|tztPSadVxxj?1N2k!a*v3WdU;Qt$e^S($Bf-L=!#+Rn$$;WY38*K)9R zv9&!8)85|AQPHd*Rlaj0H2lWR;M1o;SHSA5x8FG*|MUKV7taQU1Ox;J1w9JCgDNU5 z4VpHYFJ91yv9G;%9oAb2_71v&6haGGh@C%Ae?ABdA<RZ_hzekVD4S6fa67VQLEgnZ z^;P#81ZhpeoR&Ibt5^u3*IHNCA{IA;Z*sXbVhxo<hDw1=p;SGOaNKTobmvYlYa4Gn zdry0NS9{Qvjf>3z7aQASuprv(|9q`N{R&d$d$;aH+zh*WF~r;5!`IX2te0PiU%<tH zpo@Wl=YxVmf`VeBBj1C{%*=Y3MI)yXgX|pj)WP8a2uv+xHah1ZnsZU5{kGJ}^z_p# zB*AG%-OGm(VMV=&+bCi;iFnN-5r6_pE#kUnv8V~wGY*GBtf{T8p^(WU2BnjccV^EH zyX_Vyt*ku`*q*Ypb+xr|IbeP4fVGQ_%@OMZhpepDuUe}}zXDbfq4)0Jz8e*O_hMjx zuZMSl_n8X;f#?0tT{?FTSX~MUPJ9-FDhfblW#we&P-;?30}onislcKJ$^pC9MdoWE zb5)U9XlDP<!*L11xqeW@%&HRzB|>4nP}Cq2Hi<>R2L&ZU9|2UOPzbEZ<(1^>8XAez z#AEfhQ}3N{wA#M?=$@ZXSs!q>wmxoi;OK$<2d%A~_w7Hl_h$#oy=x6uDVWuRhzC*O z4<0^v7;*cWpO4>Jzku@rL6-u9F9io*2oAn+^-_Au^Y@@~a&lkg*4CtFdf0p?Qxt%K zZjA;qUj_aAe#k>_K7t%Fm@j<fCFEy`1$<ytFBCQiMU5h%4Ags8Ah0H(5LgM>?3yxS zRaG^;rlwmW?CX;xpFOc>`*w$2yIrlU+^qH=v9fZq`q_T(KBt{l_B(g)+p%l)ij|6F z1$BKifQoz=1zq;2s0(M$20#D?p1TwhaxpmMa!AO-@UYAm8K|NFRBmowUOuHJ?S|zK zkTA%ZfUeX&QWPKpKZmZM`wDfzlk-A;rC1<<38In+1Pwq2B2F$UP?rz|)c{i<<TBWm zWyDHiC6`>?-P+jO+gfnVbFZ11-LBm(KmY8qZ=a*3rR^Te13P!^v)HrC!eWQTj@2tx zD3TSFs}Ju-J&1^meh~fe;girSR|5P4LxRp-K7amVNXYF=7gOS&&Vb6#%P+_;puM=g zf3b?J+(Cr|dXk0SdtJe&zaYq+9e?2$-V}04LOu@#C1)jz!A21ToqUQ=O6ZHiI=+y_ zV81CXt05949C}w*Yfn!{;mtGq%*+n#*zLT>(%Ev4-L73fTUc0{n_HR#C=0-~M&YcY zBBGu|KZ$)58~ZRWHX`a=K+yT1U|@CW!iC5i*RnE_<%)vh3qTbW#^(k(t@#jc@EKGD zT9OZ_S@zAFoqlL1uQW!$WeRybA)hY`KtABA7lBzp45G6M5_O12zObGnl(2;&mXJeb zmzI`Mh~=#k0hEMYU2QqP`0p?^-M8J`ai{rV^PM*47CX(&EzHejk0`4jzfkBp2)cS4 z^(gLPY}}(~i80TUp2lB0cRnNtqVK}xix(f?xtWul0ilP2f<Am<LP^xwv)?b5x8LP_ zKIjVlx7`b8zd3$@UHXX2uI6(%0xlPDiTJ!azKoSjLVyb;CKNaDL=9||RXtNs$K<mq ztg6>#A`Y#stpTdS&d#>P^FF4grhCoItt`x}%`CvXV3>axXRLRfaM-8F7=+$h?4ze~ z(eck?5|W-KrNpJ&zkcIF$b~BxE?vHSIW{6JH#hq|sG_`*jPQF7+rZUf1(a7S?*mUp zZ54vt-}w_e{XUaf4mBN5#!8N>j*o^R#2PwzqI!X-o-dMcMD=W;ge9z_^Tafsn9Sr; zsLf51mX;RS2k+=;y5oHuSnV;j*llKJVP+;nwS9+$xx3}gt9y3P;zPZ>PAifXw2YoT zd7Ah%G3jYy%CnTz__T!R=u06N0o0W%SDr=Q%g@i1@9dQ1CqM9V*sL=bKta%fM**mr zv>fc~$TAJ)O>YL{6?A&xPvElIfD6<G(h~FeGHHRmqqB}FlrRNiCOi=Us|J>!nZfM= zr3rXVO%3ucR-2ga?*L6K)19VfW~T6g4tsNpln`hB%dobr2P17%FE1|zvr34GONvDm zl^U0to{*lIn0ym3UA}Vd+O^mR;ROZxumx69Qu6w4$N@tP^a_B|%$#8b_0BV^9~i_q zCX)*99|oJv23+z;1XeI5TtOXIAmIqbOo5Qf71DVk22Vs~H&EF<eBnrQvqZ>;bs3}% zxcI~uP8Md{wrw*9P=L(TbhoKl;pNi<^^~E(y5T;-$Z)UXS;faDBtJ_`i%-i)%*ag5 z%*xDqd@l?@{qoB%Pa?yMiV6W#X=zr}(Y>F`Vhupe=n9_5GY2T8*%zGZ1=$>#r~niU zj!aqt4oA%8i8*{RlP_Vx1Y9C9gU_e1coe3P!fd6ph9&jG?d^3UA>_s~T#avHZtUE; z6<BTGCL?8P8hUvDTYgdh+x~(6{-MGC;lUvVvjTI7e;S`0o0JhR1N8#U%+sGe0Z_2> z`!M2ONl6jx|CSXdT;2Ko$`2WWTuuND+6eNo5kUqsuZ|2#`rGT91#F%i7U1G=<i;i9 z2}CTe7=%RU3TPYwjf;Y!bHo%@E1f;o*f`wPDHe&L-vGE8MU1<rkC<*n2WZQ5+qQFi zcM0=idwV+H_VxAmy&dcy7#bK<Fe~V9Cnct)C8TC1XJ)0nPdIZkQbVs_hl4Yb_rgkF z7nPM2l^5L(G+iTa`O0ld9)=%KAzSAoBSrV6(h;e2aJ0YYZA(Kvs7l6)%Z9yoE}O*@ zFt|b{UqI#ZY8e6wI5|rQ=qSu~CTFs>b+EG&l6R<~0T;V4^N7V(6BCndGF(TuZeu*Y z(cRV9)7{h8+xxcnJubzwN=;17NXf`d&&<h0Gjnv+dzF1Z^!BY=x5C3hON$H2%kzkt z{<dqNqks-z1=X=U4CSxD<91DCsOTOX<$~=M7-OS@V?C`cLR42=4i_ey%i}S)0y-Z& zN(@h^94>{)BGZL5b{msB-rO?O)dd@Ha$F^G4|W(E1FUT(CO|9fh+_x8va_SJyQ@ov zs}FDuyzN&!tMtUQmuZ<<8QHlnKIBnF1u^%-Z{NOsH!Q3;FN;Xb$h~^-n-4ur2tWV@ zbH><#m8mu|QVO~nLP5#K`1sI7e`lMJ%i{tj2t*#A#p6@CoLZ(p7KU<G0vfxK#-3<x z16J^DfD2j<Inme6jEw;l3{w-6yz6J%S|#o69bKJW-Cf<iJ-whVFfIkNf=uRR@{6qW ztXD5z<-e3==CW1qdCbGGu&_IK?&N1asmckzV*VxM<njT`{sk1gZmx?+D<Y)Qfsa^? zPfUzX4)k=2`9d%-I`locd^!hM@u)071R=?zv4sq-guxwdXd3D1LC?wX`G6}mBFNa- z*aW7D$sQ9EN_sT9#nT3xJdmSyc6D|2_MpM2cve|SFLE-na<lUaatewH(DVSzJT2}i zfVz7(G&3$ZGtgnz!jH4g57a*Tyn}#988HA#&I(Spz?hhrn4B1&f@qO6G;;Y|CbT|L zT!08fC1(Xsz~MW%yy3Q1@HZJQ&clmtTefW33cQSstxZh0C8^D@2(`4rMh}V$g0Zu^ zx1-0?Q=$14T&h>8FJHaL&dtg%$}cJ@LP3?4mAy!eyL<O;c=(N{R~^s%b+O?`Sbq2E z?q!Hnk}^6v@F4(Ypx~^=<mA-o<mAwhw6(d3!4l9pa#nmA8;Hp#yi!l+^oi?OEE<Z7 zQ+egM1F$mPvISV#Y%>v7<~21owE(YXz}4Q_-r3dO)!o+Z<)LU+`I)(SS^4?dg(Z2# zr9~(xIA8ZN`8gcsiHNvz*Kg;3&403{-(_|3$HmgVlF?Bqu=-6@Kx%AqYIq98H99of z*3!y^rH}`RP*KUG1y6vLh|XzdFd5`Zz{M&}cC|F$ym|9B;I(Co?RFDERdHiOV{=n8 z;A(4WYj1AvZ0hW4?eaS92}!TQ_Pn4<Ey&I<%qlE?Ra{!|x~v!lMI;il(~=@0BJSV6 z@;KNj<Xi0zC;NVv69T1l)`df((vFz`gy=&95XSiAlyq`*d>V8%{dRCr+)xjTpv<X& z7^n+Cf!Kf*znW6>rkFt^6~|uN_tQ_n%4G9q87pIcRZ+d9{ynaSmez*W_WJhD<_=GV zvnqU<TbPw!n)kY_=uLTXIk6O)lU1+MQ|{lt9~l|?I5LPB=6vc~9o+A8LSJ=The&Cu zqoYIrDk=a4|BO$KODD%hCdNmG-+?c4A#Ff$!4xrh07^cYRkZ~#Gf5StNw<7pBNYbV zf?;EB%&jbx)JYoZ8&F)0&8?Cam~Hhfo~Jz&sVi7kN?sMd&Mhh{C@n83C%z_DRaVv1 z)a1TMfiuZbQBjYgLP^9Y#N=~V_I>r&-@^qv6vW7*(h=dP6wMaomM#|+fSMYenvzbB zkD+sVY~tPE;7EN#-3O;a?F-gKItNxmdR6U<wDjVftQWU^H*ebXF)L1GJ|w6puDXWC zx~3*kQ?t0SNmTE7O3|!d=N7*yd{dTRT3%FMS%HEg)sXUErUR(xs3<tUT|>-bvtMyD zf64UR?(*3jX!LzZwa~5SWFIqW{i{)F*VyRTIG`FsT^(gLF*!9hH8Bj{K0Pr$EghSl z92uV)92^HxP?)HzQ&}^hfEBHh1iMAAGBQfzZ~bhtanlD}Ham>jRfQsvNRF!>a0we4 z1d>K^gMwK>OqAvoL-bV?mQ@s$SC`k2sz|k@+QO_Cz)E(|{ZUnE0hbH4Zkd1>D|q6O z<oLboQe-=VIO35vA$x{JY0}{)C~n52zp<JeML|uCOid3@PmWHHjZTb%$xA1u2Bp)T zT@5l;;8c(;paBTA4}(i3)}*GSW~HT7<R_dtyjRW&)Mc~VgiS7ld>+Lmu9JxCfmI`4 z(kPU8C{|a%sw}^xqPVQ`HL?0lRZV$KZB;F`mRekpEe8cB56cQ)$x}p;kR{?(^$T-5 z-`uLp4eF&tj`Wg7hI;@M8h|oZ6S8Dsd|-HLXli<N8s^0C`0(fid~r%TH9a&w4Rsxr ziGpJCP-B;+qe3RiDkUi;Jtg%`es;<of8$N>rFGbP7ne~EZvZWSpkCy|$p>*gUtGr% zD_&O>g{5T$ud7Qc02H|rPKVagYG@Uu#g8660#GqAF~wOK0s$W`tE>+o8SL*L91sr= za)$>SMuvt*hDSz0RHLKs0}xn2_)UyX4UA6@Pfm|aj|@r&hek%F6YoB-f<y}_q1iiw zD`xZ2$>dXs<fP~5k%@wr>EztUE|w-BEf^uLP8<#-{b>0k<O@Z7k(ev2;|e7_k%C!u zcXty}QB_vIt|C{E$rTh@HH}ftpc08Ok5Eu>k4#Q#qDaU^4++=7mOii=7#bXe_7Mtd zXjm3~AS$Sr$0o)mAo|b%9G)8QpP1;Ic-KGmZus4=(qG>VPW?JGiR!AS3s|9Mg(eJa zA)OE1Q4yU_tsp1HJ%<DBS*fYjr8zO@oHuPmr4@TS02Vv6w*$Dius0?ULMsed@kI(= z2YY&Ys*202N{FP=8cKO>ZFw!DhQX+Y4nS=JV2XJPw>70F#)<e$pae-yLqj8gf;ln_ zlu$*DO2Mf{$HCY~#wVoXlTygir_cZ#o*wTTo9G*x8kqQX_}9OUy!#dGYiR6UZ})pv zbhdyF4$tP-vIP_lrGotY+4IEbiK)rSuU};mUqqfT+vs4nr93AFn$q&}hs%Z{oDZx- zY=M{~P%x{Zp`qHcYDy`IQAwp&(pV%GpTg%+`68AeJ0&&YS;F(@&$Ck#8|%1eJq87A zYa2>Q7I)xLC?eVNH#t5r3D!L_iTb&8`knOMyFr-K?|@tX#IHkBa#rt#$KUn!HZxIC z0Vvtz3TZr;q|)m6nE2;#ATBX6CncF!l9L_f|1#8*R$EM`(@|V3=<slPY_wk?WN}3- zo`Pc#?mpvjdC5u1iO-)W#Kk|0eHQmDE+HWS-f%?Njo{#5xbZ47^xDge<m~M1S2?d> z^3h#Cfe5x3L}H1!t^qRY`i7>4#uhjk3p`s}J7nc8+CS;;2HnC5*gj}x_V>fhZUY1T zgKyhKY&efbW5|YlBLkugMsa?z{OY79B^705RF@}{NjVe>S^mvT29rf+!<H+L!QnGt zY2YeYSMp*CQsO6%pF~F7zZ-Tp^cFO(ZbL)n*0qbC?(S!OJi~8Zj*fnS`uvla*r%~% z5(y5y!vQ=7oz9Y7ZZ7QCaCt(3P$ZNs>u{tW=ry8S44_76`=HH~4%i-*(d%vzu&87* zdUgnoTEWRQ6da8P;(<|9Rg<2c4i_#bC8_dFK8aK*|27(x#-K4^--AtOb7?FYF0O)g zHB)%PO_w>@*$<<l??>FfclVyGd3F18fY0rVfsqkmXafJ}5%2^DBh}Q@lF3vGg-)X} z(G#954vWp>as{xg!_fs<&s+jMbErpTtUzgUT=LdaPfu5~m=CZ30*o0}a$KM_cv4(Y zke`uU`KGYCnn)s{_ig}H8ktJ3WzeZiHU%<Q7D($;v64fBX7A%ij~_-qgaQZp46vUQ ze&=Rn<bC-KnD8Z#R&`Ys;QD82u~2EjI>nbafzf&d-C~fP?f+O>fUCQ^tEatDKqvh> zX>k~gRuQL7!mF+>ud0&Y6GTF<P7UCq(I|8#iN>m>aj1+>%L<6S?RyK`UXU$7E_(ky zG#kR9hz3^C(b10{K6>)xNhOh3Q(X;_SW8AD@qbAR5^OOf*yy4Ok=TSr;=f3%ySu%u zflnp<4lW^`-cc_Y>T8oq`-g`IAyt4vzNWf{Tty~Vl1WwMS~7(}qB6;Vi~dRcY9<op zPaq!QqQlLhKnxH8D721#5CwXZvyw{-t~CWcIgCakiwPUesB58-D0eN87TA7cBj7^U zP`DvN=325y?C9xiZUT${$hE-l8@Tk|X7O-e`^ZSYR5~o*>45*7R86WO){rVlP*aer z$+YTPzy<pnpIlcn+~BW+EE<RbAJABI6i|x>%OX}(R8>~Wr8N_Y44HB9I9xOm!Q}s! zv}Phv?pod59X%aQ?R7i>t(IF`D`rsI#N5G-#-aYM;o<%fC<aDg`wZO`g5Jg3-nR@2 zqq@ABR8FEmWl>3{*MPbxe;if-4c;oW-ywfMi9LP-F$k7bURDOUKw1zQGbT@`(OC?p z%;b5p+6@*&G|!j!=$d54_0Q6RH4!$j+Il-0d)g&$I~xc3ItB*%1_uWq<r^MGS$&KP zT0M3Ax|*^YGN=oVl~$7IHMM_)7@U!o{0W!_lpc^JLc;I_N@=*ax4ax&3vkW27O;{V z7px95TURr#HDmH}Tpy$*&%V0)`nuk}?U5&7gM)*=%Sztx>Fw&Nt*j+iRFf*IsZ}He z_mKYu%fI{A!GXct?A+AkRJecqO=+o2TEr?ML?YVk`pvcE(t@o(9^?;bTR<X~)YqZ; z!@n{4_sJ^UqC3OtV_Xo1Xe54UVvLWDL;1;Pacjz}$i(UZUw^oc3cfS$-y!<=_34Re z3W<`QmR1V4jhDVDFDoZj5NoQycF_fqN<mXoR9Y<9h=Ki6o`A=P++Hjc$rr?r)2$hk z|2VP#54eEU=m=Vy11p$Np?9>jQL0GsF>$cS{sCE`-2VQLj<$9(iHyn#%!)*&K-xf| zLI9%P4&4AYx+Bl$@&#b<PzMR+Z5%XzK&1s4#D`=af^jCFp9#qsbn>zY=%D~Xad0-~ z?Z5!^H~I$$`v>6>W^Z?ITSF`O*dLS?;QGfO^ndp9aR?}%D+wqGC<!PDC<!PDC<!PD kC<!PDC<!PDC<!PDC<!PDC<!PDC<!PDC<*-k5I~Us2Q%w<e*gdg diff --git a/src/windows/identity/ui/images/logo_shade.bmp b/src/windows/identity/ui/images/logo_shade.bmp deleted file mode 100644 index 2e36b9bf2016cf725357f87b9b43dcc9344137b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30056 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 diff --git a/src/windows/identity/ui/images/main_app.ico b/src/windows/identity/ui/images/main_app.ico deleted file mode 100644 index 8dcb29e7a66f097ad2f67b181bb352fb2421d3d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25214 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 Nl|lr5Zx?I${{ZwxG8zB? diff --git a/src/windows/identity/ui/images/tb-blank-small.bmp b/src/windows/identity/ui/images/tb-blank-small.bmp deleted file mode 100644 index 0718d128bfc245c72044f42207c68ab69361dc78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 scmZ?rWn*Rl12Z700mK48%n!tj3=%++f#CuZm_i}0kAl$<7)Bug0HIx8&j0`b diff --git a/src/windows/identity/ui/images/tb-blank.bmp b/src/windows/identity/ui/images/tb-blank.bmp deleted file mode 100644 index 01adca9e3d8b78b4beea0a9f9d29954b36234989..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2430 zcmZ?rt>a_>12Z700mQOEEDgkr3=%++fx!bR59W*#qaiRF0;3@?8UmvsFd71*Aut*O H6omi)zup2D diff --git a/src/windows/identity/ui/images/tb-space.bmp b/src/windows/identity/ui/images/tb-space.bmp deleted file mode 100644 index d85cc5cd745cc44f4ace1de38f2552bf93294a7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2430 zcmZ?rt>a_>12Z700mQOEEDgkr3=%++fx!bR59UCL>$Cw3v@!PjsJW1U9Sw)ka6ryt aqv>HZJ&dLY<PaE556Gc0T0YP?JpcfUxVK9H diff --git a/src/windows/identity/ui/images/tk-delete-dis-sm.bmp b/src/windows/identity/ui/images/tk-delete-dis-sm.bmp deleted file mode 100644 index 00adcf44365825b43f9c3dc27c2b4cbd7d07b7e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmd^6yJ`Ya5Z#bI$tR@r3(^P{K|#c|P*m(>Q4m+f!cM^liXbYA7K<+gABbq77Jh(R zh@e;~{z=-Coe5bq7O7HY;M~2#>^W!d%)9vUC~&-Kr$NJuhGz{A!mD<Eh5952gzvaq zF8C{Kw_9CXRaNZwdp-Znvrs6&@AqT5Tw=4?AQFi%4u`{y#_4pz@p#m6KA%Adg+j<= zG6;vme9z@_%-`*HH~f4)k3=E?S(YJ55>lxY*GbcCHY1zOg18oo1<`2qhD&d#)oP$# zsTK$X;C8!_PN&(+;czgQ`tW!>2nK_9{ARPs9+Sxg?RFd0YLz*5yPdx_n++zDi8Z}m zFVEt7c8a2)TrOk1USm3)qSx!8Uazyi)oSIQTrL-kMkAa~=beA2(?O%rz-qMu^+5be zrGjFyh-5N}SS$vg&j(Qy_1Rqe_xpX`>wG@PU@$;D9>;7p!*Dp{_fk&prv1@euDNul k{gOtv+eNF@!eX(|{~3)&D3waw3+-t<9_zKAI{!8Q1Q|N-3IG5A diff --git a/src/windows/identity/ui/images/tk-delete-dis.bmp b/src/windows/identity/ui/images/tk-delete-dis.bmp deleted file mode 100644 index 844fb23a647397b2a5c3bbe22814dbdc881366fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3186 zcmeHJM@yqo6wU01`2)kiY}66mh!{kygNo6_-WxWsw<K1?3W61^Sh0els3;<eh#~{l zg<Wvx&Ru@OnVdU(!TF+s;4qtf@bdCq-n-}CbI-lWPlNHZMjoy8^M`ePv#zh!^-1&H z`uXSi^+luMQl9(!dpOqnIJmpJ`zM?&EiEA{D+_A>mzS5&>-A`8X!uavm6a9fbUG9l z7b7(_6}Pvy;{W2}0ud1rFdB`>$jCrbQ`3jw9vvOQ$HxaPEiGtmZAEEmDH0PCaejV| z@bGZKqn*po&kuWhdmn;ZRaJ$|%uMmC;Cgs?z+^JnY>cC~xA#pv#u*e8gyiI8i90?% z9<i~ph>ng%U|^u#-P+n(IjiLKd=Ci;fmW-vyQA*KlamwV=H_B{b{6B~;}{$qL{Co- z+S}WuHbX;0c0OEPU8SCCJWo$giC>MOekW#rem)i#7cn|Iih+Rvba!_PCbi(}>nm~G z+}vP)e_wKRa&iLmeU8cc(jE{HU>D;{nABl&bF*kKJw09gl4J6lkdPoegoTA6G&B_M z?(To#6&4oSu*=HI1o!Id>P=kcSzcZ)d6CoA)m1DkEMR(iTJrAi??+cx7aAKILA}(~ z)!8suZ#OqL7z_rRjlQCyqQHJt=cl|AlYK=#$?MkE7S`6*gzK4^8H|mMiJiFq{{B$% zqV6IiBaxGnBmA>($#s2wJ*cI#v$HobtE;QUFa5J-+uPe%Utb4j&fMG_CMG68Es+P- z%iG%<X=!N^E9=6!<m~J$SS~IuI6gjp6_2?xPsTPfG9rAk_YV#Zu(Pv+jg1W~FE3+$ zejbyPlNcTzmfj;ToDICk-Yh66fR~pSf`fx!>@S5=WhW+UH8nLQb>tkQ?eOprySuyC z+}s3bUPniVU^2G8zCLtzcA~AVP3CK5Wu?q0>YrLue80BSKkGn@l9CdcrHnf-FAv$- z*`ig>Q1)w4QIXV;`lWByjdf+6Ie(}h&cWBP6gx5L&tkFQ>FEiNkB@kGc)<1bwd6?s zD`&Z%o}P+-_55HjvuF9+^8EZu-#PnYVq#!6n?(~96%`;3bB>FPlNqkQS5s3X8cIn? eK~hqZ^f1rT5Bo%Y-tqpv{~->(9DMyx4g3ZJvzf5~ diff --git a/src/windows/identity/ui/images/tk-delete-sm.bmp b/src/windows/identity/ui/images/tk-delete-sm.bmp deleted file mode 100644 index b9b604f83b136f3049c22941ea0e26fd4b99cbf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcmb7?FKog<6vkQS5X<C(m?X;t0#Sjem_U#WS%H{9R3MNQ6BQK`h>8jXqN1YWM8$~{ zCr+F|R3IU#Kp;+3R7^}vkbV6Vl2x$o%j>0g?|0w5-s{V&e%mRfV|>DMUq3gUhjP7B z=c`FI&i|?9Vqx2Mnx^Ng0syRnDWzB0Iw^#}7T0w-=U*+f+wA~*s}=aHg_0xzyk4)t zpIT_U-2x870EO*aNJ<Gfj$`ns?N0$CgfPZzhxLp|>lZN`b4n8&T?w8Sp=`kKF4qQu zG2y;1%{Q(MH$6ROOd{J5U>pJG(U>8%3B;Wq4W`&0E|y3#^razO5zIYL`abRI0pKkA z9+`4x;j>~wBE&^l!L4Y|(cDVAdN`O0!06?pA#8VFHbiAv9ZIQVsmWa82*7z>^xauy ua1f$+Zz#`mn4C_ZMa_L`%n~>Qc0SaVzvFN?D0Ox{Wm-oBAr04GQ@}rQVK*-T diff --git a/src/windows/identity/ui/images/tk-delete.bmp b/src/windows/identity/ui/images/tk-delete.bmp deleted file mode 100644 index 01515992940e7b993d0ac3899e93d7075482f8ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2430 zcmcJQZA?>F7{|{(EQ`r9mwi#UOlDALqmdAkxy=zb=O&13&a6~mvx2Cb&N*=c>cF5? zH;_P31X>&v9IX{BrCOC<-m11LYwZgyE!4H+<(5*Eg1p|gw|j02=w0>!lljm8oSvSZ z^SjS^&ON8=VlwBTfZl_88I-r7yanYYG#_e&BH{PjuLVn>1FH5HqZiNJ_D#aK3GqS4 zZ)L@?VrOF*IWr3gGYNPaZ*o#1I3aH9mob}wcqBc2Hr~JQhc7lovzT88r$Zgg>l9Zm zuiyLqcZqEFR#vQDulGNXdU|>i;^Q|)MMAv0l9OrN1`JF2X+J<Qx%_#UQ)8`G>*CPR z&p%tAw4F`kHa9h;r=>nns|N-K#_1ZIok|J|nOn9bZr@JhDin%inHhIgN*u?B0vaA3 z4mP^GyQ!#1Kk4<3x*xl6e87Q2?ZolEX*(T`oZn8z$FX+r+DYRom3K~`<lIuU*zI<g z%LP$`paHU2EELyAk{)8>iM!{awaePsWwqKnJ8jmWtv0JQE8}P)dmC&cjeGCz-P|)d z4RU#h#nRi`3sHlh0aB~gQ(P}e5)-a&TZdj}*6G@HI+IRk)N0%HI=iL);DP<Slamkq ze2~U%ZEZbww&1$#TARUOv)LeO5Hvt7EiF_U0P6KYDkg^pI<=ZVl}fcrsa7f<w&~oC zF7N2j?wvdK?cI~{%TXFvqtWoVTuE&$L}xaeVeK=LN~Kd=kB{_tCf)toJGT`Wrl_y) zP~Rh-3_^bVBpJtI9ZX5#a5yxsPN%KlmtPiLQmK^i{(=nC5(oqo*8}<Wl9S`TW<x_= zUA;uoabHOcKY~sl;e}m|iH<s)o|>DJP2<AyFN;Kis;XNG1%&*pcsyQ!>mv#8m<zvs zRVuC$G}c}jb#{@2$45ZF54dY1B93Kd7M?pt<C;vSI*Fu$&&M!KrBa<gPx;CfXsYt^ z@+dCh^NbGRCXKkf{9*~OQCv+7J@OM?co-PCtHQ%iaX6(sE{$ukm~Y;=akhZ_>E>z_ zB1B6oDTfM{d>~uDzI2K^;#Ss*%JTC|^Yd;BD?G!G{gVOiB*k448hR!>`(kA!oolvS zl{PJ0!$qq~UR@^qDDrwF^Tzz}8WhGuZ<Z>RPCu-7g3#7W__;Ynr%ya+kdotL{s}6% z<OIcCFmGN#etxw`MCV#M!#|dxu%boFg<^5NT#m^xEbT}$VwA&^&^t0`_aoqXh6nMs z`wv^2iNStyoFK<NzDcid!UNnnb6zPfF1jj}(zsZI4Xr49Jv95mg{o`UWHQ<Hw4*A- z_yaL6eYl|w&`EoYFqv{t&$a_SaPta<!sf<C8n=LJhRG2T$NBsUu~_os0V!fsAcm;4 z?1|0hMhw9li;CIo9ZV)GCZOnmqN1WUObfVhTpwsOH14kjCg84KoeCF4c5XLf@DZcB ztYVCWx7Oo9OC@MQOMidA)7jV8=a{j>fzO!9WEzcaaGGe`g5tk`yZGG`?4(K{2A~tc z6%P*j;cM7B^Hc`@>jTbFER*@S-43R4HJU!OqVna17ZD=|F^W<TYfUB?V1YYpXNnFU z8U59LqtO^VgL=I#XoG<|mKY{yv0`g#Y8(O4xNwnfjHmVo=xf*IW@T}*j-LXrd_NO~ z70z8=dMK5Xk&$^gptQ8KLv+DudOR%}7Z!)(qbol#Q0NeO#AZW8jAh}P78Le73c<MC zG0^BNG%_;sZ!YYQ%jG?G(mi*@9kjHLa!AwKO+9M0&pSH-Aqa)~>Hqvp*Z<N${{UDh B#o_<} diff --git a/src/windows/identity/ui/images/tk-dis-sm.bmp b/src/windows/identity/ui/images/tk-dis-sm.bmp deleted file mode 100644 index 9100d9a9c7a568a03c58ff4b5590dc4eb8c89660..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmd^*yJ`Ya6h$YbPx1*V)7g!U2&S>p&O!tWQ4oA!F`}X%iXw=LqJ{WE@PUXHYT*y0 z6$BOkB<;%F33DNu9|$?H&$*AY@7?>nyFMQkBUC-V>3Grctm8p>)$@0JJSmER8Q1HT zzl`(w%<*`XxLhvM&*^lM=b}gS-g+&SN@$u!BoZMI2$0L=WRKtP$7Zuhh`w8Xv)QCv zE)$Ez2nK_AJRb7-JgHO)yWNhes#q)*W1UW?@A#cgheDyiVzHp#@6%{BC>Dz(lS#ti zFg~9Tr_+hmYUMY6x7(#wtFhnjSuU51Mk89S7Q&a%Abbf;4u^wGCUf`yU@)NFZnN9% z3=M)`uh*$mDrB=+;_*0MuNSx5{bM%f9LD1@hr@yOdd*}qA(2S1TCJE)r-VWwV=rnn r8a3u(^31y3ZV_(`heLY39-GZZYMjkxRI61(i|{j_&*h!T|L^q+$4mON diff --git a/src/windows/identity/ui/images/tk-dis.bmp b/src/windows/identity/ui/images/tk-dis.bmp deleted file mode 100644 index 558ba9064477a7038033d8ba7df65075db495d3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3186 zcmeHI$x35U5KZr!{(+{U7cR2Ug$o-Lafq`fCTg4q)Ci75jiQM-$9cpNN7N`Nii#ql zxQIxDC@usA!JRvIe!}UTYSO%P9%!$6lMD6U<-U9CRGm6?pUz<Wtda4<^VE9mo5#L- z?33oZ=lOg5{G!p&yyNNV2>}am5YWK;8o0Z=Lu_m;^78VKlam9p*^JE0Oqfh2#Kgp? z_EASi2O=XQ5gi@vXDKNus%Mn7xVgE3#bSZW<-+pvGG=FIF+M(yfq?-O7Z+o0ZqCmK zvC`Aik(88#`1p7qWBf}0YI9;%R#swXX9tUmi<p_2!PwZCV0LwNNj{9@@$nIEw;LrT zC5VfQLq<jhQd3g}k1^<UI+=eIv$nPt-QC?tOG`shQIYUWj>&I!cDC@4oSZD*i5VUq zj<B#WgocJ9BqRh{trkH+LH~qVUtceIk<){N18i?^V|{&H@}8ca#^~rM`uh67I<~a5 zfcvYes!&!|hJu0uiH*1k2??SNH9nPV<kn`h37_Qk^z;;mhlj%T#>NJgmX`kT-QVAj z&dyG>wzi_7p#jy^)hI777hZycgJCcjgkz<DwK*{vJMrkBH9I>y!_m<Zc6WENxw(mz zl@-y_#KZ&!2M47N4u?ZxWnD^3OND3Zo|;m_QLYiQt*s3U3k$;M_4PF_FE4R^evaeg zW9;qiVQXs(tE;P+pP$F%<RpfMhS1Z~Bj=i$nuKT8m$gnzO#Bcg`C40BlRDnt--B^n zU0vbg;sPfpC)nTL$MEp5U^2F;sVR(%jKJx1qP@Kxjg5_nh=>sVQ)|kc)aLZx+uJJ` zb#-+hSJX#EMTKaDakEd^uQfF_(wAJLZ?9&eqN3zJp|;pRYB<U@V$$E++Z$eAU-9zt zg6HRFJUl!|j#jJH$H(pMt@!`@{$MZL?RMz(dY}DDEbp9mAN#wxxmh$pJrajGXJuu9 t-@SXiZ|b(Nun_tA`N+-9l^*6^`Y{@fe*3-W0`K?#MFEZi9Q|(%`~nsFzajtt diff --git a/src/windows/identity/ui/images/tk-new-dis-sm.bmp b/src/windows/identity/ui/images/tk-new-dis-sm.bmp deleted file mode 100644 index d2e1fcdc4eb0abcbfd3a0c2e22e1cf91ef18b7bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmdT?J8J?#5WbK;$xldmom~_W3q`DgSO``Yq9Q&(!51iqPY^@|72hHVDx%;6w6Y7> zC<-e6leAxMH|*gVFh!~id^@|d^L;xrcbfOlM~>Q?u<`<41Uw6P;9iCG+diH+j)2+a za>0Mb>2$*3a1e1mpT&NT$D<f0IVAVC*K|6KKp+6O+YPJLidZZr=2$Eis8lKuB=44A zEEbW;WZ?CBVYAs_GMNyM#}N*Pp;oKG^E_lS8Qn)BksthWxr{_2f#Gn7X0wTCG>T+0 ziC{1Yr_%|gQVG3Y54l`UW6R}IqEV~Wkk99_TCFe|jcEO(2GU0;6r%5vvqGVOR;$H! zyOr=;trkk95*CXEt)bKDAe+rXr_;f1w<DEG!C)}ZI<9BK=FshSvD@u1nM}~@_2BdQ zFdmOlC=@W8%|OiIaKPj7(77-k^Yi%}M5EnqqtR$k4$(84&2)zKdL2fik!tk&eM#+1 z<JwQBQ~3RUY&IM0_j|ZpF3PD?D#+z>zw!rzfh31~52n9fuTia5#WRcF^W@*ScmLPB EFWo=ve*gdg diff --git a/src/windows/identity/ui/images/tk-new-dis.bmp b/src/windows/identity/ui/images/tk-new-dis.bmp deleted file mode 100644 index c6abc4ec57366faa57c41b232866c822a41de8d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3186 zcmeHIM@ytZ5S_g*dlE0}f}-Gn8Dv2*jydOms2EXHRLqJABSypkhJ&I9MNu(ez=I+q zVnD<Qdh+JYpYV2GEhC@1GdsiT(T4uMp0B&>RlQeLqlv2cs*>?j_f+fV58eE(n_pDc zy65kq{iafJ>c{>4JwE3r2cJ1$ItR|r&*AUykJQvuBqt{$F)<PG@$ra_jfJ0|pTRn6 zYHEU)mlu3}egB$aVPOXED782_IYDl2E@o$EF*P-X(a}*13=E*Fs|y(!85kQI`^yHg zqNAe`5)y*Iz`!??{wwVpS`)LNpa2UC3z(Rgz{to5`uqC@v!$g);-McmH#gYd-$!O< zCISKi1jpOkTi*0RqtVFPT+HI)VzjolA|fIJ>FMdhGdU)|Nl8h<LuhEI>=V<&!vl79 zb~2ruoS;^#WzCq)#Vji;leoy~%E}7n=jSmqGb3>i4-ccSuMZs^9iWaiH8tRQ^2+$q z($d5?;syl;y<%QnT^Z$=+*VXn2%qG2YikRutE<8_<ENe8-d@@7?CeByb2DmdYY`b4 zDfV-6a)cL0M@K|OMTsAId3mU>um2||eJ9@J<fLe}v$KP>wKXg*F3Mf<n4h1I!NEav zcXx{padB~iNx!nPvf$?CCVE;}SYUj7+$bJ%ig7kHG{`yfd3=0~gM$O??(SlJeH}|n zOTw{_j}Kg2Tu@R{B05leS65e5R#r-l+1S{?*49?yG?c5#Z^R^D)6>(U<K^Y0_;Gl6 zh`qf%Y;JC1d3hN<Jv|_2mX?;ncT7x-#7tkTtgJw8ng7f+rF}zdVz#xlff$T|Too1; ziv8^DYy<}fOP#V_i;9Zi?(Pn)Rtx=je0+q1gM-A%+zJm5Hw%;YUS3}C{QQikrzbo- zJmC8JT4F3MEq!C7v9S>w8yk8^(SY^DTCS_BliV^CoAMibAM>HAs!H;=yu2L5Vay2$ z3E;l|Jo^SYWd3e%Z-cqU{Is{X2YVjvkaPX{_r6)5*4EabPjho~uf2%5&3bWmb{5^= zi^Kb8XJ^uXQc_ZIdV2aA18cgvy889^(b19A3iI(jxQxNm(^GQ#Pdn_D)KK~T?(R-B zV*giaqC8`2&HtK<i;FjQ^>?UgdwaXVJ?hTB%RJPd|A;qxFnf|QTer8jM)!=}G4*|D XXh{07sdFE>Prd$Evyb${TwA{Y*~5!3 diff --git a/src/windows/identity/ui/images/tk-new-sm.bmp b/src/windows/identity/ui/images/tk-new-sm.bmp deleted file mode 100644 index 1868eb4c99fb43390fed0f469e484ddca58f8253..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcma))A#8&{6o$LZlLa+3xh#_t6_XQlvlSDFii(Pf3Pi<;2}H$21)>5`fjCitKp;*a zP9RR4XcGhifj}S-h$mk50?n2Y*6@XUdH4RG%e}jMd7EBOTBZ~qXxyB~)#SFVPtJNb z>Eh{hnp@WRZ`rbQ-Si?#DaUchYuhWv);NNys#-Jiyj?R6#@J@F+3)xC?-<DJZnxa` zi=xQ$yo;3l2bn$3I~)!dd;Jy3%sCIkKx<7W@Dsa)Dm^&&!!V4ZNJ{x7w2%oU7YKqN zj>X*9w$RV2T&nb4>UE?<3$4?G%1M&UqRL3|v1!bvF#zpE(>jBY`7=tNL}^ywATmS~ z;6)u>pV}h)9@LjD>U#-hjSEBz(LkI5@~j|<==GarSy`5rY>Xq)PVUGL7{l=6006q6 jx~@NBSf%iq;-bWP0bWkZ0OTa-J$G7=W7gn+?{DcFYfM`k diff --git a/src/windows/identity/ui/images/tk-new.bmp b/src/windows/identity/ui/images/tk-new.bmp deleted file mode 100644 index 36f32eccafcea3d46d20b471acef49e5a6570c50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2430 zcmcgtA&je76zzVu2*ilVW;R=~;%8GaVnjv77bBX@Pqw0>0)eQgs2DM#qM~9%#Rx=2 z1p<MnKp+qmhzhbnAP@*Pc>;lW0)aq0@x;v@%1qnO&Ln@b**&?uz=L-<_q@yH{*Tp< zog?}ff5Y($j-PS-(D?~tr}I1R|EV^|aRS3%{|){ZUR~Fk&?b`)g!ZyZ*Y#8KXT8%S zG))_gMh_43<#z)L#^Z6bd^Vjn)MwuLe2#l~C`l6f2&$@rhT(7sy|dY@&HMQHsB4;O znjhhOdA2OeUaxn5e-CAC-sNJk-|x$^5Z?l8z6Y-3j7Ot4cvq{H=XsoS<aLQW&rcbM zsw_A!Imd`N0q3@5!RI%8Sg+Tf=Yj>25e;y{7<=KB61+Uia>km-GIop%*lsquHo=Cs zeJ~8ebzQKWR5T}16rJ>v6h)q~BtfJXk+bx9y`Jj&VzFrRZnqo9andxY-+qC^;c(_9 zl2yUtI1a-mvNWl9jzm_=B}{;sZC+HuZnwh{NWKJ2fAs;Z61;I31ip`8aU`n}lXw6Q z05G%7Yuh$>!!ShsHt_3o6HL~;SX+nSX>#y9-*Z_M9!Zb$L@)uBy4h^nyf9(6vx6Xj zWMF>aw~+|q<fWpIyrSR%Hg~r>crKi-l{W7qnoP#a<q{9Kd6BPa?|k2fWIIZfkd%Zp z#<8D`UYN+!*tINsYaUz&hP)<G-^cd`b1lni^Mdh<8G^2#Rkul|RD>Ak#Z|~Y6V0Ja zRH5fshG80p@7QM(Aem?|=&zriU|O3O`#v=6T4qUVo~uHrL}OOJ;Hshn77H2suJ!!9 zT|dPKkA%QXEg2)xZLfz-L#4KPk^bDYm4K;2s#0EYJ{01vD8YV{mAtI59vXQXWl<o@ zqNcmx{k7YLWBa|=<~4%sI+QAx5PMx!(@Ho(421Z?vO!*`1ug4z-^I<%jcr@l_BOAw zA;pIS1c7%_W<pj(Yay<PRCpcGr?2#B6rwwSeFgTa0VY&MLEA!Iwt25@uDF%TXn>*- zG9W^XWbFyWg17He2t(chiVQoC530?ZX1Q)UeJ}2E>Pngs^@y&IVv)q6c-H~kz-Ny< zK#I22=0yYBM!Dh=N@5!4(5Rv?vO-O2e;$&e`3V0xLZ+^3sNALnwt3OKbx*+Mu2<bz zff|q+lIo?387Ve>HZx?}08Og}l)<U@w|ViGuu@?$!Adbs1h^E7j8sOYFjC>?-~L73 ixoSu;p8uP;K(}g;p#ZitwCeu#A-v6dn*H}DoxcH%=obnA diff --git a/src/windows/identity/ui/images/tk-refresh-dis-sm.bmp b/src/windows/identity/ui/images/tk-refresh-dis-sm.bmp deleted file mode 100644 index 2745af15100cfbfccc2099a25c12c08c1fccd889..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmd5)OUof(6gJI%W`4pfKYjpNnvE<(Aq&^!vOp=K+;3kJN=R}`xg??7QWi>$g@v*p z|75n$IA>!2O-;?I=Y8LL&w0-CyyyL){PkJDA%3iH4}5#z>jR$z-yiFr`1wU3AUxxK zzvEvZ9*^U6I{h`b*=&ZvV8CLrfW=~gUayDMYDF@c#O-!_@m{Z2TrQUv=x#orBNPfD zl}f>8v%%$Z!DKSQ@At#uaKLW2zv{EuECPW5+-^7LMx#*>27>{*-7cSnLLtOrF=R3s z^OBxIp}-vFavAUM@9=uP%&XJsxZh^8LA%|C$K!!WB!W~bMKBnIMxz0F%jI%hU#rzv z=Xg9utJUIuYPA}2xtu}y5{U!~g@WIKv{fn<(EHNd8jS{u#Ui%bEhdu*_f)A=I2;b_ z)#-FXsZ{cLx7%U8UL&1OW53^XJ!z~~t5~g8APwZ1yeyYXzK_LXFdB`>=kr{9JRT7a zhxv~B_j)~?&u7eLGxYm?_<TN0r&B~C5%ylM*HJ2!Si4rMWsXcH^Qxyl#L?+=&}=q& j-p~Iy91cPK6Nv<9PNUI?XGA`pIUn8WzkIajf6o66A1T;2 diff --git a/src/windows/identity/ui/images/tk-refresh-dis.bmp b/src/windows/identity/ui/images/tk-refresh-dis.bmp deleted file mode 100644 index 45f8099b9279359191b82f0bfb504313e66214aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3186 zcmeHJM@waC6m<5(^hy*1ilUek=B!8?+A&AWIR{h}MT{6*K`@{#V#JIYQEXIHYy?Fy zqPTI_JAXorb%yuwwX>S0XEAu;d)NEE@18oRs?K@({#o|Bnp}=ApC&I$_ho6ntl!l1 zUq1i7j{Z<n<5FCAcXxPSsvOMC&7r-${XgX;E-nswdU}|hoqdCQbaVvfbbNgLX76XT zGdDL!K|ujbO--@4w}<odb0j7v!rIyzHa0eJc6Nr9m6hxl6&2z1^z^6j=jZ3)>+6e} zni}Nf<iNth0?Z*aG!*&y`SM+6W+u|o(vXyt1RozC7#ka7ZEfve<1!9&Z*FczLqh|y zv$IiAQGxREas&qlOO1Yhen?MGSK`OV$HU0T2pbz4D!8nlIZ>;am>5JwMIj<00%2ic z@b>mrp0%~LMNdx;y1Tp4+1ZJ<wl<0V;ll@*n3%xH$w_M0)YO#snIG#<PEHoyudc3? zu})4-kdcvriHQje4-ccSuTSE(wzdjK{r&w|TwFv*NC>`s`GSFg0rd9vD)Gs&y}dnH zBbS$#muOmCTr4~!BqYGl&`@G1yhKduLoW^u4N1JNt}YO>zP=vr?(XpS_eV=h3nnKg zF*Y`ak&zK4KF?}sXu!qAMKH-3{p;Z108dX(1O^6TcXt<CTU#o1(u>sS)2C13L-I_H z$!~OYw0L1<Wd#ch3;6u`GqSR>;O6EAeSLjsX=y=6M@N>TPM+i6%!7V5Ffb6lU)Nbu zQX+LxtEHtS%*@P4J*>O3vJ&d*>e3JNDZLmF5CHmv9*vBQgq@w8V6%6*PaT*S>tIYi zkB*M2)LB+m269B5Ha9o1yu2)2kB^Vb+^MUpLrO}D^hRuKtaz)mv=n)Hc}Pu7g|4nH zs;jFpJw2_$KXa!3^xyUMwF)L{As#)#UMKgftE*s764%kuQS#=j;hb@Gb(Lr4N?oW0 zai^xH#4FTOf#1>5AzUbU<((d4pAQZW3ZLJ;eZ&6#KDM{FrJtz{dxtq)US7)VAs1$5 zW(W@tms-g$eZ+IzTVG!X^{3zITl(%tOmauQspG}Ph2(K?aDbhi9qDK0O@4U4zrV-r z?JdsE&LmfQnwYHd@bFMP{q^ft$(i`<qnn$XH<(RLO&~^LVWDu9o0|*89Q*k3qx32J z#?sOf%#XN_kB>@x)=xa1)z;QVZEdYQv$r^BUe~DLmc97={EYA4zvJoY2@eks;N0NM zVs9(n;dhOVjWT!0D`y`y_3-czU(;vox1gXP;f;MyKPcW;+&TMRzfV6Bhc%P4fBJ2x ws;ZJb_8{jzb>vyb;mjxRoF&xbM_v`Uzv50!*-O77_Ipg#|E1pf`2X_p7kq&=RR910 diff --git a/src/windows/identity/ui/images/tk-refresh-sm.bmp b/src/windows/identity/ui/images/tk-refresh-sm.bmp deleted file mode 100644 index cfee8f71b7a9e6d9db3697f8a09e9f63cbd120ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcma))p>Kmg6vn&EO^{`xS&$QC=^s!rF)_Jh6%`c~6%`eTiU~wT1p<LMQGr05IB^1j zIDtSQ5GN`sCTN00R8&+{AP~#G^+>a|S;sH$9=UfP?>@MDdFx)c4s?+pF>dQ|)w(~_ zTlKn{s5~Bzn#X#*o|-0OtSrmVizG<`CBm|-f5obk<2Vr8_I%$AN-4y|b+^rcZHPV3 zE1D4m9AdncWm%r*KQpGPg5r@d3?W8d{lW4#LWnR3;y6muL`pf~CJ{u+R7H9Qlz_&x z?donwG@?(r)u%%ekhmr~JdwWxM}QvjGU|BUXTLW~-GLZuwm$Sm*!l<zE3hvNJ`m&8 zA7n+2Q%g6?cRn}i)Mq}gVVu_iF}}S=`&MEX`wb3pTkZ_@bYtJiTyD-#e_dpePK=p! zoYi8OOyG@uu(CS6PE}Ryc3Xrjq_ODGjKO)Bhnm|KnZW7^a0_rh0i5uRYt9`yU$~@7 F`~_t)MC1Sf diff --git a/src/windows/identity/ui/images/tk-refresh.bmp b/src/windows/identity/ui/images/tk-refresh.bmp deleted file mode 100644 index 54f1a01b261c791b9f9d62d88ff498543f7568fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2430 zcmcgtA<U~*810@|vI;~+vvgU-Fa9hQPdrh9sHkX`Cab7GASx;<5ET^&1fl{_fj}S- z2m}IwKvW<QWI-Sh2$moa2*eeLii!%d)AIkck9EuYvur0HH<t_d-1D9LU6}qR{?NH$ zjP@5?KjZod*LR&C(RMn&;`#4XeccAo{PEx5f8kxN*g9B-`9QF5voN<w{;qd@1Ix0D z#eBQn3f~MUST2|K^v!x*Q{Q<xj>9v&6vuJ(5u8pZXqe4r(EEgUx7$IiX__D5e0#Sn z%h6~wolc>wtykdr<MBucIe!hz`4-rgwOlNo@QR}7I8IR%$m<b#o;MksPbDdevMA6Z z8lZ3JI(*)2Hf_C<Bsq=^7D#?Xk|b}umkW4{EX&ihjx0-?P!(mxGTSZJ=9T4xZQE&@ zHY(~)7>14B>T)J|mc}t6d5Ans4wAH9t$3bq^Qx)>kDv~cvm4L>JkPuHR@LQ1(kP08 zppGnwPeqPIL_vTFFtg38X&Q<FQy>}aXluaqcOSrdxs)UdeBX5uX%t>gB?j>V8~|Wu zo7XT5(=>u0K>a=f<5ynHy~epnV%M<|X&Br{Z{t-36Huuzv&{<=!0Y=yBtHUqG`we0 z_}E<2^c)*bUzOJDRTa)0%!Qe4UgQgDuIoaw8@Q^Y>POx4Jz17(UYJ-Uk)>&ds(H2r zqu-ObKF4_z1OX!2ykOLIoinzs@2RfZl_*N=@dl41P|lzLZ(v)REF)aYxSIgURYlX| z{a(b&ZC>pAOqq2>3e@1G<iYFVvtp}LYepM%k|x#p61ld1kktJ?@|@~?e$@MUG{UCA z%r-C5A0O!MzTcN#Ovj|u;aHxmZH`j=SZu0J3e*$MMG|JAkE*~j*ML~GRW%$Av1!Mn z)8@rq!3S1Z_mx*QFp@0u;$UEou*~={St}b<>^0%PL9f@tbR^y8?aI^_jb^Pi=x~nV zDIujBd0UMaOmS~Xs;Vw-n7;#i)!_S2pRn@~_ZMD~qV@yoFwDyw<quhCJrYvJfKmro zRd9tU3tOkWxy7#lJCCE(=A9e!<$+y@j7jV!SHBFm!R|#Fb;T|haOo*+9zAw&?D3bW zzX5Gt<SqwFPajgoOOmHx^kSc~hO{-)LY=qxmAML|@bM_teaK`O29--lfoSsvdC*m; zuGIgsrzg^!GKY+`qSYxXq`RjWo<Z5;L_GzZZNB|&-jt+MbM~UVDzUl?1uU>Ra^yt% zhatu{-UhyZ{U>>HSCgW>|2J{t<sKjK<V<GAIck<RCNME3G3RqZ@lQoodyRd5&fARs H`%dRiaJALj diff --git a/src/windows/identity/ui/images/tk-sm.bmp b/src/windows/identity/ui/images/tk-sm.bmp deleted file mode 100644 index 1e099e6f18ef3890f084838575e4a71cbce42b21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcma))Ar6Bu6oy%Lfyo_VC)fezcLl`c<ix~8B?5`4KvW<Q6^M!o#KZ&wfxwVVAP@)y z0x^MD_OB&d(q*Jy+LuTBJ<<o=?YB!uu|?cquBN$g)@t3E_Vt5~RaG5a*M1xoA*J_O zilXp55AOMVBINS4pznJn6UM@a9fT0y_oFC6tqqWA5b!u|+qP*M9g+M4GGi=BlG$Fr zn~*u@Qi`%H@dZ9nCs;AyJeE?XX_{r(HOn!O%piog-LC(@dkkRa3KZG^x2|iPmd4x| p=nJPcfC*ohApgba7iQOW7I)#TjN^zOGz<e08(;$5XB+wByZ{dmX(Ipt diff --git a/src/windows/identity/ui/images/tk.bmp b/src/windows/identity/ui/images/tk.bmp deleted file mode 100644 index e689cb830bde150c95e6390d225620fe65ce655e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3186 zcmeH|T};zw6vo-rZk+qfb^%M=k}YIrUu=O*F}UIQ66gx@VG(Q#<*O~Uw0{`!bB;|E zWQcP_Hz9(e;uMr2O2=T+jxnWBD3l_gAR;O;A=#E?H^05I?1Gdf-OaB0CeM5E=Hxs% z=XuU~-;XI+=Cg1D#qBTfynwI3BR(s{{r9=D+{fo3{y9#k6ED0y@Or>A53C9eCpKNr zdbN%SrH&6aYY9!$5)cxG!{Kn7rLxK@{G$}CjMum!C{pegzmyL0%zR3Jy2XwkCMoQ= zf&S7s8Lgv4?mfk>(lWOktK}*9?eF2~il2GByn7K|-;n7RzZ7RemVx~}Q+#Y0qWHof zhVyo^&-S5g>?JTdkv;n=vD@u*b#<ZA8t_+d<E4sD{PuS6%x4yse<HBEYk}KS&W*W7 zw$!!qZfr6#!%iagJ6NaPPDsvHLh?$8E^lOYawb74Gr?6BUQkH*C7F3H!NgPX1w1A< z@aWo<|HPT9Euf^Kjl9omsqUSjqGy^<uS~JE>n5h}Cdh3YL)9`$a?=R1#$m!523b>Q z=j|hXtUT1qiwCc=EHsTLM4vsaQ>8aie)<y9fuqz7+~tt%4wXH(*=@bWcA>G<F@f&l z80p`RqG%pLetMXQ6AnV^2MDa`=heeDo($WJuh9671kd!;<eNFzWMNx%J!hQvIW~Bg zulnv#^~-Jc2ygBDagw6%Z;&UvrD?s+re+uM-wYFV(!qPj26(5opJyYKyj*>aw-U2F z@=%UZqNb&TlEcTjIR1d9kvSS1_c+o&%NJK?DC?eP*X2oy1+SrfoU9AiNjv8v;f#~$ zQ$vIvAH;XPnm50;5tN+m5vSf%NJCpE<uxa`JT*`I!~@Q`<~TWYk6QaIUtXKRRNqc< zOCMW0Z&F~HAV+AdJntgutdrQrAy&kw2|j9PmBKSlqf~@-&_%k=fKq2<Q?7yJYy%s_ z+y+N|NTO0hY1uxs1!lq%QwfMs5Gd*i5Pf`2%;PI@8iJ$)gf}=?lak|6ol?<9-2d%Q zrsn^^HTOIHv%k_kJx{Z3oNRsmq8v7xjYx%hVSh*q`(um@;jI+mtvI3a+SJ@d@k{N4 zhi@{O46{^-(JYZ~lF%8=<QPoEC2hoNwYudf5xXfaLx)_GhfM6uXtkb5m5wl_mUZ$Z WxA=eK^}c)dH+lQy?bHA1fxiH2|MYzT diff --git a/src/windows/identity/ui/images/vw-refresh-sm.bmp b/src/windows/identity/ui/images/vw-refresh-sm.bmp deleted file mode 100644 index e3d321ca4d7fe336614a6e6b00c56e21147f594f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcmZXSFO1?q6o<K7a-yQSR5X_n6)T#{iV6e*v7(}4l3RhOIB}u^v7({^fv7-KAXZc$ z5C{YUSy6$gKp-kA5Xch<1OkCTAjo}THci?4<#jTB^YzX9Q}<WrYwNBK>rbBVAJ3Q8 zkGsG1ajss}+V2OojmP8ldVOo?a=C0ao8e$kGf@~SD~h54e%|JJ7DZtcMe%Tmm1X&v z`0u@{$~cabB+0Vu`l#da$aSob?(1^7Ow;%C`Fy=zu%cM?dcAKAnWl*czXFJm=Q;f0 za8RW0`!F3#^K4AlG#w8Cf*^o_B=ghh<T#FD7~Aa@zu(q`p=-KnnL;|E{}$0Sg1D{= zx!dh%7ZFr{@DC(WP2I2z(|ME6^3|twYJ{O!_}Og6K21~nwr%%4T{nay+W9cb7U}Ol zA$~|0>aD7ZPgL@wyKKvl9r5(k{#!0?w=I?=@7%~VA>ox^Nrw1jV+kSMXZb4QQQ)*a zVcC<(L}7fw#Hk1|#4rr0tJ`(EFJAXWdeR?_5=yI?{eDkdD5t5_YDLe%lz3IA1ZM<@ w;Pd%>@hGZ8wU4lnj6jL>NU|2~s`u0B6j))+KZJ2`HK+Vns#ol}8nVXz0ojw=N&o-= diff --git a/src/windows/identity/ui/images/vw-refresh.bmp b/src/windows/identity/ui/images/vw-refresh.bmp deleted file mode 100644 index e87aa3cbc0ba1329e76b173ea9089d895e107340..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2430 zcmchYEsPpL6oBaok|I{D*fiS|fglay#0kWT6$sLhw4!1KVg&-R0)be8K%77z5C{a~ z#0mrgfj}TmkOqN3AZUU>AP|TXh!rPDzh%PQX6`O+)1Q~wxp%Ygee>R%H%sAj^KIfR zdFGEiA9&vLyh*%cP9#3@{+lMA^8(ZNe<S~e>$>GX8?H?LDc)+eQmv@N_x<sByxZ+g zF$u$PHk)<3-RJhK2=o)T=6Uhq`}O<#`xxy7_2J>6)9J*$&{eKquglTtw3QfNpk9_n zqY*(w<4jPw%|=6vcDo&h$BWl5{Ux)ekVZr0-d<$C-#z}m42Q#3s|7>l5+=fdD9q7l zh;^}8EEEdNNTpKY(6-x6+%h~KS%jc+S?%|G$K#RXMh=HPnHh$WOeRw=3G3`Jolb>4 zGt~g1a{K-M*$D1&v6yGGS!m20NTisl+hR1TR<ubzpQkS)EtRU*YPc{sY9J~%2!hpW zMZAN-K+`nBVRJf(kgImew^N1&M0akCz%@{UV1PXvu<E)ljtEs&xh!oq8|n*`@5bHT z9j(A-hMwv=QCzSz-DFr<v-Q=?UFR`iV}bTO51ouvE^SC6wrvwB2POI|I<f1db0eW? z-MH5ET(6R217U*~Ibp%gq{J$BGMQ|*+fu27h2uCXS2F;W)A_)0>Rw~i{Q_OsPz_v= z`Fu{gDwnO+>-BQE%w#ecaV)qI0(#(48!C`aX9|bu;1nKKi*CD9!vLsZnAp%^bRKAx z%Mwt~G%T2_t1F@w<;!QaLCq}NX{Tr{r|nZXKRvcir_FdWHPcbs(9t*|i^W3a0+m8K zmK8M=g@YbNq#5Oc>6LSqWzS}%!LVuBB`RZ>nbvJfI-;mtGD3)23il$H%RxVjE=r;4 z8O`9((nMOTMc=%O{R}7sl}nQ$Btox9!Hst2D@>-<D!mka6n($Z>-EovG{ZoOAgEm0 zMF>!O4&l(^Lc_@YQ200gmPm!W%H3atZMh?a`I<a`ODQhidzH)4OQDguX?%vb?>`lw z(h)`FiVH4hEJ&8087XwA)P=&9Bqv>jqH^WuF0LF72kMBw_%+~KBWys4IQ_V#)KxD3 bi+lOnOa>J3wYOqjK$)L@kLA)|Q4&7@PPaZf diff --git a/src/windows/identity/ui/images/wdg_collapsed.bmp b/src/windows/identity/ui/images/wdg_collapsed.bmp deleted file mode 100644 index 4299854d37656e8af34046a7288c9fdcd5ff0d10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 zcmZ?rWn*Rl12Z700mK48%n!tj3=%++f#CuZ1H%zM2nGuPiR*(Bz+8ug#&j=G(SO_k y(~oHC8yXsrbq|z!pffN5&|w4R9(b4lT?J<o;~r$iSk(h#5a=mf05g6`5&-}Xj2K=3 diff --git a/src/windows/identity/ui/images/wdg_collapsed_hi.bmp b/src/windows/identity/ui/images/wdg_collapsed_hi.bmp deleted file mode 100644 index cb06b8acbffb74d8fc7208bcf2044038cf4230b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 zcmZ?rWn*Rl12Z700mK48%n!tj3=%++f#CuZ1H%zM2nGuPiR*(Bz+8ug#&j=G(U0x( za3M@T0!4luSr12;Tr?|y3VvTY0!Nr!O!a^6T!bT_dN>=%0CF+a|9$xoD2@pr;+X3H hBLSc;B;J1@cVN{cI|j(cbPv#Zm_CJzpgEpYE&$N+^RoZ| diff --git a/src/windows/identity/ui/images/wdg_credtype.bmp b/src/windows/identity/ui/images/wdg_credtype.bmp deleted file mode 100644 index 3bac3fe5356ebaa52ba3b32cad80f2f95cde1d3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmZ?r{l?4y24+A~1BeBHm>-B485Dpd1RUXGU;tqlxPJZm|G|bYUcC6fy1wCmWnIJn z^4f;~eUqk;<i?XHPySCXZ~WhP;O778?N|PXW|xwzKeN8`|BSQG|2H3g^gptoYS`;f zNJ#i!R$2AGu&nZbMnTE{>gh}1{`bkP{U4BC_}@FF;J<5P{{Q&AGK}zOZ*Twq>g%un zS6_eqfAHal|7)(lhU?GUdG~+Rh8zD~mtFpEIOp7d_jJtoXliPrNPkI5$^TklnyIL* x|6f{N|G%)Z_J2-!&Hs$js{g6QmH!h9EB?pkm;a9jy1k~o2gCh?Ee{au9stj97JUE! diff --git a/src/windows/identity/ui/images/wdg_expanded.bmp b/src/windows/identity/ui/images/wdg_expanded.bmp deleted file mode 100644 index 76ee5b016d83fd71f1bcdc92a204eae9607d71b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 zcmZ?rWn*Rl12Z700mK48%n!tj3=%++f#CuZ1H%zM2nGuPiR*(Bz+8ug#&j=G(SO_k h(~pBweFHWC^wv;uKdu<SbU!c#fr7XIX8e*Q0stN7Axr=O diff --git a/src/windows/identity/ui/images/wdg_expanded_hi.bmp b/src/windows/identity/ui/images/wdg_expanded_hi.bmp deleted file mode 100644 index 8180b33337d8a120782268a15105acd581e7e1d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 zcmZ?rWn*Rl12Z700mK48%n!tj3=%++f#CuZ1H%zM2nGuPiR*(Bz+8ug#&j=G(U0x( za3M@T0!4luS&s{0RsZ|a5nKqX`agFr;zC%}|9$xoD2@pr;%Ht5D*KNc0A&ZcdZ6<# MeF_&rb3CbB0NpSIU;qFB diff --git a/src/windows/identity/ui/images/wdg_flag.bmp b/src/windows/identity/ui/images/wdg_flag.bmp deleted file mode 100644 index c563c56e9f04b8e5cd118bcc4a2728b9d28099f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmbu6-77<39LFd3_!FeWQbO4-l$c9K@^Ygn%;_u+I~hY>c7e@}Q?eOxv$dv~rLoMi zE2osXn7t)$7mA`xDK5XxIXbI}spD7Q=lAqH&*%I6e$S&)zvs$?P;g@@rvgs-oN{D^ z-1rqIc`_L<F_Ot7{*u$_{PRpU50WGikH;l@xLht+EEdT;UmHOX|Kd$16a0R^WRFNB z0*ay}^L!69O(Pr*OZITP-RRd0WaSS70ijR6Uhz+((I{4|HmJG?6jxNI*TsE4vn-2| zQ9X=|6-Ju_#PkAsMrY7LO`=gdfi`9r?Vcp$>TWO$li|VNMGjJkKcsN>@P?z?6t)x3 zSUZ2jB72Xq<2z^$t^~f;#-dVLlfj$KW?Wp};QHkQr}wY$Uq1cHH#njwQr06F3<@56 zZw7+_F3%ol!xVJ-aZJw6VT7A&^;761Y4qCm)A#edT)%;)mR5nc+wIWlbntq;88wM- ulSm}6yt0bsz9H1nOHj=3plo;<CFNC!#bQ4)BKtjuLLsbgZo%jCrMXXo2o3T8 diff --git a/src/windows/identity/ui/images/wdg_stick.bmp b/src/windows/identity/ui/images/wdg_stick.bmp deleted file mode 100644 index 071a238c4d9fe2ddf0c475d1803a2776db76d5d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 zcmc(ZOA3HM3`47eTU~ktPv8OEdv|vpXABc4bpq0r7Ml6+(q=!#!D?;L6+NRTbY~0H z?Ck6Dkn4{^g8W**r4)wFxSXf!-4bE&v~U+xy~@)?RZE5k6N?$*Sib{nBH`y_K1OZA S@EId%V6`}(fqjL};m-}3SO&fT diff --git a/src/windows/identity/ui/images/wdg_stick_hi.bmp b/src/windows/identity/ui/images/wdg_stick_hi.bmp deleted file mode 100644 index 8857fec2207fad491c611187501d8dd5e2bcf147..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 zcmZ?rWn*Rl12Z700mK48%n!tj3=%++f#CuZm_i}04+H?ZfOu<xihpdM2XQnpx_~Nw z9a#_8g<lI$+3!n7AX<RBAR2*O2*A_}6#sMQB9H{?!bCuEG%Y}pzb_v`bOAM@A&7b) zi46Y#{}1E>bzvf)IHvg!^*|C6&_X@3Q_&m);Q|!^T>>YuszDZns{}HT#qqH5s009^ C@cUl? diff --git a/src/windows/identity/ui/images/wdg_stuck.bmp b/src/windows/identity/ui/images/wdg_stuck.bmp deleted file mode 100644 index 68295181d54551f38d7ae37a326dd285cd71542c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 zcmb`CK@vbP3`K((Tb7RC1P);D?sksD*RP#OwG1+oG)dq8YMkmyTnwl^vPCw?LON8D zxpc>=EPq6Byfq`a`rw#R0r2c`VsptGXRV4Qv}M&K`;WY~)qUPP+-eDWg!x}=%$psx f7wl0DkC9hKm4aXJl<2RZN5n5N8)8pLBTS7O`9Kui diff --git a/src/windows/identity/ui/images/wdg_stuck_hi.bmp b/src/windows/identity/ui/images/wdg_stuck_hi.bmp deleted file mode 100644 index 3b780712914f23410e4d6925e485edb8cda6f6a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 zcmZ?rWn*Rl12Z700mK48%n!tj3=%++f#CuZm_i}0Qv<+FBxo2!<&W+2APB<6qYJ3u z*OB#b1k?o-!Kxl&)bC42FcGE}pa{gMKX)!-BCP6xZUBn^efba*p{WOQ;cfu3|Dysl z#X!FRMc{4#vVj1u1Hwh~FHjK84G?7zaUhAN9%2RDOk@UD#bl_5XaSlAHyp?Y0!){n Oi9nPQqY_OcE-nE4K?Gj_ diff --git a/src/windows/identity/ui/khmapp.h b/src/windows/identity/ui/khmapp.h deleted file mode 100644 index ba036c649..000000000 --- a/src/windows/identity/ui/khmapp.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KHIMAIRA_H -#define __KHIMAIRA_KHIMAIRA_H - -#include<windows.h> -#include<windowsx.h> -#include<strsafe.h> -#include<commctrl.h> -#include<htmlhelp.h> - -#define KHERR_HMODULE khm_hInstance -#define KHERR_FACILITY khm_facility -#define KHERR_FACILITY_ID 3 - -#define NOEXPORT - -#include<netidmgr.h> - -#include<khhelp.h> -#include<intaction.h> -#include<intalert.h> - -#include<resource.h> -#include<credfuncs.h> -#include<appglobal.h> -#include<mainwnd.h> -#include<mainmenu.h> -#include<toolbar.h> -#include<statusbar.h> -#include<credwnd.h> -#include<htwnd.h> -#include<passwnd.h> -#include<newcredwnd.h> -#include<propertywnd.h> -#include<configwnd.h> -#include<aboutwnd.h> -#include<debugfuncs.h> -#include<taskbar.h> - -#include<reqdaemon.h> -#include<notifier.h> -#include<timer.h> -#include<addrchange.h> - -#endif diff --git a/src/windows/identity/ui/lang/en_us/cmdline.rtf b/src/windows/identity/ui/lang/en_us/cmdline.rtf deleted file mode 100644 index bc3356586f6222d2c4c00cedb4b218bf9343850c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7D!HU~35bZf%G3Qb*cCzWh?kUhh15FD}OE0=iB-t5OmW-s-Nkjg<Bgf7rOA}Zy z!Ww(t(|dZe7e1DSKpUuAWK$L6=~yUTmU&tY+N#JWlf5XNjd5l8B^PCADFji<HTs}q z4l_?^o(_l6Uc48Tw%TKK9u}dDT2X}Q-F<OaO!>(lo(|#<>Gqkdx)&Q+hz7knqK<R; zxz_Ma$JY60m@91~#T_irVx>J`(-@K%$yq=tbrS<bZYZ5Gt|eQ6bajnZWrnN<*Q7tg zV`3Pc7UrU?m`rnFsCX!H5x0|%Y3(*E$VjYsi!1oPibxi$Zb5q89R^LfJ0hhYW`;0m zCg6?W&WuG-<aPj7pDIJ)#6C(@JT|azo9JrRBhi>0q-OS!{^|=pfO!elo!0<;QoXT? zSKoQSmxUV>fqK(EaFqfm3XQ?t(Wh5R_#+xu-4cX+z}K42YL~M7VB8N*K>OcQ-Qx18 z>)gDdaLG~+Ec3c?K3>>TdRKS6zd2p54X{{#UCuzFT<crZ)Iptd_mxv}GBw=UCmo`9 zyEn^IeP3ef)6th+^kv(D<@1)uCS}`itWC)#8zNfCsV=V$$SsMQ0nY_?`xkjx&DUIW z^wePQG9tTsbryLrPAyP7HTc^>rde2X5(lg={NAa#3dhsS7uE|nVT83yiAbivFPjkG Jh;kUc`v<GqxZwZ* diff --git a/src/windows/identity/ui/lang/en_us/khapp.rc b/src/windows/identity/ui/lang/en_us/khapp.rc deleted file mode 100644 index b851ffe88..000000000 --- a/src/windows/identity/ui/lang/en_us/khapp.rc +++ /dev/null @@ -1,869 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "..\..\resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "afxres.h" -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "..\\..\\resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""afxres.h""\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_MAIN_APP ICON "..\\..\\images\\main_app.ico" -IDI_ENABLED ICON "..\\..\\images\\enabled.ico" -IDI_DISABLED ICON "..\\..\\images\\disabled.ico" -IDI_NOTIFY_NONE ICON "..\\..\\images\\app_notify_none.ico" -IDI_NOTIFY_INFO ICON "..\\..\\images\\app_notify_info.ico" -IDI_NOTIFY_WARN ICON "..\\..\\images\\app_notify_warn.ico" -IDI_NOTIFY_ERROR ICON "..\\..\\images\\app_notify_error.ico" -IDI_CFG_DEFAULT ICON "..\\..\\images\\cfg_default.ico" -IDI_CFG_MODIFIED ICON "..\\..\\images\\cfg_mod.ico" -IDI_CFG_APPLIED ICON "..\\..\\images\\cfg_applied.ico" -IDI_CFG_DELETED ICON "..\\..\\images\\cfg_deleted.ico" -IDI_ID ICON "..\\..\\images\\id.ico" -IDI_APPICON_WARN ICON "..\\..\\images\\app_state_warn.ico" -IDI_APPICON_EXP ICON "..\\..\\images\\app_state_exp.ico" -IDI_APPICON_OK ICON "..\\..\\images\\app_state_ok.ico" -IDI_CFG_PLUGIN ICON "..\\..\\images\\cfg_plugin.ico" -IDI_CFG_PLUGIN_ERR ICON "..\\..\\images\\cfg_plugin_err.ico" -IDI_CFG_PLUGIN_DIS ICON "..\\..\\images\\cfg_plugin_dis.ico" - -///////////////////////////////////////////////////////////////////////////// -// -// Bitmap -// - -IDB_TK_REFRESH BITMAP "..\\..\\images\\tk-refresh.bmp" -IDB_ID BITMAP "..\\..\\images\\id.bmp" -IDB_ID_DELETE BITMAP "..\\..\\images\\id-delete.bmp" -IDB_ID_NEW BITMAP "..\\..\\images\\id-new.bmp" -IDB_ID_REFRESH BITMAP "..\\..\\images\\id-refresh.bmp" -IDB_TK BITMAP "..\\..\\images\\tk.bmp" -IDB_TK_DELETE BITMAP "..\\..\\images\\tk-delete.bmp" -IDB_TK_NEW BITMAP "..\\..\\images\\tk-new.bmp" -IDB_VW_REFRESH_SM BITMAP "..\\..\\images\\vw-refresh-sm.bmp" -IDB_TB_BLANK BITMAP "..\\..\\images\\tb-blank.bmp" -IDB_TB_BLANK_SM BITMAP "..\\..\\images\\tb-blank-small.bmp" -IDB_VW_REFRESH BITMAP "..\\..\\images\\vw-refresh.bmp" -IDB_ID_DELETE_DIS BITMAP "..\\..\\images\\id-delete-dis.bmp" -IDB_ID_DELETE_DIS_SM BITMAP "..\\..\\images\\id-delete-dis-sm.bmp" -IDB_ID_DELETE_SM BITMAP "..\\..\\images\\id-delete-sm.bmp" -IDB_ID_DIS BITMAP "..\\..\\images\\id-dis.bmp" -IDB_ID_DIS_SM BITMAP "..\\..\\images\\id-dis-sm.bmp" -IDB_ID_NEW_DIS BITMAP "..\\..\\images\\id-new-dis.bmp" -IDB_ID_NEW_DIS_SM BITMAP "..\\..\\images\\id-new-dis-sm.bmp" -IDB_ID_NEW_SM BITMAP "..\\..\\images\\id-new-sm.bmp" -IDB_ID_REFRESH_DIS BITMAP "..\\..\\images\\id-refresh-dis.bmp" -IDB_ID_REFRESH_SM BITMAP "..\\..\\images\\id-refresh-sm.bmp" -IDB_ID_REFRESH_DIS_SM BITMAP "..\\..\\images\\id-refresh-sm-dis.bmp" -IDB_TK_DELETE_DIS BITMAP "..\\..\\images\\tk-delete-dis.bmp" -IDB_TK_DELETE_DIS_SM BITMAP "..\\..\\images\\tk-delete-dis-sm.bmp" -IDB_TK_DELETE_SM BITMAP "..\\..\\images\\tk-delete-sm.bmp" -IDB_TK_DIS_SM BITMAP "..\\..\\images\\tk-dis-sm.bmp" -IDB_TK_NEW_DIS BITMAP "..\\..\\images\\tk-new-dis.bmp" -IDB_TK_NEW_DIS_SM BITMAP "..\\..\\images\\tk-new-dis-sm.bmp" -IDB_TK_NEW_SM BITMAP "..\\..\\images\\tk-new-sm.bmp" -IDB_TK_REFRESH_DIS BITMAP "..\\..\\images\\tk-refresh-dis.bmp" -IDB_TK_REFRESH_DIS_SM BITMAP "..\\..\\images\\tk-refresh-dis-sm.bmp" -IDB_TK_REFRESH_SM BITMAP "..\\..\\images\\tk-refresh-sm.bmp" -IDB_TK_SM BITMAP "..\\..\\images\\tk-sm.bmp" -IDB_HELP_SM BITMAP "..\\..\\images\\help-sm.bmp" -IDB_HELP BITMAP "..\\..\\images\\help.bmp" -IDB_LOGO_SHADE BITMAP "..\\..\\images\\logo_shade.bmp" -IDB_WDG_EXPAND BITMAP "..\\..\\images\\wdg_expanded.bmp" -IDB_WDG_COLLAPSE BITMAP "..\\..\\images\\wdg_collapsed.bmp" -IDB_ID_SM BITMAP "..\\..\\images\\id-sm.bmp" -IDB_WDG_EXPAND_HI BITMAP "..\\..\\images\\wdg_expanded_hi.bmp" -IDB_WDG_COLLAPSE_HI BITMAP "..\\..\\images\\wdg_collapsed_hi.bmp" -IDB_WDG_CREDTYPE BITMAP "..\\..\\images\\wdg_credtype.bmp" -IDB_WDG_FLAG BITMAP "..\\..\\images\\wdg_flag.bmp" -IDB_FLAG_WARN BITMAP "..\\..\\images\\flag-warning.bmp" -IDB_FLAG_EXPIRED BITMAP "..\\..\\images\\flag_expired.bmp" -IDB_FLAG_CRITICAL BITMAP "..\\..\\images\\flag-critical.bmp" -IDB_LOGO_OPAQUE BITMAP "..\\..\\images\\khimaira-cfg.bmp" -IDB_IMPORT_SM_DIS BITMAP "..\\..\\images\\import-sm-dis.bmp" -IDB_IMPORT BITMAP "..\\..\\images\\import.bmp" -IDB_IMPORT_DIS BITMAP "..\\..\\images\\import-dis.bmp" -IDB_IMPORT_SM BITMAP "..\\..\\images\\import-sm.bmp" -IDB_CHPW_SM BITMAP "..\\..\\images\\chpw-sm.bmp" -IDB_CHPW BITMAP "..\\..\\images\\chpw.bmp" -IDB_CHPW_DIS BITMAP "..\\..\\images\\chpw-dis.bmp" -IDB_CHPW_DIS_SM BITMAP "..\\..\\images\\chpw-dis-sm.bmp" -IDB_TB_SPACE BITMAP "..\\..\\images\\tb-space.bmp" -IDB_WDG_STUCK_HI BITMAP "..\\..\\images\\wdg_stuck_hi.bmp" -IDB_WDG_STICK BITMAP "..\\..\\images\\wdg_stick.bmp" -IDB_WDG_STICK_HI BITMAP "..\\..\\images\\wdg_stick_hi.bmp" -IDB_WDG_STUCK BITMAP "..\\..\\images\\wdg_stuck.bmp" -IDB_FLAG_RENEW BITMAP "..\\..\\images\\flag_renewable.bmp" - -///////////////////////////////////////////////////////////////////////////// -// -// Accelerator -// - -IDR_MENU_BAR ACCELERATORS -BEGIN - VK_F10, IDA_ACTIVATE_MENU, VIRTKEY, NOINVERT - VK_UP, IDA_UP, VIRTKEY, NOINVERT - VK_DOWN, IDA_DOWN, VIRTKEY, NOINVERT - VK_LEFT, IDA_LEFT, VIRTKEY, NOINVERT - VK_RIGHT, IDA_RIGHT, VIRTKEY, NOINVERT - VK_ESCAPE, IDA_ESC, VIRTKEY, NOINVERT - VK_EXECUTE, IDA_ENTER, VIRTKEY, NOINVERT -END - - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_NC_NEWCRED DIALOGEX 0, 0, 301, 167 -STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - LTEXT "UI Row2",IDC_NC_TPL_ROW_LG,7,31,287,18,NOT WS_VISIBLE | WS_BORDER - LTEXT "TplPanel",IDC_NC_TPL_PANEL,7,7,287,153,NOT WS_VISIBLE | WS_BORDER - LTEXT "UI Row",IDC_NC_TPL_ROW,7,7,287,18,NOT WS_VISIBLE | WS_BORDER - LTEXT "TplLabel",IDC_NC_TPL_LABEL,7,8,45,10,NOT WS_VISIBLE | WS_BORDER - LTEXT "TplInput",IDC_NC_TPL_INPUT,54,7,240,13,NOT WS_VISIBLE | WS_BORDER - LTEXT "TplLabelLg",IDC_NC_TPL_LABEL_LG,7,33,146,10,NOT WS_VISIBLE | WS_BORDER - LTEXT "TplInputLg",IDC_NC_TPL_INPUT_LG,155,31,139,13,NOT WS_VISIBLE | WS_BORDER - LTEXT "&Credentials",IDC_NC_CREDTEXT_LABEL,7,66,41,10,NOT WS_VISIBLE | NOT WS_GROUP - CONTROL "",IDC_NC_CREDTEXT,"KhmHtWnd",NOT WS_VISIBLE | WS_TABSTOP,54,65,240,95,WS_EX_CLIENTEDGE - PUSHBUTTON "&Ok",IDOK,101,142,89,18,WS_DISABLED - PUSHBUTTON "&Cancel",IDCANCEL,198,142,54,18 - PUSHBUTTON "&>>",IDC_NC_ADVANCED,260,142,34,18 -END - -IDD_NC_BBAR DIALOGEX 0, 0, 66, 190 -STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - DEFPUSHBUTTON "&Ok",IDOK,7,7,52,41,WS_DISABLED - PUSHBUTTON "&Cancel",IDCANCEL,7,58,52,19 - PUSHBUTTON "&<<",IDC_NC_BASIC,7,144,52,14 - PUSHBUTTON "&Help",IDC_NC_HELP,7,164,52,19 -END - -IDD_PP_IDENT DIALOGEX 0, 0, 235, 156 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_CAPTION -EXSTYLE WS_EX_CONTROLPARENT -CAPTION "Identity" -FONT 8, "MS Shell Dlg", 0, 0, 0x0 -BEGIN - LTEXT "Name",IDC_STATIC,7,8,19,12 - LTEXT "IdentityName",IDC_PP_IDNAME,34,7,194,12,NOT WS_GROUP,WS_EX_CLIENTEDGE - CONTROL "Default identity",IDC_PP_IDDEF,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,34,22,71,12 - CONTROL "Searchable",IDC_PP_IDSEARCH,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,117,36,74,12 - CONTROL "Custom1",IDC_PP_PROPLIST,"NetIDMgrPropertyWnd",WS_TABSTOP,7,51,221,80 - CONTROL "Always visible (sticky)",IDC_PP_STICKY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,117,22,85,12 - PUSHBUTTON "Identity configuration ...",IDC_PP_CONFIG,117,135,111,14 -END - -IDD_PP_CRED DIALOGEX 0, 0, 236, 158 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_CAPTION -CAPTION "Credential" -FONT 8, "MS Shell Dlg", 0, 0, 0x0 -BEGIN - CONTROL "Check1",IDC_PP_DUMMY,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,0,1,39,10 - CONTROL "Custom1",IDC_PP_CPROPLIST,"NetIDMgrPropertyWnd",WS_TABSTOP,7,7,222,144 -END - -IDD_CFG_MAIN DIALOGEX 0, 0, 357, 222 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_CONTEXTHELP -CAPTION "Network Identity Manager Configuration" -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - LTEXT "Title",IDC_CFG_TITLE,0,0,357,20,SS_CENTERIMAGE - CONTROL "",IDC_CFG_NODELIST,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_TRACKSELECT | WS_TABSTOP | 0x800,0,20,100,182 - LTEXT "Static",IDC_CFG_PANE,102,20,255,182,NOT WS_VISIBLE | WS_BORDER - PUSHBUTTON "&Ok",IDOK,162,205,78,16 - PUSHBUTTON "&Cancel",IDCANCEL,246,205,51,16 - PUSHBUTTON "&Apply",IDAPPLY,303,205,51,16,WS_DISABLED -END - -IDD_CFG_GENERIC DIALOGEX 0, 0, 255, 182 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CTEXT "Please select one of the configuration categories on the left.",IDC_STATIC,21,17,212,18,SS_CENTERIMAGE,WS_EX_TRANSPARENT -END - -IDD_CFG_GENERAL DIALOGEX 0, 0, 255, 182 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - GROUPBOX "Startup / Shutdown",IDC_CFG_STARTUP_GROUP,7,7,241,44 - CONTROL "&Obtain new credentials at startup (if none are present)",IDC_CFG_AUTOINIT, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,20,196,10 - CONTROL "&Destroy all credentials on exit",IDC_CFG_DESTROYALL, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,36,111,10 - GROUPBOX "Other",IDC_CFG_OTHER,7,55,241,120 - CONTROL "&Run from taskbar notification area after window close",IDC_CFG_KEEPRUNNING, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,68,230,10 - LTEXT "Clicking on the &notification icon",IDC_CFG_NOTACT_STATIC,26,87,99,8 - COMBOBOX IDC_CFG_NOTACTION,133,85,110,48,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - CONTROL "&Monitor network connectivity",IDC_CFG_NETDETECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,104,106,10 - CONTROL "&Log trace events to trace log at the following location:",IDC_CFG_LOGTOFILE, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,121,225,10 - EDITTEXT IDC_CFG_LOGPATH,16,135,173,14,ES_AUTOHSCROLL | ES_READONLY - PUSHBUTTON "&Show log",IDC_CFG_SHOWLOG,193,135,50,14 - CONTROL "A&utomatically import Windows logon identity",IDC_CFG_AUTOIMPORT, - "Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,16,156,165,10 - CONTROL "&Start Network Identity Manager during Windows logon",IDC_CFG_AUTOSTART, - "Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,113,165,135,10 -END - -IDD_CFG_IDENTITIES DIALOGEX 0, 0, 255, 182 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "",IDC_CFG_TAB,"SysTabControl32",WS_TABSTOP,7,7,241,168 - LTEXT "Static",IDC_CFG_TARGET,10,21,235,151,NOT WS_VISIBLE | WS_BORDER -END - -IDD_CFG_NOTIF DIALOGEX 0, 0, 255, 182 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "&Renew automatically at",IDC_NOTIF_RENEW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,9,100,10 - EDITTEXT IDC_NOTIF_RENEW_THR,122,7,126,14,ES_AUTOHSCROLL - CONTROL "Renew at &half life intervals when possible",IDC_NOTIF_HALFLIFE, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,48,27,148,10 - CONTROL "Initial warning at",IDC_NOTIF_WARN1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,46,100,10 - EDITTEXT IDC_NOTIF_WARN1_THR,122,44,126,14,ES_AUTOHSCROLL - CONTROL "Final warning at",IDC_NOTIF_WARN2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,68,100,10 - EDITTEXT IDC_NOTIF_WARN2_THR,122,66,126,14,ES_AUTOHSCROLL - CONTROL "&Monitor credential expiration",IDC_NOTIF_MONITOR, - "Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,7,103,139,10 -END - -IDD_CFG_PLUGINS DIALOGEX 0, 0, 255, 182 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "",IDC_CFG_PLUGINS,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,7,7,75,168 - ICON IDI_CFG_PLUGIN,IDC_CFG_ICON,87,11,20,20 - EDITTEXT IDC_CFG_DESC,128,7,120,30,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY - LTEXT "&Module",IDC_CFG_LBL_MOD,87,43,24,8 - EDITTEXT IDC_CFG_MODULE,128,43,120,12,ES_AUTOHSCROLL | ES_READONLY - LTEXT "&Version",IDC_STATIC,87,59,24,8 - EDITTEXT IDC_CFG_VERSION,128,59,120,12,ES_AUTOHSCROLL | ES_READONLY - LTEXT "Ve&ndor",IDC_CFG_LBL_VEN,87,75,24,8 - EDITTEXT IDC_CFG_VENDOR,128,75,120,12,ES_AUTOHSCROLL | ES_READONLY - LTEXT "De&pends on",IDC_CFG_LBL_DEPS,87,93,39,8 - LISTBOX IDC_CFG_DEPS,128,93,120,34,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "&Status",IDC_CFG_LBL_STATE,87,129,22,8 - EDITTEXT IDC_CFG_STATE,128,129,120,12,ES_AUTOHSCROLL | ES_READONLY - PUSHBUTTON "&Enable ...",IDC_CFG_ENABLE,128,144,50,14,WS_DISABLED - PUSHBUTTON "&Disable ...",IDC_CFG_DISABLE,198,144,50,14,WS_DISABLED - PUSHBUTTON "&Unregister plug-in ...",IDC_CFG_UNREGISTER,87,161,72,14,WS_DISABLED - PUSHBUTTON "&Register new plug-in ...",IDC_CFG_REGISTER,169,161,79,14,NOT WS_VISIBLE | WS_DISABLED -END - -IDD_CFG_IDENTITY DIALOGEX 0, 0, 255, 182 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "",IDC_CFG_TAB,"SysTabControl32",WS_TABSTOP,7,7,241,168 - LTEXT "Static",IDC_CFG_TARGET,10,21,235,151,NOT WS_VISIBLE | WS_BORDER -END - -IDD_CFG_IDS_TAB DIALOGEX 0, 0, 235, 151 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "Monitor credential expiration",IDC_CFG_MONITOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,107,10 - CONTROL "Automatically renew",IDC_CFG_RENEW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,20,81,10 - CONTROL "Always show in the credentials list (Pinned)",IDC_CFG_STICKY, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,34,151,10 - PUSHBUTTON "&Add new identity...",IDC_CFG_ADDIDENT,17,120,86,14 -END - -IDD_CFG_ID_TAB DIALOGEX 0, 0, 235, 151 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "Always show in the credentials list (Pinned)",IDC_CFG_STICKY, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,34,151,10 - CONTROL "Monitor credential expiration",IDC_CFG_MONITOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,107,10 - CONTROL "Automatically renew",IDC_CFG_RENEW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,20,81,10 - PUSHBUTTON "Remove identity ...",IDC_CFG_REMOVE,139,122,78,14 -END - -IDD_ABOUT DIALOGEX 0, 0, 324, 238 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "About Network Identity Manager" -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - DEFPUSHBUTTON "OK",IDOK,267,7,50,14 - LTEXT "Productname",IDC_PRODUCT,41,7,225,13,NOT WS_GROUP - LTEXT "© 2005-2007 Massachusetts Institute of Technology\n© 2006-2007 Secure Endpoints Inc.",IDC_COPYRIGHT,41,23,276,23,NOT WS_GROUP - LTEXT "BuildInfo",IDC_BUILDINFO,41,49,276,20,NOT WS_GROUP - ICON IDI_MAIN_APP,IDC_STATIC,6,7,20,20 - CONTROL "",IDC_MODULES,"SysListView32",LVS_REPORT | LVS_SORTASCENDING | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,41,88,276,143 - LTEXT "Loaded modules",IDC_STATIC,41,76,52,8 -END - -IDD_CFG_APPEAR DIALOGEX 0, 0, 255, 182 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - GROUPBOX "Font for credentials display",IDC_STATIC,7,7,241,137 - LTEXT "&Font name",IDC_STATIC,17,22,35,8 - COMBOBOX IDC_CFG_FONTS,62,20,178,51,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - LTEXT "&Size",IDC_STATIC,62,43,14,8 - COMBOBOX IDC_CFG_SIZE,87,41,48,51,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "&Bold",IDC_CFG_BOLD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,42,29,10 - CONTROL "&Italics",IDC_CFG_ITALICS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,42,35,10 - EDITTEXT IDC_CFG_SAMPLE_NORMAL,62,66,178,21,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_STATICEDGE - EDITTEXT IDC_CFG_SAMPLE_BOLD,62,91,178,21,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_STATICEDGE - PUSHBUTTON "&Revert to default",IDC_CFG_REVERT,168,122,72,14 -END - -IDD_CFG_ADDIDENT DIALOGEX 0, 0, 279, 95 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Add new identity" -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - LTEXT "&Identity name",IDC_SM_LBL,7,10,46,8,NOT WS_VISIBLE - EDITTEXT IDC_SM_CTL,67,7,205,14,ES_AUTOHSCROLL | NOT WS_VISIBLE - DEFPUSHBUTTON "OK",IDOK,145,74,71,14 - PUSHBUTTON "Cancel",IDCANCEL,222,74,50,14 - LTEXT "&Identity name",IDC_MED_LBL,7,27,130,8,NOT WS_VISIBLE - EDITTEXT IDC_MED_CTL,141,24,131,14,ES_AUTOHSCROLL | NOT WS_VISIBLE - LTEXT "&Identity name",IDC_LG_LBL,7,41,265,8,NOT WS_VISIBLE - EDITTEXT IDC_LG_CTL,141,50,131,14,ES_AUTOHSCROLL | NOT WS_VISIBLE -END - -IDD_CMDLINE DIALOGEX 0, 0, 309, 286 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_CAPTION | WS_SYSMENU -CAPTION "Commandline options for Network Identity Manager" -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - DEFPUSHBUTTON "OK",IDOK,252,265,50,14 - ICON IDI_MAIN_APP,IDC_STATIC,7,7,21,20 - LTEXT "Productname",IDC_PRODUCT,40,7,262,13,NOT WS_GROUP - CONTROL "",IDC_CONTENT,"RichEdit20A",ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP,40,22,262,231 - LTEXT "© 2005-2007 Massachusetts Institute of Technology\n© 2006-2007 Secure Endpoints Inc.",IDC_COPYRIGHT,7,258,240,21,NOT WS_GROUP -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_NC_NEWCRED, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 294 - TOPMARGIN, 7 - BOTTOMMARGIN, 160 - END - - IDD_NC_BBAR, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 59 - TOPMARGIN, 7 - BOTTOMMARGIN, 183 - END - - IDD_PP_IDENT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 228 - VERTGUIDE, 34 - VERTGUIDE, 117 - TOPMARGIN, 7 - BOTTOMMARGIN, 149 - END - - IDD_PP_CRED, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 229 - TOPMARGIN, 7 - BOTTOMMARGIN, 151 - END - - IDD_CFG_GENERIC, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 248 - TOPMARGIN, 7 - BOTTOMMARGIN, 175 - END - - IDD_CFG_GENERAL, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 248 - VERTGUIDE, 16 - TOPMARGIN, 7 - BOTTOMMARGIN, 175 - END - - IDD_CFG_IDENTITIES, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 248 - VERTGUIDE, 10 - VERTGUIDE, 244 - TOPMARGIN, 7 - BOTTOMMARGIN, 175 - HORZGUIDE, 22 - HORZGUIDE, 171 - END - - IDD_CFG_NOTIF, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 248 - VERTGUIDE, 22 - VERTGUIDE, 122 - TOPMARGIN, 7 - BOTTOMMARGIN, 175 - END - - IDD_CFG_PLUGINS, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 248 - VERTGUIDE, 87 - VERTGUIDE, 128 - TOPMARGIN, 7 - BOTTOMMARGIN, 175 - END - - IDD_CFG_IDENTITY, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 248 - TOPMARGIN, 7 - BOTTOMMARGIN, 175 - END - - IDD_CFG_IDS_TAB, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 228 - TOPMARGIN, 7 - BOTTOMMARGIN, 144 - END - - IDD_CFG_ID_TAB, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 228 - TOPMARGIN, 7 - BOTTOMMARGIN, 144 - END - - IDD_ABOUT, DIALOG - BEGIN - LEFTMARGIN, 6 - RIGHTMARGIN, 317 - VERTGUIDE, 41 - VERTGUIDE, 266 - TOPMARGIN, 7 - BOTTOMMARGIN, 231 - END - - IDD_CFG_APPEAR, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 248 - VERTGUIDE, 7 - VERTGUIDE, 62 - VERTGUIDE, 240 - VERTGUIDE, 248 - TOPMARGIN, 7 - BOTTOMMARGIN, 175 - END - - IDD_CFG_ADDIDENT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 272 - TOPMARGIN, 7 - BOTTOMMARGIN, 88 - END - - IDD_CMDLINE, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 302 - VERTGUIDE, 40 - TOPMARGIN, 7 - BOTTOMMARGIN, 279 - END -END -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// KHMRTFRESOURCE -// - -IDR_CMDLINERTF KHMRTFRESOURCE "cmdline.rtf" - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE -BEGIN - IDS_MAIN_WINDOW_TITLE "Network Identity Manager" - IDS_MENU_FILE "&File" - IDS_MENU_CRED "&Credential" - IDS_MENU_VIEW "&View" -END - -STRINGTABLE -BEGIN - IDS_MENU_OPTIONS "&Options" - IDS_MENU_HELP "&Help" - IDS_ACTION_PROPERTIES "&Properties" - IDS_ACTION_EXIT "E&xit" - IDS_CFG_ROOT_NAME "Network Identity Manager" - IDS_ACTION_SET_DEF_ID "Set as &default" - IDS_ACTION_SET_SRCH_ID "Allow applications to &search" - IDS_CFG_ROOT_TITLE "Network Identity Manager Configuration" - IDS_CFG_GENERAL_SHORT "General" - IDS_ACTION_NEW_CRED "Obtain &new credentials ..." - IDS_ACTION_PASSWD_ID "Change &password" - IDS_ACTION_CHOOSE_COLS "Select columns" - IDS_ACTION_DEBUG_WINDOW "Debug window" - IDS_ACTION_VIEW_REFRESH "Refresh view" - IDS_MENU_LAYOUT "Layout" - IDS_MENU_TOOLBARS "Toolbars" -END - -STRINGTABLE -BEGIN - IDS_ACTION_LAYOUT_ID "By identity" - IDS_ACTION_LAYOUT_TYPE "By type" - IDS_ACTION_LAYOUT_LOC "By location" - IDS_ACTION_TB_STANDARD "Standard" - IDS_ACTION_OPT_KHIM "General" - IDS_ACTION_OPT_IDENTS "Identities" - IDS_ACTION_OPT_NOTIF "Notifications" - IDS_ACTION_HELP_CTX "Help Contents" - IDS_ACTION_HELP_CONTENTS "Contents" - IDS_ACTION_HELP_INDEX "Index" - IDS_ACTION_HELP_ABOUT "About Network Identity Manager" - IDS_CFG_GENERAL_LONG "General options" - IDS_SAMPLE_STRING "Wxy" - IDS_NO_CREDS "<large><p align=""center"">You currently have no credentials.</p><p align=""center"">Click <a id=""NewCreds"">here</a> to obtain new credentials.</p></large>" - IDS_WT_INIT_CREDS "Obtain initial credentials" - IDS_WT_NEW_CREDS "Obtain new credentials" -END - -STRINGTABLE -BEGIN - IDS_NC_IDENTITY "&Identity" - IDS_NC_IDENTS "&Identities" - IDS_NC_CREDTEXT_ID_NONE "<p><b>(No identities specified)</b></p>" - IDS_NC_CREDTEXT_ID_ONE "<p>Selected identity: <b>%s</b></p>" - IDS_NC_CREDTEXT_ID_MANY "<p>Primary identity: <b>%s</b></p><p>Additional identities: <b>%s</b></p>" - IDS_NC_CREDTEXT_ID_INVALID "<font color=""red"">%s (invalid)</font>" - IDS_WTPOST_INIT_CREDS " - Initial credentials" - IDS_WTPOST_NEW_CREDS " - New credentials" - IDS_ACTION_RENEW_CRED "R&enew credentials" - IDS_ACTION_DESTROY_CRED "De&stroy credentials" - IDS_DEFAULT_FONT "MS Shell Dlg" - IDS_NC_CREDTEXT_TABS "<settab pos=""15""><settab pos=""30""><settab pos=""45"">" - IDS_NOTIFY_PREFIX "Network Identity Manager - " - IDS_NOTIFY_READY "Ready" - IDS_NOTIFY_ATTENTION "Attention" - IDS_ALERT_DEFAULT "Alert" -END - -STRINGTABLE -BEGIN - IDS_PACTION_OK "&Ok" - IDS_PACTION_CANCEL "&Cancel" - IDS_PACTION_CLOSE "&Close" - IDS_ALERT_NOSEL_TITLE "No credentials selected" - IDS_ALERT_NOSEL "Please select a credential, a credential type or an identity." - IDS_NC_CREDTEXT_ID_VALID "<font color=""blue"">%s</font>" - IDS_NC_CREDTEXT_ID_UNCHECKED "<font color=""grey"">%s (Unverified)</font>" - IDS_PROP_COL_PROPERTY "Property" - IDS_PROP_COL_VALUE "Value" - IDS_NC_NEW_IDENT "( New identity ... )" - IDS_NC_CREDTEXT_ID_CHECKING "<font color=""grey"">%s (Checking...)</font>" - IDS_ACTION_OPEN_APP "Show Network Identity Manager window" - IDS_CTX_NEW_IDENT "Obtaining new identity" - IDS_CTX_NEW_CREDS "Obtaining new credentials" - IDS_CTX_RENEW_CREDS "Renewing credentials" - IDS_CTX_PROC_NEW_IDENT "Obtaining initial credentials for %1!s!" -END - -STRINGTABLE -BEGIN - IDS_CTX_PROC_NEW_CREDS "Obtaining new credentials for %1!s!" - IDS_CTX_PROC_RENEW_CREDS "Renewing credentials for %1!s!" - IDS_ACTION_CLOSE_APP "Hide Network Identity Manager window" - IDS_NC_FAILED_TITLE "Failed to acquire credentials" - IDS_CFG_IDENTITIES_SHORT "Identities" - IDS_CFG_IDENTITIES_LONG "Global Identity settings" - IDS_CFG_NOTIF_SHORT "Notifications" - IDS_CFG_NOTIF_LONG "Notifications" - IDS_CFG_PLUGINS_SHORT "Plug-ins" - IDS_CFG_PLUGINS_LONG "Plug-ins and Modules" - IDS_CFG_IDENTITY_SHORT "%s" - IDS_CFG_IDENTITY_LONG "Options for %s" - IDS_CTX_DESTROY_CREDS "Destroying credentials" - IDS_WARN_EXPIRE "Some of your credentials will expire in %s" - IDS_WARN_TITLE "Credentials expiration warning" - IDS_ALERT_MOREINFO "...\nClick here for more..." -END - -STRINGTABLE -BEGIN - IDS_WARN_EXPIRED "Some of your credentials have expired." - IDS_WARN_EXPIRE_ID "Credentials for %.180s will expire in %s" - IDS_WARN_EXPIRED_ID "Credentials for %.220s have expired" - IDS_WARN_WM_TITLE "Network Identity Manager is still running" - IDS_WARN_WM_MSG "Click the Network Identity Manager icon below to open the application.\n\nOr right click the icon to access the Network Identity Manager menu." - IDS_CFG_ID_TAB_SHORT "General" - IDS_CFG_ID_TAB_LONG "General options for this identity" - IDS_CFG_IDS_TAB_SHORT "General" - IDS_CFG_IDS_TAB_LONG "General options for all identities" - IDS_CFG_IDS_IDENTITY "Identity" - IDS_ACTION_IMPORT "Import Credentials" - IDS_CTX_IMPORT "Importing credentials from Windows" - IDS_CFG_PI_COL_PLUGINS "Plug-ins" - IDS_PISTATE_FAILUNK "Unknown failure" - IDS_PISTATE_FAILMAX "Maximum failure count reached" - IDS_PISTATE_FAILREG "Not properly registered" -END - -STRINGTABLE -BEGIN - IDS_PISTATE_FAILDIS "Disabled" - IDS_PISTATE_FAILLOD "Failed to initialize" - IDS_PISTATE_PLACEHOLD "Not loaded" - IDS_PISTATE_REG "Not initialized" - IDS_PISTATE_HOLD "Waiting for dependencies" - IDS_PISTATE_INIT "Initializing" - IDS_PISTATE_RUN "Running" - IDS_PISTATE_EXIT "Stopped" - IDS_CTX_PASSWORD "Changing password" - IDS_WT_PASSWORD "Changing password" - IDS_WTPOST_PASSWORD " - Changing password" - IDS_CTX_PROC_PASSWORD "Changing password for %1!s!" - IDS_NC_PWD_FAILED_TITLE "Failed to change password" - IDS_MENU_SETDEF "Set default" - IDS_PACTION_NEXT "Next alert" - IDS_ERR_TITLE_NO_IDENTPRO "Cannot proceed without identity provider" -END - -STRINGTABLE -BEGIN - IDS_ERR_MSG_NO_IDENTPRO "There is no identity provider currently loaded. The identity provider is the component of Network Identity Manager that verifies and performs operations on actual identities. Without this provider, many critical operations cannot be performed." - IDS_ERR_SUGG_NO_IDENTPRO - "This is quite possibly caused by the identity provider module failing to load properly." - IDS_NC_REN_FAILED_TITLE "Failed to renew credentials" - IDS_CW_DEFAULT "(Default)" - IDS_ACTION_OPT_PLUGINS "Plug-ins" - IDS_NC_SETDEF "&Set as default identity" - IDS_NC_ID_DEF "<p>This identity is the default</p>" - IDS_NC_ID_WDEF "<p>Will be the default. (<a id=""NotDef"">Don't make default</a>)</p>" - IDS_NC_ID_NDEF "<p>Not default identity. (<a id=""MakeDef"">make default</a>)</p>" - IDS_PACTION_YES "&Yes" - IDS_PACTION_NO "&No" - IDS_PACTION_YESALL "Y&es to all" - IDS_PACTION_NOALL "N&o to all" - IDS_PACTION_KEEP "&Keep" - IDS_PACTION_REMOVE "&Remove" - IDS_PACTION_DISCARD "&Discard" -END - -STRINGTABLE -BEGIN - IDS_CFG_IT_MOD "Changes need to be applied" - IDS_CFG_IT_APP "Changes have been applied" - IDS_CFG_IT_NONE "No changes" - IDS_CFG_NODESC "(Description for plug-in %s is not available)" - IDS_CFG_P_DELCNFT "About to disable plug-in %s" - IDS_CFG_P_DELCNFM "Are you sure you want to disable plug-in %s ?\n\nOnce disabled, the services provided by the plug-in will no longer be available. In addition, any other plug-ins that depend on this plug-in will also become non functional.\n\nNetwork Identity Manager will need to be restarted for the plug-in to be deactivated." - IDS_CFG_P_DELCNFS "The following plug-ins depend on this plug-in : %s" - IDS_CFG_P_DELNDEP "No other plug-ins depend on this plug-in." - IDS_CFG_P_ENBCNFT "About to enable plug-in %s" - IDS_CFG_P_ENBCNFM "The plug-in %s will be marked as enabled. The plug-in will be come active the next time Network Identity Manager is started." - IDS_PISTATE_FAILINIT "Failed to initialize" - IDS_CFG_P_UNRCNFT "Unregistering plug-in %s" - IDS_CFG_P_UNRCNFM "Are you sure you want to unregister plug-in %s? In addition to this plug-in, any other plug-ins that are provided by the same module will also be unregistered.\n\nThe plug-in will no longer be loaded for subsequent sessions of Network Identity Manager." - IDS_CFG_P_UNRCNFS "Note that if the plug-in was registered by a separate installer, it should be unregistered by the same installer and not through Network Identity Manager.\n\nThe following plug-ins will be unregistered: %s" - IDS_ACTION_LAYOUT_CUST "Custom" - IDS_APR_HEADER_TEXT "Header text" -END - -STRINGTABLE -BEGIN - IDS_APR_HEADER_TEXT_BOLD "Header text (selected)" - IDS_APR_TEXT "Normal text" - IDS_APR_TEXT_BOLD "Normal text (selected)" - IDS_APR_SAMPLE_TEXT_NORMAL "Sample text (normal). 01234567890" - IDS_CFG_APPEAR_SHORT "Appearance" - IDS_CFG_APPEAR_LONG "Appearance" - IDS_ACTION_OPT_APPEAR "Appearance" - IDS_APR_SAMPLE_TEXT_SEL "Sample text (selected). 01234567890" - IDS_CFG_IDNAME_INV "The identity name %s is invalid." - IDS_CFG_IDNAME_PRB "Can't add new identity %s" - IDS_CFG_IDNAME_EXT "The identity name %s already exists." - IDS_CFG_IDNAME_CCR "Can't create new identity. This may be caused by lack of resources or an unknown failure. The code returned was %d." - IDS_CFG_IDNAME_CCC "Can't create identity configuration. This may be caused by lack or resources or not having the correct permissions to create the configuration space. The code returned was %d." - IDS_CFG_LOGF_CS "Can't show log file" - IDS_CFG_LOGF_CSR "The log file %s does not exist." - IDS_ACTIONT_PROPERTIES "Show properties for the current selection" -END - -STRINGTABLE -BEGIN - IDS_ACTIONT_EXIT "Exit Network Identity Manager" - IDS_ACTIONT_SET_DEF_ID "Set the currently selected identity as the default identity" - IDS_ACTIONT_PASSWD_ID "Change the password the currently selected identity" - IDS_ACTIONT_NEW_CRED "Obtain new credentials" - IDS_ACTIONT_RENEW_CRED "Renew or re-obtain credentials for the currently selected identity" - IDS_ACTIONT_DESTROY_CRED "Destroy the selected credentials or identities" - IDS_ACTIONT_VIEW_REFRESH - "Re-obtain information about credentials and refresh the credentials display" - IDS_ACTIONT_OPT_IDENTS "Change options for identities" - IDS_ACTIONT_OPT_KHIM "Change general application settings for Network Identity Manager" - IDS_ACTIONT_OPT_NOTIF "Change notification options" - IDS_ACTIONT_OPT_PLUGINS "Change options for plug-ins and modules" - IDS_ACTIONT_OPT_APPEAR "Change appearance and display settings" - IDS_ACTIONT_HELP_CTX "Display user documentation" - IDS_ACTIONT_IMPORT "Import credentials from external sources such as the Windows LSA" - IDS_NC_FAILED_TITLE_I "Failed to get credentials for %s" - IDS_NC_PWD_FAILED_TITLE_I "Failed to change password for %s" -END - -STRINGTABLE -BEGIN - IDS_NC_REN_FAILED_TITLE_I "Failed to renew credentials 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 "Destroy all identities" - IDS_ACTION_RENEW_ALL "Renew all identities" - IDS_IDACTION_RENEW "Renew %s" - IDS_IDACTION_DESTROY "Destroy %s" - IDS_CTX_DESTROY_ID "Destroying identity %1!s!" - IDS_NCN_IDENT_INVALID "Identity %s is invalid." - IDS_NCN_IDENT_CHECKING "Checking identity %s ..." - IDS_NCN_IDENT_UNKNOWN "Validity of identity %s couldn't be determined." - IDS_REMOTE_FAIL "The instance of Network Identity Manager that is already running is not responding to the remote request properly. Please check if you are running the latest version of Network Identity Manager software included with MIT Kerberos for Windows." - IDS_REMOTE_FAIL_TITLE "Failed to communicate with Network Identity Manager" - IDS_IDACTION_NEW "Obtain new credentials for %s" - IDS_IDACTIONT_NEW "New credentials for %s" -END - -STRINGTABLE -BEGIN - IDS_IDACTIONT_RENEW "Renew credentials for %s" - IDS_IDACTIONT_DESTROY "Destroy credentials for %s" - IDS_ALERTTYPE_PLUGIN "Failed to load plug-in" - IDS_ALERTTYPE_EXPIRE "Credential expiration warning" - IDS_ALERTTYPE_RENEWFAIL "Failed to renew credentials" - IDS_ALERTTYPE_ACQUIREFAIL "Failed to acquire credentials" - IDS_ALERTTYPE_CHPW "Failed to change password" - IDS_ACTION_LAYOUT_MINI "&Advanced" - IDS_IDEXPDISP_NOCRED "(This identity has no credentials)" - IDS_IDEXPDISP_1CRED "(This identity has 1 credential)" - IDS_IDEXPDISP_NCRED "(This identity has %d credentials)" - IDS_CW_DEFAULTTF "(Default, %s)" - IDS_CW_TYPEF "(%s)" - IDS_CW_EXPIREF "Expires in %s" - IDS_CW_EXPIRED "(Expired)" - IDS_IDACTIONT_SETDEF "Set %s as default identity" -END - -STRINGTABLE -BEGIN - IDS_IDACTION_SETDEF "%s" - IDS_ACTION_VIEW_ALL_IDS "All identities" -END - -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - - - - - - diff --git a/src/windows/identity/ui/main.c b/src/windows/identity/ui/main.c deleted file mode 100644 index d1d3ecdca..000000000 --- a/src/windows/identity/ui/main.c +++ /dev/null @@ -1,1075 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * Copyright (2) 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<shlwapi.h> -#include<khmapp.h> -#include<netidmgr_intver.h> - -/* used for the command-line help dialog */ -#include<richedit.h> - -#if DEBUG -#include<assert.h> - -#if defined(KH_BUILD_PRIVATE) || defined(KH_BUILD_SPECIAL) -/* needed for writing out leaked allocation and handle report */ -#include<stdio.h> -#endif - -#endif - -HINSTANCE khm_hInstance; -const wchar_t * khm_facility = L"NetIDMgr"; -int khm_nCmdShow; -khm_ui_4 khm_commctl_version = 0; - -khm_startup_options khm_startup; - -const khm_version app_version = {KH_VERSION_LIST}; - -HRESULT hr_coinitialize = S_OK; - -#if defined(DEBUG) && (defined(KH_BUILD_PRIVATE) || defined(KH_BUILD_SPECIAL)) - -KHMEXP void KHMAPI khcint_dump_handles(FILE * f); -KHMEXP void KHMAPI perf_dump(FILE * f); -KHMEXP void KHMAPI kmqint_dump(FILE * f); - -#endif - -void khm_init_gui(void) { - - hr_coinitialize = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - khui_init_actions(); - khui_init_rescache(); - khui_init_menu(); - khui_init_toolbar(); - khm_init_notifier(); - khm_init_config(); - khm_init_debug(); - khm_init_taskbar_funcs(); -} - -void khm_exit_gui(void) { - khm_exit_taskbar_funcs(); - khm_exit_debug(); - khm_exit_config(); - khm_exit_notifier(); - khui_exit_toolbar(); - khui_exit_menu(); - khui_exit_rescache(); - khui_exit_actions(); - - if (hr_coinitialize == S_OK || - hr_coinitialize == S_FALSE) { - CoUninitialize(); - } -} - -/* This is passed into EnumResourceLanguages(). This returns the - language ID of the first resource of the type and name that's - passed into it. For the resources types we care about, we only - expect there to be one resource for a given name. At the moment we - don't support resource modules that contain resources for multiple - languages. */ -BOOL CALLBACK -khm_enum_res_lang_proc_first(HANDLE hModule, - LPCTSTR lpszType, - LPCTSTR lpszName, - WORD wIDLanguage, - LONG_PTR lParam) -{ - WORD * plangid = (WORD *) lParam; - - *plangid = wIDLanguage; - - return FALSE; -} - -#define KHM_RTF_RESOURCE L"KHMRTFRESOURCE" - -INT_PTR CALLBACK -khm_cmdline_dlg_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) -{ - switch(uMsg) { - case WM_INITDIALOG: - { - WORD langID = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT); - HRSRC h_resinfo = NULL; - HGLOBAL h_resource = NULL; - LPVOID h_resmem = NULL; - SETTEXTEX ste; - - SetDlgItemText(hwnd, IDC_PRODUCT, - TEXT(KH_VERSTR_PRODUCT_1033)); -#ifdef OVERRIDE_COPYRIGHT - SetDlgItemText(hwnd, IDC_COPYRIGHT, - TEXT(KH_VERSTR_COPYRIGHT_1033)); -#endif - - EnumResourceLanguages(khm_hInstance, - KHM_RTF_RESOURCE, - MAKEINTRESOURCE(IDR_CMDLINERTF), - khm_enum_res_lang_proc_first, - (LONG_PTR) &langID); - - h_resinfo = FindResourceEx(khm_hInstance, - KHM_RTF_RESOURCE, - MAKEINTRESOURCE(IDR_CMDLINERTF), - langID); - if (h_resinfo == NULL) - goto init_failed; - - h_resource = LoadResource(khm_hInstance, h_resinfo); - if (h_resinfo == NULL) - goto init_failed; - - h_resmem = LockResource(h_resource); - if (h_resmem == NULL) - goto init_failed; - - ste.flags = ST_DEFAULT; - ste.codepage = CP_ACP; - - SendDlgItemMessage(hwnd, IDC_CONTENT, EM_SETTEXTEX, (WPARAM) &ste, (LPARAM) h_resmem); - init_failed: - /* none of the above handles need to be freed. */ - - return TRUE; - } - break; - - case WM_COMMAND: - - if (wParam == MAKEWPARAM(IDOK, BN_CLICKED)) { - EndDialog(hwnd, KHM_ERROR_EXIT); - } - - return TRUE; - - case WM_CLOSE: - - EndDialog(hwnd, KHM_ERROR_EXIT); - - return TRUE; - } - - return FALSE; -} - -void khm_show_commandline_help(void) { - HMODULE hm_richedit; - - hm_richedit = LoadLibrary(L"riched20.dll"); - if (hm_richedit == NULL) - return; - - DialogBox(khm_hInstance, MAKEINTRESOURCE(IDD_CMDLINE), - NULL, khm_cmdline_dlg_proc); - - FreeLibrary(hm_richedit); -} - -void khm_parse_commandline(void) { - LPWSTR wcmdline; - LPWSTR * wargs; - int wargc; - int i; - - ZeroMemory(&khm_startup, sizeof(khm_startup)); - - wcmdline = GetCommandLine(); - wargs = CommandLineToArgvW(wcmdline, &wargc); - - for (i=1; i<wargc; i++) { - if (!wcscmp(wargs[i], L"-i") || - !wcscmp(wargs[i], L"--kinit") || - !wcscmp(wargs[i], L"-kinit")) { - khm_startup.init = TRUE; - khm_startup.exit = TRUE; - khm_startup.no_main_window = TRUE; - khm_startup.display |= SOPTS_DISPLAY_NODEF; - } - else if (!wcscmp(wargs[i], L"-m") || - !wcscmp(wargs[i], L"--import") || - !wcscmp(wargs[i], L"-import")) { - khm_startup.import = TRUE; - khm_startup.exit = TRUE; - khm_startup.no_main_window = TRUE; - khm_startup.display |= SOPTS_DISPLAY_NODEF; - } - else if (!wcscmp(wargs[i], L"-r") || - !wcscmp(wargs[i], L"--renew") || - !wcscmp(wargs[i], L"-renew")) { - khm_startup.renew = TRUE; - khm_startup.exit = TRUE; - khm_startup.no_main_window = TRUE; - khm_startup.display |= SOPTS_DISPLAY_NODEF; - } - else if (!wcscmp(wargs[i], L"-d") || - !wcscmp(wargs[i], L"--destroy") || - !wcscmp(wargs[i], L"-destroy")) { - khm_startup.destroy = TRUE; - khm_startup.exit = TRUE; - khm_startup.no_main_window = TRUE; - khm_startup.display |= SOPTS_DISPLAY_NODEF; - } - else if (!wcscmp(wargs[i], L"-a") || - !wcscmp(wargs[i], L"--autoinit") || - !wcscmp(wargs[i], L"-autoinit")) { - khm_startup.autoinit = TRUE; - khm_startup.display |= SOPTS_DISPLAY_NODEF; - } - else if (!wcscmp(wargs[i], L"-x") || - !wcscmp(wargs[i], L"--exit") || - !wcscmp(wargs[i], L"-exit")) { - khm_startup.exit = TRUE; - khm_startup.remote_exit = TRUE; - khm_startup.no_main_window = TRUE; - khm_startup.display |= SOPTS_DISPLAY_NODEF; - } - else if (!wcscmp(wargs[i], L"--minimized")) { - khm_startup.no_main_window = TRUE; - khm_startup.display |= SOPTS_DISPLAY_NODEF; - } - else if (!wcscmp(wargs[i], L"--show")) { - if (khm_startup.display & SOPTS_DISPLAY_HIDE) { - khm_show_commandline_help(); - khm_startup.error_exit = TRUE; - break; - } - - khm_startup.display |= (SOPTS_DISPLAY_SHOW | SOPTS_DISPLAY_NODEF); - } - else if (!wcscmp(wargs[i], L"--hide")) { - if (khm_startup.display & SOPTS_DISPLAY_SHOW) { - khm_show_commandline_help(); - khm_startup.error_exit = TRUE; - break; - } - - khm_startup.display |= (SOPTS_DISPLAY_HIDE | SOPTS_DISPLAY_NODEF); - khm_startup.no_main_window = TRUE; - } - else { - khm_show_commandline_help(); - - khm_startup.error_exit = TRUE; - break; - } - } - - /* special: always enable renew when other options aren't specified */ - if (!khm_startup.exit && - !khm_startup.destroy && - !khm_startup.init && - !khm_startup.remote_exit && - !khm_startup.display) - khm_startup.renew = TRUE; -} - -void khm_register_window_classes(void) { - INITCOMMONCONTROLSEX ics; - - ZeroMemory(&ics, sizeof(ics)); - ics.dwSize = sizeof(ics); - ics.dwICC = - ICC_COOL_CLASSES | - ICC_BAR_CLASSES | - ICC_DATE_CLASSES | - ICC_HOTKEY_CLASS | - ICC_LISTVIEW_CLASSES | - ICC_TAB_CLASSES | - ICC_INTERNET_CLASSES | -#if (_WIN32_WINNT >= 0x501) - ((IS_COMMCTL6())? - ICC_LINK_CLASS | - ICC_STANDARD_CLASSES : - 0) | -#endif - 0; - - InitCommonControlsEx(&ics); - - khm_register_main_wnd_class(); - khm_register_credwnd_class(); - khm_register_htwnd_class(); - khm_register_passwnd_class(); - khm_register_newcredwnd_class(); - khm_register_propertywnd_class(); -} - -void khm_unregister_window_classes(void) { - khm_unregister_main_wnd_class(); - khm_unregister_credwnd_class(); - khm_unregister_htwnd_class(); - khm_unregister_passwnd_class(); - khm_unregister_newcredwnd_class(); - khm_unregister_propertywnd_class(); -} - - -/* we support up to 16 simutaneous dialogs. In reality, more than two - is pretty unlikely. Property sheets are special and are handled - separately. */ -#define MAX_UI_DIALOGS 16 - -typedef struct tag_khui_dialog { - HWND hwnd; - HWND hwnd_next; - BOOL active; -} khui_dialog; - -static khui_dialog khui_dialogs[MAX_UI_DIALOGS]; -static int n_khui_dialogs = 0; -static HWND khui_modal_dialog = NULL; -static BOOL khui_main_window_active; - -/* should only be called from the UI thread */ -void khm_add_dialog(HWND dlg) { - if(n_khui_dialogs < MAX_UI_DIALOGS - 1) { - khui_dialogs[n_khui_dialogs].hwnd = dlg; - khui_dialogs[n_khui_dialogs].hwnd_next = NULL; - khui_dialogs[n_khui_dialogs].active = TRUE; - n_khui_dialogs++; - } else { -#if DEBUG - assert(FALSE); -#endif - } -} - -/* should only be called from the UI thread */ -void khm_enter_modal(HWND hwnd) { - int i; - - if (khui_modal_dialog) { - - /* we are already in a modal loop. */ - -#ifdef DEBUG - assert(hwnd != khui_modal_dialog); -#endif - - for (i=0; i < n_khui_dialogs; i++) { - if (khui_dialogs[i].hwnd == khui_modal_dialog) { - khui_dialogs[i].active = TRUE; - EnableWindow(khui_modal_dialog, FALSE); - break; - } - } - -#ifdef DEBUG - assert(i < n_khui_dialogs); -#endif - - for (i=0; i < n_khui_dialogs; i++) { - if (khui_dialogs[i].hwnd == hwnd) { - khui_dialogs[i].hwnd_next = khui_modal_dialog; - break; - } - } - -#ifdef DEBUG - assert(i < n_khui_dialogs); -#endif - - khui_modal_dialog = hwnd; - - } else { - - /* we are entering a modal loop. preserve the active state of - the overlapped dialogs and proceed with the modal - dialog. */ - - for (i=0; i < n_khui_dialogs; i++) { - if(khui_dialogs[i].hwnd != hwnd) { - khui_dialogs[i].active = IsWindowEnabled(khui_dialogs[i].hwnd); - EnableWindow(khui_dialogs[i].hwnd, FALSE); - } - } - - khui_main_window_active = khm_is_main_window_active(); - EnableWindow(khm_hwnd_main, FALSE); - - khui_modal_dialog = hwnd; - - SetForegroundWindow(hwnd); - } -} - -/* should only be called from the UI thread */ -void khm_leave_modal(void) { - int i; - - for (i=0; i < n_khui_dialogs; i++) { - if (khui_dialogs[i].hwnd == khui_modal_dialog) - break; - } - -#ifdef DEBUG - assert(i < n_khui_dialogs); -#endif - - if (i < n_khui_dialogs && khui_dialogs[i].hwnd_next) { - - /* we need to proceed to the next one down the modal dialog - chain. We are not exiting a modal loop. */ - - khui_modal_dialog = khui_dialogs[i].hwnd_next; - khui_dialogs[i].hwnd_next = FALSE; - - EnableWindow(khui_modal_dialog, TRUE); - - } else { - - HWND last_dialog = NULL; - - /* we are exiting a modal loop. */ - - for (i=0; i < n_khui_dialogs; i++) { - if(khui_dialogs[i].hwnd != khui_modal_dialog) { - EnableWindow(khui_dialogs[i].hwnd, khui_dialogs[i].active); - last_dialog = khui_dialogs[i].hwnd; - } - } - - EnableWindow(khm_hwnd_main, TRUE); - - khui_modal_dialog = NULL; - - if(last_dialog) - SetActiveWindow(last_dialog); - else - SetActiveWindow(khm_hwnd_main); - } -} - -/* should only be called from the UI thread */ -void khm_del_dialog(HWND dlg) { - int i; - for(i=0;i < n_khui_dialogs; i++) { - if(khui_dialogs[i].hwnd == dlg) - break; - } - - if(i < n_khui_dialogs) - n_khui_dialogs--; - else - return; - - for(;i < n_khui_dialogs; i++) { - khui_dialogs[i] = khui_dialogs[i+1]; - } -} - -BOOL khm_check_dlg_message(LPMSG pmsg) { - int i; - BOOL found = FALSE; - for(i=0;i<n_khui_dialogs;i++) { - if(IsDialogMessage(khui_dialogs[i].hwnd, pmsg)) { - found = TRUE; - break; - } - } - - return found; -} - -BOOL khm_is_dialog_active(void) { - HWND hwnd; - int i; - - hwnd = GetForegroundWindow(); - - for (i=0; i<n_khui_dialogs; i++) { - if (khui_dialogs[i].hwnd == hwnd) - return TRUE; - } - - return FALSE; -} - -/* We support at most 256 property sheets simultaneously. 256 - property sheets should be enough for everybody. */ -#define MAX_UI_PROPSHEETS 256 - -khui_property_sheet *_ui_propsheets[MAX_UI_PROPSHEETS]; -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 - assert(FALSE); -#endif - } -} - -void khm_del_property_sheet(khui_property_sheet * s) { - int i; - - for(i=0;i < _n_ui_propsheets; i++) { - if(_ui_propsheets[i] == s) - break; - } - - if(i < _n_ui_propsheets) - _n_ui_propsheets--; - else - return; - - for(;i < _n_ui_propsheets; i++) { - _ui_propsheets[i] = _ui_propsheets[i+1]; - } -} - -BOOL khm_check_ps_message(LPMSG pmsg) { - int i; - khui_property_sheet * ps; - for(i=0;i<_n_ui_propsheets;i++) { - if(khui_ps_check_message(_ui_propsheets[i], pmsg)) { - if(_ui_propsheets[i]->status == KHUI_PS_STATUS_DONE) { - ps = _ui_propsheets[i]; - - ps->status = KHUI_PS_STATUS_DESTROY; - kmq_post_message(KMSG_CRED, KMSG_CRED_PP_END, 0, (void *) ps); - - return TRUE; - } - return TRUE; - } - } - - return FALSE; -} - -static HACCEL ha_menu; - -WPARAM khm_message_loop_int(khm_boolean * p_exit) { - int r; - MSG msg; - - while((r = GetMessage(&msg, NULL, 0,0)) && - (p_exit == NULL || *p_exit)) { - if(r == -1) - break; - if(!khm_check_dlg_message(&msg) && - !khm_check_ps_message(&msg) && - !TranslateAccelerator(khm_hwnd_main, ha_menu, &msg)) { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } - - return msg.wParam; -} - -WPARAM khm_message_loop(void) { - WPARAM w; - ha_menu = khui_create_global_accel_table(); - w = khm_message_loop_int(NULL); - DestroyAcceleratorTable(ha_menu); - return w; -} - -/* Handles all context closures which have a signalled error state. - If the context is a top level context, then the errors are - displayed. */ -void KHMAPI -khm_err_ctx_completion_handler(enum kherr_ctx_event evt, - kherr_context * c) { - kherr_event * e; - khui_alert * a; - - /* we only handle top level contexts here. For others, we allow - the child contexts to fold upward silently. */ - if (c->parent || !kherr_is_error_i(c)) - return; - - for(e = kherr_get_first_event(c); - e; - e = kherr_get_next_event(e)) { - - if (e->severity != KHERR_ERROR && e->severity != KHERR_WARNING) - continue; - - kherr_evaluate_event(e); - - /* we only report errors if there is enough information to - present a message. */ - if (e->short_desc && e->long_desc) { - - khui_alert_create_empty(&a); - - khui_alert_set_severity(a, e->severity); - khui_alert_set_title(a, e->short_desc); - khui_alert_set_message(a, e->long_desc); - if (e->suggestion) - khui_alert_set_suggestion(a, e->suggestion); - - khui_alert_queue(a); - - khui_alert_release(a); - } - } -} - -static wchar_t helpfile[MAX_PATH] = L""; - -HWND khm_html_help(HWND hwnd, wchar_t * suffix, - UINT command, DWORD_PTR data) { - - wchar_t gpath[MAX_PATH + MAX_PATH]; - - if (!*helpfile) { - DWORD dw; - wchar_t ppath[MAX_PATH]; - - dw = GetModuleFileName(NULL, ppath, ARRAYLENGTH(ppath)); - - if (dw == 0) { - StringCbCopy(helpfile, sizeof(helpfile), NIDM_HELPFILE); - } else { - PathRemoveFileSpec(ppath); - PathAppend(ppath, NIDM_HELPFILE); - StringCbCopy(helpfile, sizeof(helpfile), ppath); - } - } - - StringCbCopy(gpath, sizeof(gpath), helpfile); - - if (suffix) - StringCbCat(gpath, sizeof(gpath), suffix); - - return HtmlHelp(hwnd, gpath, command, data); -} - -void khm_load_default_modules(void) { - kmm_load_default_modules(); -} - -int khm_compare_version(const khm_version * v1, const khm_version * v2) { - - if (v1->major != v2->major) - return ((int)v1->major) - ((int)v2->major); - - if (v1->minor != v2->minor) - return ((int)v1->minor) - ((int)v2->minor); - - if (v1->patch != v2->patch) - return ((int)v1->patch) - ((int)v2->patch); - - return ((int)v1->aux - ((int)v2->aux)); -} - -int WINAPI WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpCmdLine, - int nCmdShow) -{ - int rv = 0; - HANDLE h_appmutex; - BOOL slave = FALSE; - int mutex_retries = 5; - - khm_hInstance = hInstance; - khm_nCmdShow = nCmdShow; - - khm_parse_commandline(); - - if (khm_startup.error_exit) - return 0; - - _retry_mutex: - - if (--mutex_retries < 0) - return 2; - - h_appmutex = CreateMutex(NULL, FALSE, L"Local\\NetIDMgr_GlobalAppMutex"); - if (h_appmutex == NULL) - return 5; - if (GetLastError() == ERROR_ALREADY_EXISTS) - slave = TRUE; - - khc_load_schema(NULL, schema_uiconfig); - - _start_app: - - if(!slave) { - - PDESCTHREAD(L"UI", L"App"); - - /* set this so that we don't accidently invoke an API that - inadvertently puts up the new creds dialog at an - inopportune moment, like, say, during the new creds dialog - is open. This only affects this process, and any child - processes started by plugins. */ - SetEnvironmentVariable(L"KERBEROSLOGIN_NEVER_PROMPT", L"1"); - - khm_version_init(); - - khm_commctl_version = khm_get_commctl_version(NULL); - - /* we only open a main window if this is the only instance - of the application that is running. */ - kmq_init(); - khm_init_gui(); - kmm_init(); - - kmq_set_completion_handler(KMSG_CRED, kmsg_cred_completion); - - kherr_add_ctx_handler(khm_err_ctx_completion_handler, - KHERR_CTX_END, - 0); - - /* load the standard plugins */ - khm_load_default_modules(); - - khm_register_window_classes(); - - khm_init_request_daemon(); - - khm_create_main_window(); - - if (!khm_startup.no_main_window && - nCmdShow != SW_SHOWMINNOACTIVE && - nCmdShow != SW_MINIMIZE && - nCmdShow != SW_SHOWMINIMIZED) { - - khm_show_main_window(); - } - - khm_refresh_config(); - - rv = (int) khm_message_loop(); - - kmq_set_completion_handler(KMSG_CRED, NULL); - - khm_exit_request_daemon(); - - kmm_exit(); - khm_exit_gui(); - khm_unregister_window_classes(); - kmq_exit(); - - CloseHandle(h_appmutex); - } else { - - /* There is an instance of NetIDMgr already running. */ - - HWND hwnd = NULL; - int retries = 5; - HANDLE hmap; - wchar_t mapname[256]; - DWORD tid; - void * xfer; - khm_query_app_version query_app_version; - khm_version v; - BOOL use_cmd_v1 = FALSE; - khm_size cb = 0; - - CloseHandle(h_appmutex); - - while (hwnd == NULL && retries) { - hwnd = FindWindowEx(NULL, NULL, KHUI_MAIN_WINDOW_CLASS, NULL); - - if (hwnd) - break; - - retries--; - - /* if the app was just starting, we might have to wait - till the main window is created. */ - - Sleep(1000); - } - - if (!hwnd) { - - /* if the app was just exiting, we might see the mutex but - not the window. We go back and check if the mutex is - still there. */ - - goto _retry_mutex; - } - - /* first check if the remote instance supports a version - query */ - - StringCbPrintf(mapname, sizeof(mapname), - QUERY_APP_VER_MAP_FMT, - (tid = GetCurrentThreadId())); - - hmap = CreateFileMapping(INVALID_HANDLE_VALUE, - NULL, - PAGE_READWRITE, - 0, - 4096, - mapname); - - if (hmap == NULL) - return 3; - - xfer = MapViewOfFile(hmap, FILE_MAP_WRITE, 0, 0, - sizeof(query_app_version)); - - ZeroMemory(&query_app_version, sizeof(query_app_version)); - - if (xfer) { - query_app_version.magic = KHM_QUERY_APP_VER_MAGIC; - query_app_version.code = KHM_ERROR_NOT_IMPLEMENTED; - query_app_version.ver_caller = app_version; - - query_app_version.request_swap = TRUE; - - memcpy(xfer, &query_app_version, sizeof(query_app_version)); - - SendMessage(hwnd, WM_KHUI_QUERY_APP_VERSION, - 0, (LPARAM) tid); - - memcpy(&query_app_version, xfer, sizeof(query_app_version)); - - UnmapViewOfFile(xfer); - xfer = NULL; - } - - CloseHandle(hmap); - hmap = NULL; - - if (query_app_version.magic != KHM_QUERY_APP_VER_MAGIC || - query_app_version.code != KHM_ERROR_SUCCESS) { - - /* We managed to communicate with the remote instance, but - it didn't send us useful information. The remote - instance is not running an actual NetIDMgr instance. - However, it owns a top level window that was registered - with our classname. This instance won't function - properly if we let it proceed. - */ - - wchar_t error_msg[1024]; - wchar_t error_title[256]; - - LoadString(khm_hInstance, IDS_REMOTE_FAIL_TITLE, - error_title, ARRAYLENGTH(error_title)); - LoadString(khm_hInstance, IDS_REMOTE_FAIL, - error_msg, ARRAYLENGTH(error_msg)); - - MessageBox(NULL, error_msg, error_title, - MB_OK); - - goto done_with_remote; - } - - if (query_app_version.code == KHM_ERROR_SUCCESS && - query_app_version.request_swap) { - /* the request for swap was granted. We can now - initialize our instance as the master instance. */ - - slave = FALSE; - goto _start_app; - } - - /* Now we can work on sending the command-line to the remote - instance. However we need to figure out which version of - the startup structure it supports. */ - v.major = 1; - v.minor = 2; - v.patch = 0; - v.aux = 0; - - if (khm_compare_version(&query_app_version.ver_remote, &app_version) == 0 || - khm_compare_version(&query_app_version.ver_remote, &v) > 0) - use_cmd_v1 = FALSE; - else - use_cmd_v1 = TRUE; - - StringCbPrintf(mapname, sizeof(mapname), - COMMANDLINE_MAP_FMT, - (tid = GetCurrentThreadId())); - - cb = max(sizeof(khm_startup_options_v1), - sizeof(khm_startup_options_v2)); - - cb = UBOUNDSS(cb, 4096, 4096); - -#ifdef DEBUG - assert(cb >= 4096); -#endif - - hmap = CreateFileMapping(INVALID_HANDLE_VALUE, - NULL, - PAGE_READWRITE, - 0, - (DWORD) cb, - mapname); - - if (hmap == NULL) - return 3; - - /* make the call */ - - if (!use_cmd_v1) { - /* use the v2 structure */ - khm_startup_options_v3 opt; - khm_startup_options_v3 *xferopt; - - ZeroMemory(&opt, sizeof(opt)); - - opt.v2opt.magic = STARTUP_OPTIONS_MAGIC; - - opt.v2opt.init = khm_startup.init; - opt.v2opt.import = khm_startup.import; - opt.v2opt.renew = khm_startup.renew; - opt.v2opt.destroy = khm_startup.destroy; - opt.v2opt.autoinit = khm_startup.autoinit; - opt.v2opt.remote_exit = khm_startup.remote_exit; - opt.remote_display = khm_startup.display; - - opt.v2opt.code = KHM_ERROR_NOT_IMPLEMENTED; - - /* check if we can use the v3 options structure. This - should be possible for 1.3.1 and above. */ - v.major = 1; v.minor = 3; v.patch = 1; v.aux = 0; - if (khm_compare_version(&query_app_version.ver_remote, &app_version) == 0 || - khm_compare_version(&query_app_version.ver_remote, &v) >= 0) { - - opt.v2opt.cb_size = sizeof(opt); - - } else { - - opt.v2opt.cb_size = sizeof(opt.v2opt); - - } - - xfer = MapViewOfFile(hmap, - FILE_MAP_WRITE, - 0, 0, - opt.v2opt.cb_size); - - xferopt = (khm_startup_options_v3 *) xfer; - - if (xfer) { - memcpy(xfer, &opt, opt.v2opt.cb_size); - - SendMessage(hwnd, WM_KHUI_ASSIGN_COMMANDLINE_V2, - 0, (LPARAM) tid); - - /* If it looks like the request was not processed, and - we were using a v3 request, fail-over to a v2 - request. */ - if (xferopt->v2opt.code == KHM_ERROR_NOT_IMPLEMENTED && - opt.v2opt.cb_size == sizeof(opt)) { - - opt.v2opt.cb_size = sizeof(opt.v2opt); - memcpy(xfer, &opt, opt.v2opt.cb_size); - - SendMessage(hwnd, WM_KHUI_ASSIGN_COMMANDLINE_V2, - 0, (LPARAM) tid); - } - - /* if it still looks like the request was not - processed, we failover to a v1 call */ - if (xferopt->v2opt.code == KHM_ERROR_NOT_IMPLEMENTED) { - use_cmd_v1 = TRUE; - } else { - memcpy(&opt, xfer, opt.v2opt.cb_size); - } - - UnmapViewOfFile(xfer); - xfer = NULL; - } - } - - if (use_cmd_v1) { - /* use the v1 structure */ - - khm_startup_options_v1 v1opt; - - ZeroMemory(&v1opt, sizeof(v1opt)); - - v1opt.init = khm_startup.init; - v1opt.import = khm_startup.import; - v1opt.renew = khm_startup.renew; - v1opt.destroy = khm_startup.destroy; - v1opt.autoinit = khm_startup.autoinit; - - xfer = MapViewOfFile(hmap, - FILE_MAP_WRITE, - 0, 0, - sizeof(v1opt)); - - if (xfer) { - memcpy(xfer, &v1opt, sizeof(v1opt)); - - SendMessage(hwnd, WM_KHUI_ASSIGN_COMMANDLINE_V1, - 0, (LPARAM) tid); - - UnmapViewOfFile(xfer); - xfer = NULL; - } - } - - done_with_remote: - - if (hmap) - CloseHandle(hmap); - } - -#if defined(DEBUG) && (defined(KH_BUILD_PRIVATE) || defined(KH_BUILD_SPECIAL)) - { - FILE * f = NULL; - -#if _MSC_VER >= 1400 && __STDC_WANT_SECURE_LIB__ - if (fopen_s(&f, "memleak.txt", "w") != 0) - goto done_with_dump; -#else - f = fopen("memleak.txt", "w"); - if (f == NULL) - goto done_with_dump; -#endif - - perf_dump(f); - khcint_dump_handles(f); - kmqint_dump(f); - - fclose(f); - - done_with_dump: - ; - } -#endif - - return rv; -} diff --git a/src/windows/identity/ui/mainmenu.c b/src/windows/identity/ui/mainmenu.c deleted file mode 100644 index d61b8d7cc..000000000 --- a/src/windows/identity/ui/mainmenu.c +++ /dev/null @@ -1,1233 +0,0 @@ -/* - * 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 - * 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<khmapp.h> -#include<assert.h> - -HWND khui_main_menu_toolbar; -int mm_last_hot_item = -1; -int mm_next_hot_item = -1; -BOOL mm_hot_track = FALSE; - -#define MAX_ILIST 256 -/* not the same as MENU_SIZE_ICON_* */ -#define ILIST_ICON_X 16 -#define ILIST_ICON_Y 15 - -khui_ilist * il_icon; -int il_icon_id[MAX_ILIST]; - -void khui_init_menu(void) { - int i; - - il_icon = khui_create_ilist(ILIST_ICON_X, - ILIST_ICON_Y, - MAX_ILIST, 5, 0); - for(i=0;i<MAX_ILIST;i++) - il_icon_id[i] = -1; - - khm_refresh_identity_menus(); -} - -void khui_exit_menu(void) { - khui_delete_ilist(il_icon); -} - -int khui_get_icon_index(int id) { - int i; - HBITMAP hbm; - - for(i=0;i<MAX_ILIST;i++) - if(il_icon_id[i] == id) { - return i; - } - - hbm = LoadImage(khm_hInstance, - MAKEINTRESOURCE(id), - IMAGE_BITMAP, - ILIST_ICON_X, ILIST_ICON_Y, - LR_DEFAULTCOLOR); - i = khui_ilist_add_masked(il_icon, hbm, KHUI_TOOLBAR_BGCOLOR); - il_icon_id[i] = id; - DeleteObject(hbm); - - return i; -} - -void khm_get_action_caption(khm_int32 action, wchar_t * buf, khm_size cb_buf) { - khui_action * act; - - StringCbCopy(buf, cb_buf, L""); - - khui_action_lock(); - act = khui_find_action(action); - - if (act == NULL) - goto done; - - if (act->caption) { - StringCbCopy(buf, cb_buf, act->caption); - } else if (act->is_caption) { - LoadString(khm_hInstance, act->is_caption, - buf, (int)(cb_buf / sizeof(wchar_t))); - } - - done: - khui_action_unlock(); -} - -void khm_get_action_tooltip(khm_int32 action, wchar_t * buf, khm_size cb_buf) { - khui_action * act; - - StringCbCopy(buf, cb_buf, L""); - - khui_action_lock(); - act = khui_find_action(action); - - if (act == NULL) - goto done; - - if (act->tooltip) { - StringCbCopy(buf, cb_buf, act->tooltip); - } else if (act->is_tooltip) { - LoadString(khm_hInstance, act->is_tooltip, - buf, (int) (cb_buf / sizeof(wchar_t))); - } - - done: - khui_action_unlock(); -} - -void add_action_to_menu(HMENU hm, khui_action * act, - int idx, int flags) { - MENUITEMINFO mii; - wchar_t buf[MAX_RES_STRING] = L""; - wchar_t accel[MAX_RES_STRING] = L""; - - assert(!act || act->cmd); - - mii.cbSize = sizeof(mii); - mii.fMask = 0; - - if(act == NULL) { - mii.fMask = MIIM_FTYPE; - mii.fType = MFT_SEPARATOR; - } else { - khui_menu_def * def; - - if (act->type == KHUI_ACTIONTYPE_IDENTITY) { - mii.fMask = MIIM_FTYPE | MIIM_ID | MIIM_DATA; - mii.fType = MFT_OWNERDRAW; - - mii.dwTypeData = 0; - mii.dwItemData = 0; - } else { - khm_get_action_caption(act->cmd, buf, sizeof(buf)); - - if(khui_get_cmd_accel_string(act->cmd, accel, - ARRAYLENGTH(accel))) { - StringCbCat(buf, sizeof(buf), L"\t"); - StringCbCat(buf, sizeof(buf), accel); - } - - mii.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_ID; - mii.fType = MFT_STRING; - - mii.dwTypeData = buf; - mii.cch = (int) wcslen(buf); - } - - mii.wID = act->cmd; - - if(act->state & KHUI_ACTIONSTATE_DISABLED) { - mii.fMask |= MIIM_STATE; - mii.fState = MFS_DISABLED; - } else { - mii.fState = 0; - } - - if((act->type & KHUI_ACTIONTYPE_TOGGLE) && - (act->state & KHUI_ACTIONSTATE_CHECKED)) { - mii.fMask |= MIIM_STATE; - mii.fState |= MFS_CHECKED; - } - - if(act->ib_icon) { - mii.fMask |= MIIM_BITMAP; - mii.hbmpItem = HBMMENU_CALLBACK; - } - - if (flags & KHUI_ACTIONREF_SUBMENU) { - def = khui_find_menu(act->cmd); - if(def) { - mii.fMask |= MIIM_SUBMENU; - mii.hSubMenu = mm_create_menu_from_def(def, FALSE); - } - } - - if(flags & KHUI_ACTIONREF_DEFAULT) { - mii.fMask |= MIIM_STATE; - mii.fState |= MFS_DEFAULT; - } - } - - InsertMenuItem(hm,idx,TRUE,&mii); -} - -static void refresh_menu(HMENU hm, khui_menu_def * def); - -static int refresh_menu_item(HMENU hm, khui_action * act, - int idx, int flags) { - MENUITEMINFO mii; - khui_menu_def * def; - - mii.cbSize = sizeof(mii); - mii.fMask = 0; - - if (flags & KHUI_ACTIONREF_END) { - /* we have been asked to assert that the menu doesn't have - more than idx items */ - mii.fMask = MIIM_FTYPE; - while (GetMenuItemInfo(hm, idx, TRUE, &mii)) { - RemoveMenu(hm, idx, MF_BYPOSITION); - mii.fMask = MIIM_FTYPE; - } - - return 0; - } - - /* Check if the menu item is there. Otherwise we need to add - it. */ - mii.fMask = MIIM_STATE | MIIM_ID | MIIM_FTYPE; - if (!GetMenuItemInfo(hm, idx, TRUE, &mii) || - ((flags & KHUI_ACTIONREF_SEP) && !(mii.fType & MFT_SEPARATOR)) || - (!(flags & KHUI_ACTIONREF_SEP) && mii.wID != (WORD) act->cmd)) { - add_action_to_menu(hm, ((flags & KHUI_ACTIONREF_SEP)? NULL : act), - idx, flags); - return 0; - } - - if (flags & KHUI_ACTIONREF_SEP) - return 0; - -#ifdef DEBUG - assert(act); -#endif - if (!act) - return 0; - - if (flags & KHUI_ACTIONREF_DEFAULT) { - if (!(mii.fState & MFS_DEFAULT)) { - mii.fMask |= MIIM_STATE; - mii.fState |= MFS_DEFAULT; - } - } else { - if (mii.fState & MFS_DEFAULT) { - RemoveMenu(hm, idx, MF_BYPOSITION); - add_action_to_menu(hm, act, idx, flags); - return 0; - } - } - - mii.fMask = 0; - - if(act->state & KHUI_ACTIONSTATE_DISABLED) { - mii.fMask |= MIIM_STATE; - mii.fState &= ~MFS_ENABLED; - mii.fState |= MFS_DISABLED; - } else { - mii.fMask |= MIIM_STATE; - mii.fState &= ~MFS_DISABLED; - mii.fState |= MFS_ENABLED; - } - - if(act->type & KHUI_ACTIONTYPE_TOGGLE) { - mii.fMask |= MIIM_STATE; - if (act->state & KHUI_ACTIONSTATE_CHECKED) { - mii.fState &= ~MFS_UNCHECKED; - mii.fState |= MFS_CHECKED; - } else { - mii.fState &= ~MFS_CHECKED; - mii.fState |= MFS_UNCHECKED; - } - } - - SetMenuItemInfo(hm, act->cmd, FALSE, &mii); - - def = khui_find_menu(act->cmd); - - if(def) { - MENUITEMINFO mii2; - - mii2.cbSize = sizeof(mii2); - mii2.fMask = MIIM_SUBMENU; - - if (GetMenuItemInfo(hm, act->cmd, FALSE, &mii2)) { - refresh_menu(mii2.hSubMenu, def); - } - } - - return 0; -} - - -static void refresh_menu(HMENU hm, khui_menu_def * def) { - khui_action_ref * act; - khm_size i, n; - - for(i = 0, n = khui_menu_get_size(def); i < n; i++) { - act = khui_menu_get_action(def, i); - refresh_menu_item(hm, khui_find_action(act->action), (int) i, act->flags); - } - - refresh_menu_item(hm, NULL, (int) i, KHUI_ACTIONREF_END); -} - -static HMENU mm_create_menu_from_def(khui_menu_def * def, BOOL main) { - HMENU hm; - khui_action_ref * act; - khm_size i, n; - - if (main) - hm = CreateMenu(); - else - hm = CreatePopupMenu(); - - for (i = 0, n = khui_menu_get_size(def); i < n; i++) { - act = khui_menu_get_action(def, i); - add_action_to_menu(hm, khui_find_action(act->action), (int) i, act->flags); - } - - return hm; -} - -void mm_begin_hot_track(void); -void mm_end_hot_track(void); - -static void mm_show_panel_def(khui_menu_def * def, LONG x, LONG y) -{ - HMENU hm; - - hm = mm_create_menu_from_def(def, FALSE); - - mm_hot_track = (mm_last_hot_item >= 0); - - if (mm_hot_track) - mm_begin_hot_track(); - - TrackPopupMenuEx(hm, - TPM_LEFTALIGN | TPM_TOPALIGN | - TPM_VERPOSANIMATION, - x, y, khm_hwnd_main, NULL); - - mm_last_hot_item = -1; - - if (mm_hot_track) - mm_end_hot_track(); - - mm_hot_track = FALSE; - - DestroyMenu(hm); -} - -void khm_menu_show_panel(int id, LONG x, LONG y) { - khui_menu_def * def; - - def = khui_find_menu(id); - if(!def) - return; - - mm_show_panel_def(def, x, y); -} - -LRESULT khm_menu_activate(int menu_id) { - khui_menu_def * mmdef; - int nmm; - - mmdef = khui_find_menu(KHUI_MENU_MAIN); - nmm = (int) khui_action_list_length(mmdef->items); - - if(menu_id == MENU_ACTIVATE_DEFAULT) { - if (mm_last_hot_item != -1) - menu_id = mm_last_hot_item; - else - menu_id = 0; - } else if(menu_id == MENU_ACTIVATE_LEFT) { - menu_id = (mm_last_hot_item > 0)? - mm_last_hot_item - 1: - ((mm_last_hot_item == 0)? nmm - 1: 0); - } else if(menu_id == MENU_ACTIVATE_RIGHT) { - menu_id = (mm_last_hot_item >=0 && mm_last_hot_item < nmm - 1)? - mm_last_hot_item + 1: - 0; - } else if(menu_id == MENU_ACTIVATE_NONE) { - menu_id = -1; - } - - SendMessage(khui_main_menu_toolbar, - TB_SETHOTITEM, - menu_id, - 0); - - khm_menu_track_current(); - - return TRUE; -} - -LRESULT khm_menu_measure_item(WPARAM wParam, LPARAM lParam) { - LPMEASUREITEMSTRUCT lpm = (LPMEASUREITEMSTRUCT) lParam; - khui_action * act; - - act = khui_find_action(lpm->itemID); - if (act && act->type == KHUI_ACTIONTYPE_IDENTITY) { - khm_measure_identity_menu_item(khm_hwnd_main_cred, lpm, act); - } else { - lpm->itemWidth = MENU_SIZE_ICON_X; - lpm->itemHeight = MENU_SIZE_ICON_Y; - } - return TRUE; -} - -LRESULT khm_menu_draw_item(WPARAM wParam, LPARAM lParam) { - LPDRAWITEMSTRUCT lpd; - khui_action * act; - - lpd = (LPDRAWITEMSTRUCT) lParam; - act = khui_find_action(lpd->itemID); - - if (act && act->type == KHUI_ACTIONTYPE_IDENTITY) { - - khm_draw_identity_menu_item(khm_hwnd_main_cred, lpd, act); - - } else { - int resid; - int iidx; - UINT style; - - resid = 0; - if((lpd->itemState & ODS_DISABLED) || (lpd->itemState & ODS_GRAYED)) { - resid = act->ib_icon_dis; - } - if(!resid) - resid = act->ib_icon; - - if(!resid) /* nothing to draw */ - return TRUE; - - - iidx = khui_get_icon_index(resid); - if(iidx == -1) - return TRUE; - - - style = ILD_TRANSPARENT; - if(lpd->itemState & ODS_HOTLIGHT || lpd->itemState & ODS_SELECTED) { - style |= ILD_SELECTED; - } - - khui_ilist_draw(il_icon, - iidx, - lpd->hDC, - lpd->rcItem.left, lpd->rcItem.top, style); - } - - return TRUE; -} - -void khm_track_menu(int menu) { - TBBUTTON bi; - RECT r; - RECT wr; - - if (menu != -1) - mm_last_hot_item = menu; - - if (mm_last_hot_item != -1) { - SendMessage(khui_main_menu_toolbar, - TB_GETBUTTON, - mm_last_hot_item, - (LPARAM) &bi); - - SendMessage(khui_main_menu_toolbar, - TB_GETITEMRECT, - mm_last_hot_item, - (LPARAM) &r); - - GetWindowRect(khui_main_menu_toolbar, &wr); - - khm_menu_show_panel(bi.idCommand, wr.left + r.left, wr.top + r.bottom); - - r.left = 0; - - if (mm_next_hot_item != -1) { - mm_last_hot_item = mm_next_hot_item; - mm_next_hot_item = -1; - - PostMessage(khm_hwnd_main, WM_COMMAND, - MAKEWPARAM(KHUI_PACTION_MENU,0), - MAKELPARAM(mm_last_hot_item,1)); - } - } -} - -void khm_menu_track_current(void) { - khm_track_menu(-1); -} - -LRESULT khm_menu_handle_select(WPARAM wParam, LPARAM lParam) { - if((HIWORD(wParam) == 0xffff && lParam == 0) || - (HIWORD(wParam) & MF_POPUP)) { - /* the menu was closed */ - khm_statusbar_set_part(KHUI_SBPART_INFO, NULL, NULL); - } else { - khui_action * act; - int id; - wchar_t buf[MAX_RES_STRING] = L""; - - id = LOWORD(wParam); - act = khui_find_action(id); - if(act == NULL || (act->is_tooltip == 0 && act->tooltip == NULL)) - khm_statusbar_set_part(KHUI_SBPART_INFO, NULL, NULL); - else { - khm_get_action_tooltip(act->cmd, buf, sizeof(buf)); - - khm_statusbar_set_part(KHUI_SBPART_INFO, NULL, buf); - } - } - return 0; -} - -HHOOK mm_hevt_hook = NULL; -HWND mm_hwnd_menu_panel = NULL; - -LRESULT CALLBACK mm_event_filter(int code, - WPARAM wParam, - LPARAM lParam) { - MSG * m; - RECT r; - int x,y; - - if (code == MSGF_MENU) { - /* do stuff */ - m = (MSG *) lParam; - GetWindowRect(khui_main_menu_toolbar, &r); - - if (m->hwnd != khm_hwnd_main) - mm_hwnd_menu_panel = m->hwnd; - - switch(m->message) { - case WM_MOUSEMOVE: - - x = GET_X_LPARAM(m->lParam); - y = GET_Y_LPARAM(m->lParam); - x -= r.left; - y -= r.top; - - SendMessage(khui_main_menu_toolbar, - m->message, - m->wParam, - MAKELPARAM(x,y)); - break; - } - } - - return CallNextHookEx(mm_hevt_hook, code, wParam, lParam); -} - - -void mm_begin_hot_track(void) { - - if (mm_hevt_hook) - UnhookWindowsHookEx(mm_hevt_hook); - - mm_hevt_hook = SetWindowsHookEx(WH_MSGFILTER, - mm_event_filter, - NULL, - GetCurrentThreadId()); -} - -void mm_end_hot_track(void) { - if (mm_hevt_hook) - UnhookWindowsHookEx(mm_hevt_hook); - - mm_hevt_hook = NULL; - mm_hwnd_menu_panel = NULL; -} - -void mm_cancel_menu(void) { - if (mm_hwnd_menu_panel) - SendMessage(mm_hwnd_menu_panel, WM_CANCELMODE, 0, 0); -} - -LRESULT khm_menu_notify_main(LPNMHDR notice) { - LPNMTOOLBAR nmt; - LRESULT ret = FALSE; - RECT r; - khui_menu_def * mmdef; - khui_action_ref * mm; - int nmm; - - mmdef = khui_find_menu(KHUI_MENU_MAIN); - mm = mmdef->items; - nmm = (int) khui_action_list_length(mm); - - GetWindowRect(khui_main_menu_toolbar, &r); - - nmt = (LPNMTOOLBAR) notice; - switch(notice->code) { - case TBN_DROPDOWN: - khm_track_menu(-1); - /* - khm_menu_show_panel(nmt->iItem, - r.left + nmt->rcButton.left, - r.top + nmt->rcButton.bottom); - */ - ret = TBDDRET_DEFAULT; - break; - - case TBN_HOTITEMCHANGE: - { - LPNMTBHOTITEM nmhi; - int new_item = -1; - - nmhi = (LPNMTBHOTITEM) notice; - - if(nmhi->dwFlags & HICF_LEAVING) - new_item = -1; - else { - int i; - for(i=0; i < nmm; i++) { - if(mm[i].action == nmhi->idNew) { - new_item = i; - break; - } - } - } - - if (mm_hot_track && - new_item != mm_last_hot_item && - new_item != -1 && - mm_last_hot_item != -1) { - - EndMenu(); - mm_next_hot_item = new_item; - - } - - ret = 0; - - if (!mm_hot_track || new_item != -1) - mm_last_hot_item = new_item; - - } break; - - default: - /* hmm. what to do */ - ret = FALSE; - } - return ret; -} - -struct identity_action_map { - khm_handle identity; - khm_int32 renew_cmd; - khm_int32 destroy_cmd; - khm_int32 new_cmd; - khm_int32 setdef_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 caption[KHUI_MAXCCH_SHORT_DESC]; - wchar_t tooltip[KHUI_MAXCCH_SHORT_DESC]; - wchar_t actionname[KHUI_MAXCCH_NAME]; - 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); - -#define GETFORMAT(I) do { fmt[0] = L'\0'; LoadString(khm_hInstance, I, fmt, ARRAYLENGTH(fmt)); } while(0) -#define EXPFORMAT(d,s) do { StringCbPrintf(d, sizeof(d), fmt, s); } while(0) - /* renew */ - - GETFORMAT(IDS_IDACTIONT_RENEW); - EXPFORMAT(tooltip, idname); - - GETFORMAT(IDS_IDACTION_RENEW); - EXPFORMAT(caption, idname); - - StringCbPrintf(actionname, sizeof(actionname), L"R:%s", idname); - - actmap->renew_cmd = - khui_action_create(actionname, caption, tooltip, NULL, - KHUI_ACTIONTYPE_TRIGGER, NULL); - - /* destroy */ - - GETFORMAT(IDS_IDACTIONT_DESTROY); - EXPFORMAT(tooltip, idname); - - GETFORMAT(IDS_IDACTION_DESTROY); - EXPFORMAT(caption, idname); - - StringCbPrintf(actionname, sizeof(actionname), L"D:%s", idname); - - actmap->destroy_cmd = - khui_action_create(actionname, caption, tooltip, NULL, - KHUI_ACTIONTYPE_TRIGGER, NULL); - - /* new */ - - GETFORMAT(IDS_IDACTIONT_NEW); - EXPFORMAT(tooltip, idname); - - GETFORMAT(IDS_IDACTION_NEW); - EXPFORMAT(caption, idname); - - StringCbPrintf(actionname, sizeof(actionname), L"N:%s", idname); - - actmap->new_cmd = - khui_action_create(actionname, caption, tooltip, NULL, - KHUI_ACTIONTYPE_TRIGGER, NULL); - - /* set default */ - GETFORMAT(IDS_IDACTIONT_SETDEF); - EXPFORMAT(tooltip, idname); - - GETFORMAT(IDS_IDACTION_SETDEF); - EXPFORMAT(caption, idname); - - StringCbPrintf(actionname, sizeof(actionname), L"E:%s", idname); - - actmap->setdef_cmd = - khui_action_create(actionname, caption, tooltip, ident, - KHUI_ACTIONTYPE_IDENTITY, NULL); - - actmap->refreshcycle = idcmd_refreshcycle; - -#undef GETFORMAT -#undef EXPFORMAT - - 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); - khui_action_delete(id_action_map[i].new_cmd); - khui_action_delete(id_action_map[i].setdef_cmd); - - id_action_map[i].renew_cmd = 0; - id_action_map[i].destroy_cmd = 0; - id_action_map[i].new_cmd = 0; - id_action_map[i].setdef_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); - } -} - -khm_int32 -khm_get_identity_renew_action(khm_handle ident) { - struct identity_action_map * map; - - map = get_identity_cmd_map(ident); - - if (map) - return map->renew_cmd; - else - return 0; -} - -khm_int32 -khm_get_identity_destroy_action(khm_handle ident) { - struct identity_action_map * map; - - map = get_identity_cmd_map(ident); - - if (map) - return map->destroy_cmd; - else - return 0; -} - -khm_int32 -khm_get_identity_setdef_action(khm_handle ident) { - struct identity_action_map * map; - - map = get_identity_cmd_map(ident); - - if (map) - return map->setdef_cmd; - else - return 0; -} - -khm_int32 -khm_get_identity_new_creds_action(khm_handle ident) { - struct identity_action_map * map; - - map = get_identity_cmd_map(ident); - - if (map) - return map->new_cmd; - else - return 0; -} - -void -khm_refresh_identity_menus(void) { - khui_menu_def * renew_def = NULL; - khui_menu_def * dest_def = NULL; - khui_menu_def * setdef_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; - khm_handle csp_cw = NULL; - khm_int32 idflags; - khm_int32 def_sticky = 0; - khm_int32 all_identities = 0; - khm_boolean sticky_done = FALSE; - khm_boolean added_dest = FALSE; - khm_boolean added_setdef = FALSE; - - if (KHM_SUCCEEDED(khc_open_space(NULL, L"CredWindow", 0, &csp_cw))) { - khc_read_int32(csp_cw, L"DefaultSticky", &def_sticky); - khc_read_int32(csp_cw, L"ViewAllIdents", &all_identities); - khc_close_space(csp_cw); - csp_cw = NULL; - } - - kcdb_identity_refresh_all(); - - khui_action_lock(); - - idcmd_refreshcycle++; - - do { - if (idlist) - PFREE(idlist); - idlist = NULL; - cb = 0; - - rv = kcdb_identity_enum(KCDB_IDENT_FLAG_ACTIVE, - 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_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); - setdef_def = khui_find_menu(KHUI_MENU_SETDEF); -#ifdef DEBUG - assert(renew_def); - assert(dest_def); - assert(setdef_def); -#endif - - t = khui_menu_get_size(renew_def); - while(t) { - khui_menu_remove_action(renew_def, 0); - t--; - } - - t = khui_menu_get_size(dest_def); - while(t) { - khui_menu_remove_action(dest_def, 0); - t--; - } - - t = khui_menu_get_size(setdef_def); - while(t) { - khui_menu_remove_action(setdef_def, 0); - t--; - } - - if (idlist != NULL && n_idents > 1) { - khui_menu_insert_action(renew_def, 0, KHUI_ACTION_RENEW_ALL, 0); - khui_menu_insert_action(renew_def, 1, KHUI_MENU_SEP, 0); - - khui_menu_insert_action(dest_def, 0, KHUI_ACTION_DESTROY_ALL, 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; - } - - idflags = 0; - kcdb_identity_get_flags(identity, &idflags); - - if (!(idflags & KCDB_IDENT_FLAG_STICKY) && def_sticky) { - kcdb_identity_set_flags(identity, - KCDB_IDENT_FLAG_STICKY, - KCDB_IDENT_FLAG_STICKY); - idflags |= KCDB_IDENT_FLAG_STICKY; - sticky_done = TRUE; - } - - if (!(idflags & KCDB_IDENT_FLAG_EMPTY)) { - khui_menu_insert_action(renew_def, 1000, - khm_get_identity_renew_action(identity), - 0); - - khui_menu_insert_action(dest_def, 1000, - khm_get_identity_destroy_action(identity), - 0); - added_dest = TRUE; - } - - if (all_identities || - !(idflags & KCDB_IDENT_FLAG_EMPTY) || - (idflags & KCDB_IDENT_FLAG_STICKY)) { - - khui_menu_insert_action(setdef_def, 1000, - khm_get_identity_setdef_action(identity), - 0); - added_setdef = TRUE; - } - - kcdb_identity_release(identity); - } - - if (idlist) { - PFREE(idlist); - idlist = NULL; - } - - if (added_dest) { - khui_enable_action(KHUI_MENU_RENEW_CRED, TRUE); - khui_enable_action(KHUI_MENU_DESTROY_CRED, TRUE); - khui_enable_action(KHUI_ACTION_RENEW_CRED, TRUE); - khui_enable_action(KHUI_ACTION_DESTROY_CRED, TRUE); - } else { - khui_enable_action(KHUI_MENU_RENEW_CRED, FALSE); - khui_enable_action(KHUI_MENU_DESTROY_CRED, FALSE); - khui_enable_action(KHUI_ACTION_RENEW_CRED, FALSE); - khui_enable_action(KHUI_ACTION_DESTROY_CRED, FALSE); - } - - if (added_setdef) { - khui_enable_action(KHUI_MENU_SETDEF, TRUE); - } else { - khui_enable_action(KHUI_MENU_SETDEF, FALSE); - } - - purge_identity_cmd_map(); - - khui_action_unlock(); - - khui_refresh_actions(); - - if (sticky_done) { - InvalidateRect(khm_hwnd_main_cred, NULL, TRUE); - } -} - -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; - } - - if (id_action_map[i].new_cmd == act_id) { - khm_cred_obtain_new_creds_for_ident(id_action_map[i].identity, - NULL); - return TRUE; - } - - if (id_action_map[i].setdef_cmd == act_id) { - khm_cred_set_default_identity(id_action_map[i].identity); - - return TRUE; - } - } - } - - return FALSE; -} - - -HMENU khui_hmenu_main = NULL; - -void khm_menu_refresh_items(void) { - khui_menu_def * def; - - if (!khui_hmenu_main) - return; - - khui_action_lock(); - - def = khui_find_menu(KHUI_MENU_MAIN); - - refresh_menu(khui_hmenu_main, def); - - khui_action_unlock(); - - DrawMenuBar(khm_hwnd_main); -} - -void khm_menu_create_main(HWND parent) { - HMENU hmenu; - khui_menu_def * def; - - def = khui_find_menu(KHUI_MENU_MAIN); - - hmenu = mm_create_menu_from_def(def, TRUE); - - SetMenu(parent, hmenu); - - khui_hmenu_main = hmenu; - - return; - -#ifdef USE_EXPLORER_STYLE_MENU_BAR - HWND hwtb; - REBARBANDINFO rbi; - SIZE sz; - int i; - khui_menu_def * mmdef; - khui_action_ref * mm; - int nmm; - - mmdef = khui_find_menu(KHUI_MENU_MAIN); - mm = mmdef->items; - nmm = (int) khui_action_list_length(mm); - - hwtb = CreateWindowEx(0 -#if (_WIN32_IE >= 0x0501) - | TBSTYLE_EX_MIXEDBUTTONS -#endif - , - TOOLBARCLASSNAME, - (LPWSTR) NULL, - WS_CHILD | - CCS_ADJUSTABLE | - TBSTYLE_FLAT | - TBSTYLE_AUTOSIZE | - TBSTYLE_LIST | - CCS_NORESIZE | - CCS_NOPARENTALIGN | - CCS_NODIVIDER, - 0, 0, 0, 0, rebar, - (HMENU) NULL, khm_hInstance, - NULL); - - if(!hwtb) { -#ifdef DEBUG - assert(FALSE); -#endif - return; - } - - khui_main_menu_toolbar = hwtb; - - SendMessage(hwtb, - TB_BUTTONSTRUCTSIZE, - (WPARAM) sizeof(TBBUTTON), - 0); - - for(i=0; i<nmm; i++) { - khui_add_action_to_toolbar(hwtb, - khui_find_action(mm[i].action), - KHUI_TOOLBAR_ADD_TEXT | - KHUI_TOOLBAR_ADD_DROPDOWN | - KHUI_TOOLBAR_VARSIZE, - NULL); - } - - SendMessage(hwtb, - TB_AUTOSIZE, - 0,0); - - SendMessage(hwtb, - TB_GETMAXSIZE, - 0, - (LPARAM) &sz); - - ZeroMemory(&rbi, sizeof(rbi)); - - rbi.cbSize = sizeof(rbi); - - rbi.fMask = - RBBIM_ID | - RBBIM_STYLE | - RBBIM_CHILD | - RBBIM_CHILDSIZE | - RBBIM_SIZE | - RBBIM_IDEALSIZE; - - rbi.fStyle = - RBBS_USECHEVRON; - - rbi.hwndChild = hwtb; - rbi.wID = KHUI_MENU_MAIN; - rbi.cx = sz.cx; - rbi.cxMinChild = rbi.cx; - rbi.cxIdeal = rbi.cx; - rbi.cyMinChild = sz.cy; - rbi.cyChild = rbi.cyMinChild; - rbi.cyIntegral = rbi.cyMinChild; - rbi.cyMaxChild = rbi.cyMinChild; - - SendMessage(rebar, - RB_INSERTBAND, - 0, - (LPARAM) &rbi); -#endif -} diff --git a/src/windows/identity/ui/mainmenu.h b/src/windows/identity/ui/mainmenu.h deleted file mode 100644 index 54504d5fb..000000000 --- a/src/windows/identity/ui/mainmenu.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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 - * 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 __KHIMAIRA_MAINMENU_H -#define __KHIMAIRA_MAINMENU_H - -extern HWND khui_main_menu_toolbar; - -#define MENU_ACTIVATE_DEFAULT -1 -#define MENU_ACTIVATE_LEFT -2 -#define MENU_ACTIVATE_RIGHT -3 -#define MENU_ACTIVATE_NONE -4 - -extern int mm_last_hot_item; -extern BOOL mm_hot_track; - -void khm_menu_create_main(HWND rebar); -LRESULT khm_menu_handle_select(WPARAM wParam, LPARAM lParam); -LRESULT khm_menu_notify_main(LPNMHDR notice); -LRESULT khm_menu_activate(int menu_id); -void khm_menu_show_panel(int id, LONG x, LONG y); -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); -void khm_get_action_tooltip(khm_int32 action, wchar_t * buf, khm_size cb_buf); -void khm_get_action_caption(khm_int32 action, wchar_t * buf, khm_size cb_buf); - -khm_int32 khm_get_identity_destroy_action(khm_handle ident); -khm_int32 khm_get_identity_renew_action(khm_handle ident); -khm_int32 khm_get_identity_new_creds_action(khm_handle ident); - -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); - -void khui_init_menu(void); -void khui_exit_menu(void); - -#define MENU_SIZE_ICON_X 16 -#define MENU_SIZE_ICON_Y 16 - -#endif diff --git a/src/windows/identity/ui/mainwnd.c b/src/windows/identity/ui/mainwnd.c deleted file mode 100644 index 9d1556798..000000000 --- a/src/windows/identity/ui/mainwnd.c +++ /dev/null @@ -1,1380 +0,0 @@ -/* - * 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 - * 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<khmapp.h> -#include<intaction.h> -#include<assert.h> - -ATOM khm_main_window_class; -ATOM khm_null_window_class; -HWND khm_hwnd_null; -HWND khm_hwnd_main; -HWND khm_hwnd_rebar; -HWND khm_hwnd_main_cred; - -int khm_main_wnd_mode = KHM_MAIN_WND_NORMAL; - -#define MW_RESIZE_TIMER 1 -#define MW_RESIZE_TIMEOUT 2000 -#define MW_REFRESH_TIMER 2 -#define MW_REFRESH_TIMEOUT 600 - -void -khm_set_dialog_result(HWND hwnd, LRESULT lr) { -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_MSGRESULT, lr); -#pragma warning(pop) -} - -static void -mw_restart_refresh_timer(HWND hwnd) { - khm_handle csp_cw; - khm_int32 timeout; - - KillTimer(hwnd, MW_REFRESH_TIMER); - if (KHM_SUCCEEDED(khc_open_space(NULL, - L"CredWindow", - KHM_PERM_READ, - &csp_cw))) { - if (KHM_FAILED(khc_read_int32(csp_cw, - L"RefreshTimeout", - &timeout))) - timeout = MW_REFRESH_TIMEOUT; - khc_close_space(csp_cw); - } else { - timeout = MW_REFRESH_TIMEOUT; - } - - timeout *= 1000; /* convert to milliseconds */ - - SetTimer(hwnd, MW_REFRESH_TIMER, timeout, NULL); -} - -khm_int32 KHMAPI -mw_select_cred(khm_handle cred, void * rock) { - if (cred) - kcdb_cred_set_flags(cred, - KCDB_CRED_FLAG_SELECTED, - KCDB_CRED_FLAG_SELECTED); - - return KHM_ERROR_SUCCESS; -} - -/* perform shutdown operations */ -static void -khm_pre_shutdown(void) { - khm_handle csp_cw = NULL; - khm_handle credset = NULL; - khm_int32 t; - khm_size s; - - /* Check if we should destroy all credentials on exit... */ - - if (KHM_FAILED(khc_open_space(NULL, L"CredWindow", 0, &csp_cw))) - return; - - if (KHM_FAILED(khc_read_int32(csp_cw, L"DestroyCredsOnExit", &t)) || - !t) - goto _cleanup; - - if (KHM_FAILED(kcdb_credset_create(&credset))) - goto _cleanup; - - if (KHM_FAILED(kcdb_credset_extract(credset, NULL, NULL, - KCDB_TYPE_INVALID))) - goto _cleanup; - - if (KHM_FAILED(kcdb_credset_get_size(credset, &s)) || - s == 0) - goto _cleanup; - - kcdb_credset_apply(credset, mw_select_cred, NULL); - - khui_context_set(KHUI_SCOPE_GROUP, - NULL, - KCDB_CREDTYPE_INVALID, - NULL, - NULL, - 0, - credset); - - khm_cred_destroy_creds(TRUE, TRUE); - - _cleanup: - - if (credset) - kcdb_credset_delete(credset); - - if (csp_cw) - khc_close_space(csp_cw); -} - -void -khm_process_query_app_ver(khm_query_app_version * papp_ver) { - - if (!papp_ver || papp_ver->magic != KHM_QUERY_APP_VER_MAGIC) - return; - - papp_ver->ver_remote = app_version; - - /* the remote instance has requested swapping in. we check the - version numbers and if the remote instance is newer than us, - then we exit and let the remote instance take over. */ - if (papp_ver->request_swap) { - khm_version ver_caller = papp_ver->ver_caller; - - if (khm_compare_version(&ver_caller, &app_version) > 0) { - - papp_ver->request_swap = TRUE; - - if (khm_hwnd_main) - DestroyWindow(khm_hwnd_main); - - } else { - - papp_ver->request_swap = FALSE; - - } - } - - 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); -} - - -static void -main_wnd_save_sizepos() { - RECT r; - khm_handle csp_cw; - khm_handle csp_mw; - const wchar_t * wconfig; - - KillTimer(khm_hwnd_main, MW_RESIZE_TIMER); - - if (khm_main_wnd_mode == KHM_MAIN_WND_MINI) - wconfig = L"Windows\\MainMini"; - else - wconfig = L"Windows\\Main"; - - GetWindowRect(khm_hwnd_main, &r); - - if (KHM_SUCCEEDED(khc_open_space(NULL, - L"CredWindow", - KHM_PERM_WRITE, - &csp_cw))) { - if (KHM_SUCCEEDED(khc_open_space(csp_cw, - wconfig, - KHM_PERM_WRITE, - &csp_mw))) { - khm_int32 t; - - khc_write_int32(csp_mw, L"XPos", r.left); - khc_write_int32(csp_mw, L"YPos", r.top); - khc_write_int32(csp_mw, L"Width", r.right - r.left); - khc_write_int32(csp_mw, L"Height", r.bottom - r.top); - - if (KHM_SUCCEEDED(khc_read_int32(csp_mw, L"Dock", &t)) && - t != KHM_DOCK_NONE) { - khc_write_int32(csp_mw, L"Dock", KHM_DOCK_AUTO); - } - - khc_close_space(csp_mw); - } - - khc_close_space(csp_cw); - } -} - -LRESULT CALLBACK -khm_main_wnd_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) -{ - LPNMHDR lpnm; - - switch(uMsg) { - case WM_CREATE: - khm_create_main_window_controls(hwnd); - kmq_subscribe_hwnd(KMSG_CRED, hwnd); - kmq_subscribe_hwnd(KMSG_ACT, hwnd); - kmq_subscribe_hwnd(KMSG_KMM, hwnd); - mw_restart_refresh_timer(hwnd); - - /* if the plug-ins finished loading before the window was - created, we would have missed the KMSG_KMM_I_DONE message. - So we check if the module load is complete and if so, fire - off KMSG_ACT_BEGIN_CMDLINE. */ - if (!kmm_load_pending()) - kmq_post_message(KMSG_ACT, KMSG_ACT_BEGIN_CMDLINE, 0, 0); - break; - - case WM_DESTROY: - khm_pre_shutdown(); - kmq_unsubscribe_hwnd(KMSG_ACT, hwnd); - kmq_unsubscribe_hwnd(KMSG_CRED, hwnd); - kmq_unsubscribe_hwnd(KMSG_KMM, hwnd); - HtmlHelp(NULL, NULL, HH_CLOSE_ALL, 0); - PostQuitMessage(0); - break; - - case WM_NOTIFY: - lpnm = (LPNMHDR) lParam; - if(lpnm->hwndFrom == khui_main_menu_toolbar) { - return khm_menu_notify_main(lpnm); - } else if(lpnm->hwndFrom == khui_hwnd_standard_toolbar) { - return khm_toolbar_notify(lpnm); - } else if(lpnm->hwndFrom == khm_hwnd_rebar) { - return khm_rebar_notify(lpnm); - } else if(lpnm->hwndFrom == khm_hwnd_statusbar) { - return khm_statusbar_notify(lpnm); - } - break; - - case WM_HELP: - khm_html_help(khm_hwnd_main, NULL, HH_HELP_CONTEXT, IDH_WELCOME); - break; - - case WM_COMMAND: - switch(LOWORD(wParam)) { - /* general actions */ - case KHUI_ACTION_VIEW_REFRESH: - khm_cred_refresh(); - InvalidateRect(khm_hwnd_main_cred, NULL, FALSE); - return 0; - - case KHUI_ACTION_PASSWD_ID: - if (khm_startup.processing) - return 0; - - khm_cred_change_password(NULL); - return 0; - - case KHUI_ACTION_NEW_CRED: - if (khm_startup.processing) - return 0; - - khm_cred_obtain_new_creds(NULL); - return 0; - - case KHUI_ACTION_RENEW_CRED: - if (khm_startup.processing) - return 0; - - khm_cred_renew_creds(); - return 0; - - case KHUI_ACTION_DESTROY_CRED: - if (khm_startup.processing) - return 0; - - khm_cred_destroy_creds(FALSE, FALSE); - return 0; - - case KHUI_ACTION_SET_DEF_ID: - if (khm_startup.processing) - return 0; - - khm_cred_set_default(); - return 0; - - case KHUI_ACTION_EXIT: - DestroyWindow(hwnd); - return 0; - - case KHUI_ACTION_OPEN_APP: - khm_show_main_window(); - return 0; - - case KHUI_ACTION_CLOSE_APP: - khm_hide_main_window(); - return 0; - - case KHUI_ACTION_OPT_KHIM: { - khui_config_node node = NULL; - - khui_cfg_open(NULL, L"KhmGeneral", &node); - khm_show_config_pane(node); - } - return 0; - - case KHUI_ACTION_OPT_IDENTS: { - khui_config_node node = NULL; - - khui_cfg_open(NULL, L"KhmIdentities", &node); - khm_show_config_pane(node); - } - return 0; - - case KHUI_ACTION_OPT_APPEAR: { - khui_config_node node = NULL; - - khui_cfg_open(NULL, L"KhmAppear", &node); - khm_show_config_pane(node); - } - return 0; - - case KHUI_ACTION_OPT_NOTIF: { - khui_config_node node = NULL; - - khui_cfg_open(NULL, L"KhmNotifications", &node); - khm_show_config_pane(node); - } - return 0; - - case KHUI_ACTION_OPT_PLUGINS: { - khui_config_node node = NULL; - - khui_cfg_open(NULL, L"KhmPlugins", &node); - khm_show_config_pane(node); - } - return 0; - - case KHUI_ACTION_HELP_CTX: - khm_html_help(khm_hwnd_main, NULL, HH_HELP_CONTEXT, IDH_WELCOME); - return 0; - - case KHUI_ACTION_HELP_CONTENTS: - khm_html_help(khm_hwnd_main, NULL, HH_DISPLAY_TOC, 0); - return 0; - - case KHUI_ACTION_HELP_INDEX: - khm_html_help(khm_hwnd_main, NULL, HH_DISPLAY_INDEX, (DWORD_PTR) L""); - return 0; - - case KHUI_ACTION_HELP_ABOUT: - khm_create_about_window(); - return 0; - - case KHUI_ACTION_IMPORT: - khm_cred_import(); - return 0; - - case KHUI_ACTION_PROPERTIES: - /* properties are not handled by the main window. - Just bounce it to credwnd. However, use SendMessage - instead of PostMessage so we don't lose context */ - return SendMessage(khm_hwnd_main_cred, uMsg, - wParam, lParam); - - case KHUI_ACTION_UICB: - khm_ui_cb(lParam); - return 0; - - /* layout control */ - - case KHUI_ACTION_VIEW_ALL_IDS: - return SendMessage(khm_hwnd_main_cred, uMsg, - wParam, lParam); - - case KHUI_ACTION_LAYOUT_MINI: - - if (khm_main_wnd_mode == KHM_MAIN_WND_MINI) { - khm_set_main_window_mode(KHM_MAIN_WND_NORMAL); - } else { - khm_set_main_window_mode(KHM_MAIN_WND_MINI); - } - return SendMessage(khm_hwnd_main_cred, uMsg, - wParam, lParam); - - case KHUI_ACTION_LAYOUT_RELOAD: - return SendMessage(khm_hwnd_main_cred, uMsg, - wParam, lParam); - - case KHUI_ACTION_LAYOUT_ID: - case KHUI_ACTION_LAYOUT_TYPE: - case KHUI_ACTION_LAYOUT_LOC: - case KHUI_ACTION_LAYOUT_CUST: - khm_set_main_window_mode(KHM_MAIN_WND_NORMAL); - return SendMessage(khm_hwnd_main_cred, uMsg, - wParam, lParam); - - /* menu commands */ - case KHUI_PACTION_MENU: - if(HIWORD(lParam) == 1) - mm_last_hot_item = LOWORD(lParam); - return khm_menu_activate(MENU_ACTIVATE_DEFAULT); - - case KHUI_PACTION_ESC: - /* if esc is pressed while no menu is active, we close the - main window */ - if (mm_last_hot_item == -1) { - khm_close_main_window(); - return 0; - } - - /* generic, retargetting */ - case KHUI_PACTION_UP: - case KHUI_PACTION_UP_TOGGLE: - case KHUI_PACTION_UP_EXTEND: - case KHUI_PACTION_PGUP: - case KHUI_PACTION_PGUP_EXTEND: - case KHUI_PACTION_DOWN: - case KHUI_PACTION_DOWN_TOGGLE: - case KHUI_PACTION_DOWN_EXTEND: - case KHUI_PACTION_PGDN: - case KHUI_PACTION_PGDN_EXTEND: - case KHUI_PACTION_LEFT: - case KHUI_PACTION_RIGHT: - case KHUI_PACTION_ENTER: - /* menu tracking */ - if(mm_last_hot_item != -1) { - switch(LOWORD(wParam)) { - case KHUI_PACTION_LEFT: - khm_menu_activate(MENU_ACTIVATE_LEFT); - break; - - case KHUI_PACTION_RIGHT: - khm_menu_activate(MENU_ACTIVATE_RIGHT); - break; - - case KHUI_PACTION_ESC: - case KHUI_PACTION_ENTER: - khm_menu_activate(MENU_ACTIVATE_NONE); - break; - - case KHUI_PACTION_DOWN: - khm_menu_track_current(); - break; - } - return 0; - } - - /*FALLTHROUGH*/ - case KHUI_PACTION_DELETE: - - case KHUI_PACTION_SELALL: - /* otherwise fallthrough and bounce to the creds window */ - return SendMessage(khm_hwnd_main_cred, uMsg, - wParam, lParam); - - default: - /* handle custom actions here */ - { - 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); - return 0; - } - } - } - break; /* WM_COMMAND */ - - case WM_SYSCOMMAND: - switch(wParam & 0xfff0) { - case SC_MINIMIZE: - khm_hide_main_window(); - return 0; - - case SC_CLOSE: - khm_close_main_window(); - return 0; - } - break; - - case WM_MEASUREITEM: - /* sent to measure the bitmaps associated with a menu item */ - if(!wParam) /* sent by menu */ - return khm_menu_measure_item(wParam, lParam); - break; - - case WM_DRAWITEM: - /* sent to draw a menu item */ - if(!wParam) - return khm_menu_draw_item(wParam, lParam); - break; - - case WM_ERASEBKGND: - /* Don't erase the background. The whole client area is - covered with children. It doesn't need to be erased */ - return TRUE; - break; - - case WM_SIZE: - if(hwnd == khm_hwnd_main && - (wParam == SIZE_MAXIMIZED || wParam == SIZE_RESTORED)) { - int cwidth, cheight; - RECT r_rebar, r_status; - - cwidth = LOWORD(lParam); - cheight = HIWORD(lParam); - - /* resize the rebar control */ - SendMessage(khm_hwnd_rebar, WM_SIZE, 0, 0); - - khm_update_statusbar(hwnd); - - GetWindowRect(khm_hwnd_rebar, &r_rebar); - GetWindowRect(khm_hwnd_statusbar, &r_status); - - /* the cred window fills the area between the rebar - and the status bar */ - MoveWindow(khm_hwnd_main_cred, 0, - r_rebar.bottom - r_rebar.top, - r_status.right - r_status.left, - r_status.top - r_rebar.bottom, TRUE); - - SetTimer(hwnd, - MW_RESIZE_TIMER, - MW_RESIZE_TIMEOUT, - NULL); - return 0; - } - break; - - case WM_MOVE: - { - SetTimer(hwnd, - MW_RESIZE_TIMER, - MW_RESIZE_TIMEOUT, - NULL); - - return 0; - } - break; - - case WM_MOVING: - { - RECT * r; - - r = (RECT *) lParam; - khm_adjust_window_dimensions_for_display(r, - KHM_DOCK_AUTO | KHM_DOCKF_XBORDER); - } - return TRUE; - - case WM_TIMER: - if (wParam == MW_RESIZE_TIMER) { - main_wnd_save_sizepos(); - - return 0; - - } else if (wParam == MW_REFRESH_TIMER) { - kmq_post_message(KMSG_CRED, KMSG_CRED_REFRESH, 0, 0); - - return 0; - - } - break; - - case WM_MENUSELECT: - return khm_menu_handle_select(wParam, lParam); - - case KMQ_WM_DISPATCH: - { - kmq_message * m; - khm_int32 rv = KHM_ERROR_SUCCESS; - - kmq_wm_begin(lParam, &m); - if (m->type == KMSG_ACT && - m->subtype == KMSG_ACT_REFRESH) { - khm_menu_refresh_items(); - khm_update_standard_toolbar(); - } else if (m->type == KMSG_ACT && - m->subtype == KMSG_ACT_BEGIN_CMDLINE) { - khm_cred_begin_startup_actions(); - } else if (m->type == KMSG_ACT && - m->subtype == KMSG_ACT_CONTINUE_CMDLINE) { - khm_cred_process_startup_actions(); - } else if (m->type == KMSG_ACT && - m->subtype == KMSG_ACT_END_CMDLINE) { - /* nothing yet */ - } else if (m->type == KMSG_ACT && - m->subtype == KMSG_ACT_SYNC_CFG) { - khm_refresh_config(); - } else if (m->type == KMSG_ACT && - m->subtype == KMSG_ACT_ACTIVATE) { - /* some custom action fired */ - - khm_int32 action; - khui_action * paction; - - action = m->uparam; - paction = khui_find_action(action); - if (paction && paction->data == (void *) CFGACTION_MAGIC) { - /* a custom configuration needs to be invoked */ - khui_config_node node; - - if (KHM_SUCCEEDED(khui_cfg_open(NULL, paction->name, &node))) { - khm_show_config_pane(node); - khui_cfg_release(node); - } - } - } else if (m->type == KMSG_CRED && - m->subtype == KMSG_CRED_REFRESH) { - mw_restart_refresh_timer(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); - } - - return kmq_wm_end(m, rv); - } - - case WM_KHUI_ASSIGN_COMMANDLINE_V1: - { - HANDLE hmap; - void * xfer; - wchar_t mapname[256]; - khm_startup_options_v1 * pv1opt; - int code = KHM_ERROR_SUCCESS; - - StringCbPrintf(mapname, sizeof(mapname), - COMMANDLINE_MAP_FMT, (DWORD) lParam); - - hmap = OpenFileMapping(FILE_MAP_READ, FALSE, mapname); - - if (hmap == NULL) - return 1; - - xfer = MapViewOfFile(hmap, FILE_MAP_READ, 0, 0, - sizeof(*pv1opt)); - - if (xfer) { - pv1opt = (khm_startup_options_v1 *) xfer; - - khm_startup.init = pv1opt->init; - khm_startup.import = pv1opt->import; - khm_startup.renew = pv1opt->renew; - khm_startup.destroy = pv1opt->destroy; - - khm_startup.autoinit = pv1opt->autoinit; - khm_startup.error_exit = FALSE; - - khm_startup.no_main_window = FALSE; - khm_startup.remote_exit = FALSE; - khm_startup.display = 0; - - UnmapViewOfFile(xfer); - } else { - code = KHM_ERROR_NOT_FOUND; - } - - CloseHandle(hmap); - - if(InSendMessage()) - ReplyMessage(code); - - if (code == KHM_ERROR_SUCCESS) { - khm_startup.exit = FALSE; - - khm_startup.seen = FALSE; - khm_startup.remote = TRUE; -#ifdef DEBUG - assert(!khm_startup.processing); -#endif - khm_startup.processing = FALSE; - - khm_cred_begin_startup_actions(); - } - - return code; - } - - case WM_KHUI_ASSIGN_COMMANDLINE_V2: - { - HANDLE hmap; - void * xfer; - wchar_t mapname[256]; - khm_startup_options_v2 *pv2opt = NULL; - khm_startup_options_v3 *pv3opt = NULL; - int code = KHM_ERROR_SUCCESS; - - StringCbPrintf(mapname, sizeof(mapname), - COMMANDLINE_MAP_FMT, (DWORD) lParam); - - hmap = OpenFileMapping(FILE_MAP_WRITE, FALSE, mapname); - - if (hmap == NULL) - return 1; - - xfer = MapViewOfFile(hmap, FILE_MAP_WRITE, 0, 0, - sizeof(*pv2opt)); - - if (xfer) { - pv2opt = (khm_startup_options_v2 *) xfer; - - if (pv2opt->magic != STARTUP_OPTIONS_MAGIC || - (pv2opt->cb_size != sizeof(*pv2opt) && - pv2opt->cb_size != sizeof(*pv3opt))) { - code = KHM_ERROR_INVALID_PARAM; - goto done_with_v2_opt; - } - - khm_startup.init = pv2opt->init; - khm_startup.import = pv2opt->import; - khm_startup.renew = pv2opt->renew; - khm_startup.destroy = pv2opt->destroy; - - khm_startup.autoinit = pv2opt->autoinit; - khm_startup.exit = pv2opt->remote_exit; - - pv2opt->code = KHM_ERROR_SUCCESS; - - if (pv2opt->cb_size == sizeof(*pv3opt)) { - pv3opt = (khm_startup_options_v3 *) xfer; - - khm_startup.display = pv3opt->remote_display; - } else { - khm_startup.display = 0; - } - - done_with_v2_opt: - UnmapViewOfFile(xfer); - } else { - code = KHM_ERROR_NOT_FOUND; - } - - CloseHandle(hmap); - - if(InSendMessage()) - ReplyMessage(code); - - if (code == KHM_ERROR_SUCCESS) { - khm_startup.seen = FALSE; - khm_startup.remote = TRUE; -#ifdef DEBUG - assert(!khm_startup.processing); -#endif - khm_startup.processing = FALSE; - - khm_cred_begin_startup_actions(); - } - - return code; - } - - case WM_KHUI_QUERY_APP_VERSION: - { - HANDLE hmap; - void * xfer; - wchar_t mapname[256]; - - StringCbPrintf(mapname, sizeof(mapname), - QUERY_APP_VER_MAP_FMT, (DWORD) lParam); - - hmap = OpenFileMapping(FILE_MAP_READ | FILE_MAP_WRITE, - FALSE, mapname); - - if (hmap == NULL) - return 1; - - xfer = MapViewOfFile(hmap, FILE_MAP_WRITE, 0, 0, - sizeof(khm_query_app_version)); - - if (xfer) { - khm_process_query_app_ver((khm_query_app_version *) xfer); - - UnmapViewOfFile(xfer); - } - - CloseHandle(hmap); - } - return 0; - - } - return DefWindowProc(hwnd,uMsg,wParam,lParam); -} - -LRESULT CALLBACK -khm_null_wnd_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - return DefWindowProc(hwnd, uMsg, wParam, lParam); -} - -LRESULT -khm_rebar_notify(LPNMHDR lpnm) { - switch(lpnm->code) { -#if (_WIN32_WINNT >= 0x0501) - case RBN_AUTOBREAK: - { - LPNMREBARAUTOBREAK lpra = (LPNMREBARAUTOBREAK) lpnm; - lpra->fAutoBreak = TRUE; - } - break; -#endif - case RBN_BEGINDRAG: - { - LPNMREBAR lprb = (LPNMREBAR) lpnm; - if ((lprb->dwMask & RBNM_ID) && - lprb->wID == 0) - return 1; - else - return 0; - } - break; - - case NM_CUSTOMDRAW: - return CDRF_DODEFAULT; - break; - } - - return 1; -} - -void -khm_create_main_window_controls(HWND hwnd_main) { - REBARINFO rbi; - HWND hwRebar; - - khm_menu_create_main(hwnd_main); - - hwRebar = - CreateWindowEx(WS_EX_TOOLWINDOW, - REBARCLASSNAME, - L"Rebar", - WS_CHILD | - WS_VISIBLE| - WS_CLIPSIBLINGS | - WS_CLIPCHILDREN | - CCS_NODIVIDER | - RBS_VARHEIGHT | - RBS_FIXEDORDER, - 0,0,0,0, - hwnd_main, - NULL, - khm_hInstance, - NULL); - - if(!hwRebar) { - DWORD dwe = GetLastError(); - return; - } - - khm_hwnd_rebar = hwRebar; - - rbi.cbSize = sizeof(rbi); - rbi.fMask = 0; - rbi.himl = (HIMAGELIST) NULL; - if(!SendMessage(hwRebar, RB_SETBARINFO, 0, (LPARAM) &rbi)) - return; - - /* self attach */ - khm_create_standard_toolbar(hwRebar); - khm_create_statusbar(hwnd_main); - - /* manual attach */ - khm_hwnd_main_cred = khm_create_credwnd(hwnd_main); -} - -void -khm_adjust_window_dimensions_for_display(RECT * pr, int dock) { - - HMONITOR hmon; - RECT rm; - long x, y, width, height; - - x = pr->left; - y = pr->top; - width = pr->right - pr->left; - height = pr->bottom - pr->top; - - /* if the rect doesn't intersect with the display area of any - monitor, we just default to the primary monitor. */ - hmon = MonitorFromRect(pr, MONITOR_DEFAULTTOPRIMARY); - - if (hmon == NULL) { - /* huh? we'll just center this on the primary screen */ - goto nomonitor; - } else { - MONITORINFO mi; - - ZeroMemory(&mi, sizeof(mi)); - mi.cbSize = sizeof(mi); - - if (!GetMonitorInfo(hmon, &mi)) - goto nomonitor; - - CopyRect(&rm, &mi.rcWork); - - goto adjust_dims; - } - - nomonitor: - /* for some reason we couldn't get a handle on a monitor or we - couldn't get the metrics for that monitor. We default to - setting things up on the primary monitor. */ - - SetRectEmpty(&rm); - if (!SystemParametersInfo(SPI_GETWORKAREA, 0, (PVOID) &rm, 0)) - goto done_with_monitor; - - adjust_dims: - - if (width > (rm.right - rm.left)) - width = rm.right - rm.left; - if (height > (rm.bottom - rm.top)) - height = rm.bottom - rm.top; - - switch (dock & KHM_DOCKF_DOCKHINT) { - case KHM_DOCK_TOPLEFT: - x = rm.left; - y = rm.top; - break; - - case KHM_DOCK_TOPRIGHT: - x = rm.right - width; - y = rm.top; - break; - - case KHM_DOCK_BOTTOMRIGHT: - x = rm.right - width; - y = rm.bottom - height; - break; - - case KHM_DOCK_BOTTOMLEFT: - x = rm.left; - y = rm.bottom - height; - break; - - case KHM_DOCK_AUTO: - { - int cxt, cyt; - - cxt = GetSystemMetrics(SM_CXDRAG); - cyt = GetSystemMetrics(SM_CYDRAG); - - if (x > rm.left && (x - rm.left) < cxt) - x = rm.left; - else if ((x + width) < rm.right && (rm.right - (x + width)) < cxt) - x = rm.right - width; - - if (y > rm.top && (y - rm.top) < cyt) - y = rm.top; - else if ((y + height) < rm.bottom && (rm.bottom - (y + height)) < cyt) - y = rm.bottom - height; - } - break; - } - - if (!(dock & KHM_DOCKF_XBORDER)) { - if (x < rm.left) - x = rm.left; - if (x + width > rm.right) - x = rm.right - width; - if (y < rm.top) - y = rm.top; - if (y + height > rm.bottom) - y = rm.bottom - height; - } - - done_with_monitor: - pr->left = x; - pr->top = y; - pr->right = x + width; - pr->bottom = y + height; - -} - -void -khm_get_main_window_rect(RECT * pr) { - khm_handle csp_mw = NULL; - int x,y,width,height,dock; - RECT r; - const wchar_t * wconfig; - - x = CW_USEDEFAULT; - y = CW_USEDEFAULT; - width = CW_USEDEFAULT; - height = CW_USEDEFAULT; - dock = KHM_DOCK_NONE; - - if (khm_main_wnd_mode == KHM_MAIN_WND_MINI) - wconfig = L"CredWindow\\Windows\\MainMini"; - else - wconfig = L"CredWindow\\Windows\\Main"; - - if (KHM_SUCCEEDED(khc_open_space(NULL, - wconfig, - KHM_PERM_READ, - &csp_mw))) { - khm_int32 t; - - if (KHM_SUCCEEDED(khc_read_int32(csp_mw, L"XPos", &t))) - x = t; - if (KHM_SUCCEEDED(khc_read_int32(csp_mw, L"YPos", &t))) - y = t; - if (KHM_SUCCEEDED(khc_read_int32(csp_mw, L"Width", &t))) - width = t; - if (KHM_SUCCEEDED(khc_read_int32(csp_mw, L"Height", &t))) - height = t; - if (KHM_SUCCEEDED(khc_read_int32(csp_mw, L"Dock", &t))) - dock = t; - - khc_close_space(csp_mw); - } - - /* If there were no default values, we default to using 1/4 of the - work area centered on the primary monitor. If there were any - docking hints, then the next call to - khm_adjust_window_dimensions_for_display() will reposition the - window. */ - if (width == CW_USEDEFAULT || x == CW_USEDEFAULT) { - RECT wr; - - SetRectEmpty(&wr); - SystemParametersInfo(SPI_GETWORKAREA, 0, &wr, 0); - - if (width == CW_USEDEFAULT) { - width = (wr.right - wr.left) / 2; - height = (wr.bottom - wr.top) / 2; - } - - if (x == CW_USEDEFAULT) { - x = (wr.left + wr.right) / 2 - width / 2; - y = (wr.top + wr.bottom) / 2 - height / 2; - } - } - - /* The saved dimensions might not actually be visible if the user - has changed the resolution of the display or if it's a multiple - monitor system where the monitor on which the Network Identity - Manager window was on previously is no longer connected. We - have to check for that and adjust the dimensions if needed. */ - SetRect(&r, x, y, x + width, y + height); - khm_adjust_window_dimensions_for_display(&r, dock); - - *pr = r; -} - -void -khm_set_main_window_mode(int mode) { - - RECT r; - khm_handle csp_cw; - - if (mode == khm_main_wnd_mode) - return; - - khui_check_action(KHUI_ACTION_LAYOUT_MINI, - ((mode == KHM_MAIN_WND_MINI)? FALSE : TRUE)); - khui_enable_action(KHUI_MENU_LAYOUT, - ((mode == KHM_MAIN_WND_MINI)? FALSE : TRUE)); - khui_enable_action(KHUI_MENU_COLUMNS, - ((mode == KHM_MAIN_WND_MINI)? FALSE : TRUE)); - - khui_refresh_actions(); - - /* - * set the window position before the global khm_main_wnd_mode - * is updated. otherwise, the windows position for the wrong - * mode will be set. Do not set the window position if the - * main application window has not yet been created. - */ - if (khm_hwnd_main) - main_wnd_save_sizepos(); - - khm_main_wnd_mode = mode; - if (khm_hwnd_main) { - khm_get_main_window_rect(&r); - - SetWindowPos(khm_hwnd_main, - NULL, - r.left, r.top, - r.right - r.left, r.bottom - r.top, - SWP_NOACTIVATE | SWP_NOOWNERZORDER | - SWP_NOZORDER); - } - - if (KHM_SUCCEEDED(khc_open_space(NULL, L"CredWindow", KHM_PERM_WRITE, - &csp_cw))) { - - khc_write_int32(csp_cw, L"DefaultWindowMode", mode); - khc_close_space(csp_cw); - - } - - khm_cred_refresh(); -} - -void -khm_create_main_window(void) { - wchar_t buf[1024]; - khm_handle csp_cw = NULL; - RECT r; - - LoadString(khm_hInstance, IDS_MAIN_WINDOW_TITLE, - buf, ARRAYLENGTH(buf)); - - khm_hwnd_null = - CreateWindow(MAKEINTATOM(khm_null_window_class), - buf, - 0, /* Style */ - 0, 0, /* x, y */ - 100, 100, /* width, height */ - NULL, /* parent */ - NULL, /* menu */ - NULL, /* HINSTANCE */ - 0); /* lparam */ - - if (!khm_hwnd_null) - return; - - if (KHM_SUCCEEDED(khc_open_space(NULL, L"CredWindow", - KHM_PERM_READ, - &csp_cw))) { - khm_int32 t; - - if (KHM_SUCCEEDED(khc_read_int32(csp_cw, L"DefaultWindowMode", &t))) { - khm_set_main_window_mode(t); - } - - khc_close_space(csp_cw); - } - - khm_get_main_window_rect(&r); - - khm_hwnd_main = - CreateWindowEx(WS_EX_OVERLAPPEDWINDOW | WS_EX_APPWINDOW, - MAKEINTATOM(khm_main_window_class), - buf, - WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | - WS_CLIPSIBLINGS, - r.left, r.top, - r.right - r.left, - r.bottom - r.top, - khm_hwnd_null, - NULL, - NULL, - NULL); - - khui_set_main_window(khm_hwnd_main); -} - -void -khm_show_main_window(void) { - - if (khm_nCmdShow == SW_RESTORE) { - HWND hw; - - hw = GetForegroundWindow(); - if (hw != khm_hwnd_main) - SetForegroundWindow(khm_hwnd_main); - } - /* - * We test for the values of khm_nCmdShow that - * can be set at process startup. They will - * only be seen the first time this function is - * called. After the first time, the value of - * khm_nCmdShow will always be SW_RESTORE. - * When one of the minimized values is set, - * khm_show_main_window() will not be called - * unless the user initiates a request to show - * the window. - */ - else if (khm_nCmdShow == SW_SHOWMINIMIZED || - khm_nCmdShow == SW_SHOWMINNOACTIVE || - khm_nCmdShow == SW_MINIMIZE) { - - khm_nCmdShow = SW_SHOW; - } - - ShowWindow(khm_hwnd_main, khm_nCmdShow); - UpdateWindow(khm_hwnd_main); - - khm_cred_refresh(); - - khm_nCmdShow = SW_RESTORE; -} - -void -khm_activate_main_window(void) { - - if (!SetForegroundWindow(khm_hwnd_main)) { - FLASHWINFO finfo; - - SetActiveWindow(khm_hwnd_main); - - ZeroMemory(&finfo, sizeof(finfo)); - finfo.cbSize = sizeof(finfo); - finfo.hwnd = khm_hwnd_main; - finfo.dwFlags = FLASHW_ALL; - finfo.uCount = 3; - finfo.dwTimeout = 0; - - FlashWindowEx(&finfo); - } -} - -void -khm_close_main_window(void) { - khm_handle csp_cw; - BOOL keep_running = FALSE; - - if (KHM_SUCCEEDED(khc_open_space(NULL, L"CredWindow", - KHM_PERM_READ, &csp_cw))) { - khm_int32 t; - - if (KHM_SUCCEEDED(khc_read_int32(csp_cw, L"KeepRunning", - &t))) { - keep_running = t; - } else { -#ifdef DEBUG - assert(FALSE); -#endif - } - - khc_close_space(csp_cw); - } else { -#ifdef DEBUG - assert(FALSE); -#endif - } - - if (keep_running) - khm_hide_main_window(); - else - DestroyWindow(khm_hwnd_main); -} - -void -khm_hide_main_window(void) { - khm_handle csp_notices = NULL; - khm_int32 show_warning = FALSE; - - if (khm_nCmdShow != SW_MINIMIZE && - KHM_SUCCEEDED(khc_open_space(NULL, L"CredWindow\\Notices", - KHM_PERM_WRITE, &csp_notices)) && - KHM_SUCCEEDED(khc_read_int32(csp_notices, L"MinimizeWarning", - &show_warning)) && - show_warning != 0) { - - khui_alert * alert; - wchar_t title[KHUI_MAXCCH_TITLE]; - wchar_t msg[KHUI_MAXCCH_MESSAGE]; - - LoadString(khm_hInstance, IDS_WARN_WM_TITLE, - title, ARRAYLENGTH(title)); - LoadString(khm_hInstance, IDS_WARN_WM_MSG, - msg, ARRAYLENGTH(msg)); - - khui_alert_create_simple(title, msg, KHERR_INFO, &alert); - khui_alert_set_flags(alert, KHUI_ALERT_FLAG_REQUEST_BALLOON, - KHUI_ALERT_FLAG_REQUEST_BALLOON); - - khui_alert_show(alert); - - khc_write_int32(csp_notices, L"MinimizeWarning", 0); - } - - if (csp_notices != NULL) - khc_close_space(csp_notices); - - ShowWindow(khm_hwnd_main, SW_HIDE); -} - -BOOL -khm_is_main_window_visible(void) { - return IsWindowVisible(khm_hwnd_main); -} - -BOOL -khm_is_main_window_active(void) { - if (!IsWindowVisible(khm_hwnd_main)) - return FALSE; - if (GetForegroundWindow() == khm_hwnd_main) - return TRUE; - return khm_is_dialog_active(); -} - -void -khm_register_main_wnd_class(void) { - WNDCLASSEX wc; - - wc.cbSize = sizeof(WNDCLASSEX); - wc.style = 0; - wc.lpfnWndProc = khm_null_wnd_proc; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = khm_hInstance; - wc.hIcon = LoadIcon(khm_hInstance, MAKEINTRESOURCE(IDI_MAIN_APP)); - wc.hCursor = LoadCursor((HINSTANCE) NULL, IDC_ARROW); - wc.hIconSm = LoadImage(khm_hInstance, MAKEINTRESOURCE(IDI_MAIN_APP), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE); - wc.hbrBackground = (HBRUSH) (COLOR_APPWORKSPACE); - wc.lpszMenuName = NULL; - wc.lpszClassName = KHUI_NULL_WINDOW_CLASS; - - khm_null_window_class = RegisterClassEx(&wc); - - wc.cbSize = sizeof(WNDCLASSEX); - wc.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW; - wc.lpfnWndProc = khm_main_wnd_proc; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = khm_hInstance; - wc.hIcon = LoadIcon(khm_hInstance, MAKEINTRESOURCE(IDI_MAIN_APP)); - wc.hCursor = LoadCursor((HINSTANCE) NULL, IDC_ARROW); - wc.hIconSm = LoadImage(khm_hInstance, MAKEINTRESOURCE(IDI_MAIN_APP), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE); - wc.hbrBackground = (HBRUSH) (COLOR_APPWORKSPACE); - wc.lpszMenuName = NULL; - wc.lpszClassName = KHUI_MAIN_WINDOW_CLASS; - - khm_main_window_class = RegisterClassEx(&wc); -} - -void -khm_unregister_main_wnd_class(void) { - UnregisterClass(MAKEINTATOM(khm_main_window_class),khm_hInstance); - UnregisterClass(MAKEINTATOM(khm_null_window_class),khm_hInstance); -} diff --git a/src/windows/identity/ui/mainwnd.h b/src/windows/identity/ui/mainwnd.h deleted file mode 100644 index 7916697be..000000000 --- a/src/windows/identity/ui/mainwnd.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_MAINWND_H -#define __KHIMAIRA_MAINWND_H - -#define KHUI_MAIN_WINDOW_CLASS L"KhmMainWindowClass" -#define KHUI_NULL_WINDOW_CLASS L"KhmNullWindowClass" - -extern ATOM khm_main_window_class; -extern HWND khm_hwnd_main; -extern HWND khm_hwnd_rebar; -extern HWND khm_hwnd_main_cred; - -#define KHM_MAIN_WND_NORMAL 0 -#define KHM_MAIN_WND_MINI 1 - -extern int khm_main_wnd_mode; - -void khm_register_main_wnd_class(void); -void khm_unregister_main_wnd_class(void); -void khm_create_main_window_controls(HWND); -void khm_create_main_window(void); -void khm_activate_main_window(void); -void khm_show_main_window(void); -void khm_set_main_window_mode(int mode); -void khm_close_main_window(void); -void khm_hide_main_window(void); -BOOL khm_is_main_window_visible(void); -BOOL khm_is_main_window_active(void); -void khm_adjust_window_dimensions_for_display(RECT * pr, int dock); -LRESULT khm_rebar_notify(LPNMHDR lpnm); - -void -khm_set_dialog_result(HWND hwnd, LRESULT lr); - -LRESULT CALLBACK -khm_main_wnd_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); - -#define WM_KHUI_QUERY_APP_VERSION 32809 -#define WM_KHUI_ASSIGN_COMMANDLINE_V1 32808 -#define WM_KHUI_ASSIGN_COMMANDLINE_V2 32810 - -#define COMMANDLINE_MAP_FMT L"Local\\NetIDMgr_Cmdline_%lu" -#define QUERY_APP_VER_MAP_FMT L"Local\\NetIDMgr_QueryVer_%lu" - -/* dock values for window positioning */ -#define KHM_DOCK_NONE 0 -#define KHM_DOCK_TOPLEFT 1 -#define KHM_DOCK_TOPRIGHT 2 -#define KHM_DOCK_BOTTOMRIGHT 3 -#define KHM_DOCK_BOTTOMLEFT 4 -#define KHM_DOCK_AUTO 256 -#define KHM_DOCKF_DOCKHINT 0x0000ffff -#define KHM_DOCKF_XBORDER 0x00010000 -#endif diff --git a/src/windows/identity/ui/makeacceldef.pl b/src/windows/identity/ui/makeacceldef.pl deleted file mode 100644 index d1cfb2dd2..000000000 --- a/src/windows/identity/ui/makeacceldef.pl +++ /dev/null @@ -1,29 +0,0 @@ -# - -die "Please specify input and output filenames" if($#ARGV != 1); - -open INF, '<', $ARGV[0] or die "Can't open input file"; -open OUF, '>', $ARGV[1] or die "Can't open output file"; - -print OUF <<EOS; -#include<khimaira.h> - - khui_accel_def khui_accel_global[] = { -EOS - -# skip first line - <INF>; - -while(<INF>) { - print OUF "{".$_."},\n"; -} - -print OUF <<EOS; -}; - -int khui_n_accel_global = sizeof(khui_accel_global) / sizeof(khui_accel_def); - -EOS - -close INF; -close OUF; diff --git a/src/windows/identity/ui/makeactiondef.pl b/src/windows/identity/ui/makeactiondef.pl deleted file mode 100644 index f99373588..000000000 --- a/src/windows/identity/ui/makeactiondef.pl +++ /dev/null @@ -1,29 +0,0 @@ -# - -die "Please specify input and output filenames" if($#ARGV != 1); - -open INF, '<', $ARGV[0] or die "Can't open input file"; -open OUF, '>', $ARGV[1] or die "Can't open output file"; - -print OUF <<EOS; -#include<khimaira.h> - - khui_action khui_actions[] = { -EOS - -# skip first line - <INF>; - -while(<INF>) { - print OUF "{".$_."},\n"; -} - -print OUF <<EOS; -}; - -int khui_n_actions = sizeof(khui_actions) / sizeof(khui_action); - -EOS - -close INF; -close OUF; diff --git a/src/windows/identity/ui/netidmgr.exe.manifest.i386 b/src/windows/identity/ui/netidmgr.exe.manifest.i386 deleted file mode 100644 index 3d77cce68..000000000 --- a/src/windows/identity/ui/netidmgr.exe.manifest.i386 +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> -<assemblyIdentity - version="1.0.0.0" - processorArchitecture="X86" - name="MIT.NetIDMgr.UI" - type="win32" -/> -<description>Khimaira Credentials Manager</description> -<dependency> - <dependentAssembly> - <assemblyIdentity - type="win32" - name="Microsoft.Windows.Common-Controls" - version="6.0.0.0" - processorArchitecture="X86" - publicKeyToken="6595b64144ccf1df" - language="*" - /> - </dependentAssembly> -</dependency> -</assembly> diff --git a/src/windows/identity/ui/netidmgr.manifest.amd64.vc7 b/src/windows/identity/ui/netidmgr.manifest.amd64.vc7 deleted file mode 100644 index 0db331bb7..000000000 --- a/src/windows/identity/ui/netidmgr.manifest.amd64.vc7 +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> -<assemblyIdentity - version="1.0.0.0" - processorArchitecture="amd64" - name="MIT.NetIDMgr.UI" - type="win32" -/> -<description>Khimaira Credentials Manager</description> -<dependency> - <dependentAssembly> - <assemblyIdentity - type="win32" - name="Microsoft.Windows.Common-Controls" - version="6.0.0.0" - processorArchitecture="amd64" - publicKeyToken="6595b64144ccf1df" - language="*" - /> - </dependentAssembly> -</dependency> -</assembly> diff --git a/src/windows/identity/ui/netidmgr.manifest.amd64.vc7.debug b/src/windows/identity/ui/netidmgr.manifest.amd64.vc7.debug deleted file mode 100644 index 0db331bb7..000000000 --- a/src/windows/identity/ui/netidmgr.manifest.amd64.vc7.debug +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> -<assemblyIdentity - version="1.0.0.0" - processorArchitecture="amd64" - name="MIT.NetIDMgr.UI" - type="win32" -/> -<description>Khimaira Credentials Manager</description> -<dependency> - <dependentAssembly> - <assemblyIdentity - type="win32" - name="Microsoft.Windows.Common-Controls" - version="6.0.0.0" - processorArchitecture="amd64" - publicKeyToken="6595b64144ccf1df" - language="*" - /> - </dependentAssembly> -</dependency> -</assembly> diff --git a/src/windows/identity/ui/netidmgr.manifest.amd64.vc8 b/src/windows/identity/ui/netidmgr.manifest.amd64.vc8 deleted file mode 100644 index 6fb1e8d1e..000000000 --- a/src/windows/identity/ui/netidmgr.manifest.amd64.vc8 +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> -<assemblyIdentity - version="1.0.0.0" - processorArchitecture="amd64" - name="MIT.NetIDMgr.UI" - type="win32" -/> -<description>Khimaira Credentials Manager</description> -<dependency> - <dependentAssembly> - <assemblyIdentity - type="win32" - name="Microsoft.Windows.Common-Controls" - version="6.0.0.0" - processorArchitecture="amd64" - publicKeyToken="6595b64144ccf1df" - language="*" - /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity - type="win32" - name="Microsoft.VC80.DebugCRT" - version="8.0.50215.4652" - processorArchitecture="amd64" - publicKeyToken="1fc8b3b9a1e18e3b" - /> - </dependentAssembly> -</dependency> -</assembly> diff --git a/src/windows/identity/ui/netidmgr.manifest.amd64.vc8.debug b/src/windows/identity/ui/netidmgr.manifest.amd64.vc8.debug deleted file mode 100644 index 6fb1e8d1e..000000000 --- a/src/windows/identity/ui/netidmgr.manifest.amd64.vc8.debug +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> -<assemblyIdentity - version="1.0.0.0" - processorArchitecture="amd64" - name="MIT.NetIDMgr.UI" - type="win32" -/> -<description>Khimaira Credentials Manager</description> -<dependency> - <dependentAssembly> - <assemblyIdentity - type="win32" - name="Microsoft.Windows.Common-Controls" - version="6.0.0.0" - processorArchitecture="amd64" - publicKeyToken="6595b64144ccf1df" - language="*" - /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity - type="win32" - name="Microsoft.VC80.DebugCRT" - version="8.0.50215.4652" - processorArchitecture="amd64" - publicKeyToken="1fc8b3b9a1e18e3b" - /> - </dependentAssembly> -</dependency> -</assembly> diff --git a/src/windows/identity/ui/netidmgr.manifest.i386.vc7 b/src/windows/identity/ui/netidmgr.manifest.i386.vc7 deleted file mode 100644 index 3d77cce68..000000000 --- a/src/windows/identity/ui/netidmgr.manifest.i386.vc7 +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> -<assemblyIdentity - version="1.0.0.0" - processorArchitecture="X86" - name="MIT.NetIDMgr.UI" - type="win32" -/> -<description>Khimaira Credentials Manager</description> -<dependency> - <dependentAssembly> - <assemblyIdentity - type="win32" - name="Microsoft.Windows.Common-Controls" - version="6.0.0.0" - processorArchitecture="X86" - publicKeyToken="6595b64144ccf1df" - language="*" - /> - </dependentAssembly> -</dependency> -</assembly> diff --git a/src/windows/identity/ui/netidmgr.manifest.i386.vc7.debug b/src/windows/identity/ui/netidmgr.manifest.i386.vc7.debug deleted file mode 100644 index 3d77cce68..000000000 --- a/src/windows/identity/ui/netidmgr.manifest.i386.vc7.debug +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> -<assemblyIdentity - version="1.0.0.0" - processorArchitecture="X86" - name="MIT.NetIDMgr.UI" - type="win32" -/> -<description>Khimaira Credentials Manager</description> -<dependency> - <dependentAssembly> - <assemblyIdentity - type="win32" - name="Microsoft.Windows.Common-Controls" - version="6.0.0.0" - processorArchitecture="X86" - publicKeyToken="6595b64144ccf1df" - language="*" - /> - </dependentAssembly> -</dependency> -</assembly> diff --git a/src/windows/identity/ui/netidmgr.manifest.i386.vc8 b/src/windows/identity/ui/netidmgr.manifest.i386.vc8 deleted file mode 100644 index d2ced7fd2..000000000 --- a/src/windows/identity/ui/netidmgr.manifest.i386.vc8 +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> -<assemblyIdentity - version="1.0.0.0" - processorArchitecture="X86" - name="MIT.NetIDMgr.UI" - type="win32" -/> -<description>Khimaira Credentials Manager</description> -<dependency> - <dependentAssembly> - <assemblyIdentity - type="win32" - name="Microsoft.Windows.Common-Controls" - version="6.0.0.0" - processorArchitecture="X86" - publicKeyToken="6595b64144ccf1df" - language="*" - /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity - type="win32" - name="Microsoft.VC80.DebugCRT" - version="8.0.50215.4652" - processorArchitecture="x86" - publicKeyToken="1fc8b3b9a1e18e3b" - /> - </dependentAssembly> -</dependency> -</assembly> diff --git a/src/windows/identity/ui/netidmgr.manifest.i386.vc8.debug b/src/windows/identity/ui/netidmgr.manifest.i386.vc8.debug deleted file mode 100644 index d2ced7fd2..000000000 --- a/src/windows/identity/ui/netidmgr.manifest.i386.vc8.debug +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> -<assemblyIdentity - version="1.0.0.0" - processorArchitecture="X86" - name="MIT.NetIDMgr.UI" - type="win32" -/> -<description>Khimaira Credentials Manager</description> -<dependency> - <dependentAssembly> - <assemblyIdentity - type="win32" - name="Microsoft.Windows.Common-Controls" - version="6.0.0.0" - processorArchitecture="X86" - publicKeyToken="6595b64144ccf1df" - language="*" - /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity - type="win32" - name="Microsoft.VC80.DebugCRT" - version="8.0.50215.4652" - processorArchitecture="x86" - publicKeyToken="1fc8b3b9a1e18e3b" - /> - </dependentAssembly> -</dependency> -</assembly> diff --git a/src/windows/identity/ui/newcredwnd.c b/src/windows/identity/ui/newcredwnd.c deleted file mode 100644 index e0c60f5c0..000000000 --- a/src/windows/identity/ui/newcredwnd.c +++ /dev/null @@ -1,3034 +0,0 @@ -/* - * 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 - * 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 the OEMRESOURCE constants for locating standard icon - resources. */ -#define OEMRESOURCE - -#include<khmapp.h> -#if _WIN32_WINNT >= 0x0501 -#include<uxtheme.h> -#endif -#include<assert.h> - -ATOM khui_newcredwnd_cls; - -/* forward dcl */ -static void -nc_position_credtext(khui_nc_wnd_data * d); - -/* Common dialog procedure used by the main credential panel - (IDD_NC_NEWCRED) and the button bar (IDC_NC_BBAR). */ - -static void -nc_layout_main_panel(khui_nc_wnd_data * d); - -static void -nc_layout_new_cred_window(khui_nc_wnd_data * d); - -static INT_PTR CALLBACK -nc_common_dlg_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) -{ - switch(uMsg) { - case WM_INITDIALOG: - { - khui_nc_wnd_data * d; - - d = (khui_nc_wnd_data *) lParam; - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, DWLP_USER, lParam); -#pragma warning(pop) - - if (d->nc->subtype == KMSG_CRED_PASSWORD) { - ShowWindow(GetDlgItem(hwnd, IDC_NC_ADVANCED), - SW_HIDE); - } - } - return TRUE; - - case WM_COMMAND: - { - int ctrl_id; - - ctrl_id = LOWORD(wParam); - if (ctrl_id < KHUI_CW_ID_MIN || - ctrl_id > KHUI_CW_ID_MAX) { - /* pump it to the parent */ - PostMessage(GetParent(hwnd), WM_COMMAND, wParam, lParam); - return TRUE; - } /* else we allow the message to fall through and get - passed into the identity provider's message - handler. */ - } - break; - - case KHUI_WM_NC_NOTIFY: - { - khui_nc_wnd_data * d; - d = (khui_nc_wnd_data *)(LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - if (d == NULL) - break; - - /* message sent by parent to notify us of something */ - switch(HIWORD(wParam)) { - case WMNC_DIALOG_EXPAND: - /* fallthrough */ - case WMNC_UPDATE_LAYOUT: - if(hwnd == d->dlg_main) { - - nc_layout_main_panel(d); - - return TRUE; - } - break; /* nop */ - } - } - return TRUE; - } - - /* check if we have a wnd_data, and if so pass the message on to - the identity provider callback. */ - { - khui_nc_wnd_data * d; - - d = (khui_nc_wnd_data *) (LONG_PTR) - GetWindowLongPtr(hwnd, DWLP_USER); - - /* TODO: filter out and forward only the messages that - originated or pertain to the identity selection - controls. */ - if (d && d->nc && d->nc->ident_cb) { - return d->nc->ident_cb(d->nc, WMNC_IDENT_WMSG, hwnd, uMsg, - wParam, lParam); - } - } - - return FALSE; -} - -static void -nc_notify_clear(khui_nc_wnd_data * d) { - - if (d->notif_type == NC_NOTIFY_NONE) - /* there are no notifications anyway. */ - return; - - if (d->hwnd_notif_label) - DestroyWindow(d->hwnd_notif_label); - - if (d->hwnd_notif_aux) - DestroyWindow(d->hwnd_notif_aux); - - d->hwnd_notif_label = NULL; - d->hwnd_notif_aux = NULL; - - SetRectEmpty(&d->r_notif); - - d->notif_type = NC_NOTIFY_NONE; - - /* Note that we must call nc_layout_main_panel() after calling - this to adjust the layout of the main panel. However we aren't - calling it here since we might want to add another set of - notifications or make other changes to the main panel content - before calling nc_layout_main_panel(). */ -} - -static void -nc_notify_marquee(khui_nc_wnd_data * d, const wchar_t * label) { - -#if (_WIN32_IE >= 0x0600) - HDC hdc; - size_t length; - SIZE label_size; -#endif - - RECT r_label; - RECT r_mq; - RECT r_row; - HFONT hfont; - HWND hwnd; - HDWP hdefer; - - /* Clear the notification area. We only support one notification - at a time. */ - nc_notify_clear(d); - -#ifdef DEBUG - assert(d->dlg_main); -#endif - -#if (_WIN32_IE >= 0x0600) - - /* We can only show the marquee control if the comctl32 DLL is - version 6.0 or later. Otherwise we only show the label. */ - - if (FAILED(StringCchLength(label, KHUI_MAXCCH_SHORT_DESC, &length))) { -#ifdef DEBUG - assert(FALSE); -#endif - length = KHUI_MAXCCH_SHORT_DESC; - } - - /* See how big the notification control needs to be. */ - - hdc = GetDC(d->dlg_main); -#ifdef DEBUG - assert(hdc != NULL); -#endif - - GetTextExtentPoint32(hdc, label, (int) length, &label_size); - - ReleaseDC(d->dlg_main, hdc); - - CopyRect(&r_row, &d->r_row); - - if (label_size.cx > d->r_e_label.right - d->r_e_label.left) { - /* using an entire row */ - CopyRect(&r_label, &d->r_row); - CopyRect(&r_mq, &d->r_n_input); - OffsetRect(&r_mq, 0, r_row.bottom - r_row.top); - r_row.bottom += r_row.bottom - r_row.top; - } else if (label_size.cx > d->r_n_label.right - d->r_n_label.left) { - /* using large labels */ - CopyRect(&r_label, &d->r_e_label); - CopyRect(&r_mq, &d->r_e_input); - } else { - /* normal labels */ - CopyRect(&r_label, &d->r_n_label); - CopyRect(&r_mq, &d->r_n_input); - } - - InflateRect(&r_mq, 0, - ((r_mq.bottom - r_mq.top) / 4)); - -#else /* _WIN32_IE < 0x0600 */ - - /* We are just showing the label */ - CopyRect(&r_row, &d->r_row); - CopyRect(&r_label, &r_row); - SetRectEmpty(&r_mq); - -#endif /* _WIN32_IE >= 0x0600 */ - - { - long y; - - if (IsRectEmpty(&d->r_custprompt)) { - y = d->r_idspec.bottom; - } else { - y = d->r_custprompt.bottom; - } - - OffsetRect(&r_row, d->r_area.left, y); - OffsetRect(&r_label, r_row.left, r_row.top); - OffsetRect(&r_mq, r_row.left, r_row.top); - } - - hfont = (HFONT) SendMessage(d->dlg_main, WM_GETFONT, 0, 0); - - hdefer = BeginDeferWindowPos(2); - - /* the label */ - hwnd = CreateWindowEx(0, - L"STATIC", - label, - WS_CHILD | SS_ENDELLIPSIS, - r_label.left, r_label.top, - r_label.right - r_label.left, - r_label.bottom - r_label.top, - d->dlg_main, - NULL, NULL, NULL); -#ifdef DEBUG - assert(hwnd != NULL); -#endif - SendMessage(hwnd, WM_SETFONT, (WPARAM) hfont, (LPARAM) TRUE); - - DeferWindowPos(hdefer, hwnd, NULL, - 0, 0, 0, 0, - SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | - SWP_NOSIZE | SWP_SHOWWINDOW); - - d->hwnd_notif_label = hwnd; - - /* and the marquee */ - -#if (_WIN32_IE >= 0x0600) - - /* unfortunately, the marquee is only available on comctl32 - version 6.0 or later. On previous versions, we only display - the message label. */ - - hwnd = CreateWindowEx(0, - PROGRESS_CLASS, - L"", - WS_CHILD | PBS_MARQUEE, - r_mq.left, r_mq.top, - r_mq.right - r_mq.left, - r_mq.bottom - r_mq.top, - d->dlg_main, - NULL, NULL, NULL); -#ifdef DEBUG - assert(hwnd != NULL); -#endif - - SendMessage(hwnd, PBM_SETMARQUEE, TRUE, 100); - - DeferWindowPos(hdefer, hwnd, NULL, - 0, 0, 0, 0, - SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | - SWP_NOSIZE | SWP_SHOWWINDOW); - - d->hwnd_notif_aux = hwnd; - -#endif /* _WIN32_IE >= 0x0600 */ - - EndDeferWindowPos(hdefer); - - CopyRect(&d->r_notif, &r_row); - - d->notif_type = NC_NOTIFY_MARQUEE; - - /* Note that we must call nc_layout_main_panel() after calling - this to adjust the layout of the main panel. However we aren't - calling it here since we might want to add another set of - notifications or make other changes to the main panel content - before calling nc_layout_main_panel(). */ -} - -static void -nc_notify_message(khui_nc_wnd_data * d, - kherr_severity severity, - const wchar_t * message) { - - SIZE icon_size; - LPCTSTR icon_res; - HICON h_icon; - HWND hwnd; - HFONT hfont; - HDWP hdefer; - - RECT r_row; - RECT r_label; - RECT r_icon; - - nc_notify_clear(d); - - icon_size.cx = GetSystemMetrics(SM_CXSMICON); - icon_size.cy = GetSystemMetrics(SM_CYSMICON); - - switch(severity) { - case KHERR_INFO: - icon_res = MAKEINTRESOURCE(OIC_INFORMATION); - break; - - case KHERR_WARNING: - icon_res = MAKEINTRESOURCE(OIC_WARNING); - break; - - case KHERR_ERROR: - icon_res = MAKEINTRESOURCE(OIC_ERROR); - break; - - default: - icon_res = NULL; - } - - if (icon_res != NULL) { - h_icon = (HICON) LoadImage(NULL, - icon_res, - IMAGE_ICON, - icon_size.cx, - icon_size.cy, - LR_DEFAULTCOLOR | LR_SHARED); - } else { - h_icon = NULL; - } - - CopyRect(&r_row, &d->r_row); - -#define CENTERVALUE(w,v) ((w)/2 - (v)/2) - - SetRect(&r_icon, - 0, CENTERVALUE(r_row.bottom - r_row.top, icon_size.cy), - icon_size.cx, - CENTERVALUE(r_row.bottom - r_row.top, icon_size.cy) + icon_size.cy); - -#undef CENTERVALUE - - CopyRect(&r_label, &r_row); - OffsetRect(&r_label, -r_label.left, -r_label.top); - r_label.left += (icon_size.cx * 3) / 2; - - { - long y; - - if (IsRectEmpty(&d->r_custprompt)) { - y = d->r_idspec.bottom; - } else { - y = d->r_custprompt.bottom; - } - - OffsetRect(&r_row, d->r_area.left, y); - OffsetRect(&r_label, r_row.left, r_row.top); - OffsetRect(&r_icon, r_row.left, r_row.top); - } - - hfont = (HFONT) SendMessage(d->dlg_main, WM_GETFONT, 0, 0); - - hdefer = BeginDeferWindowPos(2); - - hwnd = CreateWindowEx(0, - L"STATIC", - message, - WS_CHILD | SS_ENDELLIPSIS | SS_CENTER, - r_label.left, r_label.top, - r_label.right - r_label.left, - r_label.bottom - r_label.top, - d->dlg_main, - NULL, NULL, NULL); -#ifdef DEBUG - assert(hwnd != NULL); -#endif - SendMessage(hwnd, WM_SETFONT, (WPARAM) hfont, (LPARAM) TRUE); - - DeferWindowPos(hdefer, hwnd, NULL, - 0, 0, 0, 0, - SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | - SWP_NOSIZE | SWP_SHOWWINDOW); - - d->hwnd_notif_label = hwnd; - - hwnd = CreateWindowEx(0, - L"STATIC", - NULL, - WS_CHILD | SS_ICON | -#if (_WIN32_IE >= 0x0600) - SS_REALSIZECONTROL -#else - 0 -#endif - , - r_icon.left, r_icon.top, - r_icon.right - r_icon.left, - r_icon.bottom - r_icon.top, - d->dlg_main, - NULL, NULL, NULL); -#ifdef DEBUG - assert(hwnd != NULL); -#endif - - if (h_icon && hwnd) - SendMessage(hwnd, STM_SETICON, (WPARAM) h_icon, 0); - - DeferWindowPos(hdefer, hwnd, NULL, - 0, 0, 0, 0, - SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | - SWP_NOSIZE | SWP_SHOWWINDOW | SWP_NOZORDER); - - d->hwnd_notif_aux = hwnd; - - EndDeferWindowPos(hdefer); - - CopyRect(&d->r_notif, &r_row); - - d->notif_type = NC_NOTIFY_MESSAGE; - - /* Note that we must call nc_layout_main_panel() after calling - this to adjust the layout of the main panel. However we aren't - calling it here since we might want to add another set of - notifications or make other changes to the main panel content - before calling nc_layout_main_panel(). */ -} - -static void -nc_layout_main_panel(khui_nc_wnd_data * d) -{ - RECT r_main; - HWND hw_ct; - HWND hw_ct_label; - HDWP hdwp; - RECT r_used; /* extent used by identity specifiers, - custom prompts and notificaiton - controls. */ - - RECT r_wmain; /* extents of the main window in screen - coordinates. */ - - r_main.left = 0; - r_main.top = 0; - r_main.bottom = NCDLG_HEIGHT; - r_main.right = NCDLG_WIDTH; - - MapDialogRect(d->dlg_main, &r_main); - - CopyRect(&r_used, &d->r_idspec); - - GetWindowRect(d->dlg_main, &r_wmain); - - hdwp = BeginDeferWindowPos(7); - - /* check if the notification area and the custom prompt area are - overlapping. */ - - if (d->notif_type != NC_NOTIFY_NONE) { - long delta_y = 0; - RECT r; - - CopyRect(&r, &d->r_custprompt); - - if (IsRectEmpty(&d->r_custprompt)) { - /* if there are no custom prompts, then the notification - area should be immediately below the identitify - specifers. */ - - delta_y = d->r_idspec.bottom - d->r_notif.top; - } else { - /* otherwise, the notification area should be immediately - below the custom prompt area */ - - delta_y = d->r_custprompt.bottom - d->r_notif.top; - } - - if (delta_y != 0) { - RECT r_lbl; - RECT r_aux; - - if (d->hwnd_notif_label) { - GetWindowRect(d->hwnd_notif_label, &r_lbl); - OffsetRect(&r_lbl, -r_wmain.left, delta_y - r_wmain.top); - - DeferWindowPos(hdwp, d->hwnd_notif_label, NULL, - r_lbl.left, r_lbl.top, 0, 0, - SWP_NOACTIVATE | SWP_NOOWNERZORDER | - SWP_NOZORDER | SWP_NOSIZE); - } - - if (d->hwnd_notif_aux) { - GetWindowRect(d->hwnd_notif_aux, &r_aux); - OffsetRect(&r_aux, -r_wmain.left, delta_y - r_wmain.top); - - DeferWindowPos(hdwp, d->hwnd_notif_aux, NULL, - r_aux.left, r_aux.top, 0, 0, - SWP_NOACTIVATE | SWP_NOOWNERZORDER | - SWP_NOZORDER | SWP_NOSIZE); - } - - OffsetRect(&d->r_notif, 0, delta_y); - } - } - - if (!IsRectEmpty(&d->r_custprompt)) { - r_used.bottom = max(d->r_custprompt.bottom, - r_used.bottom); - } - - if (!IsRectEmpty(&d->r_notif)) { - r_used.bottom = max(d->r_notif.bottom, - r_used.bottom); - } - - if (d->nc->mode == KHUI_NC_MODE_MINI) { - RECT r_ok; - RECT r_cancel; - RECT r_advanced; - HWND hw; - - hw = GetDlgItem(d->dlg_main, IDOK); -#ifdef DEBUG - assert(hw != NULL); -#endif - GetWindowRect(hw, &r_ok); - OffsetRect(&r_ok, -r_wmain.left, -r_ok.top + r_used.bottom); - - DeferWindowPos(hdwp, hw, NULL, - r_ok.left, r_ok.top, 0, 0, - SWP_NOACTIVATE | SWP_NOOWNERZORDER | - SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW); - - hw = GetDlgItem(d->dlg_main, IDCANCEL); -#ifdef DEBUG - assert(hw != NULL); -#endif - GetWindowRect(hw, &r_cancel); - OffsetRect(&r_cancel, -r_wmain.left, -r_cancel.top + r_used.bottom); - - DeferWindowPos(hdwp, hw, NULL, - r_cancel.left, r_cancel.top, 0, 0, - SWP_NOACTIVATE | SWP_NOOWNERZORDER | - SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW); - - hw = GetDlgItem(d->dlg_main, IDC_NC_ADVANCED); -#ifdef DEBUG - assert(hw != NULL); -#endif - GetWindowRect(hw, &r_advanced); - OffsetRect(&r_advanced, -r_wmain.left, -r_advanced.top + r_used.bottom); - - DeferWindowPos(hdwp, hw, NULL, - r_advanced.left, r_advanced.top, 0, 0, - SWP_NOACTIVATE | SWP_NOOWNERZORDER | - SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW); - - /* and now update the extents of the main panel */ - r_main.bottom = r_used.bottom + (r_ok.bottom - r_ok.top) + d->r_area.top; - - CopyRect(&d->r_main, &r_main); - - } else { - - HWND hw; - - hw = GetDlgItem(d->dlg_main, IDOK); -#ifdef DEBUG - assert(hw != NULL); -#endif - if (IsWindowVisible(hw)) - DeferWindowPos(hdwp, hw, NULL, - 0, 0, 0, 0, - SWP_HIDEWINDOW | SWP_NOMOVE | SWP_NOSIZE | - SWP_NOOWNERZORDER | SWP_NOZORDER); - - hw = GetDlgItem(d->dlg_main, IDCANCEL); -#ifdef DEBUG - assert(hw != NULL); -#endif - if (IsWindowVisible(hw)) - DeferWindowPos(hdwp, hw, NULL, - 0, 0, 0, 0, - SWP_HIDEWINDOW | SWP_NOMOVE | SWP_NOSIZE | - SWP_NOOWNERZORDER | SWP_NOZORDER); - - hw = GetDlgItem(d->dlg_main, IDC_NC_ADVANCED); -#ifdef DEBUG - assert(hw != NULL); -#endif - if (IsWindowVisible(hw)) - DeferWindowPos(hdwp, hw, NULL, - 0, 0, 0, 0, - SWP_HIDEWINDOW | SWP_NOMOVE | SWP_NOSIZE | - SWP_NOOWNERZORDER | SWP_NOZORDER); - - d->r_credtext.top = r_used.bottom; - - CopyRect(&d->r_main, &r_main); - } - - /* now update the layout of the credentials text window */ - - hw_ct = GetDlgItem(d->dlg_main, IDC_NC_CREDTEXT); - hw_ct_label = GetDlgItem(d->dlg_main, IDC_NC_CREDTEXT_LABEL); -#ifdef DEBUG - assert(hw_ct != NULL); - assert(hw_ct_label != NULL); -#endif - - if (d->nc->mode == KHUI_NC_MODE_MINI || - d->r_credtext.bottom < d->r_credtext.top + d->r_row.bottom * 2) { - - /* either we aren't supposed to show the credentials text - window, or we don't have enough room. */ - if (IsWindowVisible(hw_ct) || IsWindowVisible(hw_ct_label)) { - - DeferWindowPos(hdwp, hw_ct, NULL, - 0, 0, 0, 0, - SWP_HIDEWINDOW | SWP_NOOWNERZORDER | - SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE); - - DeferWindowPos(hdwp, hw_ct_label, NULL, - 0, 0, 0, 0, - SWP_HIDEWINDOW | SWP_NOOWNERZORDER | - SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE); - - } - - } else { - - DeferWindowPos(hdwp, - hw_ct, NULL, - d->r_credtext.left + d->r_n_input.left, /* x */ - d->r_credtext.top, /* y */ - d->r_n_input.right - d->r_n_input.left, /* width */ - d->r_credtext.bottom - d->r_credtext.top, /* height */ - SWP_NOACTIVATE | SWP_NOOWNERZORDER | - SWP_NOZORDER | SWP_SHOWWINDOW); - - DeferWindowPos(hdwp, - hw_ct_label, NULL, - d->r_credtext.left + d->r_n_label.left, /* x */ - d->r_credtext.top, /* y */ - d->r_n_label.right - d->r_n_label.left, /* width */ - d->r_n_label.bottom - d->r_n_label.top, /* height */ - SWP_NOACTIVATE | SWP_NOOWNERZORDER | - SWP_NOZORDER | SWP_SHOWWINDOW); - } - - EndDeferWindowPos(hdwp); - - /* NOTE: although we updated d->r_main, if the new credentials - window is in mini mode, we must call - nc_layout_new_cred_window() to adjust the size of the new - credentials window to fit the main panel. We don't do it here - because we need to keep these two operations separate. */ -} - -/* Credential type panel comparison function. Tabs are sorted based - on the following criteria: - - 1) By ordinal - Panels with ordinal -1 will be ranked after panels - whose ordinal is not -1. - - 2) By name - Case insensitive comparison of the name. If the panel - does not have a name (i.e. the ->name member is NULL, it will be - ranked after panels which have a name. - */ -static int __cdecl -nc_tab_sort_func(const void * v1, const void * v2) -{ - /* v1 and v2 and of type : khui_new_creds_by_type ** */ - khui_new_creds_by_type *t1, *t2; - - t1 = *((khui_new_creds_by_type **) v1); - t2 = *((khui_new_creds_by_type **) v2); - - if(t1->ordinal != -1) { - if(t2->ordinal != -1) { - if(t1->ordinal == t2->ordinal) { - if (t1->name && t2->name) - return _wcsicmp(t1->name, t2->name); - else if (t1->name) - return -1; - else if (t2->name) - return 1; - else - return 0; - } else { - /* safe to convert to an int here */ - return (int) (t1->ordinal - t2->ordinal); - } - } else - return -1; - } else { - if(t2->ordinal != -1) - return 1; - else if (t1->name && t2->name) - return wcscmp(t1->name, t2->name); - else if (t1->name) - return -1; - else if (t2->name) - return 1; - else - return 0; - } -} - -static void -nc_notify_types(khui_new_creds * c, UINT uMsg, - WPARAM wParam, LPARAM lParam, BOOL sync) -{ - khm_size i; - - for(i=0; i<c->n_types; i++) { - - if (c->types[i]->hwnd_panel == NULL) - continue; - - if (sync) - SendMessage(c->types[i]->hwnd_panel, uMsg, wParam, lParam); - else - PostMessage(c->types[i]->hwnd_panel, uMsg, wParam, lParam); - } -} - -static void -nc_clear_password_fields(khui_nc_wnd_data * d) -{ - khm_size i; - khm_boolean need_sync = FALSE; - - khui_cw_lock_nc(d->nc); - - for (i=0; i < d->nc->n_prompts; i++) { - if ((d->nc->prompts[i]->flags & KHUI_NCPROMPT_FLAG_HIDDEN) && - d->nc->prompts[i]->hwnd_edit) { - SetWindowText(d->nc->prompts[i]->hwnd_edit, - L""); - need_sync = TRUE; - } - } - - khui_cw_unlock_nc(d->nc); - - if (need_sync) { - khui_cw_sync_prompt_values(d->nc); - } -} - -/* used by nc_enable_controls */ - -struct nc_enum_wnd_data { - khui_nc_wnd_data * d; - khm_boolean enable; -}; - -static -BOOL CALLBACK -nc_enum_wnd_proc(HWND hwnd, - LPARAM lParam) -{ - struct nc_enum_wnd_data * wd; - - wd = (struct nc_enum_wnd_data *) lParam; - - EnableWindow(hwnd, wd->enable); - - return TRUE; -} - -static void -nc_enable_controls(khui_nc_wnd_data * d, khm_boolean enable) -{ - struct nc_enum_wnd_data wd; - - ZeroMemory(&wd, sizeof(wd)); - - wd.d = d; - wd.enable = enable; - - EnumChildWindows(d->dlg_main, nc_enum_wnd_proc, (LPARAM) &wd); -} - -#define NC_MAXCCH_CREDTEXT 16384 -#define NC_MAXCB_CREDTEXT (NC_MAXCCH_CREDTEXT * sizeof(wchar_t)) - -static void -nc_update_credtext(khui_nc_wnd_data * d) -{ - wchar_t * ctbuf = NULL; - wchar_t * buf; - BOOL okEnable = FALSE; - BOOL validId = FALSE; - HWND hw = NULL; - size_t cch = 0; - - ctbuf = PMALLOC(NC_MAXCB_CREDTEXT); - - assert(ctbuf != NULL); - - LoadString(khm_hInstance, IDS_NC_CREDTEXT_TABS, ctbuf, NC_MAXCCH_CREDTEXT); - StringCchLength(ctbuf, NC_MAXCCH_CREDTEXT, &cch); - buf = ctbuf + cch; - nc_notify_types(d->nc, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_UPDATE_CREDTEXT), (LPARAM) d->nc, TRUE); - - /* hopefully all the types have updated their credential texts */ - - /* if the dialog is in the mini mode, we have to display - exceptions using a notification. */ - if (d->nc->mode == KHUI_NC_MODE_MINI) { - BOOL need_layout = FALSE; - if (d->nc->n_identities == 0) { - - /* There are no identities selected. We don't show any - notifications here. */ - if (d->notif_type != NC_NOTIFY_NONE) { - nc_notify_clear(d); - need_layout = TRUE; - } - - } else { - - wchar_t id_name[KCDB_IDENT_MAXCCH_NAME]; - wchar_t format[256]; - wchar_t msg[ARRAYLENGTH(format) + ARRAYLENGTH(id_name)]; - khm_size cbbuf; - khm_int32 flags; - - kcdb_identity_get_flags(d->nc->identities[0], &flags); - - cbbuf = sizeof(id_name); - kcdb_identity_get_name(d->nc->identities[0], id_name, &cbbuf); - - if (flags & KCDB_IDENT_FLAG_INVALID) { - - /* identity is invalid */ - LoadString(khm_hInstance, IDS_NCN_IDENT_INVALID, - format, ARRAYLENGTH(format)); - StringCbPrintf(msg, sizeof(msg), format, id_name); - - nc_notify_message(d, KHERR_ERROR, msg); - - need_layout = TRUE; - - } else if ((flags & KCDB_IDENT_FLAG_VALID) || - d->nc->subtype == KMSG_CRED_PASSWORD) { - /* special case: If we are going to change the - password, we don't expect the identity provider to - validate the identity in real time. As such, we - assume that the identity is valid. */ - - /* identity is valid */ - if (d->notif_type != NC_NOTIFY_NONE) { - nc_notify_clear(d); - need_layout = TRUE; - } - - } else if (flags & KCDB_IDENT_FLAG_UNKNOWN) { - - /* unknown state */ - LoadString(khm_hInstance, IDS_NCN_IDENT_UNKNOWN, - format, ARRAYLENGTH(format)); - StringCbPrintf(msg, sizeof(msg), format, id_name); - - nc_notify_message(d, KHERR_WARNING, msg); - - need_layout = TRUE; - - } else { - - /* still checking */ - LoadString(khm_hInstance, IDS_NCN_IDENT_CHECKING, - format, ARRAYLENGTH(format)); - StringCbPrintf(msg, sizeof(msg), format, id_name); - - nc_notify_marquee(d, msg); - - need_layout = TRUE; - - } - } - - if (need_layout) { - nc_layout_main_panel(d); - nc_layout_new_cred_window(d); - } - } - - if(d->nc->n_identities == 1) { - wchar_t main_fmt[256]; - wchar_t id_fmt[256]; - wchar_t id_name[KCDB_IDENT_MAXCCH_NAME]; - wchar_t id_string[KCDB_IDENT_MAXCCH_NAME + 256]; - khm_size cbbuf; - khm_int32 flags; - - LoadString(khm_hInstance, IDS_NC_CREDTEXT_ID_ONE, - main_fmt, (int) ARRAYLENGTH(main_fmt)); - - cbbuf = sizeof(id_name); - kcdb_identity_get_name(d->nc->identities[0], id_name, &cbbuf); - - kcdb_identity_get_flags(d->nc->identities[0], &flags); - - if (flags & KCDB_IDENT_FLAG_INVALID) { - LoadString(khm_hInstance, IDS_NC_CREDTEXT_ID_INVALID, - id_fmt, (int) ARRAYLENGTH(id_fmt)); - } else if(flags & KCDB_IDENT_FLAG_VALID) { - LoadString(khm_hInstance, IDS_NC_CREDTEXT_ID_VALID, - id_fmt, (int) ARRAYLENGTH(id_fmt)); - } else if(flags & KCDB_IDENT_FLAG_UNKNOWN) { - LoadString(khm_hInstance, IDS_NC_CREDTEXT_ID_UNCHECKED, - id_fmt, (int) ARRAYLENGTH(id_fmt)); - } else if(d->nc->subtype == KMSG_CRED_NEW_CREDS) { - LoadString(khm_hInstance, IDS_NC_CREDTEXT_ID_CHECKING, - id_fmt, (int) ARRAYLENGTH(id_fmt)); - } else { - LoadString(khm_hInstance, IDS_NC_CREDTEXT_ID_UNCHECKED, - id_fmt, (int) ARRAYLENGTH(id_fmt)); - } - - StringCbPrintf(id_string, sizeof(id_string), id_fmt, id_name); - - StringCbPrintf(buf, NC_MAXCB_CREDTEXT - cch*sizeof(wchar_t), - main_fmt, id_string); - - if (flags & KCDB_IDENT_FLAG_VALID) { - if (flags & KCDB_IDENT_FLAG_DEFAULT) - LoadString(khm_hInstance, IDS_NC_ID_DEF, - id_string, ARRAYLENGTH(id_string)); - else if (d->nc->set_default) - LoadString(khm_hInstance, IDS_NC_ID_WDEF, - id_string, ARRAYLENGTH(id_string)); - else - LoadString(khm_hInstance, IDS_NC_ID_NDEF, - id_string, ARRAYLENGTH(id_string)); - - StringCbCat(buf, NC_MAXCB_CREDTEXT - cch * sizeof(wchar_t), - id_string); - } - - } else if(d->nc->n_identities > 1) { - wchar_t *ids_string; - khm_size cb_ids_string; - - wchar_t id_name[KCDB_IDENT_MAXCCH_NAME]; - wchar_t id_fmt[256]; - wchar_t id_string[KCDB_IDENT_MAXCCH_NAME + 256]; - - wchar_t main_fmt[256]; - khm_size cbbuf; - - LoadString(khm_hInstance, IDS_NC_CREDTEXT_ID_MANY, - main_fmt, (int) ARRAYLENGTH(main_fmt)); - - /* we are going to concatenate all the identity names into - a comma separated string */ - - /* d->nc->n_identities is at least 2 */ - ids_string = PMALLOC((KCDB_IDENT_MAXCB_NAME + sizeof(id_fmt)) * - (d->nc->n_identities - 1)); - cb_ids_string = - (KCDB_IDENT_MAXCB_NAME + sizeof(id_fmt)) * - (d->nc->n_identities - 1); - - assert(ids_string != NULL); - - ids_string[0] = 0; - - { - khm_size i; - khm_int32 flags; - - for(i=1; i<d->nc->n_identities; i++) { - if(i>1) { - StringCbCat(ids_string, cb_ids_string, L","); - } - - flags = 0; - - cbbuf = sizeof(id_name); - kcdb_identity_get_name(d->nc->identities[i], id_name, &cbbuf); - kcdb_identity_get_flags(d->nc->identities[i], &flags); - if(flags & KCDB_IDENT_FLAG_INVALID) { - LoadString(khm_hInstance, IDS_NC_CREDTEXT_ID_INVALID, - id_fmt, (int) ARRAYLENGTH(id_fmt)); - } else if(flags & KCDB_IDENT_FLAG_VALID) { - LoadString(khm_hInstance, IDS_NC_CREDTEXT_ID_VALID, - id_fmt, (int) ARRAYLENGTH(id_fmt)); - } else { - LoadString(khm_hInstance, IDS_NC_CREDTEXT_ID_UNCHECKED, - id_fmt, (int) ARRAYLENGTH(id_fmt)); - } - - StringCbPrintf(id_string, sizeof(id_string), id_fmt, id_name); - StringCbCat(ids_string, cb_ids_string, id_string); - } - - cbbuf = sizeof(id_name); - kcdb_identity_get_name(d->nc->identities[0], id_name, &cbbuf); - kcdb_identity_get_flags(d->nc->identities[0], &flags); - if(flags & KCDB_IDENT_FLAG_INVALID) { - LoadString(khm_hInstance, IDS_NC_CREDTEXT_ID_INVALID, - id_fmt, (int) ARRAYLENGTH(id_fmt)); - } else if(flags & KCDB_IDENT_FLAG_VALID) { - LoadString(khm_hInstance, IDS_NC_CREDTEXT_ID_VALID, - id_fmt, (int) ARRAYLENGTH(id_fmt)); - } else { - LoadString(khm_hInstance, IDS_NC_CREDTEXT_ID_UNCHECKED, - id_fmt, (int) ARRAYLENGTH(id_fmt)); - } - StringCbPrintf(id_string, sizeof(id_string), id_fmt, id_name); - - StringCbPrintf(buf, NC_MAXCB_CREDTEXT - cch*sizeof(wchar_t), - main_fmt, id_string, ids_string); - - PFREE(ids_string); - } - } else { - LoadString(khm_hInstance, IDS_NC_CREDTEXT_ID_NONE, - buf, (int)(NC_MAXCCH_CREDTEXT - cch)); - } - - /* now, append the credtext string from each of the cred types */ - { - khm_size i; - size_t cb; - wchar_t * buf; - - cb = NC_MAXCB_CREDTEXT; - buf = ctbuf; - - for(i=0; i<d->nc->n_types; i++) { - if(d->nc->types[i]->credtext != NULL) { - StringCbCatEx(buf, cb, - d->nc->types[i]->credtext, - &buf, &cb, - 0); - } - } - } - - SetDlgItemText(d->dlg_main, IDC_NC_CREDTEXT, ctbuf); - - PFREE(ctbuf); - - /* so depending on whether the primary identity was found to be - invalid, we need to disable the Ok button and set the title to - reflect this */ - - if(d->nc->n_identities > 0) { - khm_int32 flags = 0; - - if(KHM_SUCCEEDED(kcdb_identity_get_flags(d->nc->identities[0], - &flags)) && - (flags & KCDB_IDENT_FLAG_VALID)) { - validId = TRUE; - } - } - - if (d->nc->window_title == NULL) { - if(validId) { - wchar_t wpostfix[256]; - wchar_t wtitle[KCDB_IDENT_MAXCCH_NAME + 256]; - khm_size cbsize; - - cbsize = sizeof(wtitle); - kcdb_identity_get_name(d->nc->identities[0], wtitle, &cbsize); - - if (d->nc->subtype == KMSG_CRED_PASSWORD) - LoadString(khm_hInstance, IDS_WTPOST_PASSWORD, - wpostfix, (int) ARRAYLENGTH(wpostfix)); - else - LoadString(khm_hInstance, IDS_WTPOST_NEW_CREDS, - wpostfix, (int) ARRAYLENGTH(wpostfix)); - - StringCbCat(wtitle, sizeof(wtitle), wpostfix); - - SetWindowText(d->nc->hwnd, wtitle); - } else { - wchar_t wtitle[256]; - - if (d->nc->subtype == KMSG_CRED_PASSWORD) - LoadString(khm_hInstance, IDS_WT_PASSWORD, - wtitle, (int) ARRAYLENGTH(wtitle)); - else - LoadString(khm_hInstance, IDS_WT_NEW_CREDS, - wtitle, (int) ARRAYLENGTH(wtitle)); - - SetWindowText(d->nc->hwnd, wtitle); - } - } - - if (!(d->nc->response & KHUI_NC_RESPONSE_PROCESSING)) { - if(validId || - d->nc->subtype == KMSG_CRED_PASSWORD) { - /* TODO: check if all the required fields have valid values - before enabling the Ok button */ - okEnable = TRUE; - } - - hw = GetDlgItem(d->dlg_main, IDOK); - EnableWindow(hw, okEnable); - hw = GetDlgItem(d->dlg_bb, IDOK); - EnableWindow(hw, okEnable); - } -} - -static void -nc_layout_new_cred_window(khui_nc_wnd_data * ncd) { - khui_new_creds * c; - RECT r_main; - RECT r_ncdialog; - HDWP hdefer; - - c = ncd->nc; - - r_main.left = 0; - r_main.top = 0; - r_main.right = NCDLG_WIDTH; - r_main.bottom = NCDLG_HEIGHT; - - MapDialogRect(ncd->dlg_main, &r_main); - - hdefer = BeginDeferWindowPos(5); - - if (c->mode == KHUI_NC_MODE_MINI) { - - if (IsWindowVisible(ncd->tab_wnd)) { - DeferWindowPos(hdefer, - ncd->tab_wnd, NULL, - 0, 0, 0, 0, - SWP_HIDEWINDOW | - SWP_NOMOVE | SWP_NOOWNERZORDER | - SWP_NOSIZE | SWP_NOZORDER); - } - - if (IsWindowVisible(ncd->dlg_bb)) { - DeferWindowPos(hdefer, - ncd->dlg_bb, NULL, - 0, 0, 0, 0, - SWP_HIDEWINDOW | - SWP_NOMOVE | SWP_NOOWNERZORDER | - SWP_NOSIZE | SWP_NOZORDER); - } - - DeferWindowPos(hdefer, ncd->dlg_main, NULL, - r_main.left, r_main.top, - r_main.right - r_main.left, - r_main.bottom - r_main.top, - SWP_NOACTIVATE | SWP_NOOWNERZORDER | - SWP_NOZORDER | SWP_SHOWWINDOW); - - /* note that the ncd->r_main.bottom may not be the same as - r_main.bottom because ncd->r_main.bottom is set dynamically - depending on custom controls. ncd->r_main is valid only - once nc_layout_main_panel() is called.*/ - CopyRect(&ncd->r_required, &ncd->r_main); - - } else { - RECT r_tabctrl; - RECT r_displayarea; - RECT r_bbar; - khm_size i; - - /* calculate the size of the tab control so that it fits - snugly around the expanded main panel. */ - CopyRect(&r_tabctrl, &r_main); - TabCtrl_AdjustRect(ncd->tab_wnd, TRUE, &r_tabctrl); - - if (r_tabctrl.left < 0 || - r_tabctrl.top < 0) { - - OffsetRect(&r_tabctrl, - (r_tabctrl.left < 0)? -r_tabctrl.left : 0, - (r_tabctrl.top < 0)? -r_tabctrl.top : 0); - - } - -#ifdef DEBUG - assert(r_tabctrl.left == 0); - assert(r_tabctrl.top == 0); -#endif - - OffsetRect(&r_tabctrl, 0, ncd->r_area.top); - - /* and now calculate the rectangle where the main panel should - be inside the tab control. */ - CopyRect(&r_displayarea, &r_tabctrl); - TabCtrl_AdjustRect(ncd->tab_wnd, FALSE, &r_displayarea); - - DeferWindowPos(hdefer, - ncd->tab_wnd, HWND_BOTTOM, - r_tabctrl.left, r_tabctrl.top, - r_tabctrl.right - r_tabctrl.left, - r_tabctrl.bottom - r_tabctrl.top, - SWP_NOACTIVATE | SWP_NOOWNERZORDER | - SWP_SHOWWINDOW); - - /* we have to place the button bar just to the right of the - tab panel. */ - r_bbar.left = 0; - r_bbar.top = 0; - r_bbar.right = NCDLG_BBAR_WIDTH; - r_bbar.bottom = NCDLG_BBAR_HEIGHT; - - MapDialogRect(ncd->dlg_main, &r_bbar); - - OffsetRect(&r_bbar, r_tabctrl.right, 0); - - DeferWindowPos(hdefer, - ncd->dlg_bb, NULL, - r_bbar.left, r_bbar.top, - r_bbar.right - r_bbar.left, - r_bbar.bottom - r_bbar.top, - SWP_NOACTIVATE | SWP_NOOWNERZORDER | - SWP_NOZORDER | SWP_SHOWWINDOW); - - /* move the main panel inside the tab control... */ - DeferWindowPos(hdefer, - ncd->dlg_main, NULL, - r_displayarea.left, r_displayarea.top, - r_displayarea.right - r_displayarea.left, - r_displayarea.bottom - r_displayarea.top, - SWP_NOACTIVATE | SWP_NOOWNERZORDER | - SWP_NOZORDER | - (ncd->current_panel == 0 ? SWP_SHOWWINDOW : SWP_HIDEWINDOW)); - - /* and also move all the credential type panels (if they have - been created) inside the tab control too. */ - khui_cw_lock_nc(c); - - for (i=0; i < c->n_types; i++) { - if (c->types[i]->hwnd_panel != NULL) { - DeferWindowPos(hdefer, - c->types[i]->hwnd_panel, NULL, - r_displayarea.left, r_displayarea.top, - r_displayarea.right - r_displayarea.left, - r_displayarea.bottom - r_displayarea.top, - SWP_NOACTIVATE | SWP_NOOWNERZORDER | - SWP_NOZORDER | - (ncd->current_panel == c->types[i]->ordinal ? - SWP_SHOWWINDOW : SWP_HIDEWINDOW)); - } - } - - khui_cw_unlock_nc(c); - - /* then update the required size of the new credentials - dialog. */ - ncd->r_required.left = 0; - ncd->r_required.top = 0; - ncd->r_required.right = r_bbar.right; - ncd->r_required.bottom = max(r_tabctrl.bottom, r_bbar.bottom) + ncd->r_area.top; - } - - /* commit all the window moves, resizes and hides/shows we did*/ - EndDeferWindowPos(hdefer); - - /* now we have to see if the client area of the new credentials - window is the right size. */ - - GetClientRect(c->hwnd, &r_ncdialog); - - if ( - - ((r_ncdialog.right - r_ncdialog.left != - ncd->r_required.right - ncd->r_required.left) - - || - - (r_ncdialog.bottom - r_ncdialog.top != - ncd->r_required.bottom - ncd->r_required.top)) - - && - - /* we don't bother if the new creds window is already in the - process of changing the size. */ - !ncd->size_changing) { - - /* if not, notify the window that the size needs adjusting. */ - if (IsWindowVisible(c->hwnd)) - PostMessage(c->hwnd, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_UPDATE_LAYOUT), 0); - else - SendMessage(c->hwnd, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_UPDATE_LAYOUT), 0); - } -} - -#define CW_PARAM DWLP_USER - -static LRESULT -nc_handle_wm_create(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) -{ - LPCREATESTRUCT lpc; - khui_new_creds * c; - khui_nc_wnd_data * ncd; - int x, y; - int width, height; - RECT r; - HFONT hf_main; - - lpc = (LPCREATESTRUCT) lParam; - - ncd = PMALLOC(sizeof(*ncd)); - ZeroMemory(ncd, sizeof(*ncd)); - - c = (khui_new_creds *) lpc->lpCreateParams; - ncd->nc = c; - c->hwnd = hwnd; - -#ifdef DEBUG - assert(c->subtype == KMSG_CRED_NEW_CREDS || - c->subtype == KMSG_CRED_PASSWORD); -#endif - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, CW_PARAM, (LONG_PTR) ncd); -#pragma warning(pop) - - /* first, create the tab control that will house the main dialog - panel as well as the plug-in specific panels */ - ncd->tab_wnd = CreateWindowEx(0, /* extended style */ - WC_TABCONTROL, - L"TabControloxxrz", /* window name */ - TCS_HOTTRACK | TCS_RAGGEDRIGHT | - TCS_SINGLELINE | TCS_TABS | - WS_CHILD | WS_TABSTOP | WS_CLIPSIBLINGS, - 0, 0, 100, 100, /* x,y,width height. - We'll be changing - these later - anyway. */ - hwnd, - (HMENU) IDC_NC_TABS, - NULL, - 0); - -#ifdef DEBUG - assert(ncd->tab_wnd != NULL); -#endif - - /* try to create the main dialog panel */ - - ncd->dlg_main = CreateDialogParam(khm_hInstance, - MAKEINTRESOURCE(IDD_NC_NEWCRED), - hwnd, - nc_common_dlg_proc, - (LPARAM) ncd); -#ifdef DEBUG - assert(ncd->dlg_main != NULL); -#endif - - hf_main = (HFONT) SendMessage(ncd->dlg_main, WM_GETFONT, 0, 0); - if (hf_main) - SendMessage(ncd->tab_wnd, WM_SETFONT, (WPARAM) hf_main, FALSE); - -#if _WIN32_WINNT >= 0x0501 - EnableThemeDialogTexture(ncd->dlg_main, - ETDT_ENABLETAB); -#endif - - { - RECT r_main; - RECT r_area; - RECT r_row; - HWND hw; - - /* During the operation of the new credentials window, we will - need to dynamically change the layout of the controls as a - result of custom prompting from credentials providers and - identity selectors from identity providers. In order to - guide the dynamic layout, we pick out a few metrics from - the dialog template for the main panel. The metrics come - from hidden STATIC controls in the dialog template. */ - - GetWindowRect(ncd->dlg_main, &r_main); - - /* IDC_NC_TPL_PANEL spans the full extent of the dialog that - we can populate with custom controls. */ - hw = GetDlgItem(ncd->dlg_main, IDC_NC_TPL_PANEL); -#ifdef DEBUG - assert(hw); -#endif - GetWindowRect(hw, &r_area); - OffsetRect(&r_area,-r_main.left, -r_main.top); - CopyRect(&ncd->r_area, &r_area); - - /* IDC_NC_TPL_ROW spans the extent of a row of normal sized - custom controls. A row of custom controls typicall consist - of a text label and an input control. */ - hw = GetDlgItem(ncd->dlg_main, IDC_NC_TPL_ROW); -#ifdef DEBUG - assert(hw); -#endif - GetWindowRect(hw, &r); - CopyRect(&r_row, &r); - OffsetRect(&r,-r.left, -r.top); - CopyRect(&ncd->r_row, &r); - - /* IDC_NC_TPL_LABEL spans the extent that a normal sized - label. The control overlaps IDC_NC_TPL_ROW so we can get - coordinates relative to the row extents. */ - hw = GetDlgItem(ncd->dlg_main, IDC_NC_TPL_LABEL); -#ifdef DEBUG - assert(hw); -#endif - GetWindowRect(hw, &r); - OffsetRect(&r,-r_row.left, -r_row.top); - CopyRect(&ncd->r_n_label, &r); - - /* IDC_NC_TPL_INPUT spans the extent of a normal sized input - control in a custom control row. The control overlaps - IDC_NC_TPL_ROW so we can get relative coordinates. */ - hw = GetDlgItem(ncd->dlg_main, IDC_NC_TPL_INPUT); -#ifdef DEBUG - assert(hw); -#endif - GetWindowRect(hw, &r); - OffsetRect(&r, -r_row.left, -r_row.top); - CopyRect(&ncd->r_n_input, &r); - - /* IDC_NC_TPL_ROW_LG spans the extent of a row of large sized - controls. */ - hw = GetDlgItem(ncd->dlg_main, IDC_NC_TPL_ROW_LG); -#ifdef DEBUG - assert(hw); -#endif - GetWindowRect(hw, &r_row); - - /* IDC_NC_TPL_LABEL_LG is a large sized label. The control - overlaps IDC_NC_TPL_ROW_LG. */ - hw = GetDlgItem(ncd->dlg_main, IDC_NC_TPL_LABEL_LG); -#ifdef DEBUG - assert(hw); -#endif - GetWindowRect(hw, &r); - OffsetRect(&r, -r_row.left, -r_row.top); - CopyRect(&ncd->r_e_label, &r); - - /* IDC_NC_TPL_INPUT_LG is a large sized input control. - Overlaps IDC_NC_TPL_ROW_LG. */ - hw = GetDlgItem(ncd->dlg_main, IDC_NC_TPL_INPUT_LG); -#ifdef DEBUG - assert(hw); -#endif - GetWindowRect(hw, &r); - OffsetRect(&r, -r_row.left, -r_row.top); - CopyRect(&ncd->r_e_input, &r); - - CopyRect(&ncd->r_credtext, &ncd->r_area); - CopyRect(&ncd->r_idspec, &ncd->r_area); - - ncd->r_idspec.bottom = ncd->r_idspec.top; - - /* And finally the credential text window. The only metric we - take from here is the Y coordinate of the bottom of the - control since the actual size and position of the - credentials window will change depending on the custom - controls being displayed. */ - hw = GetDlgItem(ncd->dlg_main, IDC_NC_CREDTEXT); -#ifdef DEBUG - assert(hw); -#endif - GetWindowRect(hw, &r); - OffsetRect(&r, -r_main.left, -r_main.top); - ncd->r_credtext.bottom = r.bottom; - } - - /* if the mode is 'mini'*/ - r.left = 0; - r.top = 0; - - if(c->mode == KHUI_NC_MODE_MINI) { - r.right = NCDLG_WIDTH; - r.bottom = NCDLG_HEIGHT; - } else { - r.right = NCDLG_WIDTH + NCDLG_BBAR_WIDTH; - r.bottom = NCDLG_BBAR_HEIGHT; - } - - MapDialogRect(ncd->dlg_main, &r); - - /* position the new credentials dialog */ - width = r.right - r.left; - height = r.bottom - r.top; - - /* adjust width and height to accomodate NC area */ - { - RECT wr,cr; - - GetWindowRect(hwnd, &wr); - GetClientRect(hwnd, &cr); - - /* the non-client and client areas have already been calculated - at this point. We just use the difference to adjust the width - and height */ - width += (wr.right - wr.left) - (cr.right - cr.left); - height += (wr.bottom - wr.top) - (cr.bottom - cr.top); - } - - /* if the parent window is visible, we center the new credentials - dialog over the parent. Otherwise, we center it on the primary - display. */ - - if (IsWindowVisible(lpc->hwndParent)) { - GetWindowRect(lpc->hwndParent, &r); - } else { - if(!SystemParametersInfo(SPI_GETWORKAREA, 0, (PVOID) &r, 0)) { - /* failover to the window coordinates */ - GetWindowRect(lpc->hwndParent, &r); - } - } - x = (r.right + r.left)/2 - width / 2; - y = (r.top + r.bottom)/2 - height / 2; - - /* we want to check if the entire rect is visible on the screen. - If the main window is visible and in basic mode, we might end - up with a rect that is partially outside the screen. */ - { - RECT r; - - SetRect(&r, x, y, x + width, y + height); - khm_adjust_window_dimensions_for_display(&r, 0); - - x = r.left; - y = r.top; - width = r.right - r.left; - height = r.bottom - r.top; - } - - MoveWindow(hwnd, x, y, width, height, FALSE); - - ncd->dlg_bb = CreateDialogParam(khm_hInstance, - MAKEINTRESOURCE(IDD_NC_BBAR), - hwnd, - nc_common_dlg_proc, - (LPARAM) ncd); - -#ifdef DEBUG - assert(ncd->dlg_bb); -#endif - - /* Call the identity provider callback to set the identity - selector controls. These controls need to be there before we - layout the main panel. */ - c->ident_cb(c, WMNC_IDENT_INIT, NULL, 0, 0, (LPARAM) ncd->dlg_main); - - if (c->mode == KHUI_NC_MODE_EXPANDED) { - SendMessage(ncd->dlg_main, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_DIALOG_EXPAND), 0); - } else { - /* we don't call nc_layout_main_panel() if the dialog is - expanded because posting WMNC_DIALOG_EXPAND to the main - panel results in it getting called anyway. */ - nc_layout_main_panel(ncd); - } - - nc_layout_new_cred_window(ncd); - - /* add this to the dialog chain */ - khm_add_dialog(hwnd); - - return TRUE; -} - -/* add a control row supplied by an identity provider */ -static void -nc_add_control_row(khui_nc_wnd_data * d, - HWND label, - HWND input, - khui_control_size size) -{ - RECT r_row; - RECT r_label; - RECT r_input; - HFONT hf; - HDWP hdefer; - - hf = (HFONT) SendMessage(d->dlg_main, WM_GETFONT, 0, 0); - SendMessage(label, WM_SETFONT, (WPARAM) hf, FALSE); - SendMessage(input, WM_SETFONT, (WPARAM) hf, FALSE); - - CopyRect(&r_row, &d->r_row); - OffsetRect(&r_row, d->r_idspec.left, d->r_idspec.bottom); - - if (size == KHUI_CTRLSIZE_SMALL) { - CopyRect(&r_label, &d->r_n_label); - CopyRect(&r_input, &d->r_n_input); - OffsetRect(&r_label, r_row.left, r_row.top); - OffsetRect(&r_input, r_row.left, r_row.top); - } else if (size == KHUI_CTRLSIZE_HALF) { - CopyRect(&r_label, &d->r_e_label); - CopyRect(&r_input, &d->r_e_input); - OffsetRect(&r_label, r_row.left, r_row.top); - OffsetRect(&r_input, r_row.left, r_row.top); - } else if (size == KHUI_CTRLSIZE_FULL) { - CopyRect(&r_label, &d->r_n_label); - r_label.right = d->r_row.right; - CopyRect(&r_input, &d->r_n_input); - OffsetRect(&r_input, r_row.left, r_row.top); - OffsetRect(&r_input, 0, r_input.bottom); - r_row.bottom += r_input.bottom; - OffsetRect(&r_label, r_row.left, r_row.top); - } else { - SetRectEmpty(&r_label); - SetRectEmpty(&r_input); -#ifdef DEBUG - assert(FALSE); -#endif - return; - } - - hdefer = BeginDeferWindowPos(2); - - if (label) - DeferWindowPos(hdefer, label, - ((d->hwnd_last_idspec != NULL)? - d->hwnd_last_idspec: - HWND_TOP), - r_label.left, r_label.top, - r_label.right - r_label.left, - r_label.bottom - r_label.top, - SWP_NOACTIVATE | SWP_NOOWNERZORDER); - - if (input) - DeferWindowPos(hdefer, input, - (label ? label : ((d->hwnd_last_idspec != NULL)? - d->hwnd_last_idspec: - HWND_TOP)), - r_input.left, r_input.top, - r_input.right - r_input.left, - r_input.bottom - r_input.top, - SWP_NOACTIVATE | SWP_NOOWNERZORDER); - - EndDeferWindowPos(hdefer); - - d->hwnd_last_idspec = (input ? input : label); - - d->r_idspec.bottom = r_row.bottom; - - /* we don't update the layout of the main panel yet, since these - control additions happen before the main panel is displayed. A - call to nc_layout_main_panel() will be made before the main - panel is shown anyway. */ - -} - - -static LRESULT -nc_handle_wm_destroy(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) -{ - khui_nc_wnd_data * d; - - /* remove self from dialog chain */ - khm_del_dialog(hwnd); - - d = (khui_nc_wnd_data *)(LONG_PTR) GetWindowLongPtr(hwnd, CW_PARAM); - if (d == NULL) - return TRUE; - - d->nc->ident_cb(d->nc, WMNC_IDENT_EXIT, NULL, 0, 0, 0); - - if (d->hwnd_notif_label) - DestroyWindow(d->hwnd_notif_label); - if (d->hwnd_notif_aux) - DestroyWindow(d->hwnd_notif_aux); - - if(d->dlg_bb) - DestroyWindow(d->dlg_bb); - if(d->dlg_main) - DestroyWindow(d->dlg_main); - - d->dlg_bb = NULL; - d->dlg_main = NULL; - - PFREE(d); - SetWindowLongPtr(hwnd, CW_PARAM, 0); - - return TRUE; -} - -static LRESULT -nc_handle_wm_command(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) -{ - khui_nc_wnd_data * d; - - d = (khui_nc_wnd_data *)(LONG_PTR) GetWindowLongPtr(hwnd, CW_PARAM); - if (d == NULL) - return 0; - - switch(HIWORD(wParam)) { - case BN_CLICKED: - switch(LOWORD(wParam)) { - - case IDOK: - d->nc->result = KHUI_NC_RESULT_PROCESS; - - /* fallthrough */ - - case IDCANCEL: - /* the default value for d->nc->result is set to - KHUI_NC_RESULT_CANCEL */ - d->nc->response = KHUI_NC_RESPONSE_PROCESSING; - - nc_enable_controls(d, FALSE); - - nc_notify_types(d->nc, - KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0,WMNC_DIALOG_PREPROCESS), - (LPARAM) d->nc, - TRUE); - - khui_cw_sync_prompt_values(d->nc); - - khm_cred_dispatch_process_message(d->nc); - - /* we won't know whether to abort or not until we get - feedback from the plugins, even if the command was - to cancel */ - { - HWND hw; - - hw = GetDlgItem(d->dlg_main, IDOK); - EnableWindow(hw, FALSE); - hw = GetDlgItem(d->dlg_main, IDCANCEL); - EnableWindow(hw, FALSE); - hw = GetDlgItem(d->dlg_main, IDC_NC_ADVANCED); - EnableWindow(hw, FALSE); - hw = GetDlgItem(d->dlg_bb, IDOK); - EnableWindow(hw, FALSE); - hw = GetDlgItem(d->dlg_bb, IDCANCEL); - EnableWindow(hw, FALSE); - } - return FALSE; - - case IDC_NC_HELP: - khm_html_help(hwnd, NULL, HH_HELP_CONTEXT, IDH_ACTION_NEW_ID); - return FALSE; - - case IDC_NC_BASIC: - case IDC_NC_ADVANCED: - /* the Options button in the main window was clicked. we - respond by expanding the dialog. */ - PostMessage(hwnd, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_DIALOG_EXPAND), 0); - return FALSE; - - case IDC_NC_CREDTEXT: /* credtext link activated */ - { - khui_htwnd_link * l; - wchar_t sid[KHUI_MAXCCH_HTLINK_FIELD]; - wchar_t sparam[KHUI_MAXCCH_HTLINK_FIELD]; - wchar_t * colon; - - l = (khui_htwnd_link *) lParam; - - /* do we have a valid link? */ - if(l->id == NULL || l->id_len >= ARRAYLENGTH(sid)) - return TRUE; /* nope */ - - StringCchCopyN(sid, ARRAYLENGTH(sid), l->id, l->id_len); - sid[l->id_len] = L'\0'; /* just make sure */ - - if(l->param != NULL && - l->param_len < ARRAYLENGTH(sparam) && - l->param_len > 0) { - - StringCchCopyN(sparam, ARRAYLENGTH(sparam), - l->param, l->param_len); - sparam[l->param_len] = L'\0'; - - } else { - sparam[0] = L'\0'; - } - - /* If the ID is of the form '<credtype>:<link_tag>' - and <credtype> is a valid name of a credentials - type that is participating in the credentials - acquisition process, then we forward the message to - the panel that is providing the UI for that cred - type. We also switch to that panel first, unless - the link is of the form '<credtype>:!<link_tag>'. */ - - colon = wcschr(sid, L':'); - if (colon != NULL) { - khm_int32 credtype; - khui_new_creds_by_type * t; - - *colon = L'\0'; - if (KHM_SUCCEEDED(kcdb_credtype_get_id(sid, &credtype)) && - KHM_SUCCEEDED(khui_cw_find_type(d->nc, credtype, &t))){ - *colon = L':'; - - if (t->ordinal != d->current_panel && - *(colon + 1) != L'!') - PostMessage(hwnd, - KHUI_WM_NC_NOTIFY, - MAKEWPARAM(t->ordinal, - WMNC_DIALOG_SWITCH_PANEL), - 0); - - return SendMessage(t->hwnd_panel, - KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_CREDTEXT_LINK), - lParam); - } else { - *colon = L':'; - } - } - - /* if it was for us, then we need to process the message */ - if(!_wcsicmp(sid, CTLINKID_SWITCH_PANEL)) { - khm_int32 credtype; - khui_new_creds_by_type * t; - - if (KHM_SUCCEEDED(kcdb_credtype_get_id(sparam, - &credtype)) && - KHM_SUCCEEDED(khui_cw_find_type(d->nc, - credtype, &t))) { - if (t->ordinal != d->current_panel) - PostMessage(hwnd, - KHUI_WM_NC_NOTIFY, - MAKEWPARAM(t->ordinal, - WMNC_DIALOG_SWITCH_PANEL), - 0); - } - } else if (!_wcsicmp(sid, L"NotDef")) { - d->nc->set_default = FALSE; - nc_update_credtext(d); - } else if (!_wcsicmp(sid, L"MakeDef")) { - d->nc->set_default = TRUE; - nc_update_credtext(d); - } - } - return FALSE; - -#if 0 - case NC_BN_SET_DEF_ID: - { - d->nc->set_default = - (IsDlgButtonChecked(d->dlg_main, NC_BN_SET_DEF_ID) - == BST_CHECKED); - } - return FALSE; -#endif - } - break; - } - - return TRUE; -} - -static LRESULT nc_handle_wm_moving(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) -{ - khui_nc_wnd_data * d; - - d = (khui_nc_wnd_data *)(LONG_PTR) GetWindowLongPtr(hwnd, CW_PARAM); - if (d == NULL) - return FALSE; - - nc_notify_types(d->nc, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_DIALOG_MOVE), (LPARAM) d->nc, TRUE); - - return FALSE; -} - -static LRESULT nc_handle_wm_nc_notify(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) -{ - khui_nc_wnd_data * d; - int id; - - d = (khui_nc_wnd_data *)(LONG_PTR) GetWindowLongPtr(hwnd, CW_PARAM); - if (d == NULL) - return FALSE; - - switch(HIWORD(wParam)) { - - case WMNC_DIALOG_SWITCH_PANEL: - id = LOWORD(wParam); - if(id >= 0 && id <= (int) d->nc->n_types) { - /* one of the tab buttons were pressed */ - if(d->current_panel == id) { - return TRUE; /* nothing to do */ - } - - d->current_panel = id; - - TabCtrl_SetCurSel(d->tab_wnd, id); - } - - if(d->nc->mode == KHUI_NC_MODE_EXPANDED) { - nc_layout_new_cred_window(d); - return TRUE; - } - /*else*/ - /* fallthrough */ - - case WMNC_DIALOG_EXPAND: - /* we are switching from basic to advanced or vice versa */ - - if (d->nc->mode == KHUI_NC_MODE_EXPANDED) { - - if (d->current_panel != 0) { - d->current_panel = 0; - TabCtrl_SetCurSel(d->tab_wnd, 0); - nc_layout_new_cred_window(d); - } - - d->nc->mode = KHUI_NC_MODE_MINI; - } else { - d->nc->mode = KHUI_NC_MODE_EXPANDED; - } - - /* if we are switching to the advanced mode, we clear any - notifications because we now have a credential text area - for that. */ - if (d->nc->mode == KHUI_NC_MODE_EXPANDED) - nc_notify_clear(d); - - nc_layout_main_panel(d); - - nc_layout_new_cred_window(d); - - break; - - case WMNC_DIALOG_SETUP: - - if(d->nc->n_types > 0) { - khm_size i; - for(i=0; i < d->nc->n_types;i++) { - - if (d->nc->types[i]->dlg_proc == NULL) { - d->nc->types[i]->hwnd_panel = NULL; - } else { - /* Create the dialog panel */ - d->nc->types[i]->hwnd_panel = - CreateDialogParam(d->nc->types[i]->h_module, - d->nc->types[i]->dlg_template, - d->nc->hwnd, - d->nc->types[i]->dlg_proc, - (LPARAM) d->nc); - -#ifdef DEBUG - assert(d->nc->types[i]->hwnd_panel); -#endif -#if _WIN32_WINNT >= 0x0501 - if (d->nc->types[i]->hwnd_panel) { - EnableThemeDialogTexture(d->nc->types[i]->hwnd_panel, - ETDT_ENABLETAB); - } -#endif - } - } - } - - break; - - case WMNC_DIALOG_ACTIVATE: - { - wchar_t wname[KCDB_MAXCCH_NAME]; - TCITEM tabitem; - khm_int32 t; - - /* About to activate the window. We should add all the - panels to the tab control. */ - -#ifdef DEBUG - assert(d->tab_wnd != NULL); -#endif - - ZeroMemory(&tabitem, sizeof(tabitem)); - - tabitem.mask = TCIF_PARAM | TCIF_TEXT; - - LoadString(khm_hInstance, IDS_NC_IDENTITY, - wname, ARRAYLENGTH(wname)); - - tabitem.pszText = wname; - tabitem.lParam = 0; /* ordinal */ - - TabCtrl_InsertItem(d->tab_wnd, 0, &tabitem); - - khui_cw_lock_nc(d->nc); - - if(d->nc->n_types > 0) { - khm_size i; - - /* We should sort the tabs first. See - nc_tab_sort_func() for sort criteria. */ - qsort(d->nc->types, - d->nc->n_types, - sizeof(*(d->nc->types)), - nc_tab_sort_func); - - for(i=0; i < d->nc->n_types;i++) { - - d->nc->types[i]->ordinal = i + 1; - - if(d->nc->types[i]->name) - tabitem.pszText = d->nc->types[i]->name; - else { - khm_size cbsize; - - cbsize = sizeof(wname); - - if(KHM_FAILED - (kcdb_credtype_describe - (d->nc->types[i]->type, - wname, - &cbsize, - KCDB_TS_SHORT))) { - -#ifdef DEBUG - assert(FALSE); -#endif - wname[0] = L'\0'; - - } - - tabitem.pszText = wname; - - } - - tabitem.lParam = d->nc->types[i]->ordinal; - - TabCtrl_InsertItem(d->tab_wnd, d->nc->types[i]->ordinal, - &tabitem); - } - } - - khui_cw_unlock_nc(d->nc); - - nc_update_credtext(d); - - TabCtrl_SetCurSel(d->tab_wnd, 0); /* the first selected - tab is the main - panel. */ - - /* we don't enable animations until a specific timeout - elapses after showing the window. We don't need to - animate any size changes if the user has barely had a - chance to notice the original size. This prevents the - new cred window from appearing in an animated state. */ - SetTimer(hwnd, NC_TIMER_ENABLEANIMATE, ENABLEANIMATE_TIMEOUT, NULL); - - ShowWindow(hwnd, SW_SHOWNORMAL); - - /* bring the window to the top, if necessary */ - if (KHM_SUCCEEDED(khc_read_int32(NULL, - L"CredWindow\\Windows\\NewCred\\ForceToTop", - &t)) && - - t != 0) { - - BOOL sfw = FALSE; - - /* it used to be that the above condition also called - !khm_is_dialog_active() to find out whether there - was a dialog active. If there was, we wouldn't try - to bring the new cred window to the foreground. But - that was not the behavior we want. */ - - /* if the main window is not visible, then the SetWindowPos() - call is sufficient to bring the new creds window to the - top. However, if the main window is visible but not - active, the main window needs to be activated before a - child window can be activated. */ - - SetActiveWindow(hwnd); - - sfw = SetForegroundWindow(hwnd); - - if (!sfw) { - FLASHWINFO fi; - - ZeroMemory(&fi, sizeof(fi)); - - fi.cbSize = sizeof(fi); - fi.hwnd = hwnd; - fi.dwFlags = FLASHW_ALL; - fi.uCount = 3; - fi.dwTimeout = 0; /* use the default cursor blink rate */ - - FlashWindowEx(&fi); - - d->flashing_enabled = TRUE; - } - - } else { - SetFocus(hwnd); - } - - if (d->nc->n_identities == 0) - break; - /* else */ - /* fallthrough */ - } - - case WMNC_IDENTITY_CHANGE: - { - BOOL okEnable = FALSE; - - nc_notify_types(d->nc, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_IDENTITY_CHANGE), (LPARAM) d->nc, - TRUE); - - if (d->nc->subtype == KMSG_CRED_NEW_CREDS && - d->nc->n_identities > 0 && - d->nc->identities[0]) { - khm_int32 f = 0; - - kcdb_identity_get_flags(d->nc->identities[0], &f); - - if (!(f & KCDB_IDENT_FLAG_DEFAULT)) { - d->nc->set_default = FALSE; - } - } - - nc_update_credtext(d); - - } - break; - - case WMNC_TYPE_STATE: - /* fallthrough */ - case WMNC_UPDATE_CREDTEXT: - nc_update_credtext(d); - break; - - case WMNC_CLEAR_PROMPTS: - { - khm_size i; - - khui_cw_lock_nc(d->nc); - - if(d->hwnd_banner != NULL) { - DestroyWindow(d->hwnd_banner); - d->hwnd_banner = NULL; - } - - if(d->hwnd_name != NULL) { - DestroyWindow(d->hwnd_name); - d->hwnd_name = NULL; - } - - for(i=0;i<d->nc->n_prompts;i++) { - if(!(d->nc->prompts[i]->flags & - KHUI_NCPROMPT_FLAG_STOCK)) { - if(d->nc->prompts[i]->hwnd_static != NULL) - DestroyWindow(d->nc->prompts[i]->hwnd_static); - - if(d->nc->prompts[i]->hwnd_edit != NULL) - DestroyWindow(d->nc->prompts[i]->hwnd_edit); - } - - d->nc->prompts[i]->hwnd_static = NULL; - d->nc->prompts[i]->hwnd_edit = NULL; - } - - khui_cw_unlock_nc(d->nc); - - SetRectEmpty(&d->r_custprompt); - - nc_layout_main_panel(d); - - nc_layout_new_cred_window(d); - } - break; - - case WMNC_SET_PROMPTS: - { - khm_size i; - int y; - HWND hw, hw_prev; - HFONT hf, hfold; - HDC hdc; - BOOL use_large_lables = FALSE; - - /* we assume that WMNC_CLEAR_PROMPTS has already been - received */ - -#ifdef DEBUG - assert(IsRectEmpty(&d->r_custprompt)); -#endif - - khui_cw_lock_nc(d->nc); - -#if 0 - /* special case, we have one prompt and it is a password - prompt. very common */ - if(d->nc->n_prompts == 1 && - d->nc->prompts[0]->type == KHUI_NCPROMPT_TYPE_PASSWORD) { - - hw = GetDlgItem(d->dlg_main, IDC_NC_PASSWORD); - EnableWindow(hw, TRUE); - - d->nc->prompts[0]->flags |= KHUI_NCPROMPT_FLAG_STOCK; - d->nc->prompts[0]->hwnd_edit = hw; - d->nc->prompts[0]->hwnd_static = NULL; /* don't care */ - - khui_cw_unlock_nc(d->nc); - break; - } -#endif - /* for everything else */ - - y = d->r_idspec.bottom; - - d->r_custprompt.left = d->r_area.left; - d->r_custprompt.right = d->r_area.right; - d->r_custprompt.top = y; - - hf = (HFONT) SendMessage(d->dlg_main, WM_GETFONT, 0, 0); - - if (d->nc->pname != NULL) { - hw = - CreateWindowEx - (0, - L"STATIC", - d->nc->pname, - SS_SUNKEN | WS_CHILD, - d->r_area.left, y, - d->r_row.right, - d->r_n_label.bottom - d->r_n_label.top, - d->dlg_main, - NULL, - khm_hInstance, - NULL); - -#ifdef DEBUG - assert(hw); -#endif - d->hwnd_name = hw; - SendMessage(hw, WM_SETFONT, (WPARAM)hf, (LPARAM) TRUE); - ShowWindow(hw, SW_SHOW); - - y += d->r_n_label.bottom - d->r_n_label.top; - } - - if (d->nc->banner != NULL) { - hw = - CreateWindowEx - (0, - L"STATIC", - d->nc->banner, - WS_CHILD, - d->r_area.left, y, - d->r_row.right, d->r_row.bottom, - d->dlg_main, - NULL, - khm_hInstance, - NULL); -#ifdef DEBUG - assert(hw); -#endif - d->hwnd_banner = hw; - SendMessage(hw, WM_SETFONT, (WPARAM)hf, (LPARAM)TRUE); - ShowWindow(hw, SW_SHOW); - y += d->r_row.bottom; - } - - hw_prev = d->hwnd_last_idspec; - - hdc = GetWindowDC(d->dlg_main); - hfold = SelectObject(hdc,hf); - - /* first do a trial run and see if we should use the - larger text labels or not. This is so that all the - labels and input controls align properly. */ - for (i=0; i < d->nc->n_prompts; i++) { - if (d->nc->prompts[i]->prompt != NULL) { - SIZE s; - - GetTextExtentPoint32(hdc, - d->nc->prompts[i]->prompt, - (int) wcslen(d->nc->prompts[i]->prompt), - &s); - - if(s.cx >= d->r_n_label.right - d->r_n_label.left) { - use_large_lables = TRUE; - break; - } - } - } - - for(i=0; i<d->nc->n_prompts; i++) { - RECT pr, er; - SIZE s; - int dy; - - if(d->nc->prompts[i]->prompt != NULL) { - GetTextExtentPoint32(hdc, - d->nc->prompts[i]->prompt, - (int) wcslen(d->nc->prompts[i]->prompt), - &s); - if(s.cx < d->r_n_label.right - d->r_n_label.left && - !use_large_lables) { - CopyRect(&pr, &d->r_n_label); - CopyRect(&er, &d->r_n_input); - dy = d->r_row.bottom; - } else if(s.cx < - d->r_e_label.right - d->r_e_label.left) { - CopyRect(&pr, &d->r_e_label); - CopyRect(&er, &d->r_e_input); - dy = d->r_row.bottom; - } else { - /* oops. the prompt doesn't fit in our - controls. we need to use up two lines */ - pr.left = 0; - pr.right = d->r_row.right; - pr.top = 0; - pr.bottom = d->r_n_label.bottom - - d->r_n_label.top; - CopyRect(&er, &d->r_n_input); - OffsetRect(&er, 0, pr.bottom); - dy = er.bottom + (d->r_row.bottom - - d->r_n_input.bottom); - } - } else { - SetRectEmpty(&pr); - CopyRect(&er, &d->r_n_input); - dy = d->r_row.bottom; - } - - if(IsRectEmpty(&pr)) { - d->nc->prompts[i]->hwnd_static = NULL; - } else { - OffsetRect(&pr, d->r_area.left, y); - - hw = CreateWindowEx - (0, - L"STATIC", - d->nc->prompts[i]->prompt, - WS_CHILD, - pr.left, pr.top, - pr.right - pr.left, pr.bottom - pr.top, - d->dlg_main, - NULL, - khm_hInstance, - NULL); -#ifdef DEBUG - assert(hw); -#endif - - SendMessage(hw, WM_SETFONT, - (WPARAM) hf, (LPARAM) TRUE); - - SetWindowPos(hw, hw_prev, - 0, 0, 0, 0, - SWP_NOACTIVATE | SWP_NOMOVE | - SWP_NOOWNERZORDER | SWP_NOSIZE | - SWP_SHOWWINDOW); - - d->nc->prompts[i]->hwnd_static = hw; - hw_prev = hw; - } - - OffsetRect(&er, d->r_area.left, y); - - hw = CreateWindowEx - (0, - L"EDIT", - (d->nc->prompts[i]->def ? - d->nc->prompts[i]->def : L""), - WS_CHILD | WS_TABSTOP | - WS_BORDER | ES_AUTOHSCROLL | - ((d->nc->prompts[i]->flags & - KHUI_NCPROMPT_FLAG_HIDDEN)? ES_PASSWORD:0), - er.left, er.top, - er.right - er.left, er.bottom - er.top, - d->dlg_main, - NULL, - khm_hInstance, - NULL); - -#ifdef DEBUG - assert(hw); -#endif - - SendMessage(hw, WM_SETFONT, - (WPARAM) hf, (LPARAM) TRUE); - - SetWindowPos(hw, hw_prev, - 0, 0, 0, 0, - SWP_NOACTIVATE | SWP_NOMOVE | - SWP_NOOWNERZORDER | SWP_NOSIZE | - SWP_SHOWWINDOW); - - SendMessage(hw, EM_SETLIMITTEXT, - KHUI_MAXCCH_PROMPT_VALUE -1, - 0); - - d->nc->prompts[i]->hwnd_edit = hw; - - hw_prev = hw; - - y += dy; - } - - if (d->nc->n_prompts > 0 && - d->nc->prompts[0]->hwnd_edit) { - - PostMessage(d->dlg_main, WM_NEXTDLGCTL, - (WPARAM) d->nc->prompts[0]->hwnd_edit, - MAKELPARAM(TRUE, 0)); - - } - - SelectObject(hdc, hfold); - ReleaseDC(d->dlg_main, hdc); - - khui_cw_unlock_nc(d->nc); - - d->r_custprompt.bottom = y; - - if (d->r_custprompt.bottom == d->r_custprompt.top) - SetRectEmpty(&d->r_custprompt); - - nc_layout_main_panel(d); - - nc_layout_new_cred_window(d); - } - break; - - case WMNC_DIALOG_PROCESS_COMPLETE: - { - khui_new_creds * nc; - - nc = d->nc; - - nc->response &= ~KHUI_NC_RESPONSE_PROCESSING; - - if(nc->response & KHUI_NC_RESPONSE_NOEXIT) { - HWND hw; - - nc_enable_controls(d, TRUE); - - /* reset state */ - nc->result = KHUI_NC_RESULT_CANCEL; - - hw = GetDlgItem(d->dlg_main, IDOK); - EnableWindow(hw, TRUE); - hw = GetDlgItem(d->dlg_main, IDCANCEL); - EnableWindow(hw, TRUE); - hw = GetDlgItem(d->dlg_main, IDC_NC_ADVANCED); - EnableWindow(hw, TRUE); - hw = GetDlgItem(d->dlg_bb, IDOK); - EnableWindow(hw, TRUE); - hw = GetDlgItem(d->dlg_bb, IDCANCEL); - EnableWindow(hw, TRUE); - - nc_clear_password_fields(d); - - return TRUE; - } - - DestroyWindow(hwnd); - - kmq_post_message(KMSG_CRED, KMSG_CRED_END, 0, (void *) nc); - } - break; - - /* MUST be called with SendMessage */ - case WMNC_ADD_CONTROL_ROW: - { - khui_control_row * row; - - row = (khui_control_row *) lParam; - -#ifdef DEBUG - assert(row->label); - assert(row->input); -#endif - - nc_add_control_row(d, row->label, row->input, row->size); - } - break; - - case WMNC_UPDATE_LAYOUT: - { - - RECT r_client; - khm_int32 animate; - khm_int32 steps; - khm_int32 timeout; - - /* We are already adjusting the size of the window. The - next time the timer fires, it will notice if the target - size has changed. */ - if (d->size_changing) - return TRUE; - - GetClientRect(hwnd, &r_client); - - if ((r_client.right - r_client.left == - d->r_required.right - d->r_required.left) && - (r_client.bottom - r_client.top == - d->r_required.bottom - d->r_required.top)) { - - /* the window is already at the right size */ - return TRUE; - - } - - if (!IsWindowVisible(hwnd)) { - /* The window is not visible yet. There's no need to - animate anything. */ - - animate = FALSE; - - } else if (KHM_FAILED(khc_read_int32(NULL, - L"CredWindow\\Windows\\NewCred\\AnimateSizeChanges", - &animate))) { -#ifdef DEBUG - assert(FALSE); -#endif - animate = TRUE; - } - - /* if we aren't animating the window resize, then we just - do it in one call. */ - if (!animate || !d->animation_enabled) { - RECT r_window; - - CopyRect(&r_window, &d->r_required); - AdjustWindowRectEx(&r_window, NC_WINDOW_STYLES, FALSE, - NC_WINDOW_EX_STYLES); - - SetWindowPos(hwnd, NULL, 0, 0, - r_window.right - r_window.left, - r_window.bottom - r_window.top, - SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | - SWP_NOZORDER); - - return TRUE; - } - - if (KHM_FAILED(khc_read_int32(NULL, - L"CredWindow\\Windows\\NewCred\\AnimationSteps", - &steps))) { -#ifdef DEBUG - assert(FALSE); -#endif - steps = NC_SZ_STEPS_DEF; - } else { - - if (steps < NC_SZ_STEPS_MIN) - steps = NC_SZ_STEPS_MIN; - else if (steps > NC_SZ_STEPS_MAX) - steps = NC_SZ_STEPS_MAX; - - } - - if (KHM_FAILED(khc_read_int32(NULL, - L"CredWindow\\Windows\\NewCred\\AnimationStepTimeout", - &timeout))) { -#ifdef DEBUG - assert(FALSE); -#endif - timeout = NC_SZ_TIMEOUT_DEF; - } else { - - if (timeout < NC_SZ_TIMEOUT_MIN) - timeout = NC_SZ_TIMEOUT_MIN; - else if (timeout > NC_SZ_TIMEOUT_MAX) - timeout = NC_SZ_TIMEOUT_MAX; - - } - - CopyRect(&d->sz_ch_source, &r_client); - OffsetRect(&d->sz_ch_source, -d->sz_ch_source.left, -d->sz_ch_source.top); - CopyRect(&d->sz_ch_target, &d->r_required); - OffsetRect(&d->sz_ch_target, -d->sz_ch_target.left, -d->sz_ch_target.top); - d->sz_ch_increment = 0; - d->sz_ch_max = steps; - d->sz_ch_timeout = timeout; - d->size_changing = TRUE; - - SetTimer(hwnd, NC_TIMER_SIZER, timeout, NULL); - } - break; - } /* switch(HIWORD(wParam)) */ - - return TRUE; -} - -static LRESULT nc_handle_wm_timer(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - khui_nc_wnd_data * d; - - d = (khui_nc_wnd_data *)(LONG_PTR) GetWindowLongPtr(hwnd, CW_PARAM); - if (d == NULL) - return FALSE; - - if (wParam == NC_TIMER_SIZER) { - - RECT r_now; - - /* are we done with this sizing operation? */ - if (!d->size_changing || - d->sz_ch_increment >= d->sz_ch_max) { - - d->size_changing = FALSE; - KillTimer(hwnd, NC_TIMER_SIZER); - return 0; - } - - /* have the requirements changed while we were processing the - sizing operation? */ - if ((d->r_required.right - d->r_required.left != - d->sz_ch_target.right) - - || - - (d->r_required.bottom - d->r_required.top != - d->sz_ch_target.bottom)) { - - /* the target size has changed. we need to restart the - sizing operation. */ - - RECT r_client; - - GetClientRect(hwnd, &r_client); - - CopyRect(&d->sz_ch_source, &r_client); - OffsetRect(&d->sz_ch_source, -d->sz_ch_source.left, -d->sz_ch_source.top); - CopyRect(&d->sz_ch_target, &d->r_required); - OffsetRect(&d->sz_ch_target, -d->sz_ch_target.left, -d->sz_ch_target.top); - d->sz_ch_increment = 0; - - /* leave the other fields alone */ - -#ifdef DEBUG - assert(d->sz_ch_max >= NC_SZ_STEPS_MIN); - assert(d->sz_ch_max <= NC_SZ_STEPS_MAX); - assert(d->sz_ch_timeout >= NC_SZ_TIMEOUT_MIN); - assert(d->sz_ch_timeout <= NC_SZ_TIMEOUT_MAX); - assert(d->size_changing); -#endif - } - - /* we are going to do the next increment */ - d->sz_ch_increment ++; - - /* now, figure out the size of the client area for this - step */ - - r_now.left = 0; - r_now.top = 0; - -#define PROPORTION(v1, v2, i, s) (((v1) * ((s) - (i)) + (v2) * (i)) / (s)) - - r_now.right = PROPORTION(d->sz_ch_source.right, d->sz_ch_target.right, - d->sz_ch_increment, d->sz_ch_max); - - r_now.bottom = PROPORTION(d->sz_ch_source.bottom, d->sz_ch_target.bottom, - d->sz_ch_increment, d->sz_ch_max); - -#undef PROPORTION - -#ifdef DEBUG - { - long dx = ((r_now.right - r_now.left) - d->sz_ch_target.right) * - (d->sz_ch_source.right - d->sz_ch_target.right); - - long dy = ((r_now.bottom - r_now.top) - d->sz_ch_target.bottom) * - (d->sz_ch_source.bottom - d->sz_ch_target.bottom); - - if (dx < 0 || dy < 0) { - KillTimer(hwnd, NC_TIMER_SIZER); - assert(dx >= 0); - assert(dy >= 0); - SetTimer(hwnd, NC_TIMER_SIZER, d->sz_ch_timeout, NULL); - } - } -#endif - - AdjustWindowRectEx(&r_now, NC_WINDOW_STYLES, FALSE, - NC_WINDOW_EX_STYLES); - - { - RECT r; - - GetWindowRect(hwnd, &r); - OffsetRect(&r_now, r.left - r_now.left, r.top - r_now.top); - } - - khm_adjust_window_dimensions_for_display(&r_now, 0); - - SetWindowPos(hwnd, NULL, - r_now.left, r_now.top, - r_now.right - r_now.left, - r_now.bottom - r_now.top, - SWP_NOACTIVATE | SWP_NOOWNERZORDER | - SWP_NOZORDER); - - /* and now we wait for the next timer message */ - - return 0; - } else if (wParam == NC_TIMER_ENABLEANIMATE) { - - d->animation_enabled = TRUE; - KillTimer(hwnd, NC_TIMER_ENABLEANIMATE); - } - - return 0; -} - -static LRESULT nc_handle_wm_notify(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - - LPNMHDR nmhdr; - khui_nc_wnd_data * d; - - d = (khui_nc_wnd_data *)(LONG_PTR) GetWindowLongPtr(hwnd, CW_PARAM); - if (d == NULL) - return FALSE; - - nmhdr = (LPNMHDR) lParam; - - if (nmhdr->code == TCN_SELCHANGE) { - /* the current tab has changed. */ - int idx; - TCITEM tcitem; - - idx = TabCtrl_GetCurSel(d->tab_wnd); - ZeroMemory(&tcitem, sizeof(tcitem)); - - tcitem.mask = TCIF_PARAM; - TabCtrl_GetItem(d->tab_wnd, idx, &tcitem); - - d->current_panel = (int) tcitem.lParam; - - nc_layout_new_cred_window(d); - - return TRUE; - } - - return FALSE; -} - -static LRESULT nc_handle_wm_help(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - static DWORD ctxids[] = { - NC_TS_CTRL_ID_MIN, IDH_NC_TABMAIN, - NC_TS_CTRL_ID_MIN + 1, IDH_NC_TABBUTTON, - NC_TS_CTRL_ID_MIN + 2, IDH_NC_TABBUTTON, - NC_TS_CTRL_ID_MIN + 3, IDH_NC_TABBUTTON, - NC_TS_CTRL_ID_MIN + 4, IDH_NC_TABBUTTON, - NC_TS_CTRL_ID_MIN + 5, IDH_NC_TABBUTTON, - NC_TS_CTRL_ID_MIN + 6, IDH_NC_TABBUTTON, - NC_TS_CTRL_ID_MIN + 7, IDH_NC_TABBUTTON, - IDOK, IDH_NC_OK, - IDCANCEL, IDH_NC_CANCEL, - IDC_NC_HELP, IDH_NC_HELP, - IDC_NC_ADVANCED, IDH_NC_ADVANCED, - IDC_NC_CREDTEXT, IDH_NC_CREDWND, - 0 - }; - - HELPINFO * hlp; - HWND hw = NULL; - HWND hw_ctrl; - khui_nc_wnd_data * d; - - d = (khui_nc_wnd_data *)(LONG_PTR) GetWindowLongPtr(hwnd, CW_PARAM); - if (d == NULL) - return FALSE; - - hlp = (HELPINFO *) lParam; - - if (d->nc->subtype != KMSG_CRED_NEW_CREDS && - d->nc->subtype != KMSG_CRED_PASSWORD) - return TRUE; - - if (hlp->iContextType != HELPINFO_WINDOW) - return TRUE; - - if (hlp->hItemHandle != NULL && - hlp->hItemHandle != hwnd) { - DWORD id; - int i; - - hw_ctrl =hlp->hItemHandle; - - id = GetWindowLong(hw_ctrl, GWL_ID); - for (i=0; ctxids[i] != 0; i += 2) - if (ctxids[i] == id) - break; - - if (ctxids[i] != 0) - hw = khm_html_help(hw_ctrl, - ((d->nc->subtype == KMSG_CRED_NEW_CREDS)? - L"::popups_newcreds.txt": - L"::popups_password.txt"), - HH_TP_HELP_WM_HELP, - (DWORD_PTR) ctxids); - } - - if (hw == NULL) { - khm_html_help(hwnd, NULL, HH_HELP_CONTEXT, - ((d->nc->subtype == KMSG_CRED_NEW_CREDS)? - IDH_ACTION_NEW_ID: IDH_ACTION_PASSWD_ID)); - } - - return TRUE; -} - -static LRESULT nc_handle_wm_activate(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - if (uMsg == WM_MOUSEACTIVATE || - wParam == WA_ACTIVE || wParam == WA_CLICKACTIVE) { - - FLASHWINFO fi; - khui_nc_wnd_data * d; - DWORD_PTR ex_style; - - d = (khui_nc_wnd_data *)(LONG_PTR) GetWindowLongPtr(hwnd, CW_PARAM); - - if (d && d->flashing_enabled) { - ZeroMemory(&fi, sizeof(fi)); - - fi.cbSize = sizeof(fi); - fi.hwnd = hwnd; - fi.dwFlags = FLASHW_STOP; - - FlashWindowEx(&fi); - - d->flashing_enabled = FALSE; - } - - ex_style = GetWindowLongPtr(hwnd, GWL_EXSTYLE); - - if (ex_style & WS_EX_TOPMOST) { - SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, - SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); - } - } - - return (uMsg == WM_MOUSEACTIVATE)? MA_ACTIVATE : 0; -} - -static LRESULT CALLBACK nc_window_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) -{ - switch(uMsg) { - case WM_MOUSEACTIVATE: - case WM_ACTIVATE: - return nc_handle_wm_activate(hwnd, uMsg, wParam, lParam); - - case WM_CREATE: - return nc_handle_wm_create(hwnd, uMsg, wParam, lParam); - - case WM_DESTROY: - return nc_handle_wm_destroy(hwnd, uMsg, wParam, lParam); - - case WM_COMMAND: - return nc_handle_wm_command(hwnd, uMsg, wParam, lParam); - - case WM_NOTIFY: - return nc_handle_wm_notify(hwnd, uMsg, wParam, lParam); - - case WM_MOVE: - case WM_MOVING: - return nc_handle_wm_moving(hwnd, uMsg, wParam, lParam); - - case WM_TIMER: - return nc_handle_wm_timer(hwnd, uMsg, wParam, lParam); - - case WM_HELP: - return nc_handle_wm_help(hwnd, uMsg, wParam, lParam); - - case KHUI_WM_NC_NOTIFY: - return nc_handle_wm_nc_notify(hwnd, uMsg, wParam, lParam); - } - - /* Note that this is technically a dialog box */ - return DefDlgProc(hwnd, uMsg, wParam, lParam); -} - -void khm_register_newcredwnd_class(void) -{ - WNDCLASSEX wcx; - - wcx.cbSize = sizeof(wcx); - wcx.style = CS_DBLCLKS | CS_OWNDC; - wcx.lpfnWndProc = nc_window_proc; - wcx.cbClsExtra = 0; - wcx.cbWndExtra = DLGWINDOWEXTRA + sizeof(LONG_PTR); - wcx.hInstance = khm_hInstance; - wcx.hIcon = LoadIcon(khm_hInstance, MAKEINTRESOURCE(IDI_MAIN_APP)); - wcx.hCursor = LoadCursor((HINSTANCE) NULL, IDC_ARROW); - wcx.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1); - wcx.lpszMenuName = NULL; - wcx.lpszClassName = KHUI_NEWCREDWND_CLASS; - wcx.hIconSm = NULL; - - khui_newcredwnd_cls = RegisterClassEx(&wcx); -} - -void khm_unregister_newcredwnd_class(void) -{ - UnregisterClass(MAKEINTATOM(khui_newcredwnd_cls), khm_hInstance); -} - -HWND khm_create_newcredwnd(HWND parent, khui_new_creds * c) -{ - wchar_t wtitle[256]; - HWND hwnd; - khm_int32 force_topmost = 0; - - if (c->window_title == NULL) { - if (c->subtype == KMSG_CRED_PASSWORD) - LoadString(khm_hInstance, - IDS_WT_PASSWORD, - wtitle, - ARRAYLENGTH(wtitle)); - else - LoadString(khm_hInstance, - IDS_WT_NEW_CREDS, - wtitle, - ARRAYLENGTH(wtitle)); - } - - khc_read_int32(NULL, L"CredWindow\\Windows\\NewCred\\ForceToTop", &force_topmost); - - hwnd = CreateWindowEx(NC_WINDOW_EX_STYLES | (force_topmost ? WS_EX_TOPMOST : 0), - MAKEINTATOM(khui_newcredwnd_cls), - ((c->window_title)?c->window_title: wtitle), - NC_WINDOW_STYLES, - 0,0,400,400, /* bogus values. the window - is going to resize and - reposition itself - anyway */ - parent, - NULL, - khm_hInstance, - (LPVOID) c); - -#ifdef DEBUG - assert(hwnd != NULL); -#endif - - /* note that the window is not visible yet. That's because, at - this point we don't know what the panels are */ - - return hwnd; -} - -void khm_prep_newcredwnd(HWND hwnd) -{ - SendMessage(hwnd, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_DIALOG_SETUP), 0); -} - -void khm_show_newcredwnd(HWND hwnd) -{ - /* add all the panels in and prep UI */ - PostMessage(hwnd, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_DIALOG_ACTIVATE), 0); -} diff --git a/src/windows/identity/ui/newcredwnd.h b/src/windows/identity/ui/newcredwnd.h deleted file mode 100644 index 872cad2ed..000000000 --- a/src/windows/identity/ui/newcredwnd.h +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_NEWCREDWND_H -#define __KHIMAIRA_NEWCREDWND_H - -#include<khuidefs.h> - -#define KHUI_NEWCREDWND_CLASS L"KhmNewCredWnd" - -typedef enum tag_nc_notification_types { - NC_NOTIFY_NONE = 0, /* no notification */ - NC_NOTIFY_MARQUEE, /* marquee type notification */ - NC_NOTIFY_PROGRESS, /* progress notification */ - NC_NOTIFY_MESSAGE, /* a message */ -} nc_notification_type; - -typedef struct khui_nc_wnd_data_t { - khui_new_creds * nc; - - /* The tab control */ - - HWND tab_wnd; /* tab control */ - int current_panel; /* ordinal of the current panel being - displayed. */ - - /* The main panel */ - HWND dlg_main; /* main dialog */ - RECT r_main; /* the extent of the main panel that - we have used so far. The rect - includes the size of the area used - by the identity selector controls, - the custom controls added by - credentials providers and the - buttons that may be required when - in the mini mode. */ - RECT r_required; /* required size of the main window */ - - /* The button bar */ - - HWND dlg_bb; /* button bar */ - - /* Sizing the new credentials window */ - - BOOL animation_enabled; /* Flag indicating whether animation - is enabled for the dialg. If this - flag is off, we don't animate size - changes even if the configuration - says so. */ - BOOL size_changing; /* flag indicating that the size of - the main window is being - adjusted. */ - RECT sz_ch_source; /* Source size, from which we are - going towards target size in - sz_ch_max steps. The RECT is self - relative (i.e. left=0 and top=0)*/ - RECT sz_ch_target; /* If we are doing an incremental size - change, this holds the target size - that we were going for. Note that - the target size might change while - we are adjusting the size. So this - helps keep track of whether we need - to start the size change again. The - RECT is self relative (i.e. left=0 - and top=0). */ - int sz_ch_increment; /* Current step of the incremental - size change operation. */ - int sz_ch_max; /* Max number of steps in the size - change operation. */ - int sz_ch_timeout; /* Milliseconds between each increment */ - - BOOL flashing_enabled; /* The window maybe still flashing - from the last call to - FlashWindowEx(). */ - - /* Custom controls and identity specifiers */ - - HWND hwnd_banner; /* static control for banner */ - HWND hwnd_name; /* static control for name */ - - HWND hwnd_last_idspec; /* last identity specifier control */ - - /* Notification windows */ - - nc_notification_type notif_type; /* Type of notification */ - HWND hwnd_notif_label; /* Label for notifications */ - HWND hwnd_notif_aux; /* Other control for notifications */ - - /* Areas of the main panel */ - - RECT r_idspec; /* Area used by identity specifiers - (relative to client) */ - RECT r_custprompt; /* Area used by custom controls (relative - to client) */ - RECT r_notif; /* Area used for notifications. */ - - /* Metrics for custom prompts and identity specifiers */ - - RECT r_row; /* Metrics for a control row (left=0, - top=0, right=width, bottom=height) */ - RECT r_area; /* Area available for controls (relative - to client) */ - RECT r_n_label; /* coords of the static control (relative - to row) */ - RECT r_n_input; /* coords of the edit control (relative to - row) */ - RECT r_e_label; /* coords of the extended edit control - (relative to row) */ - RECT r_e_input; /* coords of the extended edit control - (relative to row) */ - RECT r_credtext; /* Area for credtext window (relative to - row) */ -} khui_nc_wnd_data; - -void khm_register_newcredwnd_class(void); -void khm_unregister_newcredwnd_class(void); -HWND khm_create_newcredwnd(HWND parent, khui_new_creds * c); -void khm_prep_newcredwnd(HWND hwnd); -void khm_show_newcredwnd(HWND hwnd); - -/* Width of the button bar in dialog units */ -#define NCDLG_BBAR_WIDTH 66 -/* Height of the button bar in dialog units */ -#define NCDLG_BBAR_HEIGHT 190 - -/* Control identifier for the tab control in the new credentials - dialog. We declare this here since we will be creating the control - manually. */ -#define IDC_NC_TABS 8001 - -/* This is the first control ID that is created in the custom tabstrip - control buttons. Subsequent buttons get consecutive IDs starting - from this one. */ -#define NC_TS_CTRL_ID_MIN 8002 - -/* Maximum number of controls */ -#define NC_TS_MAX_CTRLS 8 - -/* Maximum control ID */ -#define NC_TS_CTRL_ID_MAX (NC_TS_CTRL_ID_MIN + NC_TS_MAX_CTRLS - 1) - -#define NC_BN_SET_DEF_ID 8012 - -/* the first control ID that may be used by an identity provider */ -#define NC_IS_CTRL_ID_MIN 8016 - -/* the maximum number of controls that may be created by an identity - provider*/ -#define NC_IS_CTRL_MAX_CTRLS 8 - -/* the maximum control ID that may be used by an identity provider */ -#define NC_IS_CTRL_ID_MAX (NC_IS_CTRL_ID_MIN + NC_IS_MAX_CTRLS - 1) - -#define NC_WINDOW_EX_STYLES (WS_EX_DLGMODALFRAME | WS_EX_CONTEXTHELP | WS_EX_APPWINDOW) -#define NC_WINDOW_STYLES (WS_DLGFRAME | WS_POPUPWINDOW | WS_CLIPCHILDREN) - -#define NC_SZ_STEPS_MIN 3 -#define NC_SZ_STEPS_DEF 10 -#define NC_SZ_STEPS_MAX 100 - -#define NC_SZ_TIMEOUT_MIN 5 -#define NC_SZ_TIMEOUT_DEF 10 -#define NC_SZ_TIMEOUT_MAX 500 - -#define NC_TIMER_SIZER 1001 -#define NC_TIMER_ENABLEANIMATE 1002 - -#define ENABLEANIMATE_TIMEOUT 400 - -#endif diff --git a/src/windows/identity/ui/notifier.c b/src/windows/identity/ui/notifier.c deleted file mode 100644 index fe057c78f..000000000 --- a/src/windows/identity/ui/notifier.c +++ /dev/null @@ -1,3173 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -#define OEMRESOURCE - -#include<khmapp.h> -#include<assert.h> - -#define KHUI_NOTIFIER_CLASS L"KhuiNotifierMsgWindowClass" -#define KHUI_ALERTER_CLASS L"KhuiAlerterWindowClass" -#define KHUI_ALERTBIN_CLASS L"KhuiAlertBinWindowClass" - -#define KHUI_NOTIFIER_WINDOW L"KhuiNotifierMsgWindow" - - -/* The commands that are available as default actions when the user - clicks the notification icon. */ - -khm_int32 khm_notifier_actions[] = { - KHUI_ACTION_OPEN_APP, - KHUI_ACTION_NEW_CRED -}; - -khm_size n_khm_notifier_actions = ARRAYLENGTH(khm_notifier_actions); - -/* notifier message for notification icon */ -#define KHUI_WM_NOTIFIER WM_COMMAND - -#define DRAWTEXTOPTIONS (DT_CALCRECT | DT_NOPREFIX | DT_WORDBREAK) - -/* are we showing an alert? */ -#define ALERT_DISPLAYED() (balloon_alert != NULL || khui_alert_windows != NULL) - -/* Forward declarations */ - -struct tag_alerter_wnd_data; -typedef struct tag_alerter_wnd_data alerter_wnd_data; - -struct tag_alert_list; -typedef struct tag_alert_list alert_list; - -static khm_int32 -alert_show(khui_alert * a); - -static khm_int32 -alert_show_minimized(khui_alert * a); - -static khm_int32 -alert_show_normal(khui_alert * a); - -static khm_int32 -alert_show_list(alert_list * alist); - -static khm_int32 -alert_enqueue(khui_alert * a); - -static khm_boolean -alert_is_equal(khui_alert * a1, khui_alert * a2); - -static void -check_for_queued_alerts(void); - -static void -show_queued_alerts(void); - -static khm_int32 -alert_consolidate(alert_list * alist, - khui_alert * alert, - khm_boolean add_from_queue); - -/* Globals */ - -/* window class registration atom for message only notifier window - class */ -ATOM atom_notifier = 0; - -/* window class registration atom for alert windows */ -ATOM atom_alerter = 0; -/* window class registration atom for the alert "bin", which is the - window that holds all the alerts. */ -ATOM atom_alert_bin = 0; - -/* notifier message window */ -HWND hwnd_notifier = NULL; - -BOOL notifier_ready = FALSE; - -/* The list of alert windows currently active */ -alerter_wnd_data * khui_alert_windows = NULL; - -/* Notification icon for when there are no alerts to be displayed */ -int iid_normal = IDI_NOTIFY_NONE; - -/* Tooltip to use when there are no alerts to be displayed */ -wchar_t tip_normal[128] = L""; - -/* Current notifier severity level */ -khm_int32 notifier_severity = KHERR_NONE; - -/* The alert currently being displayed in a balloon */ -khui_alert * balloon_alert = NULL; - -/********************************************************************** - Alert Queue - - The alert queue is the data structure that keeps track of all the - alerts that are waiting to be displayed. Alerts will be placed on - the queue if they cannot be immediately displayed for some reason - (e.g. another alert is being displayed, or the user is working in - another window). -***********************************************************************/ - -#define KHUI_ALERT_QUEUE_MAX 64 - -khui_alert * alert_queue[KHUI_ALERT_QUEUE_MAX]; -khm_int32 alert_queue_head = 0; -khm_int32 alert_queue_tail = 0; - -#define is_alert_queue_empty() (alert_queue_head == alert_queue_tail) -#define is_alert_queue_full() (((alert_queue_tail + 1) % KHUI_ALERT_QUEUE_MAX) == alert_queue_head) - -/* NOTE: the alert queue functions are unsafe to call from any thread - other than the UI thread. */ - -static void -alert_queue_put_alert(khui_alert * a) { - if (is_alert_queue_full()) return; - alert_queue[alert_queue_tail++] = a; - khui_alert_hold(a); - alert_queue_tail %= KHUI_ALERT_QUEUE_MAX; -} - -/* the caller needs to release the alert that's returned */ -static khui_alert * -alert_queue_get_alert(void) { - khui_alert * a; - - if (is_alert_queue_empty()) return NULL; - a = alert_queue[alert_queue_head++]; - alert_queue_head %= KHUI_ALERT_QUEUE_MAX; - - return a; /* held */ -} - -static int -alert_queue_get_size(void) { - if (is_alert_queue_empty()) - return 0; - - if (alert_queue_tail < alert_queue_head) { - return (alert_queue_tail + KHUI_ALERT_QUEUE_MAX - alert_queue_head); - } else { - return alert_queue_tail - alert_queue_head; - } -} - -static khui_alert * -alert_queue_get_alert_by_pos(int pos) { - khui_alert * a; - - if (is_alert_queue_empty() || - pos >= alert_queue_get_size() || - pos < 0) { - return NULL; - } - - a = alert_queue[(alert_queue_head + pos) % KHUI_ALERT_QUEUE_MAX]; - if (a) { - khui_alert_hold(a); - } - return a; -} - -static int -alert_queue_delete_alert(khui_alert * a) { - int idx; - int succ; - - idx = alert_queue_head; - while(idx != alert_queue_tail) { - if (alert_queue[idx] == a) - break; - - idx = (idx + 1) % KHUI_ALERT_QUEUE_MAX; - } - - if (idx == alert_queue_tail) - return 0; - -#ifdef DEBUG - assert(alert_queue[idx]); -#endif - khui_alert_release(alert_queue[idx]); - - succ = (idx + 1) % KHUI_ALERT_QUEUE_MAX; - while(succ != alert_queue_tail) { - alert_queue[idx] = alert_queue[succ]; - - succ = (succ + 1) % KHUI_ALERT_QUEUE_MAX; - idx = (idx + 1) % KHUI_ALERT_QUEUE_MAX; - } - - alert_queue_tail = idx; - return 1; -} - -/* the caller needs to release the alert that's returned */ -static khui_alert * -alert_queue_peek(void) { - khui_alert * a; - - if (is_alert_queue_empty()) - return NULL; - - a = alert_queue[alert_queue_head]; - khui_alert_hold(a); - - return a; -} - -/********************************************************************** - Alert List - - A list of alerts. Currently has a fixed upper limit, but the limit - is high enough for now. -***********************************************************************/ - -typedef struct tag_alert_list { - khui_alert * alerts[KHUI_ALERT_QUEUE_MAX]; - int n_alerts; - wchar_t title[KHUI_MAXCCH_TITLE]; -} alert_list; - -static void -alert_list_init(alert_list * alist) { - ZeroMemory(alist, sizeof(*alist)); -} - -static void -alert_list_set_title(alert_list * alist, wchar_t * title) { - StringCbCopy(alist->title, sizeof(alist->title), title); -} - -static khm_int32 -alert_list_add_alert(alert_list * alist, - khui_alert * alert) { - - if (alist->n_alerts == ARRAYLENGTH(alist->alerts)) - return KHM_ERROR_NO_RESOURCES; - - khui_alert_hold(alert); - alist->alerts[alist->n_alerts++] = alert; - - return KHM_ERROR_SUCCESS; -} - -static void -alert_list_destroy(alert_list * alist) { - int i; - - for (i=0; i < alist->n_alerts; i++) { - if (alist->alerts[i] != NULL) { - khui_alert_release(alist->alerts[i]); - alist->alerts[i] = NULL; - } - } - - alist->n_alerts = 0; -} - - -/********************************************************************** - Notifier Window - - The notifier window manages the notification icon and handles - KMSG_ALERT messages sent from the UI library. The window will exist - for the lifetime of the application. -***********************************************************************/ - -/* These are defined for APPVER >= 0x501. We are defining them here - so that we can build with APPVER = 0x500 and use the same binaries - with Win XP. */ - -#ifndef NIN_BALLOONSHOW -#define NIN_BALLOONSHOW (WM_USER + 2) -#endif - -#ifndef NIN_BALLOONHIDE -#define NIN_BALLOONHIDE (WM_USER + 3) -#endif - -#ifndef NIN_BALLOONTIMEOUT -#define NIN_BALLOONTIMEOUT (WM_USER + 4) -#endif - -#ifndef NIN_BALLOONUSERCLICK -#define NIN_BALLOONUSERCLICK (WM_USER + 5) -#endif - - -static LRESULT CALLBACK -notifier_wnd_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) -{ - kmq_message * m; - khm_int32 rv; - - if(uMsg == KMQ_WM_DISPATCH) { - kmq_wm_begin(lParam, &m); - rv = KHM_ERROR_SUCCESS; - - if(m->type == KMSG_ALERT) { - /* handle notifier messages */ - switch(m->subtype) { - case KMSG_ALERT_SHOW: - { - khui_alert * a; - - a = (khui_alert *) m->vparam; -#ifdef DEBUG - assert(a != NULL); -#endif - rv = alert_show(a); - khui_alert_release(a); - } - break; - - case KMSG_ALERT_QUEUE: - { - khui_alert * a; - - a = (khui_alert *) m->vparam; -#ifdef DEBUG - assert(a != NULL); -#endif - rv = alert_enqueue(a); - khui_alert_release(a); - } - break; - - case KMSG_ALERT_CHECK_QUEUE: - check_for_queued_alerts(); - break; - - case KMSG_ALERT_SHOW_QUEUED: - show_queued_alerts(); - break; - - case KMSG_ALERT_SHOW_MODAL: - { - khui_alert * a; - - a = (khui_alert *) m->vparam; -#ifdef DEBUG - assert(a != NULL); -#endif - khui_alert_lock(a); - a->flags |= KHUI_ALERT_FLAG_MODAL; - khui_alert_unlock(a); - - rv = alert_show(a); - - if (KHM_SUCCEEDED(rv)) { - khm_message_loop_int(&a->displayed); - } - - khui_alert_release(a); - } - break; - } - } else if (m->type == KMSG_CRED && - m->subtype == KMSG_CRED_ROOTDELTA) { - - KillTimer(hwnd, KHUI_REFRESH_TIMER_ID); - SetTimer(hwnd, KHUI_REFRESH_TIMER_ID, - KHUI_REFRESH_TIMEOUT, - NULL); - - } - - return kmq_wm_end(m, rv); - } else if (uMsg == KHUI_WM_NOTIFIER) { - /* Handle events generated from the notification icon */ - - /* wParam is the identifier of the notify icon, but we only - have one. */ - switch(lParam) { - case WM_CONTEXTMENU: - { - POINT pt; - int menu_id; - khui_menu_def * mdef; - khui_action_ref * act = NULL; - khm_size i, n; - khm_int32 def_cmd; - - /* before we show the context menu, we need to make - sure that the default action for the notification - icon is present in the menu and that it is marked - as the default. */ - - def_cmd = khm_get_default_notifier_action(); - - if (khm_is_main_window_visible()) { - menu_id = KHUI_MENU_ICO_CTX_NORMAL; - - if (def_cmd == KHUI_ACTION_OPEN_APP) - def_cmd = KHUI_ACTION_CLOSE_APP; - } else { - menu_id = KHUI_MENU_ICO_CTX_MIN; - } - - mdef = khui_find_menu(menu_id); - -#ifdef DEBUG - assert(mdef); -#endif - n = khui_menu_get_size(mdef); - for (i=0; i < n; i++) { - act = khui_menu_get_action(mdef, i); - if (!(act->flags & KHUI_ACTIONREF_PACTION) && - (act->action == def_cmd)) - break; - } - - if (i < n) { - if (!(act->flags & KHUI_ACTIONREF_DEFAULT)) { - khui_menu_remove_action(mdef, i); - khui_menu_insert_action(mdef, i, def_cmd, KHUI_ACTIONREF_DEFAULT); - } else { - /* we are all set */ - } - } else { - /* the default action was not found on the context - menu */ -#ifdef DEBUG - assert(FALSE); -#endif - khui_menu_insert_action(mdef, 0, def_cmd, KHUI_ACTIONREF_DEFAULT); - } - - SetForegroundWindow(khm_hwnd_main); - - GetCursorPos(&pt); - khm_menu_show_panel(menu_id, pt.x, pt.y); - - PostMessage(khm_hwnd_main, WM_NULL, 0, 0); - } - break; - - case NIN_SELECT: - /* fall through */ - case NIN_KEYSELECT: - /* If there were any alerts waiting to be shown, we show - them. Otherwise we perform the default action. */ - khm_notify_icon_activate(); - break; - - case NIN_BALLOONUSERCLICK: - if (balloon_alert) { - khui_alert * a; - - khm_notify_icon_change(KHERR_NONE); - - a = balloon_alert; - balloon_alert = NULL; - - khui_alert_lock(a); - a->displayed = FALSE; - - if ((a->flags & KHUI_ALERT_FLAG_DEFACTION) && - !(a->flags & KHUI_ALERT_FLAG_REQUEST_WINDOW) && - a->n_alert_commands > 0) { - PostMessage(khm_hwnd_main, WM_COMMAND, - MAKEWPARAM(a->alert_commands[0], - 0), - 0); - } else if (a->flags & - KHUI_ALERT_FLAG_REQUEST_WINDOW) { - khm_show_main_window(); - alert_show_normal(a); - } - - khui_alert_unlock(a); - khui_alert_release(a); - } else { -#ifdef DEBUG - assert(FALSE); -#endif - } - break; - - case NIN_BALLOONHIDE: - case NIN_BALLOONTIMEOUT: - khm_notify_icon_change(KHERR_NONE); - if (balloon_alert) { - khui_alert * a; - a = balloon_alert; - balloon_alert = NULL; - - khui_alert_lock(a); - a->displayed = FALSE; - khui_alert_unlock(a); - - khui_alert_release(a); - } - break; - } - } else if (uMsg == WM_TIMER) { - if (wParam == KHUI_TRIGGER_TIMER_ID) { - KillTimer(hwnd, KHUI_TRIGGER_TIMER_ID); - khm_timer_fire(hwnd); - } else if (wParam == KHUI_REFRESH_TIMER_ID) { - KillTimer(hwnd, KHUI_REFRESH_TIMER_ID); - kcdb_identity_refresh_all(); - khm_timer_refresh(hwnd); - } - } - - return DefWindowProc(hwnd, uMsg, wParam, lParam); -} - -ATOM -khm_register_notifier_wnd_class(void) -{ - WNDCLASSEX wcx; - - ZeroMemory(&wcx, sizeof(wcx)); - - wcx.cbSize = sizeof(wcx); - wcx.style = 0; - wcx.lpfnWndProc = notifier_wnd_proc; - wcx.cbClsExtra = 0; - wcx.cbWndExtra = 0; - wcx.hInstance = khm_hInstance; - wcx.hIcon = NULL; - wcx.hCursor = NULL; - wcx.hbrBackground = NULL; - wcx.lpszMenuName = NULL; - wcx.lpszClassName = KHUI_NOTIFIER_CLASS; - wcx.hIconSm = NULL; - - atom_notifier = RegisterClassEx(&wcx); - - return atom_notifier; -} - -/********************************************************************* - Alerter -**********************************************************************/ - -typedef struct tag_alerter_alert_data { - khui_alert * alert; - - BOOL seen; /* has the user seen this alert? */ - - BOOL has_commands; /* we cache the value here. otherwise - we'll have to get a lock on the - alert each time we have to find out - whether there are any commands for - this alert. */ - - RECT r_alert; /* the entire alert, relative to self. */ - - /* the following rects are relative to the top left of r_alert. */ - - RECT r_title; /* the title. deflate by padding to - get the text rect. */ - RECT r_icon; /* rect for icon */ - RECT r_message; /* rect for the text. no padding - necessary. */ - RECT r_suggestion; /* rect for the suggestion. deflate - by padding to get the suggestion - rect. The suggestion rect includes - space for the small icon on the - left and padding between the icon - and the text. The size of the small - icon are as per system metrics - SM_C{X,Y}SMICON. Padding is - s_pad.cx vertical. */ - - int n_cmd_buttons; /* number of command buttons in this alert. */ - - RECT r_buttons[KHUI_MAX_ALERT_COMMANDS]; - /* rects for the command buttons. */ - - HWND hwnd_buttons[KHUI_MAX_ALERT_COMMANDS]; - /* handles for the command buttons */ - - HWND hwnd_marker; - /* handle to the marker window used as - a tab-stop target when there are - not buttons associated with the - alert. */ - - LDCL(struct tag_alerter_alert_data); -} alerter_alert_data; - -typedef struct tag_alerter_wnd_data { - HWND hwnd; - HFONT hfont; - - wchar_t caption[KHUI_MAXCCH_TITLE]; /* the original - caption for the - dialog. */ - - HWND hw_bin; - HWND hw_scroll; - HWND hw_close; - - int scroll_top; - - int n_cmd_buttons; /* total number of command buttons - in all the alerts being shown in - this dialog. */ - - int c_alert; /* current selected alert. */ - - /* various metrics */ - /* calculated during WM_CREATE */ - SIZE s_button; /* minimum dimensions for command button */ - SIZE s_margin; - RECT r_text; /* only .left and .right are used. rest are 0 */ - RECT r_title; /* only .left, .right and .bottom are used. .top=0 */ - SIZE s_icon; - SIZE s_pad; - - int cx_wnd; - int cy_max_wnd; - - /* derived from the alert sizes */ - SIZE s_alerts; - - QDCL(alerter_alert_data); /* queue of alerts that are being - shown in this window. */ - - LDCL(struct tag_alerter_wnd_data); /* for adding to - khui_alert_windows list. */ - - int n_alerts; - -} alerter_wnd_data; - -#define NTF_PARAM DWLP_USER - -/* dialog sizes in base dialog units */ - -#define NTF_MARGIN 5 -#define NTF_WIDTH 200 -#define NTF_MAXHEIGHT 150 - -#define NTF_TITLE_X NTF_MARGIN -#define NTF_TITLE_WIDTH (NTF_WIDTH - NTF_MARGIN*2) -#define NTF_TITLE_HEIGHT 10 - -#define NTF_TEXT_PAD 2 - -#define NTF_BUTTON_HEIGHT 14 - -#define NTF_TIMEOUT 20000 - -#define ALERT_WINDOW_EX_SYLES (WS_EX_DLGMODALFRAME | WS_EX_CONTEXTHELP) -#define ALERT_WINDOW_STYLES (WS_DLGFRAME | WS_POPUPWINDOW | WS_CLIPCHILDREN | DS_NOIDLEMSG) - -/* Control ids */ -#define IDC_NTF_ALERTBIN 998 -#define IDC_NTF_CLOSE 999 - -#define IDC_NTF_CMDBUTTONS 1001 -#define IDC_FROM_IDX(alert, bn) ((alert) * (KHUI_MAX_ALERT_COMMANDS + 1) + (bn) + 1 + IDC_NTF_CMDBUTTONS) -#define ALERT_FROM_IDC(idc) (((idc) - IDC_NTF_CMDBUTTONS) / (KHUI_MAX_ALERT_COMMANDS + 1)) -#define BUTTON_FROM_IDC(idc) (((idc) - IDC_NTF_CMDBUTTONS) % (KHUI_MAX_ALERT_COMMANDS + 1) - 1) - -/* if the only command in an alert is "Close", we assume that the - alert has no commands. */ -#define ALERT_HAS_CMDS(a) ((a)->n_alert_commands > 1 || ((a)->n_alert_commands == 1 && (a)->alert_commands[0] != KHUI_PACTION_CLOSE)) - -#define SCROLL_LINE_SIZE(d) ((d)->cy_max_wnd / 12) - -static void -add_alert_to_wnd_data(alerter_wnd_data * d, - khui_alert * a) { - alerter_alert_data * aiter; - khm_boolean exists = 0; - - khui_alert_lock(a); - - /* check if the alert is already there */ - aiter = QTOP(d); - while(aiter && !exists) { - if (aiter->alert) { - khui_alert_lock(aiter->alert); - - if (alert_is_equal(aiter->alert, a)) { - exists = TRUE; - } - - khui_alert_unlock(aiter->alert); - } - - aiter = QNEXT(aiter); - } - - a->flags |= KHUI_ALERT_FLAG_DISPLAY_WINDOW; - - if (!exists) { - a->displayed = TRUE; - } - - khui_alert_unlock(a); - - if (!exists) { - alerter_alert_data * adata; - - adata = PMALLOC(sizeof(*adata)); - ZeroMemory(adata, sizeof(*adata)); - - adata->alert = a; - khui_alert_hold(a); - - QPUT(d, adata); - d->n_alerts ++; - } -} - -static alerter_wnd_data * -create_alerter_wnd_data(HWND hwnd, alert_list * l) { - alerter_wnd_data * d; - int i; - LONG dlgb; - - d = PMALLOC(sizeof(*d)); - ZeroMemory(d, sizeof(*d)); - - d->hwnd = hwnd; - - GetWindowText(hwnd, d->caption, ARRAYLENGTH(d->caption)); - - for (i=0; i < l->n_alerts; i++) { - add_alert_to_wnd_data(d, l->alerts[i]); - } - - d->n_alerts = l->n_alerts; - - LPUSH(&khui_alert_windows, d); - - /* Compute a few metrics first */ - - dlgb = GetDialogBaseUnits(); - -#define DLG2SCNX(x) MulDiv((x), LOWORD(dlgb), 4) -#define DLG2SCNY(y) MulDiv((y), HIWORD(dlgb), 8) - - d->cx_wnd = DLG2SCNX(NTF_WIDTH); - d->cy_max_wnd = DLG2SCNY(NTF_MAXHEIGHT); - - d->s_margin.cx = DLG2SCNX(NTF_MARGIN); - d->s_margin.cy = DLG2SCNY(NTF_MARGIN); - - d->r_title.left = DLG2SCNX(NTF_TITLE_X); - d->r_title.right = DLG2SCNX(NTF_TITLE_X + NTF_TITLE_WIDTH); - d->r_title.top = 0; - d->r_title.bottom = DLG2SCNY(NTF_TITLE_HEIGHT); - - d->s_pad.cx = DLG2SCNX(NTF_TEXT_PAD); - d->s_pad.cy = DLG2SCNY(NTF_TEXT_PAD); - - d->s_icon.cx = GetSystemMetrics(SM_CXICON); - d->s_icon.cy = GetSystemMetrics(SM_CYICON); - - d->r_text.left = d->s_margin.cx * 2 + d->s_icon.cx; - d->r_text.right = d->cx_wnd - d->s_margin.cx; - d->r_text.top = 0; - d->r_text.bottom = 0; - - d->s_button.cx = ((d->r_text.right - d->r_text.left) - (KHUI_MAX_ALERT_COMMANDS - 1) * d->s_margin.cx) / KHUI_MAX_ALERT_COMMANDS; - d->s_button.cy = DLG2SCNY(NTF_BUTTON_HEIGHT); - -#undef DLG2SCNX -#undef DLG2SCNY - - d->c_alert = -1; - - return d; -} - -static void -layout_alert(HDC hdc, alerter_wnd_data * d, - alerter_alert_data * adata) { - RECT r; - size_t len; - int y; - int icon_y; - -#ifdef DEBUG - assert(adata->alert); -#endif - - khui_alert_lock(adata->alert); - - y = 0; - - /* Title */ - - y += d->s_margin.cy; - - /* If there is a title and it differs from the title of the - alerter window, then we have to show the alert title - separately. */ - if (adata->alert->title && - wcscmp(adata->alert->title, d->caption)) { - - CopyRect(&adata->r_title, &d->r_title); - OffsetRect(&adata->r_title, 0, y); - - y = adata->r_title.bottom + d->s_margin.cy; - - } else { - - SetRectEmpty(&adata->r_title); - - } - - /* Icon */ - - SetRect(&adata->r_icon, d->s_margin.cx, y, - d->s_margin.cx + d->s_icon.cx, - y + d->s_icon.cy); - - icon_y = adata->r_icon.bottom + d->s_margin.cy; /* the bottom of the icon */ - - /* Message */ - - if (adata->alert->message && - SUCCEEDED(StringCchLength(adata->alert->message, - KHUI_MAXCCH_MESSAGE, - &len))) { - - CopyRect(&r, &d->r_text); - - DrawTextEx(hdc, adata->alert->message, (int) len, - &r, - DRAWTEXTOPTIONS, - NULL); - - OffsetRect(&r, 0, y); - CopyRect(&adata->r_message, &r); - - y = r.bottom + d->s_margin.cy; - - } else { - - SetRectEmpty(&adata->r_message); - - } - - /* Suggestion */ - - if (adata->alert->suggestion && - SUCCEEDED(StringCchLength(adata->alert->suggestion, - KHUI_MAXCCH_SUGGESTION, - &len))) { - int pad = d->s_pad.cx + GetSystemMetrics(SM_CXSMICON); - - CopyRect(&r, &d->r_text); - r.left += pad; - - DrawTextEx(hdc, adata->alert->suggestion, (int) len, - &r, - DRAWTEXTOPTIONS, - NULL); - - r.left -= pad; - - InflateRect(&r, d->s_pad.cx, d->s_pad.cy); - OffsetRect(&r, 0, -r.top + y); - CopyRect(&adata->r_suggestion, &r); - - y = r.bottom + d->s_margin.cy; - - } else { - - SetRectEmpty(&adata->r_suggestion); - - } - - y = max(y, icon_y); - - /* Buttons */ - - if (ALERT_HAS_CMDS(adata->alert)) { - khm_int32 i; - int x, width; - wchar_t caption[KHUI_MAXCCH_SHORT_DESC]; - size_t len; - SIZE s; - int skip_close; - - adata->has_commands = TRUE; - - if (d->n_alerts > 1) - skip_close = TRUE; - else - skip_close = FALSE; - - x = d->r_text.left; - -#ifdef DEBUG - assert(adata->alert->n_alert_commands <= KHUI_MAX_ALERT_COMMANDS); -#endif - - for (i=0; i < adata->alert->n_alert_commands; i++) { - - if (adata->alert->alert_commands[i] == KHUI_PACTION_CLOSE && skip_close) { - SetRectEmpty(&adata->r_buttons[i]); - continue; - } - - caption[0] = L'\0'; - len = 0; - khm_get_action_caption(adata->alert->alert_commands[i], - caption, sizeof(caption)); - StringCchLength(caption, ARRAYLENGTH(caption), &len); - - if (!GetTextExtentPoint32(hdc, caption, (int) len, &s)) { - width = d->s_button.cx; - } else { - width = s.cx + d->s_margin.cx * 2; - } - - if (width < d->s_button.cx) - width = d->s_button.cx; - else if (width > (d->r_text.right - d->r_text.left)) - width = d->r_text.right - d->r_text.left; - - if (x + width > d->r_text.right) { - /* new line */ - x = d->r_text.left; - y += d->s_button.cy + d->s_pad.cy; - } - - SetRect(&adata->r_buttons[i], x, y, x + width, y + d->s_button.cy); - - x += width + d->s_margin.cx; - } - - y += d->s_button.cy + d->s_margin.cy; - } - - khui_alert_unlock(adata->alert); - - /* Now set the rect for the whole alert */ - SetRect(&adata->r_alert, 0, 0, d->cx_wnd, y); - -} - -static void -pick_title_for_alerter_window(alerter_wnd_data * d) { - alerter_alert_data * adata; - wchar_t caption[KHUI_MAXCCH_TITLE]; - khm_boolean common_caption = TRUE; - khui_alert_type ctype = KHUI_ALERTTYPE_NONE; - khm_boolean common_type = TRUE; - - /* - If all the alerts have the same title, then we use the common - title. - - - If all the alerts are of the same type, then we pick a title - that is suitable for the type. - - - All else fails, we use a default caption for the window. - */ - - caption[0] = L'\0'; - adata = QTOP(d); - while (adata && (common_caption || common_type)) { - - if (adata->alert) { - khui_alert_lock(adata->alert); - - if (common_caption) { - if (caption[0] == L'\0') { - if (adata->alert->title) - StringCbCopy(caption, sizeof(caption), adata->alert->title); - } else if (adata->alert->title && - wcscmp(caption, adata->alert->title)) { - common_caption = FALSE; - } - } - - if (common_type) { - if (ctype == KHUI_ALERTTYPE_NONE) - ctype = adata->alert->alert_type; - else if (ctype != adata->alert->alert_type) - common_type = FALSE; - } - - khui_alert_unlock(adata->alert); - } - - adata = QNEXT(adata); - } - - /* just in case someone changes d->caption to a pointer from an - array */ -#ifdef DEBUG - assert(sizeof(d->caption) > sizeof(wchar_t *)); -#endif - - if (common_caption && caption[0] != L'\0') { - StringCbCopy(d->caption, sizeof(d->caption), caption); - } else if (common_type && ctype != KHUI_ALERTTYPE_NONE) { - switch(ctype) { - case KHUI_ALERTTYPE_PLUGIN: - LoadString(khm_hInstance, IDS_ALERTTYPE_PLUGIN, - d->caption, ARRAYLENGTH(d->caption)); - break; - - case KHUI_ALERTTYPE_EXPIRE: - LoadString(khm_hInstance, IDS_ALERTTYPE_EXPIRE, - d->caption, ARRAYLENGTH(d->caption)); - break; - - case KHUI_ALERTTYPE_RENEWFAIL: - LoadString(khm_hInstance, IDS_ALERTTYPE_RENEWFAIL, - d->caption, ARRAYLENGTH(d->caption)); - break; - - case KHUI_ALERTTYPE_ACQUIREFAIL: - LoadString(khm_hInstance, IDS_ALERTTYPE_ACQUIREFAIL, - d->caption, ARRAYLENGTH(d->caption)); - break; - - case KHUI_ALERTTYPE_CHPW: - LoadString(khm_hInstance, IDS_ALERTTYPE_CHPW, - d->caption, ARRAYLENGTH(d->caption)); - break; - - default: - LoadString(khm_hInstance, IDS_ALERT_DEFAULT, - d->caption, ARRAYLENGTH(d->caption)); - } - } else { - LoadString(khm_hInstance, IDS_ALERT_DEFAULT, - d->caption, ARRAYLENGTH(d->caption)); - } - - SetWindowText(d->hwnd, d->caption); -} - -static void -estimate_alerter_wnd_sizes(alerter_wnd_data * d) { - HDC hdc; - HFONT hf_old; - int height = 0; - - alerter_alert_data * adata; - - pick_title_for_alerter_window(d); - - hdc = GetDC(d->hwnd); -#ifdef DEBUG - assert(hdc); -#endif - - if (d->hfont == NULL) - d->hfont = (HFONT) GetStockObject(DEFAULT_GUI_FONT); - -#ifdef DEBUG - assert(d->hfont); -#endif - - hf_old = SelectFont(hdc, d->hfont); - - adata = QTOP(d); - while(adata) { - layout_alert(hdc, d, adata); - - height += adata->r_alert.bottom; - - adata = QNEXT(adata); - } - - SelectFont(hdc, hf_old); - ReleaseDC(d->hwnd, hdc); - - d->s_alerts.cx = d->cx_wnd; - d->s_alerts.cy = height; -} - -static void -layout_command_buttons(alerter_wnd_data * d) { - - alerter_alert_data * adata; - HDWP hdefer; - int y; - - hdefer = BeginDeferWindowPos(d->n_cmd_buttons); - - y = 0; - adata = QTOP(d); - while (adata) { - RECT r; - int i; - - if (!adata->has_commands) - goto done; - - for (i=0; i < adata->n_cmd_buttons; i++) { - if (IsRectEmpty(&adata->r_buttons[i])) { - /* the button is no longer needed */ - if (adata->hwnd_buttons[i] != NULL) { - DestroyWindow(adata->hwnd_buttons[i]); - adata->hwnd_buttons[i] = NULL; - } - - continue; - } - - if (adata->hwnd_buttons[i] == NULL) { - continue; - } - - CopyRect(&r, &adata->r_buttons[i]); - OffsetRect(&r, 0, y - d->scroll_top); - - DeferWindowPos(hdefer, - adata->hwnd_buttons[i], NULL, - r.left, r.top, 0, 0, - SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOZORDER | - SWP_NOSIZE); - } - - done: - y += adata->r_alert.bottom; - adata = QNEXT(adata); - } - - EndDeferWindowPos(hdefer); -} - -static void -setup_alerter_window_controls(alerter_wnd_data * d) { - - RECT r_alerts; - RECT r_window; - RECT r_client; - RECT r_parent; - HWND hw_parent; - HWND hw_focus = NULL; - BOOL close_button = FALSE; - BOOL scrollbar = FALSE; - BOOL redraw_scollbar = FALSE; - - /* estimate_alerter_wnd_sizes() must be called before calling - this. */ -#ifdef DEBUG - assert(d->s_alerts.cy > 0); -#endif - - r_alerts.left = 0; - r_alerts.top = 0; - r_alerts.right = d->cx_wnd; - - if (d->s_alerts.cy > d->cy_max_wnd) { - - BOOL redraw = FALSE; - - r_alerts.right += GetSystemMetrics(SM_CXVSCROLL); - r_alerts.bottom = d->cy_max_wnd; - - CopyRect(&r_client, &r_alerts); - r_client.bottom += d->s_margin.cy + d->s_button.cy + d->s_pad.cy; - close_button = TRUE; - - if (d->scroll_top > d->s_alerts.cy - d->cy_max_wnd) - d->scroll_top = d->s_alerts.cy - d->cy_max_wnd; - - scrollbar = TRUE; - } else { - r_alerts.bottom = d->s_alerts.cy; - - CopyRect(&r_client, &r_alerts); - - if (d->n_alerts == 1) { - - if (!QTOP(d)->has_commands) { - r_client.bottom += d->s_margin.cy * 2 + d->s_button.cy; - close_button = TRUE; - } - - } else { - - r_client.bottom += d->s_margin.cy * 2 + d->s_button.cy; - close_button = TRUE; - } - - d->scroll_top = 0; - } - - if (d->hw_bin == NULL) { - d->hw_bin = CreateWindowEx(WS_EX_CONTROLPARENT, - MAKEINTATOM(atom_alert_bin), - L"Alert Container", - WS_CHILD | WS_CLIPCHILDREN | - WS_VISIBLE | - ((scrollbar)? WS_VSCROLL : 0), - r_alerts.left, r_alerts.top, - r_alerts.right - r_alerts.left, - r_alerts.bottom - r_alerts.top, - d->hwnd, - (HMENU) IDC_NTF_ALERTBIN, - khm_hInstance, - (LPVOID) d); - } else { - redraw_scollbar = TRUE; - SetWindowLongPtr(d->hw_bin, GWL_STYLE, - WS_CHILD | WS_CLIPCHILDREN | - WS_VISIBLE | - ((scrollbar)? WS_VSCROLL : 0)); - SetWindowPos(d->hw_bin, NULL, - r_alerts.left, r_alerts.top, - r_alerts.right - r_alerts.left, - r_alerts.bottom - r_alerts.top, - SWP_NOOWNERZORDER | SWP_NOZORDER | SWP_NOACTIVATE); - } - - if (scrollbar) { - SCROLLINFO si; - - ZeroMemory(&si, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_POS | SIF_RANGE; - si.nMin = 0; - si.nMax = d->s_alerts.cy; - si.nPage = d->cy_max_wnd; - si.nPos = d->scroll_top; - - SetScrollInfo(d->hw_bin, SB_VERT, &si, redraw_scollbar); - } - - /* create the action buttons */ - { - alerter_alert_data * adata; - int y; - int idx; - HWND last_window = HWND_TOP; - int n_buttons = 0; - - idx = 0; - y = - d->scroll_top; - adata = QTOP(d); - while(adata) { - if (adata->has_commands) { - int i; - wchar_t caption[KHUI_MAXCCH_SHORT_DESC]; - RECT r; - - if (adata->hwnd_marker) { - DestroyWindow(adata->hwnd_marker); - adata->hwnd_marker = NULL; - } - - khui_alert_lock(adata->alert); - - adata->n_cmd_buttons = adata->alert->n_alert_commands; - - for (i=0; i < adata->alert->n_alert_commands; i++) { - - n_buttons ++; - - if (IsRectEmpty(&adata->r_buttons[i])) { - /* this button is not necessary */ - if (adata->hwnd_buttons[i]) { - DestroyWindow(adata->hwnd_buttons[i]); - adata->hwnd_buttons[i] = NULL; - } - - continue; - } - - if (adata->hwnd_buttons[i] != NULL) { - /* already there */ - CopyRect(&r, &adata->r_buttons[i]); - OffsetRect(&r, 0, y); - - SetWindowPos(adata->hwnd_buttons[i], last_window, - r.left, r.top, - r.right - r.left, - r.bottom - r.top, - SWP_NOACTIVATE | SWP_NOOWNERZORDER | - SWP_SHOWWINDOW); - - last_window = adata->hwnd_buttons[i]; - - if (hw_focus == NULL) - hw_focus = adata->hwnd_buttons[i]; - - continue; - } - - khm_get_action_caption(adata->alert->alert_commands[i], - caption, sizeof(caption)); - - CopyRect(&r, &adata->r_buttons[i]); - OffsetRect(&r, 0, y); - - adata->hwnd_buttons[i] = - CreateWindowEx(0, - L"BUTTON", - caption, - WS_CHILD | WS_TABSTOP | BS_NOTIFY, - r.left, r.top, - r.right - r.left, - r.bottom - r.top, - d->hw_bin, - (HMENU) (INT_PTR) IDC_FROM_IDX(idx, i), - khm_hInstance, - NULL); -#ifdef DEBUG - assert(adata->hwnd_buttons[i]); -#endif - - if (d->hfont) { - SendMessage(adata->hwnd_buttons[i], WM_SETFONT, - (WPARAM) d->hfont, FALSE); - } - - SetWindowPos(adata->hwnd_buttons[i], last_window, - 0, 0, 0, 0, - SWP_NOACTIVATE | SWP_NOOWNERZORDER | - SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); - - last_window = adata->hwnd_buttons[i]; - - if (hw_focus == NULL) - hw_focus = adata->hwnd_buttons[i]; - } - - khui_alert_unlock(adata->alert); - } else { - int i; - - /* Destroy any buttons that belong to the alert. We - might have some left over, if there were command - belonging to the alert that were ignored.*/ - - for (i=0; i < adata->n_cmd_buttons; i++) { - if (adata->hwnd_buttons[i]) { - DestroyWindow(adata->hwnd_buttons[i]); - adata->hwnd_buttons[i] = NULL; - } - } - - adata->n_cmd_buttons = 0; - - if (adata->hwnd_marker == NULL) { - adata->hwnd_marker = - CreateWindowEx(0, - L"BUTTON", - L"Marker", - WS_CHILD | WS_TABSTOP | WS_VISIBLE | BS_NOTIFY, - -10, 0, - 5, 5, - d->hw_bin, - (HMENU) (INT_PTR) IDC_FROM_IDX(idx, -1), - khm_hInstance, - NULL); -#ifdef DEBUG - assert(adata->hwnd_marker); -#endif - } - - SetWindowPos(adata->hwnd_marker, last_window, - 0, 0, 0, 0, - SWP_NOACTIVATE | SWP_NOOWNERZORDER | - SWP_NOMOVE | SWP_NOSIZE); - - last_window = adata->hwnd_marker; - - if (scrollbar) { - EnableWindow(adata->hwnd_marker, TRUE); - if (hw_focus == NULL) - hw_focus = adata->hwnd_marker; - } else { - EnableWindow(adata->hwnd_marker, FALSE); - } - } - - y += adata->r_alert.bottom; - adata = QNEXT(adata); - idx++; - } - - d->n_cmd_buttons = n_buttons; - } - - if (close_button) { - if (d->hw_close == NULL) { - wchar_t caption[256]; - - khm_get_action_caption(KHUI_PACTION_CLOSE, caption, sizeof(caption)); - - d->hw_close = CreateWindowEx(0, - L"BUTTON", - caption, - WS_CHILD | BS_DEFPUSHBUTTON | WS_TABSTOP | BS_NOTIFY, - 0,0,100,100, - d->hwnd, - (HMENU) IDC_NTF_CLOSE, - khm_hInstance, - NULL); - -#ifdef DEBUG - assert(d->hw_close); - assert(d->hfont); -#endif - if (d->hfont) - SendMessage(d->hw_close, WM_SETFONT, (WPARAM) d->hfont, FALSE); - } - - { - int x,y,width,height; - - x = d->r_text.left; - y = r_client.bottom - (d->s_margin.cy + d->s_button.cy); - width = d->s_button.cx; - height = d->s_button.cy; - - SetWindowPos(d->hw_close, NULL, - x, y, width, height, - SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOZORDER | - SWP_SHOWWINDOW); - } - - if (hw_focus == NULL || d->n_cmd_buttons == 0) - hw_focus = d->hw_close; - - } else { - if (d->hw_close != NULL) { - DestroyWindow(d->hw_close); - d->hw_close = NULL; - } - } - - CopyRect(&r_window, &r_client); - AdjustWindowRectEx(&r_window, ALERT_WINDOW_STYLES, - FALSE, ALERT_WINDOW_EX_SYLES); - OffsetRect(&r_window, -r_window.left, -r_window.top); - - /* center the window above the parent window. */ - - hw_parent = GetWindow(d->hwnd, GW_OWNER); - GetWindowRect(hw_parent, &r_parent); - - { - int x,y; - - x = (r_parent.left + r_parent.right - (r_window.right - r_window.left)) / 2; - y = (r_parent.top + r_parent.bottom - (r_window.bottom - r_window.top)) / 2; - - SetWindowPos(d->hwnd, - HWND_TOP, - x, y, - r_window.right - r_window.left, - r_window.bottom - r_window.top, - SWP_SHOWWINDOW | SWP_NOOWNERZORDER); - } - - if (hw_focus != NULL) - PostMessage(d->hwnd, WM_NEXTDLGCTL, (WPARAM) hw_focus, MAKELPARAM(TRUE, 0)); -} - -static void -scroll_to_position(alerter_wnd_data * d, int new_pos, khm_boolean redraw_scrollbar) { - int delta; - SCROLLINFO si; - HWND hwnd = d->hw_bin; - - if (new_pos < 0) - new_pos = 0; - else if (new_pos > d->s_alerts.cy - d->cy_max_wnd) - new_pos = d->s_alerts.cy - d->cy_max_wnd; - - if (new_pos == d->scroll_top) - return; - - delta = d->scroll_top - new_pos; - - d->scroll_top -= delta; - - ScrollWindowEx(hwnd, 0, delta, - NULL, NULL, NULL, NULL, - SW_INVALIDATE | SW_ERASE); - - layout_command_buttons(d); - - ZeroMemory(&si, sizeof(si)); - - si.fMask = SIF_POS; - si.nPos = d->scroll_top; - - SetScrollInfo(hwnd, SB_VERT, &si, redraw_scrollbar); -} - -static void -select_alert(alerter_wnd_data * d, int alert) { - - int y; - RECT old_sel, new_sel; - alerter_alert_data * adata; - int idx; - - if (d->n_alerts == 1 || - alert < 0 || - alert > d->n_alerts || - d->c_alert == alert) - return; - - SetRectEmpty(&old_sel); - SetRectEmpty(&new_sel); - idx = 0; y = -d->scroll_top; - adata = QTOP(d); - while(adata && (idx <= d->c_alert || idx <= alert)) { - - if (idx == d->c_alert) { - CopyRect(&old_sel, &adata->r_alert); - OffsetRect(&old_sel, 0, y); - } - - if (idx == alert) { - CopyRect(&new_sel, &adata->r_alert); - OffsetRect(&new_sel, 0, y); - } - - y += adata->r_alert.bottom; - idx ++; - adata = QNEXT(adata); - } - - d->c_alert = alert; - if (!IsRectEmpty(&old_sel)) - InvalidateRect(d->hw_bin, &old_sel, TRUE); - if (!IsRectEmpty(&new_sel)) - InvalidateRect(d->hw_bin, &new_sel, TRUE); -} - -static void -ensure_command_is_visible(alerter_wnd_data * d, int id) { - int alert_idx; - int y = 0; - alerter_alert_data * adata; - int new_pos = 0; - - alert_idx = ALERT_FROM_IDC(id); - -#ifdef DEBUG - assert(alert_idx >= 0 && alert_idx < d->n_alerts); -#endif - if (alert_idx >= d->n_alerts || alert_idx < 0) - return; - - adata = QTOP(d); - while(adata && alert_idx > 0) { - y += adata->r_alert.bottom; - alert_idx--; - adata = QNEXT(adata); - } - -#ifdef DEBUG - assert(alert_idx == 0); - assert(adata); - assert(adata->alert); -#endif - if (adata == NULL || alert_idx != 0) - return; - - new_pos = d->scroll_top; - if (y < d->scroll_top) { - new_pos = y; - } else if (y + adata->r_alert.bottom > d->scroll_top + d->cy_max_wnd) { - new_pos = y + adata->r_alert.bottom - d->cy_max_wnd; - } - - if (new_pos != d->scroll_top) - scroll_to_position(d, new_pos, TRUE); - - select_alert(d, ALERT_FROM_IDC(id)); -} - -static void -handle_mouse_select(alerter_wnd_data * d, int mouse_x, int mouse_y) { - int y; - alerter_alert_data * adata; - - y = -d->scroll_top; - adata = QTOP(d); - while(adata) { - if (y <= mouse_y && (y + adata->r_alert.bottom) > mouse_y) { - HWND hw = NULL; - - if (adata->n_cmd_buttons > 0) - hw = adata->hwnd_buttons[0]; - else - hw = adata->hwnd_marker; - - if (hw && !IsWindowEnabled(hw)) - hw = GetNextDlgTabItem(d->hwnd, hw, FALSE); - - if (hw) - PostMessage(d->hwnd, WM_NEXTDLGCTL, (WPARAM) hw, MAKELPARAM(TRUE, 0)); - - return; - } - - y += adata->r_alert.bottom; - adata = QNEXT(adata); - } -} - -static void -process_command_button(alerter_wnd_data * d, int id) { - int alert_idx; - int cmd_idx; - khm_int32 flags = 0; - khm_int32 cmd = 0; - alerter_alert_data * adata; - int i; - - alert_idx = ALERT_FROM_IDC(id); - cmd_idx = BUTTON_FROM_IDC(id); - -#ifdef DEBUG - assert(alert_idx >= 0 && alert_idx < d->n_alerts); -#endif - if (alert_idx >= d->n_alerts || alert_idx < 0) - return; - - if (cmd_idx < 0) { - /* the user selected a marker button. Nothing to do. */ - return; - } - - adata = QTOP(d); - while(adata && alert_idx > 0) { - alert_idx--; - adata = QNEXT(adata); - } - -#ifdef DEBUG - assert(alert_idx == 0); - assert(adata); - assert(adata->alert); -#endif - if (adata == NULL || alert_idx != 0) - return; - - khui_alert_lock(adata->alert); -#ifdef DEBUG - assert(cmd_idx >= 0 && cmd_idx < adata->alert->n_alert_commands); -#endif - - if (cmd_idx >= 0 && cmd_idx < adata->alert->n_alert_commands) { - cmd = adata->alert->alert_commands[cmd_idx]; - } - - flags = adata->alert->flags; - - adata->alert->response = cmd; - - khui_alert_unlock(adata->alert); - - /* if we were supposed to dispatch the command, do so */ - if (cmd != 0 && - cmd != KHUI_PACTION_CLOSE && - (flags & KHUI_ALERT_FLAG_DISPATCH_CMD)) { - PostMessage(khm_hwnd_main, WM_COMMAND, - MAKEWPARAM(cmd, 0), 0); - } - - /* if this was the only alert in the alert group and its close - button was clicked, we close the alert window. Otherwise, the - alert window creates its own close button that closes the - window. */ - if (d->n_alerts == 1) { - PostMessage(d->hwnd, WM_CLOSE, 0, 0); - } - - /* While we are at it, we should disable the buttons for this - alert since we have already dispatched the command for it. */ - if (cmd != 0) { - HWND hw_focus = GetFocus(); - khm_boolean focus_trapped = FALSE; - - for (i=0; i < adata->n_cmd_buttons; i++) { - if (adata->hwnd_buttons[i]) { - if (hw_focus == adata->hwnd_buttons[i]) - focus_trapped = TRUE; - - EnableWindow(adata->hwnd_buttons[i], FALSE); - } - } - - if (focus_trapped) { - hw_focus = GetNextDlgTabItem(d->hwnd, hw_focus, FALSE); - if (hw_focus) - PostMessage(d->hwnd, WM_NEXTDLGCTL, (WPARAM) hw_focus, MAKELPARAM(TRUE,0)); - } - } -} - -static void -destroy_alerter_wnd_data(alerter_wnd_data * d) { - alerter_alert_data * adata; - - LDELETE(&khui_alert_windows, d); - - QGET(d, &adata); - while(adata) { - - if (adata->alert) { - - khui_alert_lock(adata->alert); - - adata->alert->displayed = FALSE; - - khui_alert_unlock(adata->alert); - - khui_alert_release(adata->alert); - adata->alert = NULL; - } - - PFREE(adata); - - QGET(d, &adata); - } - - PFREE(d); -} - -/* both ref and to_add must be locked and held */ -static khm_boolean -alert_can_consolidate(khui_alert * ref, - khui_alert * to_add, - alert_list * alist) { - - /* first check if we can add anything */ - if (alist->n_alerts == ARRAYLENGTH(alist->alerts)) - return FALSE; - -#ifdef DEBUG - assert(to_add != NULL); -#endif - - if (ref == NULL) { - /* we are testing whether to_add should be added to the alist - on its own. */ - if ((to_add->flags & KHUI_ALERT_FLAG_DISPLAY_BALLOON) && - !(to_add->flags & KHUI_ALERT_FLAG_DISPLAY_WINDOW)) { - /* already displayed */ - return FALSE; - } - - if ((to_add->flags & (KHUI_ALERT_FLAG_REQUEST_BALLOON | - KHUI_ALERT_FLAG_REQUEST_WINDOW)) == KHUI_ALERT_FLAG_REQUEST_BALLOON) { - /* needs to be shown in a balloon */ - return FALSE; - } - - return TRUE; - } - - /* if the ref or to_add are marked for modal, then we can't - consolidate them */ - if ((ref->flags & KHUI_ALERT_FLAG_MODAL) || - (to_add->flags & KHUI_ALERT_FLAG_MODAL)) - return FALSE; - - /* also, if either of them have requested to be exclusively shown - in a balloon, then we can't consolidate them. */ - if (((ref->flags & (KHUI_ALERT_FLAG_REQUEST_BALLOON | - KHUI_ALERT_FLAG_REQUEST_WINDOW)) == KHUI_ALERT_FLAG_REQUEST_BALLOON) - - || - - ((to_add->flags & (KHUI_ALERT_FLAG_REQUEST_BALLOON | - KHUI_ALERT_FLAG_REQUEST_WINDOW)) == KHUI_ALERT_FLAG_REQUEST_BALLOON)) - return FALSE; - - /* for now, all we check if whether they are of the same type. */ - if (ref->alert_type != KHUI_ALERTTYPE_NONE && - ref->alert_type == to_add->alert_type) - return TRUE; - else - return FALSE; -} - -/* both a1 and a2 must be locked */ -static khm_boolean -alert_is_equal(khui_alert * a1, khui_alert * a2) { - khm_int32 i; - - if ((a1->severity != a2->severity) || - (a1->n_alert_commands != a2->n_alert_commands) || - (a1->title && (!a2->title || wcscmp(a1->title, a2->title))) || - (!a1->title && a2->title) || - (a1->message && (!a2->message || wcscmp(a1->message, a2->message))) || - (!a1->message && a2->message) || - (a1->suggestion && (!a2->suggestion || wcscmp(a1->suggestion, a2->suggestion))) || - (!a1->suggestion && a2->suggestion)) { - - return FALSE; - - } - - for (i=0; i < a1->n_alert_commands; i++) { - if (a1->alert_commands[i] != a2->alert_commands[i]) - return FALSE; - } - - return TRUE; -} - -/* the return value is the number of alerts added to alist */ -static khm_int32 -alert_consolidate(alert_list * alist, - khui_alert * alert, - khm_boolean add_from_queue) { - - khui_alert * listtop; - int queue_size = 0; - int i; - khm_int32 n_added = 0; - -#ifdef DEBUG - assert(alist); -#endif - - if (alist->n_alerts == ARRAYLENGTH(alist->alerts)) { - /* can't add anything */ - - return 0; - } - - /* if the list is empty, we just add one alert */ - if (alist->n_alerts == 0) { - - if (alert) { - khui_alert_lock(alert); - if (alert_can_consolidate(NULL, alert, alist)) { - alert_list_add_alert(alist, alert); - n_added ++; - alert = NULL; - } - khui_alert_unlock(alert); - } - - if (n_added == 0 && add_from_queue) { - khui_alert * q; - int i; - - queue_size = alert_queue_get_size(); - for (i=0; i < queue_size && n_added == 0; i++) { - q = alert_queue_get_alert_by_pos(i); - if (q) { - khui_alert_lock(q); - if (alert_can_consolidate(NULL, q, alist)) { - alert_list_add_alert(alist, q); - n_added++; - alert_queue_delete_alert(q); - } - khui_alert_unlock(q); - khui_alert_release(q); - } - } - } - - if (n_added == 0) { - /* nothing to add */ - return 0; - } - } - - /* at this point, the alert list is not empty */ -#ifdef DEBUG - assert(alist->n_alerts != 0); - assert(alist->alerts[0]); -#endif - - listtop = alist->alerts[0]; - khui_alert_hold(listtop); - khui_alert_lock(listtop); - - queue_size = alert_queue_get_size(); - - if (alert) { - khui_alert_lock(alert); - if (alert_can_consolidate(listtop, alert, alist)) { - alert_list_add_alert(alist, alert); - n_added ++; - } - khui_alert_unlock(alert); - } - - if (add_from_queue) { - for (i=0; i < queue_size; i++) { - khui_alert * a; - - a = alert_queue_get_alert_by_pos(i); - if (a == NULL) - continue; - - khui_alert_lock(a); - if (alert_can_consolidate(listtop, a, alist)) { - alert_queue_delete_alert(a); - alert_list_add_alert(alist, a); - n_added ++; - - queue_size--; - i--; -#ifdef DEBUG - assert(alert_queue_get_size() == queue_size); -#endif - } - khui_alert_unlock(a); - khui_alert_release(a); - } - } - - khui_alert_unlock(listtop); - khui_alert_release(listtop); - - return n_added; -} - -static khm_int32 -alert_check_consolidate_window(alerter_wnd_data * d, khui_alert * a) { - alert_list alist; - alerter_alert_data * adata; - int n_added; - - alert_list_init(&alist); - - adata = QTOP(d); - while(adata) { - -#ifdef DEBUG - assert(adata->alert); -#endif - alert_list_add_alert(&alist, adata->alert); - - adata = QNEXT(adata); - } - - n_added = alert_consolidate(&alist, a, FALSE); - - alert_list_destroy(&alist); - - return n_added; -} - -static khm_int32 -alert_show_minimized(khui_alert * a) { - wchar_t tbuf[64]; /* corresponds to NOTIFYICONDATA::szInfoTitle[] */ - wchar_t mbuf[256]; /* corresponds to NOTIFYICONDATA::szInfo[] */ - -#ifdef DEBUG - assert(a); -#endif - if (a == NULL) - return KHM_ERROR_INVALID_PARAM; - - khui_alert_lock(a); - - if (a->message == NULL) - goto done; - - if (a->title == NULL) { - LoadString(khm_hInstance, IDS_ALERT_DEFAULT, - tbuf, ARRAYLENGTH(tbuf)); - } else { - StringCbCopy(tbuf, sizeof(tbuf), a->title); - } - - if (FAILED(StringCbCopy(mbuf, sizeof(mbuf), a->message)) || - (!(a->flags & KHUI_ALERT_FLAG_DEFACTION) && - (a->n_alert_commands > 0 || - a->suggestion || - (a->flags & KHUI_ALERT_FLAG_VALID_ERROR)))) { - /* if mbuf wasn't big enough, this should have copied a - truncated version of it */ - size_t cch_m, cch_p; - wchar_t postfix[256]; - - cch_p = LoadString(khm_hInstance, IDS_ALERT_MOREINFO, postfix, - ARRAYLENGTH(postfix)); - cch_p++; /* account for NULL */ - - StringCchLength(mbuf, ARRAYLENGTH(mbuf), &cch_m); - cch_m = min(cch_m, ARRAYLENGTH(mbuf) - cch_p); - - StringCchCopy(mbuf + cch_m, ARRAYLENGTH(mbuf) - cch_m, - postfix); - - a->flags |= KHUI_ALERT_FLAG_REQUEST_WINDOW; - } - - a->flags |= KHUI_ALERT_FLAG_DISPLAY_BALLOON; - -#ifdef DEBUG - assert(balloon_alert == NULL); -#endif - - if (balloon_alert) { - khui_alert_lock(balloon_alert); - balloon_alert->displayed = FALSE; - khui_alert_unlock(balloon_alert); - khui_alert_release(balloon_alert); - balloon_alert = NULL; - } - - balloon_alert = a; - khui_alert_hold(a); - - a->displayed = TRUE; - - khm_notify_icon_balloon(a->severity, - tbuf, - mbuf, - NTF_TIMEOUT); - - done: - khui_alert_unlock(a); - - return KHM_ERROR_SUCCESS; -} - -static khm_int32 -alert_show_normal(khui_alert * a) { - wchar_t buf[256]; - wchar_t * title; - alert_list alist; - - khui_alert_lock(a); - - if(a->title == NULL) { - LoadString(khm_hInstance, IDS_ALERT_DEFAULT, - buf, ARRAYLENGTH(buf)); - title = buf; - } else - title = a->title; - - khui_alert_unlock(a); - - alert_list_init(&alist); - alert_list_set_title(&alist, title); - alert_list_add_alert(&alist, a); - - alert_show_list(&alist); - - alert_list_destroy(&alist); - - return KHM_ERROR_SUCCESS; -} - -static khm_int32 -alert_show_list(alert_list * alist) { - HWND hwa; - - /* we don't need to keep track of the window handle - because the window procedure adds it to the dialog - list automatically */ - - hwa = - CreateWindowEx(ALERT_WINDOW_EX_SYLES, - MAKEINTATOM(atom_alerter), - alist->title, - ALERT_WINDOW_STYLES, - 0, 0, 300, 300, // bogus values - khm_hwnd_main, - (HMENU) NULL, - khm_hInstance, - (LPVOID) alist); - - ShowWindow(hwa, SW_SHOW); - - return (hwa != NULL); -} - -static khm_int32 -alert_show(khui_alert * a) { - khm_boolean show_normal = FALSE; - khm_boolean show_mini = FALSE; - - khui_alert_lock(a); - - /* is there an alert already? If so, we just enqueue the message - and let it sit. */ - if (ALERT_DISPLAYED() && - !(a->flags & KHUI_ALERT_FLAG_MODAL)) { - khm_int32 rv; - alerter_wnd_data * wdata; - - khui_alert_unlock(a); - - /* if there are any alerter windows displayed, check if this - alert can be consolidated with any of them. If so, we - should consolidate it. Otherwise, just enqueue it. */ - for(wdata = khui_alert_windows; - wdata; - wdata = LNEXT(wdata)) { - if (alert_check_consolidate_window(wdata, a)) { - - add_alert_to_wnd_data(wdata, a); - estimate_alerter_wnd_sizes(wdata); - setup_alerter_window_controls(wdata); - - return KHM_ERROR_SUCCESS; - - } - } - - rv = alert_enqueue(a); - - if (KHM_SUCCEEDED(rv)) - return KHM_ERROR_HELD; - else - return rv; - } - - if((a->flags & KHUI_ALERT_FLAG_DISPLAY_WINDOW) || - ((a->flags & KHUI_ALERT_FLAG_DISPLAY_BALLOON) && - !(a->flags & KHUI_ALERT_FLAG_REQUEST_WINDOW))) { - - /* The alert has already been displayed. */ - - show_normal = FALSE; - show_mini = FALSE; - - } else { - - if(a->err_context != NULL || - a->err_event != NULL) { - a->flags |= KHUI_ALERT_FLAG_VALID_ERROR; - } - - /* depending on the state of the main window, we - need to either show a window or a balloon */ - if ((a->flags & KHUI_ALERT_FLAG_MODAL) || - (khm_is_main_window_active() && - !(a->flags & KHUI_ALERT_FLAG_REQUEST_BALLOON)) || - (a->flags & KHUI_ALERT_FLAG_REQUEST_WINDOW)) { - - show_normal = TRUE; - - } else { - - show_mini = TRUE; - - } - } - - khui_alert_unlock(a); - - if (show_normal) - return alert_show_normal(a); - else if (show_mini) - return alert_show_minimized(a); - else - return KHM_ERROR_SUCCESS; -} - -static void -show_queued_alerts(void) { - - if (!ALERT_DISPLAYED()) { - - /* show next consolidated batch */ - alert_list alist; - int n; - - alert_list_init(&alist); - n = alert_consolidate(&alist, NULL, TRUE); - - if (n) { - if (n == 1) { - khui_alert_lock(alist.alerts[0]); - - if (alist.alerts[0]->title) { - alert_list_set_title(&alist, alist.alerts[0]->title); - } else { - wchar_t title[KHUI_MAXCCH_TITLE]; - LoadString(khm_hInstance, IDS_ALERT_DEFAULT, - title, ARRAYLENGTH(title)); - alert_list_set_title(&alist, title); - } - - khui_alert_unlock(alist.alerts[0]); - } else { - wchar_t title[KHUI_MAXCCH_TITLE]; - LoadString(khm_hInstance, IDS_ALERT_DEFAULT, - title, ARRAYLENGTH(title)); - alert_list_set_title(&alist, title); - } - - alert_show_list(&alist); - } - - alert_list_destroy(&alist); - - if (n == 0) { - khui_alert * a; - - /* no alerts were shown above. This maybe because none of - the alerts were consolidatable or they were requested - to be shown in a balloon. In this case, we just take - the first alert from the queue and show it manually. */ - - a = alert_queue_get_alert(); - if (a) { - alert_show(a); - khui_alert_release(a); - } - } - - check_for_queued_alerts(); - } -} - - -static void -check_for_queued_alerts(void) { - if (!is_alert_queue_empty()) { - khui_alert * a; - - a = alert_queue_peek(); - - khui_alert_lock(a); - - if (a->title) { - HICON hi; - int res; - - if (a->severity == KHERR_ERROR) - res = OIC_ERROR; - else if (a->severity == KHERR_WARNING) - res = OIC_WARNING; - else - res = OIC_INFORMATION; - - hi = LoadImage(0, MAKEINTRESOURCE(res), - IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), - LR_SHARED); - - khm_statusbar_set_part(KHUI_SBPART_NOTICE, - hi, - a->title); - } else { - khm_statusbar_set_part(KHUI_SBPART_NOTICE, - NULL, NULL); -#ifdef DEBUG - DebugBreak(); -#endif - } - - khui_alert_unlock(a); - khui_alert_release(a); - - } else { - khm_statusbar_set_part(KHUI_SBPART_NOTICE, - NULL, NULL); - } -} - -static khm_int32 -alert_enqueue(khui_alert * a) { - if (is_alert_queue_full()) - return KHM_ERROR_NO_RESOURCES; - - alert_queue_put_alert(a); - check_for_queued_alerts(); - - return KHM_ERROR_SUCCESS; -} - -/* the alerter window is actually a dialog */ -static LRESULT CALLBACK -alerter_wnd_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) -{ - switch(uMsg) { - case WM_CREATE: - { - LPCREATESTRUCT lpcs; - alert_list * alist; - alerter_wnd_data * d; - - lpcs = (LPCREATESTRUCT) lParam; - alist = (alert_list *) lpcs->lpCreateParams; - - d = create_alerter_wnd_data(hwnd, alist); - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, NTF_PARAM, (LONG_PTR) d); -#pragma warning(pop) - - khm_add_dialog(hwnd); - khm_enter_modal(hwnd); - - estimate_alerter_wnd_sizes(d); - setup_alerter_window_controls(d); - - if (d->hw_close) { - SetFocus(d->hw_close); - } - - return TRUE; - } - break; /* not reached */ - - case WM_DESTROY: - { - alerter_wnd_data * d; - - /* khm_leave_modal() could be here, but instead it is in - the WM_COMMAND handler. This is because the modal loop - has to be exited before DestroyWindow() is issued. */ - //khm_leave_modal(); - khm_del_dialog(hwnd); - - d = (alerter_wnd_data *)(LONG_PTR) - GetWindowLongPtr(hwnd, NTF_PARAM); - - if (d) { - destroy_alerter_wnd_data(d); - SetWindowLongPtr(hwnd, NTF_PARAM, 0); - } - - return TRUE; - } - break; - - case WM_COMMAND: - { - alerter_wnd_data * d; - - d = (alerter_wnd_data *)(LONG_PTR) - GetWindowLongPtr(hwnd, NTF_PARAM); - - if(HIWORD(wParam) == BN_CLICKED) { - if (LOWORD(wParam) == IDC_NTF_CLOSE || - LOWORD(wParam) == KHUI_PACTION_NEXT) { - - khm_leave_modal(); - - DestroyWindow(hwnd); - - return 0; - } - } - } - break; - - case WM_CLOSE: - { - khm_leave_modal(); - - DestroyWindow(hwnd); - - return 0; - } - } - - /* Since this is a custom built dialog, we use DefDlgProc instead - of DefWindowProc. */ - return DefDlgProc(hwnd, uMsg, wParam, lParam); -} - -static LRESULT CALLBACK -alert_bin_wnd_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) -{ - BOOL in_printclient = FALSE; - - switch(uMsg) { - case WM_CREATE: - { - LPCREATESTRUCT lpcs; - alerter_wnd_data * d; - - lpcs = (LPCREATESTRUCT) lParam; - d = (alerter_wnd_data *) lpcs->lpCreateParams; - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR) d); -#pragma warning(pop) - } - return 0; - - case WM_ERASEBKGND: - /* we erase the background when we are drawing the alerts - anyway. */ - return 0; - - case WM_PRINTCLIENT: - in_printclient = TRUE; - /* fallthrough */ - case WM_PAINT: - { - HDC hdc; - PAINTSTRUCT ps; - RECT r; - HFONT hf_old; - int y; - alerter_wnd_data * d; - alerter_alert_data * adata; - size_t len; - int idx; - - d = (alerter_wnd_data *) (LONG_PTR) GetWindowLongPtr(hwnd, GWLP_USERDATA); -#ifdef DEBUG - assert(d); -#endif - if (d == NULL) - break; - - if (in_printclient) { - hdc = (HDC) wParam; - ZeroMemory(&ps, sizeof(ps)); - } else { - hdc = BeginPaint(hwnd, &ps); - } - -#ifdef DEBUG - assert(hdc); - assert(d->hfont); -#endif - -#ifdef ALERT_STATIC_BACKGROUND - if (in_printclient || ps.fErase) { - HBRUSH hb_background; - - hb_background = GetSysColorBrush(COLOR_BTNFACE); - - GetClientRect(hwnd, &r); - FillRect(hdc, &r, hb_background); - } -#endif - - SetBkMode(hdc, TRANSPARENT); - - hf_old = SelectFont(hdc, d->hfont); - - y = -d->scroll_top; - idx = 0; - /* go through the alerts and display them */ - adata = QTOP(d); - while(adata) { - khui_alert * a; - -#ifndef ALERT_STATIC_BACKGROUND -#define MIX_C(v1, v2, p) ((COLOR16)(((int)v1) * p + (((int) v2) * (256 - p)))) -#define ALPHA 50 - if (in_printclient || ps.fErase) { - TRIVERTEX v[2]; - GRADIENT_RECT gr; - COLORREF clr; - COLORREF clr2; - - CopyRect(&r, &adata->r_alert); - OffsetRect(&r, 0, y); - - v[0].x = r.left; - v[0].y = r.top; - v[0].Alpha = 0; - - v[1].x = r.right; - v[1].y = r.bottom; - v[1].Alpha = 0; - - if (idx == d->c_alert) { - clr = GetSysColor(COLOR_HOTLIGHT); - - clr2 = GetSysColor(COLOR_BTNHIGHLIGHT); - v[0].Red = MIX_C(GetRValue(clr), GetRValue(clr2), ALPHA); - v[0].Green = MIX_C(GetGValue(clr), GetGValue(clr2), ALPHA); - v[0].Blue = MIX_C(GetBValue(clr), GetBValue(clr2), ALPHA); - - clr2 = GetSysColor(COLOR_BTNFACE); - v[1].Red = MIX_C(GetRValue(clr), GetRValue(clr2), ALPHA); - v[1].Green = MIX_C(GetGValue(clr), GetGValue(clr2), ALPHA); - v[1].Blue = MIX_C(GetBValue(clr), GetBValue(clr2), ALPHA); - } else { - clr = GetSysColor(COLOR_BTNHIGHLIGHT); - v[0].Red = (COLOR16) ((int)GetRValue(clr)) << 8; - v[0].Green = (COLOR16) ((int)GetGValue(clr)) << 8; - v[0].Blue = (COLOR16) ((int)GetBValue(clr)) << 8; - - clr = GetSysColor(COLOR_BTNFACE); - v[1].Red = (COLOR16) ((int)GetRValue(clr)) << 8; - v[1].Green = (COLOR16) ((int)GetGValue(clr)) << 8; - v[1].Blue = (COLOR16) ((int)GetBValue(clr)) << 8; - } - - gr.UpperLeft = 0; - gr.LowerRight = 1; - GradientFill(hdc, v, 2, &gr, 1, GRADIENT_FILL_RECT_V); - } -#undef ALPHA -#undef MIX_C -#endif - - a = adata->alert; -#ifdef DEBUG - assert(a != NULL); -#endif - khui_alert_lock(a); - - if (!IsRectEmpty(&adata->r_title)) { - - CopyRect(&r, &adata->r_title); - OffsetRect(&r, 0, y); - - StringCchLength(a->title, KHUI_MAXCCH_TITLE, &len); - - DrawEdge(hdc, &r, EDGE_RAISED, BF_RECT | BF_MIDDLE); - - InflateRect(&r, -d->s_pad.cx, -d->s_pad.cy); - - DrawText(hdc, a->title, (int) len, &r, - DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS); - } - - { - HICON hicon; - int iid; - - CopyRect(&r, &adata->r_icon); - OffsetRect(&r, 0, y); - - if(a->severity == KHERR_ERROR) - iid = OIC_HAND; - else if(a->severity == KHERR_WARNING) - iid = OIC_BANG; - else - iid = OIC_NOTE; - - hicon = (HICON) LoadImage(NULL, - MAKEINTRESOURCE(iid), - IMAGE_ICON, - GetSystemMetrics(SM_CXICON), - GetSystemMetrics(SM_CYICON), - LR_SHARED); - - DrawIcon(hdc, r.left, r.top, hicon); - } - - if (a->message) { - - CopyRect(&r, &adata->r_message); - OffsetRect(&r, 0, y); - - StringCchLength(a->message, KHUI_MAXCCH_MESSAGE, &len); - - DrawText(hdc, a->message, (int) len, &r, - DT_WORDBREAK); - } - - if (a->suggestion) { - HICON hicon; - SIZE sz; - - CopyRect(&r, &adata->r_suggestion); - OffsetRect(&r, 0, y); - - DrawEdge(hdc, &r, EDGE_SUNKEN, BF_RECT | BF_MIDDLE); - - InflateRect(&r, -d->s_pad.cx, -d->s_pad.cy); - - sz.cx = GetSystemMetrics(SM_CXSMICON); - sz.cy = GetSystemMetrics(SM_CYSMICON); - - hicon = (HICON) LoadImage(NULL, - MAKEINTRESOURCE(OIC_NOTE), - IMAGE_ICON, - sz.cx, - sz.cy, - LR_SHARED); - - DrawIconEx(hdc, r.left, r.top, hicon, sz.cx, sz.cy, 0, NULL, - DI_NORMAL); - - r.left += d->s_pad.cx + GetSystemMetrics(SM_CXSMICON); - - StringCchLength(a->suggestion, KHUI_MAXCCH_SUGGESTION, &len); - - DrawText(hdc, a->suggestion, (int) len, &r, - DT_WORDBREAK); - } - khui_alert_unlock(a); - - y += adata->r_alert.bottom; - idx++; - - adata = QNEXT(adata); - } - - SelectFont(hdc, hf_old); - - if (!in_printclient) { - EndPaint(hwnd, &ps); - } - } - return 0; - - case WM_VSCROLL: - { - alerter_wnd_data * d; - int new_pos = 0; - SCROLLINFO si; - - d = (alerter_wnd_data *) (LONG_PTR) GetWindowLongPtr(hwnd, GWLP_USERDATA); -#ifdef DEBUG - assert(d); -#endif - if (d == NULL) - break; /* we can't handle the message */ - - ZeroMemory(&si, sizeof(si)); - - switch(LOWORD(wParam)) { - case SB_BOTTOM: - new_pos = d->s_alerts.cy - d->cy_max_wnd; - break; - - case SB_LINEDOWN: - new_pos = d->scroll_top + SCROLL_LINE_SIZE(d); - break; - - case SB_LINEUP: - new_pos = d->scroll_top - SCROLL_LINE_SIZE(d); - break; - - case SB_PAGEDOWN: - new_pos = d->scroll_top + d->cy_max_wnd; - break; - - case SB_PAGEUP: - new_pos = d->scroll_top - d->cy_max_wnd; - break; - - case SB_THUMBPOSITION: - case SB_THUMBTRACK: - si.fMask = SIF_TRACKPOS; - GetScrollInfo(hwnd, SB_VERT, &si); - new_pos = si.nTrackPos; - break; - - case SB_TOP: - new_pos = 0; - break; - - case SB_ENDSCROLL: - si.fMask = SIF_POS; - si.nPos = d->scroll_top; - SetScrollInfo(hwnd, SB_VERT, &si, TRUE); - return 0; - - default: - return 0; - } - - scroll_to_position(d, new_pos, FALSE); - } - return 0; - - case WM_COMMAND: - { - alerter_wnd_data * d; - - d = (alerter_wnd_data *) (LONG_PTR) GetWindowLongPtr(hwnd, GWLP_USERDATA); -#ifdef DEBUG - assert(d); -#endif - if (d == NULL) - break; - - if (HIWORD(wParam) == BN_CLICKED) { - process_command_button(d, LOWORD(wParam)); - return 0; - } else if (HIWORD(wParam) == BN_SETFOCUS) { - ensure_command_is_visible(d, LOWORD(wParam)); - return 0; - } - } - break; - - case WM_LBUTTONUP: - { - alerter_wnd_data * d; - int x,y; - - d = (alerter_wnd_data *) (LONG_PTR) GetWindowLongPtr(hwnd, GWLP_USERDATA); -#ifdef DEBUG - assert(d); -#endif - if (d == NULL) - break; - - x = GET_X_LPARAM(lParam); - y = GET_Y_LPARAM(lParam); - - handle_mouse_select(d, x, y); - } - break; - - case WM_SIZE: - { - InvalidateRect(hwnd, NULL, TRUE); - } - break; - - case WM_DESTROY: - { - /* nothing needs to be done here */ - SetWindowLongPtr(hwnd, GWLP_USERDATA, 0); - } - return 0; - } - - return DefWindowProc(hwnd, uMsg, wParam, lParam); -} - -ATOM khm_register_alerter_wnd_class(void) -{ - WNDCLASSEX wcx; - - ZeroMemory(&wcx, sizeof(wcx)); - - wcx.cbSize = sizeof(wcx); - wcx.style = - CS_OWNDC | -#if(_WIN32_WINNT >= 0x0501) - ((IS_COMMCTL6())? CS_DROPSHADOW: 0) | -#endif - 0; - wcx.lpfnWndProc = alerter_wnd_proc; - wcx.cbClsExtra = 0; - wcx.cbWndExtra = DLGWINDOWEXTRA + sizeof(LONG_PTR); - wcx.hInstance = khm_hInstance; - wcx.hIcon = LoadIcon(khm_hInstance, MAKEINTRESOURCE(IDI_MAIN_APP)); - wcx.hCursor = LoadCursor(NULL, IDC_ARROW); - wcx.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); - wcx.lpszMenuName = NULL; - wcx.lpszClassName = KHUI_ALERTER_CLASS; - wcx.hIconSm = NULL; - - atom_alerter = RegisterClassEx(&wcx); - - return atom_alerter; -} - -ATOM khm_register_alert_bin_wnd_class(void) -{ - WNDCLASSEX wcx; - - ZeroMemory(&wcx, sizeof(wcx)); - - wcx.cbSize = sizeof(wcx); - wcx.style = CS_OWNDC; - - wcx.lpfnWndProc = alert_bin_wnd_proc; - wcx.cbClsExtra = 0; - wcx.cbWndExtra = sizeof(LONG_PTR); - wcx.hInstance = khm_hInstance; - wcx.hIcon = NULL; - wcx.hCursor = LoadCursor(NULL, IDC_ARROW); - wcx.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); - wcx.lpszMenuName = NULL; - wcx.lpszClassName = KHUI_ALERTBIN_CLASS; - wcx.hIconSm = NULL; - - atom_alert_bin = RegisterClassEx(&wcx); - - return atom_alert_bin; -} - -/********************************************************************** - Notification Icon -***********************************************************************/ - -#define KHUI_NOTIFY_ICON_ID 0 - -void khm_notify_icon_add(void) { - NOTIFYICONDATA ni; - wchar_t buf[256]; - - ZeroMemory(&ni, sizeof(ni)); - - ni.cbSize = sizeof(ni); - ni.hWnd = hwnd_notifier; - ni.uID = KHUI_NOTIFY_ICON_ID; - ni.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; - ni.hIcon = LoadIcon(khm_hInstance, MAKEINTRESOURCE(iid_normal)); - ni.uCallbackMessage = KHUI_WM_NOTIFIER; - LoadString(khm_hInstance, IDS_NOTIFY_PREFIX, buf, ARRAYLENGTH(buf)); - StringCbCopy(tip_normal, sizeof(tip_normal), buf); - LoadString(khm_hInstance, IDS_NOTIFY_READY, buf, ARRAYLENGTH(buf)); - StringCbCat(tip_normal, sizeof(tip_normal), buf); - - StringCbCopy(ni.szTip, sizeof(ni.szTip), tip_normal); - - Shell_NotifyIcon(NIM_ADD, &ni); - - DestroyIcon(ni.hIcon); - - ni.cbSize = sizeof(ni); - ni.uVersion = NOTIFYICON_VERSION; - Shell_NotifyIcon(NIM_SETVERSION, &ni); -} - -void -khm_notify_icon_balloon(khm_int32 severity, - wchar_t * title, - wchar_t * msg, - khm_int32 timeout) { - NOTIFYICONDATA ni; - int iid; - - if (!msg || !title) - return; - - ZeroMemory(&ni, sizeof(ni)); - ni.cbSize = sizeof(ni); - - if (severity == KHERR_INFO) { - ni.dwInfoFlags = NIIF_INFO; - iid = IDI_NOTIFY_INFO; - } else if (severity == KHERR_WARNING) { - ni.dwInfoFlags = NIIF_WARNING; - iid = IDI_NOTIFY_WARN; - } else if (severity == KHERR_ERROR) { - ni.dwInfoFlags = NIIF_ERROR; - iid = IDI_NOTIFY_ERROR; - } else { - ni.dwInfoFlags = NIIF_NONE; - iid = iid_normal; - } - - ni.hWnd = hwnd_notifier; - ni.uID = KHUI_NOTIFY_ICON_ID; - ni.uFlags = NIF_INFO | NIF_ICON; - ni.hIcon = LoadIcon(khm_hInstance, MAKEINTRESOURCE(iid)); - - if (FAILED(StringCbCopy(ni.szInfo, sizeof(ni.szInfo), msg))) { - /* too long? */ - StringCchCopyN(ni.szInfo, ARRAYLENGTH(ni.szInfo), - msg, - ARRAYLENGTH(ni.szInfo) - ARRAYLENGTH(ELLIPSIS)); - StringCchCat(ni.szInfo, ARRAYLENGTH(ni.szInfo), - ELLIPSIS); - } - - if (FAILED(StringCbCopy(ni.szInfoTitle, sizeof(ni.szInfoTitle), - title))) { - StringCchCopyN(ni.szInfoTitle, ARRAYLENGTH(ni.szInfoTitle), - title, - ARRAYLENGTH(ni.szInfoTitle) - ARRAYLENGTH(ELLIPSIS)); - StringCchCat(ni.szInfoTitle, ARRAYLENGTH(ni.szInfoTitle), - ELLIPSIS); - } - - ni.uTimeout = timeout; - - Shell_NotifyIcon(NIM_MODIFY, &ni); - - DestroyIcon(ni.hIcon); -} - -void khm_notify_icon_expstate(enum khm_notif_expstate expseverity) { - int new_iid; - - if (expseverity == KHM_NOTIF_OK) - new_iid = IDI_APPICON_OK; - else if (expseverity == KHM_NOTIF_WARN) - new_iid = IDI_APPICON_WARN; - else if (expseverity == KHM_NOTIF_EXP) - new_iid = IDI_APPICON_EXP; - else - new_iid = IDI_NOTIFY_NONE; - - if (iid_normal == new_iid) - return; - - iid_normal = new_iid; - - if (balloon_alert == NULL) - khm_notify_icon_change(KHERR_NONE); -} - -void khm_notify_icon_change(khm_int32 severity) { - NOTIFYICONDATA ni; - wchar_t buf[256]; - int iid; - - if (severity == KHERR_INFO) - iid = IDI_NOTIFY_INFO; - else if (severity == KHERR_WARNING) - iid = IDI_NOTIFY_WARN; - else if (severity == KHERR_ERROR) - iid = IDI_NOTIFY_ERROR; - else - iid = iid_normal; - - ZeroMemory(&ni, sizeof(ni)); - - ni.cbSize = sizeof(ni); - ni.hWnd = hwnd_notifier; - ni.uID = KHUI_NOTIFY_ICON_ID; - ni.uFlags = NIF_ICON | NIF_TIP; - ni.hIcon = LoadIcon(khm_hInstance, MAKEINTRESOURCE(iid)); - - if (severity == KHERR_NONE) { - StringCbCopy(ni.szTip, sizeof(ni.szTip), tip_normal); - } else { - LoadString(khm_hInstance, IDS_NOTIFY_PREFIX, buf, ARRAYLENGTH(buf)); - StringCbCopy(ni.szTip, sizeof(ni.szTip), buf); - LoadString(khm_hInstance, IDS_NOTIFY_ATTENTION, buf, ARRAYLENGTH(buf)); - StringCbCat(ni.szTip, sizeof(ni.szTip), buf); - } - - Shell_NotifyIcon(NIM_MODIFY, &ni); - - DestroyIcon(ni.hIcon); - - notifier_severity = severity; -} - -void khm_notify_icon_tooltip(wchar_t * s) { - wchar_t buf[256]; - - LoadString(khm_hInstance, IDS_NOTIFY_PREFIX, buf, ARRAYLENGTH(buf)); - StringCbCat(buf, sizeof(buf), s); - - StringCbCopy(tip_normal, sizeof(tip_normal), buf); - - if (notifier_severity == KHERR_NONE) { - NOTIFYICONDATA ni; - - ZeroMemory(&ni, sizeof(ni)); - - ni.cbSize = sizeof(ni); - ni.hWnd = hwnd_notifier; - ni.uID = KHUI_NOTIFY_ICON_ID; - ni.uFlags = NIF_TIP; - - StringCbCopy(ni.szTip, sizeof(ni.szTip), tip_normal); - - Shell_NotifyIcon(NIM_MODIFY, &ni); - } -} - -void khm_notify_icon_remove(void) { - NOTIFYICONDATA ni; - - ZeroMemory(&ni, sizeof(ni)); - - ni.cbSize = sizeof(ni); - ni.hWnd = hwnd_notifier; - ni.uID = KHUI_NOTIFY_ICON_ID; - - Shell_NotifyIcon(NIM_DELETE, &ni); -} - -khm_int32 -khm_get_default_notifier_action(void) { - khm_int32 def_cmd = KHUI_ACTION_OPEN_APP; - khm_handle csp_cw = NULL; - khm_size i; - - if (KHM_FAILED(khc_open_space(NULL, L"CredWindow", KHM_PERM_READ, - &csp_cw))) - def_cmd; - - khc_read_int32(csp_cw, L"NotificationAction", &def_cmd); - - khc_close_space(csp_cw); - - for (i=0; i < n_khm_notifier_actions; i++) { - if (khm_notifier_actions[i] == def_cmd) - break; - } - - if (i < n_khm_notifier_actions) - return def_cmd; - else - return KHUI_ACTION_OPEN_APP; -} - -void khm_notify_icon_activate(void) { - /* if there are any notifications waiting to be shown and there - are no alerts already being shown, we show them. Otherwise we - execute the default action. */ - - khm_notify_icon_change(KHERR_NONE); - - if (balloon_alert != NULL && khui_alert_windows == NULL) { - - khui_alert * a; - khm_boolean alert_done = FALSE; - - a = balloon_alert; - balloon_alert = NULL; - - khui_alert_lock(a); - - a->displayed = FALSE; - - if ((a->flags & KHUI_ALERT_FLAG_DEFACTION) && - (a->n_alert_commands > 0)) { - - PostMessage(khm_hwnd_main, WM_COMMAND, - MAKEWPARAM(a->alert_commands[0], - 0), - 0); - alert_done = TRUE; - - } else if (a->flags & KHUI_ALERT_FLAG_REQUEST_WINDOW) { - - alert_show_normal(a); - alert_done = TRUE; - - } - khui_alert_unlock(a); - khui_alert_release(a); - - if (alert_done) - return; - } - - if (!is_alert_queue_empty() && !ALERT_DISPLAYED()) { - - khm_show_main_window(); - show_queued_alerts(); - - return; - } - - - /* if none of the above applied, then we perform the default - action for the notification icon. */ - { - khm_int32 cmd = 0; - - cmd = khm_get_default_notifier_action(); - - if (cmd == KHUI_ACTION_OPEN_APP) { - if (khm_is_main_window_visible()) { - khm_hide_main_window(); - } else { - khm_show_main_window(); - } - } else { - khui_action_trigger(cmd, NULL); - } - - check_for_queued_alerts(); - } -} - -/********************************************************************* - Initialization -**********************************************************************/ - -void khm_init_notifier(void) -{ - if(!khm_register_notifier_wnd_class()) - return; - - if(!khm_register_alerter_wnd_class()) - return; - - if(!khm_register_alert_bin_wnd_class()) - return; - - hwnd_notifier = CreateWindowEx(0, - MAKEINTATOM(atom_notifier), - KHUI_NOTIFIER_WINDOW, - 0, - 0,0,0,0, - HWND_MESSAGE, - NULL, - khm_hInstance, - NULL); - - if(hwnd_notifier != NULL) { - kmq_subscribe_hwnd(KMSG_ALERT, hwnd_notifier); - kmq_subscribe_hwnd(KMSG_CRED, hwnd_notifier); - notifier_ready = TRUE; - - khm_notify_icon_add(); - } else { -#ifdef DEBUG - assert(hwnd_notifier != NULL); -#endif - } - khm_timer_init(); - - khm_addr_change_notifier_init(); -} - -void khm_exit_notifier(void) -{ - khm_addr_change_notifier_exit(); - - khm_timer_exit(); - - if(hwnd_notifier != NULL) { - khm_notify_icon_remove(); - kmq_unsubscribe_hwnd(KMSG_ALERT, hwnd_notifier); - kmq_unsubscribe_hwnd(KMSG_CRED, hwnd_notifier); - DestroyWindow(hwnd_notifier); - hwnd_notifier = NULL; - } - - if(atom_notifier != 0) { - UnregisterClass(MAKEINTATOM(atom_notifier), khm_hInstance); - atom_notifier = 0; - } - - if(atom_alerter != 0) { - UnregisterClass(MAKEINTATOM(atom_alerter), khm_hInstance); - atom_alerter = 0; - } - - if(atom_alert_bin != 0) { - UnregisterClass(MAKEINTATOM(atom_alert_bin), khm_hInstance); - atom_alert_bin = 0; - } - - notifier_ready = FALSE; -} diff --git a/src/windows/identity/ui/notifier.h b/src/windows/identity/ui/notifier.h deleted file mode 100644 index 4366fcb07..000000000 --- a/src/windows/identity/ui/notifier.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_NOTIFIER_H -#define __KHIMAIRA_NOTIFIER_H - -extern HWND hwnd_notifier; - -enum khm_notif_expstate { - KHM_NOTIF_EMPTY, - KHM_NOTIF_OK, - KHM_NOTIF_WARN, - KHM_NOTIF_EXP -}; - -extern khm_int32 khm_notifier_actions[]; -extern khm_size n_khm_notifier_actions; - -void -khm_init_notifier(void); - -void -khm_exit_notifier(void); - -void -khm_notify_icon_change(khm_int32 severity); - -void -khm_notify_icon_tooltip(wchar_t * s); - -void -khm_notify_icon_balloon(khm_int32 severity, - wchar_t * title, - wchar_t * msg, - khm_int32 timeout); - -void -khm_notify_icon_expstate(enum khm_notif_expstate expseverity); - -void -khm_notify_icon_activate(void); - -khm_int32 -khm_get_default_notifier_action(void); - -#endif diff --git a/src/windows/identity/ui/passwnd.c b/src/windows/identity/ui/passwnd.c deleted file mode 100644 index e9c266051..000000000 --- a/src/windows/identity/ui/passwnd.c +++ /dev/null @@ -1,133 +0,0 @@ -#include<khmapp.h> - -static ATOM sAtom = 0; -static HINSTANCE shInstance = 0; - -/* Callback for the MITPasswordControl -This is a replacement for the normal edit control. It does not show the -annoying password char in the edit box so that the number of chars in the -password are not known. -*/ - -#define PASSWORDCHAR L'#' -#define DLGHT(ht) (HIWORD(GetDialogBaseUnits())*(ht)/8) -#define DLGWD(wd) (LOWORD(GetDialogBaseUnits())*(wd)/4) - -static -LRESULT -CALLBACK -MITPasswordEditProc( - HWND hWnd, - UINT message, - WPARAM wParam, - LPARAM lParam - ) -{ - static SIZE pwdcharsz; - BOOL pass_the_buck = FALSE; - - if (message > WM_USER && message < 0x7FFF) - pass_the_buck = TRUE; - - switch(message) - { - case WM_GETTEXT: - case WM_GETTEXTLENGTH: - case WM_SETTEXT: - pass_the_buck = TRUE; - break; - case WM_PAINT: - { - HDC hdc; - PAINTSTRUCT ps; - RECT r; - - hdc = BeginPaint(hWnd, &ps); - GetClientRect(hWnd, &r); - Rectangle(hdc, 0, 0, r.right, r.bottom); - EndPaint(hWnd, &ps); - } - break; - case WM_SIZE: - { - MoveWindow(GetDlgItem(hWnd, 1), DLGWD(2), DLGHT(2), - pwdcharsz.cx / 2, pwdcharsz.cy, TRUE); - } - break; - case WM_LBUTTONDOWN: - case WM_SETFOCUS: - { - SetFocus(GetDlgItem(hWnd, 1)); - } - break; - case WM_CREATE: - { - HWND heditchild; - wchar_t pwdchar = PASSWORDCHAR; - HDC hdc; - /* Create a child window of this control for default processing. */ - hdc = GetDC(hWnd); - GetTextExtentPoint32(hdc, &pwdchar, 1, &pwdcharsz); - ReleaseDC(hWnd, hdc); - - heditchild = - CreateWindow(L"edit", L"", WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | - ES_LEFT | ES_PASSWORD | WS_TABSTOP, - 0, 0, 0, 0, - hWnd, - (HMENU)1, - ((LPCREATESTRUCT)lParam)->hInstance, - NULL); - SendMessage(heditchild, EM_SETPASSWORDCHAR, PASSWORDCHAR, 0L); - } - break; - } - - if (pass_the_buck) - return SendMessage(GetDlgItem(hWnd, 1), message, wParam, lParam); - return DefWindowProc(hWnd, message, wParam, lParam); -} - -khm_int32 -khm_register_passwnd_class(void) -{ - if (!sAtom) { - WNDCLASS wndclass; - - memset(&wndclass, 0, sizeof(WNDCLASS)); - - shInstance = khm_hInstance; - - wndclass.style = CS_HREDRAW | CS_VREDRAW; - wndclass.lpfnWndProc = (WNDPROC)MITPasswordEditProc; - wndclass.cbClsExtra = sizeof(HWND); - wndclass.cbWndExtra = 0; - wndclass.hInstance = shInstance; - wndclass.hbrBackground = (void *)(COLOR_WINDOW + 1); - wndclass.lpszClassName = MIT_PWD_DLL_CLASS; - wndclass.hCursor = LoadCursor((HINSTANCE)NULL, IDC_IBEAM); - - sAtom = RegisterClass(&wndclass); - } - - return (sAtom)?KHM_ERROR_SUCCESS:KHM_ERROR_UNKNOWN; -} - -khm_int32 -khm_unregister_passwnd_class(void) -{ - BOOL result = TRUE; - - if ((khm_hInstance != shInstance) || !sAtom) { - return KHM_ERROR_INVALID_OPERATION; - } - - result = UnregisterClass(MIT_PWD_DLL_CLASS, khm_hInstance); - if (result) { - sAtom = 0; - shInstance = 0; - return KHM_ERROR_SUCCESS; - } else { - return KHM_ERROR_UNKNOWN; - } -} diff --git a/src/windows/identity/ui/passwnd.h b/src/windows/identity/ui/passwnd.h deleted file mode 100644 index c3ab8ef31..000000000 --- a/src/windows/identity/ui/passwnd.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_PASSWND_H -#define __KHIMAIRA_PASSWND_H - -/* Declarations for the MIT password change control. Functionally the - same as the regular Windows password edit control but doesn't - display the '*' password character. */ - -#define MIT_PWD_DLL_CLASS L"MITPasswordWnd" - -khm_int32 khm_unregister_passwnd_class(void); -khm_int32 khm_register_passwnd_class(void); - -#endif diff --git a/src/windows/identity/ui/propertywnd.c b/src/windows/identity/ui/propertywnd.c deleted file mode 100644 index 5f3030e59..000000000 --- a/src/windows/identity/ui/propertywnd.c +++ /dev/null @@ -1,254 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<khmapp.h> -#include<assert.h> - -typedef struct tag_pw_data { - khm_handle record; - HWND hwnd_lv; -} pw_data; - -ATOM khui_propertywnd_cls; - -#define ID_LISTVIEW 1 - -#define PW_WM_SET_RECORD WM_USER - -void pw_update_property_data(HWND hw, pw_data * d) -{ - HWND hwnd_lv; - khm_int32 * attrs = NULL; - - hwnd_lv = d->hwnd_lv; - - if(hwnd_lv == NULL) - return; - - ListView_DeleteAllItems(hwnd_lv); - - if(d->record != NULL) { - wchar_t * buffer; - khm_size attr_count; - khm_size i; - khm_size cb_buf; - khm_size t; - LVITEM lvi; - int idx; - - if(KHM_FAILED(kcdb_attrib_get_count( - KCDB_ATTR_FLAG_VOLATILE | - KCDB_ATTR_FLAG_HIDDEN, - 0, - &attr_count))) - return; - - attrs = PMALLOC(sizeof(khm_int32) * attr_count); - assert(attrs != NULL); - - kcdb_attrib_get_ids( - KCDB_ATTR_FLAG_VOLATILE | - KCDB_ATTR_FLAG_HIDDEN, - 0, - attrs, - &attr_count); - - cb_buf = sizeof(wchar_t) * 2048; - buffer = PMALLOC(cb_buf); - assert(buffer != NULL); - - for(i=0; i<attr_count; i++) { - if(KHM_FAILED(kcdb_buf_get_attr(d->record, attrs[i], NULL, NULL, NULL))) - continue; - - ZeroMemory(&lvi, sizeof(lvi)); - lvi.mask = LVIF_TEXT | LVIF_PARAM; - lvi.iItem = (int) i; - lvi.iSubItem = 0; - lvi.pszText = buffer; - lvi.lParam = (LPARAM) attrs[i]; - - t = cb_buf; - kcdb_attrib_describe(attrs[i], buffer, &t, KCDB_TS_SHORT); - - idx = ListView_InsertItem(hwnd_lv, &lvi); - - ZeroMemory(&lvi, sizeof(lvi)); - lvi.mask = LVIF_TEXT; - lvi.iItem = idx; - lvi.iSubItem = 1; - lvi.pszText = buffer; - - t = cb_buf; - kcdb_buf_get_attr_string(d->record, attrs[i], buffer, &t, 0); - - ListView_SetItem(hwnd_lv, &lvi); - } - - PFREE(attrs); - PFREE(buffer); - } -} - -LRESULT CALLBACK khui_property_wnd_proc( - HWND hwnd, - UINT msg, - WPARAM wParam, - LPARAM lParam) -{ - BOOL child_msg = FALSE; - pw_data * child; - - switch(msg) { - case WM_CREATE: - { - CREATESTRUCT * cs; - LVCOLUMN lvc; - wchar_t sz_title[256]; - - cs = (CREATESTRUCT *) lParam; - - child = PMALLOC(sizeof(*child)); - ZeroMemory(child, sizeof(*child)); - -#pragma warning(push) -#pragma warning(disable:4244) - SetWindowLongPtr(hwnd, 0, (LONG_PTR) child); -#pragma warning(pop) - - child->hwnd_lv = CreateWindow( - WC_LISTVIEW, - L"", - WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | - LVS_REPORT | LVS_SORTASCENDING, - 0, 0, - cs->cx, cs->cy, - hwnd, - (HMENU) ID_LISTVIEW, - khm_hInstance, - NULL); - - ListView_SetExtendedListViewStyle(child->hwnd_lv, - LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); - - ZeroMemory(&lvc, sizeof(lvc)); - lvc.mask = LVCF_FMT | LVCF_ORDER | LVCF_TEXT | LVCF_WIDTH; - lvc.fmt = LVCFMT_LEFT; - lvc.cx = (cs->cx * 2)/ 5; - lvc.pszText = sz_title; - lvc.iSubItem = 0; - lvc.iOrder = 0; - LoadString(khm_hInstance, IDS_PROP_COL_PROPERTY, sz_title, ARRAYLENGTH(sz_title)); - - ListView_InsertColumn(child->hwnd_lv, 0, &lvc); - - ZeroMemory(&lvc, sizeof(lvc)); - lvc.mask = LVCF_FMT | LVCF_ORDER | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH; - lvc.fmt = LVCFMT_LEFT; - lvc.cx = (cs->cx * 3)/ 5; - lvc.pszText = sz_title; - lvc.iSubItem = 1; - lvc.iOrder = 1; - LoadString(khm_hInstance, IDS_PROP_COL_VALUE, sz_title, ARRAYLENGTH(sz_title)); - - ListView_InsertColumn(child->hwnd_lv, 1, &lvc); - - if(cs->lpCreateParams != NULL) { - child->record = cs->lpCreateParams; - kcdb_buf_hold(child->record); - pw_update_property_data(hwnd, child); - } - } - break; - - case PW_WM_SET_RECORD: - { - child = (pw_data *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (child == NULL) - break; - - kcdb_buf_release(child->record); - child->record = (khm_handle) lParam; - kcdb_buf_hold(child->record); - pw_update_property_data(hwnd, child); - } - return 0; - - case WM_DESTROY: - { - child = (pw_data *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - if (child) { - kcdb_buf_release(child->record); - PFREE(child); - SetWindowLongPtr(hwnd, 0, 0); - } - } - break; - - case WM_PAINT: - break; - - default: - child = (pw_data *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); - child_msg = TRUE; - } - - /* - if(child_msg && child && child->hwnd_lv) - return SendMessage(child->hwnd_lv, msg, wParam, lParam); - else - */ - return DefWindowProc(hwnd, msg, wParam, lParam); -} - -khm_int32 khm_register_propertywnd_class(void) -{ - WNDCLASSEX wcx; - - wcx.cbSize = sizeof(wcx); - wcx.style = CS_DBLCLKS; - wcx.lpfnWndProc = khui_property_wnd_proc; - wcx.cbClsExtra = 0; - wcx.cbWndExtra = sizeof(LONG_PTR); - wcx.hInstance = khm_hInstance; - wcx.hIcon = NULL; - wcx.hCursor = LoadCursor((HINSTANCE) NULL, IDC_ARROW); - wcx.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1); - wcx.lpszMenuName = NULL; - wcx.lpszClassName = KHUI_PROPERTYWND_CLASS_NAME; - wcx.hIconSm = NULL; - - khui_propertywnd_cls = RegisterClassEx(&wcx); - - return (khui_propertywnd_cls == 0)?KHM_ERROR_UNKNOWN:KHM_ERROR_SUCCESS; -} - -khm_int32 khm_unregister_propertywnd_class(void) -{ - UnregisterClass(MAKEINTATOM(khui_propertywnd_cls), khm_hInstance); - - return KHM_ERROR_SUCCESS; -} diff --git a/src/windows/identity/ui/propertywnd.h b/src/windows/identity/ui/propertywnd.h deleted file mode 100644 index c4a738eaf..000000000 --- a/src/windows/identity/ui/propertywnd.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_PROPERTYWND_H -#define __KHIMAIRA_PROPERTYWND_H - -#define KHUI_PROPERTYWND_CLASS_NAME L"NetIDMgrPropertyWnd" - -khm_int32 khm_register_propertywnd_class(void); - -khm_int32 khm_unregister_propertywnd_class(void); - -#endif diff --git a/src/windows/identity/ui/reqdaemon.c b/src/windows/identity/ui/reqdaemon.c deleted file mode 100644 index ce3e0f9ed..000000000 --- a/src/windows/identity/ui/reqdaemon.c +++ /dev/null @@ -1,453 +0,0 @@ -/* - * 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 - * 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<khmapp.h> -#include<assert.h> - -ATOM reqdaemon_atom = 0; -HANDLE reqdaemon_thread = NULL; -HWND reqdaemon_hwnd = NULL; - -LRESULT CALLBACK -reqdaemonwnd_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) { - - switch(uMsg) { - case WM_CREATE: - break; - - case WM_CLOSE: - DestroyWindow(hwnd); - break; - - case WM_DESTROY: - reqdaemon_hwnd = NULL; - PostQuitMessage(0); - break; - - /* Leash compatibility */ - case ID_OBTAIN_TGT_WITH_LPARAM: - { - wchar_t widname[KCDB_IDENT_MAXCCH_NAME]; - wchar_t wmapping[ARRAYLENGTH(KHUI_REQD_MAPPING_FORMAT) + 10]; - khm_handle identity = NULL; - LPNETID_DLGINFO pdlginfo; - LRESULT lr = 1; - khm_int32 result; - HANDLE hmap = NULL; - HRESULT hr; - - hr = StringCbPrintf(wmapping, sizeof(wmapping), - KHUI_REQD_MAPPING_FORMAT, (DWORD) lParam); -#ifdef DEBUG - assert(SUCCEEDED(hr)); -#endif - hmap = CreateFileMapping(INVALID_HANDLE_VALUE, - NULL, - PAGE_READWRITE, - 0, 4096, - wmapping); - - if (hmap == NULL) { - return -1; - } else if (hmap != NULL && GetLastError() != ERROR_ALREADY_EXISTS) { - CloseHandle(hmap); - return -1; - } - - pdlginfo = MapViewOfFile(hmap, - FILE_MAP_WRITE, - 0, 0, - sizeof(*pdlginfo)); - - if (pdlginfo == NULL) { - CloseHandle(hmap); - return 1; - } - - if (pdlginfo->in.username[0] && - pdlginfo->in.realm[0] && - SUCCEEDED(StringCbPrintf(widname, - sizeof(widname), - L"%s@%s", - pdlginfo->in.username, - pdlginfo->in.realm))) { - - kcdb_identity_create(widname, - KCDB_IDENT_FLAG_CREATE, - &identity); - } - - widname[0] = 0; - - do { - if (khm_cred_is_in_dialog()) { - khm_cred_wait_for_dialog(INFINITE, NULL, NULL, 0); - } - - if (identity) - khui_context_set_ex(KHUI_SCOPE_IDENT, - identity, - KCDB_CREDTYPE_INVALID, - NULL, - NULL, - 0, - NULL, - pdlginfo, - sizeof(*pdlginfo)); - else - khui_context_reset(); - - if (pdlginfo->dlgtype == NETID_DLGTYPE_TGT) - SendMessage(khm_hwnd_main, WM_COMMAND, - MAKEWPARAM(KHUI_ACTION_NEW_CRED, 0), 0); - else if (pdlginfo->dlgtype == NETID_DLGTYPE_CHPASSWD) - SendMessage(khm_hwnd_main, WM_COMMAND, - MAKEWPARAM(KHUI_ACTION_PASSWD_ID, 0), 0); - else - break; - - if (KHM_FAILED(khm_cred_wait_for_dialog(INFINITE, &result, - widname, - sizeof(widname)))) - continue; - else { - lr = (result != KHUI_NC_RESULT_PROCESS); - break; - } - } while(TRUE); - -#ifdef DEBUG - assert(lr || pdlginfo->dlgtype != NETID_DLGTYPE_TGT || - widname[0]); -#endif - - if (!lr && pdlginfo->dlgtype == NETID_DLGTYPE_TGT && - widname[0]) { - khm_handle out_ident; - wchar_t * atsign; - - atsign = wcsrchr(widname, L'@'); - - if (atsign == NULL) - goto _exit; - - if (KHM_SUCCEEDED(kcdb_identity_create(widname, - 0, - &out_ident))) { - khm_size cb; - - pdlginfo->out.ccache[0] = 0; - - cb = sizeof(pdlginfo->out.ccache); - kcdb_identity_get_attrib(out_ident, - L"Krb5CCName", - NULL, - pdlginfo->out.ccache, - &cb); - kcdb_identity_release(out_ident); - } else { -#ifdef DEBUG - assert(FALSE); -#endif - } - - *atsign++ = 0; - - StringCbCopy(pdlginfo->out.username, - sizeof(pdlginfo->out.username), - widname); - - StringCbCopy(pdlginfo->out.realm, - sizeof(pdlginfo->out.realm), - atsign); - } - - _exit: - - if (pdlginfo) - UnmapViewOfFile(pdlginfo); - if (hmap) - CloseHandle(hmap); - if (identity) - kcdb_identity_release(identity); - - return lr; - } - -#ifdef DEPRECATED_REMOTE_CALL - /* deprecated */ - case ID_OBTAIN_TGT_WITH_LPARAM: - { - char * param = (char *) GlobalLock((HGLOBAL) lParam); - char * username = NULL; - char * realm = NULL; - char * title = NULL; - char * ccache = NULL; - wchar_t widname[KCDB_IDENT_MAXCCH_NAME]; - wchar_t wtitle[KHUI_MAXCCH_TITLE]; - size_t cch; - khm_int32 rv = KHM_ERROR_SUCCESS; - khm_handle identity = NULL; - NETID_DLGINFO dlginfo; - - if (param) { - if (*param) - title = param; - - if (FAILED(StringCchLengthA(param, KHUI_MAXCCH_TITLE, &cch))) { -#ifdef DEBUG - assert(FALSE); -#endif - rv = KHM_ERROR_INVALID_PARAM; - goto _exit_tgt_with_lparam; - } - - param += cch + 1; - - if (*param) - username = param; - - if (FAILED(StringCchLengthA(param, KCDB_IDENT_MAXCCH_NAME, &cch))) { -#ifdef DEBUG - assert(FALSE); -#endif - rv = KHM_ERROR_INVALID_PARAM; - goto _exit_tgt_with_lparam; - } - - param += cch + 1; - - if (*param) - realm = param; - - if (FAILED(StringCchLengthA(param, KCDB_IDENT_MAXCCH_NAME, &cch))) { -#ifdef DEBUG - assert(FALSE); -#endif - rv = KHM_ERROR_INVALID_PARAM; - goto _exit_tgt_with_lparam; - } - - param += cch + 1; - - if (*param) - ccache = param; - } - - if (username && realm) { - - if (FAILED(StringCbPrintf(widname, sizeof(widname), - L"%hs@%hs", username, realm))) { - rv = KHM_ERROR_INVALID_PARAM; - goto _exit_tgt_with_lparam; - } - - rv = kcdb_identity_create(widname, - KCDB_IDENT_FLAG_CREATE, - &identity); - if (KHM_FAILED(rv)) { - goto _exit_tgt_with_lparam; - } - } - - ZeroMemory(&dlginfo, sizeof(dlginfo)); - - dlginfo.size = NETID_DLGINFO_V1_SZ; - dlginfo.dlgtype = NETID_DLGTYPE_TGT; - - if (title) - StringCbCopy(dlginfo.in.title, sizeof(dlginfo.in.title), - wtitle); - if (username) - AnsiStrToUnicode(dlginfo.in.username, sizeof(dlginfo.in.username), - username); - if (realm) - AnsiStrToUnicode(dlginfo.in.realm, sizeof(dlginfo.in.realm), - realm); - - if (ccache) - AnsiStrToUnicode(dlginfo.in.ccache, sizeof(dlginfo.in.ccache), - ccache); - - dlginfo.in.use_defaults = TRUE; - - do { - if (khm_cred_is_in_dialog()) { - khm_cred_wait_for_dialog(INFINITE); - } - - khui_context_set_ex(KHUI_SCOPE_IDENT, - identity, - KCDB_CREDTYPE_INVALID, - NULL, - NULL, - 0, - NULL, - &dlginfo, - sizeof(dlginfo)); - - if (title) { - AnsiStrToUnicode(wtitle, sizeof(wtitle), - title); - - khm_cred_obtain_new_creds(wtitle); - } else { - khm_cred_obtain_new_creds(NULL); - } - - if (KHM_FAILED(khm_cred_wait_for_dialog(INFINITE))) - continue; - else - break; - } while(TRUE); - - _exit_tgt_with_lparam: - if (identity) - kcdb_identity_release(identity); - - GlobalUnlock((HGLOBAL) lParam); - } - return 0; -#endif - - } - - return DefWindowProc(hwnd, uMsg, wParam, lParam); -} - -DWORD WINAPI -khm_reqdaemon_thread_proc(LPVOID vparam) { - BOOL rv; - MSG msg; -#ifdef DEBUG - DWORD dw; -#endif - - PDESCTHREAD(L"Remote Request Daemon", L"App"); - - khm_register_reqdaemonwnd_class(); - -#ifdef DEBUG - assert(reqdaemon_atom != 0); -#endif - - reqdaemon_hwnd = CreateWindowEx(0, - MAKEINTATOM(reqdaemon_atom), - KHUI_REQDAEMONWND_NAME, - 0, - 0,0,0,0, - HWND_MESSAGE, - NULL, - khm_hInstance, - NULL); - -#ifdef DEBUG - dw = GetLastError(); - assert(reqdaemon_hwnd != NULL); -#endif - - while(rv = GetMessage(&msg, NULL, 0, 0)) { - if (rv == -1) { -#ifdef DEBUG - assert(FALSE); -#endif - break; - } else { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } - - reqdaemon_thread = NULL; - - khm_unregister_reqdaemonwnd_class(); - - return 0; -} - -void -khm_register_reqdaemonwnd_class(void) { - WNDCLASSEX wcx; - - ZeroMemory(&wcx, sizeof(wcx)); - - wcx.cbSize = sizeof(wcx); - wcx.style = 0; - wcx.lpfnWndProc = reqdaemonwnd_proc; - wcx.cbClsExtra = 0; - wcx.cbWndExtra = 0; - wcx.hInstance = khm_hInstance; - wcx.hIcon = NULL; - wcx.hCursor = NULL; - wcx.hbrBackground = NULL; - wcx.lpszMenuName = NULL; - wcx.lpszClassName = KHUI_REQDAEMONWND_CLASS; - wcx.hIconSm = NULL; - - reqdaemon_atom = RegisterClassEx(&wcx); - -#ifdef DEBUG - assert(reqdaemon_atom != 0); -#endif -} - -void -khm_unregister_reqdaemonwnd_class(void) { - if (reqdaemon_atom != 0) { - UnregisterClass(MAKEINTATOM(reqdaemon_atom), khm_hInstance); - reqdaemon_atom = 0; - } -} - -void -khm_init_request_daemon(void) { -#ifdef DEBUG - assert(reqdaemon_thread == NULL); -#endif - - reqdaemon_thread = CreateThread(NULL, - 0, - khm_reqdaemon_thread_proc, - NULL, - 0, - NULL); - -#ifdef DEBUG - assert(reqdaemon_thread != NULL); -#endif -} - -void -khm_exit_request_daemon(void) { - if (reqdaemon_hwnd == NULL) - return; - - SendMessage(reqdaemon_hwnd, WM_CLOSE, 0, 0); -} diff --git a/src/windows/identity/ui/reqdaemon.h b/src/windows/identity/ui/reqdaemon.h deleted file mode 100644 index 99a50f5e0..000000000 --- a/src/windows/identity/ui/reqdaemon.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_REQDAEMON_H -#define __KHIMAIRA_REQDAEMON_H - -void -khm_register_reqdaemonwnd_class(void); - -void -khm_unregister_reqdaemonwnd_class(void); - -void -khm_init_request_daemon(void); - -void -khm_exit_request_daemon(void); - -#endif diff --git a/src/windows/identity/ui/resource.h b/src/windows/identity/ui/resource.h deleted file mode 100644 index d14a95fde..000000000 --- a/src/windows/identity/ui/resource.h +++ /dev/null @@ -1,421 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by C:\work\pismere\athena\auth\krb5\src\windows\identity\ui\lang\en_us\khapp.rc -// -#define IDI_MAIN_APP 104 -#define IDD_PP_CRED 106 -#define IDD_PP_IDENT 107 -#define IDB_TK_REFRESH 108 -#define IDS_MAIN_WINDOW_TITLE 108 -#define IDS_MENU_FILE 109 -#define IDB_ID 110 -#define IDS_MENU_CRED 110 -#define IDB_ID_DELETE 111 -#define IDS_MENU_VIEW 111 -#define IDB_ID_NEW 112 -#define IDS_MENU_OPTIONS 112 -#define IDB_ID_REFRESH 113 -#define IDS_MENU_HELP 113 -#define IDB_TK 114 -#define IDS_ACTION_PROPERTIES 114 -#define IDB_TK_DELETE 115 -#define IDS_ACTION_EXIT 115 -#define IDB_TK_NEW 116 -#define IDS_CFG_ROOT_NAME 116 -#define IDS_ACTION_SET_DEF_ID 117 -#define IDS_ACTION_SET_SRCH_ID 118 -#define IDB_VW_REFRESH_SM 118 -#define IDR_MENU_BAR 119 -#define IDS_CFG_ROOT_TITLE 119 -#define IDS_CFG_GENERAL_SHORT 120 -#define IDB_TB_BLANK 121 -#define IDS_ACTION_NEW_CRED 121 -#define IDS_ACTION_PASSWD_ID 122 -#define IDS_ACTION_CHOOSE_COLS 123 -#define IDB_TB_BLANK_SM 123 -#define IDS_ACTION_DEBUG_WINDOW 124 -#define IDB_VW_REFRESH 124 -#define IDS_ACTION_VIEW_REFRESH 125 -#define IDB_ID_DELETE_DIS 125 -#define IDS_MENU_LAYOUT 126 -#define IDB_ID_DELETE_DIS_SM 126 -#define IDS_MENU_TOOLBARS 127 -#define IDB_ID_DELETE_SM 127 -#define IDS_ACTION_LAYOUT_ID 128 -#define IDB_ID_DIS 128 -#define IDS_ACTION_LAYOUT_TYPE 129 -#define IDB_ID_DIS_SM 129 -#define IDS_ACTION_LAYOUT_LOC 130 -#define IDB_ID_NEW_DIS 130 -#define IDS_ACTION_TB_STANDARD 131 -#define IDB_ID_NEW_DIS_SM 131 -#define IDS_ACTION_OPT_KHIM 132 -#define IDB_ID_NEW_SM 132 -#define IDB_ID_REFRESH_DIS 133 -#define IDS_ACTION_OPT_IDENTS 133 -#define IDS_ACTION_OPT_NOTIF 134 -#define IDB_ID_REFRESH_SM 134 -#define IDS_ACTION_HELP_CTX 135 -#define IDB_ID_REFRESH_DIS_SM 135 -#define IDS_ACTION_HELP_CONTENTS 136 -#define IDB_TK_DELETE_DIS 136 -#define IDS_ACTION_HELP_INDEX 137 -#define IDB_TK_DELETE_DIS_SM 137 -#define IDS_ACTION_HELP_ABOUT 138 -#define IDB_TK_DELETE_SM 138 -#define IDB_TK_DIS_SM 139 -#define IDS_CFG_GENERAL_LONG 139 -#define IDB_TK_NEW_DIS 140 -#define IDS_SAMPLE_STRING 140 -#define IDB_TK_NEW_DIS_SM 141 -#define IDS_NO_CREDS 141 -#define IDB_TK_NEW_SM 142 -#define IDS_WT_INIT_CREDS 142 -#define IDB_TK_REFRESH_DIS 143 -#define IDS_WT_NEW_CREDS 143 -#define IDB_TK_REFRESH_DIS_SM 144 -#define IDS_NC_IDENTITY 144 -#define IDB_TK_REFRESH_SM 145 -#define IDS_NC_IDENTS 145 -#define IDB_TK_SM 146 -#define IDS_NC_CREDTEXT_ID_NONE 146 -#define IDB_HELP_SM 147 -#define IDS_NC_CREDTEXT_ID_ONE 147 -#define IDB_HELP 148 -#define IDS_NC_CREDTEXT_ID_MANY 148 -#define IDB_LOGO_SHADE 149 -#define IDS_NC_CREDTEXT_ID_INVALID 149 -#define IDS_WTPOST_INIT_CREDS 150 -#define IDS_WTPOST_NEW_CREDS 151 -#define IDB_WDG_EXPAND 152 -#define IDS_ACTION_RENEW_CRED 152 -#define IDB_WDG_COLLAPSE 153 -#define IDS_ACTION_DESTROY_CRED 153 -#define IDB_ID_SM 154 -#define IDS_DEFAULT_FONT 154 -#define IDB_WDG_EXPAND_HI 155 -#define IDS_NC_CREDTEXT_TABS 155 -#define IDB_WDG_COLLAPSE_HI 156 -#define IDS_NOTIFY_PREFIX 156 -#define IDB_WDG_CREDTYPE 157 -#define IDS_NOTIFY_READY 157 -#define IDB_WDG_FLAG 158 -#define IDS_NOTIFY_ATTENTION 158 -#define IDB_FLAG_WARN 159 -#define IDS_ALERT_DEFAULT 159 -#define IDB_FLAG_EXPIRED 160 -#define IDS_PACTION_OK 160 -#define IDB_FLAG_CRITICAL 161 -#define IDS_PACTION_CANCEL 161 -#define IDS_PACTION_CLOSE 162 -#define IDD_NC_NEWCRED 162 -#define IDD_NC_BBAR 163 -#define IDS_ALERT_NOSEL_TITLE 163 -#define IDS_ALERT_NOSEL 164 -#define IDI_ENABLED 165 -#define IDS_NC_CREDTEXT_ID_VALID 165 -#define IDI_DISABLED 166 -#define IDS_NC_CREDTEXT_ID_UNCHECKED 166 -#define IDS_PROP_COL_PROPERTY 167 -#define IDS_PROP_COL_VALUE 168 -#define IDI_NOTIFY_NONE 169 -#define IDS_NC_NEW_IDENT 169 -#define IDI_NOTIFY_INFO 170 -#define IDS_NC_CREDTEXT_ID_CHECKING 170 -#define IDI_NOTIFY_WARN 171 -#define IDS_ACTION_OPEN_APP 171 -#define IDI_NOTIFY_ERROR 172 -#define IDS_CTX_NEW_IDENT 172 -#define IDS_CTX_NEW_CREDS 173 -#define IDD_CFG_MAIN 173 -#define IDS_CTX_RENEW_CREDS 174 -#define IDD_CFG_GENERIC 174 -#define IDS_CTX_PROC_NEW_IDENT 175 -#define IDB_LOGO_OPAQUE 175 -#define IDS_CTX_PROC_NEW_CREDS 176 -#define IDD_CFG_GENERAL 176 -#define IDS_CTX_PROC_RENEW_CREDS 177 -#define IDD_CFG_IDENTITIES 177 -#define IDS_ACTION_CLOSE_APP 178 -#define IDD_CFG_NOTIF 178 -#define IDS_NC_FAILED_TITLE 179 -#define IDD_CFG_PLUGINS 179 -#define IDS_CFG_IDENTITIES_SHORT 180 -#define IDD_CFG_IDENTITY 180 -#define IDS_CFG_IDENTITIES_LONG 181 -#define IDI_CFG_DEFAULT 181 -#define IDS_CFG_NOTIF_SHORT 182 -#define IDI_CFG_MODIFIED 182 -#define IDS_CFG_NOTIF_LONG 183 -#define IDI_CFG_APPLIED 183 -#define IDS_CFG_PLUGINS_SHORT 184 -#define IDD_CFG_IDS_TAB 184 -#define IDS_CFG_PLUGINS_LONG 185 -#define IDD_CFG_ID_TAB 185 -#define IDS_CFG_IDENTITY_SHORT 186 -#define IDI_CFG_DELETED 186 -#define IDS_CFG_IDENTITY_LONG 187 -#define IDI_ID 187 -#define IDS_CTX_DESTROY_CREDS 188 -#define IDB_IMPORT_SM_DIS 188 -#define IDS_WARN_EXPIRE 189 -#define IDB_IMPORT 189 -#define IDS_WARN_TITLE 190 -#define IDB_IMPORT_DIS 190 -#define IDS_ALERT_MOREINFO 191 -#define IDB_IMPORT_SM 191 -#define IDS_WARN_EXPIRED 192 -#define IDB_CHPW_SM 192 -#define IDS_WARN_EXPIRE_ID 193 -#define IDB_CHPW 193 -#define IDS_WARN_EXPIRED_ID 194 -#define IDB_CHPW_DIS 194 -#define IDS_WARN_WM_TITLE 195 -#define IDB_CHPW_DIS_SM 195 -#define IDS_WARN_WM_MSG 196 -#define IDD_ABOUT 196 -#define IDS_CFG_ID_TAB_SHORT 197 -#define IDB_TB_SPACE 197 -#define IDS_CFG_ID_TAB_LONG 198 -#define IDB_WDG_STUCK_HI 198 -#define IDS_CFG_IDS_TAB_SHORT 199 -#define IDB_WDG_STICK 199 -#define IDS_CFG_IDS_TAB_LONG 200 -#define IDB_WDG_STICK_HI 200 -#define IDS_CFG_IDS_IDENTITY 201 -#define IDB_WDG_STUCK 201 -#define IDS_ACTION_IMPORT 202 -#define IDS_CTX_IMPORT 203 -#define IDB_FLAG_RENEW 203 -#define IDS_CFG_PI_COL_PLUGINS 204 -#define IDI_APPICON_WARN 204 -#define IDS_PISTATE_FAILUNK 205 -#define IDI_APPICON_EXP 205 -#define IDS_PISTATE_FAILMAX 206 -#define IDI_APPICON_OK 206 -#define IDS_PISTATE_FAILREG 207 -#define IDI_CFG_PLUGIN 207 -#define IDS_PISTATE_FAILDIS 208 -#define IDI_CFG_PLUGIN_ERR 208 -#define IDS_PISTATE_FAILLOD 209 -#define IDI_CFG_PLUGIN_DIS 209 -#define IDS_PISTATE_PLACEHOLD 210 -#define IDD_CFG_APPEAR 210 -#define IDS_PISTATE_REG 211 -#define IDD_CFG_ADDIDENT 211 -#define IDS_PISTATE_HOLD 212 -#define IDD_CMDLINE 212 -#define IDS_PISTATE_INIT 213 -#define IDR_CMDLINERTF 213 -#define IDS_PISTATE_RUN 214 -#define IDS_PISTATE_EXIT 215 -#define IDS_CTX_PASSWORD 216 -#define IDS_WT_PASSWORD 217 -#define IDS_WTPOST_PASSWORD 218 -#define IDS_CTX_PROC_PASSWORD 219 -#define IDS_NC_PWD_FAILED_TITLE 220 -#define IDS_MENU_SETDEF 221 -#define IDS_PACTION_NEXT 222 -#define IDS_ERR_TITLE_NO_IDENTPRO 223 -#define IDS_ERR_MSG_NO_IDENTPRO 224 -#define IDS_ERR_SUGG_NO_IDENTPRO 225 -#define IDS_NC_REN_FAILED_TITLE 226 -#define IDS_CW_DEFAULT 227 -#define IDS_ACTION_OPT_PLUGINS 228 -#define IDS_NC_SETDEF 229 -#define IDS_NC_ID_DEF 230 -#define IDS_NC_ID_WDEF 231 -#define IDS_NC_ID_NDEF 232 -#define IDS_PACTION_YES 233 -#define IDS_PACTION_NO 234 -#define IDS_PACTION_YESALL 235 -#define IDS_PACTION_NOALL 236 -#define IDS_PACTION_KEEP 237 -#define IDS_PACTION_REMOVE 238 -#define IDS_PACTION_DISCARD 239 -#define IDS_CFG_IT_MOD 240 -#define IDS_CFG_IT_APP 241 -#define IDS_CFG_IT_NONE 242 -#define IDS_CFG_NODESC 243 -#define IDS_CFG_P_DELCNFT 244 -#define IDS_CFG_P_DELCNFM 245 -#define IDS_CFG_P_DELCNFS 246 -#define IDS_CFG_P_DELNDEP 247 -#define IDS_CFG_P_ENBCNFT 248 -#define IDS_CFG_P_ENBCNFM 249 -#define IDS_PISTATE_FAILINIT 250 -#define IDS_CFG_P_UNRCNFT 251 -#define IDS_CFG_P_UNRCNFM 252 -#define IDS_CFG_P_UNRCNFS 253 -#define IDS_ACTION_LAYOUT_CUST 254 -#define IDS_APR_HEADER_TEXT 255 -#define IDS_APR_HEADER_TEXT_BOLD 256 -#define IDS_APR_TEXT 257 -#define IDS_APR_TEXT_BOLD 258 -#define IDS_APR_SAMPLE_TEXT_NORMAL 259 -#define IDS_CFG_APPEAR_SHORT 260 -#define IDS_CFG_APPEAR_LONG 261 -#define IDS_ACTION_OPT_APPEAR 262 -#define IDS_APR_SAMPLE_TEXT_SEL 263 -#define IDS_CFG_IDNAME_INV 264 -#define IDS_CFG_IDNAME_PRB 265 -#define IDS_CFG_IDNAME_EXT 266 -#define IDS_CFG_IDNAME_CCR 267 -#define IDS_CFG_IDNAME_CCC 268 -#define IDS_CFG_LOGF_CS 269 -#define IDS_CFG_LOGF_CSR 270 -#define IDS_ACTIONT_PROPERTIES 271 -#define IDS_ACTIONT_EXIT 272 -#define IDS_ACTIONT_SET_DEF_ID 273 -#define IDS_ACTIONT_PASSWD_ID 274 -#define IDS_ACTIONT_NEW_CRED 275 -#define IDS_ACTIONT_RENEW_CRED 276 -#define IDS_ACTIONT_DESTROY_CRED 277 -#define IDS_ACTIONT_VIEW_REFRESH 278 -#define IDS_ACTIONT_OPT_IDENTS 279 -#define IDS_ACTIONT_OPT_KHIM 280 -#define IDS_ACTIONT_OPT_NOTIF 281 -#define IDS_ACTIONT_OPT_PLUGINS 282 -#define IDS_ACTIONT_OPT_APPEAR 283 -#define IDS_ACTIONT_HELP_CTX 284 -#define IDS_ACTIONT_IMPORT 285 -#define IDS_NC_FAILED_TITLE_I 286 -#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 IDS_NCN_IDENT_INVALID 297 -#define IDS_NCN_IDENT_CHECKING 298 -#define IDS_NCN_IDENT_UNKNOWN 299 -#define IDS_REMOTE_FAIL 300 -#define IDS_REMOTE_FAIL_TITLE 301 -#define IDS_IDACTION_NEW 302 -#define IDS_IDACTIONT_NEW 303 -#define IDS_IDACTIONT_RENEW 304 -#define IDS_IDACTIONT_DESTROY 305 -#define IDS_ALERTTYPE_PLUGIN 306 -#define IDS_ALERTTYPE_EXPIRE 307 -#define IDS_ALERTTYPE_RENEWFAIL 308 -#define IDS_ALERTTYPE_ACQUIREFAIL 309 -#define IDS_ALERTTYPE_CHPW 310 -#define IDS_ACTION_LAYOUT_MINI 311 -#define IDS_IDEXPDISP_NOCRED 312 -#define IDS_IDEXPDISP_1CRED 313 -#define IDS_IDEXPDISP_NCRED 314 -#define IDS_CW_DEFAULTTF 315 -#define IDS_CW_TYPEF 316 -#define IDS_CW_EXPIREF 317 -#define IDS_CW_EXPIRED 318 -#define IDS_IDACTIONT_SETDEF 319 -#define IDS_IDACTION_SETDEF 320 -#define IDS_ACTION_VIEW_ALL_IDS 321 -#define IDC_NC_CREDTEXT_LABEL 1009 -#define IDC_NC_CREDTEXT 1012 -#define IDC_NC_HELP 1017 -#define IDC_NC_ADVANCED 1019 -#define IDC_PP_IDNAME 1026 -#define IDC_PP_IDDEF 1027 -#define IDC_PP_IDSEARCH 1028 -#define IDC_PP_PROPLIST 1035 -#define IDC_PP_CPROPLIST 1036 -#define IDC_NC_TPL_ROW 1039 -#define IDC_NC_TPL_PANEL 1040 -#define IDC_NC_TPL_LABEL 1041 -#define IDC_NC_TPL_INPUT 1042 -#define IDC_NC_TPL_LABEL_LG 1043 -#define IDC_NC_TPL_INPUT_LG 1044 -#define IDC_NC_TPL_ROW_LG 1045 -#define IDC_CFG_NODELIST 1045 -#define IDAPPLY 1048 -#define IDC_CFG_TITLE 1050 -#define IDC_CFG_PANE 1051 -#define IDC_NOTIF_MONITOR 1053 -#define IDC_PP_DUMMY 1054 -#define IDC_NOTIF_RENEW 1055 -#define IDC_NOTIF_RENEW_THR 1056 -#define IDC_NOTIF_WARN1 1057 -#define IDC_NOTIF_WARN1_THR 1058 -#define IDC_NOTIF_WARN2 1059 -#define IDC_NOTIF_WARN2_THR 1060 -#define IDC_CFG_KEEPRUNNING 1061 -#define IDC_CFG_STARTUP_GROUP 1062 -#define IDC_CFG_AUTOSTART 1063 -#define IDC_CFG_AUTOIMPORT 1064 -#define IDC_CFG_AUTOINIT 1065 -#define IDC_CFG_OTHER 1066 -#define IDC_CFG_MONITOR 1069 -#define IDC_CFG_STICKY 1070 -#define IDC_CFG_RENEW 1075 -#define IDC_CFG_REMOVE 1076 -#define IDC_CFG_TAB 1077 -#define IDC_CFG_TARGET 1078 -#define IDC_CFG_PLUGINS 1079 -#define IDC_CFG_DESC 1084 -#define IDC_CFG_LBL_STATE 1085 -#define IDC_CFG_STATE 1086 -#define IDC_CFG_LBL_DEPS 1087 -#define IDC_CFG_DEPS 1088 -#define IDC_CFG_DISABLE 1089 -#define IDC_CFG_ENABLE 1090 -#define IDC_CFG_LBL_MOD 1092 -#define IDC_CFG_MODULE 1093 -#define IDC_CFG_LBL_VEN 1094 -#define IDC_CFG_VENDOR 1095 -#define IDC_CFG_REGISTER 1097 -#define IDC_CFG_NETDETECT 1098 -#define IDC_PP_STICKY 1099 -#define IDC_PRODUCT 1100 -#define IDC_COPYRIGHT 1101 -#define IDC_BUILDINFO 1102 -#define IDC_MODULES 1103 -#define IDC_PP_CONFIG 1104 -#define IDC_CFG_UNREGISTER 1107 -#define IDC_CFG_VERSION 1108 -#define IDC_CFG_ICON 1109 -#define IDC_CFG_LOGTOFILE 1110 -#define IDC_CFG_LOGPATH 1111 -#define IDC_NOTIF_HALFLIFE 1112 -#define IDC_CFG_DESTROYALL 1113 -#define IDC_CFG_SAMPLE_NORMAL 1123 -#define IDC_CFG_REVERT 1127 -#define IDC_CFG_FONTS 1128 -#define IDC_CFG_SAMPLE_BOLD 1129 -#define IDC_CFG_SIZE 1130 -#define IDC_CFG_BOLD 1131 -#define IDC_CFG_ITALICS 1132 -#define IDC_CFG_ADDIDENT 1133 -#define IDC_SM_CTL 1134 -#define IDC_CFG_SHOWLOG 1135 -#define IDC_MED_CTL 1135 -#define IDC_LG_CTL 1136 -#define IDC_SM_LBL 1137 -#define IDC_MED_LBL 1138 -#define IDC_LG_LBL 1139 -#define IDC_CFG_NOTACTION 1141 -#define IDC_CFG_NOTACT_STATIC 1142 -#define IDC_NC_BASIC 1143 -#define IDC_CONTENT 1144 -#define IDA_ACTIVATE_MENU 40003 -#define IDA_UP 40004 -#define IDA_DOWN 40005 -#define IDA_LEFT 40006 -#define IDA_RIGHT 40007 -#define IDA_ESC 40008 -#define IDA_ENTER 40009 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 214 -#define _APS_NEXT_COMMAND_VALUE 40010 -#define _APS_NEXT_CONTROL_VALUE 1145 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/src/windows/identity/ui/statusbar.c b/src/windows/identity/ui/statusbar.c deleted file mode 100644 index 51b7ad302..000000000 --- a/src/windows/identity/ui/statusbar.c +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<khmapp.h> -#ifdef DEBUG -#include<assert.h> -#endif - -khm_statusbar_part khm_statusbar_parts[] = { - {KHUI_SBPART_INFO, 0, KHUI_SB_WTYPE_FILLER, NULL}, - {KHUI_SBPART_NOTICE, 40, KHUI_SB_WTYPE_RELATIVE, NULL}, -#if 0 - /* Not implemented. This was originally intended to provide - location information. */ - {KHUI_SBPART_LOC, 40, KHUI_SB_WTYPE_ABSOLUTE, NULL} -#endif -}; - -int khm_n_statusbar_parts = sizeof(khm_statusbar_parts) / sizeof(khm_statusbar_part); - -HWND khm_hwnd_statusbar = NULL; - -LRESULT -khm_statusbar_notify(LPNMHDR nmhdr) { - LPNMMOUSE pnmm; - - switch(nmhdr->code) { - case NM_CLICK: - case NM_DBLCLK: - pnmm = (LPNMMOUSE) nmhdr; - - if (pnmm->dwItemSpec >= (DWORD) khm_n_statusbar_parts) - return TRUE; - - if (khm_statusbar_parts[pnmm->dwItemSpec].id == KHUI_SBPART_NOTICE) { - /* means, show next notification */ - kmq_post_message(KMSG_ALERT, KMSG_ALERT_SHOW_QUEUED, 0, 0); - } - - return TRUE; - } - - return FALSE; -} - -void -khui_statusbar_set_parts(HWND parent) { - int i; - int fillerwidth; - int staticwidth; - int lastx; - int width; - RECT r; - INT * parts; - - GetClientRect(parent, &r); - width = r.right - r.left; - - /* calculate fillerwidth and staticwidth */ - staticwidth = 0; - for(i=0;i<khm_n_statusbar_parts;i++) { - if(khm_statusbar_parts[i].wtype == KHUI_SB_WTYPE_ABSOLUTE) { - staticwidth += khm_statusbar_parts[i].width; - } else if(khm_statusbar_parts[i].wtype == KHUI_SB_WTYPE_RELATIVE) { - staticwidth += (khm_statusbar_parts[i].width * width) / 100; - } - } - - fillerwidth = width - staticwidth; - - parts = PMALLOC(sizeof(INT) * khm_n_statusbar_parts); - - lastx = 0; - for(i=0;i<khm_n_statusbar_parts;i++) { - int w = 0; - switch(khm_statusbar_parts[i].wtype) { - case KHUI_SB_WTYPE_ABSOLUTE: - w = khm_statusbar_parts[i].width; - break; - - case KHUI_SB_WTYPE_RELATIVE: - w = (khm_statusbar_parts[i].width * width) / 100; - break; - - case KHUI_SB_WTYPE_FILLER: - w = fillerwidth; - break; - - default: - w = 0; -#ifdef DEBUG - assert(FALSE); -#endif - } - lastx += w; - - if(i==khm_n_statusbar_parts - 1) - parts[i] = -1; - else - parts[i] = lastx; - } - - SendMessage( - khm_hwnd_statusbar, - SB_SETPARTS, - khm_n_statusbar_parts, - (LPARAM) parts); - - PFREE(parts); -} - -void khm_create_statusbar(HWND parent) { - HWND hwsb; - - hwsb = CreateWindowEx( - 0, - STATUSCLASSNAME, - NULL, - SBARS_SIZEGRIP | WS_CHILD | WS_VISIBLE, - 0,0,0,0, - parent, - NULL, - khm_hInstance, - NULL); - - if(!hwsb) - return; - - khm_hwnd_statusbar = hwsb; - - khui_statusbar_set_parts(parent); - - kmq_post_message(KMSG_ALERT, KMSG_ALERT_CHECK_QUEUE, 0, 0); -} - -void khm_update_statusbar(HWND parent) { - MoveWindow(khm_hwnd_statusbar, 0, 0, 0, 0, TRUE); - khui_statusbar_set_parts(parent); -} - -int sb_find_index(int id) { - int i; - - for(i=0;i<khm_n_statusbar_parts;i++) { - if(khm_statusbar_parts[i].id == id) - return i; - } - - return -1; -} - -void khm_statusbar_set_part(int id, HICON icon, wchar_t * text) { - int idx; - - if (!khm_hwnd_statusbar) - return; - - idx = sb_find_index(id); - if(idx < 0) - return; - - if (khm_statusbar_parts[idx].hIcon != NULL) { - DestroyIcon(khm_statusbar_parts[idx].hIcon); - khm_statusbar_parts[idx].hIcon = NULL; - } - - if (icon) { - khm_statusbar_parts[idx].hIcon = CopyImage(icon, IMAGE_ICON, - GetSystemMetrics(SM_CXSMICON), - GetSystemMetrics(SM_CYSMICON), - LR_COPYFROMRESOURCE); - } - - SendMessage(khm_hwnd_statusbar, - SB_SETICON, - idx, - (LPARAM) (khm_statusbar_parts[idx].hIcon ? khm_statusbar_parts[idx].hIcon:icon)); - - SendMessage(khm_hwnd_statusbar, - SB_SETTEXT, - idx, - (LPARAM) text); -} diff --git a/src/windows/identity/ui/statusbar.h b/src/windows/identity/ui/statusbar.h deleted file mode 100644 index 7b79f69b0..000000000 --- a/src/windows/identity/ui/statusbar.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_STATUSBAR_H -#define __KHIMAIRA_STATUSBAR_H - -typedef struct khm_statusbar_part_t { - int id; - int width; - int wtype; /* one of KHUI_SB_WTYPE_* */ - HICON hIcon; -} khm_statusbar_part; - -#define KHUI_SB_WTYPE_RELATIVE 1 -#define KHUI_SB_WTYPE_ABSOLUTE 2 -#define KHUI_SB_WTYPE_FILLER 4 - -/* statusbar parts */ -#define KHUI_SBPART_INFO 1 -#define KHUI_SBPART_NOTICE 2 -#define KHUI_SBPART_LOC 3 - -extern HWND khm_hwnd_statusbar; -extern khm_statusbar_part khm_statusbar_parts[]; -extern int khm_n_statusbar_parts; - -void khm_create_statusbar(HWND p); -void khm_update_statusbar(HWND parent); -void khm_statusbar_set_part(int id, HICON icon, wchar_t * text); -LRESULT khm_statusbar_notify(LPNMHDR nmhdr); - -#endif diff --git a/src/windows/identity/ui/taskbar.c b/src/windows/identity/ui/taskbar.c deleted file mode 100644 index 48a575f64..000000000 --- a/src/windows/identity/ui/taskbar.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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<khmapp.h> - -#define COBJMACROS - -#include<shobjidl.h> - -#ifdef DEBUG -#include<assert.h> -#endif - -ITaskbarList *itbl = NULL; - -void -khm_init_taskbar_funcs(void) { - HRESULT hr = NOERROR; - - hr = CoCreateInstance(&CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, - &IID_ITaskbarList, &itbl); - -#ifdef DEBUG - assert(itbl != NULL); -#endif - - if (itbl) { - hr = ITaskbarList_HrInit(itbl); -#ifdef DEBUG - assert(hr == NOERROR); -#endif - } -} - -void -khm_exit_taskbar_funcs(void) { - if (itbl) { - ITaskbarList_Release(itbl); - } -} - -void -khm_taskbar_add_window(HWND hwnd) { - HRESULT hr = NOERROR; - - if (itbl) { - hr = ITaskbarList_AddTab(itbl, hwnd); -#ifdef DEBUG - assert(hr == NOERROR); -#endif - } -} - -void -khm_taskbar_remove_window(HWND hwnd) { - HRESULT hr = NOERROR; - - if (itbl) { - hr = ITaskbarList_DeleteTab(itbl, hwnd); -#ifdef DEBUG - assert(hr == NOERROR); -#endif - } -} diff --git a/src/windows/identity/ui/taskbar.h b/src/windows/identity/ui/taskbar.h deleted file mode 100644 index 32adf5c29..000000000 --- a/src/windows/identity/ui/taskbar.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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_TASKBAR_H -#define NETIDMGR_TASKBAR_H - -void khm_init_taskbar_funcs(void); - -void khm_exit_taskbar_funcs(void); - -void khm_taskbar_add_window(HWND hwnd); - -void khm_taskbar_remove_window(HWND hwnd); - -#endif diff --git a/src/windows/identity/ui/timer.c b/src/windows/identity/ui/timer.c deleted file mode 100644 index b481ead37..000000000 --- a/src/windows/identity/ui/timer.c +++ /dev/null @@ -1,1015 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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<khmapp.h> -#include<assert.h> - -/* The minimum half time interval is 60 seconds*/ -#define TT_MIN_HALFLIFE_INTERVAL 60 - -/* as above, in FILETIME units of 100ns */ -#define FT_MIN_HALFLIFE_INTERVAL (TT_MIN_HALFLIFE_INTERVAL * 10000000i64) - -/* in seconds */ -#if 0 -khm_int32 khui_timeout_warn = KHUI_DEF_TIMEOUT_WARN; -khm_int32 khui_timeout_crit = KHUI_DEF_TIMEOUT_CRIT; -khm_int32 khui_timeout_renew = KHUI_DEF_TIMEOUT_RENEW; - -khm_boolean khui_do_renew = TRUE; -khm_boolean khui_do_warn = TRUE; -khm_boolean khui_do_crit = TRUE; -#endif - -khui_timer_event * khui_timers = NULL; -khm_size khui_n_timers = 0; -khm_size khui_nc_timers = 0; - -CRITICAL_SECTION cs_timers; - -/********************************************************************* - Timers - *********************************************************************/ - - -#define KHUI_TIMER_ALLOC_INCR 16 - -void -khm_timer_init(void) { -#ifdef DEBUG - assert(khui_timers == NULL); -#endif - - khui_nc_timers = KHUI_TIMER_ALLOC_INCR; - khui_n_timers = 0; - khui_timers = PMALLOC(sizeof(*khui_timers) * khui_nc_timers); - -#ifdef DEBUG - assert(khui_timers != NULL); -#endif - - InitializeCriticalSection(&cs_timers); -} - -void -khm_timer_exit(void) { - EnterCriticalSection(&cs_timers); - - if (khui_timers) - PFREE(khui_timers); - khui_timers = NULL; - khui_n_timers = 0; - khui_nc_timers = 0; - - LeaveCriticalSection(&cs_timers); - DeleteCriticalSection(&cs_timers); -} - -/* called with cs_timers held */ -static void -tmr_fire_timer(void) { - int i; - khm_int64 curtime; - khm_int64 err; - khm_int64 next_event; - int tmr_count[KHUI_N_TTYPES]; - khm_int64 tmr_offset[KHUI_N_TTYPES]; - int t; - khm_handle eff_ident = NULL; - khui_timer_type eff_type = 0; /* meaningless */ - int fire_count = 0; - FILETIME ft; - - _begin_task(0); - _report_cs0(KHERR_DEBUG_1, L"Checking for expired timers"); - _describe(); - - TimetToFileTimeInterval(KHUI_TIMEEQ_ERROR_SMALL, &ft); - err = FtToInt(&ft); - GetSystemTimeAsFileTime(&ft); - curtime = FtToInt(&ft); - - next_event = 0; - - ZeroMemory(tmr_count, sizeof(tmr_count)); - ZeroMemory(tmr_offset, sizeof(tmr_offset)); - - for (i=0; i < (int) khui_n_timers; i++) { - if (!(khui_timers[i].flags & - (KHUI_TE_FLAG_STALE | KHUI_TE_FLAG_EXPIRED)) && - khui_timers[i].type != KHUI_TTYPE_ID_MARK && - khui_timers[i].expire < curtime + err) { - - _report_cs3(KHERR_DEBUG_1, L"Expiring timer index=%1!d!, type=%2!d!, key=%3!p!", - _int32(i), _int32(khui_timers[i].type), - _cptr(khui_timers[i].key)); - - t = khui_timers[i].type; - - switch(t) { - case KHUI_TTYPE_ID_RENEW: - _report_cs1(KHERR_DEBUG_1, L"Renewing identity %1!p!", - _cptr(khui_timers[i].key)); - khm_cred_renew_identity(khui_timers[i].key); - khui_timers[i].flags |= KHUI_TE_FLAG_EXPIRED; - break; - - case KHUI_TTYPE_CRED_RENEW: - /* the equivalence threshold for setting the timer is - a lot larger than what we are testing for here - (KHUI_TIMEEQ_ERROR vs KHUI_TIMEEQ_ERROR_SMALL) so - we assume that it is safe to trigger a renew_cred - call here without checking if there's an imminent - renew_identity call. */ - _report_cs1(KHERR_DEBUG_1, L"Renewing credential %1!p!", - _cptr(khui_timers[i].key)); - khm_cred_renew_cred(khui_timers[i].key); - khui_timers[i].flags |= KHUI_TE_FLAG_EXPIRED; - break; - - default: - if (t < KHUI_N_TTYPES) { - tmr_count[t]++; - if (tmr_offset[t] == 0 || - tmr_offset[t] > khui_timers[i].offset) - tmr_offset[t] = khui_timers[i].offset; - if (next_event == 0 || - next_event > - khui_timers[i].expire + khui_timers[i].offset) - next_event = khui_timers[i].expire + - khui_timers[i].offset; - - if (eff_ident == NULL && - (t == KHUI_TTYPE_ID_EXP || - t == KHUI_TTYPE_ID_CRIT || - t == KHUI_TTYPE_ID_WARN)) { - /* we don't need a hold since we will be done - with the handle before the marker is - expired (the marker is the timer with the - KHUI_TTYPE_ID_MARK which contains a held - handle and is not really a timer.) */ - eff_ident = khui_timers[i].key; - eff_type = t; - } - - fire_count++; - - khui_timers[i].flags |= KHUI_TE_FLAG_EXPIRED; - } - else { -#ifdef DEBUG - assert(FALSE); -#endif - } - } - } - } - - /* See if we have anything to do */ - if (next_event == 0) - return; - else { - wchar_t fmt[128]; - wchar_t wtime[128]; - wchar_t wmsg[256]; - wchar_t wtitle[64]; - khm_int64 second; - khui_alert * alert = NULL; - - khm_size cb; - - next_event -= curtime; - - /* Due to measurement errors we may be slightly off on our - next_event calculation which shows up as '4 mins 59 - seconds' instead of '5 mins' and so on when converting to a - string. So we add half a second to make the message - neater. */ - TimetToFileTimeInterval(1, &ft); - second = FtToInt(&ft); - next_event += second / 2; - - cb = sizeof(wtime); - ft = IntToFt(next_event); - FtIntervalToString(&ft, - wtime, - &cb); - - if (fire_count == 1 && - eff_ident != NULL && - (eff_type == KHUI_TTYPE_ID_EXP || - eff_type == KHUI_TTYPE_ID_CRIT || - eff_type == KHUI_TTYPE_ID_WARN)) { - - wchar_t idname[KCDB_IDENT_MAXCCH_NAME]; - - cb = sizeof(idname); - kcdb_identity_get_name(eff_ident, idname, &cb); - - if (next_event < second) { - LoadString(khm_hInstance, IDS_WARN_EXPIRED_ID, - fmt, ARRAYLENGTH(fmt)); - - StringCbPrintf(wmsg, sizeof(wmsg), fmt, idname); - } else { - LoadString(khm_hInstance, IDS_WARN_EXPIRE_ID, - fmt, ARRAYLENGTH(fmt)); - - StringCbPrintf(wmsg, sizeof(wmsg), fmt, idname, wtime); - } - } else { - if (next_event < second) { - LoadString(khm_hInstance, IDS_WARN_EXPIRED, - wmsg, ARRAYLENGTH(wmsg)); - } else { - LoadString(khm_hInstance, IDS_WARN_EXPIRE, - fmt, ARRAYLENGTH(fmt)); - - StringCbPrintf(wmsg, sizeof(wmsg), fmt, wtime); - } - } - - LoadString(khm_hInstance, IDS_WARN_TITLE, - wtitle, ARRAYLENGTH(wtitle)); - - khui_alert_create_simple(wtitle, wmsg, KHERR_WARNING, &alert); - khui_alert_set_flags(alert, - KHUI_ALERT_FLAG_REQUEST_BALLOON | KHUI_ALERT_FLAG_DISPATCH_CMD, - KHUI_ALERT_FLAG_REQUEST_BALLOON | KHUI_ALERT_FLAG_DISPATCH_CMD); - - if (eff_ident != NULL) { - khm_int32 cmd; - - cmd = khm_get_identity_new_creds_action(eff_ident); - - if (cmd) { - khui_alert_add_command(alert, cmd); - khui_alert_add_command(alert, KHUI_PACTION_CLOSE); - } - } - - khui_alert_show(alert); - khui_alert_release(alert); - } - - _end_task(); - -} - -void -khm_timer_fire(HWND hwnd) { - EnterCriticalSection(&cs_timers); - tmr_fire_timer(); - LeaveCriticalSection(&cs_timers); - - khm_timer_refresh(hwnd); -} - -static int -tmr_update(khm_handle key, khui_timer_type type, __int64 expire, - __int64 offset, void * data, khm_boolean reinstate) { - int i; - wchar_t name[KCDB_MAXCCH_NAME]; - wchar_t tstamp[128]; - wchar_t *type_str = NULL; - SYSTEMTIME st; - FILETIME ft; - FILETIME ftl; - khm_size cb; - - switch(type) { - case KHUI_TTYPE_ID_MARK: - type_str = L"marker"; - break; - - case KHUI_TTYPE_CRED_WARN: - case KHUI_TTYPE_ID_WARN: - type_str = L"warning"; - break; - - case KHUI_TTYPE_CRED_CRIT: - case KHUI_TTYPE_ID_CRIT: - type_str = L"critical"; - break; - - case KHUI_TTYPE_CRED_EXP: - case KHUI_TTYPE_ID_EXP: - type_str = L"expiry"; - break; - - case KHUI_TTYPE_CRED_RENEW: - case KHUI_TTYPE_ID_RENEW: - type_str = L"renew"; - break; - } - - ft = IntToFt(expire); - FileTimeToLocalFileTime(&ft, &ftl); - FileTimeToSystemTime(&ftl, &st); - StringCbPrintf(tstamp, sizeof(tstamp), - L"%d-%d-%d %d:%d:%d", - st.wYear, st.wMonth, st.wDay, - st.wHour, st.wMinute, st.wSecond); - - cb = sizeof(name); name[0] = L'\0'; - if (type_str == NULL) { - - _report_cs2(KHERR_DEBUG_1, - L"Updating uknown timer of type %1!d! exp(%2!s!)", - _int32(type), - _cstr(tstamp)); - _resolve(); - - } else if (type == KHUI_TTYPE_ID_MARK || - type == KHUI_TTYPE_ID_WARN || - type == KHUI_TTYPE_ID_CRIT || - type == KHUI_TTYPE_ID_EXP || - type == KHUI_TTYPE_ID_RENEW) { - - kcdb_identity_get_name(key, name, &cb); - _report_cs3(KHERR_DEBUG_1, - L"Updating identity %1!s! timer for %2!s! exp(%3!s!)", - _cstr(type_str), - _cstr(name), - _cstr(tstamp)); - _resolve(); - - } else if (type == KHUI_TTYPE_CRED_RENEW || - type == KHUI_TTYPE_CRED_WARN || - type == KHUI_TTYPE_CRED_CRIT || - type == KHUI_TTYPE_CRED_EXP) { - - kcdb_cred_get_name(key, name, &cb); - _report_cs3(KHERR_DEBUG_1, - L"Updating credential %1!s! timer for %2!s! exp(%3!s!)", - _cstr(type_str), - _cstr(name), - _cstr(tstamp)); - _resolve(); - - } - - for (i=0; i < (int) khui_n_timers; i++) { - if (khui_timers[i].key == key && - khui_timers[i].type == type) - break; - } - - if (i >= (int) khui_n_timers) { - i = (int) khui_n_timers; - - if (i >= (int) khui_nc_timers) { - khui_timer_event * nt; -#ifdef DEBUG - assert(khui_timers); -#endif - khui_nc_timers = UBOUNDSS(i+1, KHUI_TIMER_ALLOC_INCR, - KHUI_TIMER_ALLOC_INCR); - nt = PMALLOC(sizeof(*nt) * khui_nc_timers); -#ifdef DEBUG - assert(nt); -#endif - memcpy(nt, khui_timers, sizeof(*nt) * khui_n_timers); - - PFREE(khui_timers); - khui_timers = nt; - } - - khui_timers[i].key = key; - khui_timers[i].type = type; - khui_timers[i].flags = 0; - khui_n_timers++; - } - - khui_timers[i].expire = expire; - khui_timers[i].offset = offset; - khui_timers[i].data = data; - - khui_timers[i].flags &= ~KHUI_TE_FLAG_STALE; - if (reinstate) - khui_timers[i].flags &= ~KHUI_TE_FLAG_EXPIRED; - - return i; -} - -/* called with cs_timers held */ -static int -tmr_find(khm_handle key, khui_timer_type type, - khm_int32 and_flags, khm_int32 eq_flags) { - int i; - - eq_flags &= and_flags; - - for (i=0; i < (int) khui_n_timers; i++) { - if (khui_timers[i].key == key && - khui_timers[i].type == type && - (khui_timers[i].flags & and_flags) == eq_flags) - break; - } - - if (i < (int) khui_n_timers) - return i; - else - return -1; -} - -/* called with cs_timers held. */ -static FILETIME -tmr_next_halflife_timeout(int idx, FILETIME * issue, FILETIME * expire) { - FILETIME lifetime; - FILETIME current; - FILETIME ret; - - khm_int64 ilife; - khm_int64 icurrent; - khm_int64 iexpire; - - khm_int64 iret; - - GetSystemTimeAsFileTime(&current); - - /* wha?? */ - if (CompareFileTime(issue, expire) >= 0) - return current; - - lifetime = FtSub(expire, issue); - icurrent = FtToInt(&current); - iexpire = FtToInt(expire); - - ilife = FtToInt(&lifetime); - - while(ilife / 2 > FT_MIN_HALFLIFE_INTERVAL) { - ilife /= 2; - - /* is this the next renewal time? */ - if (iexpire - ilife > icurrent) { - if (idx >= 0 && - khui_timers[idx].expire == iexpire - ilife && - (khui_timers[idx].flags & KHUI_TE_FLAG_EXPIRED)) { - - /* if this renewal time has already been triggered - (note that when the timer fires, it also fires all - events that are within a few seconds of the current - time) then we need to set the alarm for the next - slot down the line. */ - - continue; - - } else { - break; - } - } - } - - iret = iexpire - ilife; - - ret = IntToFt(iret); - - /* if the previous renew timer had fired, we need to mark it as - not expired. However, we leave it to the caller to update the - actual timer and mark it as not stale. */ - if (idx >= 0 && - khui_timers[idx].expire < iret) { - - khui_timers[idx].flags &= ~KHUI_TE_FLAG_EXPIRED; - khui_timers[idx].expire = iret; - } - - return ret; -} - -/* called with cs_timers held. Called once for each credential in the - root credentials set. */ -static khm_int32 KHMAPI -tmr_cred_apply_proc(khm_handle cred, void * rock) { - khm_handle ident = NULL; - int mark_idx; - int idx; - FILETIME ft_expiry; - FILETIME ft_current; - FILETIME ft_creinst; - FILETIME ft_cred_expiry; - FILETIME ft_cred_issue; - FILETIME ft_issue; - FILETIME ft; - FILETIME fte; - FILETIME ft_reinst; - khm_size cb; - wchar_t wname[KCDB_MAXCCH_NAME]; - - cb = sizeof(wname); - wname[0] = L'\0'; - kcdb_cred_get_name(cred, wname, &cb); - - _report_cs1(KHERR_DEBUG_1, L"Looking at cred [%1!s!]", - _cstr(wname)); - _resolve(); - - kcdb_cred_get_identity(cred, &ident); -#ifdef DEBUG - assert(ident); -#endif - - /* now get the expiry for the identity*/ - cb = sizeof(ft_expiry); - if (KHM_FAILED(kcdb_identity_get_attr(ident, KCDB_ATTR_EXPIRE, - NULL, - &ft_expiry, &cb))) { - - /* failing which, we get the expiry for this credential */ - cb = sizeof(ft_expiry); - if (KHM_FAILED(kcdb_cred_get_attr(cred, KCDB_ATTR_EXPIRE, - NULL, - &ft_expiry, &cb))) { - /* we don't have an expiry time to work with */ - _report_cs1(KHERR_DEBUG_1, L"Skipping cred [%1!s!]. No expiry time", - _cstr(wname)); - _resolve(); - - kcdb_identity_release(ident); - return KHM_ERROR_SUCCESS; - } else { - /* and the time of issue */ - cb = sizeof(ft_issue); - if (KHM_FAILED(kcdb_cred_get_attr(cred, KCDB_ATTR_ISSUE, - NULL, &ft_issue, &cb))) - ZeroMemory(&ft_issue, sizeof(ft_issue)); - } - - } else { - /* also try to get the time of issue. */ - cb = sizeof(ft_issue); - if (KHM_FAILED(kcdb_identity_get_attr(ident, KCDB_ATTR_ISSUE, - NULL, &ft_issue, &cb))) - /* if we fail, we just zero out the time of issue and - failover to using the threshold value to set the expiry - timer instead of the half life algorithm. */ - ZeroMemory(&ft_issue, sizeof(ft_issue)); - } - - /* and the current time */ - GetSystemTimeAsFileTime(&ft_current); - - TimetToFileTimeInterval(KHUI_TIMEEQ_ERROR, &ft_reinst); - - ft_creinst = FtAdd(&ft_current, &ft_reinst); - - mark_idx = tmr_find(ident, KHUI_TTYPE_ID_MARK, 0, 0); - - if (mark_idx < 0) { - mark_idx = tmr_update(ident, KHUI_TTYPE_ID_MARK, 0, 0, 0, FALSE); - kcdb_identity_hold(ident); -#ifdef DEBUG - assert(mark_idx >= 0); -#endif - khui_timers[mark_idx].flags |= KHUI_TE_FLAG_STALE; - } - - if (khui_timers[mark_idx].flags & KHUI_TE_FLAG_STALE) { - /* first time we are touching this */ - khm_handle csp_cw = NULL; - khm_handle csp_id = NULL; - khm_int32 rv; - khm_int32 t; - khm_boolean do_warn = TRUE; - khm_boolean do_crit = TRUE; - khm_boolean do_renew = TRUE; - khm_boolean do_halflife = TRUE; - khm_boolean renew_done = FALSE; - khm_boolean monitor = TRUE; - khm_int32 to_warn = KHUI_DEF_TIMEOUT_WARN; - khm_int32 to_crit = KHUI_DEF_TIMEOUT_CRIT; - khm_int32 to_renew = KHUI_DEF_TIMEOUT_RENEW; - - if (CompareFileTime(&ft_expiry, &ft_current) < 0) - /* already expired */ - goto _done_with_ident; - - rv = khc_open_space(NULL, L"CredWindow", KHM_PERM_READ, - &csp_cw); - - assert(KHM_SUCCEEDED(rv)); - - rv = kcdb_identity_get_config(ident, KHM_PERM_READ, &csp_id); - if (KHM_SUCCEEDED(rv)) { - khc_shadow_space(csp_id, csp_cw); - khc_close_space(csp_cw); - } else { - csp_id = csp_cw; - } - csp_cw = NULL; - - rv = khc_read_int32(csp_id, L"Monitor", &t); - if (KHM_SUCCEEDED(rv)) - monitor = t; - - rv = khc_read_int32(csp_id, L"AllowWarn", &t); - if (KHM_SUCCEEDED(rv)) - do_warn = t; - - rv = khc_read_int32(csp_id, L"AllowCritical", &t); - if (KHM_SUCCEEDED(rv)) - do_crit = t; - - rv = khc_read_int32(csp_id, L"AllowAutoRenew", &t); - if (KHM_SUCCEEDED(rv)) - do_renew = t; - - rv = khc_read_int32(csp_id, L"RenewAtHalfLife", &t); - if (KHM_SUCCEEDED(rv)) - do_halflife = t; - - rv = khc_read_int32(csp_id, L"WarnThreshold", &t); - if (KHM_SUCCEEDED(rv)) - to_warn = t; - - rv = khc_read_int32(csp_id, L"CriticalThreshold", &t); - if (KHM_SUCCEEDED(rv)) - to_crit = t; - - rv = khc_read_int32(csp_id, L"AutoRenewThreshold", &t); - if (KHM_SUCCEEDED(rv)) - to_renew = t; - - khc_close_space(csp_id); - - if (monitor && do_renew) { - int prev; - - TimetToFileTimeInterval(to_renew, &ft); - - prev = - tmr_find(ident, KHUI_TTYPE_ID_RENEW, 0, 0); - - if (do_halflife && (ft_issue.dwLowDateTime != 0 || - ft_issue.dwHighDateTime != 0)) - fte = tmr_next_halflife_timeout(prev, &ft_issue, &ft_expiry); - else - fte = FtSub(&ft_expiry, &ft); - - /* we set off a renew notification immediately if the - renew threshold has passed but a renew was never sent. - This maybe because that NetIDMgr was started at the - last minute, or because for some reason the renew timer - could not be triggered earlier. */ - - if (CompareFileTime(&fte, &ft_current) > 0 || - prev == -1 || - !(khui_timers[prev].flags & KHUI_TE_FLAG_EXPIRED)) { - - if (CompareFileTime(&fte, &ft_current) < 0) - fte = ft_current; - - tmr_update(ident, KHUI_TTYPE_ID_RENEW, - FtToInt(&fte), FtToInt(&ft), 0, - CompareFileTime(&fte,&ft_creinst) > 0); - renew_done = TRUE; - - } else { - - /* special case. If the renew timer was in the past - and it was expired, then we retain the record as - long as the credentials are around. If the renewal - failed we don't want to automatically retry - everytime we check the timers. */ - - tmr_update(ident, KHUI_TTYPE_ID_RENEW, - FtToInt(&fte), FtToInt(&ft), 0, FALSE); - - } - } - - if (monitor && do_warn && !renew_done) { - - TimetToFileTimeInterval(to_warn, &ft); - fte = FtSub(&ft_expiry, &ft); - - if (CompareFileTime(&fte, &ft_current) > 0) - tmr_update(ident, KHUI_TTYPE_ID_WARN, - FtToInt(&fte), FtToInt(&ft), 0, - CompareFileTime(&fte, &ft_creinst) > 0); - } - - if (monitor && do_crit && !renew_done) { - TimetToFileTimeInterval(to_crit, &ft); - fte = FtSub(&ft_expiry, &ft); - - if (CompareFileTime(&fte, &ft_current) > 0) - tmr_update(ident, KHUI_TTYPE_ID_CRIT, - FtToInt(&fte), FtToInt(&ft), 0, - CompareFileTime(&fte, &ft_creinst) > 0); - } - - if (monitor && !renew_done) { - if (CompareFileTime(&ft_expiry, &ft_current) > 0) - tmr_update(ident, KHUI_TTYPE_ID_EXP, - FtToInt(&ft_expiry), 0, 0, - CompareFileTime(&fte, &ft_creinst) > 0); - } - - _done_with_ident: - khui_timers[mark_idx].flags &= ~KHUI_TE_FLAG_STALE; - } - - cb = sizeof(ft_cred_expiry); - if (KHM_FAILED(kcdb_cred_get_attr(cred, KCDB_ATTR_EXPIRE, - NULL, - &ft_cred_expiry, - &cb))) { - _report_cs1(KHERR_DEBUG_1, L"Skipping cred [%1!s!]. Can't lookup cred expiry", - _cstr(wname)); - _resolve(); - goto _cleanup; - } - - cb = sizeof(ft_cred_issue); - if (KHM_FAILED(kcdb_cred_get_attr(cred, KCDB_ATTR_ISSUE, - NULL, - &ft_cred_issue, - &cb))) { - - ZeroMemory(&ft_cred_issue, sizeof(ft_cred_issue)); - - } - - TimetToFileTimeInterval(KHUI_TIMEEQ_ERROR, &ft); - - { - /* if the credential has a longer lifetime than the identity, - or it expires within KHUI_TIMEEQ_ERROR seconds of the - identity, then we don't need to set any alerts for this - credential. */ - - FILETIME ft_delta; - - ft_delta = FtSub(&ft_expiry, &ft_cred_expiry); - - if (CompareFileTime(&ft_cred_expiry, &ft_expiry) >= 0 || - CompareFileTime(&ft_delta, &ft) < 0) { - - _report_cs1(KHERR_DEBUG_1, - L"Skipping credential [%1!s!]. The expiry time is too close to the identity expiry.", - _cstr(wname)); - _resolve(); - goto _cleanup; - } - } - - if ((idx = tmr_find(ident, KHUI_TTYPE_ID_WARN, 0, 0)) >= 0 && - !(khui_timers[idx].flags & KHUI_TE_FLAG_STALE)) { - - fte = IntToFt(FtToInt(&ft_cred_expiry) - khui_timers[idx].offset); - if (CompareFileTime(&fte, &ft_current) > 0) { - tmr_update(cred, KHUI_TTYPE_CRED_WARN, - FtToInt(&fte), - khui_timers[idx].offset, 0, - CompareFileTime(&fte, &ft_creinst) > 0); - kcdb_cred_hold(cred); - } - } - - if ((idx = tmr_find(ident, KHUI_TTYPE_ID_CRIT, 0, 0)) >= 0 && - !(khui_timers[idx].flags & KHUI_TE_FLAG_STALE)) { - - fte = IntToFt(FtToInt(&ft_cred_expiry) - khui_timers[idx].offset); - if (CompareFileTime(&fte, &ft_current) > 0) { - tmr_update(cred, KHUI_TTYPE_CRED_CRIT, - FtToInt(&fte), - khui_timers[idx].offset, 0, - CompareFileTime(&fte, &ft_creinst) > 0); - kcdb_cred_hold(cred); - } - } - - if ((idx = tmr_find(ident, KHUI_TTYPE_ID_RENEW, 0, 0)) >= 0 && - !(khui_timers[idx].flags & KHUI_TE_FLAG_STALE)) { - - int cidx = tmr_find(cred, KHUI_TTYPE_CRED_RENEW, 0, 0); - - if (ft_cred_issue.dwLowDateTime == 0 && - ft_cred_issue.dwHighDateTime == 0) { - fte = IntToFt(FtToInt(&ft_cred_expiry) - khui_timers[idx].offset); - /* a special case, for a credential whose remaining - lifetime is less than the offset, we try half life on - the current time and the expiry. */ - if (CompareFileTime(&fte, &ft_current) <= 0 && - CompareFileTime(&ft_current, &ft_expiry) < 0) { - fte = tmr_next_halflife_timeout(cidx, &ft_current, &ft_cred_expiry); -#if 0 - /* now, if we already have a renew timer for this - credential that hasn't expired yet and that is set - for earlier than fte, we let it be. */ - if (cidx >= 0 && - khui_timers[cidx].expire < FtToInt(&fte) && - khui_timers[cidx].expire > FtToInt(&ft_current) && - !(khui_timers[cidx].flags & KHUI_TE_FLAG_EXPIRED)) { - - fte = IntToFt(khui_timers[cidx].expire); - - } -#endif - } - } else { - fte = tmr_next_halflife_timeout(cidx, &ft_cred_issue, &ft_cred_expiry); - } - - if (CompareFileTime(&fte, &ft_current) > 0) { - tmr_update(cred, KHUI_TTYPE_CRED_RENEW, - FtToInt(&fte), - khui_timers[idx].offset, 0, - CompareFileTime(&fte, &ft_creinst) > 0); - kcdb_cred_hold(cred); - } - } - - if ((idx = tmr_find(ident, KHUI_TTYPE_ID_EXP, 0, 0)) >= 0 && - !(khui_timers[idx].flags & KHUI_TE_FLAG_STALE)) { - - if (CompareFileTime(&ft_cred_expiry, &ft_current) > 0) { - tmr_update(cred, KHUI_TTYPE_CRED_EXP, - FtToInt(&ft_cred_expiry), - 0, 0, - CompareFileTime(&ft_cred_expiry, &ft_creinst) > 0); - } - } - - _cleanup: - - if (ident) - kcdb_identity_release(ident); - - return KHM_ERROR_SUCCESS; -} - -/* called with cs_timers held */ -static void -tmr_purge(void) { - int i, j; - - for (i=0,j=0; i < (int) khui_n_timers; i++) { - if (khui_timers[i].flags & KHUI_TE_FLAG_STALE) { - if (khui_timers[i].type == KHUI_TTYPE_ID_MARK) { - kcdb_identity_release(khui_timers[i].key); -#ifdef DEBUG - { - int idx; - - idx = tmr_find(khui_timers[i].key, - KHUI_TTYPE_ID_CRIT, 0, 0); - assert(idx < 0 || - (khui_timers[idx].flags & - KHUI_TE_FLAG_STALE)); - - idx = tmr_find(khui_timers[i].key, - KHUI_TTYPE_ID_RENEW, 0, 0); - assert(idx < 0 || - (khui_timers[idx].flags & - KHUI_TE_FLAG_STALE)); - - idx = tmr_find(khui_timers[i].key, - KHUI_TTYPE_ID_WARN, 0, 0); - assert(idx < 0 || - (khui_timers[idx].flags & - KHUI_TE_FLAG_STALE)); - - idx = tmr_find(khui_timers[i].key, - KHUI_TTYPE_ID_EXP, 0, 0); - assert(idx < 0 || - (khui_timers[idx].flags & - KHUI_TE_FLAG_STALE)); - } -#endif - } else if (khui_timers[i].type == KHUI_TTYPE_CRED_WARN || - khui_timers[i].type == KHUI_TTYPE_CRED_CRIT || - khui_timers[i].type == KHUI_TTYPE_CRED_RENEW || - khui_timers[i].type == KHUI_TTYPE_CRED_EXP) { - kcdb_cred_release(khui_timers[i].key); - } - } else { - if (i != j) - khui_timers[j] = khui_timers[i]; - j++; - } - } - - khui_n_timers = j; -} - -/* go through all the credentials and set timers as appropriate. hwnd - is the window that will receive the timer events.*/ -void -khm_timer_refresh(HWND hwnd) { - int i; - khm_int64 next_event = 0; - khm_int64 curtime; - khm_int64 diff; - - _begin_task(0); - _report_cs0(KHERR_DEBUG_1, L"Refreshing timers"); - _describe(); - - EnterCriticalSection(&cs_timers); - - KillTimer(hwnd, KHUI_TRIGGER_TIMER_ID); - - /* When refreshing timers, we go through all of them and mark them - as stale. Then we go through the credentials in the root - credential set and add or refresh the timers associated with - each identity and credential. Once this is done, we remove the - timers that are still stale, since they are no longer in - use. */ - - for (i=0; i < (int) khui_n_timers; i++) { -#ifdef NOT_IMPLEMENTED_YET - if (khui_timers[i].type == KHUI_TTYPE_BMSG || - khui_timers[i].type == KHUI_TTYPE_SMSG) { - khui_timers[i].flags &= ~KHUI_TE_FLAG_STALE; - } else { -#endif - - khui_timers[i].flags |= KHUI_TE_FLAG_STALE; - -#ifdef NOT_IMPLEMENTED_YET - } -#endif - } - - _report_cs1(KHERR_DEBUG_1, L"Starting with %1!d! timers", - _int32(khui_n_timers)); - - kcdb_credset_apply(NULL, - tmr_cred_apply_proc, - NULL); - - tmr_purge(); - - _report_cs1(KHERR_DEBUG_1, L"Leaving with %1!d! timers", - _int32(khui_n_timers)); - - _check_next_event: - - /* Before we return, we should check if any timers are set to - expire right now. If there are, we should fire the timer - before returning. */ - - next_event = 0; - for (i=0; i < (int) khui_n_timers; i++) { - if (!(khui_timers[i].flags & KHUI_TE_FLAG_EXPIRED) && - khui_timers[i].type != KHUI_TTYPE_ID_MARK && - (next_event == 0 || - next_event > khui_timers[i].expire)) { - - next_event = khui_timers[i].expire; - - } - } - - if (next_event != 0) { - FILETIME ft; - - GetSystemTimeAsFileTime(&ft); - curtime = FtToInt(&ft); - - TimetToFileTimeInterval(KHUI_TIMEEQ_ERROR_SMALL, &ft); - diff = FtToInt(&ft); - - if (curtime + diff > next_event) { - tmr_fire_timer(); - goto _check_next_event; - } else { - diff = next_event - curtime; - ft = IntToFt(diff); - SetTimer(hwnd, - KHUI_TRIGGER_TIMER_ID, - FtIntervalToMilliseconds(&ft), - NULL); - } - } - - LeaveCriticalSection(&cs_timers); - - _end_task(); -} diff --git a/src/windows/identity/ui/timer.h b/src/windows/identity/ui/timer.h deleted file mode 100644 index 91ca52032..000000000 --- a/src/windows/identity/ui/timer.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_TIMER_H -#define __KHIMAIRA_TIMER_H - -/* note that the ordering of the first few enum constants are - significant. The values of the constants up to KHUI_N_TTYPES are - used as indices. */ -typedef enum tag_khui_timer_type { - KHUI_TTYPE_ID_EXP = 0, /* Identity expiration */ - KHUI_TTYPE_ID_CRIT, /* Identity critical */ - KHUI_TTYPE_ID_WARN, /* Identity warning */ - KHUI_TTYPE_CRED_EXP, /* Credential expiration */ - KHUI_TTYPE_CRED_CRIT, /* Credential critical */ - KHUI_TTYPE_CRED_WARN, /* Credential warning */ - - KHUI_N_TTYPES, /* Count of the timers that we - aggregate for notifications */ - - KHUI_TTYPE_ID_MARK, /* Identity marker */ - - KHUI_TTYPE_ID_RENEW, /* Identity auto renewal */ - KHUI_TTYPE_CRED_RENEW, /* Credential renewal */ - -#if 0 - KHUI_TTYPE_BMSG, /* Custom. Sends broadcast message - when triggered.*/ - KHUI_TTYPE_SMSG, /* Custom. Sends subscription message - when triggered. */ -#endif -} khui_timer_type; - -typedef struct tag_khui_timer_event { - khm_handle key; - khui_timer_type type; - - khm_int64 expire; /* time at which the timer expires */ - khm_int64 offset; /* time offset at which the event that the - timer warns of happens */ - void * data; - khm_int32 flags; -} khui_timer_event; - -#define KHUI_TRIGGER_TIMER_ID 48 -#define KHUI_REFRESH_TIMER_ID 49 - -#define KHUI_REFRESH_TIMEOUT 5000 - -#define KHUI_TE_FLAG_EXPIRED 0x00000001 -#define KHUI_TE_FLAG_STALE 0x00000002 - -#define KHUI_DEF_TIMEOUT_WARN 900 -#define KHUI_DEF_TIMEOUT_CRIT 300 -#define KHUI_DEF_TIMEOUT_RENEW 60 - -/* the max absolute difference between two timers (in seconds) that - can exist where we consider both timers to be in the same - timeslot. */ -#define KHUI_TIMEEQ_ERROR 20 - -/* the small error. */ -#define KHUI_TIMEEQ_ERROR_SMALL 1 - -void -khm_timer_refresh(HWND hwnd); - -void -khm_timer_fire(HWND hwnd); - -void -khm_timer_init(void); - -void -khm_timer_exit(void); - -#endif diff --git a/src/windows/identity/ui/toolbar.c b/src/windows/identity/ui/toolbar.c deleted file mode 100644 index 4a3c61f7f..000000000 --- a/src/windows/identity/ui/toolbar.c +++ /dev/null @@ -1,471 +0,0 @@ -/* - * 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 - * 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<khmapp.h> -#include<assert.h> - -HWND khui_hwnd_standard_toolbar; -int khui_tb_blank; - -khui_ilist * ilist_toolbar; - -void khui_init_toolbar(void) { - ilist_toolbar = khui_create_ilist(KHUI_TOOLBAR_IMAGE_WIDTH, KHUI_TOOLBAR_IMAGE_HEIGHT, KHUI_TOOLBAR_MAX_BTNS, 5, 0); -} - -void khui_exit_toolbar(void) { - khui_delete_ilist(ilist_toolbar); -} - -LRESULT khm_toolbar_notify(LPNMHDR notice) { - switch(notice->code) { - case TBN_GETINFOTIP: - { - LPNMTBGETINFOTIP git = (LPNMTBGETINFOTIP) notice; - int cmd; - khui_action * a; - - cmd = git->iItem; - a = khui_find_action(cmd); - - if (a) { - if (a->caption) { - StringCchCopy(git->pszText, git->cchTextMax, a->caption); - } else if (a->tooltip) { - StringCchCopy(git->pszText, git->cchTextMax, a->tooltip); - } else if (a->is_caption) { - wchar_t buf[INFOTIPSIZE]; - - buf[0] = L'\0'; - LoadString(khm_hInstance, a->is_caption, - buf, ARRAYLENGTH(buf)); - - StringCchCopy(git->pszText, git->cchTextMax, buf); - } else { - StringCchCopy(git->pszText, git->cchTextMax, L""); - } - } else { - StringCchCopy(git->pszText, - git->cchTextMax, - L""); - } - } - break; - - case TBN_HOTITEMCHANGE: - { - LPNMTBHOTITEM hi = (LPNMTBHOTITEM) notice; - - if (hi->dwFlags & HICF_LEAVING) { - khm_statusbar_set_part(KHUI_SBPART_INFO, NULL, L""); - } else { - khui_action * a; - int cmd; - wchar_t buf[256]; - - cmd = hi->idNew; - a = khui_find_action(cmd); - - buf[0] = L'\0'; - - if (a) { - if (a->tooltip) - StringCbCopy(buf, sizeof(buf), a->tooltip); - else if (a->is_tooltip) { - LoadString(khm_hInstance, a->is_tooltip, - buf, ARRAYLENGTH(buf)); - } - } - - khm_statusbar_set_part(KHUI_SBPART_INFO, NULL, buf); - } - } - break; - - case TBN_DROPDOWN: - { - LPNMTOOLBAR nmtb = (LPNMTOOLBAR) notice; - RECT r; - - GetWindowRect(khui_hwnd_standard_toolbar, &r); - if (nmtb->iItem == KHUI_ACTION_DESTROY_CRED) { - khm_menu_show_panel(KHUI_MENU_DESTROY_CRED, - r.left + nmtb->rcButton.left, - r.top + nmtb->rcButton.bottom); - } else if (nmtb->iItem == KHUI_ACTION_RENEW_CRED) { - khm_menu_show_panel(KHUI_MENU_RENEW_CRED, - r.left + nmtb->rcButton.left, - r.top + nmtb->rcButton.bottom); - } else { - return TBDDRET_NODEFAULT; - } - - return TBDDRET_DEFAULT; - } - break; - - case NM_CUSTOMDRAW: - { - LPNMTBCUSTOMDRAW nmcd = (LPNMTBCUSTOMDRAW) notice; - if(nmcd->nmcd.dwDrawStage == CDDS_PREPAINT) { - return CDRF_NOTIFYITEMDRAW | CDRF_NOTIFYPOSTERASE; - } else if(nmcd->nmcd.dwDrawStage == CDDS_ITEMPREPAINT) { - return CDRF_NOTIFYPOSTPAINT; - } else if(nmcd->nmcd.dwDrawStage == CDDS_ITEMPOSTPAINT) { - /* draw the actual icon */ - int iidx; - int ibmp; - HBITMAP hbmp; - RECT r; - - khui_action * act = - khui_find_action((int) nmcd->nmcd.dwItemSpec); - - if(!act || !act->ib_normal) - return CDRF_DODEFAULT; - - if((act->state & KHUI_ACTIONSTATE_DISABLED) && - act->ib_disabled) { - ibmp = act->ib_disabled; - } else if(act->ib_hot && - ((nmcd->nmcd.uItemState & CDIS_HOT) || - (nmcd->nmcd.uItemState & CDIS_SELECTED))){ - ibmp = act->ib_hot; - } else { - ibmp = act->ib_normal; - } - - iidx = khui_ilist_lookup_id(ilist_toolbar, ibmp); - if(iidx < 0) { - hbmp = LoadImage(khm_hInstance, - MAKEINTRESOURCE(ibmp), - IMAGE_BITMAP, - KHUI_TOOLBAR_IMAGE_WIDTH, - KHUI_TOOLBAR_IMAGE_HEIGHT, 0); - iidx = - khui_ilist_add_masked_id(ilist_toolbar, - hbmp, - KHUI_TOOLBAR_BGCOLOR, - ibmp); - DeleteObject(hbmp); - } - - if(iidx < 0) - return CDRF_DODEFAULT; - - CopyRect(&r, &(nmcd->nmcd.rc)); - r.left += ((r.bottom - r.top) - - KHUI_TOOLBAR_IMAGE_HEIGHT) / 2; - r.top += ((r.bottom - r.top) - - KHUI_TOOLBAR_IMAGE_HEIGHT) / 2; -#if 0 - r.left += ((r.right - r.left) - - KHUI_TOOLBAR_IMAGE_WIDTH) / 2; -#endif - khui_ilist_draw(ilist_toolbar, - iidx, - nmcd->nmcd.hdc, - r.left, - r.top, - 0); - - return CDRF_DODEFAULT; - } - } - break; - } - return 0; -} - -void khui_add_action_to_toolbar(HWND tb, khui_action *a, int opt, HIMAGELIST hiList) { - wchar_t buf[MAX_RES_STRING] = L""; - int idx_caption = 0; - TBBUTTON bn; - LRESULT lr; - - ZeroMemory(&bn,sizeof(bn)); - - if(opt & KHUI_TOOLBAR_ADD_SEP) { - bn.fsStyle = BTNS_SEP; - bn.iBitmap = 3; - - lr = SendMessage(tb, - TB_ADDBUTTONS, - 1, - (LPARAM) &bn); -#ifdef DEBUG - assert(lr); -#endif - return; - } - - bn.fsStyle = BTNS_BUTTON; - - if(opt & KHUI_TOOLBAR_VARSIZE) { - bn.fsStyle |= BTNS_AUTOSIZE; - } - - if(opt & KHUI_TOOLBAR_ADD_TEXT) { - int sid = 0; - if((opt & KHUI_TOOLBAR_ADD_LONGTEXT) == - KHUI_TOOLBAR_ADD_LONGTEXT) { - sid = a->is_tooltip; - } - if(!sid) - sid = a->is_caption; - if(sid) { - LoadString(khm_hInstance, - sid, - buf, ARRAYLENGTH(buf)); - buf[wcslen(buf) + 1] = L'\0'; - idx_caption = (int) SendMessage(tb, - TB_ADDSTRING, - (WPARAM) NULL, - (LPARAM) buf); -#if (_WIN32_IE >= 0x0501) - bn.fsStyle |= BTNS_SHOWTEXT; -#endif - bn.iString = idx_caption; - } - } - - if(opt & KHUI_TOOLBAR_ADD_DROPDOWN) { - bn.fsStyle |= BTNS_DROPDOWN; - } - - if((opt & KHUI_TOOLBAR_ADD_BITMAP) && a->ib_normal) { - bn.fsStyle |= TBSTYLE_CUSTOMERASE; - bn.iBitmap = khui_tb_blank; - } else { -#if (_WIN32_IE >= 0x0501) - bn.iBitmap = I_IMAGENONE; -#endif - } - - bn.idCommand = a->cmd; - - if(a->state & KHUI_ACTIONSTATE_DISABLED) { - bn.fsState = 0; - } else { - bn.fsState = TBSTATE_ENABLED; - } - - if(a->state & KHUI_ACTIONSTATE_CHECKED) { - bn.fsState |= TBSTATE_CHECKED; - } - - bn.dwData = 0; - - lr = SendMessage( - tb, - TB_ADDBUTTONS, - 1, - (LPARAM) &bn); - -#ifdef DEBUG - assert(lr); -#endif -} - -void khm_update_standard_toolbar(void) -{ - khui_menu_def * def; - khui_action_ref * aref; - khui_action * act; - - def = khui_find_menu(KHUI_TOOLBAR_STANDARD); - - aref = def->items; - - while(aref && aref->action != KHUI_MENU_END) { - if(aref->action == KHUI_MENU_SEP) { - aref++; - continue; - } - - act = khui_find_action(aref->action); - if(act) { - BOOL enable; - - enable = !(act->state & KHUI_ACTIONSTATE_DISABLED); - SendMessage(khui_hwnd_standard_toolbar, - TB_ENABLEBUTTON, - (WPARAM) act->cmd, - MAKELPARAM(enable, 0)); - } - - aref++; - } -} - -void khm_create_standard_toolbar(HWND rebar) { - HWND hwtb; - SIZE sz; - HBITMAP hbm_blank; - HIMAGELIST hiList; - REBARBANDINFO rbi; - khui_menu_def * def; - khui_action * act; - khui_action_ref * aref; - int idx_blank; - - def = khui_find_menu(KHUI_TOOLBAR_STANDARD); - - if (!def) { -#ifdef DEBUG - assert(FALSE); -#endif - return; - } - - hwtb = CreateWindowEx(0 , - TOOLBARCLASSNAME, - (LPWSTR) NULL, - WS_CHILD | - TBSTYLE_FLAT | - TBSTYLE_AUTOSIZE | - TBSTYLE_TOOLTIPS | - CCS_NORESIZE | - CCS_NOPARENTALIGN | - CCS_ADJUSTABLE | - CCS_NODIVIDER, - 0, 0, 0, 0, rebar, - (HMENU) NULL, khm_hInstance, - NULL); - - if(!hwtb) { -#ifdef DEBUG - assert(FALSE); -#endif - return; - } - -#if (_WIN32_IE >= 0x0501) - SendMessage(hwtb, TB_SETEXTENDEDSTYLE, 0, - TBSTYLE_EX_MIXEDBUTTONS | TBSTYLE_EX_DRAWDDARROWS); -#endif - - hiList = ImageList_Create( - KHUI_TOOLBAR_IMAGE_WIDTH, - KHUI_TOOLBAR_IMAGE_HEIGHT, - ILC_MASK, - (int) khui_action_list_length(def->items), - 3); - - hbm_blank = LoadImage(khm_hInstance, - MAKEINTRESOURCE(IDB_TB_BLANK), - IMAGE_BITMAP, - KHUI_TOOLBAR_IMAGE_WIDTH, - KHUI_TOOLBAR_IMAGE_HEIGHT, 0); - idx_blank = ImageList_AddMasked(hiList, hbm_blank, RGB(0,0,0)); - - khui_hwnd_standard_toolbar = hwtb; - khui_tb_blank = idx_blank; - - def = khui_find_menu(KHUI_TOOLBAR_STANDARD); - - aref = def->items; - - SendMessage(hwtb, - TB_BUTTONSTRUCTSIZE, - sizeof(TBBUTTON), - 0); - - SendMessage(hwtb, - TB_SETBITMAPSIZE, - 0, - MAKELONG(KHUI_TOOLBAR_IMAGE_WIDTH,KHUI_TOOLBAR_IMAGE_HEIGHT)); - - SendMessage(hwtb, - TB_SETIMAGELIST, - 0, - (LPARAM) hiList); - - SendMessage(hwtb, - TB_SETBUTTONSIZE, - 0, - MAKELONG(KHUI_TOOLBAR_IMAGE_WIDTH,KHUI_TOOLBAR_IMAGE_HEIGHT)); - - while(aref && aref->action != KHUI_MENU_END) { - if(aref->action == KHUI_MENU_SEP) { - khui_add_action_to_toolbar(hwtb, - NULL, - KHUI_TOOLBAR_ADD_SEP, - hiList); - } else { - act = khui_find_action(aref->action); - khui_add_action_to_toolbar(hwtb, - act, - KHUI_TOOLBAR_ADD_BITMAP | - ((aref->flags & KHUI_ACTIONREF_SUBMENU)? - KHUI_TOOLBAR_ADD_DROPDOWN: 0), - hiList); - } - aref ++; - } - - SendMessage(hwtb, - TB_AUTOSIZE, - 0,0); - - SendMessage(hwtb, - TB_GETMAXSIZE, - 0, - (LPARAM) &sz); - - sz.cy += 5; - - ZeroMemory(&rbi, sizeof(rbi)); - - rbi.cbSize = sizeof(rbi); - rbi.fMask = - RBBIM_ID | - RBBIM_CHILD | - RBBIM_CHILDSIZE | - RBBIM_IDEALSIZE | - RBBIM_SIZE | - RBBIM_STYLE; - rbi.fStyle = - RBBS_USECHEVRON | - RBBS_BREAK; - rbi.hwndChild = hwtb; - - rbi.wID = KHUI_TOOLBAR_STANDARD; - rbi.cx = sz.cx; - rbi.cxMinChild = sz.cx; - rbi.cyMinChild = sz.cy; - rbi.cyChild = rbi.cyMinChild; - rbi.cyMaxChild = rbi.cyMinChild; - rbi.cyIntegral = rbi.cyMinChild; - - rbi.cxIdeal = rbi.cx; - - SendMessage(rebar, - RB_INSERTBAND, - 0, - (LPARAM) &rbi); -} diff --git a/src/windows/identity/ui/toolbar.h b/src/windows/identity/ui/toolbar.h deleted file mode 100644 index ac09c6619..000000000 --- a/src/windows/identity/ui/toolbar.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_TOOLBAR_H -#define __KHIMAIRA_TOOLBAR_H - -extern HWND khui_hwnd_standard_toolbar; - -void khui_init_toolbar(void); -void khui_exit_toolbar(void); -LRESULT khm_toolbar_notify(LPNMHDR notice); -void khm_create_standard_toolbar(HWND rebar); -void khui_add_action_to_toolbar(HWND toolbar, khui_action * act, int opt, HIMAGELIST hiList); -void khm_update_standard_toolbar(void); - -/* options for khui_add_action_to_toolbar */ -#define KHUI_TOOLBAR_ADD_TEXT 0x00000001 -#define KHUI_TOOLBAR_ADD_BITMAP 0x00000002 -#define KHUI_TOOLBAR_ADD_LONGTEXT 0x00000005 -#define KHUI_TOOLBAR_ADD_DROPDOWN 0x00000008 -#define KHUI_TOOLBAR_ADD_SEP 0x00000010 -#define KHUI_TOOLBAR_VARSIZE 0x00000020 - -#define KHUI_TOOLBAR_IMAGE_WIDTH 29 -#define KHUI_TOOLBAR_IMAGE_HEIGHT 27 -#define KHUI_TOOLBAR_BGCOLOR RGB(0xd7,0xd7,0xd7) -#define KHUI_TOOLBAR_MAX_BTNS 64 - -#endif diff --git a/src/windows/identity/ui/uiconfig.csv b/src/windows/identity/ui/uiconfig.csv deleted file mode 100644 index 3a8006f55..000000000 --- a/src/windows/identity/ui/uiconfig.csv +++ /dev/null @@ -1,273 +0,0 @@ -#@#include<windows.h> -#@#define RGBA(r,g,b,a) ((((DWORD) ((a) & 0xff)) << 24) | RGB(r,g,b)) -Name,Type,Value,Description -CredWindow,KC_SPACE,0,"Options for the credentials window as well as the Network Identity Manager application." - AutoInit,KC_INT32,0,"Boolean. Prompt for new credentials if no credentials are present during startup." - AutoStart,KC_INT32,0,"[PRIVATE] Boolean. Start Network Identity Manager automatically when the current user logs in." - AutoImport,KC_INT32,1,"Boolean. Import credentials from the LSA cache when Network Identity Manager starts." - AutoDetectNet,KC_INT32,1,"Boolean. Automatically detect network connectivity changes." - HideWatermark,KC_INT32,0,"Boolean. Suppress watermark in Credentials display. NOTE: there is no guarantee that this value will exist in future versions." - KeepRunning,KC_INT32,1,"Boolean. Run from the system notification area after the main window is closed." - DefaultView,KC_STRING,ByIdentity,"[PRIVATE] Name of the default view in Advanced mode." - DefaultViewMini,KC_STRING,CompactIdentity,"[PRIVATE] Name of the default view in Basic mode." - PaddingHorizontal,KC_INT32,4,"[PRIVATE]" - PaddingVertical,KC_INT32,2,"[PRIVATE]" - PaddingHeader,KC_INT32,16,"[PRIVATE]" - Monitor,KC_INT32,1,"Boolean. Monitor credentials for expiration and renewal." - DefaultMonitor,KC_INT32,1,"Boolean. This is the default Monitor value that is assigned for new identities." - RefreshTimeout,KC_INT32,60,"Number of seconds between credentials window refreshes. The credentials window automatically triggers a refresh operation. This value specifies the number of seconds that must elapse between two refreshes. During the refresh, all the credentials provider plug-ins will need to re-enumerate their respective credentials." - WarnThreshold,KC_INT32,900,In seconds - AllowWarn,KC_INT32,1,"Boolean. Enables warning." - CriticalThreshold,KC_INT32,300,In seconds - AllowCritical,KC_INT32,1,Boolean. Enables critical. - AutoRenewThreshold,KC_INT32,600,In seconds - AllowAutoRenew,KC_INT32,1,Boolean. - RenewAtHalfLife,KC_INT32,1,Boolean. Use half-life algorithm for renewals. - DefaultAllowAutoRenew,KC_INT32,1,Default AllowAutoRenew value for new identities - DefaultSticky,KC_INT32,0,Default Sticky value for new identities - MaxThreshold,KC_INT32,86400,Max value for a threshold (1 day) - MinThreshold,KC_INT32,10,Min value for a threshold (0) - LogToFile,KC_INT32,0,Boolean. If true logs trace events to a nidmdbg.log in the temp folder - DestroyCredsOnExit,KC_INT32,0,Boolean. If true; all credentials will be destroyed when NetIDMgr exits. - NotificationAction,KC_INT32,50025,Action to perform when the user clicks on the notification icon. - DefaultWindowMode,KC_INT32,1,(0-normal; 1-mini) - DefaultTheme,KC_STRING,Default,Default theme. The name should correspond to a subspace in Themes - ViewAllIdents,KC_INT32,0,"Boolean. Try to display all known identities if non-zero." - Windows,KC_SPACE,0,Window parameters - _Schema,KC_SPACE,0,Schema - Width,KC_INT32,0, - Height,KC_INT32,0, - XPos,KC_INT32,0, - YPos,KC_INT32,0, - Dock,KC_INT32,0,Dock on window corner (0-none; 1-top left; 2-top right; 3-bottom right; 4-bottom left) - _Schema,KC_ENDSPACE,0, - Main,KC_SPACE,0,Main window - Main,KC_ENDSPACE,0, - MainMini,KC_SPACE,0,Main window (mini mode) - Width,KC_INT32,470, - Height,KC_INT32,500, - Dock,KC_INT32,3, - MainMini,KC_ENDSPACE,0, - NewCred,KC_SPACE,0,New credentials window - ForceToTop,KC_INT32,1,Force new creds window to the top - AnimateSizeChanges,KC_INT32,1,Animate the new creds window when the size needs changing. - AnimationSteps,KC_INT32,7,Number of steps in size-change animation - AnimationStepTimeout,KC_INT32,40,Number of milliseconds to wait between each step of the size-change animation - NewCred,KC_ENDSPACE,0, - Windows,KC_ENDSPACE,0, - Views,KC_SPACE,0,Preconfigured views for credentials - _Schema,KC_SPACE,0,Schema for view definitions - Description,KC_STRING,"",Description of the view - ColumnList,KC_STRING,"","List of columns for the view, in order" - _AppVersion,KC_BINARY,0,Binary version stamp - Columns,KC_SPACE,0,"Column definitions. Each column name should have a corresponding subspace here. The name of the column should be a property or field name, unless it is a pseudo column like _CWFlags." - _Schema,KC_SPACE,0,Column definition schema - Width,KC_INT32,0,Width of the column - SortIndex,KC_INT32,0,Sort index - Flags,KC_INT32,0,Flags (See KHUI_CW_COL_* values) - _Schema,KC_ENDSPACE,0 - Columns,KC_ENDSPACE,0 - _Schema,KC_ENDSPACE,0, - Custom_0,KC_SPACE,0,First custom view. Additional views have names of the form Custom_N - Description,KC_STRING,Custom view, - ColumnList,KC_STRING,"_CWFlags,IdentityName,TypeName,Name,TimeLeft", - Columns,KC_SPACE,0,Columns - _CWFlags,KC_SPACE,0, - Width,KC_INT32,20, - Flags,KC_INT32,112, - _CWFlags,KC_ENDSPACE,0, - IdentityName,KC_SPACE,0, - Width,KC_INT32,100, - SortIndex,KC_INT32,0, - Flags,KC_INT32,11, - IdentityName,KC_ENDSPACE,0 - TypeName,KC_SPACE,0 - Width,KC_INT32,100 - SortIndex,KC_INT32,1 - Flags,KC_INT32,11 - TypeName,KC_ENDSPACE,0 - Name,KC_SPACE,0 - Width,KC_INT32,200 - SortIndex,KC_INT32,2 - Flags,KC_INT32,3 - Name,KC_ENDSPACE,0 - TimeLeft,KC_SPACE,0 - Width,KC_INT32,200 - Flags,KC_INT32,1 - TimeLeft,KC_ENDSPACE,0 - Columns,KC_ENDSPACE,0 - Custom_0,KC_ENDSPACE,0, - ByIdentity,KC_SPACE,0,The default view - Description,KC_STRING,View grouped by identity and credential type, - ColumnList,KC_STRING,"_CWFlags,IdentityName,TypeName,Location,Name,TimeLeft", - Columns,KC_SPACE,0,Columns - _CWFlags,KC_SPACE,0, - Width,KC_INT32,20, - Flags,KC_INT32,112, - _CWFlags,KC_ENDSPACE,0, - IdentityName,KC_SPACE,0, - Width,KC_INT32,100, - SortIndex,KC_INT32,0, - Flags,KC_INT32,11, - IdentityName,KC_ENDSPACE,0 - TypeName,KC_SPACE,0 - Width,KC_INT32,100 - SortIndex,KC_INT32,1 - Flags,KC_INT32,11 - TypeName,KC_ENDSPACE,0 - Location,KC_SPACE,0, - Width,KC_INT32,50 - SortIndex,KC_INT32,2 - Flags,KC_INT32,11 - Location,KC_ENDSPACE,0, - Name,KC_SPACE,0 - Width,KC_INT32,200 - SortIndex,KC_INT32,3 - Flags,KC_INT32,3 - Name,KC_ENDSPACE,0 - TimeLeft,KC_SPACE,0 - Width,KC_INT32,200 - Flags,KC_INT32,1 - TimeLeft,KC_ENDSPACE,0 - Columns,KC_ENDSPACE,0 - ByIdentity,KC_ENDSPACE,0 - ByType,KC_SPACE,0,The default view - Description,KC_STRING,View grouped by type and identity, - ColumnList,KC_STRING,"_CWFlags,TypeName,IdentityName,Name,TimeLeft", - Columns,KC_SPACE,0,Columns - _CWFlags,KC_SPACE,0, - Width,KC_INT32,20, - Flags,KC_INT32,112, - _CWFlags,KC_ENDSPACE,0, - TypeName,KC_SPACE,0 - Width,KC_INT32,100 - SortIndex,KC_INT32,0 - Flags,KC_INT32,11 - TypeName,KC_ENDSPACE,0 - IdentityName,KC_SPACE,0, - Width,KC_INT32,100, - SortIndex,KC_INT32,1, - Flags,KC_INT32,11, - IdentityName,KC_ENDSPACE,0 - Name,KC_SPACE,0 - Width,KC_INT32,200 - SortIndex,KC_INT32,2 - Flags,KC_INT32,3 - Name,KC_ENDSPACE,0 - TimeLeft,KC_SPACE,0 - Width,KC_INT32,200 - Flags,KC_INT32,1 - TimeLeft,KC_ENDSPACE,0 - Columns,KC_ENDSPACE,0 - ByType,KC_ENDSPACE,0 - ByLocation,KC_SPACE,0,View by location - Description,KC_STRING,View grouped by location, - ColumnList,KC_STRING,"_CWFlags,Location,IdentityName,TypeName,Name,TimeLeft", - Columns,KC_SPACE,0,Columns - _CWFlags,KC_SPACE,0, - Width,KC_INT32,20, - Flags,KC_INT32,112, - _CWFlags,KC_ENDSPACE,0, - Location,KC_SPACE,0, - Width,KC_INT32,100, - SortIndex,KC_INT32,0, - Flags,KC_INT32,11, - Location,KC_ENDSPACE,0, - IdentityName,KC_SPACE,0, - Width,KC_INT32,100, - SortIndex,KC_INT32,1, - Flags,KC_INT32,11, - IdentityName,KC_ENDSPACE,0 - TypeName,KC_SPACE,0 - Width,KC_INT32,100 - SortIndex,KC_INT32,2 - Flags,KC_INT32,11 - TypeName,KC_ENDSPACE,0 - Name,KC_SPACE,0 - Width,KC_INT32,200 - SortIndex,KC_INT32,3 - Flags,KC_INT32,3 - Name,KC_ENDSPACE,0 - TimeLeft,KC_SPACE,0 - Width,KC_INT32,200 - Flags,KC_INT32,1 - TimeLeft,KC_ENDSPACE,0 - Columns,KC_ENDSPACE,0 - ByLocation,KC_ENDSPACE,0 - CompactIdentity,KC_SPACE,0,Default Compact View by Identity - Description,KC_STRING,Compact view of identities - ColumnList,KC_STRING,"IdentityName", - ExpandedIdentity,KC_INT32,1,Use expanded display of identity headers - NoHeader,KC_INT32,1,Suppress the column header - Columns,KC_SPACE,0, - IdentityName,KC_SPACE,0, - Width,KC_INT32,415, - SortIndex,KC_INT32,0, - Flags,KC_INT32,171 - IdentityName,KC_ENDSPACE,0, - Columns,KC_ENDSPACE,0, - CompactIdentity,KC_ENDSPACE,0 - Custom_1,KC_SPACE,0,Default Compact View by Identity - Description,KC_STRING,Compact view of identities - ColumnList,KC_STRING,"IdentityName", - ExpandedIdentity,KC_INT32,1,Use expanded display of identity headers - NoHeader,KC_INT32,1,Suppress the column header - Columns,KC_SPACE,0, - IdentityName,KC_SPACE,0, - Width,KC_INT32,415, - SortIndex,KC_INT32,0, - Flags,KC_INT32,171 - IdentityName,KC_ENDSPACE,0, - Columns,KC_ENDSPACE,0, - Custom_1,KC_ENDSPACE,0 - Views,KC_ENDSPACE,0 - Notices,KC_SPACE,0,Notices and alerts - MinimizeWarning,KC_INT32,1,Show the minimize warning? - Notices,KC_ENDSPACE,0 - Themes,KC_SPACE,0,Color schemes for the credentials display - _Schema,KC_SPACE,0,Schema for color schemes - ClrSelection,KC_INT32,0,"Background (Selection)" - ClrBackground,KC_INT32,0,"Background (Normal)" - ClrGray,KC_INT32,0,"Background (Gray)" - ClrHeader,KC_INT32,0,"Header (Normal)" - ClrHeaderCred,KC_INT32,0,"Header (with credentials)" - ClrHeaderWarn,KC_INT32,0,"Header (Warning)" - ClrHeaderCrit,KC_INT32,0,"Header (Critical)" - ClrHeaderExp,KC_INT32,0,"Header (Expired)" - ClrHeaderSel,KC_INT32,0,"Header (Normal, Selected)" - ClrHeaderCredSel,KC_INT32,0,"Header (with credentials, Selected)" - ClrHeaderWarnSel,KC_INT32,0,"Header (Warning, Selected)" - ClrHeaderCritSel,KC_INT32,0,"Header (Critical, Selected)" - ClrHeaderExpSel,KC_INT32,0,"Header (Expired, Selected)" - ClrHeaderOutline,KC_INT32,0,"Header (Outline color)" - ClrText,KC_INT32,0,"Text (Normal)" - ClrTextSel,KC_INT32,0,"Text (Selected)" - ClrTextHeader,KC_INT32,0,"Text (Header)" - ClrTextHeaderSel,KC_INT32,0,"Text (Header, Selected)" - ClrTextHeaderGray,KC_INT32,0,"Text (Header, Gray)" - ClrTextHeaderGraySel,KC_INT32,0,"Text (Header, Gray, Selected)" - _Schema,KC_ENDSPACE,0, - Default,KC_SPACE,0,Default color scheme - ClrSelection,KC_INT32,"RGB(192,192,192)", - ClrBackground,KC_INT32,"RGB(255,255,255)", - ClrGray,KC_INT32,"RGB(240,240,240)", - ClrHeader,KC_INT32,"RGB(240,240,240)", - ClrHeaderCred,KC_INT32,"RGB(184,235,134)", - ClrHeaderWarn,KC_INT32,"RGB(235,235,134)", - ClrHeaderCrit,KC_INT32,"RGB(235,184,134)", - ClrHeaderExp,KC_INT32,"RGB(235,134,134)", - ClrHeaderSel,KC_INT32,"RGB(200,200,200)", - ClrHeaderCredSel,KC_INT32,"RGB(144,195, 94)", - ClrHeaderWarnSel,KC_INT32,"RGB(195,195, 94)", - ClrHeaderCritSel,KC_INT32,"RGB(195,144, 94)", - ClrHeaderExpSel,KC_INT32,"RGB(195, 94, 94)", - ClrHeaderOutline,KC_INT32,"RGB(15,15,15)", - ClrText,KC_INT32,"RGB(15,15,15)", - ClrTextSel,KC_INT32,"RGB(0,0,0)", - ClrTextHeader,KC_INT32,"RGB(15,15,15)", - ClrTextHeaderSel,KC_INT32,"RGB(0,0,0)", - ClrTextHeaderGray,KC_INT32,"RGB(192,192,192)", - ClrTextHeaderGraySel,KC_INT32,"RGB(240,240,240)", - Default,KC_ENDSPACE,0 - Themes,KC_ENDSPACE,0 -CredWindow,KC_ENDSPACE,0 diff --git a/src/windows/identity/uilib/Makefile b/src/windows/identity/uilib/Makefile deleted file mode 100644 index 5c019b454..000000000 --- a/src/windows/identity/uilib/Makefile +++ /dev/null @@ -1,68 +0,0 @@ -# -# Copyright (c) 2004 Massachusetts Institute of Technology -# -# 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. - - -MODULE=uilib -!include <../config/Makefile.w32> - -UIDLLOBJFILES= \ - $(OBJ)\rescache.obj \ - $(OBJ)\action.obj \ - $(OBJ)\creddlg.obj \ - $(OBJ)\alert.obj \ - $(OBJ)\propsheet.obj \ - $(OBJ)\propwnd.obj \ - $(OBJ)\uilibmain.obj \ - $(OBJ)\actiondef.obj \ - $(OBJ)\acceldef.obj \ - $(OBJ)\configui.obj \ - $(OBJ)\trackerwnd.obj \ - $(OBJ)\uibind.obj \ - $(OBJ)\version.obj - -INCFILES= \ - $(INCDIR)\khuidefs.h \ - $(INCDIR)\khrescache.h \ - $(INCDIR)\khaction.h \ - $(INCDIR)\khactiondef.h \ - $(INCDIR)\khalerts.h \ - $(INCDIR)\khhtlink.h \ - $(INCDIR)\khnewcred.h \ - $(INCDIR)\khprops.h \ - $(INCDIR)\khconfigui.h \ - $(INCDIR)\khtracker.h \ - $(INCDIR)\khremote.h \ - $(INCDIR)\intaction.h \ - $(INCDIR)\intalert.h - -$(OBJ)\actiondef.c: actions.csv actiondef.cfg - $(CCSV) $** $@ - -$(OBJ)\acceldef.c: accel.csv acceldef.cfg - $(CCSV) $** $@ - -all: mkdirs $(INCFILES) $(UIDLLOBJFILES) - -clean:: - if exist "$(INCDIR)" $(RM) $(INCFILES) - diff --git a/src/windows/identity/uilib/accel.csv b/src/windows/identity/uilib/accel.csv deleted file mode 100644 index d55bff0b7..000000000 --- a/src/windows/identity/uilib/accel.csv +++ /dev/null @@ -1,26 +0,0 @@ -command,mod,key,scope -KHUI_PACTION_MENU,FVIRTKEY,VK_F10,KHUI_ACCEL_SCOPE_GLOBAL -KHUI_PACTION_UP,FVIRTKEY,VK_UP,KHUI_ACCEL_SCOPE_GLOBAL -KHUI_PACTION_UP_EXTEND,FVIRTKEY|FSHIFT,VK_UP,KHUI_ACCEL_SCOPE_GLOBAL -KHUI_PACTION_UP_TOGGLE,FVIRTKEY|FCONTROL,VK_UP,KHUI_ACCEL_SCOPE_GLOBAL -KHUI_PACTION_PGUP,FVIRTKEY,VK_PRIOR,KHUI_ACCEL_SCOPE_GLOBAL -KHUI_PACTION_PGUP_EXTEND,FVIRTKEY|FSHIFT,VK_PRIOR,KHUI_ACCEL_SCOPE_GLOBAL -KHUI_PACTION_DOWN,FVIRTKEY,VK_DOWN,KHUI_ACCEL_SCOPE_GLOBAL -KHUI_PACTION_DOWN_EXTEND,FVIRTKEY|FSHIFT,VK_DOWN,KHUI_ACCEL_SCOPE_GLOBAL -KHUI_PACTION_DOWN_TOGGLE,FVIRTKEY|FCONTROL,VK_DOWN,KHUI_ACCEL_SCOPE_GLOBAL -KHUI_PACTION_PGDN,FVIRTKEY,VK_NEXT,KHUI_ACCEL_SCOPE_GLOBAL -KHUI_PACTION_PGDN_EXTEND,FVIRTKEY|FSHIFT,VK_NEXT,KHUI_ACCEL_SCOPE_GLOBAL -KHUI_PACTION_LEFT,FVIRTKEY,VK_LEFT,KHUI_ACCEL_SCOPE_GLOBAL -KHUI_PACTION_RIGHT,FVIRTKEY,VK_RIGHT,KHUI_ACCEL_SCOPE_GLOBAL -KHUI_PACTION_ENTER,FVIRTKEY,VK_RETURN,KHUI_ACCEL_SCOPE_GLOBAL -KHUI_PACTION_ESC,FVIRTKEY,VK_ESCAPE,KHUI_ACCEL_SCOPE_GLOBAL -#KHUI_PACTION_DELETE,FVIRTKEY,VK_DELETE,KHUI_ACCEL_SCOPE_GLOBAL -KHUI_ACTION_DESTROY_CRED,FVIRTKEY,VK_DELETE,KHUI_ACCEL_SCOPE_GLOBAL -KHUI_ACTION_EXIT,FCONTROL|FVIRTKEY,\'X\',KHUI_ACCEL_SCOPE_GLOBAL -KHUI_ACTION_VIEW_REFRESH,FVIRTKEY,VK_F5,KHUI_ACCEL_SCOPE_GLOBAL -KHUI_ACTION_NEW_CRED,FCONTROL|FVIRTKEY,\'N\',KHUI_ACCEL_SCOPE_GLOBAL -KHUI_ACTION_RENEW_CRED,FCONTROL|FVIRTKEY,\'R\',KHUI_ACCEL_SCOPE_GLOBAL -KHUI_ACTION_IMPORT,FCONTROL|FVIRTKEY,\'I\',KHUI_ACCEL_SCOPE_GLOBAL -KHUI_ACTION_DESTROY_CRED,FCONTROL|FVIRTKEY,\'D\',KHUI_ACCEL_SCOPE_GLOBAL -KHUI_ACTION_LAYOUT_MINI,FVIRTKEY,VK_F7,KHUI_ACCEL_SCOPE_GLOBAL -KHUI_PACTION_SELALL,FCONTROL|FVIRTKEY,\'A\',KHUI_ACCEL_SCOPE_GLOBAL diff --git a/src/windows/identity/uilib/acceldef.cfg b/src/windows/identity/uilib/acceldef.cfg deleted file mode 100644 index 20bbeb581..000000000 --- a/src/windows/identity/uilib/acceldef.cfg +++ /dev/null @@ -1,51 +0,0 @@ -# -# Copyright (c) 2004 Massachusetts Institute of Technology -# -# 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. -# - -$file_prefix = <<EOS; -/* -This file was autogenerated from src/ui/acceldef.cfg and src/ui/accel.csv. - -Do not modify directly. -*/ -#define NOEXPORT -#include<khuidefs.h> - -khui_accel_def khui_accel_global[] = { -EOS - -$record_prefix = "{"; - -$record_sep = ",\n"; - -$record_postfix = "}"; - -$file_postfix = <<EOS; - -}; - -int khui_n_accel_global = sizeof(khui_accel_global) / sizeof(khui_accel_def); - -EOS - -$skip_lines = 1; diff --git a/src/windows/identity/uilib/action.c b/src/windows/identity/uilib/action.c deleted file mode 100644 index 50a72ef37..000000000 --- a/src/windows/identity/uilib/action.c +++ /dev/null @@ -1,1672 +0,0 @@ -/* - * 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 - * 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$ */ - -#define NOEXPORT -#define _NIMLIB_ - -#include<khuidefs.h> -#include<intaction.h> -#include<utils.h> -#include<assert.h> - -#include<strsafe.h> - -khui_action_ref khui_main_menu[] = { - MENU_SUBMENU(KHUI_MENU_FILE), - MENU_SUBMENU(KHUI_MENU_CRED), - MENU_SUBMENU(KHUI_MENU_VIEW), - MENU_SUBMENU(KHUI_MENU_OPTIONS), - MENU_SUBMENU(KHUI_MENU_HELP), - MENU_END() -}; - -khui_action_ref khui_menu_file[] = { - MENU_ACTION(KHUI_ACTION_PROPERTIES), - MENU_SEP(), - MENU_ACTION(KHUI_ACTION_EXIT), - MENU_END() -}; - -khui_action_ref khui_menu_cred[] = { - MENU_ACTION(KHUI_ACTION_NEW_CRED), - MENU_SEP(), - MENU_SUBMENU(KHUI_MENU_RENEW_CRED), - MENU_ACTION(KHUI_ACTION_IMPORT), - MENU_SUBMENU(KHUI_MENU_DESTROY_CRED), - MENU_SEP(), - MENU_ACTION(KHUI_ACTION_SET_DEF_ID), -#if 0 - /* not implemented yet */ - MENU_ACTION(KHUI_ACTION_SET_SRCH_ID), -#endif - MENU_SEP(), - MENU_ACTION(KHUI_ACTION_PASSWD_ID), - MENU_END() -}; - -khui_action_ref khui_menu_layout[] = { - MENU_ACTION(KHUI_ACTION_LAYOUT_ID), - MENU_ACTION(KHUI_ACTION_LAYOUT_TYPE), - MENU_ACTION(KHUI_ACTION_LAYOUT_LOC), - MENU_ACTION(KHUI_ACTION_LAYOUT_CUST), - MENU_END() -}; - -khui_action_ref khui_menu_toolbars[] = { - MENU_ACTION(KHUI_ACTION_TB_STANDARD), - MENU_END() -}; - -khui_action_ref khui_menu_view[] = { - MENU_ACTION(KHUI_ACTION_LAYOUT_MINI), - MENU_SUBMENU(KHUI_MENU_LAYOUT), - MENU_ACTION(KHUI_ACTION_VIEW_ALL_IDS), - MENU_SUBMENU(KHUI_MENU_COLUMNS), -#if 0 - /* not implemented yet */ - MENU_SUBMENU(KHUI_MENU_TOOLBARS), -#endif - MENU_SEP(), -#if 0 - /* not implemented yet */ - MENU_ACTION(KHUI_ACTION_DEBUG_WINDOW), - MENU_SEP(), -#endif - MENU_ACTION(KHUI_ACTION_VIEW_REFRESH), - MENU_END() -}; - -khui_action_ref khui_menu_options[] = { - MENU_ACTION(KHUI_ACTION_OPT_KHIM), - MENU_ACTION(KHUI_ACTION_OPT_APPEAR), - MENU_ACTION(KHUI_ACTION_OPT_IDENTS), - MENU_ACTION(KHUI_ACTION_OPT_NOTIF), - MENU_ACTION(KHUI_ACTION_OPT_PLUGINS), - MENU_SEP(), - MENU_END() -}; - -khui_action_ref khui_menu_help[] = { - MENU_ACTION(KHUI_ACTION_HELP_CTX), - MENU_SEP(), - MENU_ACTION(KHUI_ACTION_HELP_INDEX), - MENU_SEP(), - MENU_ACTION(KHUI_ACTION_HELP_ABOUT), - MENU_END() -}; - -khui_action_ref khui_toolbar_standard[] = { - MENU_ACTION(KHUI_ACTION_NEW_CRED), - MENU_SUBMENU(KHUI_ACTION_RENEW_CRED), - MENU_ACTION(KHUI_ACTION_IMPORT), - MENU_SUBMENU(KHUI_ACTION_DESTROY_CRED), - MENU_SEP(), - MENU_ACTION(KHUI_ACTION_PASSWD_ID), - MENU_SEP(), - MENU_ACTION(KHUI_ACTION_VIEW_REFRESH), - MENU_ACTION(KHUI_PACTION_BLANK), - MENU_ACTION(KHUI_ACTION_HELP_CTX), - MENU_END() -}; - -khui_action_ref khui_menu_ident_ctx[] = { - MENU_ACTION(KHUI_ACTION_PROPERTIES), - MENU_SEP(), - MENU_ACTION(KHUI_ACTION_SET_DEF_ID), - MENU_ACTION(KHUI_ACTION_SET_SRCH_ID), - MENU_SEP(), - MENU_ACTION(KHUI_ACTION_NEW_CRED), - MENU_ACTION(KHUI_ACTION_RENEW_CRED), - MENU_ACTION(KHUI_ACTION_DESTROY_CRED), - MENU_END() -}; - -khui_action_ref khui_menu_tok_ctx[] = { - MENU_ACTION(KHUI_ACTION_PROPERTIES), - MENU_SEP(), - MENU_ACTION(KHUI_ACTION_NEW_CRED), - MENU_ACTION(KHUI_ACTION_RENEW_CRED), - MENU_ACTION(KHUI_ACTION_DESTROY_CRED), - MENU_END() -}; - -khui_action_ref khui_menu_ico_ctx_min[] = { - MENU_DEFACTION(KHUI_ACTION_OPEN_APP), - MENU_SEP(), - MENU_ACTION(KHUI_ACTION_NEW_CRED), - MENU_SUBMENU(KHUI_MENU_RENEW_CRED), - MENU_ACTION(KHUI_ACTION_IMPORT), - MENU_SUBMENU(KHUI_MENU_DESTROY_CRED), - MENU_SEP(), - MENU_SUBMENU(KHUI_MENU_SETDEF), - MENU_SEP(), - MENU_ACTION(KHUI_ACTION_PASSWD_ID), - MENU_SEP(), - MENU_ACTION(KHUI_ACTION_HELP_CTX), - MENU_ACTION(KHUI_ACTION_HELP_ABOUT), - MENU_SEP(), - MENU_ACTION(KHUI_ACTION_EXIT), - MENU_END() -}; - -khui_action_ref khui_menu_ico_ctx_normal[] = { - MENU_DEFACTION(KHUI_ACTION_CLOSE_APP), - MENU_SEP(), - MENU_ACTION(KHUI_ACTION_NEW_CRED), - MENU_SUBMENU(KHUI_MENU_RENEW_CRED), - MENU_ACTION(KHUI_ACTION_IMPORT), - MENU_SUBMENU(KHUI_MENU_DESTROY_CRED), - MENU_SEP(), - MENU_SUBMENU(KHUI_MENU_SETDEF), - MENU_SEP(), - MENU_ACTION(KHUI_ACTION_PASSWD_ID), - MENU_SEP(), - MENU_ACTION(KHUI_ACTION_HELP_CTX), - MENU_ACTION(KHUI_ACTION_HELP_ABOUT), - MENU_SEP(), - MENU_ACTION(KHUI_ACTION_EXIT), - MENU_END() -}; - -khui_action_ref khui_menu_cwheader_ctx[] = { - MENU_SUBMENU(KHUI_MENU_COLUMNS), - MENU_SUBMENU(KHUI_MENU_LAYOUT), - MENU_END() -}; - -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_menu_setdef[] = { - MENU_END() -}; - -khui_action_ref khui_pmenu_tok_sel[] = { - MENU_ACTION(KHUI_ACTION_RENEW_CRED), - MENU_ACTION(KHUI_ACTION_DESTROY_CRED), - MENU_END() -}; - -khui_action_ref khui_pmenu_id_sel[] = { - MENU_ACTION(KHUI_ACTION_DESTROY_CRED), - MENU_ACTION(KHUI_ACTION_RENEW_CRED), - MENU_END() -}; - -/* all stock menus and toolbars */ -khui_menu_def khui_all_menus[] = { - CONSTMENU(KHUI_MENU_MAIN, KHUI_MENUSTATE_CONSTANT | KHUI_MENUSTATE_SYSTEM, khui_main_menu), - CONSTMENU(KHUI_MENU_FILE, KHUI_MENUSTATE_CONSTANT | KHUI_MENUSTATE_SYSTEM, khui_menu_file), - CONSTMENU(KHUI_MENU_CRED, KHUI_MENUSTATE_CONSTANT | KHUI_MENUSTATE_SYSTEM, khui_menu_cred), - CONSTMENU(KHUI_MENU_VIEW, KHUI_MENUSTATE_CONSTANT | KHUI_MENUSTATE_SYSTEM, khui_menu_view), - CONSTMENU(KHUI_MENU_LAYOUT, KHUI_MENUSTATE_CONSTANT | KHUI_MENUSTATE_SYSTEM, khui_menu_layout), - CONSTMENU(KHUI_MENU_TOOLBARS, KHUI_MENUSTATE_CONSTANT | KHUI_MENUSTATE_SYSTEM, khui_menu_toolbars), - 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), - CONSTMENU(KHUI_MENU_SETDEF, KHUI_MENUSTATE_CONSTANT | KHUI_MENUSTATE_SYSTEM, khui_menu_setdef), - - /* toolbars */ - CONSTMENU(KHUI_TOOLBAR_STANDARD, KHUI_MENUSTATE_CONSTANT | KHUI_MENUSTATE_SYSTEM, khui_toolbar_standard), - - /* context menus */ - CONSTMENU(KHUI_MENU_IDENT_CTX, KHUI_MENUSTATE_CONSTANT, khui_menu_ident_ctx), - CONSTMENU(KHUI_MENU_TOK_CTX, KHUI_MENUSTATE_CONSTANT, khui_menu_tok_ctx), - CONSTMENU(KHUI_MENU_ICO_CTX_MIN, KHUI_MENUSTATE_CONSTANT, khui_menu_ico_ctx_min), - CONSTMENU(KHUI_MENU_ICO_CTX_NORMAL, KHUI_MENUSTATE_CONSTANT, khui_menu_ico_ctx_normal), - CONSTMENU(KHUI_MENU_CWHEADER_CTX, KHUI_MENUSTATE_CONSTANT, khui_menu_cwheader_ctx), - - /* pseudo menus */ - CONSTMENU(KHUI_PMENU_TOK_SEL, KHUI_MENUSTATE_CONSTANT, khui_pmenu_tok_sel), - CONSTMENU(KHUI_PMENU_ID_SEL, KHUI_MENUSTATE_CONSTANT, khui_pmenu_id_sel) -}; - -int khui_n_all_menus = sizeof(khui_all_menus) / sizeof(khui_menu_def); -khui_menu_def ** khui_cust_menus = NULL; -int khui_nc_cust_menus = 0; -int khui_n_cust_menus = 0; -CRITICAL_SECTION cs_actions; - -#define CACT_NC_ALLOC 32 - -khui_action ** khui_cust_actions = NULL; -int khui_nc_cust_actions = 0; -int khui_n_cust_actions = 0; - -HWND khui_hwnd_main; /* main window, for notifying - action launches and - dispatching messages to the - application. */ - -KHMEXP void KHMAPI -khui_init_actions(void) { - InitializeCriticalSection(&cs_actions); -} - -KHMEXP void KHMAPI -khui_exit_actions(void) { - DeleteCriticalSection(&cs_actions); -} - -KHMEXP void KHMAPI -khui_refresh_actions(void) { - kmq_post_message(KMSG_ACT, KMSG_ACT_REFRESH, 0, 0); -} - -KHMEXP void KHMAPI -khui_action_lock(void) { - EnterCriticalSection(&cs_actions); -} - -KHMEXP void KHMAPI -khui_action_unlock(void) { - LeaveCriticalSection(&cs_actions); -} - -KHMEXP khm_int32 KHMAPI -khui_action_create(const wchar_t * name, - const wchar_t * caption, - const wchar_t * tooltip, - void * userdata, - khm_int32 type, - khm_handle hsub) { - khui_action * act; - khm_int32 action = 0; - int i; - size_t s; - - if ((name && FAILED(StringCchLength(name, KHUI_MAXCCH_NAME, &s))) || - !caption || - FAILED(StringCchLength(caption, KHUI_MAXCCH_SHORT_DESC, &s)) || - (tooltip && FAILED(StringCchLength(tooltip, KHUI_MAXCCH_SHORT_DESC, &s))) || - (type != KHUI_ACTIONTYPE_TRIGGER && type != KHUI_ACTIONTYPE_TOGGLE && - type != KHUI_ACTIONTYPE_IDENTITY)) { - return 0; - } - - EnterCriticalSection(&cs_actions); - if (name && (act = khui_find_named_action(name))) { - /* named action already exists */ - action = act->cmd; - goto _done; - } - - for (i=0; i < khui_n_cust_actions; i++) { - if (khui_cust_actions[i] == NULL || - (khui_cust_actions[i]->state & KHUI_ACTIONSTATE_DELETED)) - break; - } - - if (i >= khui_n_cust_actions && - (khui_cust_actions == NULL || - khui_n_cust_actions + 1 > khui_nc_cust_actions)) { - - khui_nc_cust_actions = UBOUNDSS(khui_n_cust_actions + 1, - CACT_NC_ALLOC, - CACT_NC_ALLOC); -#ifdef DEBUG - assert(khui_nc_cust_actions > khui_n_cust_actions + 1); -#endif - khui_cust_actions = PREALLOC(khui_cust_actions, - sizeof(*khui_cust_actions) * khui_nc_cust_actions); -#ifdef DEBUG - assert(khui_cust_actions); -#endif - } - - if (i >= khui_n_cust_actions) { - i = khui_n_cust_actions ++; - act = PMALLOC(sizeof(khui_action)); - } else { - act = khui_cust_actions[i]; - if (act == NULL) - act = PMALLOC(sizeof(khui_action)); - } - -#ifdef DEBUG - assert(act); -#endif - - khui_cust_actions[i] = act; - - ZeroMemory(act, sizeof(*act)); - - act->cmd = KHUI_USERACTION_BASE + i; - act->type = type; - act->name = (name? PWCSDUP(name) : 0); - act->caption = PWCSDUP(caption); - act->tooltip = (tooltip? PWCSDUP(tooltip) : 0); - act->listener = hsub; - act->data = userdata; - act->state = 0; - - action = act->cmd; - - _done: - LeaveCriticalSection(&cs_actions); - - if (action) - kmq_post_message(KMSG_ACT, KMSG_ACT_NEW, action, NULL); - - return action; -} - -KHMEXP void * KHMAPI -khui_action_get_data(khm_int32 action) { - khui_action * act; - void * data; - - EnterCriticalSection(&cs_actions); - act = khui_find_action(action); - if (act == NULL || (act->state & KHUI_ACTIONSTATE_DELETED)) - data = NULL; - else - data = act->data; - LeaveCriticalSection(&cs_actions); - - return data; -} - -KHMEXP void KHMAPI -khui_action_delete(khm_int32 action) { - khui_action * act; - - EnterCriticalSection(&cs_actions); - - act = khui_find_action(action); - - if (act == NULL) { - LeaveCriticalSection(&cs_actions); - return; - } - - /* for the moment, even when the action is deleted, we don't free - up the block of memory used by the khui_action structure. When - a new action is created, it will reuse deleted action - structures. */ - act->state |= KHUI_ACTIONSTATE_DELETED; - if (act->name) - PFREE(act->name); - if (act->caption) - PFREE(act->caption); - if (act->tooltip) - PFREE(act->tooltip); - if (act->listener) - kmq_delete_subscription(act->listener); - act->name = NULL; - act->caption = NULL; - act->tooltip = NULL; - act->listener = NULL; - LeaveCriticalSection(&cs_actions); - - kmq_post_message(KMSG_ACT, KMSG_ACT_DELETE, action, NULL); -} - -#define MENU_NC_ITEMS 8 - -KHMEXP khui_menu_def * KHMAPI -khui_menu_create(khm_int32 action) -{ - khui_menu_def * d; - - d = PMALLOC(sizeof(*d)); - ZeroMemory(d, sizeof(*d)); - - d->cmd = action; - d->nc_items = MENU_NC_ITEMS; - d->items = PMALLOC(sizeof(*(d->items)) * d->nc_items); - - d->state = KHUI_MENUSTATE_ALLOCD; - - if (action) { - int i; - EnterCriticalSection(&cs_actions); - - for (i=0; i < khui_n_cust_menus; i++) { - if (khui_cust_menus[i] == NULL) - break; - } - - if (i >= khui_n_cust_menus) { - - if (khui_n_cust_menus + 1 >= khui_nc_cust_menus) { - khui_nc_cust_menus = UBOUNDSS(khui_n_cust_menus + 1, - CACT_NC_ALLOC, CACT_NC_ALLOC); - khui_cust_menus = - PREALLOC(khui_cust_menus, - sizeof(khui_cust_menus[0]) * khui_nc_cust_menus); - } - - i = khui_n_cust_menus ++; - } - - khui_cust_menus[i] = d; - - LeaveCriticalSection(&cs_actions); - } - - return d; -} - -KHMEXP void KHMAPI -khui_set_main_window(HWND hwnd) { - khui_hwnd_main = hwnd; -} - -KHMEXP void KHMAPI -khui_action_trigger(khm_int32 action, khui_action_context * ctx) { - khui_action_context save; - - if (!khui_hwnd_main) - return; - - if (ctx) { - khui_context_get(&save); - - khui_context_set_indirect(ctx); - } - - SendMessage(khui_hwnd_main, WM_COMMAND, - MAKEWPARAM(action, 0), (LPARAM) 0); - - if (ctx) { - khui_context_set_indirect(&save); - khui_context_release(&save); - } -} - -KHMEXP khui_menu_def * KHMAPI -khui_menu_dup(khui_menu_def * src) -{ - khui_menu_def * d; - size_t i; - size_t n; - - EnterCriticalSection(&cs_actions); - - d = khui_menu_create(src->cmd); - - if (!(src->state & KHUI_MENUSTATE_ALLOCD)) - n = khui_action_list_length(src->items); - else - n = src->n_items; - - for (i=0; i<n; i++) { - if (src->items[i].flags & KHUI_ACTIONREF_PACTION) { - khui_menu_insert_paction(d, (khm_size) -1, src->items[i].p_action, src->items[i].flags); - } else { - khui_menu_insert_action(d, (khm_size) -1, src->items[i].action, 0); - } - } - - LeaveCriticalSection(&cs_actions); - - return d; -} - -KHMEXP void KHMAPI -khui_menu_delete(khui_menu_def * d) -{ - int i; - - /* non-allocated menus are assumed to have no pointers to other - allocated blocks */ - if(!(d->state & KHUI_MENUSTATE_ALLOCD)) { - /* we shouldn't have tried to delete a constant menu */ -#ifdef DEBUG - assert(FALSE); -#endif - return; - } - - EnterCriticalSection(&cs_actions); - - for (i=0; i < khui_n_cust_menus; i++) { - if (khui_cust_menus[i] == d) { - khui_cust_menus[i] = NULL; - break; - } - } - - for(i=0; i< (int) d->n_items; i++) { - if(d->items[i].flags & KHUI_ACTIONREF_FREE_PACTION) - PFREE(d->items[i].p_action); - } - - if(d->items) - PFREE(d->items); - PFREE(d); - - LeaveCriticalSection(&cs_actions); -} - -static void -menu_assert_size(khui_menu_def * d, size_t n) -{ - - assert(d->state & KHUI_MENUSTATE_ALLOCD); - - if(n > (int) d->nc_items) { - khui_action_ref * ni; - - d->nc_items = UBOUNDSS(n, MENU_NC_ITEMS, MENU_NC_ITEMS); - ni = PMALLOC(sizeof(*(d->items)) * d->nc_items); - memcpy(ni, d->items, sizeof(*(d->items)) * d->n_items); - PFREE(d->items); - d->items = ni; - } -} - -static void -menu_const_to_allocd(khui_menu_def * d) -{ - khui_action_ref * olist; - khui_action_ref * nlist; - khm_size n; - - assert(!(d->state & KHUI_MENUSTATE_ALLOCD)); - - olist = d->items; - n = khui_action_list_length(d->items); - - d->nc_items = UBOUNDSS(n, MENU_NC_ITEMS, MENU_NC_ITEMS); - nlist = PMALLOC(sizeof(d->items[0]) * d->nc_items); - memcpy(nlist, olist, sizeof(d->items[0]) * n); - - d->items = nlist; - d->n_items = n; - d->state |= KHUI_MENUSTATE_ALLOCD; -} - -KHMEXP void KHMAPI -khui_menu_insert_action(khui_menu_def * d, khm_size idx, khm_int32 action, khm_int32 flags) -{ - khm_size i; - - EnterCriticalSection(&cs_actions); - - if (!(d->state & KHUI_MENUSTATE_ALLOCD)) - menu_const_to_allocd(d); - - assert(d->state & KHUI_MENUSTATE_ALLOCD); - assert(action == KHUI_MENU_SEP || action > 0); - - if (idx < 0 || idx > d->n_items) - idx = d->n_items; - - menu_assert_size(d, d->n_items + 1); - - if (idx < d->n_items) { - memmove(&d->items[idx + 1], &d->items[idx], (d->n_items - idx) * sizeof(d->items[0])); - } - - d->items[idx].flags = flags; - d->items[idx].action = action; - if (action == KHUI_MENU_SEP) - d->items[idx].flags |= KHUI_ACTIONREF_SEP; - - d->n_items++; - - /* only one action is allowed to have the KHUI_ACTIONREF_DEFAULT - flag */ - if (flags & KHUI_ACTIONREF_DEFAULT) { - for (i=0; i < d->n_items; i++) { - if (i != idx && (d->items[i].flags & KHUI_ACTIONREF_DEFAULT)) - d->items[i].flags &= ~KHUI_ACTIONREF_DEFAULT; - } - } - - LeaveCriticalSection(&cs_actions); -} - -KHMEXP void KHMAPI -khui_menu_insert_paction(khui_menu_def * d, khm_size idx, khui_action * paction, int flags) -{ - khm_size i; - - if (paction == NULL) - return; - - EnterCriticalSection(&cs_actions); - - if (!(d->state & KHUI_MENUSTATE_ALLOCD)) - menu_const_to_allocd(d); - - assert(d->state & KHUI_MENUSTATE_ALLOCD); - - if (idx < 0 || idx > d->n_items) - idx = d->n_items; - - menu_assert_size(d, d->n_items + 1); - - if (idx < d->n_items) { - memmove(&d->items[idx + 1], &d->items[idx], (d->n_items - idx) * sizeof(d->items[0])); - } - - d->items[idx].flags = flags | KHUI_ACTIONREF_PACTION; - d->items[idx].p_action = paction; - - d->n_items++; - - /* only one action is allowed to have the KHUI_ACTIONREF_DEFAULT - flag */ - if (flags & KHUI_ACTIONREF_DEFAULT) { - for (i=0; i < d->n_items; i++) { - if (i != idx && (d->items[i].flags & KHUI_ACTIONREF_DEFAULT)) - d->items[i].flags &= ~KHUI_ACTIONREF_DEFAULT; - } - } - - LeaveCriticalSection(&cs_actions); -} - -KHMEXP void KHMAPI -khui_menu_remove_action(khui_menu_def * d, khm_size idx) { - - EnterCriticalSection(&cs_actions); - - if (!(d->state & KHUI_MENUSTATE_ALLOCD)) - menu_const_to_allocd(d); - - assert(d->state & KHUI_MENUSTATE_ALLOCD); - - if (idx >= 0 && idx < d->n_items) { - - if (idx < d->n_items - 1) { - memmove(&d->items[idx], &d->items[idx + 1], - ((d->n_items - 1) - idx) * sizeof(d->items[0])); - } - - d->n_items--; - - } - - LeaveCriticalSection(&cs_actions); -} - -KHMEXP khm_size KHMAPI -khui_menu_get_size(khui_menu_def * d) { - - khm_size size; - - EnterCriticalSection(&cs_actions); - - if (d->state & KHUI_MENUSTATE_ALLOCD) - size = d->n_items; - else - size = khui_action_list_length(d->items); - - LeaveCriticalSection(&cs_actions); - - return size; -} - -KHMEXP khui_action_ref * -khui_menu_get_action(khui_menu_def * d, khm_size idx) { - - khui_action_ref * act = NULL; - khm_size n; - - EnterCriticalSection(&cs_actions); - - if (d->state & KHUI_MENUSTATE_ALLOCD) - n = d->n_items; - else - n = khui_action_list_length(d->items); - - if (idx < 0 || idx >= n) - act = NULL; - else - act = &d->items[idx]; - - LeaveCriticalSection(&cs_actions); - - return act; -} - -KHMEXP khui_menu_def * KHMAPI -khui_find_menu(khm_int32 id) { - khui_menu_def * d; - int i; - - if (id < KHUI_USERACTION_BASE) { - - /* the list of system menus are considered immutable. */ - - d = khui_all_menus; - for(i=0;i<khui_n_all_menus;i++) { - if(id == d[i].cmd) - return &d[i]; - } - - return NULL; - } else { - d = NULL; - - EnterCriticalSection(&cs_actions); - for (i=0; i < khui_n_cust_menus; i++) { - if (khui_cust_menus[i] && - khui_cust_menus[i]->cmd == id) { - d = khui_cust_menus[i]; - break; - } - } - LeaveCriticalSection(&cs_actions); - - return d; - } -} - -KHMEXP khui_action * KHMAPI -khui_find_action(khm_int32 id) { - khui_action * act = NULL; - int i; - - if (id < KHUI_USERACTION_BASE) { - act = khui_actions; - for(i=0;i<khui_n_actions;i++) { - if(act[i].cmd == id) - return &act[i]; - } - - return NULL; - } - - EnterCriticalSection(&cs_actions); - if (id >= KHUI_USERACTION_BASE && - (id - KHUI_USERACTION_BASE) < khui_n_cust_actions) { - act = khui_cust_actions[id - KHUI_USERACTION_BASE]; -#ifdef DEBUG - assert(!act || act->cmd == id); -#endif - if (act && (act->state & KHUI_ACTIONSTATE_DELETED)) - act = NULL; - } - LeaveCriticalSection(&cs_actions); - - return act; -} - -KHMEXP khui_action * KHMAPI -khui_find_named_action(const wchar_t * name) { - int i; - khui_action * act; - khui_action ** pact; - - if(!name) - return NULL; - - act = khui_actions; - for(i=0;i<khui_n_actions;i++) { - if(!act[i].name) - continue; - if(!wcscmp(act[i].name, name)) - return &act[i]; - } - - act = NULL; - - EnterCriticalSection(&cs_actions); - - pact = khui_cust_actions; - for(i=0;i<khui_n_cust_actions;i++) { - if(!pact[i] || !pact[i]->name) - continue; - - if(!wcscmp(pact[i]->name, name)) { - - if (!(pact[i]->state & KHUI_ACTIONSTATE_DELETED)) { - act = pact[i]; - } - break; - } - } - - LeaveCriticalSection(&cs_actions); - - return act; -} - -KHMEXP size_t KHMAPI -khui_action_list_length(khui_action_ref * ref) { - size_t c = 0; - - EnterCriticalSection(&cs_actions); - - while(ref && ref->action != KHUI_MENU_END && - !(ref->flags & KHUI_ACTIONREF_END)) { - c++; - ref++; - } - - LeaveCriticalSection(&cs_actions); - - return c; -} - -KHMEXP void KHMAPI -khui_check_radio_action(khui_menu_def * d, khm_int32 cmd) -{ - khui_action_ref * r; - khui_action * act; - - EnterCriticalSection(&cs_actions); - - r = d->items; - while(r && r->action != KHUI_MENU_END && - (!(d->state & KHUI_MENUSTATE_ALLOCD) || (r - d->items) < (int) d->n_items)) { - if(r->flags & KHUI_ACTIONREF_PACTION) { - act = r->p_action; - } else { - act = khui_find_action(r->action); - } - - if(act) { - if(act->cmd == cmd) - act->state |= KHUI_ACTIONSTATE_CHECKED; - else - act->state &= ~KHUI_ACTIONSTATE_CHECKED; - } - r++; - } - - LeaveCriticalSection(&cs_actions); - - kmq_post_message(KMSG_ACT, KMSG_ACT_CHECK, 0, 0); -} - -KHMEXP void KHMAPI -khui_check_action(khm_int32 cmd, khm_boolean check) { - khui_action * act; - - act = khui_find_action(cmd); - if (!act) - return; - - EnterCriticalSection(&cs_actions); - - if (check && !(act->state & KHUI_ACTIONSTATE_CHECKED)) - act->state |= KHUI_ACTIONSTATE_CHECKED; - else if (!check && (act->state & KHUI_ACTIONSTATE_CHECKED)) - act->state &= ~KHUI_ACTIONSTATE_CHECKED; - else { - LeaveCriticalSection(&cs_actions); - return; - } - - LeaveCriticalSection(&cs_actions); - - kmq_post_message(KMSG_ACT, KMSG_ACT_CHECK, 0, 0); -} - -KHMEXP void KHMAPI -khui_enable_actions(khui_menu_def * d, khm_boolean enable) -{ - khui_action_ref * r; - int delta = FALSE; - khui_action * act; - - EnterCriticalSection(&cs_actions); - - r = d->items; - while(r && r->action != KHUI_MENU_END && - (!(d->state & KHUI_MENUSTATE_ALLOCD) || (r - d->items) < (int) d->n_items)) { - if(r->flags & KHUI_ACTIONREF_PACTION) { - act = r->p_action; - } else { - act = khui_find_action(r->action); - } - - if(act) { - int old_state = act->state; - - if(enable) - act->state &= ~KHUI_ACTIONSTATE_DISABLED; - else - act->state |= KHUI_ACTIONSTATE_DISABLED; - - if(old_state != act->state) - delta = TRUE; - } - r++; - } - - LeaveCriticalSection(&cs_actions); - - if(delta) { - kmq_post_message(KMSG_ACT, KMSG_ACT_ENABLE, 0, 0); - } -} - -KHMEXP void KHMAPI -khui_enable_action(khm_int32 cmd, khm_boolean enable) { - khui_action * act; - - act = khui_find_action(cmd); - if (!act) - return; - - EnterCriticalSection(&cs_actions); - - if (enable && (act->state & KHUI_ACTIONSTATE_DISABLED)) { - act->state &= ~KHUI_ACTIONSTATE_DISABLED; - } else if (!enable && !(act->state & KHUI_ACTIONSTATE_DISABLED)) { - act->state |= KHUI_ACTIONSTATE_DISABLED; - } else { - LeaveCriticalSection(&cs_actions); - return; - } - - LeaveCriticalSection(&cs_actions); - - kmq_post_message(KMSG_ACT, KMSG_ACT_ENABLE, 0, 0); -} - -KHMEXP HACCEL KHMAPI -khui_create_global_accel_table(void) { - int i; - ACCEL * accels; - HACCEL ha; - - accels = PMALLOC(sizeof(ACCEL) * khui_n_accel_global); - for(i=0;i<khui_n_accel_global;i++) { - accels[i].cmd = (WORD) khui_accel_global[i].cmd; - accels[i].fVirt = (BYTE) khui_accel_global[i].mod; - accels[i].key = (WORD) khui_accel_global[i].key; - } - - ha = CreateAcceleratorTable(accels, khui_n_accel_global); - - PFREE(accels); - - return ha; -} - -KHMEXP khm_boolean KHMAPI -khui_get_cmd_accel_string(khm_int32 cmd, - wchar_t * buf, - khm_size bufsiz) { - int i; - khui_accel_def * def; - - /* should at least hold 2 characters */ - if(bufsiz < sizeof(wchar_t) * 2) - return FALSE; - - buf[0] = L'\0'; - - for(i=0;i<khui_n_accel_global;i++) { - if(khui_accel_global[i].cmd == cmd) - break; - } - - if(i==khui_n_accel_global) - return FALSE; - - def = &khui_accel_global[i]; - - if(def->mod & FALT) { - if(FAILED(StringCbCat(buf, bufsiz, L"Alt+"))) - return FALSE; - } - - - if(def->mod & FCONTROL) { - if(FAILED(StringCbCat(buf, bufsiz, L"Ctrl+"))) - return FALSE; - } - - if(def->mod & FSHIFT) { - if(FAILED(StringCbCat(buf, bufsiz, L"Shift+"))) - return FALSE; - } - - if(def->mod & FVIRTKEY) { - wchar_t mbuf[6]; - wchar_t * ap = NULL; - switch(def->key) { - case VK_TAB: - ap = L"Tab"; - break; - - case VK_ESCAPE: - ap = L"Esc"; - break; - - case VK_RETURN: - ap = L"Enter"; - break; - - case VK_F1: - ap = L"F1"; - break; - - case VK_F2: - ap = L"F2"; - break; - - case VK_F3: - ap = L"F3"; - break; - - case VK_F4: - ap = L"F4"; - break; - - case VK_F5: - ap = L"F5"; - break; - - case VK_F6: - ap = L"F6"; - break; - - case VK_F7: - ap = L"F7"; - break; - - case VK_F8: - ap = L"F8"; - break; - - case VK_F9: - ap = L"F9"; - break; - - case VK_F10: - ap = L"F10"; - break; - - case VK_F11: - ap = L"F11"; - break; - - case VK_F12: - ap = L"F12"; - break; - - case VK_DELETE: - ap = L"Del"; - break; - - default: - if((def->key >= '0' && - def->key <= '9') || - (def->key >= 'A' && - def->key <= 'Z')) { - ap = mbuf; - mbuf[0] = (wchar_t) def->key; - mbuf[1] = L'\0'; - } - } - if(ap) { - if(FAILED(StringCbCat(buf, bufsiz, ap))) - return FALSE; - } - else { - if(FAILED(StringCbCat(buf, bufsiz,L"???"))) - return FALSE; - } - - } else { - wchar_t mbuf[2]; - - mbuf[0] = (wchar_t) def->key; - mbuf[1] = L'\0'; - - if(FAILED(StringCbCat(buf, bufsiz, mbuf))) - return FALSE; - } - - return TRUE; -} - -/******************************************/ -/* contexts */ - -#define KHUI_ACTION_CONTEXT_MAGIC 0x39c49db5 - -static khm_int32 KHMAPI -khuiint_filter_selected(khm_handle cred, - khm_int32 vflags, - void * rock) { - khm_int32 flags; - if (KHM_SUCCEEDED(kcdb_cred_get_flags(cred, &flags)) && - (flags & KCDB_CRED_FLAG_SELECTED)) - return TRUE; - else - return FALSE; -} - -static void -khuiint_context_release(khui_action_context * ctx) { - ctx->scope = KHUI_SCOPE_NONE; - if (ctx->identity) - kcdb_identity_release(ctx->identity); - ctx->identity = NULL; - ctx->cred_type = KCDB_CREDTYPE_INVALID; - if (ctx->cred) - kcdb_cred_release(ctx->cred); - ctx->cred = NULL; - ctx->n_headers = 0; - if (ctx->credset) - kcdb_credset_flush(ctx->credset); - ctx->n_sel_creds = 0; - ctx->int_cb_used = 0; - ctx->vparam = NULL; - ctx->cb_vparam = 0; -} - -static void -khuiint_copy_context(khui_action_context * ctxdest, - const khui_action_context * ctxsrc) -{ - ctxdest->scope = ctxsrc->scope; - - if (ctxsrc->scope == KHUI_SCOPE_IDENT) { - ctxdest->identity = ctxsrc->identity; - kcdb_identity_hold(ctxsrc->identity); - } else if (ctxsrc->scope == KHUI_SCOPE_CREDTYPE) { - ctxdest->identity = ctxsrc->identity; - ctxdest->cred_type = ctxsrc->cred_type; - if (ctxsrc->identity != NULL) - kcdb_identity_hold(ctxsrc->identity); - } else if (ctxsrc->scope == KHUI_SCOPE_CRED) { - kcdb_cred_get_identity(ctxsrc->cred, &ctxdest->identity); - kcdb_cred_get_type(ctxsrc->cred, &ctxdest->cred_type); - ctxdest->cred = ctxsrc->cred; - kcdb_cred_hold(ctxsrc->cred); - } else if (ctxsrc->scope == KHUI_SCOPE_GROUP) { - khm_size cb_total; - int i; - - ctxdest->n_headers = ctxsrc->n_headers; - cb_total = 0; - for (i=0; i < (int) ctxsrc->n_headers; i++) { - cb_total += UBOUND32(ctxsrc->headers[i].cb_data); - } - - if (ctxdest->int_cb_buf < cb_total) { - - if (ctxdest->int_buf) - PFREE(ctxdest->int_buf); - - ctxdest->int_cb_buf = cb_total; - ctxdest->int_buf = PMALLOC(cb_total); - } - -#ifdef DEBUG - assert(ctxdest->int_buf || cb_total == 0); -#endif - ctxdest->int_cb_used = 0; - - for (i=0; i < (int) ctxsrc->n_headers; i++) { - ctxdest->headers[i].attr_id = ctxsrc->headers[i].attr_id; - ctxdest->headers[i].cb_data = ctxsrc->headers[i].cb_data; - if (ctxsrc->headers[i].cb_data > 0) { - ctxdest->headers[i].data = - BYTEOFFSET(ctxdest->int_buf, - ctxdest->int_cb_used); - memcpy(ctxdest->headers[i].data, - ctxsrc->headers[i].data, - ctxsrc->headers[i].cb_data); - ctxdest->int_cb_used += - UBOUND32(ctxsrc->headers[i].cb_data); - } else { - ctxdest->headers[i].data = NULL; - } - } - } - - if (ctxsrc->credset) { - - if (ctxdest->credset == NULL) - kcdb_credset_create(&ctxdest->credset); -#ifdef DEBUG - assert(ctxdest->credset != NULL); -#endif - - kcdb_credset_flush(ctxdest->credset); - - kcdb_credset_extract_filtered(ctxdest->credset, - ctxsrc->credset, - khuiint_filter_selected, - NULL); - - kcdb_credset_get_size(ctxdest->credset, - &ctxdest->n_sel_creds); - } else { - if (ctxdest->credset != NULL) - kcdb_credset_flush(ctxdest->credset); - ctxdest->n_sel_creds = 0; - } - - /* For now, we simply transfer the vparam buffer into the new - context. If we are copying, we also need to modify - khui_context_release() to free the allocated buffer */ -#if 0 - if (ctxsrc->vparam && ctxsrc->cb_vparam) { - ctxdest->vparam = PMALLOC(ctxsrc->cb_vparam); -#ifdef DEBUG - assert(ctxdest->vparam); -#endif - memcpy(ctxdest->vparam, ctxsrc->vparam, ctxsrc->cb_vparam); - ctxdest->cb_vparam = ctxsrc->cb_vparam; - } else { -#endif - ctxdest->vparam = ctxsrc->vparam; - ctxdest->cb_vparam = ctxsrc->cb_vparam; -#if 0 - } -#endif -} - -static void -khuiint_context_init(khui_action_context * ctx) { - ctx->magic = KHUI_ACTION_CONTEXT_MAGIC; - ctx->scope = KHUI_SCOPE_NONE; - ctx->identity = NULL; - ctx->cred_type = KCDB_CREDTYPE_INVALID; - ctx->cred = NULL; - ZeroMemory(ctx->headers, sizeof(ctx->headers)); - ctx->n_headers = 0; - ctx->credset = NULL; - ctx->n_sel_creds = 0; - ctx->int_buf = NULL; - ctx->int_cb_buf = 0; - ctx->int_cb_used = 0; - ctx->vparam = NULL; - ctx->cb_vparam = 0; -} - -khui_action_context khui_ctx = { - KHUI_ACTION_CONTEXT_MAGIC, - KHUI_SCOPE_NONE, - NULL, - KCDB_CREDTYPE_INVALID, - NULL, - { - {KCDB_ATTR_INVALID,NULL,0}, - {KCDB_ATTR_INVALID,NULL,0}, - {KCDB_ATTR_INVALID,NULL,0}, - {KCDB_ATTR_INVALID,NULL,0}, - {KCDB_ATTR_INVALID,NULL,0}, - {KCDB_ATTR_INVALID,NULL,0} - }, - 0, - NULL, - 0, - NULL, - 0, - 0, - NULL, - 0}; - -khm_int32 KHMAPI -set_cred_select_flag(khm_handle cred, void * rock) { - kcdb_cred_set_flags(cred, KCDB_CRED_FLAG_SELECTED, - KCDB_CRED_FLAG_SELECTED); - return KHM_ERROR_SUCCESS; -} - -KHMEXP void KHMAPI -khui_context_create(khui_action_context * ctx, - khui_scope scope, - khm_handle identity, - khm_int32 cred_type, - khm_handle cred) -{ - khui_action_context tctx; - - khuiint_context_init(&tctx); - khuiint_context_init(ctx); - - tctx.scope = scope; - tctx.identity = identity; - tctx.cred_type = cred_type; - tctx.cred = cred; - - /* fill up the credset based on the scope */ - if (scope != KHUI_SCOPE_NONE) { - if (tctx.credset == NULL) - kcdb_credset_create(&tctx.credset); - else - kcdb_credset_flush(tctx.credset); - - if (scope == KHUI_SCOPE_IDENT) { - kcdb_credset_extract(tctx.credset, - NULL, - tctx.identity, - KCDB_CREDTYPE_INVALID); - } else if (scope == KHUI_SCOPE_CREDTYPE) { - kcdb_credset_extract(tctx.credset, - NULL, - tctx.identity, - tctx.cred_type); - } else if (scope == KHUI_SCOPE_CRED) { - khm_handle dupcred = NULL; - kcdb_cred_dup(cred, &dupcred); - - kcdb_credset_add_cred(tctx.credset, dupcred, -1); - } else { -#ifdef DEBUG - /* KHUI_SCOPE_GROUP is not used with - khui_context_create() */ - assert(FALSE); -#endif - } - - kcdb_credset_apply(tctx.credset, set_cred_select_flag, - NULL); - - kcdb_credset_seal(tctx.credset); - } - - khuiint_copy_context(ctx, &tctx); -} - -KHMEXP void KHMAPI -khui_context_set(khui_scope scope, - khm_handle identity, - khm_int32 cred_type, - khm_handle cred, - khui_header *headers, - khm_size n_headers, - khm_handle cs_src) { - - khui_context_set_ex(scope, - identity, - cred_type, - cred, - headers, - n_headers, - cs_src, - NULL, - 0); -} - -KHMEXP void KHMAPI -khui_context_set_ex(khui_scope scope, - khm_handle identity, - khm_int32 cred_type, - khm_handle cred, - khui_header *headers, - khm_size n_headers, - khm_handle cs_src, - void * vparam, - khm_size cb_vparam) -{ - khui_action_context tctx; - - EnterCriticalSection(&cs_actions); - - khuiint_context_release(&khui_ctx); - - khuiint_context_init(&tctx); - - tctx.scope = scope; - tctx.identity = identity; - tctx.cred_type = cred_type; - tctx.cred = cred; - if (headers) { - tctx.n_headers = n_headers; - memcpy(tctx.headers, - headers, - sizeof(*headers) * n_headers); - } else { - tctx.n_headers = 0; - } - tctx.credset = cs_src; - tctx.n_sel_creds = 0; /* ignored */ - tctx.vparam = vparam; - tctx.cb_vparam = cb_vparam; - tctx.int_buf = NULL; - tctx.int_cb_buf = 0; - tctx.int_cb_used = 0; - - khuiint_copy_context(&khui_ctx, &tctx); - - khui_context_refresh(); - - LeaveCriticalSection(&cs_actions); -} - -KHMEXP void KHMAPI -khui_context_set_indirect(khui_action_context * ctx) -{ - EnterCriticalSection(&cs_actions); - - khuiint_context_release(&khui_ctx); - - khuiint_copy_context(&khui_ctx, ctx); - - khui_context_refresh(); - - LeaveCriticalSection(&cs_actions); -} - -KHMEXP void KHMAPI -khui_context_refresh(void) { - khm_int32 flags; - - EnterCriticalSection(&cs_actions); - if (khui_ctx.identity) { - /* an identity is selected */ - - if (KHM_SUCCEEDED(kcdb_identity_get_flags(khui_ctx.identity, - &flags)) && - (flags & KCDB_IDENT_FLAG_DEFAULT)) { - khui_check_action(KHUI_ACTION_SET_DEF_ID, TRUE); - khui_enable_action(KHUI_ACTION_SET_DEF_ID, FALSE); - } else { - khui_check_action(KHUI_ACTION_SET_DEF_ID, FALSE); - khui_enable_action(KHUI_ACTION_SET_DEF_ID, TRUE); - } - } else { - khui_check_action(KHUI_ACTION_SET_DEF_ID, FALSE); - khui_enable_action(KHUI_ACTION_SET_DEF_ID, FALSE); - } - - if (khui_ctx.scope != KHUI_SCOPE_NONE) { - khui_enable_action(KHUI_ACTION_PROPERTIES, TRUE); - } else { - khui_enable_action(KHUI_ACTION_PROPERTIES, FALSE); - } - - LeaveCriticalSection(&cs_actions); - - kmq_post_message(KMSG_ACT, KMSG_ACT_REFRESH, 0, 0); -} - -KHMEXP void KHMAPI -khui_context_get(khui_action_context * ctx) -{ - EnterCriticalSection(&cs_actions); - - khuiint_context_init(ctx); - khuiint_copy_context(ctx, &khui_ctx); - - if (ctx->credset) { - kcdb_credset_seal(ctx->credset); - } - - LeaveCriticalSection(&cs_actions); -} - -KHMEXP void KHMAPI -khui_context_release(khui_action_context * ctx) -{ -#ifdef DEBUG - assert(ctx->magic == KHUI_ACTION_CONTEXT_MAGIC); -#endif - - khuiint_context_release(ctx); - if (ctx->credset) { - kcdb_credset_unseal(ctx->credset); - kcdb_credset_delete(ctx->credset); - } - ctx->credset = NULL; - if (ctx->int_buf) - PFREE(ctx->int_buf); - ctx->int_buf = NULL; -#if 0 - if (ctx->vparam && ctx->cb_vparam > 0) { - PFREE(ctx->vparam); - ctx->vparam = NULL; - } - ctx->cb_vparam = 0; -#else - ctx->vparam = 0; - ctx->cb_vparam = 0; -#endif -} - -KHMEXP void KHMAPI -khui_context_reset(void) -{ - EnterCriticalSection(&cs_actions); - - khuiint_context_release(&khui_ctx); - - khui_context_refresh(); - - LeaveCriticalSection(&cs_actions); -} - -KHMEXP khm_int32 KHMAPI -khui_context_cursor_filter(khm_handle cred, - khm_int32 flags, - void * rock) { - khui_action_context * ctx = (khui_action_context *) rock; - khm_int32 rv; - - if (ctx->scope == KHUI_SCOPE_NONE) - return 0; - else if (ctx->scope == KHUI_SCOPE_IDENT) { - khm_handle c_ident; - - if (KHM_FAILED(kcdb_cred_get_identity(cred, &c_ident))) - return 0; - - rv = (c_ident == ctx->identity); - - kcdb_identity_release(c_ident); - - return rv; - } else if (ctx->scope == KHUI_SCOPE_CREDTYPE) { - khm_handle c_ident; - khm_int32 c_type; - - if (KHM_FAILED(kcdb_cred_get_type(cred, &c_type)) || - c_type != ctx->cred_type) - return 0; - - if (ctx->identity == NULL) - return 1; - - if (KHM_FAILED(kcdb_cred_get_identity(cred, &c_ident))) - return 0; - - rv = (c_ident == ctx->identity); - - kcdb_identity_release(c_ident); - - return rv; - } else if (ctx->scope == KHUI_SCOPE_CRED) { - return kcdb_creds_is_equal(cred, ctx->cred); - } else if (ctx->scope == KHUI_SCOPE_GROUP) { - int i; - - rv = 1; - - for (i=0; i < (int) ctx->n_headers && rv; i++) { - kcdb_attrib * pattr; - kcdb_type * ptype; - DWORD buffer[1024]; /* 4096 bytes */ - khm_size cb; - - if (kcdb_cred_get_attr(cred, ctx->headers[i].attr_id, - NULL, - NULL, - &cb) != KHM_ERROR_TOO_LONG) { - /* the header doesn't exist anyway */ - rv = (ctx->headers[i].cb_data == 0); - continue; - } -#ifdef DEBUG - assert(cb <= sizeof(buffer)); -#endif - cb = sizeof(buffer); - - if (KHM_FAILED(kcdb_cred_get_attr(cred, - ctx->headers[i].attr_id, - NULL, - (void *) buffer, - &cb))) { - rv = 0; - continue; - } - - if (KHM_FAILED(kcdb_attrib_get_info(ctx->headers[i].attr_id, - &pattr))) { - rv = 0; - continue; - } - - if (KHM_FAILED(kcdb_type_get_info(pattr->type, &ptype))) { - rv = 0; - kcdb_attrib_release_info(pattr); - continue; - } - - if ((*ptype->comp)(ctx->headers[i].data, - ctx->headers[i].cb_data, - (void *) buffer, - cb) != 0) - rv = 1; - - kcdb_type_release_info(ptype); - kcdb_attrib_release_info(pattr); - } - - return rv; - } else - return 0; -} diff --git a/src/windows/identity/uilib/actiondef.cfg b/src/windows/identity/uilib/actiondef.cfg deleted file mode 100644 index 4537c9849..000000000 --- a/src/windows/identity/uilib/actiondef.cfg +++ /dev/null @@ -1,67 +0,0 @@ -# -# Copyright (c) 2004 Massachusetts Institute of Technology -# -# 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. -# - -$file_prefix = <<EOS; -/* -This file was autogenerated from src/ui/actiondef.cfg and src/ui/actions.csv. - -Do not modify directly. -*/ - -#define NOEXPORT - -#include<khuidefs.h> -#include<khhelp.h> -#include<intaction.h> -#include"../ui/resource.h" - -khui_action khui_actions [] = { -EOS - -$record_prefix = "ACTION_FULL("; - -$record_sep = ",\n"; - -$record_postfix = ")"; - -$file_postfix = <<EOS; - -}; - -int khui_n_actions = sizeof(khui_actions) / sizeof(khui_action); - -EOS - -$skip_lines = 1; - -sub rec_handler { - $arr = shift; - if($$arr[2] =~ /^$/) { - $$arr[2] = "NULL"; - } else { - $$arr[2] = "L\"".$$arr[2]."\""; - } -} - -$record_parser = \&rec_handler; diff --git a/src/windows/identity/uilib/actions.csv b/src/windows/identity/uilib/actions.csv deleted file mode 100644 index dc6286bf2..000000000 --- a/src/windows/identity/uilib/actions.csv +++ /dev/null @@ -1,55 +0,0 @@ -Command,Type,Name,Img Normal,Img Hot,Img Disabled,Ico Normal,Ico Disabled,Caption,Tooltip,Topic,State -KHUI_MENU_FILE,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_MENU_FILE,0,IDH_MENU_FILE,0 -KHUI_MENU_CRED,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_MENU_CRED,0,IDH_MENU_CRED,0 -KHUI_MENU_VIEW,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_MENU_VIEW,0,IDH_MENU_VIEW,0 -KHUI_MENU_OPTIONS,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_MENU_OPTIONS,0,IDH_MENU_OPTIONS,0 -KHUI_MENU_HELP,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_MENU_HELP,0,IDH_MENU_HELP,0 -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_MENU_SETDEF,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_MENU_SETDEF,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 -KHUI_ACTION_SET_SRCH_ID,KHUI_ACTIONTYPE_TRIGGER | KHUI_ACTIONTYPE_TOGGLE,,0,0,0,0,0,IDS_ACTION_SET_SRCH_ID,0,IDH_ACTION_SET_SRCH_ID,KHUI_ACTIONSTATE_DISABLED -KHUI_ACTION_PASSWD_ID,KHUI_ACTIONTYPE_TRIGGER,,IDB_CHPW,0,IDB_CHPW_DIS,IDB_CHPW_SM,IDB_CHPW_DIS_SM,IDS_ACTION_PASSWD_ID,IDS_ACTIONT_PASSWD_ID,IDH_ACTION_PASSWD_ID,0 -KHUI_ACTION_NEW_CRED,KHUI_ACTIONTYPE_TRIGGER,,IDB_TK_NEW,0,IDB_TK_NEW_DIS,IDB_TK_NEW_SM,IDB_TK_NEW_DIS_SM,IDS_ACTION_NEW_CRED,IDS_ACTIONT_NEW_CRED,IDH_ACTION_NEW_CRED,0 -KHUI_ACTION_RENEW_CRED,KHUI_ACTIONTYPE_TRIGGER,,IDB_TK_REFRESH,0,IDB_TK_REFRESH_DIS,IDB_TK_REFRESH_SM,IDB_TK_REFRESH_DIS_SM,IDS_ACTION_RENEW_CRED,IDS_ACTIONT_RENEW_CRED,0,0 -KHUI_ACTION_DESTROY_CRED,KHUI_ACTIONTYPE_TRIGGER,,IDB_TK_DELETE,0,IDB_TK_DELETE_DIS,IDB_TK_DELETE_SM,IDB_TK_DELETE_DIS_SM,IDS_ACTION_DESTROY_CRED,IDS_ACTIONT_DESTROY_CRED,0,0 -KHUI_ACTION_LAYOUT_ID,KHUI_ACTIONTYPE_TRIGGER | KHUI_ACTIONTYPE_TOGGLE,,0,0,0,0,0,IDS_ACTION_LAYOUT_ID,0,0,KHUI_ACTIONSTATE_CHECKED -KHUI_ACTION_LAYOUT_TYPE,KHUI_ACTIONTYPE_TRIGGER | KHUI_ACTIONTYPE_TOGGLE,,0,0,0,0,0,IDS_ACTION_LAYOUT_TYPE,0,0,0 -KHUI_ACTION_LAYOUT_LOC,KHUI_ACTIONTYPE_TRIGGER | KHUI_ACTIONTYPE_TOGGLE,,0,0,0,0,0,IDS_ACTION_LAYOUT_LOC,0,0,0 -KHUI_ACTION_LAYOUT_CUST,KHUI_ACTIONTYPE_TRIGGER | KHUI_ACTIONTYPE_TOGGLE,,0,0,0,0,0,IDS_ACTION_LAYOUT_CUST,0,0,0 -KHUI_ACTION_LAYOUT_MINI,KHUI_ACTIONTYPE_TRIGGER | KHUI_ACTIONTYPE_TOGGLE,,0,0,0,0,0,IDS_ACTION_LAYOUT_MINI,0,0,0 -KHUI_ACTION_TB_STANDARD,KHUI_ACTIONTYPE_TRIGGER | KHUI_ACTIONTYPE_TOGGLE,,0,0,0,0,0,IDS_ACTION_TB_STANDARD,0,0,KHUI_ACTIONSTATE_CHECKED|KHUI_ACTIONSTATE_DISABLED -KHUI_ACTION_VIEW_ALL_IDS,KHUI_ACTIONTYPE_TRIGGER | KHUI_ACTIONTYPE_TOGGLE,,0,0,0,0,0,IDS_ACTION_VIEW_ALL_IDS,0,0,0 -KHUI_ACTION_DEBUG_WINDOW,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_DEBUG_WINDOW,0,IDH_ACTION_DEBUG_WINDOW,KHUI_ACTIONSTATE_DISABLED -KHUI_ACTION_VIEW_REFRESH,KHUI_ACTIONTYPE_TRIGGER,,IDB_VW_REFRESH,0,0,IDB_VW_REFRESH_SM,0,IDS_ACTION_VIEW_REFRESH,IDS_ACTIONT_VIEW_REFRESH,IDH_ACTION_VIEW_REFRESH,0 -KHUI_ACTION_OPT_IDENTS,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_OPT_IDENTS,IDS_ACTIONT_OPT_IDENTS,IDH_ACTION_OPT_INIT,0 -KHUI_ACTION_OPT_KHIM,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_OPT_KHIM,IDS_ACTIONT_OPT_KHIM,IDH_ACTION_OPT_KHIM,0 -KHUI_ACTION_OPT_NOTIF,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_OPT_NOTIF,IDS_ACTIONT_OPT_NOTIF,IDH_ACTION_OPT_NOTIF,0 -KHUI_ACTION_OPT_PLUGINS,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_OPT_PLUGINS,IDS_ACTIONT_OPT_PLUGINS,IDH_ACTION_OPT_KHIM,0 -KHUI_ACTION_OPT_APPEAR,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_OPT_APPEAR,IDS_ACTIONT_OPT_APPEAR,0,0 -KHUI_ACTION_HELP_CTX,KHUI_ACTIONTYPE_TRIGGER,,IDB_HELP,0,0,IDB_HELP_SM,0,IDS_ACTION_HELP_CTX,IDS_ACTIONT_HELP_CTX,0,0 -KHUI_ACTION_HELP_CONTENTS,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_HELP_CONTENTS,0,0,0 -KHUI_ACTION_HELP_INDEX,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_HELP_INDEX,0,0,0 -KHUI_ACTION_HELP_ABOUT,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_HELP_ABOUT,0,0,0 -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 -KHUI_PACTION_BLANK,0,,IDB_TB_SPACE,0,IDB_TB_SPACE,IDB_TB_BLANK_SM,IDB_TB_BLANK_SM,0,0,0,KHUI_ACTIONSTATE_DISABLED -KHUI_PACTION_NEXT,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_PACTION_NEXT,0,0,0 -KHUI_PACTION_YES,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_PACTION_YES,0,0,0 -KHUI_PACTION_NO,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_PACTION_NO,0,0,0 -KHUI_PACTION_YESALL,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_PACTION_YESALL,0,0,0 -KHUI_PACTION_NOALL,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_PACTION_NOALL,0,0,0 -KHUI_PACTION_KEEP,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_PACTION_KEEP,0,0,0 -KHUI_PACTION_REMOVE,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_PACTION_REMOVE,0,0,0 -KHUI_PACTION_DISCARD,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_PACTION_DISCARD,0,0,0 diff --git a/src/windows/identity/uilib/alert.c b/src/windows/identity/uilib/alert.c deleted file mode 100644 index 62861eff9..000000000 --- a/src/windows/identity/uilib/alert.c +++ /dev/null @@ -1,440 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -#define _NIMLIB_ - -#include<khuidefs.h> -#include<utils.h> -#include<intalert.h> -#include<assert.h> - -#include<strsafe.h> - -/*********************************************************************** - Alerter -***********************************************************************/ - - -khui_alert * kh_alerts = NULL; -CRITICAL_SECTION cs_alerts; - -void -alert_init(void) -{ - InitializeCriticalSection(&cs_alerts); -} - -void -alert_exit(void) -{ - DeleteCriticalSection(&cs_alerts); -} - -KHMEXP khm_int32 KHMAPI -khui_alert_create_empty(khui_alert ** result) -{ - khui_alert * a; - - a = PMALLOC(sizeof(*a)); - ZeroMemory(a, sizeof(*a)); - - a->magic = KHUI_ALERT_MAGIC; - - /* set defaults */ - a->severity = KHERR_INFO; - a->flags = KHUI_ALERT_FLAG_FREE_STRUCT; - a->alert_type = KHUI_ALERTTYPE_NONE; - khui_context_create(&a->ctx, KHUI_SCOPE_NONE, - NULL, KCDB_CREDTYPE_INVALID, - NULL); - - khui_alert_hold(a); - EnterCriticalSection(&cs_alerts); - LPUSH(&kh_alerts, a); - LeaveCriticalSection(&cs_alerts); - - *result = a; - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_alert_create_simple(const wchar_t * title, - const wchar_t * message, - khm_int32 severity, - khui_alert ** result) -{ - khui_alert * a; - - khui_alert_create_empty(&a); - khui_alert_set_title(a, title); - khui_alert_set_message(a, message); - khui_alert_set_severity(a, severity); - - *result = a; - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_alert_set_title(khui_alert * alert, const wchar_t * title) -{ - size_t cb = 0; - - assert(alert->magic == KHUI_ALERT_MAGIC); - - if(title) { - if(FAILED(StringCbLength(title, - KHUI_MAXCB_TITLE, - &cb))) { - return KHM_ERROR_INVALID_PARAM; - } - cb += sizeof(wchar_t); - } - - EnterCriticalSection(&cs_alerts); - if(alert->title && (alert->flags & KHUI_ALERT_FLAG_FREE_TITLE)) { - PFREE(alert->title); - alert->title = NULL; - alert->flags &= ~KHUI_ALERT_FLAG_FREE_TITLE; - } - if(title) { - alert->title = PMALLOC(cb); - StringCbCopy(alert->title, cb, title); - alert->flags |= KHUI_ALERT_FLAG_FREE_TITLE; - } - LeaveCriticalSection(&cs_alerts); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_alert_set_flags(khui_alert * alert, khm_int32 mask, khm_int32 flags) -{ - assert(alert->magic == KHUI_ALERT_MAGIC); - - if (mask & ~KHUI_ALERT_FLAGMASK_RDWR) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_alerts); - alert->flags = - (alert->flags & ~mask) | - (flags & mask); - LeaveCriticalSection(&cs_alerts); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_alert_set_severity(khui_alert * alert, khm_int32 severity) -{ - - assert(alert->magic == KHUI_ALERT_MAGIC); - - EnterCriticalSection(&cs_alerts); - alert->severity = severity; - LeaveCriticalSection(&cs_alerts); - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_alert_set_suggestion(khui_alert * alert, - const wchar_t * suggestion) { - size_t cb = 0; - - assert(alert->magic == KHUI_ALERT_MAGIC); - - if(suggestion) { - if(FAILED(StringCbLength(suggestion, - KHUI_MAXCB_MESSAGE - sizeof(wchar_t), - &cb))) { - return KHM_ERROR_INVALID_PARAM; - } - cb += sizeof(wchar_t); - } - - EnterCriticalSection(&cs_alerts); - if(alert->suggestion && - (alert->flags & KHUI_ALERT_FLAG_FREE_SUGGEST)) { - - PFREE(alert->suggestion); - alert->suggestion = NULL; - alert->flags &= ~KHUI_ALERT_FLAG_FREE_SUGGEST; - - } - - if(suggestion) { - alert->suggestion = PMALLOC(cb); - StringCbCopy(alert->suggestion, cb, suggestion); - alert->flags |= KHUI_ALERT_FLAG_FREE_SUGGEST; - } - LeaveCriticalSection(&cs_alerts); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_alert_set_message(khui_alert * alert, const wchar_t * message) -{ - size_t cb = 0; - - assert(alert->magic == KHUI_ALERT_MAGIC); - - if(message) { - if(FAILED(StringCbLength(message, - KHUI_MAXCB_MESSAGE - sizeof(wchar_t), - &cb))) { - return KHM_ERROR_INVALID_PARAM; - } - cb += sizeof(wchar_t); - } - - EnterCriticalSection(&cs_alerts); - if(alert->message && - (alert->flags & KHUI_ALERT_FLAG_FREE_MESSAGE)) { - - PFREE(alert->message); - alert->flags &= ~KHUI_ALERT_FLAG_FREE_MESSAGE; - } - - alert->message = NULL; - - if(message) { - alert->message = PMALLOC(cb); - StringCbCopy(alert->message, cb, message); - alert->flags |= KHUI_ALERT_FLAG_FREE_MESSAGE; - } - LeaveCriticalSection(&cs_alerts); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_alert_clear_commands(khui_alert * alert) -{ - assert(alert->magic == KHUI_ALERT_MAGIC); - - EnterCriticalSection(&cs_alerts); - alert->n_alert_commands = 0; - LeaveCriticalSection(&cs_alerts); - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_alert_add_command(khui_alert * alert, khm_int32 command_id) -{ - khm_int32 rv = KHM_ERROR_SUCCESS; - - assert(alert->magic == KHUI_ALERT_MAGIC); - - EnterCriticalSection(&cs_alerts); - if(alert->n_alert_commands >= KHUI_MAX_ALERT_COMMANDS) - rv = KHM_ERROR_NO_RESOURCES; - else { - alert->alert_commands[alert->n_alert_commands++] = command_id; - } - LeaveCriticalSection(&cs_alerts); - - return rv; -} - -KHMEXP khm_int32 KHMAPI -khui_alert_set_type(khui_alert * alert, khui_alert_type alert_type) -{ - khm_int32 rv = KHM_ERROR_SUCCESS; - - assert(alert->magic == KHUI_ALERT_MAGIC); - - EnterCriticalSection(&cs_alerts); - alert->alert_type = alert_type; - LeaveCriticalSection(&cs_alerts); - - return rv; -} - -KHMEXP khm_int32 KHMAPI -khui_alert_set_ctx(khui_alert * alert, - khui_scope scope, - khm_handle identity, - khm_int32 cred_type, - khm_handle cred) -{ - khm_int32 rv = KHM_ERROR_SUCCESS; - - assert(alert->magic == KHUI_ALERT_MAGIC); - - EnterCriticalSection(&cs_alerts); - khui_context_release(&alert->ctx); - khui_context_create(&alert->ctx, - scope, - identity, - cred_type, - cred); - LeaveCriticalSection(&cs_alerts); - - return rv; -} - -KHMEXP khm_int32 KHMAPI -khui_alert_get_response(khui_alert * alert) -{ - khm_int32 response = 0; - - assert(alert->magic == KHUI_ALERT_MAGIC); - - EnterCriticalSection(&cs_alerts); - response = alert->response; - LeaveCriticalSection(&cs_alerts); - - return response; -} - -KHMEXP khm_int32 KHMAPI -khui_alert_show(khui_alert * alert) -{ - assert(alert->magic == KHUI_ALERT_MAGIC); - - khui_alert_hold(alert); - /* the alert will be released when the message is processed */ - kmq_post_message(KMSG_ALERT, KMSG_ALERT_SHOW, 0, (void *) alert); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_alert_show_modal(khui_alert * alert) -{ - khm_int32 rv; - - assert(alert->magic == KHUI_ALERT_MAGIC); - - khui_alert_hold(alert); - rv = kmq_send_message(KMSG_ALERT, KMSG_ALERT_SHOW_MODAL, 0, - (void *) alert); - - return rv; -} - -KHMEXP khm_int32 KHMAPI -khui_alert_queue(khui_alert * alert) -{ - assert(alert->magic == KHUI_ALERT_MAGIC); - - khui_alert_hold(alert); - kmq_post_message(KMSG_ALERT, KMSG_ALERT_QUEUE, 0, (void *) alert); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_alert_show_simple(const wchar_t * title, - const wchar_t * message, - khm_int32 severity) -{ - khui_alert * a = NULL; - khm_int32 rv; - - rv = khui_alert_create_simple(title, message, severity, &a); - - if(KHM_FAILED(rv)) - return rv; - - rv = khui_alert_show(a); - - khui_alert_release(a); - - return rv; -} - -KHMEXP khm_int32 KHMAPI -khui_alert_hold(khui_alert * alert) -{ - assert(alert->magic == KHUI_ALERT_MAGIC); - - EnterCriticalSection(&cs_alerts); - alert->refcount++; - LeaveCriticalSection(&cs_alerts); - return KHM_ERROR_SUCCESS; -} - -/* called with cs_alert held */ -static void -free_alert(khui_alert * alert) -{ - assert(alert->magic == KHUI_ALERT_MAGIC); - - LDELETE(&kh_alerts, alert); - - if(alert->flags & KHUI_ALERT_FLAG_FREE_TITLE) { - assert(alert->title); - PFREE(alert->title); - alert->title = NULL; - alert->flags &= ~KHUI_ALERT_FLAG_FREE_TITLE; - } - if(alert->flags & KHUI_ALERT_FLAG_FREE_MESSAGE) { - assert(alert->message); - PFREE(alert->message); - alert->message = NULL; - alert->flags &= ~KHUI_ALERT_FLAG_FREE_MESSAGE; - } - if(alert->flags & KHUI_ALERT_FLAG_FREE_SUGGEST) { - assert(alert->suggestion); - PFREE(alert->suggestion); - alert->suggestion = NULL; - alert->flags &= ~KHUI_ALERT_FLAG_FREE_SUGGEST; - } - - khui_context_release(&alert->ctx); - - if(alert->flags & KHUI_ALERT_FLAG_FREE_STRUCT) { - alert->flags &= ~KHUI_ALERT_FLAG_FREE_STRUCT; - alert->magic = 0; - PFREE(alert); - } -} - -KHMEXP khm_int32 KHMAPI -khui_alert_release(khui_alert * alert) -{ - assert(alert->magic == KHUI_ALERT_MAGIC); - - EnterCriticalSection(&cs_alerts); - if((--(alert->refcount)) == 0) { - free_alert(alert); - } - LeaveCriticalSection(&cs_alerts); - return KHM_ERROR_SUCCESS; -} - -KHMEXP void KHMAPI khui_alert_lock(khui_alert * alert) -{ - EnterCriticalSection(&cs_alerts); -} - -KHMEXP void KHMAPI khui_alert_unlock(khui_alert * alert) -{ - LeaveCriticalSection(&cs_alerts); -} diff --git a/src/windows/identity/uilib/configui.c b/src/windows/identity/uilib/configui.c deleted file mode 100644 index a87ea72ca..000000000 --- a/src/windows/identity/uilib/configui.c +++ /dev/null @@ -1,1088 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -#define _NIMLIB_ - -#include<khuidefs.h> -#include<kmm.h> -#include<configui.h> -#include<utils.h> -#include<assert.h> - -#include<strsafe.h> - -khm_int32 cfgui_node_serial; -LONG init_once = 0; -CRITICAL_SECTION cs_cfgui; -khui_config_node_i * cfgui_root_config; -HWND hwnd_cfgui = NULL; - -static khui_config_node_i * -cfgui_create_new_node(void) { - khui_config_node_i * node; - - node = PMALLOC(sizeof(*node)); -#ifdef DEBUG - assert(node); -#endif - ZeroMemory(node, sizeof(*node)); - node->magic = KHUI_CONFIG_NODE_MAGIC; - - EnterCriticalSection(&cs_cfgui); - node->id = ++cfgui_node_serial; - LeaveCriticalSection(&cs_cfgui); - - return node; -} - -/* called with cs_cfgui held */ -static void -cfgui_free_node(khui_config_node_i * node) { - if (!cfgui_is_valid_node(node)) - return; - - if (node->reg.name) - PFREE((void *) node->reg.name); - - if (node->reg.short_desc) - PFREE((void *) node->reg.short_desc); - - if (node->reg.long_desc) - PFREE((void *) node->reg.long_desc); - - node->magic = 0; - - if (node->owner) - kmm_release_plugin(node->owner); - - ZeroMemory(node, sizeof(*node)); - - PFREE(node); -} - - -static void -cfgui_hold_node(khui_config_node_i * node) { - EnterCriticalSection(&cs_cfgui); - node->refcount++; - LeaveCriticalSection(&cs_cfgui); -} - - -static void -cfgui_release_node(khui_config_node_i * node) { - EnterCriticalSection(&cs_cfgui); - node->refcount--; - if (node->refcount == 0 && - (node->flags & KHUI_CN_FLAG_DELETED)) { - khui_config_node_i * parent; - parent = TPARENT(node); -#ifdef DEBUG - assert(TFIRSTCHILD(node) == NULL); - assert(parent != NULL); -#endif - TDELCHILD(parent, node); - cfgui_free_node(node); - cfgui_release_node(parent); - } - LeaveCriticalSection(&cs_cfgui); -} - -static void -cfgui_init_once(void) { - if (init_once == 0 && - InterlockedIncrement(&init_once) == 1) { - InitializeCriticalSection(&cs_cfgui); - cfgui_root_config = cfgui_create_new_node(); - cfgui_node_serial = 0; - hwnd_cfgui = NULL; - } -} - -KHMEXP khm_int32 KHMAPI -khui_cfg_register(khui_config_node vparent, - const khui_config_node_reg * reg) { - - size_t cb_name; - size_t cb_short_desc; - size_t cb_long_desc; - khui_config_node_i * node; - khui_config_node_i * parent; - khui_config_node t; - wchar_t * name; - wchar_t * short_desc; - wchar_t * long_desc; - - cfgui_init_once(); - - if (!reg || - FAILED(StringCbLength(reg->name, - KHUI_MAXCB_NAME, - &cb_name)) || - FAILED(StringCbLength(reg->short_desc, - KHUI_MAXCB_SHORT_DESC, - &cb_short_desc)) || - FAILED(StringCbLength(reg->long_desc, - KHUI_MAXCB_LONG_DESC, - &cb_long_desc)) || - (vparent && - !cfgui_is_valid_node_handle(vparent))) - return KHM_ERROR_INVALID_PARAM; - - if (KHM_SUCCEEDED(khui_cfg_open(vparent, - reg->name, - &t))) { - khui_cfg_release(t); - return KHM_ERROR_DUPLICATE; - } - - cb_name += sizeof(wchar_t); - cb_short_desc += sizeof(wchar_t); - cb_long_desc += sizeof(wchar_t); - - node = cfgui_create_new_node(); - - node->reg = *reg; - node->reg.flags &= KHUI_CNFLAGMASK_STATIC; - - name = PMALLOC(cb_name); - StringCbCopy(name, cb_name, reg->name); - short_desc = PMALLOC(cb_short_desc); - StringCbCopy(short_desc, cb_short_desc, reg->short_desc); - long_desc = PMALLOC(cb_long_desc); - StringCbCopy(long_desc, cb_long_desc, reg->long_desc); - - node->reg.name = name; - node->reg.short_desc = short_desc; - node->reg.long_desc = long_desc; - node->flags = node->reg.flags; - - if (vparent == NULL) { - parent = cfgui_root_config; - } else { - parent = cfgui_node_i_from_handle(vparent); - } - - /* plugin handles should not be obtained lightly. For the moment, - the cleanup of nodes doesn't happen until module unload and - module unload doesn't happen until all the plugin and module - handles have been freed. */ - /* node->owner = kmm_this_plugin(); */ - - EnterCriticalSection(&cs_cfgui); - TADDCHILD(parent, node); - - if (hwnd_cfgui) { - SendMessage(hwnd_cfgui, KHUI_WM_CFG_NOTIFY, - MAKEWPARAM(0, WMCFG_SYNC_NODE_LIST), 0); - } - - LeaveCriticalSection(&cs_cfgui); - - /* when the root config list changes, we need to notify the UI. - this way, the Options menu can be kept in sync. */ - if (parent == cfgui_root_config) { - kmq_post_message(KMSG_ACT, KMSG_ACT_SYNC_CFG, 0, 0); - } - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_cfg_open(khui_config_node vparent, - const wchar_t * name, - khui_config_node * result) { - khui_config_node_i * parent; - khui_config_node_i * c; - size_t sz; - - cfgui_init_once(); - - if ((vparent && - !cfgui_is_valid_node_handle(vparent)) || - FAILED(StringCbLength(name, KHUI_MAXCCH_NAME, &sz)) || - !result) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_cfgui); - if (vparent) - parent = cfgui_node_i_from_handle(vparent); - else - parent = cfgui_root_config; - - c = TFIRSTCHILD(parent); - while(c) { - if (!(c->flags & KHUI_CN_FLAG_DELETED) && - !wcscmp(c->reg.name, name)) - break; - c = LNEXT(c); - } - - if (c) { - *result = cfgui_handle_from_node_i(c); - cfgui_hold_node(c); - } else { - *result = NULL; - } - LeaveCriticalSection(&cs_cfgui); - - if (*result) - return KHM_ERROR_SUCCESS; - else - return KHM_ERROR_NOT_FOUND; -} - -KHMEXP khm_int32 KHMAPI -khui_cfg_remove(khui_config_node vnode) { - khui_config_node_i * node; - if (!cfgui_is_valid_node_handle(vnode)) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_cfgui); - node = cfgui_node_i_from_handle(vnode); - node->flags |= KHUI_CN_FLAG_DELETED; - - if (hwnd_cfgui) { - SendMessage(hwnd_cfgui, KHUI_WM_CFG_NOTIFY, - MAKEWPARAM(0, WMCFG_SYNC_NODE_LIST), 0); - } - - LeaveCriticalSection(&cs_cfgui); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_cfg_hold(khui_config_node vnode) { - if (!cfgui_is_valid_node_handle(vnode)) - return KHM_ERROR_INVALID_PARAM; - - cfgui_hold_node(cfgui_node_i_from_handle(vnode)); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_cfg_release(khui_config_node vnode) { - if (!cfgui_is_valid_node_handle(vnode)) - return KHM_ERROR_INVALID_PARAM; - - cfgui_release_node(cfgui_node_i_from_handle(vnode)); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_cfg_get_parent(khui_config_node vnode, - khui_config_node * result) { - - khui_config_node_i * node; - khui_config_node_i * parent; - - if(!cfgui_is_valid_node_handle(vnode) || - !result) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_cfgui); - if (cfgui_is_valid_node_handle(vnode)) { - node = cfgui_node_i_from_handle(vnode); - parent = TPARENT(node); - if (parent == cfgui_root_config) - parent = NULL; - } else { - parent = NULL; - } - if (parent) { - cfgui_hold_node(parent); - } - LeaveCriticalSection(&cs_cfgui); - - *result = parent; - - if (parent) - return KHM_ERROR_SUCCESS; - else - return KHM_ERROR_NOT_FOUND; -} - -KHMEXP khm_int32 KHMAPI -khui_cfg_get_first_child(khui_config_node vparent, - khui_config_node * result) { - khui_config_node_i * parent; - khui_config_node_i * c; - - cfgui_init_once(); - - if((vparent && !cfgui_is_valid_node_handle(vparent)) || - !result) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_cfgui); - if (cfgui_is_valid_node_handle(vparent)) { - parent = cfgui_node_i_from_handle(vparent); - } else if (!vparent) { - parent = cfgui_root_config; - } else { - parent = NULL; - } - - if (parent) { - for(c = TFIRSTCHILD(parent); - c && - ((c->reg.flags & KHUI_CNFLAG_SUBPANEL) || - (c->flags & KHUI_CN_FLAG_DELETED)); - c = LNEXT(c)); - } else { - c = NULL; - } - - if (c) - cfgui_hold_node(c); - LeaveCriticalSection(&cs_cfgui); - - *result = c; - - if (c) - return KHM_ERROR_SUCCESS; - else - return KHM_ERROR_NOT_FOUND; -} - -KHMEXP khm_int32 KHMAPI -khui_cfg_get_first_subpanel(khui_config_node vparent, - khui_config_node * result) { - khui_config_node_i * parent; - khui_config_node_i * c; - - cfgui_init_once(); - - if((vparent && !cfgui_is_valid_node_handle(vparent)) || - !result) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_cfgui); - if (cfgui_is_valid_node_handle(vparent)) { - parent = cfgui_node_i_from_handle(vparent); - } else if (!vparent) { - parent = cfgui_root_config; - } else { - parent = NULL; - } - - if (parent) { - for(c = TFIRSTCHILD(parent); - c && - (!(c->reg.flags & KHUI_CNFLAG_SUBPANEL) || - (c->flags & KHUI_CN_FLAG_DELETED)); - c = LNEXT(c)); - } else { - c = NULL; - } - - if (c) - cfgui_hold_node(c); - LeaveCriticalSection(&cs_cfgui); - - *result = c; - - if (c) - return KHM_ERROR_SUCCESS; - else - return KHM_ERROR_NOT_FOUND; -} - - -KHMEXP khm_int32 KHMAPI -khui_cfg_get_next(khui_config_node vnode, - khui_config_node * result) { - - khui_config_node_i * node; - khui_config_node_i * nxt_node; - - if (!cfgui_is_valid_node_handle(vnode) || - !result) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_cfgui); - if (cfgui_is_valid_node_handle(vnode)) { - node = cfgui_node_i_from_handle(vnode); - for(nxt_node = LNEXT(node); - nxt_node && - ((node->reg.flags ^ nxt_node->reg.flags) & - KHUI_CNFLAG_SUBPANEL); - nxt_node = LNEXT(nxt_node)); - if (nxt_node) - cfgui_hold_node(nxt_node); - } else { - nxt_node = NULL; - } - LeaveCriticalSection(&cs_cfgui); - - *result = cfgui_handle_from_node_i(nxt_node); - - if (nxt_node) - return KHM_ERROR_SUCCESS; - else - return KHM_ERROR_NOT_FOUND; -} - -KHMEXP khm_int32 KHMAPI -khui_cfg_get_next_release(khui_config_node * pvnode) { - - khui_config_node_i * node; - khui_config_node_i * nxt_node; - - if (!pvnode || - !cfgui_is_valid_node_handle(*pvnode)) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_cfgui); - if (cfgui_is_valid_node_handle(*pvnode)) { - node = cfgui_node_i_from_handle(*pvnode); - for(nxt_node = LNEXT(node); - nxt_node && - (((node->reg.flags ^ nxt_node->reg.flags) & - KHUI_CNFLAG_SUBPANEL) || - (nxt_node->flags & KHUI_CN_FLAG_DELETED)); - nxt_node = LNEXT(nxt_node)); - if (nxt_node) - cfgui_hold_node(nxt_node); - cfgui_release_node(node); - } else { - nxt_node = NULL; - } - LeaveCriticalSection(&cs_cfgui); - - *pvnode = cfgui_handle_from_node_i(nxt_node); - - if (nxt_node) - return KHM_ERROR_SUCCESS; - else - return KHM_ERROR_NOT_FOUND; -} - -KHMEXP khm_int32 KHMAPI -khui_cfg_get_reg(khui_config_node vnode, - khui_config_node_reg * reg) { - - khui_config_node_i * node; - - cfgui_init_once(); - - if ((vnode && !cfgui_is_valid_node_handle(vnode)) || - !reg) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_cfgui); - if (cfgui_is_valid_node_handle(vnode)) { - node = cfgui_node_i_from_handle(vnode); - *reg = node->reg; - } else if (!vnode) { - node = cfgui_root_config; - *reg = node->reg; - } else { - node = NULL; - ZeroMemory(reg, sizeof(*reg)); - } - LeaveCriticalSection(&cs_cfgui); - - if (node) - return KHM_ERROR_SUCCESS; - else - return KHM_ERROR_INVALID_PARAM; -} - -KHMEXP HWND KHMAPI -khui_cfg_get_hwnd(khui_config_node vnode) { - khui_config_node_i * node; - HWND hwnd; - - cfgui_init_once(); - - if (vnode && - !cfgui_is_valid_node_handle(vnode)) - return NULL; - - EnterCriticalSection(&cs_cfgui); - if (cfgui_is_valid_node_handle(vnode)) - node = cfgui_node_i_from_handle(vnode); - else if (!vnode) - node = cfgui_root_config; - else - node = NULL; - - if (node) - hwnd = node->hwnd; - else - hwnd = NULL; - LeaveCriticalSection(&cs_cfgui); - - return hwnd; -} - -KHMEXP LPARAM KHMAPI -khui_cfg_get_param(khui_config_node vnode) { - khui_config_node_i * node; - LPARAM param; - - cfgui_init_once(); - - if (vnode && - !cfgui_is_valid_node_handle(vnode)) - return 0; - - EnterCriticalSection(&cs_cfgui); - if (cfgui_is_valid_node_handle(vnode)) - node = cfgui_node_i_from_handle(vnode); - else if (!vnode) - node = cfgui_root_config; - else - node = NULL; - - if (node) - param = node->param; - else - param = 0; - LeaveCriticalSection(&cs_cfgui); - - return param; -} - -KHMEXP void KHMAPI -khui_cfg_set_hwnd(khui_config_node vnode, HWND hwnd) { - khui_config_node_i * node; - - cfgui_init_once(); - - if (vnode && - !cfgui_is_valid_node_handle(vnode)) - return; - - EnterCriticalSection(&cs_cfgui); - if (cfgui_is_valid_node_handle(vnode)) - node = cfgui_node_i_from_handle(vnode); - else if (!vnode) - node = cfgui_root_config; - else - node = NULL; - - if (node) - node->hwnd = hwnd; - LeaveCriticalSection(&cs_cfgui); -} - -KHMEXP void KHMAPI -khui_cfg_set_param(khui_config_node vnode, LPARAM param) { - khui_config_node_i * node; - - cfgui_init_once(); - - if (vnode && - !cfgui_is_valid_node_handle(vnode)) - return; - - EnterCriticalSection(&cs_cfgui); - if (cfgui_is_valid_node_handle(vnode)) - node = cfgui_node_i_from_handle(vnode); - else if (!vnode) - node = cfgui_root_config; - else - node = NULL; - - if (node) - node->param = param; - LeaveCriticalSection(&cs_cfgui); -} - -static void -clear_node_data(khui_config_node_i * node) { - node->n_data = 0; -} - -static cfg_node_data * -get_node_data(khui_config_node_i * node, - void * key, - khm_boolean create) { - khm_size i; - - for (i=0; i<node->n_data; i++) { - if (node->data[i].key == key) - return &(node->data[i]); - } - - if (!create) - return NULL; - - if (node->n_data + 1 > node->nc_data) { - cfg_node_data * newdata; - - node->nc_data = UBOUNDSS((node->n_data + 1), - KHUI_NODEDATA_ALLOC_INCR, - KHUI_NODEDATA_ALLOC_INCR); -#ifdef DEBUG - assert(node->nc_data >= node->n_data + 1); -#endif - newdata = PMALLOC(sizeof(*newdata) * node->nc_data); -#ifdef DEBUG - assert(newdata); -#endif - ZeroMemory(newdata, sizeof(*newdata) * node->nc_data); - - if (node->data && node->n_data > 0) { - memcpy(newdata, node->data, node->n_data * sizeof(*newdata)); - PFREE(node->data); - } - node->data = newdata; - } - - node->data[node->n_data].key = key; - node->data[node->n_data].hwnd = NULL; - node->data[node->n_data].param = 0; - node->data[node->n_data].flags = 0; - - node->n_data++; - - return &(node->data[node->n_data - 1]); -} - -KHMEXP HWND KHMAPI -khui_cfg_get_hwnd_inst(khui_config_node vnode, - khui_config_node noderef) { - khui_config_node_i * node; - cfg_node_data * data; - HWND hwnd; - - cfgui_init_once(); - - if (vnode && - !cfgui_is_valid_node_handle(vnode)) - return NULL; - - EnterCriticalSection(&cs_cfgui); - if (cfgui_is_valid_node_handle(vnode)) - node = cfgui_node_i_from_handle(vnode); - else if (!vnode) - node = cfgui_root_config; - else - node = NULL; - - if (node) { - data = get_node_data(node, noderef, FALSE); - if (data) - hwnd = data->hwnd; - else - hwnd = NULL; - } else - hwnd = NULL; - LeaveCriticalSection(&cs_cfgui); - - return hwnd; -} - -KHMEXP LPARAM KHMAPI -khui_cfg_get_param_inst(khui_config_node vnode, - khui_config_node noderef) { - khui_config_node_i * node; - cfg_node_data * data; - LPARAM lParam; - - cfgui_init_once(); - - if (vnode && - !cfgui_is_valid_node_handle(vnode)) - return 0; - - EnterCriticalSection(&cs_cfgui); - if (cfgui_is_valid_node_handle(vnode)) - node = cfgui_node_i_from_handle(vnode); - else if (!vnode) - node = cfgui_root_config; - else - node = NULL; - - if (node) { - data = get_node_data(node, noderef, FALSE); - if (data) - lParam = data->param; - else - lParam = 0; - } else - lParam = 0; - LeaveCriticalSection(&cs_cfgui); - - return lParam; -} - -KHMEXP void KHMAPI -khui_cfg_set_hwnd_inst(khui_config_node vnode, - khui_config_node noderef, - HWND hwnd) { - khui_config_node_i * node; - cfg_node_data * data; - - cfgui_init_once(); - - if (vnode && - !cfgui_is_valid_node_handle(vnode)) - return; - - EnterCriticalSection(&cs_cfgui); - if (cfgui_is_valid_node_handle(vnode)) - node = cfgui_node_i_from_handle(vnode); - else if (!vnode) - node = cfgui_root_config; - else - node = NULL; - - if (node) { - data = get_node_data(node, noderef, TRUE); - if (data) - data->hwnd = hwnd; - } - LeaveCriticalSection(&cs_cfgui); -} - -KHMEXP void KHMAPI -khui_cfg_set_param_inst(khui_config_node vnode, - khui_config_node noderef, - LPARAM param) { - khui_config_node_i * node; - cfg_node_data * data; - - cfgui_init_once(); - - if (vnode && - !cfgui_is_valid_node_handle(vnode)) - return; - - EnterCriticalSection(&cs_cfgui); - if (cfgui_is_valid_node_handle(vnode)) - node = cfgui_node_i_from_handle(vnode); - else if (!vnode) - node = cfgui_root_config; - else - node = NULL; - - if (node) { - data = get_node_data(node, noderef, TRUE); - if (data) - data->param = param; - } - LeaveCriticalSection(&cs_cfgui); -} - - -/* called with cs_cfgui held */ -static void -cfgui_clear_params(khui_config_node_i * node) { - khui_config_node_i * c; - - node->hwnd = NULL; - node->param = 0; - node->flags &= KHUI_CNFLAGMASK_STATIC; - clear_node_data(node); - - c = TFIRSTCHILD(node); - while(c) { - cfgui_clear_params(c); - c = LNEXT(c); - } -} - -KHMEXP void KHMAPI -khui_cfg_clear_params(void) { - - cfgui_init_once(); - - EnterCriticalSection(&cs_cfgui); - cfgui_clear_params(cfgui_root_config); - LeaveCriticalSection(&cs_cfgui); -} - -KHMEXP void KHMAPI -khui_cfg_set_configui_handle(HWND hwnd) { - EnterCriticalSection(&cs_cfgui); - hwnd_cfgui = hwnd; - LeaveCriticalSection(&cs_cfgui); -} - -KHMEXP void KHMAPI -khui_cfg_set_flags(khui_config_node vnode, - khm_int32 flags, - khm_int32 mask) { - khui_config_node_i * node; - khm_int32 newflags; - - if (vnode && - !cfgui_is_valid_node_handle(vnode)) - return; - - mask &= KHUI_CNFLAGMASK_DYNAMIC; - - EnterCriticalSection(&cs_cfgui); - if (cfgui_is_valid_node_handle(vnode)) { - - node = cfgui_node_i_from_handle(vnode); - - newflags = - (flags & mask) | - (node->flags & ~mask); - - if (newflags != node->flags) { - node->flags = newflags; - - if (hwnd_cfgui) - PostMessage(hwnd_cfgui, KHUI_WM_CFG_NOTIFY, - MAKEWPARAM((WORD)newflags, WMCFG_UPDATE_STATE), - (LPARAM) vnode); - } - } - LeaveCriticalSection(&cs_cfgui); -} - -/* called with cs_cfgui held */ -static void -recalc_node_flags(khui_config_node vnode, khm_boolean plural) { - khui_config_node_i * node; - khui_config_node_i * parent; - khui_config_node_i * subpanel; - cfg_node_data * data; - khm_int32 flags; - -#ifdef DEBUG - assert(cfgui_is_valid_node_handle(vnode)); -#endif - - node = cfgui_node_i_from_handle(vnode); - - if (plural) - parent = TPARENT(node); - else - parent = node; -#ifdef DEBUG - assert(parent); -#endif - - flags = 0; - - for(subpanel = TFIRSTCHILD(parent); subpanel; - subpanel = LNEXT(subpanel)) { - if (!(subpanel->reg.flags & KHUI_CNFLAG_SUBPANEL) || - (plural && !(subpanel->reg.flags & KHUI_CNFLAG_PLURAL)) || - (!plural && (subpanel->reg.flags & KHUI_CNFLAG_PLURAL))) - continue; - - data = get_node_data(subpanel, - vnode, - FALSE); - - if (data) { - flags |= data->flags; - } - } - - flags &= KHUI_CNFLAGMASK_DYNAMIC; - - if ((node->flags & KHUI_CNFLAGMASK_DYNAMIC) == flags) - return; - - node->flags = (node->flags & ~KHUI_CNFLAGMASK_DYNAMIC) | flags; - - if (hwnd_cfgui) - PostMessage(hwnd_cfgui, KHUI_WM_CFG_NOTIFY, - MAKEWPARAM((WORD) node->flags, WMCFG_UPDATE_STATE), - (LPARAM) vnode); -} - -KHMEXP void KHMAPI -khui_cfg_set_flags_inst(khui_config_init_data * d, - khm_int32 flags, - khm_int32 mask) { - khui_config_node_i * node; - cfg_node_data * data; - - cfgui_init_once(); - if (!cfgui_is_valid_node_handle(d->this_node)) - return; - - mask &= KHUI_CNFLAGMASK_DYNAMIC; - - EnterCriticalSection(&cs_cfgui); - if (cfgui_is_valid_node_handle(d->this_node)) - node = cfgui_node_i_from_handle(d->this_node); - else - node = NULL; - - if (node) { - data = get_node_data(node, d->ctx_node, TRUE); - if (data) { - khm_int32 new_flags; - - new_flags = (flags & mask) | - (data->flags & ~mask); - - if (new_flags != data->flags) { - data->flags = new_flags; - - if (d->ctx_node != d->ref_node) - recalc_node_flags(d->ctx_node, TRUE); - else - recalc_node_flags(d->ctx_node, FALSE); - } - } - } - LeaveCriticalSection(&cs_cfgui); -} - -KHMEXP khm_int32 KHMAPI -khui_cfg_get_flags(khui_config_node vnode) { - khui_config_node_i * node; - khm_int32 flags = 0; - - if (vnode && - !cfgui_is_valid_node_handle(vnode)) - return 0; - - EnterCriticalSection(&cs_cfgui); - if (cfgui_is_valid_node_handle(vnode)) { - - node = cfgui_node_i_from_handle(vnode); - - flags = node->flags; - } - LeaveCriticalSection(&cs_cfgui); - - return flags; -} - -KHMEXP khm_int32 KHMAPI -khui_cfg_get_name(khui_config_node vnode, - wchar_t * buf, - khm_size * cb_buf) { - khui_config_node_i * node; - khm_int32 rv = KHM_ERROR_SUCCESS; - - if (!cb_buf || - !cfgui_is_valid_node_handle(vnode)) - return KHM_ERROR_INVALID_PARAM; - - EnterCriticalSection(&cs_cfgui); - if (cfgui_is_valid_node_handle(vnode)) { - khm_size cb; - - node = cfgui_node_i_from_handle(vnode); - - StringCbLength(node->reg.name, KHUI_MAXCCH_NAME, &cb); - - if (buf == NULL || cb > *cb_buf) { - *cb_buf = cb; - rv = KHM_ERROR_TOO_LONG; - } else { - StringCbCopy(buf, *cb_buf, node->reg.name); - *cb_buf = cb; - } - } else { - rv = KHM_ERROR_INVALID_PARAM; - } - LeaveCriticalSection(&cs_cfgui); - - return rv; -} - -KHMEXP khm_int32 KHMAPI -khui_cfg_init_dialog_data(HWND hwnd_dlg, - const khui_config_init_data * data, - khm_size cb_extra, - khui_config_init_data ** new_data, - void ** extra) { - khm_size cb; - khui_config_init_data * d; - - cb = sizeof(khui_config_init_data) + cb_extra; - d = PMALLOC(cb); -#ifdef DEBUG - assert(d); -#endif - ZeroMemory(d, cb); - - *d = *data; - - if (d->ctx_node) - khui_cfg_hold(d->ctx_node); - if (d->this_node) - khui_cfg_hold(d->this_node); - if (d->ref_node) - khui_cfg_hold(d->ref_node); - -#pragma warning(push) -#pragma warning(disable: 4244) - SetWindowLongPtr(hwnd_dlg, DWLP_USER, (LONG_PTR) d); -#pragma warning(pop) - - if (new_data) - *new_data = d; - if (extra) - *extra = (void *) (d + 1); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_cfg_get_dialog_data(HWND hwnd_dlg, - khui_config_init_data ** data, - void ** extra) { - khui_config_init_data * d; - - d = (khui_config_init_data *) (LONG_PTR) GetWindowLongPtr(hwnd_dlg, - DWLP_USER); -#ifdef DEBUG - assert(d); -#endif - - *data = d; - if (extra) - *extra = (void *) (d + 1); - - return (d)?KHM_ERROR_SUCCESS: KHM_ERROR_NOT_FOUND; -} - -KHMEXP khm_int32 KHMAPI -khui_cfg_free_dialog_data(HWND hwnd_dlg) { - khui_config_init_data * d; - - d = (khui_config_init_data *) (LONG_PTR) GetWindowLongPtr(hwnd_dlg, - DWLP_USER); -#ifdef DEBUG - assert(d); -#endif - - if (d) { - PFREE(d); - SetWindowLongPtr(hwnd_dlg, DWLP_USER, 0); - } - - return (d)?KHM_ERROR_SUCCESS: KHM_ERROR_NOT_FOUND; -} diff --git a/src/windows/identity/uilib/configui.h b/src/windows/identity/uilib/configui.h deleted file mode 100644 index bd3a13e8e..000000000 --- a/src/windows/identity/uilib/configui.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_CONFIGUI_H -#define __KHIMAIRA_CONFIGUI_H - -typedef struct tag_cfg_node_data { - void * key; - HWND hwnd; - LPARAM param; - khm_int32 flags; -} cfg_node_data; - -typedef struct tag_khui_config_node_i { - khm_int32 magic; - - khui_config_node_reg reg; - kmm_plugin owner; - khm_int32 id; - - HWND hwnd; - LPARAM param; - - cfg_node_data * data; - khm_size n_data; - khm_size nc_data; - - khm_int32 refcount; - khm_int32 flags; - TDCL(struct tag_khui_config_node_i); -} khui_config_node_i; - -#define KHUI_CONFIG_NODE_MAGIC 0x38f4cb52 - -#define KHUI_NODEDATA_ALLOC_INCR 8 - -#define KHUI_CN_FLAG_DELETED 0x0008 - -#define cfgui_is_valid_node_handle(v) \ -((v) && ((khui_config_node_i *) (v))->magic == KHUI_CONFIG_NODE_MAGIC) - -#define cfgui_is_valid_node(n) \ -((n)->magic == KHUI_CONFIG_NODE_MAGIC) - -#define cfgui_node_i_from_handle(v) \ -((khui_config_node_i *) v) - -#define cfgui_handle_from_node_i(n) \ -((khui_config_node) n) - -#endif diff --git a/src/windows/identity/uilib/creddlg.c b/src/windows/identity/uilib/creddlg.c deleted file mode 100644 index f975be1e3..000000000 --- a/src/windows/identity/uilib/creddlg.c +++ /dev/null @@ -1,719 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -#define _NIMLIB_ - -#include<khuidefs.h> -#include<utils.h> -#include<assert.h> -#include<strsafe.h> - -#define CW_ALLOC_INCR 8 - -static void cw_free_prompts(khui_new_creds * c); - -static void cw_free_prompt(khui_new_creds_prompt * p); - -static khui_new_creds_prompt * -cw_create_prompt( - khm_size idx, - khm_int32 type, - wchar_t * prompt, - wchar_t * def, - khm_int32 flags); - -KHMEXP khm_int32 KHMAPI -khui_cw_create_cred_blob(khui_new_creds ** ppnc) -{ - khui_new_creds * c; - - c = PMALLOC(sizeof(*c)); - ZeroMemory(c, sizeof(*c)); - - c->magic = KHUI_NC_MAGIC; - InitializeCriticalSection(&c->cs); - c->result = KHUI_NC_RESULT_CANCEL; - c->mode = KHUI_NC_MODE_MINI; - - khui_context_create(&c->ctx, KHUI_SCOPE_NONE, NULL, KCDB_CREDTYPE_INVALID, NULL); - - *ppnc = c; - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_cw_destroy_cred_blob(khui_new_creds *c) -{ - khm_size i; - size_t len; - EnterCriticalSection(&c->cs); - for(i=0;i<c->n_identities;i++) { - kcdb_identity_release(c->identities[i]); - } - cw_free_prompts(c); - khui_context_release(&c->ctx); - LeaveCriticalSection(&c->cs); - DeleteCriticalSection(&c->cs); - - if (c->password) { - len = wcslen(c->password); - SecureZeroMemory(c->password, sizeof(wchar_t) * len); - PFREE(c->password); - } - - if (c->identities) - PFREE(c->identities); - - if (c->types) - PFREE(c->types); - - if (c->type_subs) - PFREE(c->type_subs); - - if (c->window_title) - PFREE(c->window_title); - - PFREE(c); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_cw_lock_nc(khui_new_creds * c) -{ - EnterCriticalSection(&c->cs); - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_cw_unlock_nc(khui_new_creds * c) -{ - LeaveCriticalSection(&c->cs); - return KHM_ERROR_SUCCESS; -} - -#define NC_N_IDENTITIES 4 - -KHMEXP khm_int32 KHMAPI -khui_cw_add_identity(khui_new_creds * c, - khm_handle id) -{ - if(id == NULL) - return KHM_ERROR_SUCCESS; /* we return success because adding - a NULL id is equivalent to adding - nothing. */ - EnterCriticalSection(&(c->cs)); - - if(c->identities == NULL) { - c->nc_identities = NC_N_IDENTITIES; - c->identities = PMALLOC(sizeof(*(c->identities)) * - c->nc_identities); - c->n_identities = 0; - } else if(c->n_identities + 1 > c->nc_identities) { - khm_handle * ni; - - c->nc_identities = UBOUNDSS(c->n_identities + 1, - NC_N_IDENTITIES, - NC_N_IDENTITIES); - ni = PMALLOC(sizeof(*(c->identities)) * c->nc_identities); - memcpy(ni, c->identities, - sizeof(*(c->identities)) * c->n_identities); - PFREE(c->identities); - c->identities = ni; - } - - kcdb_identity_hold(id); - c->identities[c->n_identities++] = id; - LeaveCriticalSection(&(c->cs)); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_cw_set_primary_id(khui_new_creds * c, - khm_handle id) -{ - khm_size i; - khm_int32 rv; - - EnterCriticalSection(&c->cs); - - /* no change */ - if((c->n_identities > 0 && c->identities[0] == id) || - (c->n_identities == 0 && id == NULL)) { - LeaveCriticalSection(&c->cs); - return KHM_ERROR_SUCCESS; - } - - for(i=0; i<c->n_identities; i++) { - kcdb_identity_release(c->identities[i]); - } - c->n_identities = 0; - - LeaveCriticalSection(&(c->cs)); - rv = khui_cw_add_identity(c,id); - if(c->hwnd != NULL) { - PostMessage(c->hwnd, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_IDENTITY_CHANGE), 0); - } - return rv; -} - -KHMEXP khm_int32 KHMAPI -khui_cw_add_type(khui_new_creds * c, - khui_new_creds_by_type * t) -{ - EnterCriticalSection(&c->cs); - - if(c->n_types >= KHUI_MAX_NCTYPES) { - LeaveCriticalSection(&c->cs); - return KHM_ERROR_OUT_OF_BOUNDS; - } - - if(c->types == NULL) { - c->nc_types = CW_ALLOC_INCR; - c->types = PMALLOC(sizeof(*(c->types)) * c->nc_types); - c->type_subs = PMALLOC(sizeof(*(c->type_subs)) * c->nc_types); - c->n_types = 0; - } - - if(c->nc_types < c->n_types + 1) { - void * t; - khm_size n; - - n = UBOUNDSS(c->n_types + 1, CW_ALLOC_INCR, CW_ALLOC_INCR); - - t = PMALLOC(sizeof(*(c->types)) * n); - memcpy(t, (void *) c->types, sizeof(*(c->types)) * c->n_types); - PFREE(c->types); - c->types = t; - - t = PMALLOC(sizeof(*(c->type_subs)) * n); - memcpy(t, (void *) c->type_subs, sizeof(*(c->type_subs)) * c->n_types); - PFREE(c->type_subs); - c->type_subs = t; - - c->nc_types = n; - } - - c->type_subs[c->n_types] = kcdb_credtype_get_sub(t->type); - c->types[c->n_types++] = t; - t->nc = c; - LeaveCriticalSection(&c->cs); - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_cw_del_type(khui_new_creds * c, - khm_int32 type_id) -{ - khm_size i; - - EnterCriticalSection(&c->cs); - for(i=0; i < c->n_types; i++) { - if(c->types[i]->type == type_id) - break; - } - if(i >= c->n_types) { - LeaveCriticalSection(&c->cs); - return KHM_ERROR_NOT_FOUND; - } - c->n_types--; - for(;i < c->n_types; i++) { - c->types[i] = c->types[i+1]; - c->type_subs[i] = c->type_subs[i+1]; - } - LeaveCriticalSection(&c->cs); - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_cw_find_type(khui_new_creds * c, - khm_int32 type, - khui_new_creds_by_type **t) -{ - khm_size i; - - EnterCriticalSection(&c->cs); - *t = NULL; - for(i=0;i<c->n_types;i++) { - if(c->types[i]->type == type) { - *t = c->types[i]; - break; - } - } - LeaveCriticalSection(&c->cs); - - if(*t) - return KHM_ERROR_SUCCESS; - return KHM_ERROR_NOT_FOUND; -} - - -KHMEXP khm_int32 KHMAPI -khui_cw_enable_type(khui_new_creds * c, - khm_int32 type, - khm_boolean enable) -{ - khui_new_creds_by_type * t = NULL; - BOOL delta = FALSE; - - EnterCriticalSection(&c->cs); - if(KHM_SUCCEEDED(khui_cw_find_type(c, type, &t))) { - if(enable) { - delta = t->flags & KHUI_NCT_FLAG_DISABLED; - t->flags &= ~KHUI_NCT_FLAG_DISABLED; - } - else { - delta = !(t->flags & KHUI_NCT_FLAG_DISABLED); - t->flags |= KHUI_NCT_FLAG_DISABLED; - } - } - LeaveCriticalSection(&c->cs); - - if(delta) - PostMessage(c->hwnd, KHUI_WM_NC_NOTIFY, MAKEWPARAM(0,WMNC_TYPE_STATE), (LPARAM) type); - - return (t)?KHM_ERROR_SUCCESS:KHM_ERROR_NOT_FOUND; -} - -KHMEXP khm_boolean KHMAPI -khui_cw_type_succeeded(khui_new_creds * c, - khm_int32 type) -{ - khui_new_creds_by_type * t; - khm_boolean s; - - EnterCriticalSection(&c->cs); - if(KHM_SUCCEEDED(khui_cw_find_type(c, type, &t))) { - s = (t->flags & KHUI_NCT_FLAG_PROCESSED) && !(t->flags & KHUI_NC_RESPONSE_FAILED); - } else { - s = FALSE; - } - LeaveCriticalSection(&c->cs); - - return s; -} - -static khui_new_creds_prompt * -cw_create_prompt(khm_size idx, - khm_int32 type, - wchar_t * prompt, - wchar_t * def, - khm_int32 flags) -{ - khui_new_creds_prompt * p; - size_t cb_prompt = 0; - size_t cb_def = 0; - - if(prompt && FAILED(StringCbLength(prompt, KHUI_MAXCB_PROMPT, &cb_prompt))) - return NULL; - if(def && FAILED(StringCbLength(def, KHUI_MAXCB_PROMPT_VALUE, &cb_def))) - return NULL; - - p = PMALLOC(sizeof(*p)); - ZeroMemory(p, sizeof(*p)); - - if(prompt) { - cb_prompt += sizeof(wchar_t); - p->prompt = PMALLOC(cb_prompt); - StringCbCopy(p->prompt, cb_prompt, prompt); - } - - if(def && cb_def > 0) { - cb_def += sizeof(wchar_t); - p->def = PMALLOC(cb_def); - StringCbCopy(p->def, cb_def, def); - } - - p->value = PMALLOC(KHUI_MAXCB_PROMPT_VALUE); - ZeroMemory(p->value, KHUI_MAXCB_PROMPT_VALUE); - - p->type = type; - p->flags = flags; - p->index = idx; - - return p; -} - -static void -cw_free_prompt(khui_new_creds_prompt * p) { - size_t cb; - - if(p->prompt) { - if(SUCCEEDED(StringCbLength(p->prompt, KHUI_MAXCB_PROMPT, &cb))) - SecureZeroMemory(p->prompt, cb); - PFREE(p->prompt); - } - - if(p->def) { - if(SUCCEEDED(StringCbLength(p->def, KHUI_MAXCB_PROMPT, &cb))) - SecureZeroMemory(p->def, cb); - PFREE(p->def); - } - - if(p->value) { - if(SUCCEEDED(StringCbLength(p->value, KHUI_MAXCB_PROMPT_VALUE, &cb))) - SecureZeroMemory(p->value, cb); - PFREE(p->value); - } - - PFREE(p); -} - -static void -cw_free_prompts(khui_new_creds * c) -{ - khm_size i; - - if(c->banner != NULL) { - PFREE(c->banner); - c->banner = NULL; - } - - if(c->pname != NULL) { - PFREE(c->pname); - c->pname = NULL; - } - - for(i=0;i < c->n_prompts; i++) { - if(c->prompts[i]) { - cw_free_prompt(c->prompts[i]); - c->prompts[i] = NULL; - } - } - - if(c->prompts != NULL) { - PFREE(c->prompts); - c->prompts = NULL; - } - - c->nc_prompts = 0; - c->n_prompts = 0; -} - -KHMEXP khm_int32 KHMAPI -khui_cw_clear_prompts(khui_new_creds * c) -{ - /* the WMNC_CLEAR_PROMPT message needs to be sent before freeing - the prompts, because the prompts structure still holds the - window handles for the custom prompt controls. */ - SendMessage(c->hwnd, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0,WMNC_CLEAR_PROMPTS), (LPARAM) c); - - EnterCriticalSection(&c->cs); - cw_free_prompts(c); - LeaveCriticalSection(&c->cs); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_cw_begin_custom_prompts(khui_new_creds * c, - khm_size n_prompts, - wchar_t * banner, - wchar_t * pname) -{ - size_t cb; - - PostMessage(c->hwnd, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0,WMNC_CLEAR_PROMPTS), (LPARAM) c); - - EnterCriticalSection(&c->cs); -#ifdef DEBUG - assert(c->n_prompts == 0); -#endif - cw_free_prompts(c); - - if(SUCCEEDED(StringCbLength(banner, KHUI_MAXCB_BANNER, &cb)) && - cb > 0) { - cb += sizeof(wchar_t); - c->banner = PMALLOC(cb); - StringCbCopy(c->banner, cb, banner); - } else { - c->banner = NULL; - } - - if(SUCCEEDED(StringCbLength(pname, KHUI_MAXCB_PNAME, &cb)) && - cb > 0) { - - cb += sizeof(wchar_t); - c->pname = PMALLOC(cb); - StringCbCopy(c->pname, cb, pname); - - } else { - - c->pname = NULL; - - } - - if(n_prompts > 0) { - c->prompts = PMALLOC(sizeof(*(c->prompts)) * n_prompts); - ZeroMemory(c->prompts, sizeof(*(c->prompts)) * n_prompts); - c->nc_prompts = n_prompts; - c->n_prompts = 0; - - } else { - - c->prompts = NULL; - c->n_prompts = 0; - c->nc_prompts = 0; - - PostMessage(c->hwnd, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_SET_PROMPTS), (LPARAM) c); - } - - LeaveCriticalSection(&c->cs); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_cw_add_prompt(khui_new_creds * c, - khm_int32 type, - wchar_t * prompt, - wchar_t * def, - khm_int32 flags) -{ - khui_new_creds_prompt * p; - - if(c->nc_prompts == 0 || - c->n_prompts == c->nc_prompts) - return KHM_ERROR_INVALID_OPERATION; - -#ifdef DEBUG - assert(c->prompts != NULL); -#endif - - EnterCriticalSection(&c->cs); - p = cw_create_prompt(c->n_prompts, type, prompt, def, flags); - if(p == NULL) { - LeaveCriticalSection(&c->cs); - return KHM_ERROR_INVALID_PARAM; - } - c->prompts[c->n_prompts++] = p; - LeaveCriticalSection(&c->cs); - - if(c->n_prompts == c->nc_prompts) { - PostMessage(c->hwnd, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_SET_PROMPTS), (LPARAM) c); - /* once we are done adding prompts, switch to the auth - panel */ -#if 0 - /* Actually, don't. Doing so can mean an unexpected panel - switch if fiddling on some other panel causes a change in - custom prompts. */ - SendMessage(c->hwnd, KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_DIALOG_SWITCH_PANEL), - (LPARAM) c); -#endif - } - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_cw_get_prompt_count(khui_new_creds * c, - khm_size * np) { - - EnterCriticalSection(&c->cs); - *np = c->n_prompts; - LeaveCriticalSection(&c->cs); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_cw_get_prompt(khui_new_creds * c, - khm_size idx, - khui_new_creds_prompt ** prompt) -{ - khm_int32 rv; - - EnterCriticalSection(&c->cs); - if(c->n_prompts <= idx || - c->prompts == NULL) { - - rv = KHM_ERROR_OUT_OF_BOUNDS; - *prompt = NULL; - } else { - - *prompt = c->prompts[idx]; - rv = KHM_ERROR_SUCCESS; - } - LeaveCriticalSection(&c->cs); - - return rv; -} - -void -khuiint_trim_str(wchar_t * s, khm_size cch) { - wchar_t * c, * last_ws; - - for (c = s; *c && iswspace(*c) && ((khm_size)(c - s)) < cch; c++); - - if (((khm_size)(c - s)) >= cch) - return; - - if (c != s && ((khm_size)(c - s)) < cch) { -#if _MSC_VER >= 1400 && __STDC_WANT_SECURE_LIB__ - wmemmove_s(s, cch, c, cch - ((khm_size)(c - s))); -#else - memmove(s, c, (cch - ((khm_size)(c - s)))* sizeof(wchar_t)); -#endif - } - - last_ws = NULL; - for (c = s; *c && ((khm_size)(c - s)) < cch; c++) { - if (!iswspace(*c)) - last_ws = NULL; - else if (last_ws == NULL) - last_ws = c; - } - - if (last_ws) - *last_ws = L'\0'; -} - -KHMEXP khm_int32 KHMAPI -khui_cw_sync_prompt_values(khui_new_creds * c) -{ - khm_size i; - khm_size n; - HWND hw; - wchar_t tmpbuf[KHUI_MAXCCH_PROMPT_VALUE]; - - EnterCriticalSection(&c->cs); - redo_loop: - n = c->n_prompts; - for(i=0; i<n; i++) { - khui_new_creds_prompt * p; - - p = c->prompts[i]; - if(p->hwnd_edit) { - hw = p->hwnd_edit; - LeaveCriticalSection(&c->cs); - - GetWindowText(hw, tmpbuf, ARRAYLENGTH(tmpbuf)); - khuiint_trim_str(tmpbuf, ARRAYLENGTH(tmpbuf)); - - EnterCriticalSection(&c->cs); - if (n != c->n_prompts) - goto redo_loop; - SecureZeroMemory(p->value, KHUI_MAXCB_PROMPT_VALUE); - StringCchCopy(p->value, KHUI_MAXCCH_PROMPT_VALUE, - tmpbuf); - } - } - LeaveCriticalSection(&c->cs); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_cw_get_prompt_value(khui_new_creds * c, - khm_size idx, - wchar_t * buf, - khm_size *cbbuf) -{ - khui_new_creds_prompt * p; - khm_int32 rv; - size_t cb; - - rv = khui_cw_get_prompt(c, idx, &p); - if(KHM_FAILED(rv)) - return rv; - - EnterCriticalSection(&c->cs); - - if(FAILED(StringCbLength(p->value, KHUI_MAXCB_PROMPT_VALUE, &cb))) { - *cbbuf = 0; - if(buf != NULL) - *buf = 0; - LeaveCriticalSection(&c->cs); - return KHM_ERROR_SUCCESS; - } - cb += sizeof(wchar_t); - - if(buf == NULL || *cbbuf < cb) { - *cbbuf = cb; - LeaveCriticalSection(&c->cs); - return KHM_ERROR_TOO_LONG; - } - - StringCbCopy(buf, *cbbuf, p->value); - *cbbuf = cb; - LeaveCriticalSection(&c->cs); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_cw_set_response(khui_new_creds * c, - khm_int32 type, - khm_int32 response) -{ - khui_new_creds_by_type * t = NULL; - EnterCriticalSection(&c->cs); - khui_cw_find_type(c, type, &t); - c->response |= response & KHUI_NCMASK_RESPONSE; - if(t) { - t->flags &= ~KHUI_NCMASK_RESULT; - t->flags |= (response & KHUI_NCMASK_RESULT); - - if (!(response & KHUI_NC_RESPONSE_NOEXIT) && - !(response & KHUI_NC_RESPONSE_PENDING)) - t->flags |= KHUI_NC_RESPONSE_COMPLETED; - } - LeaveCriticalSection(&c->cs); - return KHM_ERROR_SUCCESS; -} - -/* only called from a identity provider callback */ -KHMEXP khm_int32 KHMAPI -khui_cw_add_control_row(khui_new_creds * c, - HWND label, - HWND input, - khui_control_size size) -{ - if (c && c->hwnd) { - khui_control_row row; - - row.label = label; - row.input = input; - row.size = size; - - SendMessage(c->hwnd, - KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0, WMNC_ADD_CONTROL_ROW), - (LPARAM) &row); - - return KHM_ERROR_SUCCESS; - } else { - return KHM_ERROR_INVALID_PARAM; - } -} diff --git a/src/windows/identity/uilib/intaction.h b/src/windows/identity/uilib/intaction.h deleted file mode 100644 index 5753a56de..000000000 --- a/src/windows/identity/uilib/intaction.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * 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 - -/*! \addtogroup khui_actions -@{ */ - -/*! \brief An action */ -typedef struct tag_khui_action { - khm_int32 cmd; /*!< action identifier */ - khm_int32 type; /*!< combination of KHUI_ACTIONTYPE_* */ - wchar_t * name; /*!< name for named actions. NULL if - not named. */ - - /* The following fields are only for use by NetIDMgr */ - khm_int16 ib_normal; /*!< (internal) normal bitmap (index) (toolbar sized icon) */ - khm_int16 ib_hot; /*!< (internal) hot bitmap (index) (toolbar sized icon) */ - khm_int16 ib_disabled; /*!< (internal) disabled bitmap (index) (toolbar sized icon) */ - - khm_int16 ib_icon; /*!< (internal) index of small (16x16) icon (for menu) (small icon) */ - khm_int16 ib_icon_dis; /*!< (internal) index of disabled (greyed) icon (small icon) */ - - khm_int16 is_caption; /*!< (internal) index of string resource for caption */ - khm_int16 is_tooltip; /*!< (internal) same for description / tooltip */ - khm_int16 ih_topic; /*!< (internal) help topic */ - - /* The following fields are specified for custom actions */ - wchar_t * caption; /*!< Caption (localized) (limited by - KHUI_MAXCCH_SHORT_DESC). The - caption is used for representing the - action in menus and toolbars. */ - wchar_t * tooltip; /*!< Tooltip (localized) (limited by - KHUI_MAXCCH_SHORT_DESC). If this is - specified, whenever the user hovers - over the menu item or toolbar button - representing the action, the tooltip - will be displayed either on a - tooltip window or in the status - bar. */ - khm_handle listener; /*!< Listener of this action. Should be - a handle to a message - subscription. When the action is - invoked, a message of type - ::KMSG_ACT and subtype - ::KMSG_ACT_ACTIVATE will be posted - to this subscriber. The \a uparam - parameter of the message will have - the identifier of the action. */ - void * data; /*!< User data for custom action. This - field is not used by the UI library. - It is reserved for plugins to store - data that is specific for this - action. The data that's passed in - in the \a userdata parameter to - khui_action_create() will be stored - here and can be retrieved by calling - khui_action_get_data(). */ - void * reserved1; /*!< Reserved. */ - void * reserved2; /*!< Reserved. */ - void * reserved3; /*!< Reserved. */ - - /* For all actions */ - int state; /*!< current state. combination of - KHUI_ACTIONSTATE_* */ -} khui_action; - - -#define KHUI_ACTIONTYPE_IDENTITY 0x00010000 - - -/*@}*/ - -#endif diff --git a/src/windows/identity/uilib/intalert.h b/src/windows/identity/uilib/intalert.h deleted file mode 100644 index 498c8488f..000000000 --- a/src/windows/identity/uilib/intalert.h +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KHALERTS_H_INTERNAL -#define __KHIMAIRA_KHALERTS_H_INTERNAL - -#include<khalerts.h> -#include<khaction.h> - -/*! \addtogroup khui_alert - -@{ */ - -/*! \internal - - \brief An alert - - Describes an alert message that will be shown to the user in a - variety of ways depending on the state of the NetIDMgr - application. - */ -typedef struct tag_khui_alert { - khm_int32 magic; - /*!< Magic number. Always set to - KHUI_ALERT_MAGIC */ - - khm_int32 severity; - /*!< The severity of the alert. One - of KHERR_ERROR, KHERR_WARNING or - KHERR_INFO. The default is - KHERR_INFO. Do not set directly. - Use khui_alert_set_severity(). */ - - khm_int32 alert_commands[KHUI_MAX_ALERT_COMMANDS]; - /*!< The command buttons associated - with the alert. Use - khui_alert_add_command() to add a - command. The buttons will appear in - the order in which they were added. - The first button will be the - default. Each command should be a - known action identifier. */ - khm_int32 n_alert_commands; - /*!< The number of commands in - alert_commands[]. */ - - wchar_t * title; /*!< The title of the alert. Subject - to ::KHUI_MAXCCH_TITLE. Use - khui_alert_set_title() to set. Do - not modify directly. */ - - wchar_t * message; - /*!< The main message of the alert. - Subject to ::KHUI_MAXCCH_MESSAGE. - Use khui_alert_set_message() to set. - Do not modify direcly. */ - - wchar_t * suggestion; - /*!< A suggestion. Appears below the - message text. Use - khui_alert_set_suggestion() to set. - Do not modify directly. */ - - khm_int32 flags; /*!< combination of - ::khui_alert_flags. Do not modify - directly. */ - - kherr_context * err_context; - /*!< If non-NULL at the time the alert - window is shown, this indicates that - the alert window should provide an - error viewer for the given error - context. */ - - kherr_event * err_event; - /*!< If non-NULL at the time the alert - window is shown, this indicates that - the alert window should provide an - error viewer for the given error - event. If an \a err_context is also - given, the error viewer for the - context will be below this error. */ - - khui_alert_type alert_type; - /*!< The type of alert. */ - - khui_action_context ctx; /*!< Context to which this alert - applies to. */ - - khm_int32 response; - /*!< Once the alert is displayed to - the user, when the user clicks one - of the command buttons, the command - ID will be assigned here. */ - - int refcount; - /*!< internal */ - - khm_boolean displayed; - /*!< TRUE when then the alert is being - displayed on screen. Also used - internally to determine when to - terminate the modal loop */ - - LDCL(struct tag_khui_alert); - /*!< internal */ -} khui_alert; - -#define KHUI_ALERT_MAGIC 0x48c39ce9 - -/*@}*/ - -#endif diff --git a/src/windows/identity/uilib/khaction.h b/src/windows/identity/uilib/khaction.h deleted file mode 100644 index 479e39230..000000000 --- a/src/windows/identity/uilib/khaction.h +++ /dev/null @@ -1,1005 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_ACTION_H -#define __KHIMAIRA_ACTION_H - -/*! \addtogroup khui - @{*/ -/*! \defgroup khui_actions Actions - @{*/ - -struct tag_khui_action; -typedef struct tag_khui_action khui_action; - -/*! \brief Unknown action type - - Unknown action type. - */ -#define KHUI_ACTIONTYPE_NONE 0 - -/*! \brief A trigger type action - - A trigger action usually triggers some event, which is what pretty - much every action does. -*/ -#define KHUI_ACTIONTYPE_TRIGGER 1 - -/*! \brief A toggle type action - - A toggle type action typically changes the CHECKED state of the - action each time it is invoked. - */ -#define KHUI_ACTIONTYPE_TOGGLE 2 - -/*! \brief The action is enabled - - This is the default if no other state is specified. Just means - not-disabled. -*/ -#define KHUI_ACTIONSTATE_ENABLED 0 - -/*! \brief The action is diabled */ -#define KHUI_ACTIONSTATE_DISABLED 1 - -/*! \brief For toggle type actions, the action is checked */ -#define KHUI_ACTIONSTATE_CHECKED 2 - -/*! \brief The action is hot - - Typically this means that the user is hovering the pointing device - over a UI element representing the action. - */ -#define KHUI_ACTIONSTATE_HOT 4 - -/*! \brief The action has been marked for deletion - - For custom actions, this means that the custom action was deleted. - The contents of the custom action fields are no longer valid. - */ -#define KHUI_ACTIONSTATE_DELETED 8 - -#ifdef NOEXPORT -#define ACTION_SIMPLE(c,cap,des,top) \ - {c,KHUI_ACTIONTYPE_TRIGGER,NULL,0,0,0,0,0,cap,des,top,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0} - -#define ACTION_FULL(cmd,type,name,inormal,ihot,idis,isml,ismld,capt,toolt,topic,state) \ - {cmd,type,name,inormal,ihot,idis,isml,ismld,capt,toolt,topic,NULL,NULL,NULL,NULL,NULL,NULL,NULL,state} - -#define ACTION_SIMPLE_IMAGE(c,inormal, ihot, idis, isml, ismld,cap, des, top) \ - {c,KHUI_ACTIONTYPE_TRIGGER,NULL,inormal,ihot,idis,isml,ismld,cap,des,top,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0} -#endif - -/*! \brief A reference to an action - - If the \a flags member has the KHUI_ACTIONREF_PACTION bit set, - then the action is referenced by the \a p_action member of the - union. Otherwise the identifier for the action is specified by \a - action member. -*/ -typedef struct tag_khui_action_ref { - int flags; /*!< A combination of KHUI_ACTIONREF_* */ - union { - khm_int32 action; /*!< The action identifier for the - action that is being referrred to. - Only valid if - ::KHUI_ACTIONREF_PACTION is not set - in \a flags. */ - khui_action * p_action; /*!< A pointer to the ::khui_action - structure that describes the action - that is being referred to. Only - valid if ::KHUI_ACTIONREF_PACTION is - set. */ - }; -} khui_action_ref; - -/*! \brief A submenu - - There should exist a menu associated with the action that is being - referred. When displaying this action in a menu, the contents of - the associated menu will appear as a submenu. - */ -#define KHUI_ACTIONREF_SUBMENU 0x01 - -/*! \brief Separator - - This is not an actual action, but represents a separator between - actions. When displaying this action in a menu or a toolbar, a - separating line will be drawn in place of this action. The \a - action and \a p_action members of the structures are unused if - this flag is set. - */ -#define KHUI_ACTIONREF_SEP 0x02 - -/*! \brief Action by reference - - The \a p_action member of the structure points to the - ::khui_action structure that describes the action. - */ -#define KHUI_ACTIONREF_PACTION 0x04 - -#ifdef NOEXPORT -/*! \brief Action should be freed - - \note This flag is reserved for internal use in the NetIDMgr - application. Do not use. - */ -#define KHUI_ACTIONREF_FREE_PACTION 0x08 - -/*! \brief Marks the end of an action sequence - - \note THis flag is reserved for internal use in the NetIDMgr - application. Do not use. - */ -#define KHUI_ACTIONREF_END 0x10 -#endif - -/*! \brief The default action - - When this bit is set in an action reference that describes a menu, - the menu item will be the default item and will be rendered - differently from other menu items. Only useful when defining - context menus. In general, it is good practice to place the - default item at the top of a menu, although the UI library does - not enforce this. This is purely meant as a rendering hint. - - Only one action is allowed to have this flag set. When an action - is added to a menu using khui_menu_insert_action() or - khui_menu_insert_paction() and this flag is set, all other menu - items will be stripped of this flag. - */ -#define KHUI_ACTIONREF_DEFAULT 0x20 - -#ifdef NOEXPORT -#define MENU_ACTION(c) {0,c} -#define MENU_DEFACTION(c) {KHUI_ACTIONREF_DEFAULT, c} -#define MENU_SUBMENU(s) {KHUI_ACTIONREF_SUBMENU,s} -#define MENU_SEP() {KHUI_ACTIONREF_SEP,KHUI_MENU_SEP} -#define MENU_END() {KHUI_ACTIONREF_END,KHUI_MENU_END} -#endif - -/*! \brief Menu definition - - Use the khui_menu_create(), khui_menu_insert_action(), - khui_menu_insert_paction(), khui_menu_get_size(), - khui_menu_get_action() functions to create and manipulate custom - menus. Do not manipulate this structure directly as doing so may - cause inconsistencies in the UI library. -*/ -typedef struct tag_khui_menu_def { - khm_int32 cmd; /*!< Action associated with menu */ - khm_int32 state; /*!< combination of KHUI_MENUSTATE_* */ - khm_size n_items; /*!< The number of actions in the \a items - list. If this is a custom menu, the - ::KHUI_MENUSTATE_ALLOCD bit will be set, - and the contents of this field will be - valid. Otherwise, the contents of this - field is ignored and the list of actions - must be terminated with a - ACTION_LIST_END action. */ - khm_size nc_items; /*!< max number of items in the buffer - alocated for items. Ignored if - ::KHUI_MENUSTATE_ALLOCD is not set in \a - state. */ - khui_action_ref *items; /*!< Action list terminated by, - ACTION_LIST_END. If \a n_items is set - to a value other than -1, the list - doesn't necessarily have to end with a - ACTION_LIST_END. When constructing a - menu using khui_menu_* functions, they - will set the size of this list in the \a - n_items member, and there will be no - ACTION_LIST_END action to terminate the - list. */ -} khui_menu_def; - -#ifdef NOEXPORT -#define CONSTMENU(c,s,i) {c,s,(khm_size)-1,(khm_size)-1,i} -#endif - -/*! \brief Unspecified menu - - Used when there is no single command associated with the entire - menu, such as for ad-hoc context menus. - */ -#define KHUI_MENU_NONE -3 - -/*! \brief Menu end indicator - - For static or constant menus this indicates that this action marks - the end of the list of actions which defined the menu. This is - invalid if used in a dynamic menu (a menu with the - ::KHUI_MENUSTATE_ALLOCD bit set). - */ -#define KHUI_MENU_END -2 - -/*! \brief Menu separator - - A separator for actions. When displaying a menu or showing a - toolbar based on a menu definition, a separator is rendered as a - bar separating the user interface elements for the actions on - either side of this. -*/ -#define KHUI_MENU_SEP -1 - -/*! \brief Constant menu - - The contents of the menu cannot be modified (individual actions in - the menu may be modified, but the order and the contents of the - menu itself cannot be modified. - - This is the default if ::KHUI_MENUSTATE_ALLOCD is not specified. - */ -#define KHUI_MENUSTATE_CONSTANT 0 - -/*! \brief Variable menu - - The menu is dnamically allocated. The list of actions contained - in the menu can be modified. -*/ -#define KHUI_MENUSTATE_ALLOCD 1 - -#ifdef NOEXPORT -/* predefined system menu */ -#define KHUI_MENUSTATE_SYSTEM 2 -#endif - -#ifdef NOEXPORT - -/*! \brief Accelerator definition */ -typedef struct tag_khui_accel_def { - int cmd; - int mod; - int key; - int scope; -} khui_accel_def; - -#define KHUI_ACCEL_SCOPE_GLOBAL 0 - -extern khui_accel_def khui_accel_global[]; -extern int khui_n_accel_global; - -extern khui_action khui_actions[]; -extern int khui_n_actions; - -extern khui_menu_def khui_all_menus[]; -extern int khui_n_all_menus; - -#endif /* NOEXPORT */ - -/* functions */ - -/*! \brief Refresh the global action table - - Changes to system menus and toolbars may not be immediately - reflected in the user interface. Calling this function forces the - UI to reparse the action tables and menus and refresh the - application menu bar and toolbars. - - */ -KHMEXP void KHMAPI -khui_refresh_actions(void); - -/*! \brief Lock the action and menu tables - - This function, along with khui_action_unlock() is used to prevent - changes from being made to shared menus and actions while they are - being updated. In particular, changes to shared menus usually - need to be done in a batch and may suffer corruption of other - threads access or modify the menu while one thread is updating it. - Operations on shared menus should always be done with the actions - locked. -*/ -KHMEXP void KHMAPI -khui_action_lock(void); - -/*! \brief Unlock the action and menu tables - - Unlocks the action and menu tables after a call to - khui_action_lock(). - - \see khui_action_lock() - */ -KHMEXP void KHMAPI -khui_action_unlock(void); - -/*! \brief Create a new menu - - Creates a new menu. The returned data structure must be freed by - a call to khui_menu_delete(). Custom menus that are created this - way are not reference counted or maintained by the UI library. - The caller is responsible for calling khui_menu_delete() when the - data is no longer needed. - - Specifiying an action in the \a action parameter will associate - the menu with the specified action. In this case, if the action - is added to another menu with the ::KHUI_ACTIONREF_SUBMENU flag, - this menu will appear as a submenu within that menu. Only one - menu can be associated with any given action. Custom menus can - not be associated with standard actions. - */ -KHMEXP khui_menu_def * KHMAPI -khui_menu_create(khm_int32 action); - -/*! \brief Duplicate a menu - - Creates a copy of the specified menu. The returned data structure - must be freed by a call to khui_menu_delete(). Custom menus are - not reference counted or maintained by the UI library. The caller - is responsible for calling khui_menu_delete() when the data is no - longer needed. - - Note that even if the original menu was associated with an action, - the duplicate will not be. Modifying the duplicate will not - modify the original menu. Only one menu can be associated with an - action. - */ -KHMEXP khui_menu_def * KHMAPI -khui_menu_dup(khui_menu_def * src); - -/*! \brief Delete a menu - - Deletes a menu created by a call to khui_menu_create() or - khui_menu_dup(). This frees up the memory and associated - resources used by the menu definition. The pointer that is passed - in will no longer be valid. - */ -KHMEXP void KHMAPI -khui_menu_delete(khui_menu_def * d); - -/*! \brief Insert an action into a menu - - The action specified by \a cmd will be inserted in to the menu \a - d at index \a idx. - - \param[in] d The menu to insert the action into - - \param[in] idx The index at which to insert the action. The index - is zero based. If \a idx is (-1) or larger than the largest - index in the menu, the item is appended to the menu. - - \param[in] cmd The command representing the action to insert into - the menu. This should be either a standard action, a user - action created with khui_action_create(), or certain pseudo - actions. Not all pseudo actions can be placed on a menu. - - \param[in] flags Flags for the action. This is a combination of - KHUI_ACTIONREF_* constants. Currently, the only constants - that are valid for this function are: ::KHUI_ACTIONREF_SEP, - ::KHUI_ACTIONREF_SUBMENU, ::KHUI_ACTIONREF_DEFAULT. - ::KHUI_ACTIONREF_SEP will be automatically added if the - command is ::KHUI_MENU_SEP. If ::KHUI_ACTIONREF_DEFAULT is - specified, then all other items in the menu will be stripped - of that flag leaving this action as the only one with that - flag set. - */ -KHMEXP void KHMAPI -khui_menu_insert_action(khui_menu_def * d, khm_size idx, khm_int32 cmd, khm_int32 flags); - -#define khui_menu_add_action(d,c) khui_menu_insert_action((d),-1,(c),0) -#pragma deprecated(khui_menu_add_action) - -#ifdef NOEXPORT - -/*! \brief Insert an action by reference into a menu - - The action specified by \a act will be inserted into the menu \a d - at index \a idx. - - \param[in] d The menu to inser the action into. - - \param[in] idx The index at which to insert the action. The index - is zero based. If the index is (-1) or is larger than the - largest index in the menu, then the action is appended to the - menu. - - \param[in] act The action to insert. This is added by reference. - It is the callers reponsibility to ensure that the structure - pointed to by \a act is available throughout the lifetime of - the menu. - - \param[in] flags Flags for the action. This is a combination of - KHUI_ACTIONREF_* constants. Currently, the only constants - that are valid for this function are: ::KHUI_ACTIONREF_SEP, - ::KHUI_ACTIONREF_SUBMENU, ::KHUI_ACTIONREF_DEFAULT. For this - function, ::KHUI_ACTIONREF_PACTION will automatically be aded - when adding the action. ::KHUI_ACTIONREF_SEP will be - automatically added if the command is ::KHUI_MENU_SEP. If - ::KHUI_ACTIONREF_DEFAULT is specified, then all other items in - the menu will be stripped of that flag leaving this action as - the only one with that flag set. -*/ -KHMEXP void KHMAPI -khui_menu_insert_paction(khui_menu_def * d, khm_size idx, khui_action * act, khm_int32 flags); - -#define khui_menu_add_paction(d,a,f) khui_menu_insert_paction((d),-1,(a),(f)) -#pragma deprecated(khui_menu_add_paction) - -#endif - -/*! \brief Remove an action from a menu - - The action at the specified index will be removed from the menu. - */ -KHMEXP void KHMAPI -khui_menu_remove_action(khui_menu_def * d, khm_size idx); - -/*! \brief Get the number of items in the menu - - Note that the count includes menu separators. The indices of the - menu items range from 0 to one less than the value returned by - this function. - */ -KHMEXP khm_size KHMAPI -khui_menu_get_size(khui_menu_def * d); - -/*! \brief Get the menu item at a specified index - - The returned reference is only valid while the ::khui_menu_def - structure is valid. In addition, the reference becomes invalid if - the list of actions in the menu data structure is modified in any - way. - - If the specified index is out of bounds, then the function returns - NULL. - - */ -KHMEXP khui_action_ref * -khui_menu_get_action(khui_menu_def * d, khm_size idx); - -/*! \brief Action scope identifiers - - The scope identifier is a value which describes the scope of the - cursor context. See documentation on individual scope identifiers - for details. - - The role of the scope identifier is to provide a summary of the - current cursor context. Specifically, these identify several - special cases of credential selection, such as the selection of an - entire identity, a credential type or a single credential. If - none of these are applicable, then the generic scope identifier - ::KHUI_SCOPE_GROUP is set or ::KHUI_SCOPE_NONE if there is nothing - selected. - - Note that the scope typically only apply to cursor contexts and - not the selection context. Please see - \ref khui_context "UI Contexts" for more information. - - \see \ref khui_context "UI Contexts" -*/ -typedef enum tag_khui_scope { - KHUI_SCOPE_NONE, - /*!< No context. Nothing is selected. */ - - KHUI_SCOPE_IDENT, - /*!< Identity. The selection is the entire identity specified in - the \a identity field of the context. */ - - KHUI_SCOPE_CREDTYPE, - /*!< A credentials type. The selection is an entire credentials - type. If \a identity is non-NULL, then the scope is all the - credentials of type \a cred_type which belong to \a identity. - Otherwise, the selection is all credentials of type \a - cred_type. - - \note The \a identity can be non-NULL even for the case where - all credentials of type \a cred_type under \a identity is the - same scope as all credentials of type \a cred_type under all - identities. */ - - KHUI_SCOPE_GROUP, - /*!< A grouping of credentials. The scope is a group of - credentials which can not be simplified using one of the other - context identifiers. The \a headers array contains \a n_headers - elements describing the outline level that has been selected. - - \see ::khui_header - \see \ref khui_context_sel_ctx_grp "KHUI_SCOPE_GROUP description" */ - - KHUI_SCOPE_CRED - /*!< A single credential. Only a single credential was - selected. The \a cred field of the context specifies the - credential. The \a identity and \a cred_type fields specify the - identity and the credential type respectively. */ -} khui_scope; - - -/*! \brief Outline header - - Describes an outline header in the user interface. - - \see \ref khui_context_sel_ctx_grp "KHUI_SCOPE_GROUP description" - */ -typedef struct tag_khui_header { - khm_int32 attr_id; /*!< Attribute ID */ - void * data; /*!< Value of attribute */ - khm_size cb_data; /*!< Size of the value */ -} khui_header; - -/*! \brief Maximum number of outline headers - - This is the maximum number of fields that the credentials view can - be grouped by. - */ -#define KHUI_MAX_HEADERS 6 - -/*! \brief Action context - - Represents the UI context for an action. - */ -typedef struct tag_khui_action_context { - khm_int32 magic; /*!< Internal. */ - khui_scope scope; /*!< Context scope. One of ::khui_scope*/ - khm_handle identity; /*!< Identity */ - khm_int32 cred_type; /*!< Credential type ID */ - khm_handle cred; /*!< Credential */ - - khui_header headers[KHUI_MAX_HEADERS]; - /*!< The ordered set of outline - headers which define the current - cursor location. */ - - khm_size n_headers; /*!< Number of actual headers defined - above */ - - khm_handle credset; /*!< Handle to a credential set - containing the currently selected - credentials. When the context is - obtained through khui_context_get(), - this credential is returned in a - sealed state. */ - - khm_size n_sel_creds; /*!< Number of selected credentials */ - - void * int_buf; /*!< Internal. Do not use. */ - khm_size int_cb_buf; /*!< Internal. Do not use. */ - khm_size int_cb_used; /*!< Internal. Do not use. */ - - void * vparam; /*!< Optional data */ - khm_size cb_vparam; /*!< Size of optional data */ -} khui_action_context; - -/*! \brief Set the current context - - Changes the UI context to that represented by the parameters to - the function. Note that specifying a valid \a identity or \a cred - parameter will result in an automatic hold on the respective - object. The hold will stay until another call to - khui_context_set() overwrites the identity or credential handle or - a call to khui_context_reset() is made. - - While this API is available, it is only called from the main - NetIDMgr application. Plugins do not have a good reason to call - this API directly and should not do so. - - \param[in] scope The new context scope - - \param[in] identity A handle to an identity. If this is not NULL, - then it should be a valid handle to an identity. Required if - \a scope specifies ::KHUI_SCOPE_IDENT. Optional if \a scope - specifies ::KHUI_SCOPE_CREDTYPE. Ignored otherwise. - - \param[in] cred_type A credentials type. Specify - ::KCDB_CREDTYPE_INVALID if this parameter is not given or not - relevant. Required if \a scope specifies - ::KHUI_SCOPE_CREDTYPE. Ignored otherwise. - - \param[in] cred A handle to a credential. If this parameter is - not NULL it is expected to be a valid handle to a credential. - Required if \a scope specifies ::KHUI_SCOPE_CRED. Ignored - otherwise. - - \param[in] headers An array of headers. The \a n_headers - parameter specifies the number of elements in the array. Set - to NULL if not specified. Required if \a scope specifies - ::KHUI_SCOPE_GROUP. - - \param[in] n_headers Number of elements in \a headers. Must be - less than or equal to ::KHUI_MAX_HEADERS. Required if \a - headers is not NULL. Ignored otherwise. - - \param[in] cs_src A handle to a credential set from which the - selected credentials will be extracted. The credentials that - are selected must have the ::KCDB_CRED_FLAG_SELECTED flag set. - - \note This function should only be called from the UI thread. - */ -KHMEXP void KHMAPI -khui_context_set(khui_scope scope, - khm_handle identity, - khm_int32 cred_type, - khm_handle cred, - khui_header *headers, - khm_size n_headers, - khm_handle cs_src); - -/*! \brief Set the current context - - Changes the UI context to that represented by the parameters to - the function. Note that specifying a valid \a identity or \a cred - parameter will result in an automatic hold on the respective - object. The hold will stay until another call to - khui_context_set() overwrites the identity or credential handle or - a call to khui_context_reset() is made. - - While this API is available, it is only called from the main - NetIDMgr application. Plugins do not have a good reason to call - this API directly and should not do so. - - \param[in] scope The new context scope - - \param[in] identity A handle to an identity. If this is not NULL, - then it should be a valid handle to an identity. Required if - \a scope specifies ::KHUI_SCOPE_IDENT. Optional if \a scope - specifies ::KHUI_SCOPE_CREDTYPE. Ignored otherwise. - - \param[in] cred_type A credentials type. Specify - ::KCDB_CREDTYPE_INVALID if this parameter is not given or not - relevant. Required if \a scope specifies - ::KHUI_SCOPE_CREDTYPE. Ignored otherwise. - - \param[in] cred A handle to a credential. If this parameter is - not NULL it is expected to be a valid handle to a credential. - Required if \a scope specifies ::KHUI_SCOPE_CRED. Ignored - otherwise. - - \param[in] headers An array of headers. The \a n_headers - parameter specifies the number of elements in the array. Set - to NULL if not specified. Required if \a scope specifies - ::KHUI_SCOPE_GROUP. - - \param[in] n_headers Number of elements in \a headers. Must be - less than or equal to ::KHUI_MAX_HEADERS. Required if \a - headers is not NULL. Ignored otherwise. - - \param[in] cs_src A handle to a credential set from which the - selected credentials will be extracted. The credentials that - are selected must have the ::KCDB_CRED_FLAG_SELECTED flag set. - - \param[in] vparam Optional parameter blob - - \param[in] cb_vparam Size of parameter blob - - \note This function should only be called from the UI thread. - */ -KHMEXP void KHMAPI -khui_context_set_ex(khui_scope scope, - khm_handle identity, - khm_int32 cred_type, - khm_handle cred, - khui_header *headers, - khm_size n_headers, - khm_handle cs_src, - void * vparam, - khm_size cb_vparam); - -/*! \brief Set the current UI context using an existing context - - Copies the context specified in \a ctx into the active UI context. - - \param[in] ctx A pointer to a ::khui_action_context structure that - specifies the new UI context. Cannot be NULL. -*/ -KHMEXP void KHMAPI -khui_context_set_indirect(khui_action_context * ctx); - -/*! \brief Obtain the current UI context - - The parameter specified by \a ctx will receive the current UI - context. If the context contains an identity or a credential - handle, a hold will be obtained on the relevant object. Use - khui_context_release() to release the holds obtained in a prior - call to khui_context_get(). - - \note The returned context should not be modified prior to calling - khui_context_release(). -*/ -KHMEXP void KHMAPI -khui_context_get(khui_action_context * ctx); - -/*! \brief Create a new UI context - - The created context does not have any relation to the current UI - context. This function is provided for use in situations where an - application needs to provide a scope description through a - ::khui_action_context structure. - - Once the application is done with the context, it should call - khui_context_release() to release the created context. - */ -KHMEXP void KHMAPI -khui_context_create(khui_action_context * ctx, - khui_scope scope, - khm_handle identity, - khm_int32 cred_type, - khm_handle cred); - -/*! \brief Release a context obtained using khui_context_get() - - Releases all holds obtained on related objects in a prior call to - khui_context_get() and nullifies the context. - - \note The context should not have been modified between calling - khui_context_get() and khui_context_release() - */ -KHMEXP void KHMAPI -khui_context_release(khui_action_context * ctx); - -/*! \brief Reset the UI context - - Nullifies the current UI context and releases any holds obtained - on objects related to the previous context. -*/ -KHMEXP void KHMAPI -khui_context_reset(void); - -/*! \brief Refresh context data - - Setting the UI context involves other side effects such as - activation of or disabling certain actions based on the selection. - If an operation is performed which may affect the side effects, - khui_context_refresh() is called to refresh them. - - An example is when setting the default identity. The state of the - action ::KHUI_ACTION_SET_DEF_ID depends on whether the currently - selected identity is the default. However, if the currently - selected identity becomes the default after selection, then - khui_context_refresh() should be called to adjust the state of the - ::KHUI_ACTION_SET_DEF_ID action. - */ -KHMEXP void KHMAPI -khui_context_refresh(void); - -/*! \brief A filter function that filters for credentials in the cursor context - - This is a function of type ::kcdb_cred_filter_func which can be - used to filter for credentials that are included in the cursor - context. - - The \a rock parameter should be a pointer to a - ::khui_action_context structure which will be used as the filter. - - For example, the following code will extract the cursor context - credentials into the credential set \a my_credset based on the UI - context \a my context: - - \code - kcdb_credset_extract_filtered(my_credset, - NULL, - khui_context_cursor_filter, - (void *) my_context); - \endcode -*/ -KHMEXP khm_int32 KHMAPI -khui_context_cursor_filter(khm_handle cred, - khm_int32 flags, - void * rock); - -/*! \brief Get a string representation of an accelerator - - \param[in] cmd Command for which to obtain the accelerator string for - \param[out] buf Buffer to receive the accelerator string - \param[in] bufsiz Size of the buffer in bytes. Note that the size of the - buffer must be sufficient to hold at least one character and a - NULL terminator. - - \return TRUE if the operation was successful. FALSE otherwise. - */ -KHMEXP khm_boolean KHMAPI khui_get_cmd_accel_string(khm_int32 cmd, wchar_t * buf, khm_size bufsiz); - -#ifdef NOEXPORT -/*! \brief Initializes the global accelerator table - */ -KHMEXP HACCEL KHMAPI khui_create_global_accel_table(void); -#endif - -/*! \brief Find a menu by id - - Finds the menu that is associated with the specified action. - */ -KHMEXP khui_menu_def * KHMAPI khui_find_menu(khm_int32 action); - -#ifdef NOEXPORT - -/* internal */ -KHMEXP void KHMAPI -khui_set_main_window(HWND hwnd); - -#endif - -/*! \brief Trigger an action - - Triggers the specified action using the specified UI context. - - This function does not return until the specified action has been - processed. Many standard actions are asynchronous and they will - return before processing will complete. - - Pseudo actions should not be triggered using khui_action_trigger() - as they only carry meaning when invoked from specific windows or - contexts. - - \param[in] action Action. Should be one of the standard actions - or an action created by khui_action_create() - - \param[in] ctx The UI context to use for the action. If this is - NULL, the action will be triggered under the current UI context. - */ -KHMEXP void KHMAPI -khui_action_trigger(khm_int32 action, khui_action_context * ctx); - -/*! \brief Find an action by id - - \note This function should not be used by plugins. It is there - for use by the NetIDMgr application. -*/ -KHMEXP khui_action * KHMAPI khui_find_action(khm_int32 action); - -#ifdef NOEXPORT -/*! \brief Get the length of the action list */ -KHMEXP size_t KHMAPI khui_action_list_length(khui_action_ref * ref); -#endif - -/*! \brief Create a new action - - Creates a new custom action. The created custom action can be - added to menus, toolbars and can be triggered by - khui_action_trigger(). - - When the action is triggered as a result of the user selecting a - menu item, a toolbar item or as a result of calling - khui_action_trigger(), the subscription identified by \a hsub will - received a message of type ::KMSG_ACT, subtype - ::KMSG_ACT_ACTIVATE. The \a uparam for the message will be the - action identifier that was returned by khui_action_create(). The - \a vparam of the message will currently be set to \a NULL. - - Actions can optionally be named. The name is not actively used by - the Network Identity Manager framework, but can be used to label - actions so that they can be looked up later using - khui_find_named_action(). - - \param[in] name Name for a named action. The name must be unique - among all registered actions. (limited by KHUI_MAXCCH_NAME). - (Optional. Set to NULL if the action is not a named action.) - See \a note below for additional restrictions on the name of - the action. - - \param[in] caption The localized caption for the action. This - will be shown in menus, toolbars and buttons when the action - needs to be represented. (limited by KHUI_MAXCCH_SHORT_DESC) - (Required) - - \param[in] tooltip The localized tooltip for the action. (limited - by KHUI_MAXCCH_SHORT_DESC) (Optional, set to NULL if there is - no tooltip associated with the action) - - \param[in] userdata A custom value. - - \param[in] type The type of the action. Currently it should be - set to either ::KHUI_ACTIONTYPE_TRIGGER or - ::KHUI_ACTIONTYPE_TOGGLE. For ::KHUI_ACTIONTYPE_TOGGLE, the - initial state will be unchecked. Use khui_check_action() - function to change the checked state of the action. - - \param[in] hsub The subscription that is notified when the action - is triggered. (Optional) The subscription must be created with - kmq_create_subscription(). The handle will be released when - it is no longer needed. Hence, the caller should not release - it. - - \return The identifier of the new action or zero if the action - could not be created. - - \note For named custom actions, the name of the action can not be - the same as the name of a configuration node. See - khui_cfg_register_node(). - */ -KHMEXP khm_int32 KHMAPI -khui_action_create(const wchar_t * name, - const wchar_t * caption, - const wchar_t * tooltip, - void * userdata, - khm_int32 type, - khm_handle hsub); - -/* \brief Delete a custom action - - Deletes a custom action created by a call to khui_action_create(). - Custom actions should only be deleted when unloading a plugin. - */ -KHMEXP void KHMAPI -khui_action_delete(khm_int32 action); - -/*! \brief Get the user data associated with a custom action - - This function returns the user data that was specified when the - custom action was created usng khui_action_create(). If the - custom action identifier is invalid or if the custom action does - not contain any user data, this function will return NULL. - */ -KHMEXP void * KHMAPI -khui_action_get_data(khm_int32 action); - -/*! \brief Find an action by name */ -KHMEXP khui_action * KHMAPI khui_find_named_action(const wchar_t * name); - -/*! \brief Enables or disables a group of actions - - The group of actions are specified by the menu definition. All - valid action entries in the menu are marked as enabled or disabled - according to the value of \a enable. - */ -KHMEXP void KHMAPI khui_enable_actions(khui_menu_def * d, khm_boolean enable); - -/*! \brief Enables or disables an action - - The action designated by the command \a action will either be enabled - or disabled depending on the \a enable parameter. If \a enable is - TRUE then the action is enabled. - */ -KHMEXP void KHMAPI khui_enable_action(khm_int32 action, khm_boolean enable); - -/*! \brief Check an action in an action group - - Marks the action denoted by \a action as checked and resets the - checked bit in all other actions. - - \param[in] d A menu definition. - - \param[in] action A command identifier. Setting this to -1 will - reset the checked bit in all the actions in the menu - definition. - */ -KHMEXP void KHMAPI khui_check_radio_action(khui_menu_def * d, khm_int32 action); - -/*! \brief Check an action - - For toggle typed actions, this sets or resets the check. - */ -KHMEXP void KHMAPI khui_check_action(khm_int32 cmd, khm_boolean check); - -#ifdef NOEXPORT -/*!\cond INTERNAL */ - -/*! \brief Initialize actions - - \note Only called by the NetIDMgr application - */ -KHMEXP void KHMAPI khui_init_actions(void); - -/*! \brief Exit actions - - \note Only called by the NetIDMgr application - */ -KHMEXP void KHMAPI khui_exit_actions(void); - -/*! \endcond */ -#endif - -/*@}*/ -/*@}*/ -#endif diff --git a/src/windows/identity/uilib/khactiondef.h b/src/windows/identity/uilib/khactiondef.h deleted file mode 100644 index f159771a1..000000000 --- a/src/windows/identity/uilib/khactiondef.h +++ /dev/null @@ -1,170 +0,0 @@ -/* - * 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 - * 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 __KHIMAIRA_ACTIONDEF_H -#define __KHIMAIRA_ACTIONDEF_H - -/*! \ingroup khui_actions - @{*/ -/*! \defgroup khui_std_actions Standard Actions -@{ */ - -/*!\name Standard actions - @{*/ -#define KHUI_ACTION_BASE 50000 - -#define KHUI_ACTION_PROPERTIES (KHUI_ACTION_BASE + 0) -#define KHUI_ACTION_EXIT (KHUI_ACTION_BASE + 1) -#define KHUI_ACTION_SET_DEF_ID (KHUI_ACTION_BASE + 3) -#define KHUI_ACTION_SET_SRCH_ID (KHUI_ACTION_BASE + 4) -#define KHUI_ACTION_PASSWD_ID (KHUI_ACTION_BASE + 7) -#define KHUI_ACTION_NEW_CRED (KHUI_ACTION_BASE + 8) -#define KHUI_ACTION_DEBUG_WINDOW (KHUI_ACTION_BASE + 10) -#define KHUI_ACTION_VIEW_REFRESH (KHUI_ACTION_BASE + 11) -#define KHUI_ACTION_LAYOUT_ID (KHUI_ACTION_BASE + 12) -#define KHUI_ACTION_LAYOUT_TYPE (KHUI_ACTION_BASE + 13) -#define KHUI_ACTION_LAYOUT_LOC (KHUI_ACTION_BASE + 14) -#define KHUI_ACTION_TB_STANDARD (KHUI_ACTION_BASE + 15) -#define KHUI_ACTION_OPT_KHIM (KHUI_ACTION_BASE + 16) -#define KHUI_ACTION_OPT_IDENTS (KHUI_ACTION_BASE + 17) -#define KHUI_ACTION_OPT_NOTIF (KHUI_ACTION_BASE + 18) -#define KHUI_ACTION_HELP_CTX (KHUI_ACTION_BASE + 19) -#define KHUI_ACTION_HELP_CONTENTS (KHUI_ACTION_BASE + 20) -#define KHUI_ACTION_HELP_INDEX (KHUI_ACTION_BASE + 21) -#define KHUI_ACTION_HELP_ABOUT (KHUI_ACTION_BASE + 22) -#define KHUI_ACTION_DESTROY_CRED (KHUI_ACTION_BASE + 23) -#define KHUI_ACTION_RENEW_CRED (KHUI_ACTION_BASE + 24) -#define KHUI_ACTION_OPEN_APP (KHUI_ACTION_BASE + 25) -#define KHUI_ACTION_MENU_ACTIVATE (KHUI_ACTION_BASE + 26) -#define KHUI_ACTION_CLOSE_APP (KHUI_ACTION_BASE + 27) -#define KHUI_ACTION_IMPORT (KHUI_ACTION_BASE + 28) -#define KHUI_ACTION_OPT_PLUGINS (KHUI_ACTION_BASE + 29) -#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) -#define KHUI_ACTION_LAYOUT_MINI (KHUI_ACTION_BASE + 36) -#define KHUI_ACTION_VIEW_ALL_IDS (KHUI_ACTION_BASE + 37) -/*@}*/ - -/*! \name Pseudo actions - -Pseudo actions do not trigger any specific function, but acts as a -signal of some generic event which will be interpreted based on -context. - -@{*/ -#define KHUI_PACTION_BASE (KHUI_ACTION_BASE + 500) - -#define KHUI_PACTION_MENU (KHUI_PACTION_BASE + 0) -#define KHUI_PACTION_UP (KHUI_PACTION_BASE + 1) -#define KHUI_PACTION_DOWN (KHUI_PACTION_BASE + 2) -#define KHUI_PACTION_LEFT (KHUI_PACTION_BASE + 3) -#define KHUI_PACTION_RIGHT (KHUI_PACTION_BASE + 4) -#define KHUI_PACTION_ENTER (KHUI_PACTION_BASE + 5) -#define KHUI_PACTION_ESC (KHUI_PACTION_BASE + 6) -#define KHUI_PACTION_OK (KHUI_PACTION_BASE + 7) -#define KHUI_PACTION_CANCEL (KHUI_PACTION_BASE + 8) -#define KHUI_PACTION_CLOSE (KHUI_PACTION_BASE + 9) -#define KHUI_PACTION_DELETE (KHUI_PACTION_BASE + 10) -#define KHUI_PACTION_UP_EXTEND (KHUI_PACTION_BASE + 11) -#define KHUI_PACTION_UP_TOGGLE (KHUI_PACTION_BASE + 12) -#define KHUI_PACTION_DOWN_EXTEND (KHUI_PACTION_BASE + 13) -#define KHUI_PACTION_DOWN_TOGGLE (KHUI_PACTION_BASE + 14) -#define KHUI_PACTION_BLANK (KHUI_PACTION_BASE + 15) -#define KHUI_PACTION_NEXT (KHUI_PACTION_BASE + 16) -#define KHUI_PACTION_SELALL (KHUI_PACTION_BASE + 17) -#define KHUI_PACTION_YES (KHUI_PACTION_BASE + 18) -#define KHUI_PACTION_NO (KHUI_PACTION_BASE + 19) -#define KHUI_PACTION_YESALL (KHUI_PACTION_BASE + 20) -#define KHUI_PACTION_NOALL (KHUI_PACTION_BASE + 21) -#define KHUI_PACTION_REMOVE (KHUI_PACTION_BASE + 22) -#define KHUI_PACTION_KEEP (KHUI_PACTION_BASE + 23) -#define KHUI_PACTION_DISCARD (KHUI_PACTION_BASE + 24) -#define KHUI_PACTION_PGDN (KHUI_PACTION_BASE + 25) -#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 - -Stock menus. - -@{*/ -#define KHUI_MENU_BASE (KHUI_ACTION_BASE + 1000) - -#define KHUI_MENU_MAIN (KHUI_MENU_BASE + 0) -#define KHUI_MENU_FILE (KHUI_MENU_BASE + 1) -#define KHUI_MENU_CRED (KHUI_MENU_BASE + 2) -#define KHUI_MENU_VIEW (KHUI_MENU_BASE + 3) -#define KHUI_MENU_OPTIONS (KHUI_MENU_BASE + 4) -#define KHUI_MENU_HELP (KHUI_MENU_BASE + 5) - -#define KHUI_MENU_LAYOUT (KHUI_MENU_BASE + 6) -#define KHUI_MENU_TOOLBARS (KHUI_MENU_BASE + 7) - -#define KHUI_MENU_IDENT_CTX (KHUI_MENU_BASE + 8) -#define KHUI_MENU_TOK_CTX (KHUI_MENU_BASE + 9) -#define KHUI_MENU_ICO_CTX_MIN (KHUI_MENU_BASE + 12) -#define KHUI_MENU_ICO_CTX_NORMAL (KHUI_MENU_BASE + 13) -#define KHUI_MENU_CWHEADER_CTX (KHUI_MENU_BASE + 14) - -#define KHUI_MENU_COLUMNS (KHUI_MENU_BASE + 15) - -#define KHUI_PMENU_TOK_SEL (KHUI_MENU_BASE + 10) -#define KHUI_PMENU_ID_SEL (KHUI_MENU_BASE + 11) - -#define KHUI_MENU_DESTROY_CRED (KHUI_MENU_BASE + 16) -#define KHUI_MENU_RENEW_CRED (KHUI_MENU_BASE + 17) -#define KHUI_MENU_SETDEF (KHUI_MENU_BASE + 18) - -/*@}*/ - -/*! \name Toolbars -@{*/ -#define KHUI_TOOLBAR_BASE (KHUI_ACTION_BASE + 2000) - -#define KHUI_TOOLBAR_STANDARD (KHUI_TOOLBAR_BASE + 0) -/*@}*/ - -/*! \brief Base for user actions - - When creating new actions, the UI library will allocate command - identifiers starting with this one. -*/ -#define KHUI_USERACTION_BASE (KHUI_ACTION_BASE + 10000) - -/*! \brief Does this command represent a user action? */ -#define IS_USERACTION(cmd) ((cmd) >= KHUI_USERACTION_BASE) -/*@}*/ -/*@}*/ - -#endif diff --git a/src/windows/identity/uilib/khalerts.h b/src/windows/identity/uilib/khalerts.h deleted file mode 100644 index d4e44d8de..000000000 --- a/src/windows/identity/uilib/khalerts.h +++ /dev/null @@ -1,403 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KHALERTS_H -#define __KHIMAIRA_KHALERTS_H - -/********************************************************************* - Alerter and error reporting -**********************************************************************/ - -/*! \addtogroup khui -@{ */ - -/*!\defgroup khui_alert Alerter and Error Reporting -@{*/ - -struct tag_khui_alert; -typedef struct tag_khui_alert khui_alert; - -#define KHUI_MAX_ALERT_COMMANDS 4 - -/*! \brief Maximum number of characters in title including terminating NULL - */ -#define KHUI_MAXCCH_TITLE 256 - -/*! \brief Maximum number of bytes in title including terminating NULL - */ -#define KHUI_MAXCB_TITLE (KHUI_MAXCCH_TITLE * sizeof(wchar_t)) - -/*! \brief Maximum number of characters in message including terminating NULL - */ -#define KHUI_MAXCCH_MESSAGE 1024 - -/*! \brief Maximum number of bytes in message including terminating NULL - */ -#define KHUI_MAXCB_MESSAGE (KHUI_MAXCCH_MESSAGE * sizeof(wchar_t)) - -/*! \brief Maxumum number of characters in a suggestion including terminating NULL */ -#define KHUI_MAXCCH_SUGGESTION 1024 - -/*! \brief Maximum number of bytes in a suggestion, including terminating NULL */ -#define KHUI_MAXCB_SUGGESTION (KHUI_MAXCCH_SUGGESTION * sizeof(wchar_t)) - -/*! \brief Flags for an alert */ -enum khui_alert_flags { - KHUI_ALERT_FLAG_FREE_STRUCT =0x00000001, - /*!< Internal. Free the structure once the alert is done. */ - - KHUI_ALERT_FLAG_FREE_TITLE =0x00000002, - /*!< Internal. Free the \a title field when the alert is done.*/ - - KHUI_ALERT_FLAG_FREE_MESSAGE =0x00000004, - /*!< Internal. Free the \a message field when the alert is done. */ - - KHUI_ALERT_FLAG_FREE_SUGGEST =0x00000008, - /*!< Internal. Free the \a suggest field when the alert is done */ - - KHUI_ALERT_FLAG_DEFACTION =0x00000010, - /*!< If the message is displayed as a balloon prompt, then perform - the default action when it is clicked. The default action is - the first action added to the alert. Cannot be used if there - are no actions or if ::KHUI_ALERT_FLAG_REQUEST_WINDOW is - specified.*/ - - KHUI_ALERT_FLAG_DISPATCH_CMD =0x00000020, - /*!< If the message has commands, when the user clicks on one of - the command buttons, the corresponding command will be - immediately dispatched as if khui_action_trigger() is called - with a NULL UI context. Otherwise, the selected command will be - stored in the alert and can be retrieved via a call to - khui_alert_get_response(). */ - - KHUI_ALERT_FLAG_VALID_TARGET =0x00010000, - /*!< Internal. There is a valid target for the alert */ - - KHUI_ALERT_FLAG_VALID_ERROR =0x00020000, - /*!< Internal. There is a valid error context associated with the alert */ - - KHUI_ALERT_FLAG_DISPLAY_WINDOW =0x01000000, - /*!< The alert has been displayed in a window */ - - KHUI_ALERT_FLAG_DISPLAY_BALLOON =0x02000000, - /*!< The alert has been displayed in a ballon */ - - KHUI_ALERT_FLAG_REQUEST_WINDOW =0x04000000, - /*!< The alert should be displayed in a window */ - - KHUI_ALERT_FLAG_REQUEST_BALLOON =0x08000000, - /*!< The alert should be displayed in a balloon */ - - KHUI_ALERT_FLAG_MODAL =0x10000000, - /*!< Internal. Modal alert. Do not set direclty. */ - - KHUI_ALERT_FLAGMASK_RDWR =0x0C000030, - /*!< Bit mask of flags that can be set by khui_alert_set_flags() */ -}; - -/*! \brief Alert types - - These types can be set with khui_alert_set_type() to indicate - which type of alert this is. The types defined here are - identified by the Network Identity Manager and will receive - special handling whereever appropriate. - - The type is a hint to the application and will not guarantee a - particular behavior. - */ -typedef enum tag_khui_alert_types { - KHUI_ALERTTYPE_NONE = 0, /*!< No specific alert type */ - KHUI_ALERTTYPE_PLUGIN, /*!< Plug-in or module load related - alert */ - KHUI_ALERTTYPE_EXPIRE, /*!< Credential or identity expiration - warning */ - KHUI_ALERTTYPE_RENEWFAIL, /*!< Failed to renew credentials */ - KHUI_ALERTTYPE_ACQUIREFAIL, /*!< Failed to acquire credentials */ - KHUI_ALERTTYPE_CHPW, /*!< Failed to change password */ -} khui_alert_type; - -/*! \brief Create an empty alert object - - The returned result is a held pointer to a ::khui_alert object. - Use khui_alert_release() to release the object. - */ -KHMEXP khm_int32 KHMAPI -khui_alert_create_empty(khui_alert ** result); - -/*! \brief Create a simple alert object - - The returned result is a held pointer to a ::khui_alert object. - Use khui_alert_release() to release the object. - - \param[in] title The title of the alert. (Required, Localized) - Limited by ::KHUI_MAXCCH_TITLE. - - \param[in] message The message. (Required. Localized). Limited - by ::KHUI_MAXCCH_MESSAGE. - - \param[in] severity One of ::tag_kherr_severity - - \param[out] result Receives a held pointer to a ::khui_alert - object upon successful completion. - */ -KHMEXP khm_int32 KHMAPI -khui_alert_create_simple(const wchar_t * title, - const wchar_t * message, - khm_int32 severity, - khui_alert ** result); - -/*! \brief Set the title of an alert object - - The title is limited by ::KHUI_MAXCCH_TITLE. - */ -KHMEXP khm_int32 KHMAPI -khui_alert_set_title(khui_alert * alert, - const wchar_t * title); - -/*! \brief Set the message of an alert object - - The message is limited by ::KHUI_MAXCCH_MESSAGE. - */ -KHMEXP khm_int32 KHMAPI -khui_alert_set_message(khui_alert * alert, - const wchar_t * message); - -/*! \brief Set the suggestion of an alert object - - The suggestion is limited by ::KHUI_MAXCCH_SUGGESTION - */ -KHMEXP khm_int32 KHMAPI -khui_alert_set_suggestion(khui_alert * alert, - const wchar_t * suggestion); - -/*! \brief Set the severity of the alert object - - The severity value is one of ::tag_kherr_severity - */ -KHMEXP khm_int32 KHMAPI -khui_alert_set_severity(khui_alert * alert, - khm_int32 severity); - -/*! \brief Sets the flags of the alert - - The flags are as defined in ::khui_alert_flags. The bits that are - on in \a mask will be set to the corresponding values in \a flags. - Only the bits specified in ::KHUI_ALERT_FLAGMASK_RDWR can be - specified in \a mask. - */ -KHMEXP khm_int32 KHMAPI -khui_alert_set_flags(khui_alert * alert, khm_int32 mask, khm_int32 flags); - -/*! \brief Clear all the commands from an alert object - - \see khui_alert_add_command() - */ -KHMEXP khm_int32 KHMAPI -khui_alert_clear_commands(khui_alert * alert); - -/*! \brief Add a command to an alert object - - The command ID should be a valid registered action. - */ -KHMEXP khm_int32 KHMAPI -khui_alert_add_command(khui_alert * alert, - khm_int32 command_id); - -/*! \brief Set the type of alert - */ -KHMEXP khm_int32 KHMAPI -khui_alert_set_type(khui_alert * alert, - khui_alert_type type); - -/*! \brief Set the action context for the alert */ -KHMEXP khm_int32 KHMAPI -khui_alert_set_ctx(khui_alert * alert, - khui_scope scope, - khm_handle identity, - khm_int32 cred_type, - khm_handle cred); - -/*! \brief Get the response code from an alert - - Once an alert has been displayed to the user, the user may choose - a command from the list of commands provided in the alert (see - khui_alert_add_command() ). This function can retrieve the - selected command from the alert. - - \return The selected command or \a 0 if no commands were selected. - */ -KHMEXP khm_int32 KHMAPI -khui_alert_get_response(khui_alert * alert); - - -/*! \brief Display an alert - - The alert must have a valid \a severity, \a title and a \a message - to be displayed. Otherwise the function immediately returns with - a failure code. - - The method used to display the alert is as follows: - - - A balloon alert will be shown if one of the following is true: - - The NetIDMgr application is minimized or in the background. - - ::KHUI_ALERT_FLAG_REQUEST_BALLOON is specified in \a flags. - - Otherwise an alert window will be shown. - - If the message, title of the alert is too long to fit in a balloon - prompt, there's a suggestion or if there are custom commands then - a placeholder balloon prompt will be shown which when clicked on, - shows the actual alert in an alert window. - - An exception is when ::KHUI_ALERT_FLAG_DEFACTION is specified in - flags. In this case instead of a placeholder balloon prompt, one - will be shown with the actual title and message (truncated if - necessary). Clicking on the balloon will cause the first command - in the command list to be performed. - - The placeholder balloon prompt will have a title derived from the - first 63 characters of the \a title field in the alert and a - message notifying the user that they should click the balloon - prompt for more information. - - To this end, it is beneficial to limit the length of the title to - 63 characters (64 counting the terminating NULL). This limit is - enforced on Windows. Also, try to make the title descriptive. - - User interaction with the alert will be as follows: - - - If the alert contains no commands, then the alert will be - displayed to the user as described above. A 'close' button will - be added to the alert if the alert is being displayed in a - window. - - - If the alert contains commands, has the - ::KHUI_ALERT_FLAG_DEFACTION flag set and is displayed in a - balloon and the user clicks on it, the first command in the - command list will be executed. - - - If the alert contains commands and does not have the - ::KHUI_ALERT_FLAG_DEFACTION and has the - ::KHUI_ALERT_FLAG_DISPATCH_CMD flag set, then when the user - selects one of the command buttons, the corresponding command - will immediately be dispatched. (see - ::KHUI_ALERT_FLAG_DISPATCH_CMD). - - - If the alert contains command and have neither - ::KHUI_ALERT_FLAG_DEFACTION nor ::KHUI_ALERT_FLAG_DISPATCH_CMD, - then when the user selects one of the command buttons, the - selected command will be stored along with the alert. It can be - retrieved via a call to khui_alert_get_response(). - - */ -KHMEXP khm_int32 KHMAPI -khui_alert_show(khui_alert * alert); - -/*! \brief Display a modal alert - - Similar to khui_alert_show(), but shows a modal alert dialog. The - function does not return until the user has closed the alert. - - This function always opens an alert window (never shows a - balloon). - - */ -KHMEXP khm_int32 KHMAPI -khui_alert_show_modal(khui_alert * alert); - -/*! \brief Queue an alert - - Instead of displaying the alert immediately, the alert is queued - and the status bar updated to notify the user that there is a - pending alert. Once the user activates the pending alert, it will - be displayed as if khui_alert_show() was called. - */ -KHMEXP khm_int32 KHMAPI -khui_alert_queue(khui_alert * alert); - -/*! \brief Display a simple alert - - \see khui_alert_show() - */ -KHMEXP khm_int32 KHMAPI -khui_alert_show_simple(const wchar_t * title, - const wchar_t * message, - khm_int32 severity); - -/*! \brief Obtain a hold on the alert - - An alert structure is only considered valid for the duration that - there is a hold on it. - - Use khui_alert_release() to release the hold. - */ -KHMEXP khm_int32 KHMAPI -khui_alert_hold(khui_alert * alert); - -/*! \brief Release the hold on the alert - - Holds obtained on an alert using any of the functions that either - return a held pointer to an alert or implicitly obtains a hold on - it need to be undone through a call to khui_alert_release(). - */ -KHMEXP khm_int32 KHMAPI -khui_alert_release(khui_alert * alert); - -/*! \brief Lock an alert - - Locking an alert disallows any other thread from accessing the - alert at the same time. NetIDMgr keeps a global list of all alert - objects and the user interface may access any of them at various - points in time. Locking the alert allows a thread to modify an - alert without causing another thread to be exposed to an - inconsistent state. - - Once a thread obtains a lock on the alert, it must call - khui_alert_unlock() to unlock it. Otherwise no other thread will - be able to access the alert. - - \note Currently the alert lock is global. Locking one alert - disallows access to all other alerts as well. - - \note Calling khui_alert_lock() is only necessary if you are - accessing the ::khui_alert structure directly. Calling any of - the khui_alert_* functions to modify the alert does not - require obtaining a lock, as they perform synchronization - internally. -*/ -KHMEXP void KHMAPI -khui_alert_lock(khui_alert * alert); - -/*! \brief Unlock an alert - - \see khui_alert_lock() -*/ -KHMEXP void KHMAPI -khui_alert_unlock(khui_alert * alert); - -/*!@}*/ -/*!@}*/ - -#endif diff --git a/src/windows/identity/uilib/khconfigui.h b/src/windows/identity/uilib/khconfigui.h deleted file mode 100644 index 16a83c024..000000000 --- a/src/windows/identity/uilib/khconfigui.h +++ /dev/null @@ -1,627 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KHCONFIGUI_H -#define __KHIMAIRA_KHCONFIGUI_H - -/*! \addtogroup khui -@{ */ - -/*! \defgroup khui_cfg Configuration Panels - - Configuration panels are the primary means from which the user is - presented with an interface to change NetIDMgr and plugin - configuration. - -@{ */ - -/*! \brief Configuration window notification message - - This is the message that will be used to notify dialog panels. - - The format of the message is : - - uMsg : KHUI_WM_CFG_NOTIFY - - HIWORD(wParam) : one of ::khui_wm_cfg_notifications - - \note This is the same as ::KHUI_WM_NC_NOTIFY - */ -#define KHUI_WM_CFG_NOTIFY (WM_APP + 0x101) - -/*! \brief Configuration notifications - - These are sent thorugh a ::KHUI_WM_CFG_NOTIFY message. - - The format of the message is : - - uMsg : KHUI_WM_CFG_NOTIFY - - HIWORD(wParam) : one of ::khui_wm_cfg_notifications - */ -enum khui_wm_cfg_notifications { - WMCFG_SHOW_NODE = 1, - /*!< Sent to the configuration dialog to request that the panel - for the specified node be shown. The \a lParam message - parameter will contain a held ::khui_config_node handle. The - sender of the mssage is responsible for releasing the handle.*/ - - WMCFG_UPDATE_STATE = 2, - /*!< Sent to the configuration dialog to indicate that the state - flags for the specified configuration node have changed. - - - LOWORD(wParam) : new flags - - lParam : ::khui_config_node for the node*/ - - WMCFG_APPLY = 3, - /*!< Sent to all the configuration panels when the user clicks the - 'Apply' button or the 'Ok' button. The panels are responsible - for applying the configuration changes and updating their flags - using khui_cfg_set_flags(). */ - - WMCFG_SYNC_NODE_LIST = 4, - /*!< Sent from the UI library to the configuration window to - notify the window that the node list has changed. This message - is sent synchronously before the node is removed. */ -}; - -/*! \brief Registration information for a configuration node - - \see khui_cfg_register_node() -*/ -typedef struct tag_khui_config_node_reg { - const wchar_t * name; /*!< Internal identifier - (not-localized, required). The name - is required to be unique among - sibling nodes. However it is not - required to be unique globally. The - size of the name is constrained by - ::KHUI_MAXCCH_NAME*/ - - const wchar_t * short_desc; /*!< Short description (Localized, - required). This is the name which - identifies the node within a - collection of siblings. The size of - the string is constrained by - ::KHUI_MAXCCH_SHORT_DESC*/ - - const wchar_t * long_desc; /*!< Global name of the node. - (Localized, required). This - uniquely identifies the node in the - collection of all configuration - nodes. The size of the string is - constrained by - ::KHUI_MAXCCH_LONG_DESC.*/ - - HMODULE h_module; /*!< Module which contains the dialog - resource specified in \a - dlg_template */ - - LPWSTR dlg_template; /*!< Dialog template for the - configuration window */ - - DLGPROC dlg_proc; /*!< Dialog procedure */ - - khm_int32 flags; /*!< Flags. Can be a combination of - ::KHUI_CNFLAG_SORT_CHILDREN and - ::KHUI_CNFLAG_SUBPANEL*/ - -} khui_config_node_reg; - -/*! \brief Sort the child nodes by short description */ -#define KHUI_CNFLAG_SORT_CHILDREN 0x0001 - -/*! \brief Is a subpanel */ -#define KHUI_CNFLAG_SUBPANEL 0x0002 - -/*! \brief Node represents a panel that is replicated for all child nodes */ -#define KHUI_CNFLAG_PLURAL 0x0004 - -/*! \brief System node - - \note For internal use by the NetIDMgr application. Do not use. -*/ -#define KHUI_CNFLAG_SYSTEM 0x0010 - -/*! \brief Settings have been modified - - Settings for this configuration panel have been modified. This - flag should be cleared once the settings have been successfully - applied. - */ -#define KHUI_CNFLAG_MODIFIED 0x0100 - -/*! \brief Settings have been applied - - Set once any modified settings were successfully applied. - */ -#define KHUI_CNFLAG_APPLIED 0x0200 - -#define KHUI_CNFLAGMASK_STATIC 0x00ff -#define KHUI_CNFLAGMASK_DYNAMIC 0x0f00 - -/*! \brief Maximum length of the name in characters - - The length includes the terminating NULL - */ -#define KHUI_MAXCCH_NAME 256 - -/*! \brief Maximum length of the name in bytes - - The length includes the terminating NULL - */ -#define KHUI_MAXCB_NAME (KHUI_MAXCCH_NAME * sizeof(wchar_t)) - -/*! \brief Maximum length of the long description in characters - - The length includes the terminating NULL - */ -#define KHUI_MAXCCH_LONG_DESC 1024 - -/*! \brief Maximum length of the long description in bytes - - The length includes the terminating NULL - */ -#define KHUI_MAXCB_LONG_DESC (KHUI_MAXCCH_LONG_DESC * sizeof(wchar_t)) - -/*! \brief Maximum length of the short description in chracters - - The length includes the terminating NULL - */ -#define KHUI_MAXCCH_SHORT_DESC 256 - -/*! \brief Maximum length of the short description in bytes - - The length includes the terminating NULL - */ -#define KHUI_MAXCB_SHORT_DESC (KHUI_MAXCCH_SHORT_DESC * sizeof(wchar_t)) - -/*! \brief Width of a configuration dialog in dialog units - - ::CFGDLG_WIDTH and ::CFGDLG_HEIGHT specify the dimensions of a - configuration dialog width and height in dialog units. The dialog - will be created as a child of the configuration dialog and placed - within it. - */ -#define CFGDLG_WIDTH 255 - -/*! \brief Height of a configuration dialog in dialog units - - \see ::CFGDLG_WIDTH -*/ -#define CFGDLG_HEIGHT 182 - -/*! \brief Width of a configuration tab dialog in dialog units - - ::CFGDLG_TAB_WIDTH and ::CFGDLG_TAB_HEIGHT specify the dimensions - (in dialog units) of a dialog that will be placed within a tab - control for dialogs where multiple display panels need to be - shown. - */ -#define CFGDLG_TAB_WIDTH 235 - -/*! \brief Height of configuration tab dialog in dialog units - - \see ::CFGDLG_TAB_WIDTH - */ -#define CFGDLG_TAB_HEIGHT 151 - -/*! \brief A handle to a configuration node - - \see khui_cfg_open_node(), khui_cfg_close_node() -*/ -typedef khm_handle khui_config_node; - -/*! \brief Initialization data passed in to a subpanel - - When creating a subpanel, a pointer to the following strucutred - will be passed in as the creation parameter for the dialog. -*/ -typedef struct tag_khui_config_init_data { - khui_config_node ctx_node; /*!< The node under which the current - dialog subpanel is being created. */ - - khui_config_node this_node; /*!< The node which provided the - registration information for the - creation of the subpanel. */ - - khui_config_node ref_node; /*!< The parent node of the subpanel - node. In nodes which have the - ::KHUI_CNFLAG_PLURAL, this would be - different from the \a node. This is - the node under which the subpanel - was registered. */ -} khui_config_init_data; - -/*! \brief Register a configuration node - - The caller fills the registration information in the - ::khui_config_node_reg structre. If the call succeeds, the - function will return KHM_ERROR_SUCCESS. - - \param[in] parent Parent of the node to be registered. Set to - NULL if the parent is the root node. - - \param[in] reg Registration information - - \param[out] new_id Receives the new unique identifier of the - configuration node. Pass in NULL if the new identifier is not - required. - - \retval KHM_ERROR_SUCCESS Success - \retval KHM_ERROR_INVALID_PARAM One or more parameters, or fields - of reg were invalid - \retval KHM_ERROR_DUPLICATE A node with the same name exists as a - child of the specified parent node. - - \note The name (not the short or long description) of the node can - not be the same as the name of a custom action. See - khui_action_create(). - */ -KHMEXP khm_int32 KHMAPI -khui_cfg_register(khui_config_node parent, - const khui_config_node_reg * reg); - -/*!\brief Open a configuration node by name - - If successful, the \a result parameter will receive a handle to - the configuration node. Use khui_cfg_release() to release - the handle. - - \param[in] parent Parent node. Set to NULL to specify root node. - */ -KHMEXP khm_int32 KHMAPI -khui_cfg_open(khui_config_node parent, - const wchar_t * name, - khui_config_node * result); - -/*! \brief Remove a configuration node - - Marks a configuration node as deleted. Once all the handles, - including the handle specified in \a node have been released, it - will be deleted. - */ -KHMEXP khm_int32 KHMAPI -khui_cfg_remove(khui_config_node node); - -/*! \brief Hold a handle to a configuration node - - Obtains an additional hold on the handle specified by \a node. - The hold must be released with a call to \a - khui_cfg_release() - */ -KHMEXP khm_int32 KHMAPI -khui_cfg_hold(khui_config_node node); - -/*! \brief Release a handle to a configuration node - - \see khui_cfg_hold() - */ -KHMEXP khm_int32 KHMAPI -khui_cfg_release(khui_config_node node); - -/*! \brief Get the parent of a node - - Returns a held handle to the parent of the node, or NULL if the - current node is a top level node. The returned handle must be - released with khui_cfg_release(). - - \retval KHM_ERROR_SUCCESS The handle to the parent node is in \a result - \retval KHM_ERROR_NOT_FOUND The node is a top level node - */ -KHMEXP khm_int32 KHMAPI -khui_cfg_get_parent(khui_config_node vnode, - khui_config_node * result); - -/*! \brief Get a handle to the first child node - - If the call is successful, \a result will receieve a handle to the - first child node of the specified node. The returned handle must - be released with a call to khui_cfg_release() - - If \a parent does not have any child nodes, the function will - return KHM_ERROR_NOT_FOUND and set \a result to NULL. - - \param[in] parent Parent node. Set to NULL to specify root node. - \param[out] result Receives a held handle to the first child node. - - \see khui_cfg_get_next() - */ -KHMEXP khm_int32 KHMAPI -khui_cfg_get_first_child(khui_config_node parent, - khui_config_node * result); - -/*! \brief Get a handle to the first subpanel - - If the call is successful, \a result will receieve a handle to the - first subpanel node of the specified node. The returned handle - must be released with a call to khui_cfg_release() - - If \a parent does not have any subpanels, the function will return - KHM_ERROR_NOT_FOUND and set \a result to NULL. - - A subpanel node is a node which has the ::KHUI_CNFLAG_SUBPANEL - flag set. - - \param[in] parent Parent node. Set to NULL to specify root node. - \param[out] result Receives a held handle to the first subpanel node. - - \see khui_cfg_get_next() - */ -KHMEXP khm_int32 KHMAPI -khui_cfg_get_first_subpanel(khui_config_node vparent, - khui_config_node * result); - -/*! \brief Get a handle to the next sibling node - - If the call is successful, \a result will receive a held handle to - the next sibling node. The returned handle must be released with - a call to khui_cfg_release(). - - If there are no more sibling nodes, then the function return - KHM_ERROR_NOT_FOUND and set \a result to NULL. - - This function can be used to traverse a list of child nodes as - well as a list of subpanel nodes. - - */ -KHMEXP khm_int32 KHMAPI -khui_cfg_get_next(khui_config_node node, - khui_config_node * result); - -/*! \brief Get a handle to the next sibling node - - Similar to khui_cfg_get_next(), but implicitly releases the handle - that was supplied. Equivalent to doing : - - \code - khui_cfg_get_next(node, &next); - khui_cfg_release(node); - node = next; - \endcode - - \param[in,out] node On entry, specifies the node whose sibling - needs to be fetched. On exit, will have either NULL or a held - handle to the sibling node. The handle which was supplied to - the function is released. - - \retval KHM_ERROR_SUCCESS The next node is now in \a node - \retval KHM_ERROR_INVALID_PARAM \a node was not a valid handle - \retval KHM_ERROR_NOT_FOUND There are no more siblings. \a node - is set to NULL. - - \note Even if there are no more siblings, the handle specified in - \a node on entry is released. - */ -KHMEXP khm_int32 KHMAPI -khui_cfg_get_next_release(khui_config_node * node); - -/*! \brief Get the name of a configuration node - - Gets the name (not the short description or the long description) - of the given configuration node. -*/ -KHMEXP khm_int32 KHMAPI -khui_cfg_get_name(khui_config_node node, - wchar_t * buf, - khm_size * cb_buf); - -/*! \brief Get registration information for a node - - The registration information that is returned is a shallow copy of - the data kept by NetIDMgr. In particular, the strings that will - be returned actually point to internal buffers and should not be - modified. - - No further action is necessary to release the information. - However, the returned data ceases to be valid when \a node is - released with a call to khui_cfg_release(). - - \param[in] node Node for which information is requested. Can be NULL if requesting information about the root node. - \param[out] reg Pointer to a ::khui_config_node_reg structure. - */ -KHMEXP khm_int32 KHMAPI -khui_cfg_get_reg(khui_config_node node, - khui_config_node_reg * reg); - -/*! \brief Internal use - - This function is used internally by NetIDMgr. Do not use. -*/ -KHMEXP HWND KHMAPI -khui_cfg_get_hwnd_inst(khui_config_node node, - khui_config_node noderef); - -/*! \brief Internal use - - This function is used internally by NetIDMgr. Do not use. -*/ -KHMEXP LPARAM KHMAPI -khui_cfg_get_param_inst(khui_config_node node, - khui_config_node noderef); - -/*! \brief Internal use - - This function is used internally by NetIDMgr. Do not use. -*/ -KHMEXP void KHMAPI -khui_cfg_set_hwnd_inst(khui_config_node node, - khui_config_node noderef, - HWND hwnd); - -/*! \brief Internal use - - This function is used internally by NetIDMgr. Do not use. -*/ -KHMEXP void KHMAPI -khui_cfg_set_param_inst(khui_config_node node, - khui_config_node noderef, - LPARAM param); - -/*! \brief Internal use - - This function is used internally by NetIDMgr. Do not use. -*/ -KHMEXP HWND KHMAPI -khui_cfg_get_hwnd(khui_config_node node); - -/*! \brief Internal use - - This function is used internally by NetIDMgr. Do not use. -*/ -KHMEXP LPARAM KHMAPI -khui_cfg_get_param(khui_config_node node); - -/*! \brief Internal use - - This function is used internally by NetIDMgr. Do not use. -*/ -KHMEXP void KHMAPI -khui_cfg_set_hwnd(khui_config_node node, HWND hwnd); - -/*! \brief Internal use - - This function is used internally by NetIDMgr. Do not use. -*/ -KHMEXP void KHMAPI -khui_cfg_set_param(khui_config_node node, LPARAM param); - -/*! \brief Internal use - - This function is used internally by NetIDMgr. Do not use. -*/ -KHMEXP void KHMAPI -khui_cfg_clear_params(void); - -/*! \brief Internal use - - This function is used internally by NetIDMgr. Do not use. -*/ -KHMEXP void KHMAPI -khui_cfg_set_configui_handle(HWND hwnd); - -/*! \brief Update the state for the specified node - - \param[in] node ::khui_config_node handle for the configuration node. - - \param[in] flags New flags. Combination of ::KHUI_CNFLAG_APPLIED and ::KHUI_CNFLAG_MODIFIED - - \param[in] mask Valid bits in \a flags - - \note Should only be called from within the dialog procedure for - the configuration node. - */ -KHMEXP void KHMAPI -khui_cfg_set_flags(khui_config_node vnode, khm_int32 flags, khm_int32 mask); - -/*! \brief Retrieve the state flags for the configuration node - - \see khui_cfg_set_flags() - */ -KHMEXP khm_int32 KHMAPI -khui_cfg_get_flags(khui_config_node vnode); - -/*! \brief Utility function: Initialize dialog box window data - - This function initializes the dialog box window data using the - ::khui_config_init_data that was passed into the WM_INITDIALOG - message. - - A new block of memory will be alocated to store the dialog data as - well as any extra space specified. A pointer to this memory block - will be stored in the \a DWLP_USER slot in the dialog box. - - The allocated block of memory must be freed by a call to - khui_cfg_free_dialog_data(). While handling other messages, the - dialog data can be retrieved using khui_cfg_get_dialog_data(). - - \param[in] hwnd_dlg Handle to the dialog box - - \param[in] data Pointer to the ::khui_config_init_data that was - passed in to WM_INITDIALOG (this is the value of \a lParam) - - \param[in] cb_extra Number of extra bytes to allocate, along with - the space required to store the contents of - ::khui_config_init_data. The extra space will be initialized - to zero. - - \param[out] new_data Receives a pointer to the copy of the - initialization data that was allocated. Optional. Pass in - NULL if this value is not required. - - \param[out] extra Receives a pointer to the block of extra memory - allocated as specified in \a cb_extra. If \a cb_extra is 0, - then this receives a NULL. - - \see khui_cfg_get_dialog_data(), khui_cfg_free_dialog_data() - */ -KHMEXP khm_int32 KHMAPI -khui_cfg_init_dialog_data(HWND hwnd_dlg, - const khui_config_init_data * data, - khm_size cb_extra, - khui_config_init_data ** new_data, - void ** extra); - -/*! \brief Utility function: Retrieves dialog data - - Retrieves the dialog data previoulsy stored using - khui_cfg_init_dialog_data(). - - \param[in] hwnd_dlg Handle to the dialog box - - \param[out] data Receives a pointer to the ::khui_config_init_data - block. - - \param[out] extra Receives a pointer to the extra memory - allocated. Optional (set to NULL if this value is not needed). -*/ -KHMEXP khm_int32 KHMAPI -khui_cfg_get_dialog_data(HWND hwnd_dlg, - khui_config_init_data ** data, - void ** extra); - -/*! \brief Utility function: Free dialog data - - Deallocates the memory allcated in a previous call to - khui_cfg_init_dialog_data() - */ -KHMEXP khm_int32 KHMAPI -khui_cfg_free_dialog_data(HWND hwnd_dlg); - -/*! \brief Sets the instance flags for a subpanel - - Since there can be more than one subpanel in a configuration - panel, they shouldn't modify the flags of the configuration node - directly. Instead, they should call this function to set the - instance flags. - - The instance flags will be merged with the flags for the - configuration node automatically. - */ -KHMEXP void KHMAPI -khui_cfg_set_flags_inst(khui_config_init_data * d, - khm_int32 flags, - khm_int32 mask); - -/*!@} */ -/*!@} */ -#endif diff --git a/src/windows/identity/uilib/khhtlink.h b/src/windows/identity/uilib/khhtlink.h deleted file mode 100644 index 5cae47682..000000000 --- a/src/windows/identity/uilib/khhtlink.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KHHTLINK_H -#define __KHIMAIRA_KHHTLINK_H - -/*! \addtogroup khui -@{ */ - -/*! \defgroup khui_hyperlink Hyperlink -@{*/ - -/*! \brief A hyperlink - - When a link in a hypertext window is clicked, this structure is - passed along with the message. - - The link text fields do to point to NULL terminated strings. - Instead, the length fields should be used to extract the string. - */ -typedef struct tag_khui_htwnd_link { - RECT r; /*!< The enclosing rectangle of the - hyperlink. Units are screen units - and the coordinates are relative to - the top left hand corner of the - hypertext area. */ - wchar_t * id; /*!< The value of the \a id attribute - of the link or \a NULL if there was - no \a id attribute. This does not - point to a \a NULL terminated - string. The length of the string is - given by the \a id_len field. */ - int id_len; /*!< The length of the string pointed - to by \a id in characters. - Undefined if \a id is \a NULL. */ - wchar_t * param; /*!< The value of the \a param - attribute of the link or \a NULL if - there was no \a param attribute. - This does not point to a \a NULL - terminated string. The length of - the string is given by the \a - param_len field.*/ - int param_len; /*!< Length of the string pointed to - by \a param in characters. - Undefined if \a param is \a NULL. */ -} khui_htwnd_link; - -#define KHUI_MAXCCH_HTLINK_FIELD 256 -#define KHUI_MAXCB_HTLINK_FIELD (KHUI_MAXCCH_HTLINK_FIELD * sizeof(wchar_t)) - -/*!@}*/ -/*!@}*/ - -#endif diff --git a/src/windows/identity/uilib/khnewcred.h b/src/windows/identity/uilib/khnewcred.h deleted file mode 100644 index 67531c117..000000000 --- a/src/windows/identity/uilib/khnewcred.h +++ /dev/null @@ -1,1132 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KHNEWCRED_H -#define __KHIMAIRA_KHNEWCRED_H - -/******************************************************************** - New credentials windows -*********************************************************************/ - -/*! \addtogroup khui -@{ */ - -/*! \defgroup khui_cred Credentials acquisition - - Declarations associated with credentials acquisition. - -@{ */ - -/*! \brief Window message sent to credentials type panels - - This message is sent to the child windows. - - The format of the message is : - - uMsg : KHUI_WM_NC_NOTIFY - - HIWORD(wParam) : one of ::khui_wm_nc_notifications - - LPARAM : pointer to the ::khui_new_creds structure (except where noted) -*/ -#define KHUI_WM_NC_NOTIFY (WM_APP + 0x101) - -/*! \brief The first control ID that may be used by an identity provider */ -#define KHUI_CW_ID_MIN 8016 - -/*! \brief The maximum number of controls that may be created by an identity provider*/ -#define KHUI_CW_MAX_CTRLS 8 - -/*! \brief The maximum control ID that may be used by an identity provider */ -#define KHUI_CW_ID_MAX (KHUI_CW_ID_MIN + KHUI_CW_MAX_CTRLS - 1) - - -/*! \brief Credentials dialog notifications - - These notifications will be sent to the individual dialog - procedures of the credential type panels or to the new credentials - window as a ::KHUI_WM_NC_NOTIFY message. -*/ -enum khui_wm_nc_notifications { - WMNC_DIALOG_EXPAND = 1, - /*!< The dialog is switching from basic to advanced mode or vice - versa. - - In expanded mode, all credentials type panels are visible as - opposed to the compressed mode where they are not visible. The - message is not sent to credentials type panels. - - Only sent to the new credentials window. - */ - - WMNC_DIALOG_SETUP, - /*!< Sent to the new creds window to notify it that the dialog - should create all the type configuration panels. - - Until this message is issued, none of the credentials type - panels exist. The credentials type panels will receive - WM_INITDIALOG etc as per the normal dialog creation process. - - Only sent to the new credentials window. - */ - - WMNC_DIALOG_ACTIVATE, - /*!< Sent to the new creds window to notify it that the dialog - should do final initialization work and activate. - - Only sent to the new credentials window. - */ - - WMNC_DIALOG_MOVE, - /*!< The new credentials window has moved. - - This message is sent to all the credentials type panels when the - new credentials window is being moved. It will be sent - continuously if the user is dragging the window. Plug-ins - rarely need to know their position on the screen. However, if - there are any other windows that were created by the plug-in, - such as floating controls or tooltips, they may need to be - repositioned in response to this message. - - Sent to all the credentials type panels. - */ - - WMNC_DIALOG_SWITCH_PANEL, - /*!< Sent to the new creds window to cause it to switch to the - panel identified by LOWORD(wParam). - - Does nothing if the specified panel is already the current - panel. If the dialog is in compact mode and making the - specified panel visible requires switching to expanded mode, the - dialog will do so. - - Only sent to the new credentials window. - */ - - WMNC_UPDATE_CREDTEXT, - /*!< Update the credentials text associated with a panel. - - During the new credentials operation, each plug-in is expected - to maintain a textual representation of the credentials that the - plug-in expects to obtain for the selected identity. It can, - alternatively, be used to indicate the state of the credentials - type in respect to the selected identity (for example, whether - the credentials type is disabled for the identity and why). - - This text is not visible when the new credentials window is in - basic mode, but it is visible when the window is in advanced - mode. The following image shows the expanded new credentials - window including the credentials text from a several plug-ins: - - \image html new_creds_expanded.png - - Once this message is received, each plug-in should construct its - credentials text string and store it in the \c credtext member - of its ::khui_new_creds_by_type structure as shown in the sample - code below: - - \code - // Handler for window message WM_NC_NOTIFY with - // HWND hwnd, WPARAM wParam and LPARAM lParam - - // This structure holds the dialog data for the panel. We - // assume it has 'nc' and 'nct' fields that point to the - // khui_new_creds and khui_new_creds_by_type structures - // respectively. - - ... - struct nc_dialog_data * d; - ... - - // Retrieve the data structure from the dialog user data. - d = (struct nc_dialog_data *) GetWindowLongPtr(hwnd, DWLP_USER); - - switch (HIWORD(wParam)) { - case WMNC_UPDATE_CREDTEXT: - { - wchar_t buffer[KHUI_MAXCCH_LONG_DESC]; - size_t cb_size; - - // we are being requested to update the credentials text. We - // already allocated a buffer when we created the nct - // structure. So we can just set the text here. - - // The credentials text should reflect the credentials that - // will be obtained when the new credentials operation - // completes. - - assert(d && d->nc && d->nct); - - if (d->nct->credtext) { - free(d->nct->credtext); - d->nct->credtext = NULL; - } - - // We only display something if there is a selected identity - if (d->nc->n_identities > 0) { - StringCbPrintf(buffer, sizeof(buffer), - L"<p>My Credentials<tab>: %s</p>", - get_credential_name(d)); - StringCbLength(buffer, sizeof(buffer), &cb_size); - cb_size += sizeof(wchar_t); // account for the terminating NULL - - d->nct->credtext = malloc(cb_size); - if (d->nct->credtext) { - StringCbCopy(d->nct->credtext, cb_size, buffer); - } - } - - break; - } - - ... // Handler other notifications - } - \endcode - - The text that is specified as the credentials text is formatted - hypertext. For more information about support for formatting - and hypertext and handling hyperlinks, see \ref khui_htwnd. - - \note When this message is sent to the new credentials window, - the application will send the ::WMNC_UPDATE_CREDTEXT message to - all the credential type panels and update the credential text - window. */ - - WMNC_CREDTEXT_LINK, - /*!< A hyperlink was activated. - - Sent to a panel dialog procedure when a user clicks an embedded - link in the credentials text that belongs to that panel. The \a - lParam parameter of the message is a pointer to a - ::khui_htwnd_link structure describing the link. - - \see \ref khui_htwnd - - \note The \a lParam parameter does not point to a - ::khui_new_creds structure for this message. - */ - - WMNC_IDENTITY_CHANGE, - /*!< The primary identity has changed. - - The ::khui_new_creds structure contains a list of identities to - which the current operation should be applied. In its current - implementation, only the first identity in this list is used. - Therefore, the list will contain at most one identity. It is - possible for the list to be empty (for example, if the user - hasn't selected an identity yet). - - When handling this notification, the plug-in should check the \c - n_identities member of the ::khui_new_creds structure to see - whether there are any identities selected. This value would be - either zero or one. If it is non-zero, then a handle to the - selected identity will be in \c khui_new_creds::identities[0]. - - Plug-ins typically use this notfication to load identity - specific settings when a new identity is selected. - - This notification is sent to all the credentials type panels. - */ - - WMNC_CLEAR_PROMPTS, - /*!< Sent to the new creds window to clear any custom prompts. - - Only sent to the new credentials window. - */ - - WMNC_SET_PROMPTS, - /*!< Sent to the new creds window to set custom prompts. - - Only sent to the new credentials window. */ - - WMNC_DIALOG_PREPROCESS, - /*!< The credentials acquisition process is about to start. - - Sent to all the credentials type panels to notify them that the - credentials acquisition process will start. Once all plug-ins - have handled the notification, the application will start - sending out <::KMSG_CRED, ::KMSG_CRED_PROCESS> messages to the - credentials providers which are participating in the new - credentials operation. - */ - - WMNC_DIALOG_PROCESS, - /*!< This notification is no longer used. */ -#pragma deprecated(WMNC_DIALOG_PROCESS) - - WMNC_DIALOG_PROCESS_COMPLETE, - /*!< Sent to the new creds window to indicate that the all the - threads have completed processing.*/ - - WMNC_TYPE_STATE, - /*!< Sent to the new creds window as notification that a - particular credentials type has changed state from enabled to - disabled or vice versa. The LPARAM member of the message - specifies the credentials type identifier for the changed - type */ - - WMNC_ADD_CONTROL_ROW, - /*!< Add a row of controls to a new cred dialog. This is an - internal message. */ - - WMNC_UPDATE_LAYOUT, - /*!< Update the layout of a dialog or window. This is an internal - message. */ -}; - -/*! \brief Plugins can use WMNC_NOTIFY message codes from here on up - - \see ::KHUI_WM_NC_NOTIFY - */ -#define WMNC_USER 2048 - -/*! \brief Notifications to the identity provider - - These notifications are sent through to the identity provider's UI - callback that was obtained using a ::KMSG_IDENT_GET_UI_CB message. - - The callback routine is called from the context of the UI thread - and is expected to not make any blocking calls. One of the - following commands will be passed in as the \a cmd parameter to - the callback. - */ -enum khui_wm_nc_ident_notify { - WMNC_IDENT_INIT, - /*!< Initialize an identity selector for a new credentials - dialog. The \a lParam parameter contains a handle to the - dialog window which will contain the identity selector - controls. The identity provider may make use of the \a - ident_aux field of the ::khui_new_creds structure to hold any - data pertaining to the credentials acquisition dialog.*/ - - WMNC_IDENT_WMSG, - /*!< Windows message. Presumably sent from one of the controls - that was created by the identity provider. The callback is - expected to return TRUE if it processed the message or FALSE - if it did not. The \a uMsg, \a wParam and \a lParam - parameters are set to the values passed in by Windows. */ - - WMNC_IDENT_EXIT, - /*!< Terminate a credentials acquisition dialog. Sent just before - the dialog is terminated. */ - - WMNC_IDENT_PREPROCESS, - /*!< The identity is about to be fetched from the \a - ::khui_new_creds structure. The callback is expected to ensure - that the primary identity listed in that structure is - consistent with the user selection. */ -}; - -/*! \name Standard credtext link IDs -@{*/ - -/*! \brief Switch the panel - - The \a id attribute of the link specifies the ordinal of the panel - to switch to. -*/ -#define CTLINKID_SWITCH_PANEL L"SwitchPanel" - -/*@}*/ - -/*forward dcl*/ -struct tag_khui_new_creds_by_type; -typedef struct tag_khui_new_creds_by_type khui_new_creds_by_type; -struct tag_khui_new_creds_prompt; -typedef struct tag_khui_new_creds_prompt khui_new_creds_prompt; -struct tag_khui_new_creds; -typedef struct tag_khui_new_creds khui_new_creds; - -typedef LRESULT -(KHMAPI *khui_ident_new_creds_cb)(khui_new_creds * nc, - UINT cmd, - HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam); - -/*! \brief New credentials acquisition blob - - A pointer to an object of this type is passed in along with the - credentials acquisition messages. - - \see \ref cred_acq for more information -*/ -typedef struct tag_khui_new_creds { - khm_int32 magic; /*!< Internal use */ - - khm_int32 subtype; /*!< Subtype of the request that is - being handled through this object. - One of ::KMSG_CRED_NEW_CREDS, - ::KMSG_CRED_RENEW_CREDS or - ::KMSG_CRED_PASSWORD */ - - CRITICAL_SECTION cs; /*!< Internal use */ - - khm_boolean set_default; /*!< After a successfull credentials - acquisition, set the primary - identity as the default. */ - - khm_handle *identities; /*!< The list of identities associated - with this request. The first - identity in this list (\a - identities[0]) is the primary - identity. */ - - khm_size n_identities; /*!< Number of identities in the list - \a identities */ - - khm_size nc_identities; /*!< Internal use */ - - khui_action_context ctx; /*!< An action context specifying the - context in which the credentials - acquisition operation was - launced. */ - - khm_int32 mode; /*!< The mode of the user interface. - One of ::KHUI_NC_MODE_MINI or - ::KHUI_NC_MODE_EXPANDED. */ - - HWND hwnd; /*!< Handle to the new credentials - window. */ - - struct tag_khui_new_creds_by_type **types; - /*!< Internal use */ - khm_handle *type_subs; /*!< Internal use */ - khm_size n_types; /*!< Internal use */ - khm_size nc_types; /*!< Internal use */ - - khm_int32 result; /*!< One of ::KHUI_NC_RESULT_CANCEL or - ::KHUI_NC_RESULT_PROCESS indicating - the result of the dialog with the - user */ - - khm_int32 response; /*!< Response. See individual message - documentation for info on what to do - with this field */ - - wchar_t *password; /*!< Not used. */ - - /* UI stuff */ - - wchar_t *banner; /*!< Internal use */ - wchar_t *pname; /*!< Internal use */ - khm_size n_prompts; /*!< Internal use */ - khm_size nc_prompts; /*!< Internal use */ - struct tag_khui_new_creds_prompt ** prompts; /*!< Internal use */ - - khui_ident_new_creds_cb ident_cb; /*!< Internal use */ - - wchar_t *window_title; /*!< Internal use */ - - LPARAM ident_aux; /*!< Auxilliary field which is - reserved for use by the identity - provider during the course of - conducting this dialog. */ - -} khui_new_creds; - -#define KHUI_NC_MAGIC 0x84270427 - -/*!\name Result values for khui_new_creds_t::result - @{*/ -#define KHUI_NC_RESULT_PROCESS 0 -#define KHUI_NC_RESULT_CANCEL 1 -/*@}*/ - -/*!\name Mode values for khui_new_creds_t::mode - @{*/ -#define KHUI_NC_MODE_MINI 0 -#define KHUI_NC_MODE_EXPANDED 1 -/*@}*/ - -/*!\name Response values for khui_new_creds_t::response - @{*/ -/*!\brief No known response */ -#define KHUI_NC_RESPONSE_NONE 0 - -/*!\brief It is okay to exit the dialog now - - This is the default, which is why it has a value of zero. In - order to prevent the dialog from exiting, set the - KHUI_NC_RESPONSE_NOEXIT response bit. */ -#define KHUI_NC_RESPONSE_EXIT 0 - -/*!\brief It is NOT okay to exit the dialog now - - Used to indicate that further user-interaction is necessary to - process the dialog. Usually this is accompanied by setting - necessary custom prompts and notifications so the user knows why - the dialog is prompting for more information. - */ -#define KHUI_NC_RESPONSE_NOEXIT 0x00000002 - -/*!\brief The dialog was processed successfully - - Since this is the default response, the value is zero. Use one of - KHUI_NC_RESPONSE_FAILED or KHUI_NC_RESPONSE_PENDING to indicate an - error or pending status. - */ -#define KHUI_NC_RESPONSE_SUCCESS 0 - -/*!\brief The processing of the dialog failed - - Self explanatory. More information about the failure should have - been reported using the khlog API, however, this response value - indicates to other credential types that depend on this credential - type that whatever it was that this credential type was supposed - to do didn't happen. -*/ -#define KHUI_NC_RESPONSE_FAILED 0x00000008 - -/*!\brief Further interaction required - - Set along with KHUI_NC_RESPONSE_NOEXIT although it is not - required. Setting this bit will automatically add the - KHUI_NC_RESPONSE_NOEXIT. - - If this bit is set, all dependent plugins will be set on hold - until another round of processing clears the pending bit. - */ -#define KHUI_NC_RESPONSE_PENDING 0x00000010 - -/*! \brief Completed - - This is automatically set if the plugin sets a response which does - not indicate either KHUI_NC_RESPONSE_NOEXIT or - KHUI_NC_RESPONSE_PENDING, which is considered to mean that the - plugin is completed processing. - - This flag cannot be explicitly specified in a response. - */ -#define KHUI_NC_RESPONSE_COMPLETED 0x00000020 - -/*! \brief Processing - - This is an internal flag set while the credentials acquisition - process is executing. - */ -#define KHUI_NC_RESPONSE_PROCESSING 0x00010000 - -#define KHUI_NCMASK_RESPONSE (KHUI_NC_RESPONSE_EXIT|KHUI_NC_RESPONSE_NOEXIT) -#define KHUI_NCMASK_RESULT (KHUI_NC_RESPONSE_SUCCESS|KHUI_NC_RESPONSE_FAILED|KHUI_NC_RESPONSE_PENDING) -/*@}*/ - -/*!\brief Maximum number of dependencies for a credentials type */ -#define KHUI_MAX_TYPE_DEPS 8 - -/*!\brief Maximum number of credential types for a new creds window */ -#define KHUI_MAX_NCTYPES 16 - -/*!\brief Maximum number of characters in a password - - Length includes the termininating NULL -*/ -#define KHUI_MAXCCH_PASSWORD 512 - -/*! \brief Maximum number of bytes in a password - - Includes terminating NULL -*/ -#define KHUI_MAXCB_PASSWORD (KHUI_MAXCCH_PASSWORD * sizeof(wchar_t)) - -/*! \brief Maximum number of characters in a custom banner - - Length includes terminating NULL -*/ -#define KHUI_MAXCCH_BANNER 256 - - -/*! \brief Maximum number of bytes in a custom banner - - Length includes terminating NULL -*/ -#define KHUI_MAXCB_BANNER (KHUI_MAXCCH_BANNER * sizeof(wchar_t)) - -/*! \brief Maximum number of characters in a panel name - - Length includes terminating NULL -*/ -#define KHUI_MAXCCH_PNAME 256 - -/*! \brief Maximum number of bytes in a panel name - - Length includes terminating NULL -*/ -#define KHUI_MAXCB_PNAME (KHUI_MAXCCH_PNAME * sizeof(wchar_t)) - -/*! \brief A descriptor of a panel in the new credentials acquisition tab - - When processing certain credentials messages such as - ::KMSG_CRED_PASSWORD, ::KMSG_CRED_NEW_CREDS, - ::KMSG_CRED_RENEW_CREDS, a pointer to a ::khui_new_creds structure - will be passed in to the message handler. If the handler of the - message needs to add one or more credentials types as participants - of the operation, the handler will need to call khui_cw_add_type() - and specify a ::khui_new_creds_by_type structure. - - Note that the memory address passed in to the call to - khui_cw_add_type() will not be copied. Therefore, the block of - memory should remain as-is for the lifetime of the - ::khui_new_creds structure or until it is removed with a call to - khui_cw_del_type(). - - Some of the credentials messages that require specifying a - ::khui_new_creds_by_type structure require providing a - user-interface. In these cases, the fields marked for providing a - UI may be required to hold valid values. If the message does not - require providing a UI, these fields will be ignored. -*/ -typedef struct tag_khui_new_creds_by_type { - khui_new_creds * nc; /*!< Internal use. Do not set */ - khm_int32 flags; /*!< Internal use. Do not set */ - - khm_int32 type; /*!< The identifier of the credentials - type. This is a credentials type - identifier allocated with a call to - kcdb_credtype_register(). */ - - khm_int32 type_deps[KHUI_MAX_TYPE_DEPS]; - /*!< credentials types that this - credential type depends on. Each - element defines a credentials type - identifier that this type depends - on for this operation. The number - of valid values in this array - should be specified in the \a - n_type_deps field. */ - - khm_size n_type_deps; /*!< Number of dependencies listed - above. Should be between 0 and - ::KHUI_MAX_TYPE_DEPS. Specify 0 if - there are no dependencies. */ - - khm_size ordinal; /*!< The requested ordinal. The UI - would attempt to place this panel at - the reqested order in the list of - panels. Set to -1 if the order does - not matter. Once the dialog is - activated this field will be updated - to reflect the actual ordinal of the - panel. */ - - wchar_t *name; /*!< Name of the panel (localized, - optional). If NULL, the localized - name of the credentials type is - used. Only used if providing a - user-interface. */ - - HICON icon; /*!< Icon for the panel (optional). - Only used if providing a - user-interface. */ - - wchar_t *tooltip; /*!< Tooltip for the panel (localized, - optional). If NULL, no tooltip will - be assigned for the panel. Only - used if providing a - user-interface. */ - - HMODULE h_module; /*!< Handle to the module containing - the dialog resource. Only used if - providing a user-interface. */ - - LPWSTR dlg_template; /*!< The dialog resource. Only used - if providing a user-interface. */ - DLGPROC dlg_proc; /*!< The dialog procedure. Only used - if providing a user-interface. */ - - HWND hwnd_panel; /*!< The dialog window. Once the - dialog panel is created, a handle to - the panel will be assigned here. - Note that the handle is assigned - after a successful call to - CreateDialogParam and hence would - not be available when handling the - WM_INITDIALOG message from the - dialog procedure. Only used of - providing a user-interface. */ - - HWND hwnd_tc; /*!< Internal use. Do not set */ - - wchar_t *credtext; /*!< A brief description of the - current state of this cred - type. (localized, optional). Only - used if providing a - user-interface. If this field is - non-NULL, then it should point to a - NULL terminated string that does not - exceed ::KHUI_MAXCCH_LONG_DESC - characters in length including the - terminating NULL. - - \see \ref khui_htwnd for information - on how to format the string for this - field. - */ - - LPARAM aux; /*!< auxilliary field. For use by the - plug-in. */ -} khui_new_creds_by_type; - -/*!\name Flags for khui_new_creds_by_type - - Note that KHUI_NC_RESPONSE_SUCCESS, KHUI_NC_RESPONSE_FAILED, - KHUI_NC_RESPONSE_PENDING are also stored in the flags. - -@{*/ -#define KHUI_NCT_FLAG_PROCESSED 1024 -#define KHUI_NCT_FLAG_DISABLED 2048 -/*@}*/ - -/*! \brief Width of a new creds dialog panel in dialog units*/ -#define NCDLG_WIDTH 300 -/*! \brief Height of a new creds dialog panel in dialog units*/ -#define NCDLG_HEIGHT 166 - -/*! \brief A custom prompt */ -typedef struct tag_khui_new_creds_prompt { - khm_size index; /*!< Set to the zero based index - of this prompt. */ - - khm_int32 type; /*!< one of KHUI_NCPROMPT_TYPE_* */ - wchar_t * prompt; /*!< prompt string. Cannot exceed - KHUI_MAXCCH_PROMPT */ - wchar_t * def; /*!< default value. Cannot exceed - KHUI_MAXCCH_PROMPT_VALUE */ - wchar_t * value; /*!< On completion, this is set to the - value that the user entered. Will - not exceed - KHUI_MAXCCH_PROMPT_VALUE */ - - khm_int32 flags; /*!< Combination of - KHUI_NCPROMPT_FLAG_* */ - - HWND hwnd_static; /* internal use */ - HWND hwnd_edit; /* internal use */ -} khui_new_creds_prompt; - -/*! \brief The prompt input is hidden - - The input is hidden for prompts which accept passwords. The - control which represents the input will display an asterisk or a - small circle corresponding to each character typed in, but will - not show the actual character. - */ -#define KHUI_NCPROMPT_FLAG_HIDDEN 1 - -/*! \brief Internal use */ -#define KHUI_NCPROMPT_FLAG_STOCK 2 - -/*! \brief Maximum number of characters in a prompt - - Refers to the prompt text that accompanies an input control. THe - length includes the terminating NULL. - */ -#define KHUI_MAXCCH_PROMPT 256 - -/*! \brief Maximum number of bytes in a prompt - - Refers to the prompt text that accompanies an input control. THe - length includes the terminating NULL. - */ -#define KHUI_MAXCB_PROMPT (KHUI_MAXCCH_PROMPT * sizeof(wchar_t)) - -/*! \brief Maximum number of characters that can be entered in an input control - - Refers to the input control of a prompt. The length includes the - terminating NULL. - */ -#define KHUI_MAXCCH_PROMPT_VALUE 256 - -/*! \brief Maximum number of bytes that can be entered in an input control - - Refers to the input control of a prompt. The length includes the - terminating NULL. - */ -#define KHUI_MAXCB_PROMPT_VALUE (KHUI_MAXCCH_PROMPT_VALUE * sizeof(wchar_t)) - -/* from krb5.h. Redefining here because we don't want to depend on - krb5.h for all credential types */ - -/*! \brief A password control */ -#define KHUI_NCPROMPT_TYPE_PASSWORD 1 - -/*! \brief New password control - - Used when changing the password - */ -#define KHUI_NCPROMPT_TYPE_NEW_PASSWORD 2 - -/*! \brief New password again control - - Used when changing the password - */ -#define KHUI_NCPROMPT_TYPE_NEW_PASSWORD_AGAIN 3 - -/*! \brief Preauthentication (reserved) */ -#define KHUI_NCPROMPT_TYPE_PREAUTH 4 - -/*! \brief Control sizes */ -typedef enum tag_khui_control_size { - KHUI_CTRLSIZE_SMALL, - /*!< A small control fits in about 1/5 the width of the new - credentials panel */ - KHUI_CTRLSIZE_HALF, - /*!< Half size controls fit in 1/2 the width of the new - credentials panel */ - KHUI_CTRLSIZE_FULL, - /*!< Takes up the whole width of the crednetials panel */ -} khui_control_size; - -/*! \brief Internal use */ -typedef struct tag_khui_control_row { - HWND label; - HWND input; - khui_control_size size; -} khui_control_row; - -/*! \brief Create a ::khui_new_creds object - - Creates and initializes a ::khui_new_creds object. The created - object must be destroyed using the khui_cw_destroy_cred_blob() - function. - - \note Plugins should not call this function directly. The - necessary ::khui_new_creds objects will be created by - NetIDMgr. - - \see khui_cw_destroy_cred_blob() - */ -KHMEXP khm_int32 KHMAPI -khui_cw_create_cred_blob(khui_new_creds ** c); - -/*! \brief Destroy a ::khui_new_creds object - - Destroys a ::khui_new_creds object that was fomerly created using - a call to khui_cw_create_cred_blob(). - - \note Plugins should not call this function directly. The - necessary ::khui_new_creds objects will be created by - NetIDMgr. - - \see khui_cw_create_cred_blob() -*/ -KHMEXP khm_int32 KHMAPI -khui_cw_destroy_cred_blob(khui_new_creds *c); - -/*! \brief Lock the new_creds object - - When a plugin is accessing the fields of a ::khui_new_creds - object, it must first obtain a lock on the object so that other - threads will not modify the fields at the same time. Locking the - object ensures that the fields of the object will be consistent. - - Use khui_cw_unlock_nc() to undo the lock obtained through a call - to khui_cw_lock_nc(). - - It is not necessary to lock a new credentials object when - modifying it using the NetIDMgr API. - */ -KHMEXP khm_int32 KHMAPI -khui_cw_lock_nc(khui_new_creds * c); - -/*! \brief Unlock a new_creds object - - \see khui_cw_lock_nc() - */ -KHMEXP khm_int32 KHMAPI -khui_cw_unlock_nc(khui_new_creds * c); - -/*! \brief Add a new panel to a new credentials acquisition window - - See the description of ::khui_new_cred_panel for information on - how to populate it to describe a credentials type panel. - - Note that the structure pointed to by \a t is added by reference. - The memory pointed to by \a t is not copied. Hence, the block of - memory and any other blocks pointed to by the - ::khui_new_creds_by_type structure located there should remain - intact for the lifetime of the ::khui_new_creds structure pointed - to by \a c or until the credentials type panel is removed from the - ::khui_new_creds structure with a call to khui_cw_del_type(). - - Generally, a plug-in that calls this function should allocate a - block of memory to contain the ::khui_new_creds_by_type structure, - fill it in and then pass in the address in a call to - khui_cw_add_type() while handling a ::KMSG_CRED_PASSWORD, - ::KMSG_CRED_NEW_CREDS or ::KMSG_CRED_RENEW_CREDS message. Then - the plug-in should remove the reference with a call to - khui_cw_del_type() while processing ::KMSG_CRED_END. - - \see khui_cw_del_type() - \see \ref cred_acq_panel_spec - \see ::khui_new_cred_panel - \see ::khui_new_creds -*/ -KHMEXP khm_int32 KHMAPI -khui_cw_add_type(khui_new_creds * c, - khui_new_creds_by_type * t); - -/*! \brief Remove a panel from a new credentials acquisition window - - \see khui_cw_add_type() - */ -KHMEXP khm_int32 KHMAPI -khui_cw_del_type(khui_new_creds * c, - khm_int32 type); - -/*! \brief Find the panel belonging to a particular credentials type - - This panel would have been added to the new credentials window - using khui_cw_add_type(). - - \see khui_cw_add_type() - */ -KHMEXP khm_int32 KHMAPI -khui_cw_find_type(khui_new_creds * c, - khm_int32 type, - khui_new_creds_by_type **t); - -/*! \brief Enable/disable a particular credentials type - - Enables or disables the panel associated with a particular - credentials type. Does not preclude the credentials type from - participating in the new credentials acquisition. However, the - user will be prevented from interacting with the specific panel. - */ -KHMEXP khm_int32 KHMAPI -khui_cw_enable_type(khui_new_creds * c, - khm_int32 type, - khm_boolean enable); - -/*! \brief Set the primary identity in a new credentials acuisition - - The primary identity dictates many of the defaults and the - semantics associated with the credentials acquision process. - Setting the primary identity also triggers the - ::WMNC_IDENTITY_CHANGE notification which will be sent to all the - credentials type panels. - - Has no effect if the primary identity is already the same as the - one specified in \a id. Specify NULL for \a id if the current - primary identity is to be cleared. - - If the primary identity is changed, then all the additional - identities associated with the new credentials acquisition dialog - will also be discarded. - */ -KHMEXP khm_int32 KHMAPI -khui_cw_set_primary_id(khui_new_creds * c, - khm_handle id); - -/*! \brief Add an additional identity to the new credentials acquisition - - Individual plugins are free to decide how to handle additional - identities. Generally, they would attempt to obtain credentials - for the primary and additional identities, but would not consider - it an error if an additional identity failed to obtain - credentials. - - Calling this function with \a id of NULL does nothing. -*/ -KHMEXP khm_int32 KHMAPI -khui_cw_add_identity(khui_new_creds * c, - khm_handle id); - -/*! \brief Clear all custom prompts - - Removes all the custom prompts from the new credentials dialog. - */ -KHMEXP khm_int32 KHMAPI -khui_cw_clear_prompts(khui_new_creds * c); - -/*! \brief Synchronize custom prompt values - - It is important to synchronize the values before accessing their - values. The controls associated with custom prompts update the - values in the ::khui_new_creds object periodically. However, the - values may lose sync intermittently. - */ -KHMEXP khm_int32 KHMAPI -khui_cw_sync_prompt_values(khui_new_creds * c); - -/*! \brief Begin custom prompting - - Begins the process of defining custom prompts. Implicity removes - all the custom prompts that are currently being displayed. The \a - banner and \a name will be displayed in separate controls above - the set of new custom prompts. - - The controls associated with the prompts will not actually be - created until all the prompts have been added using - khui_cw_add_prompt(). The number of promtps that can be added - will be exactly \a n_prompts. - */ -KHMEXP khm_int32 KHMAPI -khui_cw_begin_custom_prompts(khui_new_creds * c, - khm_size n_prompts, - wchar_t * banner, - wchar_t * name); - -/*! \brief Add a custom prompt - - After khui_cw_begin_custom_prompts() is called, the plugin should - call khui_cw_add_prompt() to add the actual prompts. The number - of prompts that can be added is the \a n_prompts value specified - in the earlier call to \a khui_cw_begin_custom_prompts(). - - Once \a n_prompts prompts have been added, the new prompts will - automatically be created and shown in the user interface. - However, if less than that prompts are added, nothing is displayed - to the user. - - \param[in] c Pointer to ::khui_new_creds structure - - \param[in] type Type of prompt. One of - ::KHUI_NCPROMPT_TYPE_PREAUTH, ::KHUI_NCPROMPT_TYPE_PASSWORD, - ::KHUI_NCPROMPT_TYPE_NEW_PASSWORD, - ::KHUI_NCPROMPT_TYPE_NEW_PASSWORD_AGAIN - - \param[in] prompt Text of the prompt. Constrained by - ::KHUI_MAXCCH_PROMPT. (Localized, required) - - \param[in] def Default value. (optional). Constrained by - ::KHUI_MAXCCH_PROMPT_VALUE. Set to NULL if not provided. - - \param[in] flags Flags. Combination of - ::KHUI_NCPROMPT_FLAG_HIDDEN - */ -KHMEXP khm_int32 KHMAPI -khui_cw_add_prompt(khui_new_creds * c, - khm_int32 type, - wchar_t * prompt, - wchar_t * def, - khm_int32 flags); - -/*! \brief Retrieve a custom prompt - - Retrieves an individual prompt. The \a idx parameter is a - zero-based index of the prompt to retrieve. The ordering is the - same as the order in which khui_cw_add_prompt() was called. - */ -KHMEXP khm_int32 KHMAPI -khui_cw_get_prompt(khui_new_creds * c, - khm_size idx, - khui_new_creds_prompt ** prompt); - -/*! \brief Get the number of custom prompts - - Retrieves the number of custom prompts currently displayed. If - this function is called between calling - khui_cw_begin_custom_prompts() and adding all the prompts, the - number returned will be the number of prompts that is expected to - be registered (i.e. the \a n_prompts parameter passed to - khui_cw_begin_custom_prompts()). - */ -KHMEXP khm_int32 KHMAPI -khui_cw_get_prompt_count(khui_new_creds * c, - khm_size * np); - - -/*! \brief Get the value of a custom prompt - - Retrieve the value of a specific prompt. The value is the string - that was typed into the input control associated with a custom - prompt. The \a idx parameter is the zero-based index of the - prompt from which to retrieve the value from. The ordering is the - same as the order in which khui_cw_add_prompt() was called. - - It is important to call khui_cw_sync_prompt_values() before - starting to call khui_cw_get_prompt_value() so that the values - returned are up-to-date. - */ -KHMEXP khm_int32 KHMAPI -khui_cw_get_prompt_value(khui_new_creds * c, - khm_size idx, - wchar_t * buf, - khm_size *cbbuf); - -/*! \brief Set the response for a plugin - - When handling ::KMSG_CRED_DIALOG_PROCESS from within the plugin - thread, it is important to set the response by calling this - function. The response can be used to signal whether the plugin - successfully obtained credentials or whether further interaction - is required, or the credentials acquisition failed. - - The response is a combination of : - - ::KHUI_NC_RESPONSE_PENDING - - ::KHUI_NC_RESPONSE_FAILED - - ::KHUI_NC_RESPONSE_PENDING - - ::KHUI_NC_RESPONSE_SUCCESS - - ::KHUI_NC_RESPONSE_NOEXIT - - ::KHUI_NC_RESPONSE_EXIT - */ -KHMEXP khm_int32 KHMAPI -khui_cw_set_response(khui_new_creds * c, - khm_int32 type, - khm_int32 response); - -/*! \brief Check whether a specified credential type panel succeeded - - This is called during the processing of ::KMSG_CRED_DIALOG_PROCESS - to determine whether a specified credential type succeeded in - obtaining credentials. The credential type that is being queried - should have also been listed as a dependency when adding the - current credentials type, otherwise the type queried may not have - been invoked yet. - - \return TRUE iff the queried type has reported that it successfully - completed the credentials acquision operation. - */ -KHMEXP khm_boolean KHMAPI -khui_cw_type_succeeded(khui_new_creds * c, - khm_int32 type); - -/*! \brief Add a row of controls to the identity specifier area - - Only for use by identity provider callbacks that wish to add an - identity selector control. A row of controls consist of a label - control and some input control. - - When the ::WMNC_IDENT_INIT message is sent to the identity - provider, it receives a handle to the dialog panel in the \a - lParam parameter which should be the parent window of both the - windows specified here. The control ID for any controls created - must fall within the ::KHUI_CW_ID_MIN and ::KHUI_CW_ID_MAX range. - - Both controls will be resized to fit in the row. - - If \a long_label is TRUE then the size of the label will be larger - than normal and will accomodate more text. - */ -KHMEXP khm_int32 KHMAPI -khui_cw_add_control_row(khui_new_creds * c, - HWND label, - HWND input, - khui_control_size size); - -/*!@}*/ /* Credentials acquisition */ -/*!@}*/ - -#endif diff --git a/src/windows/identity/uilib/khprops.h b/src/windows/identity/uilib/khprops.h deleted file mode 100644 index 181183cbb..000000000 --- a/src/windows/identity/uilib/khprops.h +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_KHPROPS_H -#define __KHIMAIRA_KHPROPS_H - -#include<prsht.h> - -/********************************************************************* - Property sheets -**********************************************************************/ - -/*! \addtogroup khui - -@{*/ - -/*!\defgroup khui_pp Property sheets -@{*/ - -/* forward dcl */ -struct tag_khui_property_page; - -/*! \brief A property sheet - */ -typedef struct tag_khui_property_sheet { - PROPSHEETHEADER header; /*!< property sheet header */ - khm_int32 status; /*!< status of property sheet. One of - ::KHUI_PS_STATUS_NONE, - ::KHUI_PS_STATUS_RUNNING or - ::KHUI_PS_STATUS_DONE */ - - HWND hwnd; /*!< handle to the property sheet window. - Only valid when \a status is NOT - ::KHUI_PS_STATUS_NONE */ - - HWND hwnd_page; /*!< handle to the current page in the - property sheet. Only valid when \a - status is ::KHUI_PS_STATUS_RUNNING */ - - khui_action_context ctx; /*!< Context for the property sheet. See - documentation for - ::khui_action_context */ - - khm_handle identity; /*!< Handle to the associated identity, - if applicable */ - khm_int32 credtype; /*!< Type ID of the credentials type, if - applicable */ - khm_handle cred; /*!< Handle to the associated credential, - if applicable */ - - khm_int32 n_pages; /*!< Number of property pages. - Upperbound of ::KHUI_PS_MAX_PSP */ - - QDCL(struct tag_khui_property_page); -} khui_property_sheet; - -/*! \brief The property sheet hasn't been created yet */ -#define KHUI_PS_STATUS_NONE 0 - -/*! \brief The property sheet is visible and running */ -#define KHUI_PS_STATUS_RUNNING 1 - -/*! \brief The property sheet has completed running. - - At this point, it is safe to call khui_ps_destroy_sheet() to - destroy the property sheet. -*/ -#define KHUI_PS_STATUS_DONE 2 - -/*! \brief The property sheet is in the process of being destroyed - */ -#define KHUI_PS_STATUS_DESTROY 3 - -/*! \brief Maximum number of property sheet pages in a property sheet */ -#define KHUI_PS_MAX_PSP 16 - - -/*! \brief A property sheet page - */ -typedef struct tag_khui_property_page { - HPROPSHEETPAGE h_page; - LPPROPSHEETPAGE p_page; - HWND hwnd; - khm_int32 credtype; - khm_int32 ordinal; - - LDCL(struct tag_khui_property_page); -} khui_property_page; - -/*! \brief Special pseudo credtype for identity page - */ -#define KHUI_PPCT_IDENTITY (-8) - -/*! \brief Special pseudo credtype for credential page - */ -#define KHUI_PPCT_CREDENTIAL (-9) - -/*! \brief Create a property sheet - - \note Only called by the NetIDMgr application. - */ -KHMEXP khm_int32 KHMAPI -khui_ps_create_sheet(khui_property_sheet ** sheet); - -/*! \brief Add a page to a property sheet - - Called by a plugin or the NetIDMgr application to add a page to a - property sheet. - - Pages can only be added before the property sheet is made visible - to the user. - - \param[in] sheet The property sheet to add the page to - - \param[in] credtype The credentials type ID of the owner of the - property page. This should be set to ::KCDB_CREDTYPE_INVALID - if the type is not relevant. - - \param[in] ordinal Requested ordinal. A positive integer which is - used to order the pages in a property sheet. The pages are - ordered based on ordinal first and then alphabetically by - credentials type name. If the type is unavailable, then the - ordering is undefined. Ordinals for credential type property - pages can be in the range from 0 to 127. Ordinals 128 and - above are reserved. Passing in 0 will work for credentials - providers unless they provide more than one property page per - credential, in which case the ordinal should be used to - enforce an order. - - \param[in] ppage Pointer to structure that will be passed to - CreatePropertySheetPage() to create the property page. The - structure is not managed by NetIDMgr at all, and must exist - until the status of the property sheet changes to - ::KHUI_PS_STATUS_RUNNING. The same pointer will be found in - the \a p_page member of the ::khui_property_page structure. - - \param[out] page A pointer will be returned here that will point - to the newly created khui_property_page structure. Specify - NULL if this value is not required. You can use - khui_ps_find_page() to retrieve a pointer to the structure - later. - */ -KHMEXP khm_int32 KHMAPI -khui_ps_add_page(khui_property_sheet * sheet, - khm_int32 credtype, - khm_int32 ordinal, - LPPROPSHEETPAGE ppage, - khui_property_page ** page); - -/*! \brief Retrieve a property page structure from a property sheet - */ -KHMEXP khm_int32 KHMAPI -khui_ps_find_page(khui_property_sheet * sheet, - khm_int32 credtype, - khui_property_page ** page); - -/*! \brief Display the property sheet - - \note Only called by the NetIDMgr application - */ -KHMEXP HWND KHMAPI -khui_ps_show_sheet(HWND parent, - khui_property_sheet * sheet); - -/*! \brief Check if the given message belongs to the property sheet - - \note Only called by the NetIDMgr application - */ -KHMEXP LRESULT KHMAPI -khui_ps_check_message(khui_property_sheet * sheet, - PMSG msg); - -/*! \brief Destroy a property sheet and all associated data structures. - - \note Only called by the NetIDMgr application. -*/ -KHMEXP khm_int32 KHMAPI -khui_ps_destroy_sheet(khui_property_sheet * sheet); - -KHMEXP khm_int32 KHMAPI -khui_property_wnd_set_record(HWND hwnd_pwnd, khm_handle record); - -/*!@}*/ -/*!@}*/ - -#endif diff --git a/src/windows/identity/uilib/khremote.h b/src/windows/identity/uilib/khremote.h deleted file mode 100644 index 74e71a3d1..000000000 --- a/src/windows/identity/uilib/khremote.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_REMOTE_H -#define __KHIMAIRA_REMOTE_H - -/*! \addtogroup khui - @{*/ -/*! \defgroup khui_remote Connecting to NetIDMgr from another process - @{*/ - -/* Leash compatibility */ -#define ID_OBTAIN_TGT_WITH_LPARAM 32810 - -#define KHUI_REQDAEMONWND_CLASS L"IDMgrRequestDaemonCls" -#define KHUI_REQDAEMONWND_NAME L"IDMgrRequestDaemon" - -#define KHUI_REQD_MAPPING_FORMAT L"Local\\NetIDMgr_DlgInfo_%lu" - -#define NETID_USERNAME_SZ 128 -#define NETID_REALM_SZ 192 -#define NETID_TITLE_SZ 256 -#define NETID_CCACHE_NAME_SZ 264 - -#define NETID_DLGTYPE_TGT 0 -#define NETID_DLGTYPE_CHPASSWD 1 -typedef struct { - DWORD size; - DWORD dlgtype; - // Tells whether dialog box is in change pwd mode or init ticket mode - struct { - WCHAR title[NETID_TITLE_SZ]; - WCHAR username[NETID_USERNAME_SZ]; - WCHAR realm[NETID_REALM_SZ]; - WCHAR ccache[NETID_CCACHE_NAME_SZ]; - DWORD use_defaults; - DWORD forwardable; - DWORD noaddresses; - DWORD lifetime; - DWORD renew_till; - DWORD proxiable; - DWORD publicip; - DWORD must_use_specified_principal; - } in; - struct { - WCHAR username[NETID_USERNAME_SZ]; - WCHAR realm[NETID_REALM_SZ]; - WCHAR ccache[NETID_CCACHE_NAME_SZ]; - } out; - // Version 1 of this structure ends here -} NETID_DLGINFO, *LPNETID_DLGINFO; - -#define NETID_DLGINFO_V1_SZ (10 * sizeof(DWORD) \ - + sizeof(WCHAR) * (NETID_TITLE_SZ + \ - 2 * NETID_USERNAME_SZ + 2 * NETID_REALM_SZ + \ - 2 * NETID_CCACHE_NAME_SZ)) - -/*!@} */ -/*!@} */ - -#endif diff --git a/src/windows/identity/uilib/khrescache.h b/src/windows/identity/uilib/khrescache.h deleted file mode 100644 index 2f0ba275b..000000000 --- a/src/windows/identity/uilib/khrescache.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_RESCACHE_H -#define __KHIMAIRA_RESCACHE_H - -#include<khdefs.h> - -KHMEXP void KHMAPI -khui_init_rescache(void); - -KHMEXP void KHMAPI -khui_exit_rescache(void); - -KHMEXP void KHMAPI -khui_cache_bitmap(UINT id, HBITMAP hbm); - -KHMEXP HBITMAP KHMAPI -khui_get_cached_bitmap(UINT id); - -typedef struct khui_ilist_t { - int cx; - int cy; - int n; - int ng; - int nused; - HBITMAP img; - HBITMAP mask; - int *idlist; -} khui_ilist; - -typedef struct khui_bitmap_t { - HBITMAP hbmp; - int cx; - int cy; -} khui_bitmap; - -KHMEXP void KHMAPI -khui_bitmap_from_hbmp(khui_bitmap * kbm, HBITMAP hbm); - -KHMEXP void KHMAPI -khui_delete_bitmap(khui_bitmap * kbm); - -KHMEXP void KHMAPI -khui_draw_bitmap(HDC hdc, int x, int y, khui_bitmap * kbm); - -/* image lists */ -KHMEXP khui_ilist * KHMAPI -khui_create_ilist(int cx, int cy, int n, int ng, int opt); - -KHMEXP BOOL KHMAPI -khui_delete_ilist(khui_ilist * il); - -KHMEXP int KHMAPI -khui_ilist_add_masked(khui_ilist * il, HBITMAP hbm, COLORREF cbkg); - -KHMEXP int KHMAPI -khui_ilist_add_masked_id(khui_ilist *il, HBITMAP hbm, - COLORREF cbkg, int id); - -KHMEXP int KHMAPI -khui_ilist_lookup_id(khui_ilist *il, int id); - -KHMEXP void KHMAPI -khui_ilist_draw(khui_ilist * il, int idx, HDC dc, int x, int y, int opt); - -KHMEXP void KHMAPI -khui_ilist_draw_bg(khui_ilist * il, int idx, HDC dc, int x, int y, - int opt, COLORREF bgcolor); - -#define khui_ilist_draw_id(il, id, dc, x, y, opt) \ - khui_ilist_draw((il),khui_ilist_lookup_id((il),(id)),(dc),(x),(y),(opt)) - -#define KHUI_SMICON_CX 16 -#define KHUI_SMICON_CY 16 - -#endif diff --git a/src/windows/identity/uilib/khtracker.h b/src/windows/identity/uilib/khtracker.h deleted file mode 100644 index 86adb344a..000000000 --- a/src/windows/identity/uilib/khtracker.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_TRACKERWND_H -#define __KHIMAIRA_TRACKERWND_H - -#include<time.h> - -/*! \addtogroup khui - -@{ */ - -/*!\defgroup khui_trk Duration sliders - -The duration sliders in the UI are pseudo-log-scaled. This is based -on the assumption that people don't really need 1 minute accuracy when -setting a duration that's several hours long. As a result, it is -easier to hone in on the duration that you want without having -wizardly mouse maneuvering skillz. - -Following are the duration ranges and the granularity that is offered -in each range: - -<table> -<tr><td> Range </td><td> Increment</td></tr> -<tr><td> 0..5m </td><td> 1 min </td></tr> -<tr><td> 5m..1hr </td><td> 5 min </td></tr> -<tr><td> 1hr..4hr </td><td> 15 min </td></tr> -<tr><td> 4hr..10hr </td><td> 30 min </td></tr> -<tr><td> 10hr..24hr</td><td> 1 hr </td></tr> -<tr><td> 24hr..4d </td><td> 6 hr </td></tr> -<tr><td> 4d.. </td><td> 1 day </td></tr> -</table> - -We don't really adjust for durations over 4 days. The ranges we are -concerned with don't get much larger. - -For the purpose of writing this piece of code, I have chosen the term -"tick" to refer to a period of granularity. The number of periods of -granularity (inclusive) within a certain duration interval is referred -to as the number of ticks in the interval. For example, there are 4 -ticks between the interval of 3 minutes to 10 minutes. Each occuring -at the start of 3min, 4, 5 and 10mins. And thusly the slider control -will display 4 ticks if it is displaying the interval 3-10mins. - -@{*/ - -/*! \brief Tracker data */ -typedef struct tag_khui_tracker { - WNDPROC fn_edit; - WNDPROC fn_tracker; - HWND hw_slider; - HWND hw_edit; - int lbl_y; - int lbl_lx; - int lbl_rx; - DWORD act_time; - - time_t current; /*!< Current selection */ - time_t min; /*!< Minimum (inclusive) */ - time_t max; /*!< Maximum (inclusive) */ -} khui_tracker; - -/*! \brief Install a tracker into an edit control - - Once installed, the edit control becomes a duration editor. The - tracker data structure that is supplied should remain as is for - the lifetime of the edit control. - - The tracker strucutre should have been initialized with a call to - khui_tracker_initialize() and should have valid values in the \a - min, \a max and \a current fields. - */ -KHMEXP void KHMAPI -khui_tracker_install(HWND hwnd_edit, khui_tracker * tc); - -KHMEXP void KHMAPI -khui_tracker_reposition(khui_tracker * tc); - -KHMEXP void KHMAPI -khui_tracker_initialize(khui_tracker * tc); - -KHMEXP void KHMAPI -khui_tracker_refresh(khui_tracker * tc); - -KHMEXP void KHMAPI -khui_tracker_kill_controls(khui_tracker * tc); -/*!@}*/ -/*!@}*/ - -#endif diff --git a/src/windows/identity/uilib/khuidefs.h b/src/windows/identity/uilib/khuidefs.h deleted file mode 100644 index 16c4474f7..000000000 --- a/src/windows/identity/uilib/khuidefs.h +++ /dev/null @@ -1,146 +0,0 @@ -/* - * 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 - * 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 __KHIMAIRA_KHUIDEFS_H -#define __KHIMAIRA_KHUIDEFS_H - -#include<windows.h> -#include<kmq.h> -#include<kcreddb.h> -#include<kherror.h> -#include<kherr.h> -#include<khmsgtypes.h> - -#include<khaction.h> -#include<khactiondef.h> -#include<khhtlink.h> -#include<khnewcred.h> -#include<khprops.h> -#include<khalerts.h> -#include<khconfigui.h> -#include<khtracker.h> - -#ifdef NOEXPORT -#include<khrescache.h> -#endif - -#include<khremote.h> - -/*! \internal */ -KHMEXP void KHMAPI -khm_version_init(void); - -/*! \defgroup khui User Interface - - Functions and data structures for interacting with the user - interface. - -@{*/ - -/*! \brief Get the version of the NetIDMgr library - - \param[out] libver Receives the version of the library. - - \param[out] apiver Receives the API version of the library. - Optional. Set to NULL if this value is not required. - - \note When the NetIDMgr framework loads a plugin, it checks the - version information of the plugin against the version of the - library to determine if the plugin is compatible. - */ -KHMEXP void KHMAPI -khm_get_lib_version(khm_version * libver, khm_ui_4 * apiver); - -/*! \brief Return the version of Common Control library - - Can be used to check the version of the Windows Common Control - library that is currently loaded. The return value of the - function is the packed version value obatained by the macro : - - \code - MAKELONG(vesion->dwMinorVersion, version->dwMajorVersion); - \endcode - - The \a pdvi parameter is optional. Specify NULL if this is not - required. - */ -KHMEXP khm_ui_4 KHMAPI -khm_get_commctl_version(khm_version * pdvi); - -/*! \brief UI callback function - - Used with khui_request_UI_callback(). - - \see khui_request_UI_callback() - */ -typedef khm_int32 -(KHMAPI *khm_ui_callback)(HWND hwnd_main_wnd, void * rock); - -/*! \brief Request a UI callback - - In general, plug-ins in Network Identity Manager run in their own - thread and will not be able to interact with the user directly by - creating windows of its own. There are exceptions to this, such - as when the plug-in is responding to a new credentials request or - if the plug-in provides configuration panels. However, if a - plug-in needs to provide a user interface to the user outside of - the provisions already provided by Network Identity Manager, it - needs to do so from within the user interface thread. - - To do so, a plug-in would provide a callback function of the type - ::khm_ui_callback to this function. The Network Identity Manager - will then call the callback function from within the user - interface thread. At this point, the callback function can create - any windows it wishes to create and interact with the user - directly. - - The callback function would be called synchronously. - khui_request_UI_callback() will not return until the user - interface processes the request and calls the callback function. - The return code of khui_request_UI_callback() will be the return - code of the callback. - - \param[in] cb The callback function which will be called from the - user interface thread. - - \param[in] rock An arbitrary parameter which will be passed into - the callback function. - - \return The return value of \a cb. - - \note When the plug-in creates any windows, it should specify the - window handle provided via the \a hwnd_main_wnd parameter as - the parent window. - - \see ::khm_ui_callback - */ -KHMEXP khm_int32 KHMAPI -khui_request_UI_callback(khm_ui_callback cb, void * rock); - -/*!@}*/ - -#endif diff --git a/src/windows/identity/uilib/propsheet.c b/src/windows/identity/uilib/propsheet.c deleted file mode 100644 index 76e74043d..000000000 --- a/src/windows/identity/uilib/propsheet.c +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -#define _NIMLIB_ - -#include<khuidefs.h> -#include<utils.h> -#ifdef DEBUG -#include<assert.h> -#endif - -CRITICAL_SECTION cs_props; - -void -ps_init(void) { - InitializeCriticalSection(&cs_props); -} - -void -ps_exit(void) { - DeleteCriticalSection(&cs_props); -} - -KHMEXP khm_int32 KHMAPI -khui_ps_create_sheet(khui_property_sheet ** sheet) -{ - khui_property_sheet * ps; - - ps = PMALLOC(sizeof(*ps)); - ZeroMemory(ps, sizeof(*ps)); - - ps->header.dwSize = sizeof(ps->header); - ps->header.dwFlags = PSH_MODELESS | PSH_PROPTITLE; - ps->status = KHUI_PS_STATUS_NONE; - - *sheet = ps; - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_ps_add_page(khui_property_sheet * sheet, - khm_int32 credtype, - khm_int32 ordinal, - LPPROPSHEETPAGE ppage, - khui_property_page ** page) -{ - khui_property_page * p; - - p = PMALLOC(sizeof(*p)); - ZeroMemory(p, sizeof(*p)); - - p->credtype = credtype; - p->ordinal = ordinal; - p->p_page = ppage; - - EnterCriticalSection(&cs_props); - QPUT(sheet, p); - sheet->n_pages++; - LeaveCriticalSection(&cs_props); - - if(page) - *page = p; - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -khui_ps_find_page(khui_property_sheet * sheet, - khm_int32 credtype, - khui_property_page ** page) -{ - khui_property_page * p; - - EnterCriticalSection(&cs_props); - p = QTOP(sheet); - - while(p) { - if(p->credtype == credtype) - break; - p = QNEXT(p); - } - LeaveCriticalSection(&cs_props); - - if(p) { - *page = p; - return KHM_ERROR_SUCCESS; - } else { - *page = NULL; - return KHM_ERROR_NOT_FOUND; - } -} - -int __cdecl -ps_order_func(const void *l, const void * r) { - khui_property_page * lp; - khui_property_page * rp; - - lp = *(khui_property_page **)l; - rp = *(khui_property_page **)r; - - if (lp->ordinal == rp->ordinal) - return lp->credtype - rp->credtype; - else - return lp->ordinal - rp->ordinal; -} - -KHMEXP HWND KHMAPI -khui_ps_show_sheet(HWND parent, khui_property_sheet * s) -{ - khui_property_page * p; - HPROPSHEETPAGE phpsp[KHUI_PS_MAX_PSP]; - khui_property_page * ppgs[KHUI_PS_MAX_PSP]; - int i; - INT_PTR prv; - HWND hw; - - EnterCriticalSection(&cs_props); - - s->header.hwndParent = parent; - s->header.nPages = s->n_pages; - - p = QTOP(s); - i = 0; - while(p) { - p->h_page = CreatePropertySheetPage(p->p_page); -#ifdef DEBUG - assert(p->h_page); -#endif - ppgs[i++] = p; - p = QNEXT(p); - } - -#ifdef DEBUG - assert(i == s->n_pages); -#endif - - qsort(ppgs, s->n_pages, sizeof(ppgs[0]), ps_order_func); - - for (i=0; i < s->n_pages; i++) { - phpsp[i] = ppgs[i]->h_page; - } - - s->header.phpage = phpsp; - - prv = PropertySheet(&s->header); - - s->header.phpage = NULL; - - if(prv <= 0) { -#ifdef DEBUG - assert(FALSE); -#endif - /*TODO: better handling for this */ - hw = NULL; - } else { - s->status = KHUI_PS_STATUS_RUNNING; - - hw = (HWND) prv; - s->hwnd = hw; - s->hwnd_page = PropSheet_GetCurrentPageHwnd(hw); - } - LeaveCriticalSection(&cs_props); - - return hw; -} - -KHMEXP LRESULT KHMAPI -khui_ps_check_message(khui_property_sheet * sheet, - PMSG pmsg) -{ - LRESULT lr; - - if(sheet->hwnd == NULL) - return FALSE; - - lr = PropSheet_IsDialogMessage(sheet->hwnd, pmsg); - if(lr) { - sheet->hwnd_page = PropSheet_GetCurrentPageHwnd(sheet->hwnd); - if(sheet->hwnd_page == NULL && - sheet->status == KHUI_PS_STATUS_RUNNING) - - sheet->status = KHUI_PS_STATUS_DONE; - } - - return lr; -} - -KHMEXP khm_int32 KHMAPI -khui_ps_destroy_sheet(khui_property_sheet * sheet) -{ - khui_property_page * p; - - EnterCriticalSection(&cs_props); - - DestroyWindow(sheet->hwnd); - sheet->hwnd = NULL; - - QGET(sheet, &p); - while(p) { - PFREE(p); - QGET(sheet, &p); - } - PFREE(sheet); - - LeaveCriticalSection(&cs_props); - - return KHM_ERROR_SUCCESS; -} diff --git a/src/windows/identity/uilib/propwnd.c b/src/windows/identity/uilib/propwnd.c deleted file mode 100644 index ea36e28aa..000000000 --- a/src/windows/identity/uilib/propwnd.c +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -#define _NIMLIB_ - -#include<khuidefs.h> - - -#define PW_WM_SET_RECORD WM_USER - -KHMEXP khm_int32 KHMAPI khui_property_wnd_set_record(HWND hwnd_pwnd, khm_handle record) -{ - SendMessage(hwnd_pwnd, PW_WM_SET_RECORD, 0, (LPARAM) record); - - return KHM_ERROR_SUCCESS; -} diff --git a/src/windows/identity/uilib/rescache.c b/src/windows/identity/uilib/rescache.c deleted file mode 100644 index 7b770b3e3..000000000 --- a/src/windows/identity/uilib/rescache.c +++ /dev/null @@ -1,304 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -#define NOEXPORT -#define _NIMLIB_ - -#include<khuidefs.h> -#include<utils.h> - -hashtable * h_bitmaps; - -khm_int32 -hash_id(const void *p) { -#pragma warning(push) -#pragma warning(disable: 4311) - return (khm_int32) p; -#pragma warning(pop) -} - -khm_int32 -comp_id(const void *p1, const void *p2) { -#pragma warning(push) -#pragma warning(disable: 4311) - return ((khm_int32)p1) - ((khm_int32)p2); -#pragma warning(pop) -} - -void -del_ref_object(const void *k, void * data) { - DeleteObject((HGDIOBJ) data); -} - -KHMEXP void KHMAPI -khui_init_rescache(void) { - h_bitmaps = hash_new_hashtable(127, hash_id, comp_id, NULL, - del_ref_object); -} - -KHMEXP void KHMAPI -khui_exit_rescache(void) { - hash_del_hashtable(h_bitmaps); -} - -KHMEXP void KHMAPI -khui_cache_bitmap(UINT id, HBITMAP hbm) { - hash_add(h_bitmaps, (void *)(size_t) id, (void *) hbm); -} - -KHMEXP HBITMAP KHMAPI -khui_get_cached_bitmap(UINT id) { - return (HBITMAP) hash_lookup(h_bitmaps, (void *)(size_t) id); -} - -KHMEXP khui_ilist * KHMAPI -khui_create_ilist(int cx, int cy, int n, int ng, int opt) { - BITMAPV5HEADER head; - HDC hdc; - - khui_ilist * il = PMALLOC(sizeof(khui_ilist)); - il->cx = cx; - il->cy = cy; - il->n = n; - il->ng = ng; - il->nused = 0; - hdc = GetDC(NULL); - head.bV5Size = sizeof(head); - head.bV5Width = cx * n; - head.bV5Height = cy; - head.bV5Planes = 1; - head.bV5BitCount = 24; - head.bV5Compression = BI_RGB; - head.bV5SizeImage = 0; - head.bV5XPelsPerMeter = 2835; - head.bV5YPelsPerMeter = 2835; - head.bV5ClrUsed = 0; - head.bV5ClrImportant = 0; - head.bV5AlphaMask = 0; - head.bV5CSType = LCS_WINDOWS_COLOR_SPACE; - head.bV5Intent = LCS_GM_GRAPHICS; - head.bV5ProfileData = 0; - head.bV5ProfileSize = 0; - head.bV5Reserved = 0; - il->img = CreateDIBitmap(hdc, (BITMAPINFOHEADER *) &head, 0, NULL, NULL, DIB_RGB_COLORS); - il->mask = CreateBitmap(cx * n, cy, 1, 1, NULL); - il->idlist = PMALLOC(sizeof(int) * n); - - return il; -} - -KHMEXP BOOL KHMAPI -khui_delete_ilist(khui_ilist * il) { - DeleteObject(il->img); - DeleteObject(il->mask); - PFREE(il->idlist); - PFREE(il); - - return TRUE; -} - -KHMEXP int KHMAPI -khui_ilist_add_masked_id(khui_ilist *il, - HBITMAP hbm, - COLORREF cbkg, - int id) { - int idx; - - idx = khui_ilist_add_masked(il,hbm,cbkg); - if(idx >= 0) { - il->idlist[idx] = id; - } - - return idx; -} - -KHMEXP int KHMAPI -khui_ilist_lookup_id(khui_ilist *il, int id) { - int i; - - for(i=0;i<il->nused;i++) { - if(il->idlist[i] == id) - return i; - } - - return -1; -} - -KHMEXP int KHMAPI -khui_ilist_add_masked(khui_ilist * il, HBITMAP hbm, COLORREF cbkg) { - HDC dcr,dci,dct,dcb; - HBITMAP hb_oldb, hb_oldi, hb_oldt; - int sx, i; - int x,y; - - dcr = GetDC(NULL); - dci = CreateCompatibleDC(dcr); - dct = CreateCompatibleDC(dcr); - dcb = CreateCompatibleDC(dcr); - ReleaseDC(NULL,dcr); - - i = il->nused++; - il->idlist[i] = -1; - sx = i * il->cx; - - hb_oldb = SelectObject(dcb, hbm); - hb_oldi = SelectObject(dci, il->img); - hb_oldt = SelectObject(dct, il->mask); - - SetBkColor(dct, RGB(0,0,0)); - SetTextColor(dct, RGB(255,255,255)); - - BitBlt(dci, sx, 0, il->cx, il->cy, dcb, 0, 0, SRCCOPY); - for(y=0;y < il->cy; y++) - for(x=0; x<il->cx; x++) { - COLORREF c = GetPixel(dcb, x, y); - if(c==cbkg) { - SetPixel(dct, sx + x, y, RGB(255,255,255)); - SetPixel(dci, sx + x, y, RGB(0,0,0)); - } else { - SetPixel(dct, sx + x, y, RGB(0,0,0)); - } - } - - SelectObject(dct, hb_oldt); - SelectObject(dci, hb_oldi); - SelectObject(dcb, hb_oldb); - - DeleteDC(dcb); - DeleteDC(dct); - DeleteDC(dci); - - return i; -} - -KHMEXP void KHMAPI -khui_ilist_draw(khui_ilist * il, - int idx, - HDC dc, - int x, - int y, - int opt) { - HDC dci; - HBITMAP hb_oldi; - - if(idx < 0) - return; - - dci = CreateCompatibleDC(dc); - - hb_oldi = SelectObject(dci, il->img); - - /*BitBlt(dc, x, y, il->cx, il->cy, dci, idx*il->cx, 0, SRCCOPY); */ - MaskBlt(dc, x, y, il->cx, il->cy, dci, idx * il->cx, 0, il->mask, idx * il->cx, 0, MAKEROP4(SRCPAINT, SRCCOPY)); -/* MaskBlt(dc, x, y, il->cx, il->cy, dci, idx * il->cx, 0, il->mask, idx * il->cx, 0, MAKEROP4(SRCINVERT, SRCCOPY)); */ - - SelectObject(dci, hb_oldi); - - DeleteDC(dci); -} - -KHMEXP void KHMAPI -khui_ilist_draw_bg(khui_ilist * il, - int idx, - HDC dc, - int x, - int y, - int opt, - COLORREF bgcolor) { - HDC dcm; - HBITMAP hb_oldm, hb_mem; - HBRUSH hbr; - RECT r; - - dcm = CreateCompatibleDC(dc); - - hb_mem = CreateCompatibleBitmap(dc, il->cx, il->cy); - - hb_oldm = SelectObject(dcm, hb_mem); - - hbr = CreateSolidBrush(bgcolor); - - r.left = 0; - r.top = 0; - r.right = il->cx; - r.bottom = il->cy; - - FillRect(dcm, &r, hbr); - - khui_ilist_draw(il,idx,dcm,0,0,opt); - - BitBlt(dc,x,y,il->cx,il->cy,dcm,0,0,SRCCOPY); - - SelectObject(dcm, hb_oldm); - - DeleteObject(hb_mem); - DeleteObject(hbr); - - DeleteDC(dcm); -} - - -KHMEXP void KHMAPI -khui_bitmap_from_hbmp(khui_bitmap * kbm, HBITMAP hbm) -{ - HDC hdc; - BITMAPINFO bmi; - - hdc = CreateCompatibleDC(NULL); - - bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - - kbm->hbmp = hbm; - - if(GetDIBits(hdc, hbm, 0, 0, NULL, &bmi, DIB_RGB_COLORS)) { - kbm->cx = bmi.bmiHeader.biWidth; - kbm->cy = bmi.bmiHeader.biHeight; - } else { - kbm->cx = -1; - kbm->cy = -1; - } - - DeleteDC(hdc); -} - -KHMEXP void KHMAPI -khui_delete_bitmap(khui_bitmap * kbm) { - if (kbm->hbmp) - DeleteObject(kbm->hbmp); - kbm->hbmp = NULL; -} - -KHMEXP void KHMAPI -khui_draw_bitmap(HDC hdc, int x, int y, khui_bitmap * kbm) { - HDC hdcb = CreateCompatibleDC(hdc); - HBITMAP hbmold = SelectObject(hdcb, kbm->hbmp); - - BitBlt(hdc, x, y, kbm->cx, kbm->cy, - hdcb, 0, 0, SRCCOPY); - - SelectObject(hdcb, hbmold); - DeleteDC(hdcb); -} diff --git a/src/windows/identity/uilib/trackerwnd.c b/src/windows/identity/uilib/trackerwnd.c deleted file mode 100644 index 70c3137f7..000000000 --- a/src/windows/identity/uilib/trackerwnd.c +++ /dev/null @@ -1,474 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -#define _NIMLIB_ - -#include<khuidefs.h> -#include<commctrl.h> -#include<assert.h> - -#define K5_SLIDER_WIDTH 208 -#define K5_SLIDER_HEIGHT 40 - -#define K5_SLIDER_LBL_HPAD 5 -#define K5_SLIDER_LBL_VPAD 22 - -#define KHUI_TRACKER_PROP L"KhmTrackerData" - - -/* Count the number of ticks between tmin and tmax, inclusive -*/ -int time_t_to_ticks(time_t tmin, time_t tmax) -{ - int c = 0; - time_t lo, hi; - - tmin -= tmin % 60; /* our smallest gran is 1 min */ - if(tmax % 60) - tmax += 60 - (tmax % 60); - - lo = tmin; - -#define TFORWARD(limit,gran) \ - if(lo < limit && lo < tmax) { \ - hi = min(tmax, limit); \ - c += (int)((hi - lo) / (gran)); \ - lo = hi; \ - } - - TFORWARD(300,60); - TFORWARD(3600,300); - TFORWARD(3600*4, 60*15); - TFORWARD(3600*10,60*30); - TFORWARD(3600*24,3600); - TFORWARD(3600*24*4,3600*6); - TFORWARD(((time_t)(INFINITE & INT_MAX)),3600*24); - -#undef TFORWARD - - return c; -} - -/* Compute tmax given tmin and ticks such that there are ticks ticks - between tmin and tmax - */ -time_t ticks_to_time_t(int ticks, time_t tmin) -{ - int c = 0; - tmin -= tmin % 60; /* our smallest gran is 1 min */ - -#define SFORWARD(limit,gran) \ - if(tmin < limit && ticks > 0) { \ - c = (int) min(ticks, (limit - tmin) / (gran)); \ - tmin += c * gran; \ - ticks -= c; \ - } - - SFORWARD(300,60); - SFORWARD(3600,300); - SFORWARD(3600*4,60*15); - SFORWARD(3600*10,60*30); - SFORWARD(3600*24,3600); - SFORWARD(3600*24*4,3600*6); - SFORWARD(((time_t)(INFINITE & INT_MAX)),3600*24); - -#undef SFORWARD - - return tmin; -} - -/* Prep a tracker control which works in conjunction with the - duration edit control. - - NOTE: Runs in the context of the UI thread -*/ -void -initialize_tracker(HWND hwnd, - khui_tracker * tc) -{ - RECT r; - FILETIME ft; - wchar_t wbuf[256]; - khm_size cbbuf; - - SendMessage(tc->hw_slider, TBM_SETRANGE, 0, MAKELONG(0, time_t_to_ticks(tc->min, tc->max))); - SendMessage(tc->hw_slider, TBM_SETPOS, TRUE, (LPARAM) time_t_to_ticks(tc->min, tc->current)); - - r.left = K5_SLIDER_LBL_HPAD; - r.top = K5_SLIDER_LBL_VPAD; - r.right = K5_SLIDER_WIDTH - K5_SLIDER_LBL_HPAD; - r.bottom = r.top; - - MapDialogRect(hwnd, &r); - - tc->lbl_y = r.top; - tc->lbl_lx = r.left; - tc->lbl_rx = r.right; - - TimetToFileTimeInterval(tc->current, &ft); - cbbuf = sizeof(wbuf); - FtIntervalToString(&ft, wbuf, &cbbuf); - - SendMessage(tc->hw_edit, WM_SETTEXT, 0, (LPARAM)wbuf); -} - - -/* We instance-subclass each tracker control to provide the - functionality that we need. This is the replacement window - procedure - - NOTE: Runs in the context of the UI thread - */ -LRESULT CALLBACK -duration_tracker_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) -{ - khui_tracker * tc; - - tc = (khui_tracker *) GetProp(hwnd, KHUI_TRACKER_PROP); -#ifdef DEBUG - assert(tc != NULL); -#endif - - switch(uMsg) { - case WM_PAINT: - { - HDC hdc; - HFONT hf, hfold; - LRESULT lr; - FILETIME ft; - wchar_t buf[256]; - khm_size cbbuf; - - lr = CallWindowProc(tc->fn_tracker, hwnd, uMsg, wParam, lParam); - - /* Can't use BeginPaint here, since we already called the - window proc */ - hdc = GetWindowDC(hwnd); - - hf = (HFONT) SendMessage(tc->hw_edit, WM_GETFONT, 0, 0); - - hfold = ((HFONT) SelectObject((hdc), (HGDIOBJ)(HFONT)(hf))); - - TimetToFileTimeInterval(tc->min, &ft); - cbbuf = sizeof(buf); - FtIntervalToString(&ft, buf, &cbbuf); - - SetTextColor(hdc, RGB(0,0,0)); - SetBkMode(hdc, TRANSPARENT); - - SetTextAlign(hdc, TA_LEFT | TA_TOP | TA_NOUPDATECP); - TextOut(hdc, tc->lbl_lx, tc->lbl_y, buf, (int) wcslen(buf)); - - TimetToFileTimeInterval(tc->max, &ft); - cbbuf = sizeof(buf); - FtIntervalToString(&ft, buf, &cbbuf); - - SetTextAlign(hdc, TA_RIGHT | TA_TOP | TA_NOUPDATECP); - TextOut(hdc, tc->lbl_rx, tc->lbl_y, buf, (int) wcslen(buf)); - - ((HFONT) SelectObject((hdc), (HGDIOBJ)(HFONT)(hfold))); - - ReleaseDC(hwnd, hdc); - - return lr; - } - break; - - case WM_KILLFOCUS: - { - if((HWND)wParam != tc->hw_edit) - ShowWindow(hwnd, SW_HIDE); - } - break; - - case WM_LBUTTONUP: - case WM_MOUSEMOVE: - { - LRESULT lr; - - lr = CallWindowProc(tc->fn_tracker, hwnd, uMsg, wParam, lParam); - - if(wParam & MK_LBUTTON) { - int c = (int) SendMessage(hwnd, TBM_GETPOS, 0, 0); - time_t t = ticks_to_time_t(c, tc->min); - - if(t != tc->current) { - wchar_t buf[256]; - FILETIME ft; - khm_size cbbuf; - - tc->current = t; - //d->dirty = TRUE; - cbbuf = sizeof(buf); - TimetToFileTimeInterval(t, &ft); - FtIntervalToString(&ft, buf, &cbbuf); - SendMessage(tc->hw_edit, WM_SETTEXT, 0, (LPARAM) buf); - } - } - return lr; - } - } - - return CallWindowProc(tc->fn_tracker, hwnd, uMsg, wParam, lParam); -} - - -/* Create the subclassed duration slider on behalf of an edit control */ -void -create_edit_sliders(HWND hwnd, - HWND hwnd_dlg, - khui_tracker * tc) -{ - RECT r; - RECT rs; - - GetWindowRect(hwnd, &r); - - rs.top = 0; - rs.left = 0; - rs.right = K5_SLIDER_WIDTH; - rs.bottom = K5_SLIDER_HEIGHT; - MapDialogRect(hwnd_dlg, &rs); - rs.right -= rs.left; - rs.bottom -= rs.top; - - tc->hw_slider = - CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, - TRACKBAR_CLASS, - L"NetIDMgrTimeTickerTrackbar", - WS_POPUP | TBS_AUTOTICKS | TBS_BOTTOM | -#if (_WIN32_IE >= 0x0501) - TBS_DOWNISLEFT | -#endif - TBS_HORZ | WS_CLIPCHILDREN, - r.left,r.bottom,rs.right,rs.bottom, - hwnd, - NULL, - (HINSTANCE)(DWORD_PTR) - GetWindowLongPtr(hwnd, GWLP_HINSTANCE), - NULL); - - SetProp(tc->hw_slider, KHUI_TRACKER_PROP, - (HANDLE) tc); - -#pragma warning(push) -#pragma warning(disable: 4244) - tc->fn_tracker = (WNDPROC)(LONG_PTR) SetWindowLongPtr(tc->hw_slider, GWLP_WNDPROC, (LONG_PTR) duration_tracker_proc); -#pragma warning(pop) -} - -/* An edit control is instance-subclassed to create an edit control - that holds a duration. Welcome to the window procedure. - - NOTE: Runs in the context of the UI thread - */ -LRESULT CALLBACK -duration_edit_proc(HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) -{ - khui_tracker * tc; - - tc = (khui_tracker *) GetProp(hwnd, KHUI_TRACKER_PROP); - -#ifdef DEBUG - assert(tc != NULL); -#endif - - switch(uMsg) { - case WM_SETFOCUS: - { - HWND p; - - p = GetParent(hwnd); - - /* we are being activated. */ - if(tc->hw_slider == NULL) { - create_edit_sliders(hwnd, p, tc); - initialize_tracker(p, tc); - } - - khui_tracker_reposition(tc); - -#ifdef SHOW_PANEL_ON_FIRST_ACTIVATE - ShowWindow(tc->hw_slider, SW_SHOWNOACTIVATE); -#endif - - tc->act_time = GetTickCount(); - } - break; - - case WM_KILLFOCUS: - { - wchar_t wbuf[256]; - FILETIME ft; - khm_size cbbuf; - - if((HWND) wParam != tc->hw_slider) - ShowWindow(tc->hw_slider, SW_HIDE); - - TimetToFileTimeInterval(tc->current, &ft); - cbbuf = sizeof(wbuf); - FtIntervalToString(&ft, wbuf, &cbbuf); - - SendMessage(tc->hw_edit, WM_SETTEXT, 0, (LPARAM)wbuf); - } - break; - - case KHUI_WM_NC_NOTIFY: - if(HIWORD(wParam) == WMNC_DIALOG_SETUP) { - HWND p; - - p = GetParent(hwnd); - - if(tc->hw_slider == NULL) { - create_edit_sliders(hwnd,p,tc); - } - - initialize_tracker(p, tc); - } - return TRUE; - - case WM_LBUTTONUP: - if (IsWindowVisible(tc->hw_slider)) { - DWORD tm; - - tm = GetTickCount(); - if (tm - tc->act_time > 000) - ShowWindow(tc->hw_slider, SW_HIDE); - } else { - ShowWindow(tc->hw_slider, SW_SHOWNOACTIVATE); - } - break; - - /* these messages can potentially change the text in the edit - control. We intercept them and see what changed. We may - need to grab and handle them */ - case EM_REPLACESEL: - case EM_UNDO: - case WM_UNDO: - case WM_CHAR: -#if (_WIN32_WINNT >= 0x0501) - case WM_UNICHAR: -#endif - { - wchar_t buf[256]; - size_t nchars; - time_t ts; - FILETIME ft; - BOOL modified; - LRESULT lr = CallWindowProc(tc->fn_edit, hwnd, uMsg, wParam, lParam); - - modified = (BOOL) SendMessage(hwnd, EM_GETMODIFY, 0, 0); - if(modified) { - /* parse the string */ - if(nchars = (size_t) SendMessage(hwnd, WM_GETTEXT, ARRAYLENGTH(buf), (LPARAM) buf)) { - buf[nchars] = 0; - - if(KHM_SUCCEEDED(IntervalStringToFt(&ft, buf))) { - ts = FtIntervalToSeconds(&ft); - if(ts >= tc->min && ts <= tc->max) { - tc->current = ts; - //d->dirty = TRUE; - if(tc->hw_slider != NULL) - SendMessage(tc->hw_slider, TBM_SETPOS, TRUE, (LPARAM) time_t_to_ticks(tc->min, tc->current)); - } - } - } - SendMessage(hwnd, EM_SETMODIFY, FALSE, 0); - } - - return lr; - } - } - - return CallWindowProc(tc->fn_edit, hwnd, uMsg, wParam, lParam); -} - -KHMEXP void KHMAPI -khui_tracker_install(HWND hwnd_edit, khui_tracker * tc) { -#ifdef DEBUG - assert(hwnd_edit); - assert(tc); -#endif - - tc->hw_edit = hwnd_edit; - - SetProp(hwnd_edit, KHUI_TRACKER_PROP, (HANDLE) tc); - -#pragma warning(push) -#pragma warning(disable: 4244) - tc->fn_edit = (WNDPROC)(LONG_PTR) - SetWindowLongPtr(hwnd_edit, GWLP_WNDPROC, - (LONG_PTR) duration_edit_proc); -#pragma warning(pop) -} - -KHMEXP void KHMAPI -khui_tracker_reposition(khui_tracker * tc) { - RECT r; - - if(tc->hw_slider && tc->hw_edit) { - GetWindowRect(tc->hw_edit, &r); - SetWindowPos(tc->hw_slider, - NULL, - r.left, r.bottom, - 0, 0, - SWP_NOOWNERZORDER | SWP_NOSIZE | - SWP_NOZORDER | SWP_NOACTIVATE); - } -} - -KHMEXP void KHMAPI -khui_tracker_initialize(khui_tracker * tc) { - ZeroMemory(tc, sizeof(*tc)); -} - -KHMEXP void KHMAPI -khui_tracker_refresh(khui_tracker * tc) { - if (!tc->hw_edit) - return; - - SendMessage(tc->hw_edit, - KHUI_WM_NC_NOTIFY, - MAKEWPARAM(0,WMNC_DIALOG_SETUP), 0); -} - -KHMEXP void KHMAPI -khui_tracker_kill_controls(khui_tracker * tc) { - if (tc->hw_slider) - DestroyWindow(tc->hw_slider); - if (tc->hw_edit) - DestroyWindow(tc->hw_edit); - tc->hw_slider = NULL; - tc->hw_edit = NULL; - tc->fn_edit = NULL; - tc->fn_tracker = NULL; -} diff --git a/src/windows/identity/uilib/uibind.c b/src/windows/identity/uilib/uibind.c deleted file mode 100644 index a03b35da3..000000000 --- a/src/windows/identity/uilib/uibind.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 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$ */ - -#define _NIMLIB_ - -#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 cbdata.rv; -} diff --git a/src/windows/identity/uilib/uilibmain.c b/src/windows/identity/uilib/uilibmain.c deleted file mode 100644 index 25cbcfe33..000000000 --- a/src/windows/identity/uilib/uilibmain.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -#define _NIMLIB_ - -#include<khuidefs.h> - -extern void alert_init(void); -extern void alert_exit(void); -extern void ps_init(void); -extern void ps_exit(void); - -void -uilib_process_attach(void) { - alert_init(); - ps_init(); -} - -void -uilib_process_detach(void) { - ps_exit(); - alert_exit(); -} diff --git a/src/windows/identity/uilib/version.c b/src/windows/identity/uilib/version.c deleted file mode 100644 index 50a15543f..000000000 --- a/src/windows/identity/uilib/version.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -#define _NIMLIB_ - -#include<shlwapi.h> -#include<khuidefs.h> -#include<netidmgr_intver.h> - -DLLVERSIONINFO ver_commctl; - -static void -get_dll_version(wchar_t * dllname, DLLVERSIONINFO * pdvi) { - HINSTANCE hdll; - - hdll = LoadLibrary(dllname); - - ZeroMemory(pdvi, sizeof(*pdvi)); - - if(hdll) { - DLLGETVERSIONPROC pDllGetVersion; - - pDllGetVersion = (DLLGETVERSIONPROC) GetProcAddress(hdll, "DllGetVersion"); - if(pDllGetVersion) { - pdvi->cbSize = sizeof(*pdvi); - - (*pDllGetVersion)(pdvi); - } - FreeLibrary(hdll); - } -} - -KHMEXP void KHMAPI -khm_version_init(void) { - get_dll_version(L"comctl32.dll", &ver_commctl); -} - -KHMEXP void KHMAPI -khm_get_lib_version(khm_version * libver, khm_ui_4 * apiver) { - if (!libver) - return; - - libver->major = KH_VERSION_MAJOR; - libver->minor = KH_VERSION_MINOR; - libver->patch = KH_VERSION_PATCH; - libver->aux = KH_VERSION_AUX; - - if (apiver) - *apiver = KH_VERSION_API; -} - -KHMEXP khm_ui_4 KHMAPI -khm_get_commctl_version(khm_version * pdvi) { - if (pdvi) { - pdvi->major = (khm_ui_2) ver_commctl.dwMajorVersion; - pdvi->minor = (khm_ui_2) ver_commctl.dwMinorVersion; - pdvi->patch = (khm_ui_2) ver_commctl.dwBuildNumber; - pdvi->aux = (khm_ui_2) ver_commctl.dwPlatformID; - } - - return MAKELONG(ver_commctl.dwMinorVersion, ver_commctl.dwMajorVersion); -} diff --git a/src/windows/identity/util/Makefile b/src/windows/identity/util/Makefile deleted file mode 100644 index 07202869f..000000000 --- a/src/windows/identity/util/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -# -# 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 -# (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. - - -MODULE=util -!include <../config/Makefile.w32> - -INCFILES= \ - $(INCDIR)\utils.h \ - $(INCDIR)\hashtable.h \ - $(INCDIR)\mstring.h \ - $(INCDIR)\sync.h \ - $(INCDIR)\perfstat.h - -OBJFILES= \ - $(OBJ)\hashtable.obj \ - $(OBJ)\mstring.obj \ - $(OBJ)\sync.obj \ - $(OBJ)\perfstat.obj - -LIBFILES= - -SDKLIBFILES= - -all: mkdirs $(INCFILES) $(OBJFILES) - -clean:: - if exist ..\obj $(RM) $(INCFILES) diff --git a/src/windows/identity/util/hashtable.c b/src/windows/identity/util/hashtable.c deleted file mode 100644 index 9d3b42cf4..000000000 --- a/src/windows/identity/util/hashtable.c +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -#define _NIMLIB_ - -#include<perfstat.h> -#include<hashtable.h> -#include<stdlib.h> - -KHMEXP hashtable * KHMAPI hash_new_hashtable(khm_int32 n, - hash_function_t hash, - comp_function_t comp, - add_ref_function_t addr, - del_ref_function_t delr) -{ - hashtable * h; - - h = PMALLOC(sizeof(hashtable)); - - h->n = n; - h->addr = addr; - h->comp = comp; - h->delr = delr; - h->hash = hash; - - h->bins = PCALLOC(sizeof(hash_bin *), n); - - return h; -} - -KHMEXP void KHMAPI hash_del_hashtable(hashtable * h) { - hash_bin * b; - int i; - - for(i=0;i<h->n;i++) { - LPOP(&h->bins[i], &b); - while(b) { - if(h->delr) - h->delr(b->key, b->data); - PFREE(b); - LPOP(&h->bins[i], &b); - } - } - - if (h->bins) - PFREE(h->bins); - - PFREE(h); -} - -KHMEXP void KHMAPI hash_add(hashtable * h, const void * key, void * data) { - int hv; - hash_bin * b; - - hv = h->hash(key) % h->n; - b = h->bins[hv]; - while(b) { - if(!h->comp(b->key, key)) { - /* found an existing value */ - if(h->delr) - h->delr(b->key, b->data); - b->key = key; - b->data = data; - if(h->addr) - h->addr(b->key, b->data); - break; - } - b = LNEXT(b); - } - - if(!b) { - b = PMALLOC(sizeof(hash_bin)); - b->data = data; - b->key = key; - LINIT(b); - LPUSH(&h->bins[hv], b); - if(h->addr) - h->addr(b->key, b->data); - } -} - -KHMEXP void KHMAPI hash_del(hashtable * h, const void * key) { - hash_bin * b; - int hv; - - hv = h->hash(key) % h->n; - - b = h->bins[hv]; - while(b) { - if(!h->comp(b->key, key)) { - /* found it */ - LDELETE(&h->bins[hv], b); - if(h->delr) - h->delr(b->key, b->data); - PFREE(b); - break; - } - b = LNEXT(b); - } -} - -KHMEXP void * KHMAPI hash_lookup(hashtable * h, const void * key) { - hash_bin * b; - int hv; - - hv = h->hash(key) % h->n; - - b = h->bins[hv]; - - while(b) { - if(!h->comp(b->key, key)) { - return b->data; - } - b = LNEXT(b); - } - - return NULL; -} - -KHMEXP khm_boolean KHMAPI hash_exist(hashtable * h, const void * key) { - hash_bin * b; - int hv; - - hv = h->hash(key) % h->n; - b = h->bins[hv]; - while(b) { - if(!h->comp(b->key, key)) - return 1; - b = LNEXT(b); - } - - return 0; -} - -KHMEXP khm_int32 hash_string(const void *vs) { - /* DJB algorithm */ - - khm_int32 hv = 13331; - wchar_t * c; - - for(c = (wchar_t *) vs; *c; c++) { - hv = ((hv<<5) + hv) + (khm_int32) *c; - } - - return (hv & KHM_INT32_MAX); -} - -KHMEXP khm_int32 hash_string_comp(const void *vs1, const void *vs2) { - return wcscmp((const wchar_t *) vs1, (const wchar_t *) vs2); -} diff --git a/src/windows/identity/util/hashtable.h b/src/windows/identity/util/hashtable.h deleted file mode 100644 index c9647b5da..000000000 --- a/src/windows/identity/util/hashtable.h +++ /dev/null @@ -1,231 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_HASHTABLE_H -#define __KHIMAIRA_HASHTABLE_H - -/*! \addtogroup util - @{ */ - -/*! \defgroup util_ht Hashtable - @{*/ - -#include<khdefs.h> -#include<khlist.h> - -/*! \brief A hash function - - The function should take a key as a parameter and return an - khm_int32 that serves as the hash of the key. - */ -typedef khm_int32 (*hash_function_t)(const void *key); - -/*! \brief A comparison function - - The function takes two keys and returns a value indicating the - relative ordering of the two keys. - - The return value should be: - - \b Zero if \a key1 == \a key2 - - \b Negative if \a key1 &lt; \a key2 - - \b Positive if \a key1 &gt; \a key2 - */ -typedef khm_int32 (*comp_function_t)(const void *key1, const void *key2); - -/*! \brief Add-reference function - - When an object is successfully added to a hashtable, this function - will be called with the \a key and \a data used to add the object. - The function is allowed to modify \a data, however, the - modification should not alter the \a key or the relationship - between \a key and \a data. - */ -typedef void (*add_ref_function_t)(const void *key, void *data); - -/*! \brief Delete-reference function - - When an object is successfully removed from the hashtable, this - function will be called. As with the add-ref function, the object - can be modified, but the \a key and the relationship between \a - key and \a data should remain intact. - - An object is removed if it is explicitly removed from the - hashtable or another object with the same \a key is added to the - hashtable. There should be a 1-1 correspondence with keys and - objects in the hashtable. The delete-reference function will be - called on all the remaining objects in the hashtable when the - hashtable is deleted. - */ -typedef void (*del_ref_function_t)(const void *key, void *data); - -typedef struct tag_hash_bin { - void * data; - const void * key; - - LDCL(struct tag_hash_bin); -} hash_bin; - -typedef struct hashtable_t { - khm_int32 n; - hash_function_t hash; - comp_function_t comp; - add_ref_function_t addr; - del_ref_function_t delr; - hash_bin ** bins; -} hashtable; - -/*! \brief Create a new hashtable - - \param[in] n Number of bins in hashtable. - \param[in] hash A hash function. Required. - \param[in] comp A comparator. Required. - \param[in] addr An add-ref function. Optional; can be NULL. - \param[in] delr A del-ref function. Optional; can be NULL. - - */ -KHMEXP hashtable * KHMAPI hash_new_hashtable(khm_int32 n, - hash_function_t hash, - comp_function_t comp, - add_ref_function_t addr, - del_ref_function_t delr); - -/*! \brief Delete a hashtable - - \note Not thread-safe. Applications must serialize calls that - reference the same hashtable. - */ -KHMEXP void KHMAPI hash_del_hashtable(hashtable * h); - -/*! \brief Add an object to a hashtable - - Creates an association between the \a key and \a data in the - hashtable \a h. If there is an add-ref function defined for the - hashtable, it will be called with \a key and \data after the - object is added. If there is already an object with the same key - in the hashtable, that object will be removed (and the del-ref - function called, if appilcable) before adding the new object and - before the add-ref function is called for the new object. - - Note that two keys \a key1 and \a key2 are equal (or same) in a - hashtable if the comparator returns zero when called with \a key1 - and \a key2. - - Also note that all additions and removals to the hashtable are - done by reference. No data is copied. Any objects pointed to are - expected to exist for the duration that the object and key are - contained in the hashtable. - - \param[in] h Hashtable - \param[in] key A key. If \a key points to a location in memory, - it should be within the object pointed to by \a data, or be a - constant. Can be NULL. - \param[in] data Data. Cannot be NULL. - - \note Not thread-safe. Applications must serialize calls that - reference the same hashtable. - */ -KHMEXP void KHMAPI hash_add(hashtable * h, const void * key, void * data); - -/*! \brief Delete an object from a hashtable - - Deletes the object in the hashtable \a h that is associated with - key \a key. An object is associated with key \a key if the key \a - key_o that the object is associated with is the same as \a key as - determined by the comparator. If the del-ref function is defined - for the hash-table, it will be called with the \a key_o and \a - data that was used to add the object. - - \note Not thread-safe. Applications must serialize calls that - reference the same hashtable. - */ -KHMEXP void KHMAPI hash_del(hashtable * h, const void * key); - -/*! \brief Resolve and association - - Return the object that is associated with key \a key in hashtable - \a h. An object \a data is associated with key \a key in \a h if - the key \a key_o that was used to add \a data to \a h is equal to - \a key as determined by the comparator. - - Returns NULL if no association is found. - - \note Not thread-safe. Applications must serialize calls that - reference the same hashtable. - */ -KHMEXP void * KHMAPI hash_lookup(hashtable * h, const void * key); - -/*! \brief Check for the presence of an association - - Returns non-zero if there exists an association between key \a key - and some object in hashtable \a h. See hash_lookup() for - definition of "association". - - Returns zero if there is no association. - - \note (hash_lookup(h,key) == NULL) iff (hash_exist(h,key)==0) - - \note Not thead-safe. Application must serialize calls that - reference the same hashtable. - */ -KHMEXP khm_boolean KHMAPI hash_exist(hashtable * h, const void * key); - -/*! \brief Compute a hashvalue for a unicode string - - The hash value is computed using DJB with parameter 13331. - - This function is suitable for use as the hash function for a - hashtable if the keys are NULL terminated safe unicode strings - that are either part of the data objects or are constants. - - \param[in] str A pointer to a NULL terminated wchar_t string cast - as (void *). - - \note This function does not check the length of the string \a - str. If the string is not \a NULL terminated, the behavior is - undefined. - */ -KHMEXP khm_int32 hash_string(const void *str); - -/*! \brief Compare two strings - - Compares two strings are returns a value that is in accordance - with the comparator for a hashtable. - - \param[in] vs1 A pointer to a NULL terminated wchar_t string cast - as (void *). - \param[in] vs2 A pointer to a NULL terminated wchar_t string cast - as (void *). - - \note This function does not check the length of the strings \a - vs1 and \a vs2. If the strings are not NULL terminated, the - behavior is undefined. - */ -KHMEXP khm_int32 hash_string_comp(const void *vs1, const void *vs2); - -/*@}*/ -/*@}*/ - -#endif diff --git a/src/windows/identity/util/mstring.c b/src/windows/identity/util/mstring.c deleted file mode 100644 index 0d5c86178..000000000 --- a/src/windows/identity/util/mstring.c +++ /dev/null @@ -1,512 +0,0 @@ -/* -* Copyright (c) 2005 Massachusetts Institute of Technology -* -* 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$ */ - -#define _NIMLIB_ - -#include<mstring.h> -#include<kherror.h> -#include<strsafe.h> -#include<stdlib.h> - -#define TRUE 1 -#define FALSE 0 - -KHMEXP khm_int32 KHMAPI -multi_string_init(wchar_t * ms, - khm_size cb_ms) { - if (!ms || cb_ms < sizeof(wchar_t) * 2) - return KHM_ERROR_INVALID_PARAM; - - memset(ms, 0, cb_ms); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -multi_string_append(wchar_t * ms, - khm_size * pcb_ms, - const wchar_t * str) -{ - wchar_t * s; - size_t cch_s; - size_t cch_t; - size_t cch_r; - - if(!ms || !pcb_ms || !str) - return KHM_ERROR_INVALID_PARAM; - - if(FAILED(StringCchLength(str, KHM_MAXCCH_STRING, &cch_s)) || cch_s == 0) - return KHM_ERROR_INVALID_PARAM; - cch_s++; - - s = ms; - - while(*s && ((s - ms) < KHM_MAXCCH_STRING)) { - if(FAILED(StringCchLength(s, KHM_MAXCB_STRING, &cch_t))) - return KHM_ERROR_INVALID_PARAM; - s += cch_t + 1; - } - - if(*s || (s - ms) >= KHM_MAXCCH_STRING) { - return KHM_ERROR_INVALID_PARAM; - } - - /* now s points to the second NULL of the terminating double NULL */ - - cch_r = ((s - ms) + cch_s + 1) * sizeof(wchar_t); - if(*pcb_ms < cch_r) { - *pcb_ms = cch_r; - return KHM_ERROR_TOO_LONG; - } - - *pcb_ms = cch_r; - - StringCchCopy(s, cch_s, str); - s += cch_s; - *s = 0; - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -multi_string_prepend(wchar_t * ms, - khm_size * pcb_ms, - const wchar_t * str) -{ - size_t cch_s; - size_t cch_t; - size_t cch_r; - khm_size cb_r; - - if(!ms || !pcb_ms || !str) - return KHM_ERROR_INVALID_PARAM; - - if(FAILED(StringCchLength(str, KHM_MAXCCH_STRING, &cch_s)) || cch_s == 0) - return KHM_ERROR_INVALID_PARAM; - cch_s++; - - if(KHM_FAILED(multi_string_length_cch(ms, - KHM_MAXCCH_STRING, - &cch_r))) - return KHM_ERROR_INVALID_PARAM; - - cch_t = cch_s + cch_r; - cb_r = cch_t * sizeof(wchar_t); - - if (*pcb_ms < cb_r) { - *pcb_ms = cb_r; - return KHM_ERROR_TOO_LONG; - } - - memmove(ms + cch_s, ms, cch_r * sizeof(wchar_t)); - memcpy(ms, str, cch_s * sizeof(wchar_t)); - - *pcb_ms = cb_r; - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -multi_string_delete(wchar_t * ms, - const wchar_t * str, - const khm_int32 flags) -{ - wchar_t * s; - wchar_t * n; - wchar_t * e; - size_t cch; - - if(!ms || !str) - return KHM_ERROR_INVALID_PARAM; - - s = multi_string_find(ms, str, flags); - if(!s) - return KHM_ERROR_NOT_FOUND; - - e = s; - n = NULL; - while(*e && (e - s) < KHM_MAXCCH_STRING) { - if(FAILED(StringCchLength(e, KHM_MAXCCH_STRING, &cch))) - return KHM_ERROR_INVALID_PARAM; - e += cch + 1; - - if(!n) - n = e; - } - - if(*e || (e - s) >= KHM_MAXCCH_STRING) - return KHM_ERROR_INVALID_PARAM; - - if(e == s) - return KHM_ERROR_SUCCESS; - - memmove((void *) s, (void *) n, ((e - n) + 1) * sizeof(wchar_t)); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP wchar_t * KHMAPI -multi_string_find(const wchar_t * ms, - const wchar_t * str, - const khm_int32 flags) -{ - const wchar_t *s; - size_t cch; - size_t cch_s; - - if(!ms || !str) - return NULL; - - if(FAILED(StringCchLength(str, KHM_MAXCCH_STRING, &cch_s))) - return NULL; - - s = ms; - - while(*s && (s - ms) < KHM_MAXCCH_STRING) { - if(FAILED(StringCchLength(s, KHM_MAXCCH_STRING, &cch))) - return NULL; - /* cch++ at end */ - - if(flags & KHM_PREFIX) { - if(((flags & KHM_CASE_SENSITIVE) && !wcsncmp(s, str, cch_s)) || - (!(flags & KHM_CASE_SENSITIVE) && !_wcsnicmp(s, str, cch_s))) - return (wchar_t *) s; - } else { - if((cch == cch_s) && - ((flags & KHM_CASE_SENSITIVE) && !wcsncmp(s, str, cch)) || - (!(flags & KHM_CASE_SENSITIVE) && !_wcsnicmp(s, str, cch))) - return (wchar_t *) s; - } - - s += cch + 1; - } - - return NULL; -} - -KHMEXP khm_int32 KHMAPI -multi_string_to_csv(wchar_t * csvbuf, - khm_size * pcb_csvbuf, - const wchar_t * ms) -{ - size_t cb; - size_t cbt; - const wchar_t * t; - wchar_t * d; - - if(!pcb_csvbuf || !ms) - return KHM_ERROR_INVALID_PARAM; - - /* dry run */ - cbt = 0; - t = ms; - while(*t && cbt <= KHM_MAXCB_STRING) { - khm_boolean quotes = FALSE; - - if(FAILED(StringCbLength(t, KHM_MAXCB_STRING, &cb))) - return KHM_ERROR_INVALID_PARAM; - cb += sizeof(wchar_t); - - cbt += cb; - - if(wcschr(t, L',')) - quotes = TRUE; - - d = (wchar_t *) t; - while(d = wcschr(d, L'"')) { - cbt += sizeof(wchar_t); /* '"'-> '""' */ - d++; - quotes = TRUE; - } - - if(quotes) - cbt += 2*sizeof(wchar_t); /* make room for quotes */ - - t += cb / sizeof(wchar_t); - } - - if(cbt > KHM_MAXCB_STRING) - return KHM_ERROR_INVALID_PARAM; - - /* happens if the multi string contained no strings */ - if(cbt == 0) - cbt = sizeof(wchar_t); - - if(!csvbuf || *pcb_csvbuf < cbt) - { - *pcb_csvbuf = cbt; - return KHM_ERROR_TOO_LONG; - } - - *pcb_csvbuf = cbt; - - /* wet run */ - t = ms; - d = csvbuf; - *csvbuf = 0; - while(*t) { - const wchar_t * s; - - StringCbLength(t, KHM_MAXCB_STRING, &cb); - cb += sizeof(wchar_t); - - if(d != csvbuf) - *d++ = L','; - if(wcschr(t, L',') || wcschr(t, L'"')) { - *d++ = L'"'; - s = t; - while(*s) { - if(*s == L'"') { - *d++ = L'"'; - *d++ = L'"'; - } else - *d++ = *s; - s++; - } - *d++ = L'"'; - *d = 0; - } else { - StringCbCopy(d, cbt - ((d - csvbuf) * sizeof(wchar_t)), t); - d += cb / sizeof(wchar_t) - 1; - } - t += cb / sizeof(wchar_t); - } - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -csv_to_multi_string(wchar_t * ms, - khm_size * pcb_ms, - const wchar_t * csv) -{ - const wchar_t * t; - wchar_t * p; - size_t cchr; - int field = 1; - - - if(!pcb_ms || !csv) - return KHM_ERROR_INVALID_PARAM; - - cchr = 0; - - /* dry run */ - t = csv; - while(*t && (t - csv) < KHM_MAXCCH_STRING) { - if(field && *t == L'"') { - t++; - while(*t && (t - csv) < KHM_MAXCCH_STRING) { - if(*t == L'"') { - t++; - if(*t != L'"') - break; - } - cchr++; - t++; - } - } - - if(*t) { - cchr++; - if(*t == L',') - field = 1; - else - field = 0; - - t++; - } - } - - if((t - csv) >= KHM_MAXCCH_STRING) - return KHM_ERROR_INVALID_PARAM; - - cchr++; /* last string ends */ - cchr++; /* double NULL */ - - if(!ms || *pcb_ms < (cchr * sizeof(wchar_t))) { - *pcb_ms = cchr * sizeof(wchar_t); - return KHM_ERROR_TOO_LONG; - } - - /* wet run */ - t = csv; - p = ms; - field = 1; - while(*t) { - if(field && *t == L'"') { - t++; - while(*t) { - if(*t == L'"') { - t++; - if(*t != L'"') - break; - } - *p++ = *t; - t++; - } - } - - if(*t == L',') { - *p++ = 0; - field = 1; - t++; - } else if(*t) { - *p++ = *t; - field = 0; - t++; - } - } - - *p++ = 0; /* last string ends */ - *p++ = 0; /* double NULL */ - - *pcb_ms = (p - ms) * sizeof(wchar_t); - - return KHM_ERROR_SUCCESS; -} - -KHMEXP wchar_t * KHMAPI -multi_string_next(const wchar_t * str) -{ - size_t cch; - - if(*str) { - if(FAILED(StringCchLength(str, KHM_MAXCCH_STRING, &cch))) - return NULL; - str += cch + 1; - if(*str) - return (wchar_t *) str; - else - return NULL; - } else { - return NULL; - } -} - -KHMEXP khm_size KHMAPI -multi_string_length_n(const wchar_t * str) -{ - size_t n = 0; - const wchar_t * c = str; - - while(c) { - n++; - c = multi_string_next(c); - } - - return n; -} - -KHMEXP khm_int32 KHMAPI -multi_string_length_cb(const wchar_t * str, - khm_size max_cb, - khm_size * len_cb) -{ - khm_size cch; - khm_int32 rv; - - rv = multi_string_length_cch(str, max_cb / sizeof(wchar_t), &cch); - - if(KHM_FAILED(rv)) - return rv; - - if(len_cb) - *len_cb = cch * sizeof(wchar_t); - - return rv; -} - -KHMEXP khm_int32 KHMAPI -multi_string_length_cch(const wchar_t * str, - khm_size max_cch, - khm_size * len_cch) -{ - const wchar_t * s; - khm_size cch; - size_t tcch; - - if(!str) - return KHM_ERROR_INVALID_PARAM; - - s = str; - cch = 0; - while(*s && (cch < max_cch)) { - if(FAILED(StringCchLength(s, max_cch, &tcch))) - return KHM_ERROR_TOO_LONG; - cch += ++tcch; - s += tcch; - } - - if(cch >= max_cch) - return KHM_ERROR_TOO_LONG; - - if(len_cch) { - *len_cch = ++cch; - } - - return KHM_ERROR_SUCCESS; -} - -KHMEXP khm_int32 KHMAPI -multi_string_copy_cb(wchar_t * s_dest, - khm_size max_cb_dest, - const wchar_t * src) -{ - khm_size cb_dest; - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(!s_dest) - return KHM_ERROR_INVALID_PARAM; - - rv = multi_string_length_cb(src, max_cb_dest, &cb_dest); - if(KHM_FAILED(rv)) - return rv; - - memmove(s_dest, src, cb_dest); - - return rv; -} - -KHMEXP khm_int32 KHMAPI -multi_string_copy_cch(wchar_t * s_dest, - khm_size max_cch_dest, - const wchar_t * src) -{ - khm_size cch_dest; - khm_int32 rv = KHM_ERROR_SUCCESS; - - if(!s_dest) - return KHM_ERROR_INVALID_PARAM; - - rv = multi_string_length_cch(src, max_cch_dest, &cch_dest); - if(KHM_FAILED(rv)) - return rv; - - memmove(s_dest, src, cch_dest * sizeof(wchar_t)); - - return rv; -} diff --git a/src/windows/identity/util/mstring.h b/src/windows/identity/util/mstring.h deleted file mode 100644 index 3eebb4317..000000000 --- a/src/windows/identity/util/mstring.h +++ /dev/null @@ -1,361 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_MSTRING_H -#define __KHIMAIRA_MSTRING_H - -#include<khdefs.h> - -/*! \addtogroup util - @{ */ - -/*! \defgroup util_mstring Multi String and CSV functions - @{*/ - -#define KHM_PREFIX 8 - -#define KHM_CASE_SENSITIVE 16 - -#define KHM_MAXCCH_STRING 16384 - -#define KHM_MAXCB_STRING (KHM_MAXCCH_STRING * sizeof(wchar_t)) - -/*! \brief Initialize a multi-string - */ -KHMEXP khm_int32 KHMAPI -multi_string_init(wchar_t * ms, - khm_size cb_ms); - -/*! \brief Prepend a string to a multi string - - Adds the string \a str to the beginning of multi-string \a ms. - - \param[in,out] ms The multi-string to be modified. - - \param[in,out] pcb_ms A pointer to the size of the multistring. - On entry this specifies the size of the buffer pointed to by - \a ms. If the call is successful, on exit this will receive - the new size of the multi string in bytes. If the buffer is - insufficient, the function will return KHM_ERROR_TOO_LONG and - set this to the required size of the buffer in bytes. - - \param[in] str The string to prepend to \a ms. This cannot be - longer than KHM_MAXCCH_STRING in characters including the - terminating NULL. - */ -KHMEXP khm_int32 KHMAPI -multi_string_prepend(wchar_t * ms, - khm_size * pcb_ms, - const wchar_t * str); - -/*! \brief Append a string to a multi-string - - Appends the string specified by \a str to the multi string - specified by \a ms. The size of the multi string in characters - including terminating NULLs after appending \a str can not exceed - KHM_MAXCCH_STRING. - - \param[in] ms The buffer containing the multi string - - \param[in,out] pcb_ms Points to a khm_int32 indicating the size of - the buffer pointed to by \a ms. On entry this contains the - size (in bytes) of the buffer pointed to by \a ms. On exit, - contains the new size of the multi string in bytes. - - \param[in] str The string to append to the multi string. This - string cannot be NULL or an empty (zero length) string. The - length of \a str cannot exceed KHM_MAXCCH_STRING in - characters including terminating NULL. - - \retval KHM_ERROR_SUCCESS The string was appended to the multi string - - \retval KHM_ERROR_TOO_LONG The buffer pointed to by \a ms was - insufficient. The required size of the buffer is in \a pcb_ms - - \retval KHM_ERROR_INVALID_PARAM One of more of the parameters were invalid. - */ -KHMEXP khm_int32 KHMAPI -multi_string_append(wchar_t * ms, - khm_size * pcb_ms, - const wchar_t * str); - -/*! \brief Deletes a string from a multi string - - Deletes the string specified by \a str from the multi string - specified by \a ms. How the string is matched to the strings in - \a ms is determined by \a flags. If more than one match is found, - then only the first match is deleted. - - \param[in] ms The multi string to modify. The length of the multi - string in characters cannot exceed KHM_MAXCCH_STRING. - - \param[in] str The string to search for - - \param[in] flags How \a str is to be matched to existing strings - in \a ms. This could be a combination of KHM_PREFIX and - KHM_CASE_SENSITIVE. If KHM_PREFIX is used, then \a ms is - searched for a string that begins with \a str. Otherwise, \a - str must match the an entire string in the multi string. If - KHM_CASE_SENSITIVE is specified, then a case sensitive match - is performed. The defualt is to use a case insensitive - search. - - \retval KHM_ERROR_SUCCESS A string was matched and deleted from \a ms - - \retval KHM_ERROR_NOT_FOUND No matches were found - - \retval KHM_ERROR_INVALID_PARAM One or more parameters were incorrect. - - \note The search for the existing string is done with - multi_string_find() - */ -KHMEXP khm_int32 KHMAPI -multi_string_delete(wchar_t * ms, - const wchar_t * str, - const khm_int32 flags); - -/*! \brief Search a multi string for a string - - Searches the string specified by \a ms for a string that matches - \a str. How the match is performed is determined by \a flags. - Returns a poitner to the start of the matched string in \a ms. If - more than one string in \a ms matches \a str, then only the first - match is returned. - - \param[in] ms The multi string to search in. The length of the - multi string cannot exceed KHM_MAXCCH_STRING in characters. - - \param[in] str The string to search for - - \param[in] flags How \a str is to be matched to existing strings - in \a ms. This could be a combination of KHM_PREFIX and - KHM_CASE_SENSITIVE. If KHM_PREFIX is used, then \a ms is - searched for a string that begins with \a str. Otherwise, \a - str must match the an entire string in the multi string. If - KHM_CASE_SENSITIVE is specified, then a case sensitive match - is performed. The defualt is to use a case insensitive - search. - - \return A pointer to the start of the first matched string or - NULL if no matches were found. - - */ -KHMEXP wchar_t * KHMAPI -multi_string_find(const wchar_t * ms, - const wchar_t * str, - const khm_int32 flags); - -/*! \brief Convert a multi string to CSV - - Converts a multi string to a comma separated value string based on - the following rules. - - - Each string in the multi string is treated an individual field - - - A field is quoted if it has double quotes or commas - - - Double quotes within quoted fields are escaped by two - consecutive double quotes. - - For example: - - \code - multi_string = L"foo\0bar\0baz,quux\0ab\"cd\0"; - csv_string = L"foo,bar,\"baz,quux\",\"ab\"\"cd\""; - \endcode - - If multi_string_to_csv() is called on \a multi_string above, - you would obtain \a csv_string. - - \param[out] csvbuf The buffer to place the CSV string in. Can be - NULL if only teh size of the needed buffer is required. - - \param[in,out] pcb_csvbuf On entry, points to a khm_int32 that - holds the size of the buffer pointed to by \a csvbuf. On - exit, gets the number of bytes writted to \a csvbuf or the - required size of \a csvbuf if the buffer is too small or \a - csvbuf is NULL. - - \param[in] ms The mutli string to convert to a CSV. - - \retval KHM_ERROR_SUCCESS The multi string was successfully - converted to a CSV string. The number of bytes written is in - \a pcb_csvbuf. The count includes the terminating NULL. - - \retval KHM_ERROR_TOO_LONG The buffer was too small or \a csvbuf - was NULL. The required number of bytes in the buffer is in \a - pcb_csvbuf. - - \retval KHM_ERROR_INVALID_PARAM One or more parameters were ivnalid. - - \see csv_to_multi_string() -*/ -KHMEXP khm_int32 KHMAPI -multi_string_to_csv(wchar_t * csvbuf, - khm_size * pcb_csvbuf, - const wchar_t * ms); - -/*! \brief Converts a CSV to a multi string - - Undoes what multi_string_to_csv() does. - - \param[out] ms The buffer that recieves the multi string. This - can be NULL if only the size of the buffer is requried. - - \param[in,out] pcb_ms On entry contains the number of bytes ni the - buffer poitned to by \a ms. On exit contains the number of - bytes that were copied to \a ms including terminating NULLs, - or if the buffer was too small or \a ms was NULL, holds the - size in bytes of the requied buffer. - - \param[in] csv The CSV string. - - \retval KHM_ERROR_SUCCESS The CSV string was successfully - converted. The number of bytes written is in \a pcb_ms. - - \retval KHM_ERROR_TOO_LONG The provided buffer was too small or \a - ms was NULL. The required size of the buffer in bytes is in \a - pcb_ms. - - \retval KHM_ERROR_INVALID_PARAM One or more parameters were invalid. - - */ -KHMEXP khm_int32 KHMAPI -csv_to_multi_string(wchar_t * ms, - khm_size * pcb_ms, - const wchar_t * csv); - -/*! \brief Get the next string in a multi string - - When \a str is pointing to a string that is in a multi string, - this function returns a pointer to the next string in the multi - string. - - Typically, one would start by having \a str point to the start of - the multi string (which is the first string in the multi string), - and then call this function repeatedly, until it returns NULL, at - which point the end of the multi string has been reached. - - \param[in] str Pointer to a string in a multi string. Each string - in a multi string cannot exceed KHM_MAXCCH_STRING in charaters - including the terminating NULL. - - \return A pointer to the start of the next string in the multi - string or NULL if there is no more strings. - */ -KHMEXP wchar_t * KHMAPI -multi_string_next(const wchar_t * str); - -/*! \brief Get the length of a multi string in bytes - - The returned length includes the trailing double \a NULL and any - other \a NULL inbetween. - - \param[in] str Pointer to a multi string. - \param[in] max_cb Maximum size that the str can be. This can not - be larger than KHM_MAXCB_STRING. - \param[out] len_cb The length of the string in bytes if the call - is successful. - - \retval KHM_ERROR_SUCCESS The length of the string is in \a len_cb - \retval KHM_ERROR_INVALID_PARAM One or more parameters were invalid - \retval KHM_ERROR_TOO_LONG The multi string is longer than \a - max_cb bytes. - */ -KHMEXP khm_int32 KHMAPI -multi_string_length_cb(const wchar_t * str, - khm_size max_cb, - khm_size * len_cb); - -/*! \brief Get the length of a multi string in characters - - The returned length includes the trailing double \a NULL and any - other \a NULL inbetween. - - \param[in] str Pointer to a multi string. - \param[in] max_cch Maximum size that the str can be. This can not - be larger than KHM_MAXCCH_STRING. - \param[out] len_cch The length of the string in characters if the call - is successful. - - \retval KHM_ERROR_SUCCESS The length of the string is in \a len_cch - \retval KHM_ERROR_INVALID_PARAM One or more parameters were invalid - \retval KHM_ERROR_TOO_LONG The multi string is longer than \a - max_cch characters. - */ -KHMEXP khm_int32 KHMAPI -multi_string_length_cch(const wchar_t * str, - khm_size max_cch, - khm_size * len_cch); - -/*! \brief Get the number of strings in a multi string - */ -KHMEXP khm_size KHMAPI -multi_string_length_n(const wchar_t * str); - -/*! \brief Copy a multi string with byte counts - - Copy a multi string from one location to another. - - \param[out] s_dest Receives a copy of the multi string - \param[in] max_cb_dest Number of bytes in the buffer pointed to by - \a s_dest. - \param[in] src The source multi string - - \retval KHM_ERROR_SUCCESS The multi string was copied successfully - \retval KHM_ERROR_INVALID_PARAM One or more parameters were - invalid. - \retval KHM_ERROR_TOO_LONG The size of the destination buffer was - insufficient. - */ -KHMEXP khm_int32 KHMAPI -multi_string_copy_cb(wchar_t * s_dest, - khm_size max_cb_dest, - const wchar_t * src); - -/*! \brief Copy a multi string with character count - - Copy a multi string from one location to another. - - \param[out] s_dest Receives a copy of the multi string - \param[in] max_cb_dest Number of characters in the buffer pointed - to by \a s_dest. - \param[in] src The source multi string - - \retval KHM_ERROR_SUCCESS The multi string was copied successfully - \retval KHM_ERROR_INVALID_PARAM One or more parameters were - invalid. - \retval KHM_ERROR_TOO_LONG The size of the destination buffer was - insufficient. - */ -KHMEXP khm_int32 KHMAPI -multi_string_copy_cch(wchar_t * s_dest, - khm_size max_cch_dest, - const wchar_t * src); - -/*@}*/ - -#endif diff --git a/src/windows/identity/util/perfstat.c b/src/windows/identity/util/perfstat.c deleted file mode 100644 index 6eddb4697..000000000 --- a/src/windows/identity/util/perfstat.c +++ /dev/null @@ -1,459 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -#define _NIMLIB_ - -#include<windows.h> -#include<utils.h> -#include<crtdbg.h> -#include<malloc.h> -#include<stdio.h> -#include<strsafe.h> -#include<assert.h> - -#define HASHSIZE 1151 -#define ALLOCBLOCK 1024 - -#define HASHPTR(p) (((size_t) (p)) % HASHSIZE) - -typedef struct tag_allocation { - const char * file; - int line; - size_t size; - void * ptr; -#ifdef _WIN32 - DWORD thread; -#endif - - LDCL(struct tag_allocation); -} allocation; - -static allocation * ht[HASHSIZE]; - -static allocation * next_alloc = NULL; -static size_t idx_next_alloc = 0; -static allocation * free_alloc = NULL; - -typedef struct tag_thread_info { -#ifdef _WIN32 - DWORD thread; -#else -#error Unsupported platform -#endif - wchar_t name[128]; - wchar_t creator[128]; - - const char * file; - int line; - - LDCL(struct tag_thread_info); -} thread_info; - -static thread_info * threads = NULL; - -static hashtable fn_hash; - -static CRITICAL_SECTION cs_alloc; -static LONG ctr = 0; -static int perf_ready = 0; - -static DWORD init_thread = 0; - -#ifdef _DEBUG -/* */ -#define OPS_TILL_MEM_CHECK 1024 -static int ops_till_mem_check = OPS_TILL_MEM_CHECK; -#endif - -#define _PERF_BLOCK_TYPE(t) (_CLIENT_BLOCK | ((t) << 16)) -#define _RMEM_BLOCK _PERF_BLOCK_TYPE(0) -#define _PERF_BLOCK _PERF_BLOCK_TYPE(1) - -static khm_int32 hash_stringA(const void * vs) { - /* DJB algorithm */ - - khm_int32 hv = 13331; - char * c; - - for (c = (char *) vs; *c; c++) { - hv = ((hv << 5) + hv) + (khm_int32) *c; - } - - return (hv & KHM_INT32_MAX); -} - -static khm_int32 hash_string_compA(const void * vs1, - const void * vs2) { - return strcmp((const char *) vs1, (const char *) vs2); -} - -static void perf_once(void) { - if (InterlockedIncrement(&ctr) == 1) { - InitializeCriticalSection(&cs_alloc); - ZeroMemory(ht, sizeof(ht)); - - next_alloc = _malloc_dbg(sizeof(allocation) * ALLOCBLOCK, _PERF_BLOCK, - __FILE__, __LINE__); - assert(next_alloc); - idx_next_alloc = 0; - free_alloc = NULL; - - ZeroMemory(&fn_hash, sizeof(fn_hash)); - fn_hash.n = 13; - fn_hash.hash = hash_stringA; - fn_hash.comp = hash_string_compA; - fn_hash.bins = _calloc_dbg(fn_hash.n, sizeof(hash_bin *), - _PERF_BLOCK, __FILE__, __LINE__); - - perf_ready = 1; - } else { - DWORD this_thread = GetCurrentThreadId(); - - while(!perf_ready && - init_thread != this_thread) { - Sleep(0); /* relinquish control to the thread - that is initializing the alloc - data. */ - } - } -} - -static allocation * get_allocation(void) { - allocation * a; - - LPOP(&free_alloc, &a); - if (!a) { - if (idx_next_alloc == ALLOCBLOCK) { - next_alloc = _malloc_dbg(sizeof(allocation) * ALLOCBLOCK, - _PERF_BLOCK, - __FILE__, __LINE__); - assert(next_alloc); - idx_next_alloc = 0; - } - - a = &next_alloc[idx_next_alloc]; - idx_next_alloc++; - } - - return a; -} - -#define MAXCB_STR 32768 - -KHMEXP wchar_t * -perf_wcsdup(const char * file, int line, const wchar_t * str) { - size_t cb; - wchar_t * dest; - - if (FAILED(StringCbLength(str, MAXCB_STR, &cb))) - return NULL; - cb += sizeof(wchar_t); - - dest = (wchar_t *) perf_malloc(file, line, cb); - StringCbCopy(dest, cb, str); - - return dest; -} - -KHMEXP char * -perf_strdup(const char * file, int line, const char * str) { - size_t cb; - char * dest; - - if (FAILED(StringCbLengthA(str, MAXCB_STR, &cb))) - return NULL; - cb += sizeof(char); - - dest = (char *) perf_malloc(file, line, cb); - StringCbCopyA(dest, cb, str); - - return dest; -} - -KHMEXP void * -perf_calloc(const char * file, int line, size_t num, size_t size) { - void * ptr; - size_t tsize; - - tsize = num * size; - - ptr = perf_malloc(file,line,tsize); - - if (ptr) { - ZeroMemory(ptr, tsize); - } - - return ptr; -} - -KHMEXP void * -perf_malloc(const char * file, int line, size_t s) { - allocation * a; - void * ptr; - size_t h; - char * fn_copy = NULL; - - perf_once(); - - assert(s > 0); - - EnterCriticalSection(&cs_alloc); - a = get_allocation(); - - ptr = _malloc_dbg(s, _RMEM_BLOCK, file, line); - - assert(ptr); /* TODO: handle this gracefully */ - - if (file[0] == '.' && file[1] == '\\') - file += 2; - - fn_copy = hash_lookup(&fn_hash, file); - if (fn_copy == NULL) { - - size_t cblen = 0; - if (FAILED(StringCbLengthA(file, MAX_PATH * sizeof(char), - &cblen))) - fn_copy = NULL; - else { - fn_copy = _malloc_dbg(cblen + sizeof(char), _PERF_BLOCK, - __FILE__, __LINE__); - if (fn_copy) { - hash_bin * b; - int hv; - - StringCbCopyA(fn_copy, cblen + sizeof(char), file); - - hv = fn_hash.hash(fn_copy) % fn_hash.n; - - b = _malloc_dbg(sizeof(*b), _PERF_BLOCK, - __FILE__, __LINE__); - b->data = fn_copy; - b->key = fn_copy; - LINIT(b); - LPUSH(&fn_hash.bins[hv], b); - } - } - } - - a->file = fn_copy; - a->line = line; - a->size = s; - a->ptr = ptr; -#ifdef _WIN32 - a->thread = GetCurrentThreadId(); -#endif - - h = HASHPTR(ptr); - - LPUSH(&ht[h], a); - -#ifdef _DEBUG - if (-- ops_till_mem_check <= 0) { - assert(_CrtCheckMemory()); - ops_till_mem_check = OPS_TILL_MEM_CHECK; - } -#endif - - LeaveCriticalSection(&cs_alloc); - - return ptr; -} - -KHMEXP void * -perf_realloc(const char * file, int line, void * data, size_t s) { - void * n_data; - allocation * a; - size_t h; - - if (data == NULL) - return perf_malloc(file, line, s); - - perf_once(); - h = HASHPTR(data); - - n_data = _realloc_dbg(data, s, _RMEM_BLOCK, - __FILE__, __LINE__); - - assert(n_data); - - EnterCriticalSection(&cs_alloc); - for (a = ht[h]; a; a = LNEXT(a)) { - if (a->ptr == data) - break; - } - - assert(a); - - LDELETE(&ht[h], a); - - a->size = s; - a->ptr = n_data; - - h = HASHPTR(n_data); - LPUSH(&ht[h], a); - -#ifdef _DEBUG - if (-- ops_till_mem_check <= 0) { - assert(_CrtCheckMemory()); - ops_till_mem_check = OPS_TILL_MEM_CHECK; - } -#endif - - LeaveCriticalSection(&cs_alloc); - - return n_data; -} - -KHMEXP void -perf_free (void * b) { - size_t h; - allocation * a; - - perf_once(); - h = HASHPTR(b); - - EnterCriticalSection(&cs_alloc); - for(a = ht[h]; a; a = LNEXT(a)) { - if (a->ptr == b) - break; - } - - assert(a); - - if (a) { - LDELETE(&ht[h], a); - LPUSH(&free_alloc, a); - - _free_dbg(b, _RMEM_BLOCK); - } - -#ifdef _DEBUG - if (-- ops_till_mem_check <= 0) { - assert(_CrtCheckMemory()); - ops_till_mem_check = OPS_TILL_MEM_CHECK; - } -#endif - - LeaveCriticalSection(&cs_alloc); -} - -KHMEXP void KHMAPI -perf_dump(FILE * f) { - size_t i; - allocation * a; - size_t total = 0; - thread_info * t; - - perf_once(); - - EnterCriticalSection(&cs_alloc); - - fprintf(f, "p00\t*** Threads ***\n"); - fprintf(f, "p00\tFile\tLine\tThread\tName\tCreated by\n"); - - for (t = threads; t; t = LNEXT(t)) { - fprintf(f, "p01\t%s\t%6d\t%6d\t%S\t%S\n", - t->file, t->line, t->thread, - t->name, t->creator); - } - - fprintf(f, "p02\t--- End Threads ---\n"); - - fprintf(f, "p10\t*** Leaked allocations list ***\n"); - fprintf(f, "p11\tFile\tLine\tThread\tSize\tAddress\n"); - - for (i=0; i < HASHSIZE; i++) { - for (a = ht[i]; a; a = LNEXT(a)) { - fprintf(f, "p12\t%s\t%6d\t%6d\t%6d\t0x%p\n", a->file, a->line, - a->thread, a->size, a->ptr); - total += a->size; - } - } - - fprintf(f, "p20\t----------------------------------------\n"); - fprintf(f, "p21\tTotal\t\t%d\n", total); - fprintf(f, "p22\t----------------- End ------------------\n"); - - LeaveCriticalSection(&cs_alloc); -} - -KHMEXP void -perf_set_thread_desc(const char * file, int line, - const wchar_t * name, const wchar_t * creator) { - thread_info * t; - char * fn_copy; - - perf_once(); - - t = malloc(sizeof(*t)); - ZeroMemory(t, sizeof(*t)); - -#ifdef _WIN32 - t->thread = GetCurrentThreadId(); -#else -#error Unsupported platform -#endif - - StringCbCopy(t->name, sizeof(t->name), name); - if (creator) - StringCbCopy(t->creator, sizeof(t->creator), creator); - - if (file[0] == '.' && file[1] == '\\') - file += 2; - - EnterCriticalSection(&cs_alloc); - - fn_copy = hash_lookup(&fn_hash, file); - if (fn_copy == NULL) { - size_t cblen = 0; - if (FAILED(StringCbLengthA(file, MAX_PATH * sizeof(char), - &cblen))) - fn_copy = NULL; - else { - fn_copy = malloc(cblen + sizeof(char)); - if (fn_copy) { - hash_bin * b; - int hv; - - StringCbCopyA(fn_copy, cblen + sizeof(char), file); - - hv = fn_hash.hash(fn_copy) % fn_hash.n; - - b = malloc(sizeof(*b)); - b->data = fn_copy; - b->key = fn_copy; - LINIT(b); - LPUSH(&fn_hash.bins[hv], b); - } - } - } - - t->file = fn_copy; - t->line = line; - - LPUSH(&threads, t); - LeaveCriticalSection(&cs_alloc); -} diff --git a/src/windows/identity/util/perfstat.h b/src/windows/identity/util/perfstat.h deleted file mode 100644 index 0f356583c..000000000 --- a/src/windows/identity/util/perfstat.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_PERFSTAT_H -#define __KHIMAIRA_PERFSTAT_H - -#include<khdefs.h> - -#ifdef DEBUG -#define PMALLOC(s) perf_malloc(__FILE__,__LINE__,s) -#define PCALLOC(n,s) perf_calloc(__FILE__,__LINE__,n,s) -#define PREALLOC(d,s) perf_realloc(__FILE__,__LINE__,d,s) -#define PFREE(p) perf_free(p) -#define PDUMP(f) perf_dump(f) -#define PWCSDUP(s) perf_wcsdup(__FILE__,__LINE__,s) -#define PSTRDUP(s) perf_strdup(__FILE__,__LINE__,s) -#define PDESCTHREAD(n,c) perf_set_thread_desc(__FILE__,__LINE__,n,c); -#else -#define PMALLOC(s) malloc(s) -#define PCALLOC(n,s) calloc(n,s) -#define PREALLOC(d,s) realloc(d,s) -#define PFREE(p) free(p) -#define PDUMP(f) ((void) 0) -#define PWCSDUP(s) _wcsdup(s) -#define PSTRDUP(s) strdup(s) -#define PDESCTHREAD(n,c) -#endif - -KHMEXP void * -perf_malloc(const char * file, int line, size_t s); - -KHMEXP void * -perf_realloc(const char * file, int line, void * data, size_t s); - -KHMEXP void -perf_free (void * b); - -KHMEXP wchar_t * -perf_wcsdup(const char * file, int line, const wchar_t * str); - -KHMEXP char * -perf_strdup(const char * file, int line, const char * str); - -KHMEXP void * -perf_calloc(const char * file, int line, size_t num, size_t size); - -KHMEXP void -perf_set_thread_desc(const char * file, int line, - const wchar_t * name, const wchar_t * creator); - -#endif diff --git a/src/windows/identity/util/sync.c b/src/windows/identity/util/sync.c deleted file mode 100644 index 23465ce56..000000000 --- a/src/windows/identity/util/sync.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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$ */ - -#define _NIMLIB_ - -#include<windows.h> -#include<sync.h> -#include<assert.h> - -#define LOCK_OPEN 0 -#define LOCK_READING 1 -#define LOCK_WRITING 2 - -KHMEXP void KHMAPI InitializeRwLock(PRWLOCK pLock) -{ - pLock->locks = 0; - pLock->status = LOCK_OPEN; - InitializeCriticalSection(&(pLock->cs)); - pLock->writewx = CreateEvent(NULL, - FALSE, /* Manual reset */ - TRUE, /* Initial state */ - NULL); - pLock->readwx = CreateEvent(NULL, - TRUE, /* Manual reset */ - TRUE, /* Initial state */ - NULL); -} - -KHMEXP void KHMAPI DeleteRwLock(PRWLOCK pLock) -{ - EnterCriticalSection(&pLock->cs); - - CloseHandle(pLock->readwx); - CloseHandle(pLock->writewx); - pLock->readwx = NULL; - pLock->writewx = NULL; - - LeaveCriticalSection(&pLock->cs); - DeleteCriticalSection(&(pLock->cs)); -} - -KHMEXP void KHMAPI LockObtainRead(PRWLOCK pLock) -{ - while(1) { - WaitForSingleObject(pLock->readwx, INFINITE); - EnterCriticalSection(&pLock->cs); - if(pLock->status == LOCK_WRITING) { - LeaveCriticalSection(&(pLock->cs)); - continue; - } else - break; - } - pLock->locks ++; - pLock->status = LOCK_READING; - ResetEvent(pLock->writewx); - LeaveCriticalSection(&(pLock->cs)); -} - -KHMEXP void KHMAPI LockReleaseRead(PRWLOCK pLock) -{ - EnterCriticalSection(&(pLock->cs)); - assert(pLock->status == LOCK_READING); - pLock->locks--; - if(!pLock->locks) { - pLock->status = LOCK_OPEN; - SetEvent(pLock->readwx); - SetEvent(pLock->writewx); - } - LeaveCriticalSection(&(pLock->cs)); -} - -KHMEXP void KHMAPI LockObtainWrite(PRWLOCK pLock) -{ - EnterCriticalSection(&(pLock->cs)); - if(pLock->status == LOCK_WRITING && - pLock->writer == GetCurrentThreadId()) { - pLock->locks++; - LeaveCriticalSection(&(pLock->cs)); - return; - } - LeaveCriticalSection(&(pLock->cs)); - while(1) { - WaitForSingleObject(pLock->writewx, INFINITE); - EnterCriticalSection(&(pLock->cs)); - if(pLock->status == LOCK_OPEN) - break; - LeaveCriticalSection(&(pLock->cs)); - } - pLock->status = LOCK_WRITING; - pLock->locks++; - pLock->writer = GetCurrentThreadId(); - ResetEvent(pLock->readwx); - ResetEvent(pLock->writewx); - LeaveCriticalSection(&(pLock->cs)); -} - -KHMEXP void KHMAPI LockReleaseWrite(PRWLOCK pLock) -{ - EnterCriticalSection(&(pLock->cs)); - assert(pLock->status == LOCK_WRITING); - pLock->locks--; - if(!pLock->locks) { - pLock->status = LOCK_OPEN; - pLock->writer = 0; - SetEvent(pLock->readwx); - SetEvent(pLock->writewx); - } - LeaveCriticalSection(&(pLock->cs)); -} diff --git a/src/windows/identity/util/sync.h b/src/windows/identity/util/sync.h deleted file mode 100644 index a95db207e..000000000 --- a/src/windows/identity/util/sync.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_SYNC_H -#define __KHIMAIRA_SYNC_H - -#include<khdefs.h> - -/*! \addtogroup util - @{ */ - -/*! \defgroup util_sync Synchronization - @{*/ - -/*! \brief A read/write lock - - A classic read/write lock. Allows multiple readers or a single - writer to access a protected object. Readers will wait for any - pending writer to release the lock, while a writer will wait for - any pending readers to release the lock. -*/ -typedef struct tag_rwlock { - int locks; - int status; - CRITICAL_SECTION cs; - HANDLE readwx; - HANDLE writewx; - - DWORD writer; /* TID of writer thread */ -} rw_lock_t; - -typedef rw_lock_t RWLOCK, *PRWLOCK; - -/*! \brief Initialize a read/write lock. - - A lock <b>must</b> be initialized before it can be used. - Initializing the lock does not grant the caller any locks on the - object. -*/ -KHMEXP void KHMAPI InitializeRwLock(PRWLOCK pLock); - -/*! \brief Delete a read/write lock - - Once the application is done using the read/write lock, it must be - deleted with a call to DeleteRwLock() -*/ -KHMEXP void KHMAPI DeleteRwLock(PRWLOCK pLock); - -/*! \brief Obtains a read lock on the read/write lock - - Multiple readers can obtain read locks on the same r/w lock. - However, if any thread attempts to obtain a write lock on the - object, it will wait until all readers have released the read - locks. - - Call LockReleaseRead() to release the read lock. While the same - thread may obtain multiple read locks on the same object, each - call to LockObtainRead() must have a corresponding call to - LockReleaseRead() to properly relinquish the lock. - - \see LockReleaseRead() -*/ -KHMEXP void KHMAPI LockObtainRead(PRWLOCK pLock); - -/*! \brief Relase a read lock obtained on a read/write lock - - Each call to LockObtainRead() must have a corresponding call to - LockReleaseRead(). Once all read locks are released, any threads - waiting on write locks on the object will be woken and assigned a - write lock. - - \see LockObtainRead() -*/ -KHMEXP void KHMAPI LockReleaseRead(PRWLOCK pLock); - -/*! \brief Obtains a write lock on the read/write lock - - Only a single writer is allowed to lock a single r/w lock. - However, if any thread attempts to obtain a read lock on the - object, it will wait until the writer has released the lock. - - Call LockReleaseWrite() to release the write lock. While the same - thread may obtain multiple write locks on the same object, each - call to LockObtainWrite() must have a corresponding call to - LockReleaseWrite() to properly relinquish the lock. - - \see LockReleaseWrite() -*/ -KHMEXP void KHMAPI LockObtainWrite(PRWLOCK pLock); - -/*! \brief Relase a write lock obtained on a read/write lock - - Each call to LockObtainWrite() must have a corresponding call to - LockReleaseWrite(). Once the write lock is released, any threads - waiting for read or write locks on the object will be woken and - assigned the proper lock. - - \see LockObtainWrite() -*/ -KHMEXP void KHMAPI LockReleaseWrite(PRWLOCK pLock); - -/*@}*/ -/*@}*/ - -#endif diff --git a/src/windows/identity/util/utils.h b/src/windows/identity/util/utils.h deleted file mode 100644 index 4c3bef52f..000000000 --- a/src/windows/identity/util/utils.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2005 Massachusetts Institute of Technology - * - * 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 __KHIMAIRA_UTIL_H -#define __KHIMAIRA_UTIL_H - -/*! \defgroup util Utilities - */ -#include<hashtable.h> -#include<sync.h> -#include<mstring.h> -#include<perfstat.h> - -#endif -- 2.26.2