From 0e2a5b29013d1df7a2ae2103556b0eb9eaef08c6 Mon Sep 17 00:00:00 2001 From: Greg Hudson Date: Mon, 21 May 2018 01:10:04 -0700 Subject: [PATCH] Prune Leash sources When Leash was imported in 2011-2012, some of its functionality was removed either at compile-time or runtime--most notably krb4 support, AFS integration, and editing of "properties" (registry values). Remove most of the unnecessary material. --- src/windows/include/leashwin.h | 10 - src/windows/include/loadfuncs-leash.h | 36 - src/windows/installer/wix/config.wxi | 18 - src/windows/installer/wix/features.wxi | 3 - src/windows/installer/wix/files.wxi | 12 - .../installer/wix/msi-deployment-guide.txt | 81 +- src/windows/installer/wix/property.wxi | 7 - src/windows/kfwlogon/Makefile.in | 1 - src/windows/kfwlogon/kfwcommon.c | 2 - src/windows/leash/AfsProperties.cpp | 123 -- src/windows/leash/AfsProperties.h | 56 - src/windows/leash/CLeashDragListBox.cpp | 215 ---- src/windows/leash/CLeashDragListBox.h | 45 - src/windows/leash/Krb4EditDomainRealmList.cpp | 150 --- src/windows/leash/Krb4EditDomainRealmList.h | 77 -- src/windows/leash/Krb5Properties.cpp | 644 ---------- src/windows/leash/Krb5Properties.h | 172 --- src/windows/leash/KrbAddHostServer.cpp | 77 -- src/windows/leash/KrbAddHostServer.h | 53 - src/windows/leash/KrbAddRealm.cpp | 88 -- src/windows/leash/KrbAddRealm.h | 66 -- src/windows/leash/KrbConfigOptions.cpp | 674 ----------- src/windows/leash/KrbConfigOptions.h | 89 -- .../leash/KrbDomainRealmMaintenance.cpp | 439 ------- src/windows/leash/KrbDomainRealmMaintenance.h | 59 - src/windows/leash/KrbEditHostServer.cpp | 96 -- src/windows/leash/KrbEditHostServer.h | 69 -- src/windows/leash/KrbEditRealm.cpp | 98 -- src/windows/leash/KrbEditRealm.h | 75 -- src/windows/leash/KrbMiscConfigOpt.cpp | 1020 ---------------- src/windows/leash/KrbMiscConfigOpt.h | 173 --- src/windows/leash/KrbProperties.cpp | 105 -- src/windows/leash/KrbProperties.h | 95 -- src/windows/leash/KrbRealmHostMaintenance.cpp | 1043 ----------------- src/windows/leash/KrbRealmHostMaintenance.h | 102 -- src/windows/leash/Leash.cpp | 346 ------ src/windows/leash/Leash.h | 9 - src/windows/leash/Leash.rc | 243 +--- src/windows/leash/LeashAboutBox.cpp | 13 - src/windows/leash/LeashFileDialog.cpp | 75 -- src/windows/leash/LeashFileDialog.h | 57 - src/windows/leash/LeashProperties.cpp | 202 ---- src/windows/leash/LeashProperties.h | 78 -- src/windows/leash/LeashView.cpp | 447 +------ src/windows/leash/LeashView.h | 31 - src/windows/leash/Lglobals.cpp | 148 --- src/windows/leash/Lglobals.h | 81 -- src/windows/leash/MainFrm.cpp | 3 +- src/windows/leash/Makefile.in | 35 +- src/windows/leash/htmlhelp/Images/Bullet.gif | Bin 816 -> 0 bytes src/windows/leash/htmlhelp/Images/Capture.PNG | Bin 5304 -> 0 bytes .../leash/htmlhelp/Images/Get_Ticket_Icon.png | Bin 1588 -> 0 bytes .../Images/Kerberos_auth_serv_fig_10.jpg | Bin 11267 -> 0 bytes .../Images/Kerberos_auth_serv_fig_11.jpg | Bin 9638 -> 0 bytes .../Images/Kerberos_auth_serv_fig_12.jpg | Bin 18413 -> 0 bytes .../Images/Kerberos_auth_serv_fig_13.jpg | Bin 10175 -> 0 bytes .../Images/Kerberos_auth_serv_fig_5.jpg | Bin 13318 -> 0 bytes .../Images/Kerberos_auth_serv_fig_6.jpg | Bin 7854 -> 0 bytes .../Images/Kerberos_auth_serv_fig_7.jpg | Bin 7210 -> 0 bytes .../Images/Kerberos_auth_serv_fig_8.jpg | Bin 14820 -> 0 bytes .../Images/Kerberos_auth_serv_fig_9.jpg | Bin 24615 -> 0 bytes .../htmlhelp/Images/Leash_about_leash.jpg | Bin 42760 -> 0 bytes .../htmlhelp/Images/Leash_change_password.JPG | Bin 30300 -> 0 bytes .../htmlhelp/Images/Leash_debug_window.jpg | Bin 15354 -> 0 bytes .../htmlhelp/Images/Leash_display_window.jpg | Bin 79940 -> 0 bytes .../Images/Leash_init_ticket_advanced.jpg | Bin 41549 -> 0 bytes .../Images/Leash_init_ticket_basic.jpg | Bin 24631 -> 0 bytes .../htmlhelp/Images/Leash_menu_action.jpg | Bin 16106 -> 0 bytes .../leash/htmlhelp/Images/Leash_menu_file.jpg | Bin 3447 -> 0 bytes .../leash/htmlhelp/Images/Leash_menu_help.jpg | Bin 7711 -> 0 bytes .../htmlhelp/Images/Leash_menu_options.jpg | Bin 18430 -> 0 bytes .../leash/htmlhelp/Images/Leash_menu_view.jpg | Bin 6673 -> 0 bytes .../htmlhelp/Images/Leash_properties_afs.jpg | Bin 10505 -> 0 bytes .../htmlhelp/Images/Leash_properties_krb4.jpg | Bin 29475 -> 0 bytes .../Images/Leash_properties_krb5_1.jpg | Bin 27382 -> 0 bytes .../Images/Leash_properties_krb5_2.jpg | Bin 21146 -> 0 bytes .../Images/Leash_properties_krb_1.jpg | Bin 191736 -> 0 bytes .../Images/Leash_properties_krb_2.jpg | Bin 50291 -> 0 bytes .../Images/Leash_properties_krb_3.jpg | Bin 45661 -> 0 bytes .../Images/Leash_properties_krb_4.jpg | Bin 45052 -> 0 bytes .../Images/Leash_properties_leash.jpg | Bin 26797 -> 0 bytes .../htmlhelp/Images/Leash_systray_icons.jpg | Bin 3740 -> 0 bytes .../htmlhelp/Images/Leash_systray_menu.jpg | Bin 15892 -> 0 bytes .../leash/htmlhelp/Images/Leash_toolbar.jpg | Bin 5632 -> 0 bytes .../leash/htmlhelp/Images/Options_Button.PNG | Bin 4116 -> 0 bytes .../htmlhelp/Images/Options_Button_Tiny.png | Bin 2243 -> 0 bytes .../leash/htmlhelp/Images/Options_Menu.PNG | Bin 5614 -> 0 bytes .../htmlhelp/Images/Options_Menu_Open.png | Bin 10690 -> 0 bytes .../htmlhelp/Images/Options_Menu_Tiny.png | Bin 7332 -> 0 bytes .../leash/htmlhelp/Images/Ticket_Options.PNG | Bin 6267 -> 0 bytes .../leash/htmlhelp/Images/View_Menu.GIF | Bin 9618 -> 0 bytes .../leash/htmlhelp/Images/View_Menu.PNG | Bin 4838 -> 0 bytes .../leash/htmlhelp/Images/View_Menu_tiny.png | Bin 4664 -> 0 bytes .../leash/htmlhelp/Images/View_Options.PNG | Bin 5512 -> 0 bytes .../Images/allowed_mix_case_realm_name.png | Bin 1986 -> 0 bytes .../Images/automatic_ticket_renewal.png | Bin 1857 -> 0 bytes .../Images/destroy_tickets_on_exit.png | Bin 1742 -> 0 bytes .../leash/htmlhelp/Images/encryption_type.png | Bin 1660 -> 0 bytes .../htmlhelp/Images/expiration_alarm.png | Bin 1293 -> 0 bytes src/windows/leash/htmlhelp/Images/flags.png | Bin 1142 -> 0 bytes src/windows/leash/htmlhelp/Images/issued.png | Bin 1183 -> 0 bytes .../leash/htmlhelp/Images/renewable_until.png | Bin 1123 -> 0 bytes .../leash/htmlhelp/Images/valid_until.png | Bin 1297 -> 0 bytes src/windows/leash/htmlhelp/LeashHelp.hhp | 184 --- .../leash/htmlhelp/MITKerberosHelp.hhp | 72 -- .../leash/htmlhelp/Table_of_Contents.hhc | 232 ---- .../leash/htmlhelp/html/Button_Menu.htm | 97 -- .../leash/htmlhelp/html/Distroy_Tickets.htm | 11 - .../leash/htmlhelp/html/Export_Tickets.htm | 36 - .../leash/htmlhelp/html/How_Use_Kerberos.htm | 44 - .../leash/htmlhelp/html/Import_Status.htm | 75 -- .../leash/htmlhelp/html/Import_Tickets.htm | 82 -- src/windows/leash/htmlhelp/html/More_Menu.htm | 49 - .../leash/htmlhelp/html/Options_Menu.htm | 62 - .../leash/htmlhelp/html/Renew_Tickets2.htm | 87 -- src/windows/leash/htmlhelp/html/View_Menu.htm | 99 -- .../htmlhelp/html/Windows_Logon_Tickets.htm | 45 - .../htmlhelp/html/afx_hidw_status_bar.htm | 34 - .../leash/htmlhelp/html/afx_hidw_toolbar.htm | 23 - .../leash/htmlhelp/html/hid_app_about.htm | 16 - .../leash/htmlhelp/html/hid_app_exit.htm | 22 - .../leash/htmlhelp/html/hid_context_help.htm | 20 - .../leash/htmlhelp/html/hid_help_index.htm | 18 - .../leash/htmlhelp/html/hid_help_using.htm | 16 - .../leash/htmlhelp/html/hid_sc_close.htm | 1 - .../leash/htmlhelp/html/hid_sc_maximize.htm | 17 - .../leash/htmlhelp/html/hid_sc_minimize.htm | 16 - .../leash/htmlhelp/html/hid_sc_move.htm | 18 - .../leash/htmlhelp/html/hid_sc_restore.htm | 17 - .../leash/htmlhelp/html/hid_sc_size.htm | 26 - .../htmlhelp/html/hid_view_status_bar.htm | 24 - .../leash/htmlhelp/html/hid_view_toolbar.htm | 23 - .../htmlhelp/html/leash_acknowledgements.htm | 76 -- .../leash/htmlhelp/html/leash_bug_reports.htm | 30 - .../html/leash_command_change_password.htm | 28 - .../html/leash_command_destroy_tickets.htm | 27 - .../html/leash_command_get_tickets.htm | 43 - .../html/leash_command_import_tickets.htm | 27 - .../html/leash_command_renew_tickets.htm | 27 - .../html/leash_command_reset_window.htm | 19 - .../htmlhelp/html/leash_command_sync_time.htm | 27 - .../html/leash_command_update_display.htm | 30 - .../leash/htmlhelp/html/leash_copyright.htm | 45 - .../leash/htmlhelp/html/leash_errors.htm | 18 - .../leash/htmlhelp/html/leash_export.htm | 34 - .../htmlhelp/html/leash_external_aklog.htm | 20 - .../htmlhelp/html/leash_external_kdestroy.htm | 19 - .../htmlhelp/html/leash_external_kinit.htm | 19 - .../htmlhelp/html/leash_external_klist.htm | 19 - .../htmlhelp/html/leash_external_ms2mit.htm | 20 - .../leash/htmlhelp/html/leash_file_exit.htm | 24 - .../html/leash_help_about_leash32.htm | 42 - .../html/leash_kerberos_copyright.htm | 45 - .../htmlhelp/html/leash_manpage_aklog.htm | 17 - .../htmlhelp/html/leash_manpage_kdestroy.htm | 86 -- .../htmlhelp/html/leash_manpage_kinit.htm | 17 - .../htmlhelp/html/leash_manpage_klist.htm | 106 -- .../htmlhelp/html/leash_manpage_ms2mit.htm | 16 - .../leash/htmlhelp/html/leash_manpages.htm | 18 - .../htmlhelp/html/leash_menu_commands.htm | 58 - .../htmlhelp/html/leash_menu_help_why_use.htm | 17 - .../html/leash_option_afs_properties.htm | 27 - .../html/leash_option_auto_renewal.htm | 22 - .../leash_option_destroy_tickets_on_exit.htm | 19 - .../html/leash_option_expiration_alarm.htm | 25 - .../html/leash_option_kerberos_properties.htm | 133 --- .../html/leash_option_krb4_properties.htm | 33 - .../html/leash_option_krb5_properties.htm | 126 -- .../html/leash_option_leash_properties.htm | 79 -- .../html/leash_option_upper_case_realm.htm | 24 - .../html/leash_topic_about_kerberos.htm | 52 - .../htmlhelp/html/leash_topic_error_57.htm | 25 - .../htmlhelp/html/leash_topic_error_62.htm | 20 - .../htmlhelp/html/leash_topic_error_8.htm | 21 - .../leash_topic_error_invalid_principal.htm | 17 - .../leash_topic_kerberos_auth_service.htm | 988 ---------------- .../leash_topic_kerberos_command_prompt.htm | 29 - .../html/leash_topic_kerberos_help_topics.htm | 26 - .../html/leash_topic_kerberos_names.htm | 29 - .../html/leash_topic_kerberos_principals.htm | 125 -- .../html/leash_topic_kerberos_tickets.htm | 23 - .../html/leash_topic_leash_help_topics.htm | 33 - .../html/leash_topic_leash_systray.htm | 64 - .../html/leash_topic_leash_window.htm | 81 -- .../htmlhelp/html/leash_topic_online_help.htm | 25 - .../html/leash_topic_password_choice.htm | 91 -- .../html/leash_topic_timing_issues.htm | 27 - .../htmlhelp/html/leash_topic_why_use.htm | 77 -- .../htmlhelp/html/leash_view_debug_window.htm | 32 - .../htmlhelp/html/leash_view_large_icons.htm | 25 - .../htmlhelp/html/leash_view_status_bar.htm | 21 - .../htmlhelp/html/leash_view_toolbar.htm | 49 - src/windows/leash/htmlhelp/leash32.hhk | 364 ------ src/windows/leash/htmlhelp/leash32.hhp | 228 ---- src/windows/leash/resource.h | 23 - src/windows/leashdll/AFSroutines.c | 833 ------------- src/windows/leashdll/Makefile.in | 30 +- src/windows/leashdll/include/krb4/conf-pc.h | 108 -- src/windows/leashdll/include/krb4/conf.h | 74 -- src/windows/leashdll/include/krb4/osconf.h | 59 - src/windows/leashdll/krb5routines.c | 163 --- src/windows/leashdll/leash-int.h | 84 +- src/windows/leashdll/leashdll.c | 19 - src/windows/leashdll/leashdll.h | 90 -- src/windows/leashdll/leashids.h | 1 - src/windows/leashdll/leashw32.def | 33 - src/windows/leashdll/lsh_pwd.c | 87 +- src/windows/leashdll/lsh_pwd.rc | 1 - src/windows/leashdll/lshcallb.c | 14 - src/windows/leashdll/lshfunc.c | 324 +---- src/windows/leashdll/registry.c | 105 -- src/windows/leashdll/timesync.c | 14 +- src/windows/leashdll/winerr.c | 47 - src/windows/version.rc | 54 - 214 files changed, 50 insertions(+), 15354 deletions(-) delete mode 100644 src/windows/leash/AfsProperties.cpp delete mode 100644 src/windows/leash/AfsProperties.h delete mode 100644 src/windows/leash/CLeashDragListBox.cpp delete mode 100644 src/windows/leash/CLeashDragListBox.h delete mode 100644 src/windows/leash/Krb4EditDomainRealmList.cpp delete mode 100644 src/windows/leash/Krb4EditDomainRealmList.h delete mode 100644 src/windows/leash/Krb5Properties.cpp delete mode 100644 src/windows/leash/Krb5Properties.h delete mode 100644 src/windows/leash/KrbAddHostServer.cpp delete mode 100644 src/windows/leash/KrbAddHostServer.h delete mode 100644 src/windows/leash/KrbAddRealm.cpp delete mode 100644 src/windows/leash/KrbAddRealm.h delete mode 100644 src/windows/leash/KrbConfigOptions.cpp delete mode 100644 src/windows/leash/KrbConfigOptions.h delete mode 100644 src/windows/leash/KrbDomainRealmMaintenance.cpp delete mode 100644 src/windows/leash/KrbDomainRealmMaintenance.h delete mode 100644 src/windows/leash/KrbEditHostServer.cpp delete mode 100644 src/windows/leash/KrbEditHostServer.h delete mode 100644 src/windows/leash/KrbEditRealm.cpp delete mode 100644 src/windows/leash/KrbEditRealm.h delete mode 100644 src/windows/leash/KrbMiscConfigOpt.cpp delete mode 100644 src/windows/leash/KrbMiscConfigOpt.h delete mode 100644 src/windows/leash/KrbProperties.cpp delete mode 100644 src/windows/leash/KrbProperties.h delete mode 100644 src/windows/leash/KrbRealmHostMaintenance.cpp delete mode 100644 src/windows/leash/KrbRealmHostMaintenance.h delete mode 100644 src/windows/leash/LeashFileDialog.cpp delete mode 100644 src/windows/leash/LeashFileDialog.h delete mode 100644 src/windows/leash/LeashProperties.cpp delete mode 100644 src/windows/leash/LeashProperties.h delete mode 100644 src/windows/leash/Lglobals.cpp delete mode 100644 src/windows/leash/htmlhelp/Images/Bullet.gif delete mode 100644 src/windows/leash/htmlhelp/Images/Capture.PNG delete mode 100644 src/windows/leash/htmlhelp/Images/Get_Ticket_Icon.png delete mode 100644 src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_10.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_11.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_12.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_13.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_5.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_6.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_7.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_8.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_9.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_about_leash.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_change_password.JPG delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_debug_window.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_display_window.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_init_ticket_advanced.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_init_ticket_basic.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_menu_action.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_menu_file.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_menu_help.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_menu_options.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_menu_view.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_properties_afs.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_properties_krb4.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_properties_krb5_1.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_properties_krb5_2.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_properties_krb_1.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_properties_krb_2.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_properties_krb_3.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_properties_krb_4.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_properties_leash.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_systray_icons.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_systray_menu.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Leash_toolbar.jpg delete mode 100644 src/windows/leash/htmlhelp/Images/Options_Button.PNG delete mode 100644 src/windows/leash/htmlhelp/Images/Options_Button_Tiny.png delete mode 100644 src/windows/leash/htmlhelp/Images/Options_Menu.PNG delete mode 100644 src/windows/leash/htmlhelp/Images/Options_Menu_Open.png delete mode 100644 src/windows/leash/htmlhelp/Images/Options_Menu_Tiny.png delete mode 100644 src/windows/leash/htmlhelp/Images/Ticket_Options.PNG delete mode 100644 src/windows/leash/htmlhelp/Images/View_Menu.GIF delete mode 100644 src/windows/leash/htmlhelp/Images/View_Menu.PNG delete mode 100644 src/windows/leash/htmlhelp/Images/View_Menu_tiny.png delete mode 100644 src/windows/leash/htmlhelp/Images/View_Options.PNG delete mode 100644 src/windows/leash/htmlhelp/Images/allowed_mix_case_realm_name.png delete mode 100644 src/windows/leash/htmlhelp/Images/automatic_ticket_renewal.png delete mode 100644 src/windows/leash/htmlhelp/Images/destroy_tickets_on_exit.png delete mode 100644 src/windows/leash/htmlhelp/Images/encryption_type.png delete mode 100644 src/windows/leash/htmlhelp/Images/expiration_alarm.png delete mode 100644 src/windows/leash/htmlhelp/Images/flags.png delete mode 100644 src/windows/leash/htmlhelp/Images/issued.png delete mode 100644 src/windows/leash/htmlhelp/Images/renewable_until.png delete mode 100644 src/windows/leash/htmlhelp/Images/valid_until.png delete mode 100644 src/windows/leash/htmlhelp/LeashHelp.hhp delete mode 100644 src/windows/leash/htmlhelp/Table_of_Contents.hhc delete mode 100644 src/windows/leash/htmlhelp/html/Button_Menu.htm delete mode 100644 src/windows/leash/htmlhelp/html/Distroy_Tickets.htm delete mode 100644 src/windows/leash/htmlhelp/html/Export_Tickets.htm delete mode 100644 src/windows/leash/htmlhelp/html/How_Use_Kerberos.htm delete mode 100644 src/windows/leash/htmlhelp/html/Import_Status.htm delete mode 100644 src/windows/leash/htmlhelp/html/Import_Tickets.htm delete mode 100644 src/windows/leash/htmlhelp/html/More_Menu.htm delete mode 100644 src/windows/leash/htmlhelp/html/Options_Menu.htm delete mode 100644 src/windows/leash/htmlhelp/html/Renew_Tickets2.htm delete mode 100644 src/windows/leash/htmlhelp/html/View_Menu.htm delete mode 100644 src/windows/leash/htmlhelp/html/Windows_Logon_Tickets.htm delete mode 100644 src/windows/leash/htmlhelp/html/afx_hidw_status_bar.htm delete mode 100644 src/windows/leash/htmlhelp/html/afx_hidw_toolbar.htm delete mode 100644 src/windows/leash/htmlhelp/html/hid_app_about.htm delete mode 100644 src/windows/leash/htmlhelp/html/hid_app_exit.htm delete mode 100644 src/windows/leash/htmlhelp/html/hid_context_help.htm delete mode 100644 src/windows/leash/htmlhelp/html/hid_help_index.htm delete mode 100644 src/windows/leash/htmlhelp/html/hid_help_using.htm delete mode 100644 src/windows/leash/htmlhelp/html/hid_sc_close.htm delete mode 100644 src/windows/leash/htmlhelp/html/hid_sc_maximize.htm delete mode 100644 src/windows/leash/htmlhelp/html/hid_sc_minimize.htm delete mode 100644 src/windows/leash/htmlhelp/html/hid_sc_move.htm delete mode 100644 src/windows/leash/htmlhelp/html/hid_sc_restore.htm delete mode 100644 src/windows/leash/htmlhelp/html/hid_sc_size.htm delete mode 100644 src/windows/leash/htmlhelp/html/hid_view_status_bar.htm delete mode 100644 src/windows/leash/htmlhelp/html/hid_view_toolbar.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_acknowledgements.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_bug_reports.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_command_change_password.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_command_destroy_tickets.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_command_get_tickets.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_command_import_tickets.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_command_renew_tickets.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_command_reset_window.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_command_sync_time.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_command_update_display.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_copyright.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_errors.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_export.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_external_aklog.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_external_kdestroy.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_external_kinit.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_external_klist.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_external_ms2mit.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_file_exit.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_help_about_leash32.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_kerberos_copyright.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_manpage_aklog.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_manpage_kdestroy.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_manpage_kinit.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_manpage_klist.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_manpage_ms2mit.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_manpages.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_menu_commands.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_menu_help_why_use.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_option_afs_properties.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_option_auto_renewal.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_option_destroy_tickets_on_exit.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_option_expiration_alarm.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_option_kerberos_properties.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_option_krb4_properties.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_option_krb5_properties.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_option_leash_properties.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_option_upper_case_realm.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_topic_about_kerberos.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_topic_error_57.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_topic_error_62.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_topic_error_8.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_topic_error_invalid_principal.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_topic_kerberos_auth_service.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_topic_kerberos_command_prompt.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_topic_kerberos_help_topics.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_topic_kerberos_names.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_topic_kerberos_principals.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_topic_kerberos_tickets.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_topic_leash_help_topics.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_topic_leash_systray.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_topic_leash_window.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_topic_online_help.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_topic_password_choice.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_topic_timing_issues.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_topic_why_use.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_view_debug_window.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_view_large_icons.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_view_status_bar.htm delete mode 100644 src/windows/leash/htmlhelp/html/leash_view_toolbar.htm delete mode 100644 src/windows/leash/htmlhelp/leash32.hhk delete mode 100644 src/windows/leash/htmlhelp/leash32.hhp delete mode 100644 src/windows/leashdll/AFSroutines.c delete mode 100644 src/windows/leashdll/include/krb4/conf-pc.h delete mode 100644 src/windows/leashdll/include/krb4/conf.h delete mode 100644 src/windows/leashdll/include/krb4/osconf.h delete mode 100644 src/windows/leashdll/lshcallb.c delete mode 100644 src/windows/leashdll/registry.c diff --git a/src/windows/include/leashwin.h b/src/windows/include/leashwin.h index 325dce2e96..08b9c7d6b6 100644 --- a/src/windows/include/leashwin.h +++ b/src/windows/include/leashwin.h @@ -2,9 +2,6 @@ #define __LEASHWIN__ ////Is this sufficient? -#ifndef NO_KRB4 -#include -#else #include #define ANAME_SZ 40 #define REALM_SZ 40 @@ -12,7 +9,6 @@ #define INST_SZ 40 /* include space for '.' and '@' */ #define MAX_K_NAME_SZ (ANAME_SZ + INST_SZ + REALM_SZ + 2) -#endif #define DLGTYPE_PASSWD 0 #define DLGTYPE_CHPASSWD 1 @@ -185,9 +181,6 @@ DWORD Leash_reset_default_proxiable(); DWORD Leash_get_default_publicip(); DWORD Leash_set_default_publicip(DWORD ipv4addr); DWORD Leash_reset_default_publicip(); -DWORD Leash_get_default_use_krb4(); -DWORD Leash_set_default_use_krb4(DWORD onoff); -DWORD Leash_reset_default_use_krb4(); DWORD Leash_get_hide_kinit_options(); DWORD Leash_set_hide_kinit_options(DWORD onoff); DWORD Leash_reset_hide_kinit_options(); @@ -203,9 +196,6 @@ DWORD Leash_reset_default_renew_min(); DWORD Leash_get_default_renew_max(); DWORD Leash_set_default_renew_max(DWORD minutes); DWORD Leash_reset_default_renew_max(); -DWORD Leash_get_lock_file_locations(); -DWORD Leash_set_lock_file_locations(DWORD onoff); -DWORD Leash_reset_lock_file_locations(); DWORD Leash_get_default_uppercaserealm(); DWORD Leash_set_default_uppercaserealm(DWORD onoff); DWORD Leash_reset_default_uppercaserealm(); diff --git a/src/windows/include/loadfuncs-leash.h b/src/windows/include/loadfuncs-leash.h index 38b1decbb0..6e7bdbc82f 100644 --- a/src/windows/include/loadfuncs-leash.h +++ b/src/windows/include/loadfuncs-leash.h @@ -204,24 +204,6 @@ TYPEDEF_FUNC( Leash_reset_default_publicip, (void) ); -TYPEDEF_FUNC( - DWORD, - CALLCONV_C, - Leash_get_default_use_krb4, - (void) - ); -TYPEDEF_FUNC( - DWORD, - CALLCONV_C, - Leash_set_default_use_krb4, - (DWORD) - ); -TYPEDEF_FUNC( - DWORD, - CALLCONV_C, - Leash_reset_default_use_krb4, - (void) - ); TYPEDEF_FUNC( DWORD, CALLCONV_C, @@ -312,24 +294,6 @@ TYPEDEF_FUNC( Leash_reset_default_renewable, (void) ); -TYPEDEF_FUNC( - DWORD, - CALLCONV_C, - Leash_get_lock_file_locations, - (void) - ); -TYPEDEF_FUNC( - DWORD, - CALLCONV_C, - Leash_set_lock_file_locations, - (DWORD) - ); -TYPEDEF_FUNC( - DWORD, - CALLCONV_C, - Leash_reset_lock_file_locations, - (void) - ); TYPEDEF_FUNC( DWORD, CALLCONV_C, diff --git a/src/windows/installer/wix/config.wxi b/src/windows/installer/wix/config.wxi index 8b0882a723..ae0efaf824 100644 --- a/src/windows/installer/wix/config.wxi +++ b/src/windows/installer/wix/config.wxi @@ -100,9 +100,6 @@ - - - @@ -136,9 +133,6 @@ - - - @@ -164,18 +158,6 @@ - - - - - - - - - - - - diff --git a/src/windows/installer/wix/features.wxi b/src/windows/installer/wix/features.wxi index 398ddda6f3..5fe17f02a7 100644 --- a/src/windows/installer/wix/features.wxi +++ b/src/windows/installer/wix/features.wxi @@ -100,10 +100,8 @@ - - @@ -116,7 +114,6 @@ - diff --git a/src/windows/installer/wix/files.wxi b/src/windows/installer/wix/files.wxi index cfec3bd2d6..faf16b7c15 100644 --- a/src/windows/installer/wix/files.wxi +++ b/src/windows/installer/wix/files.wxi @@ -177,10 +177,6 @@ --> - - - LEASHAFSSTATUS - LEASHCREATEMISSINGCONFIG @@ -189,10 +185,6 @@ LEASHAUTORENEWTICKETS - - - LEASHLOCKFILELOCATIONS - LEASHMSLSAIMPORT @@ -239,10 +231,6 @@ LEASHPUBLICIP - - - LEASHUSEKRB4 - LEASHHIDEKINITOPTIONS diff --git a/src/windows/installer/wix/msi-deployment-guide.txt b/src/windows/installer/wix/msi-deployment-guide.txt index 3a3c28ebcd..ab317af5bf 100644 --- a/src/windows/installer/wix/msi-deployment-guide.txt +++ b/src/windows/installer/wix/msi-deployment-guide.txt @@ -172,10 +172,6 @@ Kerberos for Windows 2.1.2 Leash GUI properties - LEASHAFSSTATUS - Setting: afs token retrieval - Values : '0' or '1' - LEASHCREATEMISSINGCONFIG Setting: automatic generation of missing configuration files Values : '0' or '1' @@ -184,10 +180,6 @@ Kerberos for Windows Setting: automatic ticket renewal Values : '0' or '1' - LEASHLOCKFILELOCATIONS - Setting: lock configuration files location - Values : '0' or '1' - LEASHMSLSAIMPORT Setting: automatic importation of MSLSA credentials Values : '0', '1' or '2' @@ -222,10 +214,6 @@ Kerberos for Windows Setting: default public ipv4 address Values : numeric - LEASHUSEKRB4 - Setting: request kerberos iv tickets - Values : '0' or '1' - LEASHHIDEKINITOPTIONS Setting: hide advanced kinit options in dialog Values : '0' or '1' @@ -258,22 +246,7 @@ Kerberos for Windows Setting: Preserve ticket initialization dialog options Values : numeric -2.1.4 Kerberos 4 properties - - KRB4KRBREALMS (realms full pathname) - KRB4KRBCONF (config full pathname) - KRB4KRBCONFIDIR (dir for both files) - Setting: location of krbrealm & krbconf - Values : string - (note that the three registry settings are conditioned - independently. I.e. If you only set KRB4KRBCONF, only the - krb.conf setting will be written.) - - KRB4TICKETFILE - Setting: ticket file - Values : string - -2.1.5 Kerberos 5 properties +2.1.4 Kerberos 5 properties KRB5CONFIG Setting: location of krb5.ini @@ -638,7 +611,6 @@ Kerberos for Windows Krb5Cred : Kerberos 5 credentials provider Krb5Ident: Kerberos 5 Identity provider - Krb4Cred : Kerberos 4 credentials provider Consult the vendors for the plug-in names of other third party plug-ins. Additionally, the plug-ins configuration panel in the @@ -804,57 +776,6 @@ Kerberos for Windows Obtain renewable tickets. -3.1.4 Settings for the Kerberos 4 Credentials Provider Plug-in - - Registry key 1: 'Software\MIT\NetIDMgr\KCDB\Identity\\Krb4Cred' - Registry key 2: 'Software\MIT\NetIDMgr\PluginManager\Plugins\Krb4Cred\Parameters' - --------------- - - Theses settings are also maintained per identity. However, if the - setting is not specified for some identity or if the identity is - new, then the global default will be used (registry key 2). - Global defaults should be set in the second registry key. - - Value : Krb4NewCreds - Type : DWORD (0 or 1) - Default : 1 - - If '1', obtains Kerberos 4 credentials. Note that currently, - only one identity can have Kerberos 4 credentials at one time. - - Value : Krb4Method - Type : DWORD (0, 1 or 2) - Default : 0 - - Method for obtaining Kerberos 4 credentials. The values are - as follows: - - 0 : Automatically determine method - 1 : Use password - 2 : Use Kerberos 5 to 4 translation - - Value : DefaultLifetime - Type : DWORD - Default : 36000 - - The default ticket lifetime, in seconds. - - Value : MaxLifetime - Type : DWORD - Default : 86400 - - Maximum lifetime, in seconds. This value is used to set the - range of the user interface controls that allow setting the - lifetime. - - Value : MinLifetime - Type : DWORD - Default : 60 - - Minimum lifetime, in seconds. This value is used to set the - range of the user interface controls that allow setting the - lifetime. - ---------------------------------------------------------------------- 4. Additional Resources diff --git a/src/windows/installer/wix/property.wxi b/src/windows/installer/wix/property.wxi index 70504c181c..80039870c9 100644 --- a/src/windows/installer/wix/property.wxi +++ b/src/windows/installer/wix/property.wxi @@ -58,10 +58,8 @@ variable value is the empty string (""), then the properties will not be defined. --> - $(var.LeashAfsStatus) $(var.LeashCreateMissingConfig) $(var.LeashAutoRenewTickets) - $(var.LeashLockFileLocations) $(var.LeashMsLsaImport) $(var.LeashLifetime) $(var.LeashRenewTill) @@ -70,7 +68,6 @@ $(var.LeashNoAddresses) $(var.LeashProxiable) $(var.LeashPublicIp) - $(var.LeashUseKrb4) $(var.LeashHideKinitOptions) $(var.LeashLifeMin) $(var.LeashLifeMax) @@ -79,10 +76,6 @@ $(var.LeashUppercaseRealm) $(var.LeashTimeHost) $(var.LeashPreserveKinitOptions) - $(var.Krb4KrbRealms) - $(var.Krb4KrbConf) - $(var.Krb4ConfigDir) - $(var.Krb4TicketFile) $(var.Krb5Config) $(var.Krb5CcName) $(var.Krb5PreserveIdentity) diff --git a/src/windows/kfwlogon/Makefile.in b/src/windows/kfwlogon/Makefile.in index a5b9a1681d..d5ebe2bf43 100644 --- a/src/windows/kfwlogon/Makefile.in +++ b/src/windows/kfwlogon/Makefile.in @@ -3,7 +3,6 @@ mydir=. BUILDTOP=$(REL)..$(S).. -DEFINES = -DNO_KRB4 LOCALINCLUDES = -I$(BUILDTOP) -I$(BUILDTOP)\include -I$(BUILDTOP)\windows\include PROG_LIBPATH=-L$(TOPLIBD) -L$(KRB5_LIBDIR) diff --git a/src/windows/kfwlogon/kfwcommon.c b/src/windows/kfwlogon/kfwcommon.c index a348221932..9249a23773 100644 --- a/src/windows/kfwlogon/kfwcommon.c +++ b/src/windows/kfwlogon/kfwcommon.c @@ -56,7 +56,6 @@ DECL_FUNC_PTR(Leash_get_default_renew_till); DECL_FUNC_PTR(Leash_get_default_noaddresses); DECL_FUNC_PTR(Leash_get_default_proxiable); DECL_FUNC_PTR(Leash_get_default_publicip); -DECL_FUNC_PTR(Leash_get_default_use_krb4); DECL_FUNC_PTR(Leash_get_default_life_min); DECL_FUNC_PTR(Leash_get_default_life_max); DECL_FUNC_PTR(Leash_get_default_renew_min); @@ -167,7 +166,6 @@ FUNC_INFO leash_fi[] = { MAKE_FUNC_INFO(Leash_get_default_noaddresses), MAKE_FUNC_INFO(Leash_get_default_proxiable), MAKE_FUNC_INFO(Leash_get_default_publicip), - MAKE_FUNC_INFO(Leash_get_default_use_krb4), MAKE_FUNC_INFO(Leash_get_default_life_min), MAKE_FUNC_INFO(Leash_get_default_life_max), MAKE_FUNC_INFO(Leash_get_default_renew_min), diff --git a/src/windows/leash/AfsProperties.cpp b/src/windows/leash/AfsProperties.cpp deleted file mode 100644 index dabcdfd913..0000000000 --- a/src/windows/leash/AfsProperties.cpp +++ /dev/null @@ -1,123 +0,0 @@ -// AfsProperties.cpp : implementation file -// - -#include "stdafx.h" -#include "leash.h" -#include "AfsProperties.h" - -/* This should be set to something other than 0 or 1 (the valid values) */ -#define INVALID_AFS_STATUS_VALUE 2 -#define IS_INVALID_AFS_STATUS_VALUE(x) ((x != 0) && (x != 1)) - -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif - -///////////////////////////////////////////////////////////////////////////// -// CAfsProperties dialog - - -CAfsProperties::CAfsProperties(CWnd* pParent /*=NULL*/) - : CDialog(CAfsProperties::IDD, pParent) -{ - m_newAfsStatus = 0; - m_oldAfsStatus = 0; - - //{{AFX_DATA_INIT(CAfsProperties) - // NOTE: the ClassWizard will add member initialization here - //}}AFX_DATA_INIT -} - - -void CAfsProperties::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); - //{{AFX_DATA_MAP(CAfsProperties) - // NOTE: the ClassWizard will add DDX an3d DDV calls here - //}}AFX_DATA_MAP -} - - -BEGIN_MESSAGE_MAP(CAfsProperties, CDialog) - //{{AFX_MSG_MAP(CAfsProperties) - ON_BN_CLICKED(IDC_BUTTON_AFS_PROPERTIES, OnButtonAfsProperties) - ON_BN_CLICKED(IDC_RADIO_AFS_ENABLED, OnRadioAfsEnabled) - ON_BN_CLICKED(IDC_RADIO_AFS_DISABLED, OnRadioAfsDisabled) - ON_COMMAND(ID_HELP, OnHelp) - //}}AFX_MSG_MAP -END_MESSAGE_MAP() - -///////////////////////////////////////////////////////////////////////////// -// CAfsProperties message handlers - -BOOL -CAfsProperties::OnInitDialog() -{ - CDialog::OnInitDialog(); - - // Get State* of Destroy Tickets On Exit - m_pApp = AfxGetApp(); - - m_oldAfsStatus = m_pApp->GetProfileInt("Settings", "AfsStatus", - INVALID_AFS_STATUS_VALUE); - if (IS_INVALID_AFS_STATUS_VALUE(m_oldAfsStatus)) - { - // set the default - m_pApp->WriteProfileInt("Settings", "AfsStatus", 1); - m_oldAfsStatus = 1; - } - - m_newAfsStatus = m_oldAfsStatus; - - int enabled = (m_oldAfsStatus != 0); - if (enabled) - CheckDlgButton(IDC_RADIO_AFS_ENABLED, TRUE); - else - CheckDlgButton(IDC_RADIO_AFS_DISABLED, TRUE); - - return TRUE; -} - -void CAfsProperties::OnButtonAfsProperties() -{ - if (32 >= (LRESULT) ShellExecute (NULL, NULL, "AFS_CONFIG.EXE", NULL, - NULL, SW_SHOW)) - { - MessageBox("Can't find file AFS_CONFIG.EXE", "Error", MB_OK); - } -} - -void CAfsProperties::OnOK() -{ - if (m_oldAfsStatus != m_newAfsStatus) - { - if (!m_pApp->WriteProfileInt("Settings", "AfsStatus", m_newAfsStatus)) - { - MessageBox("There was an error putting your entry into the " - "Registry!", "Error", MB_OK); - } - } - - CDialog::OnOK(); -} - -void CAfsProperties::OnRadioAfsEnabled() -{ - m_newAfsStatus = 1; -} - -void CAfsProperties::OnRadioAfsDisabled() -{ - m_newAfsStatus = 0; -} - -void CAfsProperties::OnHelp() -{ -#ifdef CALL_HTMLHELP - AfxGetApp()->HtmlHelp(HID_AFS_PROPERTIES_COMMAND); -#else - AfxGetApp()->WinHelp(HID_AFS_PROPERTIES_COMMAND); -#endif -} diff --git a/src/windows/leash/AfsProperties.h b/src/windows/leash/AfsProperties.h deleted file mode 100644 index 2c6e1edd7f..0000000000 --- a/src/windows/leash/AfsProperties.h +++ /dev/null @@ -1,56 +0,0 @@ -#if !defined(AFX_AFSPROPERTIES_H__FD135601_2FCB_11D3_96A2_0000861B8A3C__INCLUDED_) -#define AFX_AFSPROPERTIES_H__FD135601_2FCB_11D3_96A2_0000861B8A3C__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 -// AfsProperties.h : header file -// - -///////////////////////////////////////////////////////////////////////////// -// CAfsProperties dialog - -class CAfsProperties : public CDialog -{ -// Construction -private: - UINT m_newAfsStatus; - UINT m_oldAfsStatus; - CWinApp *m_pApp; - -public: - CAfsProperties(CWnd* pParent = NULL); // standard constructor - -// Dialog Data - //{{AFX_DATA(CAfsProperties) - enum { IDD = IDD_AFS_PROPERTIES }; - // NOTE: the ClassWizard will add data members here - //}}AFX_DATA - - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CAfsProperties) - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL - -// Implementation -protected: - - // Generated message map functions - //{{AFX_MSG(CAfsProperties) - virtual BOOL OnInitDialog(); - afx_msg void OnButtonAfsProperties(); - virtual void OnOK(); - afx_msg void OnRadioAfsEnabled(); - afx_msg void OnRadioAfsDisabled(); - afx_msg void OnHelp(); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() -}; - -//{{AFX_INSERT_LOCATION}} -// Microsoft Visual C++ will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_AFSPROPERTIES_H__FD135601_2FCB_11D3_96A2_0000861B8A3C__INCLUDED_) diff --git a/src/windows/leash/CLeashDragListBox.cpp b/src/windows/leash/CLeashDragListBox.cpp deleted file mode 100644 index 2753884301..0000000000 --- a/src/windows/leash/CLeashDragListBox.cpp +++ /dev/null @@ -1,215 +0,0 @@ -#include "stdafx.h" -#include "CLeashDragListBox.h" -#include "leash.h" -#include "lglobals.h" - -///////////////////////////////////////////////////////////////////////////// -// CLeashDragListBox - -//IMPLEMENT_DYNAMIC(CLeashDragListBox, CDragListBox) - -CLeashDragListBox::CLeashDragListBox() - :CDragListBox() -{ - -} - -CLeashDragListBox::~CLeashDragListBox() -{ - DestroyWindow(); -} - -void CLeashDragListBox::initOtherListbox(CPropertyPage* pPage, CListBox* pOtherListBox) -{ - m_pPage = pPage; - m_pOtherListBox = pOtherListBox; -} - - -void CLeashDragListBox::PreSubclassWindow() -{ - ASSERT(::IsWindow(m_hWnd)); - ASSERT((GetStyle() & (LBS_MULTIPLESEL|LBS_SORT)) == 0); - MakeDragList(m_hWnd); -} - -BOOL CLeashDragListBox::BeginDrag(CPoint pt) -{ - m_nLast = -1; - DrawInsert(ItemFromPt(pt)); - return TRUE; -} - -void CLeashDragListBox::CancelDrag(CPoint) -{ - DrawInsert(-1); -} - -UINT CLeashDragListBox::Dragging(CPoint pt) -{ - int nIndex = ItemFromPt(pt, FALSE); // don't allow scrolling just yet - DrawInsert(nIndex); - ItemFromPt(pt); - return (nIndex == LB_ERR) ? DL_STOPCURSOR : DL_MOVECURSOR; -} - -void CLeashDragListBox::Dropped(int nSrcIndex, CPoint pt) -{ - ASSERT(!(GetStyle() & (LBS_OWNERDRAWFIXED|LBS_OWNERDRAWVARIABLE)) || - (GetStyle() & LBS_HASSTRINGS)); - - DrawInsert(-1); - int nDestIndex = ItemFromPt(pt); - - if (nSrcIndex == -1 || nDestIndex == -1) - return; - if (nDestIndex == nSrcIndex || nDestIndex == nSrcIndex+1) - return; //didn't move - CString str1, str2; - DWORD_PTR dwData; - GetText(nSrcIndex, str1); - GetText(nDestIndex, str2); - dwData = GetItemData(nSrcIndex); - DeleteString(nSrcIndex); - if (nSrcIndex < nDestIndex) - nDestIndex--; - nDestIndex = InsertString(nDestIndex, str1); - SetItemData(nDestIndex, dwData); - SetCurSel(nDestIndex); - - // Save new order of items to profile linklist - char theSection[REALM_SZ + 1]; - const char* adminServer[] = {"realms", theSection, ADMIN_SERVER, NULL}; - const char* Section[] = {"realms", theSection, NULL}; - const char** adminServ = adminServer; - const char** section = Section; - const char* valueSection[] = {"realms", theSection, "kdc", NULL}; - const char** valueSec = valueSection; - CString theValue; - CHAR hostServer[MAX_HSTNM]; - - if (LB_ERR == m_pOtherListBox->GetText(m_pOtherListBox->GetCurSel(), theSection)) - ASSERT(0); - - long retval = pprofile_rename_section(CLeashApp::m_krbv5_profile, - section, NULL); - if (retval) - { - MessageBox("Dropped::There is on error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - return; - } - - retval = pprofile_add_relation(CLeashApp::m_krbv5_profile, - section, NULL); - if (retval) - { - MessageBox("Dropped::There is on error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - return; - } - - for (INT maxItems = GetCount(), item = 0; item < maxItems; item++) - { - GetText(item, hostServer); - //strcpy(hostServer, theValue); - - if (strstr(hostServer, ADMIN_SERVER)) - { - char* pAdmin = strchr(hostServer, ' '); - if (pAdmin) - *pAdmin = 0; - else - ASSERT(0); - - retval = pprofile_add_relation(CLeashApp::m_krbv5_profile, - adminServ, hostServer); - if (retval) - { - MessageBox("Dropped::There is on error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - return; - } - } - - retval = pprofile_add_relation(CLeashApp::m_krbv5_profile, - valueSec, hostServer); - if (retval) - { - MessageBox("Dropped::There is on error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - return; - } - } - - m_pPage->SetModified(TRUE); -} - -void CLeashDragListBox::DrawInsert(int nIndex) -{ - if (m_nLast != nIndex) - { - DrawSingle(m_nLast); - DrawSingle(nIndex); - m_nLast = nIndex; - } -} - -void CLeashDragListBox::DrawSingle(int nIndex) -{ - if (nIndex == -1) - return; - CBrush* pBrush = CDC::GetHalftoneBrush(); - CRect rect; - GetClientRect(&rect); - CRgn rgn; - rgn.CreateRectRgnIndirect(&rect); - - CDC* pDC = GetDC(); - // prevent drawing outside of listbox - // this can happen at the top of the listbox since the listbox's DC is the - // parent's DC - pDC->SelectClipRgn(&rgn); - - GetItemRect(nIndex, &rect); - rect.bottom = rect.top+2; - rect.top -= 2; - CBrush* pBrushOld = pDC->SelectObject(pBrush); - //draw main line - pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATINVERT); - - pDC->SelectObject(pBrushOld); - ReleaseDC(pDC); -} - -/* -BOOL CLeashDragListBox::OnChildNotify(UINT nMessage, WPARAM wParam, LPARAM lParam, LRESULT* pResult) -{ - if (nMessage != m_nMsgDragList) - return CListBox::OnChildNotify(nMessage, wParam, lParam, pResult); - - ASSERT(pResult != NULL); - LPDRAGLISTINFO pInfo = (LPDRAGLISTINFO)lParam; - ASSERT(pInfo != NULL); - switch (pInfo->uNotification) - { - case DL_BEGINDRAG: - *pResult = BeginDrag(pInfo->ptCursor); - break; - case DL_CANCELDRAG: - CancelDrag(pInfo->ptCursor); - break; - case DL_DRAGGING: - *pResult = Dragging(pInfo->ptCursor); - break; - case DL_DROPPED: - Dropped(GetCurSel(), pInfo->ptCursor); - break; - } - return TRUE; -} -*/ diff --git a/src/windows/leash/CLeashDragListBox.h b/src/windows/leash/CLeashDragListBox.h deleted file mode 100644 index 02179b2741..0000000000 --- a/src/windows/leash/CLeashDragListBox.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef _LEASH_DRAGLISTBOX -#define _LEASH_DRAGLISTBOX - -///////////////////////////////////////////////////////////////////////////// -// CLeashDragListBox - -//#include "AFXCMN.h" - -class CLeashDragListBox : public CDragListBox -{ - //DECLARE_DYNAMIC(CDragListBoxCLeashDragListBox) - - CListBox* m_pOtherListBox; - CPropertyPage* m_pPage; - -// Constructors -public: - CLeashDragListBox(); - void initOtherListbox(CPropertyPage* pPage, CListBox* pOtherListBox); - -// Attributes - //int ItemFromPt(CPoint pt, BOOL bAutoScroll = TRUE) const; - -// Operations - virtual void DrawInsert(int nItem); - -// Overridables - virtual BOOL BeginDrag(CPoint pt); - virtual void CancelDrag(CPoint pt); - virtual UINT Dragging(CPoint pt); - virtual void Dropped(int nSrcIndex, CPoint pt); - -// Implementation -public: - int m_nLast; - void DrawSingle(int nIndex); - virtual void PreSubclassWindow(); - virtual ~CLeashDragListBox(); -protected: - //virtual BOOL OnChildNotify(UINT, WPARAM, LPARAM, LRESULT*); -}; - -//class CLeashDragListBox; - -#endif // _LEASH_DRAGLISTBOX diff --git a/src/windows/leash/Krb4EditDomainRealmList.cpp b/src/windows/leash/Krb4EditDomainRealmList.cpp deleted file mode 100644 index 722718ab23..0000000000 --- a/src/windows/leash/Krb4EditDomainRealmList.cpp +++ /dev/null @@ -1,150 +0,0 @@ -// ************************************************************************************** -// File: Krb4EditDomainRealmList.cpp -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. -// Description: CPP file for Krb4EditDomainRealmList.h. Contains variables and functions -// for Kerberos Four Properites -// -// History: -// -// MM/DD/YY Inits Description of Change -// 12/02/98 ADL Original -// ************************************************************************************** - - -#include "stdafx.h" -#include "leash.h" -#include "Krb4EditDomainRealmList.h" -#include "lglobals.h" - -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif - -///////////////////////////////////////////////////////////////////////////// -// CKrb4EditDomainRealmList dialog - - -CKrb4EditDomainRealmList::CKrb4EditDomainRealmList(LPSTR editItem, CWnd* pParent) - : CDialog(CKrb4EditDomainRealmList::IDD, pParent) -{ - m_startup = TRUE; - m_editItem = _T(""); - - // Parse the passed in item - LPSTR pEditItem = editItem; - LPSTR findSpace = strchr(editItem, ' '); - if (findSpace) - *findSpace = 0; - else - { -////@#+This hack doesn't seem right -#ifndef NO_KRB4 - - LeashErrorBox("This is a defective entry in file", - CKrb4ConfigFileLocation::m_newKrbrealmFile); -#endif - ASSERT(0); - m_initDomainHost = m_newDomainHost = editItem; - m_initRealm = m_newRealm = _T(""); - return; - } - - m_initDomainHost = m_newDomainHost = editItem; // first token - - pEditItem = strchr(editItem, '\0'); - if (pEditItem) - { - pEditItem++; - findSpace++; - } - else - ASSERT(0); - - findSpace = strchr(pEditItem, ' '); - if (findSpace) - { - *findSpace = 0; - } - - m_initRealm = m_newRealm = pEditItem; // second token - - //{{AFX_DATA_INIT(CKrb4EditDomainRealmList) - // NOTE: the ClassWizard will add member initialization here - //}}AFX_DATA_INIT -} - -void CKrb4EditDomainRealmList::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); - //{{AFX_DATA_MAP(CKrb4EditDomainRealmList) - // NOTE: the ClassWizard will add DDX and DDV calls here - //}}AFX_DATA_MAP -} - - -BEGIN_MESSAGE_MAP(CKrb4EditDomainRealmList, CDialog) - //{{AFX_MSG_MAP(CKrb4EditDomainRealmList) - ON_WM_SHOWWINDOW() - ON_EN_CHANGE(IDC_EDIT_REALMNAME, OnChangeEditDefaultRealm) - ON_EN_CHANGE(IDC_EDIT_DOMAINHOST, OnChangeEditRealmHostname) - //}}AFX_MSG_MAP -END_MESSAGE_MAP() - -///////////////////////////////////////////////////////////////////////////// -// CKrb4EditDomainRealmList message handlers - - -void CKrb4EditDomainRealmList::OnShowWindow(BOOL bShow, UINT nStatus) -{ - CDialog::OnShowWindow(bShow, nStatus); - m_startup = FALSE; -} - -BOOL CKrb4EditDomainRealmList::OnInitDialog() -{ - CDialog::OnInitDialog(); - - SetDlgItemText(IDC_EDIT_REALMNAME, m_newRealm); - SetDlgItemText(IDC_EDIT_DOMAINHOST, m_newDomainHost); - - return TRUE; -} - -void CKrb4EditDomainRealmList::OnChangeEditDefaultRealm() -{ - if (!m_startup) - GetDlgItemText(IDC_EDIT_REALMNAME, m_newRealm); -} - -void CKrb4EditDomainRealmList::OnChangeEditRealmHostname() -{ - if (!m_startup) - GetDlgItemText(IDC_EDIT_DOMAINHOST, m_newDomainHost); -} - -void CKrb4EditDomainRealmList::OnOK() -{ - m_newRealm.TrimLeft(); - m_newRealm.TrimRight(); - m_newDomainHost.TrimLeft(); - m_newDomainHost.TrimRight(); - - if (m_newRealm.IsEmpty() || m_newDomainHost.IsEmpty()) - { // stay - MessageBox("OnOK::Both Domain-Host and Realm fields must be filled in!", - "Leash", MB_OK); - } - else if (-1 != m_newRealm.Find(' ') || -1 != m_newDomainHost.Find(' ')) - { // stay - MessageBox("OnOK::Illegal space found!", "Leash", MB_OK); - } - - else - CDialog::OnOK(); // exit - - m_editItem = m_newDomainHost + " " + m_newRealm; -} diff --git a/src/windows/leash/Krb4EditDomainRealmList.h b/src/windows/leash/Krb4EditDomainRealmList.h deleted file mode 100644 index 9f8a18f760..0000000000 --- a/src/windows/leash/Krb4EditDomainRealmList.h +++ /dev/null @@ -1,77 +0,0 @@ -// ************************************************************************************** -// File: Krb4EditDomainRealmList.h -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. -// Description: H file for Krb4EditDomainRealmList.cpp. Contains variables and functions -// for Kerberos Four Properites -// -// History: -// -// MM/DD/YY Inits Description of Change -// 12/02/98 ADL Original -// ************************************************************************************** - - -#if !defined(AFX_KRB4EDITDOMAINREALMLIST_H__F4D41684_96A4_11D2_94E2_0000861B8A3C__INCLUDED_) -#define AFX_KRB4EDITDOMAINREALMLIST_H__F4D41684_96A4_11D2_94E2_0000861B8A3C__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 -// CKrb4EditDomainRealmList.h : header file -// - -///////////////////////////////////////////////////////////////////////////// -// CKrb4EditDomainRealmList dialog - -class CKrb4EditDomainRealmList : public CDialog -{ -// Construction -private: - CString m_editItem; - CString m_initRealm; - CString m_newRealm; - CString m_initDomainHost; - CString m_newDomainHost; - BOOL m_startup; - - -public: - CKrb4EditDomainRealmList(LPSTR editItem, CWnd* pParent = NULL); - CString GetEditedItem() {return m_editItem;} - CString GetRealm() {return m_newRealm;} - CString GetDomainHost() {return m_newDomainHost;} - -// Dialog Data - //{{AFX_DATA(CKrb4EditDomainRealmList) - enum { IDD = IDD_KRB4_EDIT_DOMAINREALMNAME }; - // NOTE: the ClassWizard will add data members here - //}}AFX_DATA - - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CKrb4EditDomainRealmList) - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL - -// Implementation -protected: - - // Generated message map functions - //{{AFX_MSG(CKrb4EditDomainRealmList) - afx_msg void OnShowWindow(BOOL bShow, UINT nStatus); - virtual BOOL OnInitDialog(); - afx_msg void OnChangeEditDefaultRealm(); - afx_msg void OnChangeEditRealmHostname(); - virtual void OnOK(); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() -}; - -//{{AFX_INSERT_LOCATION}} -// Microsoft Visual C++ will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_KRB4EDITDOMAINREALMLIST_H__F4D41684_96A4_11D2_94E2_0000861B8A3C__INCLUDED_) diff --git a/src/windows/leash/Krb5Properties.cpp b/src/windows/leash/Krb5Properties.cpp deleted file mode 100644 index c4ffef2bf7..0000000000 --- a/src/windows/leash/Krb5Properties.cpp +++ /dev/null @@ -1,644 +0,0 @@ -//**************************************************************************** -// File: Krb5Properties.cpp -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright: 1998 Massachusetts Institute of Technology - All rights -// reserved. -// Description: CPP file for Krb5Properties.h. Contains variables and functions -// for Kerberos Five Properties -// -// History: -// -// MM/DD/YY Inits Description of Change -// 12/02/98 ADL Original -//***************************************************************************** - -#include "stdafx.h" -#include "leash.h" -#include "LeashFileDialog.h" -#include "Krb5Properties.h" -#include "win-mac.h" -#include "lglobals.h" -#include "LeashView.h" - -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif - - -///////////////////////////////////////////////////////////////////////////// -// CKrb5ConfigFileLocation dialog - -IMPLEMENT_DYNCREATE(CKrb5ConfigFileLocation, CPropertyPage) - -CKrb5ConfigFileLocation::CKrb5ConfigFileLocation() - : CPropertyPage(CKrb5ConfigFileLocation::IDD) -{ - m_initConfigFile = _T(""); - m_initTicketFile = _T(""); - m_newConfigFile = _T(""); - m_newTicketFile = _T(""); - m_startupPage1 = TRUE; - - //{{AFX_DATA_INIT(CKrb5ConfigFileLocation) - //}}AFX_DATA_INIT -} - -void CKrb5ConfigFileLocation::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); - //{{AFX_DATA_MAP(CKrb5ConfigFileLocation) - DDX_Control(pDX, IDC_EDIT_KRB5_TXT_FILE, m_ticketEditBox); - //}}AFX_DATA_MAP -} - -BEGIN_MESSAGE_MAP(CKrb5ConfigFileLocation, CDialog) - //{{AFX_MSG_MAP(CKrb5ConfigFileLocation) - ON_BN_CLICKED(IDC_BUTTON_KRB5INI_BROWSE, OnButtonKrb5iniBrowse) - ON_BN_CLICKED(IDC_BUTTON_KRB5_TICKETFILE_BROWSE, OnButtonKrb5TicketfileBrowse) - ON_EN_CHANGE(IDC_EDIT_KRB5_TXT_FILE, OnChangeEditKrb5TxtFile) - ON_EN_CHANGE(IDC_EDIT_KRB5INI_LOCATION, OnChangeEditKrb5iniLocation) - ON_WM_SHOWWINDOW() - //}}AFX_MSG_MAP -END_MESSAGE_MAP() - - -BOOL CKrb5ConfigFileLocation::OnApply() -{ - BOOL tooManySlashes = FALSE; - BOOL foundError = FALSE; - - if( getenv("RENEW_TILL") != NULL) - { - MessageBox("The ticket renewable time is being controlled by the environment" - "variable RENEW_TILL instead of the registry. Leash cannot modify" - "the environment. Use the System control panel instead.", - "Leash", MB_OK); - return(FALSE); - } - - if( getenv("RENEWABLE") != NULL) - { - MessageBox("Ticket renewability is being controlled by the environment" - "variable RENEWABLE instead of the registry. Leash cannot modify" - "the environment. Use the System control panel instead.", - "Leash", MB_OK); - return(FALSE); - } - - if( getenv("FORWARDABLE") != NULL) - { - MessageBox("Ticket forwarding is being controlled by the environment" - "variable FORWARDABLE instead of the registry. Leash cannot modify" - "the environment. Use the System control panel instead.", - "Leash", MB_OK); - return(FALSE); - } - - if( getenv("PROXIABLE") != NULL) - { - MessageBox("Ticket proxying is being controlled by the environment" - "variable PROXIABLE instead of the registry. Leash cannot modify" - "the environment. Use the System control panel instead.", - "Leash", MB_OK); - return(FALSE); - } - - if( getenv("NOADDRESSES") != NULL) - { - MessageBox("Addressless tickets are being controlled by the environment" - "variable NOADDRESSES instead of the registry. Leash cannot modify" - "the environment. Use the System control panel instead.", - "Leash", MB_OK); - return(FALSE); - } - - - // KRB5.INI file - if (!CLeashApp::m_krbv5_profile || - 0 != m_newConfigFile.CompareNoCase(m_initConfigFile)) - { // Different path for Krb5.ini - - if (IsDlgButtonChecked(IDC_CHECK_CONFIRM_KRB5_EXISTS)) - { - // Check for extra slashes at end of path - LPSTR pSlash = strrchr(m_newConfigFile.GetBuffer(0), '\\'); - if (pSlash && *(pSlash - 1) == '\\') - { // don't commit changes - tooManySlashes = TRUE; - } - else if (pSlash && *(pSlash + 1) == '\0') - { // commit changes, but take out slash at the end of path - *pSlash = 0; - } - - m_newConfigFile.ReleaseBuffer(-1); - - // Check for invalid path - Directory directory(m_newConfigFile); - if (tooManySlashes || !directory.IsValidFile()) - { // don't commit changes - foundError = TRUE; - - if (tooManySlashes) - LeashErrorBox("OnApply::Too Many Slashes At End of " - "Selected Directory", - m_newConfigFile); - else - LeashErrorBox("OnApply::Selected file doesn't exist", - m_newConfigFile); - - SetDlgItemText(IDC_EDIT_KRB5INI_LOCATION, m_initConfigFile); - } - else - { - // more error checking - CHAR confname[MAX_PATH]; - - const char *filenames[2]; - filenames[0] = m_newConfigFile; - filenames[1] = NULL; - - const char* rootSection[] = {"realms", NULL}; - const char** rootsec = rootSection; - char **sections = NULL; - - long retval = pprofile_init(filenames, &CLeashApp::m_krbv5_profile); - if (!retval) - retval = pprofile_get_subsection_names(CLeashApp::m_krbv5_profile, - rootsec, §ions - ); - if (retval || !*sections ) - { - foundError = TRUE; - MessageBox("Your file selection is either corrupt or not a Kerberos Five Config. file", - "Leash", MB_OK); - - pprofile_free_list(sections); - - // Restore old 'valid' config. file - if (CLeashApp::GetProfileFile(confname, sizeof(confname))) - { - foundError = TRUE; - MessageBox("Can't locate Kerberos Five Config. file!", - "Error", MB_OK); - return TRUE; - } - - filenames[0] = confname; - filenames[1] = NULL; - - retval = pprofile_init(filenames, &CLeashApp::m_krbv5_profile); - if (!retval) - retval = pprofile_get_subsection_names(CLeashApp::m_krbv5_profile, - rootsec, §ions); - if (retval || !*sections) - { - foundError = TRUE; - MessageBox("OnApply::There is a problem with your " - "Kerberos Five Config. file!\n" - "Contact your Administrator.", - "Leash", MB_OK); - } - - pprofile_free_list(sections); - SetDlgItemText(IDC_EDIT_KRB5INI_LOCATION, m_initConfigFile); - - pprofile_release(CLeashApp::m_krbv5_profile); - return TRUE; - } - - pprofile_free_list(sections); - } - } - - // Commit changes - if (!foundError) - { - if (SetRegistryVariable("config", m_newConfigFile, - "Software\\MIT\\Kerberos5")) - { - MessageBox("Failed to set \"Krb.conf\"!", "Error", MB_OK); - } - - m_initConfigFile = m_newConfigFile; - SetModified(TRUE); - } - } - - // Credential cache (ticket) file - // Ticket file - if (0 != m_initTicketFile.CompareNoCase(m_newTicketFile)) - { - if (getenv("KRB5_ENV_CCNAME")) - { - // Just in case they set (somehow) KRB5_ENV_CCNAME while this box is up - MessageBox("OnApply::Ticket file is set in your System's" - "Environment!\nYou must first remove it.", - "Error", MB_OK); - - return TRUE; - } - - // Commit changes - if (SetRegistryVariable("ccname", m_newTicketFile, - "Software\\MIT\\Kerberos5")) - { - MessageBox("Failed to set \"ccname\"!", "Error", MB_OK); - } - if ( CLeashApp::m_krbv5_context ) - pkrb5_cc_set_default_name(CLeashApp::m_krbv5_context,m_newTicketFile); - - m_initTicketFile = m_newTicketFile; - } - - return TRUE; -} - - -BOOL CKrb5ConfigFileLocation::OnInitDialog() -{ - CDialog::OnInitDialog(); - - CHAR confname[MAX_PATH]; - CHAR ticketName[MAX_PATH]; - - CheckDlgButton(IDC_CHECK_CONFIRM_KRB5_EXISTS, TRUE); - - // Config. file (Krb5.ini) - if (CLeashApp::GetProfileFile(confname, sizeof(confname))) - { - MessageBox("Can't locate Kerberos Five config. file!", "Error", MB_OK); - return TRUE; - } - - m_initConfigFile = m_newConfigFile = confname; - SetDlgItemText(IDC_EDIT_KRB5INI_LOCATION, m_initConfigFile); - - if (pLeash_get_lock_file_locations() || getenv("KRB5_CONFIG")) - { - GetDlgItem(IDC_EDIT_KRB5INI_LOCATION)->EnableWindow(FALSE); - GetDlgItem(IDC_BUTTON_KRB5INI_BROWSE)->EnableWindow(FALSE); - GetDlgItem(IDC_CHECK_CONFIRM_KRB5_EXISTS)->EnableWindow(FALSE); - } - else if ( !(getenv("KRB5_CONFIG")) ) - { - GetDlgItem(IDC_STATIC_INIFILES)->ShowWindow(FALSE); - } - - - // Set TICKET.KRB file Editbox - *ticketName = NULL; - if (CLeashApp::m_krbv5_context) - { - const char *pticketName = pkrb5_cc_default_name(CLeashApp::m_krbv5_context); - - if (pticketName) - strcpy(ticketName, pticketName); - } - - if (!*ticketName) - { - MessageBox("OnInitDialog::Can't locate Kerberos Five ticket file!", - "Error", MB_OK); - return TRUE; - } - else - { - m_initTicketFile = m_newTicketFile = ticketName; - SetDlgItemText(IDC_EDIT_KRB5_TXT_FILE, m_initTicketFile); - } - - if (getenv("KRB5CCNAME")) - GetDlgItem(IDC_EDIT_KRB5_TXT_FILE)->EnableWindow(FALSE); - else - GetDlgItem(IDC_STATIC_TICKETFILE)->ShowWindow(FALSE); - - return TRUE; -} - -void CKrb5ConfigFileLocation::OnButtonKrb5iniBrowse() -{ - CLeashFileDialog dlgFile(TRUE, NULL, "*.*", - "Kerbereos Five Config. File (.ini)"); - dlgFile.m_ofn.lpstrTitle = "Select the Kerberos Five Config. File"; - while (TRUE) - { - if (IDOK == dlgFile.DoModal()) - { - m_newConfigFile = dlgFile.GetPathName(); - SetDlgItemText(IDC_EDIT_KRB5INI_LOCATION, m_newConfigFile); - break; - } - else - break; - } -} - -void CKrb5ConfigFileLocation::OnButtonKrb5TicketfileBrowse() -{ - CString ticket_path = "*.*"; - CLeashFileDialog dlgFile(TRUE, NULL, ticket_path, - "Kerbereos Five Ticket File (Krb5cc)"); - dlgFile.m_ofn.lpstrTitle = "Select Credential Cache (Ticket) File"; - - if (IDOK == dlgFile.DoModal()) - { - m_newTicketFile = dlgFile.GetPathName(); - SetDlgItemText(IDC_EDIT_KRB5_TXT_FILE, m_newTicketFile); - } -} - -void CKrb5ConfigFileLocation::OnChangeEditKrb5iniLocation() -{ - if (!m_startupPage1) - { - GetDlgItemText(IDC_EDIT_KRB5INI_LOCATION, m_newConfigFile); - SetModified(TRUE); - } -} - -void CKrb5ConfigFileLocation::OnChangeEditKrb5TxtFile() -{ - if (!m_startupPage1) - { - GetDlgItemText(IDC_EDIT_KRB5_TXT_FILE, m_newTicketFile); - SetModified(TRUE); - } -} - -void CKrb5ConfigFileLocation::OnShowWindow(BOOL bShow, UINT nStatus) -{ - CDialog::OnShowWindow(bShow, nStatus); - m_startupPage1 = FALSE; -} - - -///////////////////////////////////////////////////////////////////////////// -// CKrb5ConfigOptions dialog - -IMPLEMENT_DYNCREATE(CKrb5ConfigOptions, CPropertyPage) - -CKrb5ConfigOptions::CKrb5ConfigOptions() - : CPropertyPage(CKrb5ConfigOptions::IDD) -{ - m_initForwardable = 0; - m_newForwardable = 0; - m_initProxiable = 0; - m_newProxiable = 0; - m_initRenewable = 0; - m_newRenewable = 0; - m_initNoAddress = 0; - m_newNoAddress = 0; - m_initIPAddress = 0; -#ifdef SET_PUBLIC_IP - m_newIPAddress = 0; -#endif /* SET_PUBLIC_IP */ - - //{{AFX_DATA_INIT(CKrb5ConfigOptions) - // NOTE: the ClassWizard will add member initialization here - //}}AFX_DATA_INIT -} - - -void CKrb5ConfigOptions::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); - - //{{AFX_DATA_MAP(CKrb5ConfigOptions) - // NOTE: the ClassWizard will add DDX and DDV calls here - //}}AFX_DATA_MAP -} - - -BEGIN_MESSAGE_MAP(CKrb5ConfigOptions, CDialog) - //{{AFX_MSG_MAP(CKrb5ConfigOptions) - ON_BN_CLICKED(IDC_CHECK_FORWARDABLE, OnCheckForwardable) - ON_BN_CLICKED(IDC_CHECK_PROXIABLE, OnCheckProxiable) - ON_BN_CLICKED(IDC_CHECK_RENEWABLE, OnCheckRenewable) - ON_BN_CLICKED(IDC_CHECK_NO_ADDRESS, OnCheckNoAddress) - ON_WM_HELPINFO() - //}}AFX_MSG_MAP -END_MESSAGE_MAP() - - -BOOL CKrb5ConfigOptions::OnApply() -{ -#ifdef SET_PUBLIC_IP - SendDlgItemMessage( IDC_IPADDRESS_PUBLIC, - IPM_GETADDRESS, - 0, - (LPARAM)(LPDWORD)&m_newIPAddress - ); -#endif /* SET_PUBLIC_IP */ - - if ((m_initForwardable == m_newForwardable) && - (m_initProxiable == m_newProxiable) && - (m_initRenewable == m_newRenewable) && - (m_initNoAddress == m_newNoAddress) -#ifdef SET_PUBLIC_IP - && (m_initIPAddress == m_newIPAddress) -#endif /* SET_PUBLIC_IP */ - ) - return TRUE; - - CWinApp *pApp = NULL; - pApp = AfxGetApp(); - if (!pApp) - { - MessageBox("There is a problem finding Leash application " - "information!", - "Error", MB_OK); - return FALSE; - } - - if ( m_newNoAddress == FALSE ) { - CHAR confname[MAX_PATH]; - if (!CLeashApp::GetProfileFile(confname, sizeof(confname))) - { - const char *filenames[2]; - char *value=NULL; - long retval, noaddresses = 1; - filenames[0] = confname; - filenames[1] = NULL; - retval = pprofile_init(filenames, &CLeashApp::m_krbv5_profile); - if (!retval) { - retval = pprofile_get_string(CLeashApp::m_krbv5_profile, "libdefaults","noaddresses", 0, "true", &value); - if ( value ) { - noaddresses = config_boolean_to_int(value); - pprofile_release_string(value); - } - pprofile_release(CLeashApp::m_krbv5_profile); - } - - if ( noaddresses ) - { - MessageBox("The No Addresses setting cannot be disabled unless the setting\n" - " noaddresses=false\n" - "is added to the [libdefaults] section of the KRB5.INI file.", - "Error", MB_OK); - return FALSE; - - } - } - } - - pLeash_set_default_forwardable(m_newForwardable); - pLeash_set_default_proxiable(m_newProxiable); - pLeash_set_default_renewable(m_newRenewable); - pLeash_set_default_noaddresses(m_newNoAddress); -#ifdef SET_PUBLIC_IP - pLeash_set_default_publicip(m_newIPAddress); -#endif /* SET_PUBLIC_IP */ - - CLeashView::m_forwardableTicket = m_initForwardable = m_newForwardable; - CLeashView::m_proxiableTicket = m_initProxiable = m_newProxiable; - CLeashView::m_renewableTicket = m_initRenewable = m_newRenewable; - CLeashView::m_noaddressTicket = m_initNoAddress = m_newNoAddress; -#ifdef SET_PUBLIC_IP - CLeashView::m_publicIPAddress = m_initIPAddress = m_newIPAddress; -#endif /* SET_PUBLIC_IP */ - return TRUE; -} - -BOOL CKrb5ConfigOptions::OnInitDialog() -{ - CDialog::OnInitDialog(); - - CWinApp *pApp = NULL; - pApp = AfxGetApp(); - if (!pApp) - { - MessageBox("There is a problem finding Leash application " - "information!", - "Error", MB_OK); - } - else - { - m_initForwardable = pLeash_get_default_forwardable(); - m_initProxiable = pLeash_get_default_proxiable(); - m_initRenewable = pLeash_get_default_renewable(); - m_initNoAddress = pLeash_get_default_noaddresses(); - m_initIPAddress = pLeash_get_default_publicip(); - } - - CheckDlgButton(IDC_CHECK_FORWARDABLE, m_initForwardable); - m_newForwardable = m_initForwardable; - - CheckDlgButton(IDC_CHECK_PROXIABLE, m_initProxiable); - m_newProxiable = m_initProxiable; - - CheckDlgButton(IDC_CHECK_RENEWABLE, m_initRenewable); - m_newRenewable = m_initRenewable; - - CheckDlgButton(IDC_CHECK_NO_ADDRESS, m_initNoAddress); - m_newNoAddress = m_initNoAddress; - - if ( m_initNoAddress ) { - // Disable the control - jaltman - - SendDlgItemMessage( IDC_IPADDRESS_PUBLIC, - IPM_CLEARADDRESS, - 0, - 0 - ); - } - else { - SendDlgItemMessage( IDC_IPADDRESS_PUBLIC, - IPM_SETADDRESS, - 0, - (LPARAM)m_initIPAddress - ); - } -#ifdef SET_PUBLIC_IP - m_newIPAddress = m_initIPAddress; -#endif /* SET_PUBLIC_IP */ - - return TRUE; // return TRUE unless you set the focus to a control - // EXCEPTION: OCX Property Pages should return FALSE -} - -void CKrb5ConfigOptions::OnCheckForwardable() -{ - m_newForwardable = (BOOL)IsDlgButtonChecked(IDC_CHECK_FORWARDABLE); - SetModified(TRUE); -} - -void CKrb5ConfigOptions::OnCheckProxiable() -{ - m_newProxiable = (BOOL)IsDlgButtonChecked(IDC_CHECK_PROXIABLE); - SetModified(TRUE); -} - -void CKrb5ConfigOptions::OnCheckRenewable() -{ - m_newRenewable = (BOOL)IsDlgButtonChecked(IDC_CHECK_RENEWABLE); - SetModified(TRUE); -} - -void CKrb5ConfigOptions::OnCheckNoAddress() -{ - m_newNoAddress = (BOOL)IsDlgButtonChecked(IDC_CHECK_NO_ADDRESS); - SetModified(TRUE); - - if ( m_newNoAddress ) { - // Disable the control - jaltman - - SendDlgItemMessage( IDC_IPADDRESS_PUBLIC, - IPM_CLEARADDRESS, - 0, - 0 - ); - } else { - // Enable the IP Address Control - jaltman - - SendDlgItemMessage( IDC_IPADDRESS_PUBLIC, - IPM_SETADDRESS, - 0, - (LPARAM)m_initIPAddress - ); - } -} - -/////////////////////////////////////////////////////////////////////// -// CKrb5Properties - -IMPLEMENT_DYNAMIC(CKrb5Properties, CPropertySheet) - -CKrb5Properties::CKrb5Properties(UINT nIDCaption, CWnd* pParentWnd, - UINT iSelectPage) - :CPropertySheet(nIDCaption, pParentWnd, iSelectPage) -{ -} - -CKrb5Properties::CKrb5Properties(LPCTSTR pszCaption, CWnd* pParentWnd, - UINT iSelectPage) - :CPropertySheet(pszCaption, pParentWnd, iSelectPage) -{ - AddPage(&m_fileLocation); - AddPage(&m_configOptions); -} - -CKrb5Properties::~CKrb5Properties() -{ -} - -void CKrb5Properties::OnHelp() -{ -#ifdef CALL_HTMLHELP - AfxGetApp()->HtmlHelp(HID_KRB5_PROPERTIES_COMMAND); -#else - AfxGetApp()->WinHelp(HID_KRB5_PROPERTIES_COMMAND); -#endif -} - - - -BEGIN_MESSAGE_MAP(CKrb5Properties, CPropertySheet) - //{{AFX_MSG_MAP(CKrb5Properties) - // NOTE - the ClassWizard will add and remove mapping macros here. - ON_COMMAND(ID_HELP, OnHelp) - //}}AFX_MSG_MAP -END_MESSAGE_MAP() diff --git a/src/windows/leash/Krb5Properties.h b/src/windows/leash/Krb5Properties.h deleted file mode 100644 index c091ddd55b..0000000000 --- a/src/windows/leash/Krb5Properties.h +++ /dev/null @@ -1,172 +0,0 @@ -// ************************************************************************************** -// File: Krb5Properties.h -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. -// Description: H file for Krb5Properties.cpp. Contains variables and functions -// for Kerberos Five Properties -// -// History: -// -// MM/DD/YY Inits Description of Change -// 12/02/98 ADL Original -// ************************************************************************************** - - -#if !defined(AFX_KRB5PROPERTIES_H__9011A0B3_6E92_11D2_9454_0000861B8A3C__INCLUDED_) -#define AFX_KRB5PROPERTIES_H__9011A0B3_6E92_11D2_9454_0000861B8A3C__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 -// Krb5Properties.h : header file -// - -///////////////////////////////////////////////////////////////////////////// -// CKrb5ConfigOptions dialog - -class CKrb5ConfigFileLocation : public CPropertyPage -{ -// Construction -private: - DECLARE_DYNCREATE(CKrb5ConfigFileLocation) - CString m_initConfigFile; - CString m_initTicketFile; - CString m_newConfigFile; - CString m_newTicketFile; - BOOL m_startupPage1; - -public: - CKrb5ConfigFileLocation(); // standard constructor - -// Dialog Data - //{{AFX_DATA(CKrb5ConfigFileLocation) - enum { IDD = IDD_KRB5_PROP_LOCATION }; - CEdit m_ticketEditBox; - //}}AFX_DATA - - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CKrb5ConfigFileLocation) - public: - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL - - virtual BOOL OnApply(); - - // Implementation -protected: - - // Generated message map functions - //{{AFX_MSG(CKrb5ConfigFileLocation) - virtual BOOL OnInitDialog(); - afx_msg void OnButtonKrb5iniBrowse(); - afx_msg void OnButtonKrb5TicketfileBrowse(); - afx_msg void OnChangeEditKrb5TxtFile(); - afx_msg void OnChangeEditKrb5iniLocation(); - afx_msg void OnShowWindow(BOOL bShow, UINT nStatus); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() -}; - - -///////////////////////////////////////////////////////////////////////////// -// CKrb5ConfigOptions dialog - -class CKrb5ConfigOptions : public CPropertyPage -{ -// Construction -private: - DECLARE_DYNCREATE(CKrb5ConfigOptions) - INT m_initForwardable; - INT m_newForwardable; - INT m_initProxiable; - INT m_newProxiable; - INT m_initRenewable; - INT m_newRenewable; - INT m_initNoAddress; - INT m_newNoAddress; - DWORD m_initIPAddress; -#ifdef SET_PUBLIC_IP - DWORD m_newIPAddress; -#endif /* SET_PUBLIC_IP */ - -public: - CKrb5ConfigOptions(); // standard constructor - -// Dialog Data - //{{AFX_DATA(CKrb5ConfigOptions) - enum { IDD = IDD_KRB5_PROP_CONTENT }; - //}}AFX_DATA - - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CKrb5ConfigOptions) - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL - - virtual BOOL OnApply(); - -// Implementation -protected: - - // Generated message map functions - //{{AFX_MSG(CKrb5ConfigOptions) - virtual BOOL OnInitDialog(); - afx_msg void OnCheckForwardable(); - afx_msg void OnCheckProxiable(); - afx_msg void OnCheckRenewable(); - afx_msg void OnCheckNoAddress(); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() -}; - -class CKrb5Properties : public CPropertySheet -{ -private: - DECLARE_DYNAMIC(CKrb5Properties) - -public: - CKrb5ConfigFileLocation m_fileLocation; - CKrb5ConfigOptions m_configOptions; - -// Construction -public: - CKrb5Properties(UINT nIDCaption, CWnd* pParentWnd = NULL, - UINT iSelectPage = 0); - CKrb5Properties(LPCTSTR pszCaption, CWnd* pParentWnd = NULL, - UINT iSelectPage = 0); - -// Attributes -public: - -// Operations -public: - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CKrb5Properties) - //}}AFX_VIRTUAL - -// Implementation -public: - virtual ~CKrb5Properties(); - - // Generated message map functions -protected: - //{{AFX_MSG(CKrb5Properties) - // NOTE - the ClassWizard will add and remove member functions here. - afx_msg void OnHelp(); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() -}; - - -//{{AFX_INSERT_LOCATION}} -// Microsoft Visual C++ will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_KRB5PROPERTIES_H__9011A0B3_6E92_11D2_9454_0000861B8A3C__INCLUDED_) diff --git a/src/windows/leash/KrbAddHostServer.cpp b/src/windows/leash/KrbAddHostServer.cpp deleted file mode 100644 index fc53e416a1..0000000000 --- a/src/windows/leash/KrbAddHostServer.cpp +++ /dev/null @@ -1,77 +0,0 @@ -// KrbAddHostServer.cpp : implementation file -// - -#include "stdafx.h" -#include "leash.h" -#include "KrbAddHostServer.h" - -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif - -///////////////////////////////////////////////////////////////////////////// -// CKrbAddHostServer dialog - - -CKrbAddHostServer::CKrbAddHostServer(CWnd* pParent /*=NULL*/) - : CDialog(CKrbAddHostServer::IDD, pParent) -{ - m_newHost = _T(""); - m_startup = TRUE; - - //{{AFX_DATA_INIT(CKrbAddHostServer) - // NOTE: the ClassWizard will add member initialization here - //}}AFX_DATA_INIT -} - - -void CKrbAddHostServer::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); - //{{AFX_DATA_MAP(CKrbAddHostServer) - // NOTE: the ClassWizard will add DDX and DDV calls here - //}}AFX_DATA_MAP -} - - -BEGIN_MESSAGE_MAP(CKrbAddHostServer, CDialog) - //{{AFX_MSG_MAP(CKrbAddHostServer) - ON_EN_CHANGE(IDC_EDIT_KDC_HOST, OnChangeEditKdcHost) - ON_WM_SHOWWINDOW() - //}}AFX_MSG_MAP -END_MESSAGE_MAP() - -///////////////////////////////////////////////////////////////////////////// -// CKrbAddHostServer message handlers - -void CKrbAddHostServer::OnOK() -{ - m_newHost.TrimLeft(); - m_newHost.TrimRight(); - - if (m_newHost.IsEmpty()) - { // stay - MessageBox("OnOK:: Server Hosting a KDC must be filled in!", - "Error", MB_OK); - } - else if (-1 != m_newHost.Find(' ')) - { // stay - MessageBox("OnOK::Illegal space found!", "Error", MB_OK); - } - else - CDialog::OnOK(); // exit -} - -void CKrbAddHostServer::OnChangeEditKdcHost() -{ - if (!m_startup) - GetDlgItemText(IDC_EDIT_KDC_HOST, m_newHost); -} - -void CKrbAddHostServer::OnShowWindow(BOOL bShow, UINT nStatus) -{ - CDialog::OnShowWindow(bShow, nStatus); - m_startup = FALSE; -} diff --git a/src/windows/leash/KrbAddHostServer.h b/src/windows/leash/KrbAddHostServer.h deleted file mode 100644 index 989d388939..0000000000 --- a/src/windows/leash/KrbAddHostServer.h +++ /dev/null @@ -1,53 +0,0 @@ -#if !defined(AFX_KRBADDHOSTSERVER_H__1B6B6ED8_D26D_11D2_95AF_0000861B8A3C__INCLUDED_) -#define AFX_KRBADDHOSTSERVER_H__1B6B6ED8_D26D_11D2_95AF_0000861B8A3C__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 -// KrbAddHostServer.h : header file -// - -///////////////////////////////////////////////////////////////////////////// -// CKrbAddHostServer dialog - -class CKrbAddHostServer : public CDialog -{ -// Construction - CString m_newHost; - BOOL m_startup; - -public: - CKrbAddHostServer(CWnd* pParent = NULL); // standard constructor - CString GetNewHost() {return m_newHost;} - - -// Dialog Data - //{{AFX_DATA(CKrbAddHostServer) - enum { IDD = IDD_KRB_ADD_KDC_HOSTSERVER}; - // NOTE: the ClassWizard will add data members here - //}}AFX_DATA - - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CKrbAddHostServer) - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL - -// Implementation -protected: - - // Generated message map functions - //{{AFX_MSG(CKrbAddHostServer) - virtual void OnOK(); - afx_msg void OnChangeEditKdcHost(); - afx_msg void OnShowWindow(BOOL bShow, UINT nStatus); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() -}; - -//{{AFX_INSERT_LOCATION}} -// Microsoft Visual C++ will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_KRBADDHOSTSERVER_H__1B6B6ED8_D26D_11D2_95AF_0000861B8A3C__INCLUDED_) diff --git a/src/windows/leash/KrbAddRealm.cpp b/src/windows/leash/KrbAddRealm.cpp deleted file mode 100644 index 4527e4bccc..0000000000 --- a/src/windows/leash/KrbAddRealm.cpp +++ /dev/null @@ -1,88 +0,0 @@ -// File: KrbAddRealm.cpp -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. -// Description: CPP file for KrbAddRealm.h. Contains variables and functions -// for Kerberos Four and Five Properties -// -// History: -// -// MM/DD/YY Inits Description of Change -// 12/02/98 ADL Original -// ************************************************************************************** - - -#include "stdafx.h" -#include "leash.h" -#include "KrbAddRealm.h" - -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif - -///////////////////////////////////////////////////////////////////////////// -// CKrbAddRealm dialog - - -CKrbAddRealm::CKrbAddRealm(CWnd* pParent /*=NULL*/) -: CDialog(CKrbAddRealm::IDD, pParent) -{ - m_newRealm = _T(""); - m_startup = TRUE; - - //{{AFX_DATA_INIT(CKrbAddRealm) - // NOTE: the ClassWizard will add member initialization here - //}}AFX_DATA_INIT -} - - -void CKrbAddRealm::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); - //{{AFX_DATA_MAP(CKrbAddRealm) - // NOTE: the ClassWizard will add DDX and DDV calls here - //}}AFX_DATA_MAP -} - - -BEGIN_MESSAGE_MAP(CKrbAddRealm, CDialog) - //{{AFX_MSG_MAP(CKrbAddRealm) - ON_WM_SHOWWINDOW() - ON_EN_CHANGE(IDC_EDIT_REALM, OnChangeEditRealm) - //}}AFX_MSG_MAP -END_MESSAGE_MAP() - -///////////////////////////////////////////////////////////////////////////// -// CKrbAddRealm message handlers - -void CKrbAddRealm::OnShowWindow(BOOL bShow, UINT nStatus) -{ - CDialog::OnShowWindow(bShow, nStatus); - m_startup = FALSE; -} - -void CKrbAddRealm::OnChangeEditRealm() -{ - if (!m_startup) - GetDlgItemText(IDC_EDIT_REALM, m_newRealm); -} - -void CKrbAddRealm::OnOK() -{ - m_newRealm.TrimLeft(); - m_newRealm.TrimRight(); - - if (m_newRealm.IsEmpty()) - { // stay - MessageBox("OnOK:: Kerberos Realm must be filled in!", - "Leash", MB_OK); - } - else if (-1 != m_newRealm.Find(' ')) - { // stay - MessageBox("OnOK::Illegal space found!", "Leash", MB_OK); - } - else - CDialog::OnOK(); // exit -} diff --git a/src/windows/leash/KrbAddRealm.h b/src/windows/leash/KrbAddRealm.h deleted file mode 100644 index 48ae4b76fa..0000000000 --- a/src/windows/leash/KrbAddRealm.h +++ /dev/null @@ -1,66 +0,0 @@ -// ************************************************************************************** -// File: KrbAddRealm.h -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. -// Description: H file for KrbAddRealm.cpp Contains variables and functions -// for Kerberos Four and Five Properties -// -// History: -// -// MM/DD/YY Inits Description of Change -// 12/02/98 ADL Original -// ************************************************************************************** - - -#if !defined(AFX_ADDTOREALMHOSTLIST_H__26A1E1F3_9117_11D2_94D0_0000861B8A3C__INCLUDED_) -#define AFX_ADDTOREALMHOSTLIST_H__26A1E1F3_9117_11D2_94D0_0000861B8A3C__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 -// AddToRealmHostList.h : header file -// - -///////////////////////////////////////////////////////////////////////////// -// CKrbAddRealm dialog - -class CKrbAddRealm : public CDialog -{ -// Construction - CString m_newRealm; - BOOL m_startup; - -public: - CKrbAddRealm(CWnd* pParent = NULL); // standard constructor - CString GetNewRealm() {return m_newRealm;} - -// Dialog Data - //{{AFX_DATA(CKrbAddRealm) - enum { IDD = IDD_KRB_ADD_REALM }; - //}}AFX_DATA - - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CKrbAddRealm) - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL - -// Implementation -protected: - - // Generated message map functions - //{{AFX_MSG(CKrbAddRealm) - afx_msg void OnShowWindow(BOOL bShow, UINT nStatus); - virtual void OnOK(); - afx_msg void OnChangeEditRealm(); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() -}; - -//{{AFX_INSERT_LOCATION}} -// Microsoft Visual C++ will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_ADDTOREALMHOSTLIST_H__26A1E1F3_9117_11D2_94D0_0000861B8A3C__INCLUDED_) diff --git a/src/windows/leash/KrbConfigOptions.cpp b/src/windows/leash/KrbConfigOptions.cpp deleted file mode 100644 index c8fa66cb61..0000000000 --- a/src/windows/leash/KrbConfigOptions.cpp +++ /dev/null @@ -1,674 +0,0 @@ -// ************************************************************************************** -// File: KrbConfigOptions.cpp -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. -// Description: CPP file for KrbProperties.h. Contains variables and functions -// for Kerberos Four and Five Properties -// -// History: -// -// MM/DD/YY Inits Description of Change -// 2/01/98 ADL Original -// ************************************************************************************** - - -#include "stdafx.h" -#include "Leash.h" -#include "KrbProperties.h" -#include "KrbConfigOptions.h" -#include "LeashFileDialog.h" -#include "LeashMessageBox.h" -#include "wshelper.h" -#include "lglobals.h" -#include -#include -#include "reminder.h" - -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif - - -/////////////////////////////////////////////////////////////////////// -// CKrbConfigOptions property page - -CString CKrbConfigOptions::m_newDefaultRealm; -CString CKrbConfigOptions::m_hostServer; -CComboBox CKrbConfigOptions::m_krbRealmEditbox; -BOOL CKrbConfigOptions::m_profileError; -BOOL CKrbConfigOptions::m_dupEntriesError; - -IMPLEMENT_DYNCREATE(CKrbConfigOptions, CPropertyPage) - -CKrbConfigOptions::CKrbConfigOptions() : CPropertyPage(CKrbConfigOptions::IDD) -{ - m_initDefaultRealm = _T(""); - m_newDefaultRealm = _T(""); - m_startupPage2 = TRUE; - m_noKrbFileError = FALSE; - m_noKrbhostWarning = FALSE; - m_dupEntriesError = FALSE; - m_profileError = FALSE; - m_noRealm = FALSE; - - //{{AFX_DATA_INIT(CKrbConfigOptions) - //}}AFX_DATA_INIT -} - -CKrbConfigOptions::~CKrbConfigOptions() -{ -} - -VOID CKrbConfigOptions::DoDataExchange(CDataExchange* pDX) -{ - TRACE("Entering CKrbConfigOptions::DoDataExchange -- %d\n", - pDX->m_bSaveAndValidate); - CPropertyPage::DoDataExchange(pDX); - //{{AFX_DATA_MAP(CKrbConfigOptions) - DDX_Control(pDX, IDC_EDIT_DEFAULT_REALM, m_krbRealmEditbox); - //}}AFX_DATA_MAP -} - -static char far * near parse_str(char far*buffer,char far*result) -{ - while (isspace(*buffer)) - buffer++; - while (!isspace(*buffer)) - *result++=*buffer++; - *result='\0'; - return buffer; -} - -#ifndef NO_KRB4 -int krb_get_krbhst(char* h, char* r, int n) -{ - char lbstorage[BUFSIZ]; - char tr[REALM_SZ]; - static FILE *cnffile; /*XXX pbh added static because of MS bug in fgets() */ - static char FAR *linebuf; /*XXX pbh added static because of MS bug in fgets() */ - int i; - char *p; - - //static char buffer[80]; - //krb_get_krbconf(buffer); - memset(lbstorage, '\0', BUFSIZ ); /* 4-22-94 */ - linebuf = &lbstorage[0]; - - if ((cnffile = fopen(CKrbProperties::m_krbPath,"r")) == NULL) { - if (n==1) { - (void) strcpy(h,KRB_HOST); - return(KSUCCESS); - } else { - return(KFAILURE); - } - } - /* linebuf=(char FAR *)malloc(BUFSIZ); */ /*4-22-94*/ - if (fgets(linebuf,BUFSIZ,cnffile)==NULL) { - /* free(linebuf); */ /* 4-22-94 */ - - return(KFAILURE); - } - /* bzero( tr, sizeof(tr) ); */ /* pbh 2-24-93 */ - memset(tr, '\0', sizeof(tr) ); - parse_str(linebuf,tr); - if (*tr=='\0') { - return (KFAILURE); - } - /* run through the file, looking for the nth server for this realm */ - for (i = 1; i <= n;) { - if (fgets(linebuf, BUFSIZ, cnffile) == NULL) { - /* free(linebuf); */ /*4-22-94*/ - (void) fclose(cnffile); - return(KFAILURE); - } - /* bzero( tr, sizeof(tr) ); */ /* pbh 2-24-93 */ - memset(tr, '\0', sizeof(tr) ); - p=parse_str(linebuf,tr); - if (*tr=='\0') - continue; - memset(h, '\0', lstrlen(h) ); - parse_str(p,h); - if (*tr=='\0') - continue; - if (!lstrcmp(tr,r)) - i++; - } - /* free(linebuf); */ /*4-22-94*/ - (void) fclose(cnffile); - return(KSUCCESS); -} -#endif - -BOOL CKrbConfigOptions::OnInitDialog() -{ - m_initDefaultRealm = _T(""); - m_newDefaultRealm = _T(""); - m_noKrbFileError = FALSE; - m_noKrbhostWarning = FALSE; - m_dupEntriesError = FALSE; - m_profileError = FALSE; - m_noRealm = FALSE; - - CPropertyPage::OnInitDialog(); - -#ifndef NO_KRB4 - if (CLeashApp::m_hKrb4DLL && !CLeashApp::m_hKrb5DLL) - { // Krb4 NOT krb5 - // Fill in all edit boxes - char krbRealm[REALM_SZ + 1]; - char krbhst[MAX_HSTNM + 1]; - CStdioFile krbCon; - if (!krbCon.Open(CKrbProperties::m_krbPath, CFile::modeRead)) - { - SetDlgItemText(IDC_EDIT_DEFAULT_REALM, KRB_REALM); - SetDlgItemText(IDC_EDIT_REALM_HOSTNAME, KRB_MASTER); - //CheckRadioButton(IDC_RADIO_ADMIN_SERVER, IDC_RADIO_NO_ADMIN_SERVER, IDC_RADIO_NO_ADMIN_SERVER); - m_initDefaultRealm = m_newDefaultRealm = KRB_REALM; - } - else - { // place krbRealm in Edit box - memset(krbRealm, '\0', sizeof(krbRealm)); - if (!krbCon.ReadString(krbRealm, sizeof(krbRealm)) || '\r' == *krbRealm || - '\n' == *krbRealm || '\0' == *krbRealm) - { - SetDlgItemText(IDC_EDIT_DEFAULT_REALM, KRB_REALM); - SetDlgItemText(IDC_EDIT_REALM_HOSTNAME, KRB_MASTER); - m_initDefaultRealm = m_newDefaultRealm = KRB_REALM; - } - else - { - *(krbRealm + strlen(krbRealm) - 1) = 0; - LPSTR pSpace = strchr(krbRealm, ' '); - if (pSpace) - *pSpace = 0; - - m_initDefaultRealm = m_newDefaultRealm = krbRealm; - - memset(krbhst, '\0', sizeof(krbhst)); - krbCon.Close(); - - // Check for Host - // don't use KRB4 - krb_get_krbhst - would have to re-logon, on file location - // change, to use this function - if (KFAILURE == pkrb_get_krbhst(krbhst, krbRealm, 1)) - { - m_noKrbhostWarning = TRUE; - } - else - { // place hostname in Edit Box - //SetDlgItemText(IDC_EDIT_REALM_HOSTNAME, krbhst); - - m_hostServer = krbhst; - - // New stuff to put realms in Combo Box - CStdioFile krbCon; - if (!krbCon.Open(CKrbProperties::m_krbPath, CFile::modeRead)) - { - m_noKrbFileError = TRUE; - m_noRealm = TRUE; - } else { - - LPSTR space = NULL; - CHAR lineBuf[REALM_SZ + MAX_HSTNM + 20]; - CHAR localRealm[REALM_SZ + MAX_HSTNM + 20]; - memset(lineBuf, '\0', sizeof(lineBuf)); - memset(localRealm, '\0', sizeof(localRealm)); - - if (krbCon.ReadString(localRealm, sizeof(localRealm))) - *(localRealm + strlen(localRealm) - 1) = 0; - else - return FALSE; - - space = strchr(localRealm, ' '); - if (space) - *space = 0; - - while (TRUE) - { - if (!krbCon.ReadString(lineBuf, sizeof(lineBuf))) - break; - - *(lineBuf + sizeof(lineBuf) - 1) = 0; - - if (strlen(lineBuf) == 0) - continue; - - space = strchr(lineBuf, ' '); - if (!space) space = strchr(lineBuf, '\t'); - if (space) - *space = 0; - else - ASSERT(0); - - // skip Kerberos Options - if ( !strncmp(".KERBEROS.OPTION.",lineBuf,17) ) - continue; - - if (CB_ERR == m_krbRealmEditbox.FindStringExact(-1, lineBuf)) - { // no dups - if (LB_ERR == m_krbRealmEditbox.AddString(lineBuf)) - { - MessageBox("OnInitDialog::Can't add to Kerberos Realm Combobox", - "Leash", MB_OK); - return FALSE; - } - } - } - - m_krbRealmEditbox.SelectString(-1, krbRealm); - - } // end of 'else' - } // end of 'place hostname in Edit Box' else statement - } // end of 'Check for Host' else statement - } // end of 'place krbRealm in Edit box' else - } - else -#endif - if (CLeashApp::m_hKrb5DLL) - { // Krb5 OR krb5 AND krb4 - char *realm = NULL; - pkrb5_get_default_realm(CLeashApp::m_krbv5_context, &realm); - - if (!realm) - m_noRealm = TRUE; - - m_initDefaultRealm = m_newDefaultRealm = realm; - - if ( !CLeashApp::m_krbv5_profile ) { - CHAR confname[MAX_PATH]; - if (!CLeashApp::GetProfileFile(confname, sizeof(confname))) - { - const char *filenames[2]; - filenames[0] = confname; - filenames[1] = NULL; - pprofile_init(filenames, &CLeashApp::m_krbv5_profile); - } - } - - CHAR selRealm[REALM_SZ]; - strcpy(selRealm, m_newDefaultRealm); - const char* Section[] = {"realms", selRealm, "kdc", NULL}; - const char** section = Section; - char **values = NULL; - char * value = NULL; - - long retval = pprofile_get_values(CLeashApp::m_krbv5_profile, - section, &values); - - if (!retval && values) - m_hostServer = *values; - else { - int dns_in_use = 0; - // Determine if we are using DNS for KDC lookups - retval = pprofile_get_string(CLeashApp::m_krbv5_profile, "libdefaults", - "dns_lookup_kdc", 0, 0, &value); - if (value == 0 && retval == 0) - retval = pprofile_get_string(CLeashApp::m_krbv5_profile, "libdefaults", - "dns_fallback", 0, 0, &value); - if (value == 0) { - dns_in_use = 1; - } else { - dns_in_use = config_boolean_to_int(value); - pprofile_release_string(value); - } - if (dns_in_use) - m_hostServer = "DNS SRV record lookups will be used to find KDC"; - else { - m_hostServer = "No KDC information available"; - } - } - SetDlgItemText(IDC_EDIT_REALM_HOSTNAME, m_hostServer); - - if ( realm ) - pkrb5_free_default_realm(CLeashApp::m_krbv5_context, realm); - } - - // Set host and domain names in their Edit Boxes, respectively. - char hostName[80]=""; - char domainName[80]=""; - int ckHost = wsh_gethostname(hostName, sizeof(hostName)); - int ckdomain = wsh_getdomainname(domainName, sizeof(domainName)); - CString dot_DomainName = "."; - dot_DomainName += domainName; - - SetDlgItemText(IDC_EDIT_HOSTNAME, ckHost == 0 ? hostName : ""); - SetDlgItemText(IDC_EDIT_DOMAINNAME, ckdomain == 0 ? dot_DomainName : ""); - - return m_noRealm; -} - -BOOL CKrbConfigOptions::OnApply() -{ - // If no changes were made, quit this function - if (0 == m_initDefaultRealm.CompareNoCase(m_newDefaultRealm)) - return TRUE; - - m_newDefaultRealm.TrimLeft(); - m_newDefaultRealm.TrimRight(); - - if (m_newDefaultRealm.IsEmpty()) - { - MessageBox("OnApply::Your Kerberos Realm field must be filled in!", - "Leash", MB_OK); - m_newDefaultRealm = m_initDefaultRealm; - SetDlgItemText(IDC_EDIT_DEFAULT_REALM, m_newDefaultRealm); - return TRUE; - } - - CStdioFile krbCon; - if (!krbCon.Open(CKrbProperties::m_krbPath, CFile::modeCreate | - CFile::modeNoTruncate | - CFile::modeRead)) - { - LeashErrorBox("OnApply::Can't open configuration file", - CKrbProperties::m_krbPath); - return TRUE; - } - - CStdioFile krbCon2; - CString krbCon2File = CKrbProperties::m_krbPath; - krbCon2File += "___"; - if (!krbCon2.Open(krbCon2File, CFile::modeCreate | CFile::modeWrite)) - { - LeashErrorBox("OnApply:: Can't open configuration file", - CKrbProperties::m_krbPath); - return TRUE; - } - - CString readWrite; - krbCon.ReadString(readWrite); - krbCon2.WriteString(m_newDefaultRealm); - krbCon2.WriteString("\n"); - while (krbCon.ReadString(readWrite)) - { - krbCon2.WriteString(readWrite); - krbCon2.WriteString("\n"); - } - - krbCon.Close(); - krbCon2.Close(); - krbCon2.Remove(CKrbProperties::m_krbPath); - krbCon2.Rename(krbCon2File, CKrbProperties::m_krbPath); - - if (CLeashApp::m_hKrb5DLL) - { // Krb5 OR krb5 AND krb4 - if ( !CLeashApp::m_krbv5_profile ) { - CHAR confname[MAX_PATH]; - if (!CLeashApp::GetProfileFile(confname, sizeof(confname))) - { - const char *filenames[2]; - filenames[0] = confname; - filenames[1] = NULL; - pprofile_init(filenames, &CLeashApp::m_krbv5_profile); - } - } - - const char* Names[] = {"libdefaults", "default_realm", NULL}; - const char** names = Names; - - long retval = pprofile_update_relation(CLeashApp::m_krbv5_profile, - names, m_initDefaultRealm, m_newDefaultRealm); - - if (retval) - { - MessageBox("OnApply::The previous value cannot be found, the profile will not be saved!!!\ - \nIf this error persists after restarting Leash, contact your administrator.", - "Leash", MB_OK); - return TRUE; - } - - // Save to Kerberos Five config. file "Krb5.ini" - retval = pprofile_flush(CLeashApp::m_krbv5_profile); - } - - m_initDefaultRealm = m_newDefaultRealm; - return TRUE; -} - -void CKrbConfigOptions::OnSelchangeEditDefaultRealm() -{ - if (!m_startupPage2) - { - GetDlgItemText(IDC_EDIT_DEFAULT_REALM, m_newDefaultRealm); - SetModified(TRUE); - - if (CLeashApp::m_hKrb5DLL) - { - CHAR selRealm[REALM_SZ]; - strcpy(selRealm, m_newDefaultRealm); - const char* Section[] = {"realms", selRealm, "kdc", NULL}; - const char** section = Section; - char **values = NULL; - char * value = NULL; - - long retval = pprofile_get_values(CLeashApp::m_krbv5_profile, - section, &values); - - if (!retval && values) - SetDlgItemText(IDC_EDIT_REALM_HOSTNAME, *values); - else { - int dns_in_use = 0; - // Determine if we are using DNS for KDC lookups - retval = pprofile_get_string(CLeashApp::m_krbv5_profile, "libdefaults", - "dns_lookup_kdc", 0, 0, &value); - if (value == 0 && retval == 0) - retval = pprofile_get_string(CLeashApp::m_krbv5_profile, "libdefaults", - "dns_fallback", 0, 0, &value); - if (value == 0) { - dns_in_use = 1; - } else { - dns_in_use = config_boolean_to_int(value); - pprofile_release_string(value); - } - if (dns_in_use) - SetDlgItemText(IDC_EDIT_REALM_HOSTNAME, "DNS SRV record lookups will be used to find KDC"); - else - SetDlgItemText(IDC_EDIT_REALM_HOSTNAME, "No KDC information available"); - } - } -#ifndef NO_KRB4 - else - { - CHAR krbhst[MAX_HSTNM + 1]; - CHAR krbrlm[REALM_SZ + 1]; - - strcpy(krbrlm, CKrbConfigOptions::m_newDefaultRealm); - memset(krbhst, '\0', sizeof(krbhst)); - - // Check for Host - // don't use KRB4 - krb_get_krbhst - would have to re-logon, on file location - // change, to use this function - if (KFAILURE == pkrb_get_krbhst(krbhst, krbrlm, 1)) - { - MessageBox("OnSelchangeEditDefaultRealm::Unable to find the Host Server for your Default Realm!!!\ - \n 'Apply' your changes and try again.", - "Leash", MB_OK); - SetDlgItemText(IDC_EDIT_REALM_HOSTNAME, ""); - return; - } - - m_hostServer = krbhst; - if (strlen(krbhst)) - SetDlgItemText(IDC_EDIT_REALM_HOSTNAME, m_hostServer); - } -#endif - } -} - -void CKrbConfigOptions::OnEditchangeEditDefaultRealm() -{ - if (!m_startupPage2) - { - GetDlgItemText(IDC_EDIT_DEFAULT_REALM, m_newDefaultRealm); - SetModified(TRUE); - } -} - -void CKrbConfigOptions::OnShowWindow(BOOL bShow, UINT nStatus) -{ - CPropertyPage::OnShowWindow(bShow, nStatus); - - if (CLeashApp::m_hKrb5DLL) - ResetDefaultRealmComboBox(); - - SetDlgItemText(IDC_EDIT_REALM_HOSTNAME, m_hostServer); -} - -void CKrbConfigOptions::ResetDefaultRealmComboBox() -{ // Krb5 is loaded - // Reset Config Tab's Default Realm Combo Editbox - const char* rootSection[] = {"realms", NULL}; - const char** rootsec = rootSection; - char **sections = NULL, - **cpp = NULL, - *value = 0; - int dns; - - long retval = pprofile_get_string(CLeashApp::m_krbv5_profile, "libdefaults", - "dns_lookup_kdc", 0, 0, &value); - if (value == 0 && retval == 0) - retval = pprofile_get_string(CLeashApp::m_krbv5_profile, "libdefaults", - "dns_fallback", 0, 0, &value); - if (value == 0) { - dns = 1; - } else { - dns = config_boolean_to_int(value); - pprofile_release_string(value); - } - - retval = pprofile_get_subsection_names(CLeashApp::m_krbv5_profile, - rootsec , §ions); - - if (retval) - { - m_hostServer = _T(""); - - // This is not a fatal error if DNS KDC Lookup is being used. - // Determine the starting value for DNS KDC Lookup Checkbox - if ( dns ) - return; - - m_profileError = TRUE; - } - - m_krbRealmEditbox.ResetContent(); - - if ( !m_profileError ) { - for (cpp = sections; *cpp; cpp++) - { - if (CB_ERR == m_krbRealmEditbox.FindStringExact(-1, *cpp)) - { // no dups - if (CB_ERR == m_krbRealmEditbox.AddString(*cpp)) - { - ::MessageBox(NULL, "ResetDefaultRealmComboBox::Can't add to Kerberos Realm Combobox", - "Leash", MB_OK); - return; - } - } - else - m_dupEntriesError = TRUE; - } - } - - if (!m_newDefaultRealm.IsEmpty()) { - - if (CB_ERR == m_krbRealmEditbox.FindStringExact(-1, m_newDefaultRealm)) - { // no dups - m_krbRealmEditbox.AddString(m_newDefaultRealm); - } - m_krbRealmEditbox.SelectString(-1, m_newDefaultRealm); - - const char* Section[] = {"realms", m_newDefaultRealm, "kdc", NULL}; //theSection - const char** section = Section; - char **values = NULL; - - retval = pprofile_get_values(CLeashApp::m_krbv5_profile, - section, &values); - - if (!retval && values) - m_hostServer = *values; - else { - if (dns) - m_hostServer = "DNS SRV record lookups will be used to find KDC"; - else { - m_hostServer = "No KDC information available"; - } - } - } -} - -BOOL CKrbConfigOptions::PreTranslateMessage(MSG* pMsg) -{ - if (!m_startupPage2) - { - if (m_noKrbFileError) - { - LeashErrorBox("PreTranslateMessage::Unable to open configuration file", - !strlen(CKrbProperties::m_krbPath) ? KRB_FILE : - CKrbProperties::m_krbPath); - m_noKrbFileError = FALSE; - } - - if (m_noKrbhostWarning) - { - MessageBox("PreTranslateMessage::Unable to locate the Kerberos Host for your Kerberos Realm!", - "Leash", MB_OK); - m_noKrbhostWarning = FALSE; - } - - if (m_dupEntriesError) - { - MessageBox("PreTranslateMessage::Found duplicate entries in the Kerberos 5 Config. File!!!\ - \nPlease contact your Administrator.", - "Leash", MB_OK); - - m_dupEntriesError = FALSE; - } - - if (m_profileError) - { - MessageBox("PreTranslateMessage::Unable to open Kerberos 5 Config. File!!!\ - \nIf this error persists, contact your administrator.", - "Leash", MB_OK); - m_profileError = FALSE; - } - - if (m_noRealm) - { - MessageBox("PreTranslateMessage::Unable to determine the Default Realm.\ - \n Contact your Administrator!", - "Leash", MB_OK); - - m_noRealm = FALSE; - } - } - - m_startupPage2 = FALSE; - return CPropertyPage::PreTranslateMessage(pMsg); -} - - -BEGIN_MESSAGE_MAP(CKrbConfigOptions, CPropertyPage) - //{{AFX_MSG_MAP(CKrbConfigOptions) - ON_WM_SHOWWINDOW() - ON_CBN_EDITCHANGE(IDC_EDIT_DEFAULT_REALM, OnEditchangeEditDefaultRealm) - ON_CBN_SELCHANGE(IDC_EDIT_DEFAULT_REALM, OnSelchangeEditDefaultRealm) - ON_BN_CLICKED(IDC_BUTTON_KRB_HELP, OnButtonKrbHelp) - ON_BN_CLICKED(IDC_BUTTON_KRBREALM_HELP, OnButtonKrbrealmHelp) - //}}AFX_MSG_MAP -END_MESSAGE_MAP() - - - -void CKrbConfigOptions::OnButtonKrbHelp() -{ - MessageBox("No Help Available!", "Leash", MB_OK); -} - -void CKrbConfigOptions::OnButtonKrbrealmHelp() -{ - MessageBox("No Help Available!", "Leash", MB_OK); -} diff --git a/src/windows/leash/KrbConfigOptions.h b/src/windows/leash/KrbConfigOptions.h deleted file mode 100644 index 3169e71f5a..0000000000 --- a/src/windows/leash/KrbConfigOptions.h +++ /dev/null @@ -1,89 +0,0 @@ -// ************************************************************************************** -// File: KrbConfigOptions.h -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. -// Description: H file for KrbProperties.cpp. Contains variables and functions -// for Kerberos Four Properties -// -// History: -// -// MM/DD/YY Inits Description of Change -// 2/01/98 ADL Original -// ************************************************************************************** - - -#if !defined(AFX_CONFIGOPTIONS_H__CD702F99_7495_11D0_8FDC_00C04FC2A0C2__INCLUDED_) -#define AFX_CONFIGOPTIONS_H__CD702F99_7495_11D0_8FDC_00C04FC2A0C2__INCLUDED_ - -#if _MSC_VER >= 1000 -#pragma once -#endif // _MSC_VER >= 1000 -// Krb4Properties.h : header file -// - -#include "Resource.h" - - -/////////////////////////////////////////////////////////////////////// -// CKrbConfigOptions dialog - -class CKrbConfigOptions : public CPropertyPage -{ -// Construction -private: - DECLARE_DYNCREATE(CKrbConfigOptions) - BOOL m_startupPage2; - BOOL m_noKrbFileError; - BOOL m_noKrbhostWarning; - static BOOL m_profileError; - static BOOL m_dupEntriesError; - BOOL m_noRealm; - CString m_initDefaultRealm; - static CString m_newDefaultRealm; ///// also used for CKrb4DomainRealmMaintenance - static CString m_hostServer; - - static void ResetDefaultRealmComboBox(); - -public: - CKrbConfigOptions(); - ~CKrbConfigOptions(); - -// Dialog Data - //{{AFX_DATA(CKrbConfigOptions) - enum { IDD = IDD_KRB_PROP_CONTENT }; - static CComboBox m_krbRealmEditbox; - //}}AFX_DATA - - -// Overrides - // ClassWizard generate virtual function overrides - //{{AFX_VIRTUAL(CKrbConfigOptions) - public: - virtual BOOL PreTranslateMessage(MSG* pMsg); - protected: - virtual VOID DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL - - virtual BOOL OnApply(); - -// Implementation -protected: - // Generated message map functions - //{{AFX_MSG(CKrbConfigOptions) - virtual BOOL OnInitDialog(); - afx_msg void OnShowWindow(BOOL bShow, UINT nStatus); - afx_msg void OnEditchangeEditDefaultRealm(); - afx_msg void OnSelchangeEditDefaultRealm(); - afx_msg void OnButtonKrbHelp(); - afx_msg void OnButtonKrbrealmHelp(); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() - -}; - -///////////////////////////////////////////////////////////////////////////// -//{{AFX_INSERT_LOCATION}} -// Microsoft Developer Studio will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_CONFIGOPTIONS_H__CD702F99_7495_11D0_8FDC_00C04FC2A0C2__INCLUDED_) diff --git a/src/windows/leash/KrbDomainRealmMaintenance.cpp b/src/windows/leash/KrbDomainRealmMaintenance.cpp deleted file mode 100644 index a216a2387e..0000000000 --- a/src/windows/leash/KrbDomainRealmMaintenance.cpp +++ /dev/null @@ -1,439 +0,0 @@ -// CKrbDomainRealmMaintenance.cpp : implementation file -// - -#include "stdafx.h" -#include "leash.h" -#include "KrbDomainRealmMaintenance.h" -#include "Krb4EditDomainRealmList.h" -#include "KrbProperties.h" - -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif - -///////////////////////////////////////////////////////////////////////////// -// CKrbDomainRealmMaintenance dialog - - -CKrbDomainRealmMaintenance::CKrbDomainRealmMaintenance(CWnd* pParent /*=NULL*/) - :CPropertyPage(CKrbDomainRealmMaintenance::IDD) -{ - m_dupEntiesError = FALSE; - //{{AFX_DATA_INIT(CKrbDomainRealmMaintenance) - // NOTE: the ClassWizard will add member initialization here - //}}AFX_DATA_INIT -} - - -void CKrbDomainRealmMaintenance::DoDataExchange(CDataExchange* pDX) -{ - CPropertyPage::DoDataExchange(pDX); - //{{AFX_DATA_MAP(CKrbDomainRealmMaintenance) - DDX_Control(pDX, IDC_LIST_DOMAINREALM, m_KDCDomainList); - //}}AFX_DATA_MAP -} - - -BEGIN_MESSAGE_MAP(CKrbDomainRealmMaintenance, CPropertyPage) - //{{AFX_MSG_MAP(CKrbDomainRealmMaintenance) - ON_BN_CLICKED(IDC_BUTTON_HOST_ADD, OnButtonHostAdd) - ON_BN_CLICKED(IDC_BUTTON_HOST_EDIT, OnButtonHostEdit) - ON_BN_CLICKED(ID_BUTTON_HOST_REMOVE, OnButtonHostRemove) - ON_LBN_DBLCLK(IDC_LIST_DOMAINREALM, OnDblclkListDomainrealm) - ON_BN_CLICKED(IDC_BUTTON_HOSTMAINT_HELP, OnButtonHostmaintHelp) - //}}AFX_MSG_MAP -END_MESSAGE_MAP() - -///////////////////////////////////////////////////////////////////////////// -// CKrbDomainRealmMaintenance message handlers - -BOOL CKrbDomainRealmMaintenance::OnInitDialog() -{ - CPropertyPage::OnInitDialog(); - - char theName[REALM_SZ + 1]; - char theNameValue[REALM_SZ + MAX_HSTNM + 2]; - const char* Section[] = {"domain_realm", theName, NULL}; //theSection - const char** section = Section; - char **values = NULL, - **vpp = NULL; - - const char* rootSection[] = {"domain_realm", NULL}; - const char** rootsec = rootSection; - char **sections = NULL, - **cpp = NULL; - - long retval = pprofile_get_relation_names(CLeashApp::m_krbv5_profile, - rootsec, §ions); - - if (retval && PROF_NO_RELATION != retval) - { - MessageBox("OnInitDialog::There is on error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - return TRUE; - } - - - for (cpp = sections; *cpp; cpp++) - { - strcpy(theName, *cpp); - retval = pprofile_get_values(CLeashApp::m_krbv5_profile, - section, &values); - - for (vpp = values; *vpp; vpp++) - { - strcpy(theNameValue, theName); - strcat(theNameValue, " "); - strcat(theNameValue, *vpp); - - if (LB_ERR == m_KDCDomainList.FindStringExact(-1, theNameValue)) - { - if (LB_ERR == m_KDCDomainList.AddString(theNameValue)) - { - MessageBox("OnInitDialog::Can't add to Kerberos Domain Listbox", - "Leash", MB_OK); - return FALSE; - } - } - else - m_dupEntiesError = TRUE; - } - } - - m_KDCDomainList.SetCurSel(0); - - if (!m_KDCDomainList.GetCount()) - { - GetDlgItem(ID_BUTTON_HOST_REMOVE)->EnableWindow(FALSE); - GetDlgItem(IDC_BUTTON_HOST_EDIT)->EnableWindow(FALSE); - } - - return TRUE; // return TRUE unless you set the focus to a control - // EXCEPTION: OCX Property Pages should return FALSE -} - -BOOL CKrbDomainRealmMaintenance::OnApply() -{ - if (!CLeashApp::m_krbv5_profile) { - CHAR confname[MAX_PATH]; - if (!CLeashApp::GetProfileFile(confname, sizeof(confname))) - { - const char *filenames[2]; - filenames[0] = confname; - filenames[1] = NULL; - pprofile_init(filenames, &CLeashApp::m_krbv5_profile); - } - } - - // Save to Kerberos Five config. file "Krb5.ini" - long retval = pprofile_flush(CLeashApp::m_krbv5_profile); - - if (retval && PROF_NO_RELATION != retval) - { - MessageBox("OnApply::There is on error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - return TRUE; - } - -#ifndef NO_KRB4 - // Save to Kerberos Four config. file "Krb.con" - CStdioFile krbrealmCon; - if (!krbrealmCon.Open(CKrbProperties::m_krbrealmPath, CFile::modeCreate | - CFile::modeNoTruncate | - CFile::modeReadWrite)) - { - LeashErrorBox("OnApply::Can't open Configuration File", - CKrbProperties::m_krbrealmPath); - return TRUE; - } - - krbrealmCon.SetLength(0); - - char theNameValue[REALM_SZ + MAX_HSTNM + 2]; - - for (INT maxItems = m_KDCDomainList.GetCount(), item = 0; item < maxItems; item++) - { - if (LB_ERR == m_KDCDomainList.GetText(item, theNameValue)) - ASSERT(0); - - krbrealmCon.WriteString(theNameValue); - krbrealmCon.WriteString("\n"); - } - - krbrealmCon.Close(); -#endif - - return TRUE; -} - -void CKrbDomainRealmMaintenance::OnCancel() -{ - CHAR fileName[MAX_PATH]; - - if (CLeashApp::GetProfileFile(fileName, sizeof(fileName))) - { - MessageBox("Can't locate Kerberos Five Config. file!", "Error", MB_OK); - return; - } - - pprofile_abandon(CLeashApp::m_krbv5_profile); - - const char *filenames[2]; - filenames[0] = fileName; - filenames[1] = NULL; - pprofile_init(filenames, &CLeashApp::m_krbv5_profile); - - CPropertyPage::OnCancel(); -} - -void CKrbDomainRealmMaintenance::OnButtonHostAdd() -{ -////I don't understand why this is doing K4 operations here -#ifndef NO_KRB4 - CKrb4AddToDomainRealmList addToDomainRealmList; - if (IDOK == addToDomainRealmList.DoModal()) - { - char theName[MAX_HSTNM + 1]; - const char* Section[] = {"domain_realm", theName, NULL}; - const char** section = Section; - - if (addToDomainRealmList.GetNewRealm().IsEmpty()) - ASSERT(0); - - if (CheckForDupDomain(addToDomainRealmList.GetNewDomainHost())) - { - MessageBox("Can't have duplicate Host/Domains!\nYour entry will not be saved to list", - "Leash", MB_OK); - return; - } - - CString newLine; - newLine = addToDomainRealmList.GetNewDomainHost() + " " + addToDomainRealmList.GetNewRealm(); - - if (LB_ERR != m_KDCDomainList.FindStringExact(-1, newLine)) - { - MessageBox("We can't have duplicates!\nYour entry was not saved to list.", - "Leash", MB_OK); - return; - } - - CString newHost; // new section in the profile linklist - strcpy(theName, addToDomainRealmList.GetNewDomainHost()); - - long retval = pprofile_add_relation(CLeashApp::m_krbv5_profile, - section, addToDomainRealmList.GetNewRealm()); - - if (retval) - { - MessageBox("OnButtonHostAdd::There is on error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - } - - m_KDCDomainList.AddString(newLine); - SetModified(TRUE); - - if (1 == m_KDCDomainList.GetCount()) - { - GetDlgItem(ID_BUTTON_HOST_REMOVE)->EnableWindow(); - GetDlgItem(IDC_BUTTON_HOST_EDIT)->EnableWindow(); - } - } -#endif -} - -void CKrbDomainRealmMaintenance::OnButtonHostEdit() -{ - INT selItemIndex = m_KDCDomainList.GetCurSel(); - LPSTR pSelItem = new char[m_KDCDomainList.GetTextLen(selItemIndex) + 1]; - if (!pSelItem) - ASSERT(0); - - CHAR theName[MAX_HSTNM + 1]; - char theNameValue[REALM_SZ + MAX_HSTNM + 2]; - CHAR OLD_VALUE[REALM_SZ + 1]; - m_KDCDomainList.GetText(selItemIndex, theName); - strcpy(pSelItem, theName); - - LPSTR pselItem = strchr(theName, ' '); - if (pselItem) - *pselItem = 0; - else - ASSERT(0); - - strcpy(OLD_VALUE, pselItem + 1); - strcpy(theNameValue, pSelItem); - - CKrb4EditDomainRealmList editDomainRealmList(pSelItem); - - if (IDOK == editDomainRealmList.DoModal()) - { - if (0 != strcmp(theName, editDomainRealmList.GetDomainHost()) - && CheckForDupDomain(editDomainRealmList.GetDomainHost())) - { // Duplicate Host/Domain Error - MessageBox("We can't have duplicate Host/Domains!\nYour entry will not be saved to list", - "Leash", MB_OK); - return; - } - - const char* Section[] = {"domain_realm", theName, NULL}; - const char** section = Section; - - CString editedHost = editDomainRealmList.GetEditedItem(); - - if (0 != editedHost.CompareNoCase(theNameValue) && - LB_ERR != m_KDCDomainList.FindStringExact(-1, editedHost)) - { - MessageBox("We can't have duplicate Realms!\nYour entry was not saved to list.", - "Leash", MB_OK); - delete [] pSelItem; - return; - } - - long retval = pprofile_update_relation(CLeashApp::m_krbv5_profile, - section, OLD_VALUE, NULL); - - if (retval) - { - MessageBox("OnButtonHostEdit::There is on error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - return; - } - - strcpy(theName, editDomainRealmList.GetDomainHost()); - - retval = pprofile_add_relation(CLeashApp::m_krbv5_profile, - section, editDomainRealmList.GetRealm()); - - - if (retval) - { // thsi might not be the best way to handle this type of error - MessageBox("OnButtonHostEdit::There is on error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - return; - } - - m_KDCDomainList.DeleteString(selItemIndex); - m_KDCDomainList.AddString(editedHost); - selItemIndex = m_KDCDomainList.FindStringExact(-1, editedHost); - m_KDCDomainList.SetCurSel(selItemIndex); - - SetModified(TRUE); - } - - delete [] pSelItem; -} - -void CKrbDomainRealmMaintenance::OnDblclkListDomainrealm() -{ - OnButtonHostEdit(); -} - -void CKrbDomainRealmMaintenance::OnButtonHostRemove() -{ - CHAR theName[MAX_HSTNM + 1]; - CHAR OLD_VALUE[REALM_SZ + 1]; - char theNameValue[REALM_SZ + MAX_HSTNM + 2]; - const char* Section[] = {"domain_realm", theName, NULL}; - const char** section = Section; - - INT curSel = m_KDCDomainList.GetCurSel(); - m_KDCDomainList.GetText(curSel, theNameValue); - - CString serverHostMsg; - CString serverHost; - serverHostMsg.Format("Your about to remove Host/Domain \"%s\" from the list!\n\nContinue?", - theNameValue); - - if (IDYES != AfxMessageBox(serverHostMsg, MB_YESNO)) - return; - - LPSTR pNameValue = strchr(theNameValue, ' '); - if (pNameValue) - { - *pNameValue = 0; - strcpy(theName, theNameValue); - pNameValue++; - strcpy(OLD_VALUE, pNameValue); - } - else - ASSERT(0); - - if (!m_KDCDomainList.GetCount()) - { - GetDlgItem(ID_BUTTON_HOSTNAME_REMOVE)->EnableWindow(FALSE); - GetDlgItem(IDC_BUTTON_HOSTNAME_EDIT)->EnableWindow(FALSE); - } - - long retval = pprofile_update_relation(CLeashApp::m_krbv5_profile, - section, OLD_VALUE, NULL); - - if (retval) - { - MessageBox("OnButtonHostRemove::There is on error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - return; - } - - m_KDCDomainList.DeleteString(curSel); // Single Sel Listbox - - if (-1 == m_KDCDomainList.SetCurSel(curSel)) - m_KDCDomainList.SetCurSel(curSel - 1); - - if (!m_KDCDomainList.GetCount()) - { - GetDlgItem(ID_BUTTON_HOST_REMOVE)->EnableWindow(FALSE); - GetDlgItem(IDC_BUTTON_HOST_EDIT)->EnableWindow(FALSE); - } - - SetModified(TRUE); -} - - -BOOL CKrbDomainRealmMaintenance::PreTranslateMessage(MSG* pMsg) -{ - if (m_dupEntiesError) - { - MessageBox("Found an error (duplicate items) in your Kerberos Five Config. File!!!\ - \nPlease contract your Administrator.", - "Leash", MB_OK); - - m_dupEntiesError = FALSE; - } - - return CPropertyPage::PreTranslateMessage(pMsg); -} - -BOOL CKrbDomainRealmMaintenance::CheckForDupDomain(CString& newDomainHost) -{ - char theName[REALM_SZ + MAX_HSTNM + 2]; - - for (INT maxItems = m_KDCDomainList.GetCount(), item = 0; item < maxItems; item++) - { - if (LB_ERR == m_KDCDomainList.GetText(item, theName)) - ASSERT(0); - - LPSTR pValue = strchr(theName, ' '); - if (pValue) - *pValue = 0; - else - ASSERT(0); - - if (0 == newDomainHost.CompareNoCase(theName)) - return TRUE; - } - - return FALSE; -} - -void CKrbDomainRealmMaintenance::OnButtonHostmaintHelp() -{ - MessageBox("No Help Available!", "Leash", MB_OK); -} diff --git a/src/windows/leash/KrbDomainRealmMaintenance.h b/src/windows/leash/KrbDomainRealmMaintenance.h deleted file mode 100644 index e22e86e849..0000000000 --- a/src/windows/leash/KrbDomainRealmMaintenance.h +++ /dev/null @@ -1,59 +0,0 @@ -#if !defined(AFX_KRBDOMAINREALMMAINTENANCE_H__6DB290A6_E14D_11D2_95CE_0000861B8A3C__INCLUDED_) -#define AFX_KRBDOMAINREALMMAINTENANCE_H__6DB290A6_E14D_11D2_95CE_0000861B8A3C__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 -// CKrbDomainRealmMaintenance.h : header file -// - -///////////////////////////////////////////////////////////////////////////// -// CKrbDomainRealmMaintenance dialog - -class CKrbDomainRealmMaintenance : public CPropertyPage -{ -// Construction -private: - BOOL m_dupEntiesError; - BOOL CheckForDupDomain(CString& newDomainHost); - -public: - CKrbDomainRealmMaintenance(CWnd* pParent = NULL); // standard constructor - -// Dialog Data - //{{AFX_DATA(CKrbDomainRealmMaintenance) - enum { IDD = IDD_KRB_DOMAINREALM_MAINT }; - CListBox m_KDCDomainList; - //}}AFX_DATA - - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CKrbDomainRealmMaintenance) - public: - virtual BOOL PreTranslateMessage(MSG* pMsg); - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL - -// Implementation -protected: - - // Generated message map functions - //{{AFX_MSG(CKrbDomainRealmMaintenance) - virtual void OnCancel(); - virtual BOOL OnApply(); - virtual BOOL OnInitDialog(); - afx_msg void OnButtonHostAdd(); - afx_msg void OnButtonHostEdit(); - afx_msg void OnButtonHostRemove(); - afx_msg void OnDblclkListDomainrealm(); - afx_msg void OnButtonHostmaintHelp(); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() -}; - -//{{AFX_INSERT_LOCATION}} -// Microsoft Visual C++ will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_KRBDOMAINREALMMAINTENANCE_H__6DB290A6_E14D_11D2_95CE_0000861B8A3C__INCLUDED_) diff --git a/src/windows/leash/KrbEditHostServer.cpp b/src/windows/leash/KrbEditHostServer.cpp deleted file mode 100644 index 5fe27c5dd1..0000000000 --- a/src/windows/leash/KrbEditHostServer.cpp +++ /dev/null @@ -1,96 +0,0 @@ -// ************************************************************************************** -// File: KrbEditHostServer.cpp -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. -// Description: CPP file for KrbEditHostServer.h. Contains variables and functions -// for Kerberos Four and Five Properties -// -// History: -// -// MM/DD/YY Inits Description of Change -// 12/02/98 ADL Original -// ************************************************************************************** - - -#include "stdafx.h" -#include "leash.h" -#include "KrbEditHostServer.h" -#include "lglobals.h" - -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif - -///////////////////////////////////////////////////////////////////////////// -// CKrbEditHostServer dialog - -CKrbEditHostServer::CKrbEditHostServer(CString& editItem, CWnd* pParent) - : CDialog(CKrbEditHostServer::IDD, pParent) -{ - m_startup = TRUE; - m_newHost = editItem; - - //{{AFX_DATA_INIT(CKrbEditHostServer) - // NOTE: the ClassWizard will add member initialization here - //}}AFX_DATA_INIT -} - -void CKrbEditHostServer::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); - //{{AFX_DATA_MAP(CKrbEditHostServer) - // NOTE: the ClassWizard will add DDX and DDV calls here - //}}AFX_DATA_MAP -} - - -BEGIN_MESSAGE_MAP(CKrbEditHostServer, CDialog) - //{{AFX_MSG_MAP(CKrbEditHostServer) - ON_WM_SHOWWINDOW() - ON_EN_CHANGE(IDC_EDIT_KDC_HOST, OnChangeEditKdcHost) - //}}AFX_MSG_MAP -END_MESSAGE_MAP() - -///////////////////////////////////////////////////////////////////////////// -// CKrbEditHostServer message handlers - -BOOL CKrbEditHostServer::OnInitDialog() -{ - CDialog::OnInitDialog(); - - SetDlgItemText(IDC_EDIT_KDC_HOST, m_newHost); - return TRUE; -} - -void CKrbEditHostServer::OnShowWindow(BOOL bShow, UINT nStatus) -{ - CDialog::OnShowWindow(bShow, nStatus); - m_startup = FALSE; -} - -void CKrbEditHostServer::OnChangeEditKdcHost() -{ - if (!m_startup) - GetDlgItemText(IDC_EDIT_KDC_HOST, m_newHost); -} - -void CKrbEditHostServer::OnOK() -{ - m_newHost.TrimLeft(); - m_newHost.TrimRight(); - - if (m_newHost.IsEmpty()) - { // stay - MessageBox("OnOK::The Server field must be filled in!", - "Error", MB_OK); - } - else if (-1 != m_newHost.Find(' ')) - { // stay - MessageBox("OnOK::Illegal space found!", "Error", MB_OK); - } - else - CDialog::OnOK(); // exit -} diff --git a/src/windows/leash/KrbEditHostServer.h b/src/windows/leash/KrbEditHostServer.h deleted file mode 100644 index 5cbbd03347..0000000000 --- a/src/windows/leash/KrbEditHostServer.h +++ /dev/null @@ -1,69 +0,0 @@ -// ************************************************************************************** -// File: KrbEditHostServer.h -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. -// Description: H file for KrbEditHostServer.cpp. Contains variables and functions -// for Kerberos Four and Five Properties -// -// History: -// -// MM/DD/YY Inits Description of Change -// 12/02/98 ADL Original -// ************************************************************************************** - - - -#if !defined(AFX_EDITHOST_H__26A1E1F7_9117_11D2_94D0_0000861B8A3C__INCLUDED_) -#define AFX_EDITHOST_H__26A1E1F7_9117_11D2_94D0_0000861B8A3C__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 -// EditRealmHostList.h : header file -// - -///////////////////////////////////////////////////////////////////////////// -// CKrbEditHostServer dialog - -class CKrbEditHostServer : public CDialog -{ -// Construction -private: - CString m_newHost; - BOOL m_startup; - -public: - CKrbEditHostServer(CString& editItem, CWnd* pParent = NULL); - CString GetEditedItem() {return m_newHost;} - -// Dialog Data - //{{AFX_DATA(CKrbEditHostServer) - enum { IDD = IDD_KRB_EDIT_KDC_HOSTSERVER }; - //}}AFX_DATA - - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CKrbEditHostServer) - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL - -// Implementation -protected: - - // Generated message map functions - //{{AFX_MSG(CKrbEditHostServer) - afx_msg void OnShowWindow(BOOL bShow, UINT nStatus); - virtual void OnOK(); - virtual BOOL OnInitDialog(); - afx_msg void OnChangeEditKdcHost(); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() -}; - -//{{AFX_INSERT_LOCATION}} -// Microsoft Visual C++ will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_EDITHOST_H__26A1E1F7_9117_11D2_94D0_0000861B8A3C__INCLUDED_) diff --git a/src/windows/leash/KrbEditRealm.cpp b/src/windows/leash/KrbEditRealm.cpp deleted file mode 100644 index d7d04bd48c..0000000000 --- a/src/windows/leash/KrbEditRealm.cpp +++ /dev/null @@ -1,98 +0,0 @@ -// ************************************************************************************** -// File: KrbEditRealm.cpp -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. -// Description: CPP file for KrbEditRealm.h. Contains variables and functions -// for Kerberos Four and Five Properties -// -// History: -// -// MM/DD/YY Inits Description of Change -// 12/02/98 ADL Original -// ************************************************************************************** - - -#include "stdafx.h" -#include "leash.h" -#include "KrbEditRealm.h" -#include "lglobals.h" - -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif - -///////////////////////////////////////////////////////////////////////////// -// CKrbEditRealm dialog - -CKrbEditRealm::CKrbEditRealm(CString& editItem, CWnd* pParent) - : CDialog(CKrbEditRealm::IDD, pParent) -{ - m_startup = TRUE; - m_newRealm = editItem; - - - //{{AFX_DATA_INIT(CKrbEditRealm) - // NOTE: the ClassWizard will add member initialization here - //}}AFX_DATA_INIT -} - -void CKrbEditRealm::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); - //{{AFX_DATA_MAP(CKrbEditRealm) - // NOTE: the ClassWizard will add DDX and DDV calls here - //}}AFX_DATA_MAP -} - - -BEGIN_MESSAGE_MAP(CKrbEditRealm, CDialog) - //{{AFX_MSG_MAP(CKrbEditRealm) - ON_WM_SHOWWINDOW() - ON_EN_CHANGE(IDC_EDIT_REALM, OnChangeEditRealm) - //}}AFX_MSG_MAP -END_MESSAGE_MAP() - -///////////////////////////////////////////////////////////////////////////// -// CKrbEditRealm message handlers - -BOOL CKrbEditRealm::OnInitDialog() -{ - CDialog::OnInitDialog(); - - SetDlgItemText(IDC_EDIT_REALM, m_newRealm); - - return TRUE; -} - -void CKrbEditRealm::OnShowWindow(BOOL bShow, UINT nStatus) -{ - CDialog::OnShowWindow(bShow, nStatus); - m_startup = FALSE; -} - -void CKrbEditRealm::OnChangeEditRealm() -{ - if (!m_startup) - GetDlgItemText(IDC_EDIT_REALM, m_newRealm); -} - -void CKrbEditRealm::OnOK() -{ - m_newRealm.TrimLeft(); - m_newRealm.TrimRight(); - - if (m_newRealm.IsEmpty()) - { // stay - MessageBox("OnOK::The Realm field must be filled in!", - "Leash", MB_OK); - } - else if (-1 != m_newRealm.Find(' ')) - { // stay - MessageBox("OnOK::Illegal space found!", "Leash", MB_OK); - } - else - CDialog::OnOK(); // exit -} diff --git a/src/windows/leash/KrbEditRealm.h b/src/windows/leash/KrbEditRealm.h deleted file mode 100644 index 4bf5fdfab6..0000000000 --- a/src/windows/leash/KrbEditRealm.h +++ /dev/null @@ -1,75 +0,0 @@ -// ************************************************************************************** -// File: KrbEditRealm.h -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. -// Description: H file for Krb4EditRealmHostList.cpp. Contains variables and functions -// for Kerberos Four Properties -// -// History: -// -// MM/DD/YY Inits Description of Change -// 12/02/98 ADL Original -// ************************************************************************************** - - - -#if !defined(AFX_EDITREALMHOSTLIST_H__26A1E1F7_9117_11D2_94D0_0000861B8A3C__INCLUDED_) -#define AFX_EDITREALMHOSTLIST_H__26A1E1F7_9117_11D2_94D0_0000861B8A3C__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 -// EditRealmHostList.h : header file -// - -///////////////////////////////////////////////////////////////////////////// -// CKrbEditRealm dialog - -class CKrbEditRealm : public CDialog -{ -// Construction -private: - //CString m_editItem; - //CString m_initRealm; - CString m_newRealm; - //CString m_initHost; - //CString m_newHost; - //BOOL m_initAdmin; - //BOOL m_newAdmin; - BOOL m_startup; - -public: - CKrbEditRealm(CString& editItem, CWnd* pParent = NULL); - CString GetEditedItem() {return m_newRealm;} - -// Dialog Data - //{{AFX_DATA(CKrbEditRealm) - enum { IDD = IDD_KRB_EDIT_REALM }; - //}}AFX_DATA - - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CKrbEditRealm) - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL - -// Implementation -protected: - - // Generated message map functions - //{{AFX_MSG(CKrbEditRealm) - afx_msg void OnShowWindow(BOOL bShow, UINT nStatus); - afx_msg void OnChangeEditRealm(); - virtual void OnOK(); - virtual BOOL OnInitDialog(); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() -}; - -//{{AFX_INSERT_LOCATION}} -// Microsoft Visual C++ will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_EDITREALMHOSTLIST_H__26A1E1F7_9117_11D2_94D0_0000861B8A3C__INCLUDED_) diff --git a/src/windows/leash/KrbMiscConfigOpt.cpp b/src/windows/leash/KrbMiscConfigOpt.cpp deleted file mode 100644 index 2c7153ef87..0000000000 --- a/src/windows/leash/KrbMiscConfigOpt.cpp +++ /dev/null @@ -1,1020 +0,0 @@ -//***************************************************************************** -// File: KrbMiscConfigOpt.cpp -// By: Paul B. Hill -// Created: 08/12/1999 -// Copyright: @1999 Massachusetts Institute of Technology - All rights -// reserved. -// Description: CPP file for KrbMiscConfigOpt.cpp. Contains variables -// and functions for Kerberos Properties. -// -// History: -// -// MM/DD/YY Inits Description of Change -// 08/12/99 PBH Original -//***************************************************************************** - -#include "stdafx.h" -#include "Leash.h" -#include "KrbProperties.h" -#include "KrbMiscConfigOpt.h" -#include "LeashFileDialog.h" -#include "LeashMessageBox.h" -#include "lglobals.h" -#include -#include "reminder.h" - -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif - - -/////////////////////////////////////////////////////////////////////// -// CKrbMiscConfigOpt property page - -UINT CKrbMiscConfigOpt::m_DefaultLifeTime; -CString CKrbMiscConfigOpt::m_initDefaultLifeTimeMin; -CString CKrbMiscConfigOpt::m_newDefaultLifeTimeMin; -CEdit CKrbMiscConfigOpt::m_krbLifeTimeMinEditbox; -CString CKrbMiscConfigOpt::m_initDefaultLifeTimeHr; -CString CKrbMiscConfigOpt::m_newDefaultLifeTimeHr; -CEdit CKrbMiscConfigOpt::m_krbLifeTimeHrEditbox; -CString CKrbMiscConfigOpt::m_initDefaultLifeTimeDay; -CString CKrbMiscConfigOpt::m_newDefaultLifeTimeDay; -CEdit CKrbMiscConfigOpt::m_krbLifeTimeDayEditbox; - -UINT CKrbMiscConfigOpt::m_DefaultRenewTill; -CString CKrbMiscConfigOpt::m_initDefaultRenewTillMin; -CString CKrbMiscConfigOpt::m_newDefaultRenewTillMin; -CEdit CKrbMiscConfigOpt::m_krbRenewTillMinEditbox; -CString CKrbMiscConfigOpt::m_initDefaultRenewTillHr; -CString CKrbMiscConfigOpt::m_newDefaultRenewTillHr; -CEdit CKrbMiscConfigOpt::m_krbRenewTillHrEditbox; -CString CKrbMiscConfigOpt::m_initDefaultRenewTillDay; -CString CKrbMiscConfigOpt::m_newDefaultRenewTillDay; -CEdit CKrbMiscConfigOpt::m_krbRenewTillDayEditbox; - -UINT CKrbMiscConfigOpt::m_DefaultLifeMin; -CString CKrbMiscConfigOpt::m_initDefaultLifeMinMin; -CString CKrbMiscConfigOpt::m_newDefaultLifeMinMin; -CEdit CKrbMiscConfigOpt::m_krbLifeMinMinEditbox; -CString CKrbMiscConfigOpt::m_initDefaultLifeMinHr; -CString CKrbMiscConfigOpt::m_newDefaultLifeMinHr; -CEdit CKrbMiscConfigOpt::m_krbLifeMinHrEditbox; -CString CKrbMiscConfigOpt::m_initDefaultLifeMinDay; -CString CKrbMiscConfigOpt::m_newDefaultLifeMinDay; -CEdit CKrbMiscConfigOpt::m_krbLifeMinDayEditbox; - -UINT CKrbMiscConfigOpt::m_DefaultLifeMax; -CString CKrbMiscConfigOpt::m_initDefaultLifeMaxMin; -CString CKrbMiscConfigOpt::m_newDefaultLifeMaxMin; -CEdit CKrbMiscConfigOpt::m_krbLifeMaxMinEditbox; -CString CKrbMiscConfigOpt::m_initDefaultLifeMaxHr; -CString CKrbMiscConfigOpt::m_newDefaultLifeMaxHr; -CEdit CKrbMiscConfigOpt::m_krbLifeMaxHrEditbox; -CString CKrbMiscConfigOpt::m_initDefaultLifeMaxDay; -CString CKrbMiscConfigOpt::m_newDefaultLifeMaxDay; -CEdit CKrbMiscConfigOpt::m_krbLifeMaxDayEditbox; - -UINT CKrbMiscConfigOpt::m_DefaultRenewMin; -CString CKrbMiscConfigOpt::m_initDefaultRenewMinMin; -CString CKrbMiscConfigOpt::m_newDefaultRenewMinMin; -CEdit CKrbMiscConfigOpt::m_krbRenewMinMinEditbox; -CString CKrbMiscConfigOpt::m_initDefaultRenewMinHr; -CString CKrbMiscConfigOpt::m_newDefaultRenewMinHr; -CEdit CKrbMiscConfigOpt::m_krbRenewMinHrEditbox; -CString CKrbMiscConfigOpt::m_initDefaultRenewMinDay; -CString CKrbMiscConfigOpt::m_newDefaultRenewMinDay; -CEdit CKrbMiscConfigOpt::m_krbRenewMinDayEditbox; - -UINT CKrbMiscConfigOpt::m_DefaultRenewMax; -CString CKrbMiscConfigOpt::m_initDefaultRenewMaxMin; -CString CKrbMiscConfigOpt::m_newDefaultRenewMaxMin; -CEdit CKrbMiscConfigOpt::m_krbRenewMaxMinEditbox; -CString CKrbMiscConfigOpt::m_initDefaultRenewMaxHr; -CString CKrbMiscConfigOpt::m_newDefaultRenewMaxHr; -CEdit CKrbMiscConfigOpt::m_krbRenewMaxHrEditbox; -CString CKrbMiscConfigOpt::m_initDefaultRenewMaxDay; -CString CKrbMiscConfigOpt::m_newDefaultRenewMaxDay; -CEdit CKrbMiscConfigOpt::m_krbRenewMaxDayEditbox; - - -IMPLEMENT_DYNCREATE(CKrbMiscConfigOpt, CPropertyPage) - -CKrbMiscConfigOpt::CKrbMiscConfigOpt() : CPropertyPage(CKrbMiscConfigOpt::IDD) -{ - m_noLifeTime = FALSE; - - m_DefaultLifeTime = 0; - m_DefaultRenewTill = 0; - m_DefaultLifeMin = 0; - m_DefaultLifeMax = 0; - m_DefaultRenewMin = 0; - m_DefaultRenewMax = 0; - m_initUseKrb4 = m_newUseKrb4 = 0; - m_initKinitPreserve = m_newKinitPreserve = 0; - - //{{AFX_DATA_INIT(CKrbConfigOptions) - //}}AFX_DATA_INIT -} - -CKrbMiscConfigOpt::~CKrbMiscConfigOpt() -{ -} - -VOID CKrbMiscConfigOpt::DoDataExchange(CDataExchange* pDX) -{ - TRACE("Entering CKrbMiscConfigOpt::DoDataExchange -- %d\n", - pDX->m_bSaveAndValidate); - CPropertyPage::DoDataExchange(pDX); - //{{AFX_DATA_MAP(CKrbMscConfigOpt) - - DDX_Control(pDX, IDC_EDIT_LIFETIME_D, m_krbLifeTimeDayEditbox); - DDX_Control(pDX, IDC_EDIT_LIFETIME_H, m_krbLifeTimeHrEditbox); - DDX_Control(pDX, IDC_EDIT_LIFETIME_M, m_krbLifeTimeMinEditbox); - DDX_Control(pDX, IDC_EDIT_RENEWTILL_D, m_krbRenewTillDayEditbox); - DDX_Control(pDX, IDC_EDIT_RENEWTILL_H, m_krbRenewTillHrEditbox); - DDX_Control(pDX, IDC_EDIT_RENEWTILL_M, m_krbRenewTillMinEditbox); - DDX_Control(pDX, IDC_EDIT_LIFE_MIN_D, m_krbLifeMinDayEditbox); - DDX_Control(pDX, IDC_EDIT_LIFE_MIN_H, m_krbLifeMinHrEditbox); - DDX_Control(pDX, IDC_EDIT_LIFE_MIN_M, m_krbLifeMinMinEditbox); - DDX_Control(pDX, IDC_EDIT_LIFE_MAX_D, m_krbLifeMaxDayEditbox); - DDX_Control(pDX, IDC_EDIT_LIFE_MAX_H, m_krbLifeMaxHrEditbox); - DDX_Control(pDX, IDC_EDIT_LIFE_MAX_M, m_krbLifeMaxMinEditbox); - DDX_Control(pDX, IDC_EDIT_RENEW_MIN_D, m_krbRenewMinDayEditbox); - DDX_Control(pDX, IDC_EDIT_RENEW_MIN_H, m_krbRenewMinHrEditbox); - DDX_Control(pDX, IDC_EDIT_RENEW_MIN_M, m_krbRenewMinMinEditbox); - DDX_Control(pDX, IDC_EDIT_RENEW_MAX_D, m_krbRenewMaxDayEditbox); - DDX_Control(pDX, IDC_EDIT_RENEW_MAX_H, m_krbRenewMaxHrEditbox); - DDX_Control(pDX, IDC_EDIT_RENEW_MAX_M, m_krbRenewMaxMinEditbox); - //}}AFX_DATA_MAP -} - - -BOOL CKrbMiscConfigOpt::OnInitDialog() -{ - CPropertyPage::OnInitDialog(); - - DWORD tmp = m_DefaultLifeTime = pLeash_get_default_lifetime(); - if (tmp) - m_noLifeTime = FALSE; // We now have the value. - else - m_noLifeTime = TRUE; - - LPTSTR buf = m_initDefaultLifeTimeDay.GetBuffer(80); - _itoa(tmp/24/60, buf, 10); - tmp %= (24 * 60); - m_initDefaultLifeTimeDay.ReleaseBuffer(); - m_newDefaultLifeTimeDay = m_initDefaultLifeTimeDay; - - buf = m_initDefaultLifeTimeHr.GetBuffer(80); - _itoa(tmp/60, buf, 10); - tmp %= 60; - m_initDefaultLifeTimeHr.ReleaseBuffer(); - m_newDefaultLifeTimeHr = m_initDefaultLifeTimeHr; - - buf = m_initDefaultLifeTimeMin.GetBuffer(80); - _itoa(tmp, buf, 10); - m_initDefaultLifeTimeMin.ReleaseBuffer(); - m_newDefaultLifeTimeMin = m_initDefaultLifeTimeMin; - - tmp = m_DefaultRenewTill = pLeash_get_default_renew_till(); - buf = m_initDefaultRenewTillDay.GetBuffer(80); - _itoa(tmp/24/60, buf, 10); - tmp %= (24 * 60); - m_initDefaultRenewTillDay.ReleaseBuffer(); - m_newDefaultRenewTillDay = m_initDefaultRenewTillDay; - - buf = m_initDefaultRenewTillHr.GetBuffer(80); - _itoa(tmp/60, buf, 10); - tmp %= 60; - m_initDefaultRenewTillHr.ReleaseBuffer(); - m_newDefaultRenewTillHr = m_initDefaultRenewTillHr; - - buf = m_initDefaultRenewTillMin.GetBuffer(80); - _itoa(tmp, buf, 10); - m_initDefaultRenewTillMin.ReleaseBuffer(); - m_newDefaultRenewTillMin = m_initDefaultRenewTillMin; - - tmp = m_DefaultLifeMin = pLeash_get_default_life_min(); - buf = m_initDefaultLifeMinDay.GetBuffer(80); - _itoa(tmp/24/60, buf, 10); - tmp %= (24 * 60); - m_initDefaultLifeMinDay.ReleaseBuffer(); - m_newDefaultLifeMinDay = m_initDefaultLifeMinDay; - - buf = m_initDefaultLifeMinHr.GetBuffer(80); - _itoa(tmp/60, buf, 10); - tmp %= 60; - m_initDefaultLifeMinHr.ReleaseBuffer(); - m_newDefaultLifeMinHr = m_initDefaultLifeMinHr; - - buf = m_initDefaultLifeMinMin.GetBuffer(80); - _itoa(tmp, buf, 10); - m_initDefaultLifeMinMin.ReleaseBuffer(); - m_newDefaultLifeMinMin = m_initDefaultLifeMinMin; - - tmp = m_DefaultLifeMax = pLeash_get_default_life_max(); - buf = m_initDefaultLifeMaxDay.GetBuffer(80); - _itoa(tmp/24/60, buf, 10); - tmp %= (24 * 60); - m_initDefaultLifeMaxDay.ReleaseBuffer(); - m_newDefaultLifeMaxDay = m_initDefaultLifeMaxDay; - - buf = m_initDefaultLifeMaxHr.GetBuffer(80); - _itoa(tmp/60, buf, 10); - tmp %= 60; - m_initDefaultLifeMaxHr.ReleaseBuffer(); - m_newDefaultLifeMaxHr = m_initDefaultLifeMaxHr; - - buf = m_initDefaultLifeMaxMin.GetBuffer(80); - _itoa(tmp, buf, 10); - m_initDefaultLifeMaxMin.ReleaseBuffer(); - m_newDefaultLifeMaxMin = m_initDefaultLifeMaxMin; - - tmp = m_DefaultRenewMin = pLeash_get_default_renew_min(); - buf = m_initDefaultRenewMinDay.GetBuffer(80); - _itoa(tmp/24/60, buf, 10); - tmp %= (24 * 60); - m_initDefaultRenewMinDay.ReleaseBuffer(); - m_newDefaultRenewMinDay = m_initDefaultRenewMinDay; - - buf = m_initDefaultRenewMinHr.GetBuffer(80); - _itoa(tmp/60, buf, 10); - tmp %= 60; - m_initDefaultRenewMinHr.ReleaseBuffer(); - m_newDefaultRenewMinHr = m_initDefaultRenewMinHr; - - buf = m_initDefaultRenewMinMin.GetBuffer(80); - _itoa(tmp, buf, 10); - m_initDefaultRenewMinMin.ReleaseBuffer(); - m_newDefaultRenewMinMin = m_initDefaultRenewMinMin; - - tmp = m_DefaultRenewMax = pLeash_get_default_renew_max(); - buf = m_initDefaultRenewMaxDay.GetBuffer(80); - _itoa(tmp/24/60, buf, 10); - tmp %= (24 * 60); - m_initDefaultRenewMaxDay.ReleaseBuffer(); - m_newDefaultRenewMaxDay = m_initDefaultRenewMaxDay; - - buf = m_initDefaultRenewMaxHr.GetBuffer(80); - _itoa(tmp/60, buf, 10); - tmp %= 60; - m_initDefaultRenewMaxHr.ReleaseBuffer(); - m_newDefaultRenewMaxHr = m_initDefaultRenewMaxHr; - - buf = m_initDefaultRenewMaxMin.GetBuffer(80); - _itoa(tmp, buf, 10); - m_initDefaultRenewMaxMin.ReleaseBuffer(); - m_newDefaultRenewMaxMin = m_initDefaultRenewMaxMin; - - if (!CLeashApp::m_hKrb5DLL) - { - GetDlgItem(IDC_EDIT_RENEWTILL_D)->EnableWindow(FALSE); - GetDlgItem(IDC_EDIT_RENEWTILL_H)->EnableWindow(FALSE); - GetDlgItem(IDC_EDIT_RENEWTILL_M)->EnableWindow(FALSE); - GetDlgItem(IDC_EDIT_RENEW_MIN_D)->EnableWindow(FALSE); - GetDlgItem(IDC_EDIT_RENEW_MIN_H)->EnableWindow(FALSE); - GetDlgItem(IDC_EDIT_RENEW_MIN_M)->EnableWindow(FALSE); - GetDlgItem(IDC_EDIT_RENEW_MAX_D)->EnableWindow(FALSE); - GetDlgItem(IDC_EDIT_RENEW_MAX_H)->EnableWindow(FALSE); - GetDlgItem(IDC_EDIT_RENEW_MAX_M)->EnableWindow(FALSE); - } - -#ifndef NO_KRB4 - m_initUseKrb4 = m_newUseKrb4 = (CLeashApp::m_hKrb4DLL ? pLeash_get_default_use_krb4() : 0); - CheckDlgButton(IDC_CHECK_REQUEST_KRB4, m_initUseKrb4); - if ( !CLeashApp::m_hKrb4DLL ) - GetDlgItem(IDC_CHECK_REQUEST_KRB4)->EnableWindow(FALSE); -#else -////Or remove these completely? - m_initUseKrb4 = m_newUseKrb4 = 0; - CheckDlgButton(IDC_CHECK_REQUEST_KRB4, 0); - GetDlgItem(IDC_CHECK_REQUEST_KRB4)->EnableWindow(FALSE); -#endif - - m_initKinitPreserve = m_newKinitPreserve = pLeash_get_default_preserve_kinit_settings(); - CheckDlgButton(IDC_CHECK_PRESERVE_KINIT_OPTIONS, m_initKinitPreserve); - - return(TRUE); -} - -BOOL CKrbMiscConfigOpt::OnApply() -{ - DWORD lifetime = ((atoi(m_newDefaultLifeTimeDay)*24 + atoi(m_newDefaultLifeTimeHr)) * 60) + atoi(m_newDefaultLifeTimeMin); - DWORD renewtill = ((atoi(m_newDefaultRenewTillDay)*24 + atoi(m_newDefaultRenewTillHr)) * 60) + atoi(m_newDefaultRenewTillMin); - DWORD lifemin = ((atoi(m_newDefaultLifeMinDay)*24 + atoi(m_newDefaultLifeMinHr)) * 60) + atoi(m_newDefaultLifeMinMin); - DWORD lifemax = ((atoi(m_newDefaultLifeMaxDay)*24 + atoi(m_newDefaultLifeMaxHr)) * 60) + atoi(m_newDefaultLifeMaxMin); - DWORD renewmin = ((atoi(m_newDefaultRenewMinDay)*24 + atoi(m_newDefaultRenewMinHr)) * 60) + atoi(m_newDefaultRenewMinMin); - DWORD renewmax = ((atoi(m_newDefaultRenewMaxDay)*24 + atoi(m_newDefaultRenewMaxHr)) * 60) + atoi(m_newDefaultRenewMaxMin); - - // If no changes were made, quit this function - if ( m_DefaultLifeTime == lifetime && - m_DefaultRenewTill == renewtill && - m_DefaultLifeMin == lifemin && - m_DefaultLifeMax == lifemax && - m_DefaultRenewMin == renewmin && - m_DefaultRenewMax == renewmax && - m_initUseKrb4 == m_newUseKrb4 && - m_initKinitPreserve == m_newKinitPreserve - ) - return TRUE; - - if ( lifemin > lifemax ) { - MessageBox("The Minimum Ticket Lifetime must be less than the Maximum Ticket Lifetime.", - "Leash", MB_OK); - return(FALSE); - } - - if (lifetime < lifemin || lifetime > lifemax) { - MessageBox("The default Ticket Lifetime must fall within the range specified by the " - "Minimum and Maximum Ticket Lifetime fields", - "Leash", MB_OK); - return(FALSE); - } - - if ( CLeashApp::m_hKrb5DLL && (renewmin > renewmax) ) { - MessageBox("The Minimum Ticket Renewable Lifetime must be less than the Maximum Ticket Renewable Lifetime.", - "Leash", MB_OK); - return(FALSE); - } - - if ( CLeashApp::m_hKrb5DLL && (renewmin < lifemin) ) { - MessageBox("The Minimum Renewable Ticket Lifetime must not be smaller than the Minimum Ticket Lifetime.", - "Leash", MB_OK); - } - - if ( CLeashApp::m_hKrb5DLL && (renewtill < renewmin || renewtill > renewmax) ) { - MessageBox("The default Renewable Ticket Lifetime must fall within the range specified by the " - "Minimum and Maximum Renewable Ticket Lifetime fields", - "Leash", MB_OK); - return(FALSE); - } - - m_DefaultLifeMin = lifemin; - pLeash_set_default_life_min(m_DefaultLifeMin); - m_initDefaultLifeMinDay = m_newDefaultLifeMinDay; - m_initDefaultLifeMinHr = m_newDefaultLifeMinHr ; - m_initDefaultLifeMinMin = m_newDefaultLifeMinMin; - - m_DefaultLifeMax = lifemax; - pLeash_set_default_life_max(m_DefaultLifeMax); - m_initDefaultLifeMaxDay = m_newDefaultLifeMaxDay; - m_initDefaultLifeMaxHr = m_newDefaultLifeMaxHr ; - m_initDefaultLifeMaxMin = m_newDefaultLifeMaxMin; - - m_DefaultRenewMin = renewmin; - pLeash_set_default_renew_min(m_DefaultRenewMin); - m_initDefaultRenewMinDay = m_newDefaultRenewMinDay; - m_initDefaultRenewMinHr = m_newDefaultRenewMinHr ; - m_initDefaultRenewMinMin = m_newDefaultRenewMinMin; - - m_DefaultRenewMax = renewmax; - pLeash_set_default_renew_max(m_DefaultRenewMax); - m_initDefaultRenewMaxDay = m_newDefaultRenewMaxDay; - m_initDefaultRenewMaxHr = m_newDefaultRenewMaxHr ; - m_initDefaultRenewMaxMin = m_newDefaultRenewMaxMin; - - m_DefaultRenewTill = renewtill; - pLeash_set_default_renew_till(m_DefaultRenewTill); - m_initDefaultRenewTillDay = m_newDefaultRenewTillDay; - m_initDefaultRenewTillHr = m_newDefaultRenewTillHr ; - m_initDefaultRenewTillMin = m_newDefaultRenewTillMin; - - if( getenv("LIFETIME") != NULL) - { - MessageBox("The ticket lifetime is being controlled by the environment " - "variable LIFETIME instead of the registry. Leash cannot modify " - "the environment. Use the System control panel instead.", - "Leash", MB_OK); - return(FALSE); - } - - m_DefaultLifeTime = lifetime; - pLeash_set_default_lifetime(m_DefaultLifeTime); - m_initDefaultLifeTimeDay = m_newDefaultLifeTimeDay; - m_initDefaultLifeTimeHr = m_newDefaultLifeTimeHr ; - m_initDefaultLifeTimeMin = m_newDefaultLifeTimeMin; - - // If we're using an environment variable tell the user that we - // can't use Leash to modify the value. - - if (!m_DefaultLifeTime) - { - MessageBox("A lifetime setting of 0 is special in that it means that " - "the application is free to pick whatever default it deems " - "appropriate", - "Leash", MB_OK); - } - -#ifndef NO_KRB4 - if ( m_initUseKrb4 != m_newUseKrb4 ) { - pLeash_set_default_use_krb4(m_newUseKrb4); - } -#endif - - if ( m_initKinitPreserve != m_newKinitPreserve ) { - pLeash_set_default_preserve_kinit_settings(m_newKinitPreserve); - } - - return TRUE; -} - -void CKrbMiscConfigOpt::OnSelchangeEditDefaultLifeTime() -{ - static int in_progress = 0; - if (!in_progress && !m_startupPage2) - { - in_progress = 1; - GetDlgItemText(IDC_EDIT_LIFETIME_D, m_newDefaultLifeTimeDay); - GetDlgItemText(IDC_EDIT_LIFETIME_H, m_newDefaultLifeTimeHr); - GetDlgItemText(IDC_EDIT_LIFETIME_M, m_newDefaultLifeTimeMin); - DWORD value = (((atoi(m_newDefaultLifeTimeDay)*24 + atoi(m_newDefaultLifeTimeHr)) * 60) + atoi(m_newDefaultLifeTimeMin)); - LPSTR buf = m_newDefaultLifeTimeDay.GetBuffer(80); - _itoa(value/24/60, buf, 10); - value %= (24 * 60); - m_newDefaultLifeTimeDay.ReleaseBuffer(); - buf = m_newDefaultLifeTimeHr.GetBuffer(80); - _itoa(value/60, buf, 10); - value %= 60; - m_newDefaultLifeTimeHr.ReleaseBuffer(); - buf = m_newDefaultLifeTimeMin.GetBuffer(80); - _itoa(value, buf, 10); - m_newDefaultLifeTimeMin.ReleaseBuffer(); - SetDlgItemText(IDC_EDIT_LIFETIME_D, m_newDefaultLifeTimeDay); - SetDlgItemText(IDC_EDIT_LIFETIME_H, m_newDefaultLifeTimeHr); - SetDlgItemText(IDC_EDIT_LIFETIME_M, m_newDefaultLifeTimeMin); - SetModified(TRUE); - in_progress = 0; - } -} - -void CKrbMiscConfigOpt::OnEditKillfocusEditDefaultLifeTime() -{ - static int in_progress = 0; - if (!in_progress && !m_startupPage2) - { - in_progress = 1; - GetDlgItemText(IDC_EDIT_LIFETIME_D, m_newDefaultLifeTimeDay); - GetDlgItemText(IDC_EDIT_LIFETIME_H, m_newDefaultLifeTimeHr); - GetDlgItemText(IDC_EDIT_LIFETIME_M, m_newDefaultLifeTimeMin); - DWORD value = (((atoi(m_newDefaultLifeTimeDay)*24 + atoi(m_newDefaultLifeTimeHr)) * 60) + atoi(m_newDefaultLifeTimeMin)); - LPSTR buf = m_newDefaultLifeTimeDay.GetBuffer(80); - _itoa(value/24/60, buf, 10); - value %= (24 * 60); - m_newDefaultLifeTimeDay.ReleaseBuffer(); - buf = m_newDefaultLifeTimeHr.GetBuffer(80); - _itoa(value/60, buf, 10); - value %= 60; - m_newDefaultLifeTimeHr.ReleaseBuffer(); - buf = m_newDefaultLifeTimeMin.GetBuffer(80); - _itoa(value, buf, 10); - m_newDefaultLifeTimeMin.ReleaseBuffer(); - SetDlgItemText(IDC_EDIT_LIFETIME_D, m_newDefaultLifeTimeDay); - SetDlgItemText(IDC_EDIT_LIFETIME_H, m_newDefaultLifeTimeHr); - SetDlgItemText(IDC_EDIT_LIFETIME_M, m_newDefaultLifeTimeMin); - - SetModified(TRUE); - in_progress = 0; - } -} - -void CKrbMiscConfigOpt::ResetDefaultLifeTimeEditBox() -{ - // Reset Config Tab's Default LifeTime Editbox - - DWORD tmp = m_DefaultLifeTime = pLeash_get_default_lifetime(); - LPSTR buf = m_newDefaultLifeTimeDay.GetBuffer(80); - _itoa(tmp/24/60, buf, 10); - tmp %= (24 * 60); - m_newDefaultLifeTimeDay.ReleaseBuffer(); - buf = m_newDefaultLifeTimeHr.GetBuffer(80); - _itoa(tmp/60, buf, 10); - tmp %= 60; - m_newDefaultLifeTimeHr.ReleaseBuffer(); - buf = m_newDefaultLifeTimeMin.GetBuffer(80); - _itoa(tmp, buf, 10); - m_newDefaultLifeTimeMin.ReleaseBuffer(); - - ::SetDlgItemText(::GetForegroundWindow(), IDC_EDIT_LIFETIME_D, m_newDefaultLifeTimeDay); - ::SetDlgItemText(::GetForegroundWindow(), IDC_EDIT_LIFETIME_H, m_newDefaultLifeTimeHr); - ::SetDlgItemText(::GetForegroundWindow(), IDC_EDIT_LIFETIME_M, m_newDefaultLifeTimeMin); -} - - -void CKrbMiscConfigOpt::OnSelchangeEditDefaultRenewTill() -{ - static int in_progress = 0; - if (!in_progress && !m_startupPage2) - { - in_progress = 1; - GetDlgItemText(IDC_EDIT_RENEWTILL_D, m_newDefaultRenewTillDay); - GetDlgItemText(IDC_EDIT_RENEWTILL_H, m_newDefaultRenewTillHr); - GetDlgItemText(IDC_EDIT_RENEWTILL_M, m_newDefaultRenewTillMin); - DWORD value = (((atoi(m_newDefaultRenewTillDay)*24 + atoi(m_newDefaultRenewTillHr)) * 60) + atoi(m_newDefaultRenewTillMin)); - LPSTR buf = m_newDefaultRenewTillDay.GetBuffer(80); - _itoa(value/24/60, buf, 10); - value %= (24 * 60); - m_newDefaultRenewTillDay.ReleaseBuffer(); - buf = m_newDefaultRenewTillHr.GetBuffer(80); - _itoa(value/60, buf, 10); - value %= 60; - m_newDefaultRenewTillHr.ReleaseBuffer(); - buf = m_newDefaultRenewTillMin.GetBuffer(80); - _itoa(value, buf, 10); - m_newDefaultRenewTillMin.ReleaseBuffer(); - SetDlgItemText(IDC_EDIT_RENEWTILL_D, m_newDefaultRenewTillDay); - SetDlgItemText(IDC_EDIT_RENEWTILL_H, m_newDefaultRenewTillHr); - SetDlgItemText(IDC_EDIT_RENEWTILL_M, m_newDefaultRenewTillMin); - SetModified(TRUE); - in_progress = 0; - } -} - -void CKrbMiscConfigOpt::OnEditKillfocusEditDefaultRenewTill() -{ - static int in_progress = 0; - if (!in_progress && !m_startupPage2) - { - in_progress = 1; - GetDlgItemText(IDC_EDIT_RENEWTILL_D, m_newDefaultRenewTillDay); - GetDlgItemText(IDC_EDIT_RENEWTILL_H, m_newDefaultRenewTillHr); - GetDlgItemText(IDC_EDIT_RENEWTILL_M, m_newDefaultRenewTillMin); - DWORD value = (((atoi(m_newDefaultRenewTillDay)*24 + atoi(m_newDefaultRenewTillHr)) * 60) + atoi(m_newDefaultRenewTillMin)); - LPSTR buf = m_newDefaultRenewTillDay.GetBuffer(80); - _itoa(value/24/60, buf, 10); - value %= (24 * 60); - m_newDefaultRenewTillDay.ReleaseBuffer(); - buf = m_newDefaultRenewTillHr.GetBuffer(80); - _itoa(value/60, buf, 10); - value %= 60; - m_newDefaultRenewTillHr.ReleaseBuffer(); - buf = m_newDefaultRenewTillMin.GetBuffer(80); - _itoa(value, buf, 10); - m_newDefaultRenewTillMin.ReleaseBuffer(); - SetDlgItemText(IDC_EDIT_RENEWTILL_D, m_newDefaultRenewTillDay); - SetDlgItemText(IDC_EDIT_RENEWTILL_H, m_newDefaultRenewTillHr); - SetDlgItemText(IDC_EDIT_RENEWTILL_M, m_newDefaultRenewTillMin); - - SetModified(TRUE); - in_progress = 0; - } -} - -void CKrbMiscConfigOpt::ResetDefaultRenewTillEditBox() -{ - // Reset Config Tab's Default RenewTill Editbox - - DWORD tmp = m_DefaultRenewTill = pLeash_get_default_lifetime(); - LPSTR buf = m_newDefaultRenewTillDay.GetBuffer(80); - _itoa(tmp/24/60, buf, 10); - tmp %= (24 * 60); - m_newDefaultRenewTillDay.ReleaseBuffer(); - buf = m_newDefaultRenewTillHr.GetBuffer(80); - _itoa(tmp/60, buf, 10); - tmp %= 60; - m_newDefaultRenewTillHr.ReleaseBuffer(); - buf = m_newDefaultRenewTillMin.GetBuffer(80); - _itoa(tmp, buf, 10); - m_newDefaultRenewTillMin.ReleaseBuffer(); - - ::SetDlgItemText(::GetForegroundWindow(), IDC_EDIT_RENEWTILL_D, m_newDefaultRenewTillDay); - ::SetDlgItemText(::GetForegroundWindow(), IDC_EDIT_RENEWTILL_H, m_newDefaultRenewTillHr); - ::SetDlgItemText(::GetForegroundWindow(), IDC_EDIT_RENEWTILL_M, m_newDefaultRenewTillMin); -} - - -void CKrbMiscConfigOpt::OnSelchangeEditDefaultLifeMin() -{ - static int in_progress = 0; - if (!in_progress && !m_startupPage2) - { - in_progress = 1; - GetDlgItemText(IDC_EDIT_LIFE_MIN_D, m_newDefaultLifeMinDay); - GetDlgItemText(IDC_EDIT_LIFE_MIN_H, m_newDefaultLifeMinHr); - GetDlgItemText(IDC_EDIT_LIFE_MIN_M, m_newDefaultLifeMinMin); - DWORD value = (((atoi(m_newDefaultLifeMinDay)*24 + atoi(m_newDefaultLifeMinHr)) * 60) + atoi(m_newDefaultLifeMinMin)); - LPSTR buf = m_newDefaultLifeMinDay.GetBuffer(80); - _itoa(value/24/60, buf, 10); - value %= (24 * 60); - m_newDefaultLifeMinDay.ReleaseBuffer(); - buf = m_newDefaultLifeMinHr.GetBuffer(80); - _itoa(value/60, buf, 10); - value %= 60; - m_newDefaultLifeMinHr.ReleaseBuffer(); - buf = m_newDefaultLifeMinMin.GetBuffer(80); - _itoa(value, buf, 10); - m_newDefaultLifeMinMin.ReleaseBuffer(); - SetDlgItemText(IDC_EDIT_LIFE_MIN_D, m_newDefaultLifeMinDay); - SetDlgItemText(IDC_EDIT_LIFE_MIN_H, m_newDefaultLifeMinHr); - SetDlgItemText(IDC_EDIT_LIFE_MIN_M, m_newDefaultLifeMinMin); - SetModified(TRUE); - in_progress = 0; - } -} - -void CKrbMiscConfigOpt::OnEditKillfocusEditDefaultLifeMin() -{ - static int in_progress = 0; - if (!in_progress && !m_startupPage2) - { - in_progress = 1; - GetDlgItemText(IDC_EDIT_LIFE_MIN_D, m_newDefaultLifeMinDay); - GetDlgItemText(IDC_EDIT_LIFE_MIN_H, m_newDefaultLifeMinHr); - GetDlgItemText(IDC_EDIT_LIFE_MIN_M, m_newDefaultLifeMinMin); - DWORD value = (((atoi(m_newDefaultLifeMinDay)*24 + atoi(m_newDefaultLifeMinHr)) * 60) + atoi(m_newDefaultLifeMinMin)); - LPSTR buf = m_newDefaultLifeMinDay.GetBuffer(80); - _itoa(value/24/60, buf, 10); - value %= (24 * 60); - m_newDefaultLifeMinDay.ReleaseBuffer(); - buf = m_newDefaultLifeMinHr.GetBuffer(80); - _itoa(value/60, buf, 10); - value %= 60; - m_newDefaultLifeMinHr.ReleaseBuffer(); - buf = m_newDefaultLifeMinMin.GetBuffer(80); - _itoa(value, buf, 10); - m_newDefaultLifeMinMin.ReleaseBuffer(); - SetDlgItemText(IDC_EDIT_LIFE_MIN_D, m_newDefaultLifeMinDay); - SetDlgItemText(IDC_EDIT_LIFE_MIN_H, m_newDefaultLifeMinHr); - SetDlgItemText(IDC_EDIT_LIFE_MIN_M, m_newDefaultLifeMinMin); - - SetModified(TRUE); - in_progress = 0; - } -} - -void CKrbMiscConfigOpt::ResetDefaultLifeMinEditBox() -{ - // Reset Config Tab's Default LifeMin Editbox - - DWORD tmp = m_DefaultLifeMin = pLeash_get_default_life_min(); - LPSTR buf = m_newDefaultLifeMinDay.GetBuffer(80); - _itoa(tmp/24/60, buf, 10); - tmp %= (24 * 60); - m_newDefaultLifeMinDay.ReleaseBuffer(); - buf = m_newDefaultLifeMinHr.GetBuffer(80); - _itoa(tmp/60, buf, 10); - tmp %= 60; - m_newDefaultLifeMinHr.ReleaseBuffer(); - buf = m_newDefaultLifeMinMin.GetBuffer(80); - _itoa(tmp, buf, 10); - m_newDefaultLifeMinMin.ReleaseBuffer(); - - ::SetDlgItemText(::GetForegroundWindow(), IDC_EDIT_LIFE_MIN_D, m_newDefaultLifeMinDay); - ::SetDlgItemText(::GetForegroundWindow(), IDC_EDIT_LIFE_MIN_H, m_newDefaultLifeMinHr); - ::SetDlgItemText(::GetForegroundWindow(), IDC_EDIT_LIFE_MIN_M, m_newDefaultLifeMinMin); -} - -void CKrbMiscConfigOpt::OnSelchangeEditDefaultLifeMax() -{ - static int in_progress = 0; - if (!in_progress && !m_startupPage2) - { - in_progress = 1; - GetDlgItemText(IDC_EDIT_LIFE_MAX_D, m_newDefaultLifeMaxDay); - GetDlgItemText(IDC_EDIT_LIFE_MAX_H, m_newDefaultLifeMaxHr); - GetDlgItemText(IDC_EDIT_LIFE_MAX_M, m_newDefaultLifeMaxMin); - DWORD value = (((atoi(m_newDefaultLifeMaxDay)*24 + atoi(m_newDefaultLifeMaxHr)) * 60) + atoi(m_newDefaultLifeMaxMin)); - LPSTR buf = m_newDefaultLifeMaxDay.GetBuffer(80); - _itoa(value/24/60, buf, 10); - value %= (24 * 60); - m_newDefaultLifeMaxDay.ReleaseBuffer(); - buf = m_newDefaultLifeMaxHr.GetBuffer(80); - _itoa(value/60, buf, 10); - value %= 60; - m_newDefaultLifeMaxHr.ReleaseBuffer(); - buf = m_newDefaultLifeMaxMin.GetBuffer(80); - _itoa(value, buf, 10); - m_newDefaultLifeMaxMin.ReleaseBuffer(); - SetDlgItemText(IDC_EDIT_LIFE_MAX_D, m_newDefaultLifeMaxDay); - SetDlgItemText(IDC_EDIT_LIFE_MAX_H, m_newDefaultLifeMaxHr); - SetDlgItemText(IDC_EDIT_LIFE_MAX_M, m_newDefaultLifeMaxMin); - - SetModified(TRUE); - in_progress = 0; - } -} - -void CKrbMiscConfigOpt::OnEditKillfocusEditDefaultLifeMax() -{ - static int in_progress = 0; - if (!in_progress && !m_startupPage2) - { - in_progress = 1; - GetDlgItemText(IDC_EDIT_LIFE_MAX_D, m_newDefaultLifeMaxDay); - GetDlgItemText(IDC_EDIT_LIFE_MAX_H, m_newDefaultLifeMaxHr); - GetDlgItemText(IDC_EDIT_LIFE_MAX_M, m_newDefaultLifeMaxMin); - DWORD value = (((atoi(m_newDefaultLifeMaxDay)*24 + atoi(m_newDefaultLifeMaxHr)) * 60) + atoi(m_newDefaultLifeMaxMin)); - LPSTR buf = m_newDefaultLifeMaxDay.GetBuffer(80); - _itoa(value/24/60, buf, 10); - value %= (24 * 60); - m_newDefaultLifeMaxDay.ReleaseBuffer(); - buf = m_newDefaultLifeMaxHr.GetBuffer(80); - _itoa(value/60, buf, 10); - value %= 60; - m_newDefaultLifeMaxHr.ReleaseBuffer(); - buf = m_newDefaultLifeMaxMin.GetBuffer(80); - _itoa(value, buf, 10); - m_newDefaultLifeMaxMin.ReleaseBuffer(); - SetDlgItemText(IDC_EDIT_LIFE_MAX_D, m_newDefaultLifeMaxDay); - SetDlgItemText(IDC_EDIT_LIFE_MAX_H, m_newDefaultLifeMaxHr); - SetDlgItemText(IDC_EDIT_LIFE_MAX_M, m_newDefaultLifeMaxMin); - - SetModified(TRUE); - in_progress = 0; - } -} - -void CKrbMiscConfigOpt::ResetDefaultLifeMaxEditBox() -{ - // Reset Config Tab's Default LifeMax Editbox - - DWORD tmp = m_DefaultLifeMax = pLeash_get_default_life_min(); - LPSTR buf = m_newDefaultLifeMaxDay.GetBuffer(80); - _itoa(tmp/24/60, buf, 10); - tmp %= (24 * 60); - m_newDefaultLifeMaxDay.ReleaseBuffer(); - buf = m_newDefaultLifeMaxHr.GetBuffer(80); - _itoa(tmp/60, buf, 10); - tmp %= 60; - m_newDefaultLifeMaxHr.ReleaseBuffer(); - buf = m_newDefaultLifeMaxMin.GetBuffer(80); - _itoa(tmp, buf, 10); - m_newDefaultLifeMaxMin.ReleaseBuffer(); - - ::SetDlgItemText(::GetForegroundWindow(), IDC_EDIT_LIFE_MAX_D, m_newDefaultLifeMaxDay); - ::SetDlgItemText(::GetForegroundWindow(), IDC_EDIT_LIFE_MAX_H, m_newDefaultLifeMaxHr); - ::SetDlgItemText(::GetForegroundWindow(), IDC_EDIT_LIFE_MAX_M, m_newDefaultLifeMaxMin); -} - -void CKrbMiscConfigOpt::OnSelchangeEditDefaultRenewMin() -{ - static int in_progress = 0; - if (!in_progress && !m_startupPage2) - { - in_progress = 1; - GetDlgItemText(IDC_EDIT_RENEW_MIN_D, m_newDefaultRenewMinDay); - GetDlgItemText(IDC_EDIT_RENEW_MIN_H, m_newDefaultRenewMinHr); - GetDlgItemText(IDC_EDIT_RENEW_MIN_M, m_newDefaultRenewMinMin); - DWORD value = (((atoi(m_newDefaultRenewMinDay)*24 + atoi(m_newDefaultRenewMinHr)) * 60) + atoi(m_newDefaultRenewMinMin)); - LPSTR buf = m_newDefaultRenewMinDay.GetBuffer(80); - _itoa(value/24/60, buf, 10); - value %= (24 * 60); - m_newDefaultRenewMinDay.ReleaseBuffer(); - buf = m_newDefaultRenewMinHr.GetBuffer(80); - _itoa(value/60, buf, 10); - value %= 60; - m_newDefaultRenewMinHr.ReleaseBuffer(); - buf = m_newDefaultRenewMinMin.GetBuffer(80); - _itoa(value, buf, 10); - m_newDefaultRenewMinMin.ReleaseBuffer(); - SetDlgItemText(IDC_EDIT_RENEW_MIN_D, m_newDefaultRenewMinDay); - SetDlgItemText(IDC_EDIT_RENEW_MIN_H, m_newDefaultRenewMinHr); - SetDlgItemText(IDC_EDIT_RENEW_MIN_M, m_newDefaultRenewMinMin); - - SetModified(TRUE); - in_progress = 0; - } -} - -void CKrbMiscConfigOpt::OnEditKillfocusEditDefaultRenewMin() -{ - static int in_progress = 0; - if (!in_progress && !m_startupPage2) - { - in_progress = 1; - GetDlgItemText(IDC_EDIT_RENEW_MIN_D, m_newDefaultRenewMinDay); - GetDlgItemText(IDC_EDIT_RENEW_MIN_H, m_newDefaultRenewMinHr); - GetDlgItemText(IDC_EDIT_RENEW_MIN_M, m_newDefaultRenewMinMin); - DWORD value = (((atoi(m_newDefaultRenewMinDay)*24 + atoi(m_newDefaultRenewMinHr)) * 60) + atoi(m_newDefaultRenewMinMin)); - LPSTR buf = m_newDefaultRenewMinDay.GetBuffer(80); - _itoa(value/24/60, buf, 10); - value %= (24 * 60); - m_newDefaultRenewMinDay.ReleaseBuffer(); - buf = m_newDefaultRenewMinHr.GetBuffer(80); - _itoa(value/60, buf, 10); - value %= 60; - m_newDefaultRenewMinHr.ReleaseBuffer(); - buf = m_newDefaultRenewMinMin.GetBuffer(80); - _itoa(value, buf, 10); - m_newDefaultRenewMinMin.ReleaseBuffer(); - SetDlgItemText(IDC_EDIT_RENEW_MIN_D, m_newDefaultRenewMinDay); - SetDlgItemText(IDC_EDIT_RENEW_MIN_H, m_newDefaultRenewMinHr); - SetDlgItemText(IDC_EDIT_RENEW_MIN_M, m_newDefaultRenewMinMin); - - SetModified(TRUE); - in_progress = 0; - } -} - -void CKrbMiscConfigOpt::ResetDefaultRenewMinEditBox() -{ - // Reset Config Tab's Default RenewMin Editbox - - DWORD tmp = m_DefaultRenewMin = pLeash_get_default_life_min(); - LPSTR buf = m_newDefaultRenewMinDay.GetBuffer(80); - _itoa(tmp/24/60, buf, 10); - tmp %= (24 * 60); - m_newDefaultRenewMinDay.ReleaseBuffer(); - buf = m_newDefaultRenewMinHr.GetBuffer(80); - _itoa(tmp/60, buf, 10); - tmp %= 60; - m_newDefaultRenewMinHr.ReleaseBuffer(); - buf = m_newDefaultRenewMinMin.GetBuffer(80); - _itoa(tmp, buf, 10); - m_newDefaultRenewMinMin.ReleaseBuffer(); - - ::SetDlgItemText(::GetForegroundWindow(), IDC_EDIT_RENEW_MIN_D, m_newDefaultRenewMinDay); - ::SetDlgItemText(::GetForegroundWindow(), IDC_EDIT_RENEW_MIN_H, m_newDefaultRenewMinHr); - ::SetDlgItemText(::GetForegroundWindow(), IDC_EDIT_RENEW_MIN_M, m_newDefaultRenewMinMin); -} - -void CKrbMiscConfigOpt::OnSelchangeEditDefaultRenewMax() -{ - static int in_progress = 0; - if (!in_progress && !m_startupPage2) - { - in_progress = 1; - GetDlgItemText(IDC_EDIT_RENEW_MAX_D, m_newDefaultRenewMaxDay); - GetDlgItemText(IDC_EDIT_RENEW_MAX_H, m_newDefaultRenewMaxHr); - GetDlgItemText(IDC_EDIT_RENEW_MAX_M, m_newDefaultRenewMaxMin); - DWORD value = (((atoi(m_newDefaultRenewMaxDay)*24 + atoi(m_newDefaultRenewMaxHr)) * 60) + atoi(m_newDefaultRenewMaxMin)); - LPSTR buf = m_newDefaultRenewMaxDay.GetBuffer(80); - _itoa(value/24/60, buf, 10); - value %= (24 * 60); - m_newDefaultRenewMaxDay.ReleaseBuffer(); - buf = m_newDefaultRenewMaxHr.GetBuffer(80); - _itoa(value/60, buf, 10); - value %= 60; - m_newDefaultRenewMaxHr.ReleaseBuffer(); - buf = m_newDefaultRenewMaxMin.GetBuffer(80); - _itoa(value, buf, 10); - m_newDefaultRenewMaxMin.ReleaseBuffer(); - SetDlgItemText(IDC_EDIT_RENEW_MAX_D, m_newDefaultRenewMaxDay); - SetDlgItemText(IDC_EDIT_RENEW_MAX_H, m_newDefaultRenewMaxHr); - SetDlgItemText(IDC_EDIT_RENEW_MAX_M, m_newDefaultRenewMaxMin); - - SetModified(TRUE); - in_progress = 0; - } -} - -void CKrbMiscConfigOpt::OnEditKillfocusEditDefaultRenewMax() -{ - static int in_progress = 0; - if (!in_progress && !m_startupPage2) - { - in_progress = 1; - GetDlgItemText(IDC_EDIT_RENEW_MAX_D, m_newDefaultRenewMaxDay); - GetDlgItemText(IDC_EDIT_RENEW_MAX_H, m_newDefaultRenewMaxHr); - GetDlgItemText(IDC_EDIT_RENEW_MAX_M, m_newDefaultRenewMaxMin); - DWORD value = (((atoi(m_newDefaultRenewMaxDay)*24 + atoi(m_newDefaultRenewMaxHr)) * 60) + atoi(m_newDefaultRenewMaxMin)); - LPSTR buf = m_newDefaultRenewMaxDay.GetBuffer(80); - _itoa(value/24/60, buf, 10); - value %= (24 * 60); - m_newDefaultRenewMaxDay.ReleaseBuffer(); - buf = m_newDefaultRenewMaxHr.GetBuffer(80); - _itoa(value/60, buf, 10); - value %= 60; - m_newDefaultRenewMaxHr.ReleaseBuffer(); - buf = m_newDefaultRenewMaxMin.GetBuffer(80); - _itoa(value, buf, 10); - m_newDefaultRenewMaxMin.ReleaseBuffer(); - SetDlgItemText(IDC_EDIT_RENEW_MAX_D, m_newDefaultRenewMaxDay); - SetDlgItemText(IDC_EDIT_RENEW_MAX_H, m_newDefaultRenewMaxHr); - SetDlgItemText(IDC_EDIT_RENEW_MAX_M, m_newDefaultRenewMaxMin); - - SetModified(TRUE); - in_progress = 0; - } -} - -void CKrbMiscConfigOpt::ResetDefaultRenewMaxEditBox() -{ - // Reset Config Tab's Default RenewMax Editbox - - DWORD tmp = m_DefaultRenewMax = pLeash_get_default_life_min(); - LPSTR buf = m_newDefaultRenewMaxDay.GetBuffer(80); - _itoa(tmp/24/60, buf, 10); - tmp %= (24 * 60); - m_newDefaultRenewMaxDay.ReleaseBuffer(); - buf = m_newDefaultRenewMaxHr.GetBuffer(80); - _itoa(tmp/60, buf, 10); - tmp %= 60; - m_newDefaultRenewMaxHr.ReleaseBuffer(); - buf = m_newDefaultRenewMaxMin.GetBuffer(80); - _itoa(tmp, buf, 10); - m_newDefaultRenewMaxMin.ReleaseBuffer(); - - ::SetDlgItemText(::GetForegroundWindow(), IDC_EDIT_RENEW_MAX_D, m_newDefaultRenewMaxDay); - ::SetDlgItemText(::GetForegroundWindow(), IDC_EDIT_RENEW_MAX_H, m_newDefaultRenewMaxHr); - ::SetDlgItemText(::GetForegroundWindow(), IDC_EDIT_RENEW_MAX_M, m_newDefaultRenewMaxMin); -} - -void CKrbMiscConfigOpt::OnCheckUseKrb4() -{ - m_newUseKrb4 = (BOOL)IsDlgButtonChecked(IDC_CHECK_REQUEST_KRB4); -} - -void CKrbMiscConfigOpt::OnCheckKinitPreserve() -{ - m_newKinitPreserve = (BOOL)IsDlgButtonChecked(IDC_CHECK_PRESERVE_KINIT_OPTIONS); -} - -void CKrbMiscConfigOpt::OnShowWindow(BOOL bShow, UINT nStatus) -{ - CPropertyPage::OnShowWindow(bShow, nStatus); - - if (CLeashApp::m_hKrb5DLL) - ResetDefaultLifeTimeEditBox(); - - SetDlgItemText(IDC_EDIT_LIFETIME_D, m_newDefaultLifeTimeDay); - SetDlgItemText(IDC_EDIT_LIFETIME_H, m_newDefaultLifeTimeHr); - SetDlgItemText(IDC_EDIT_LIFETIME_M, m_newDefaultLifeTimeMin); - SetDlgItemText(IDC_EDIT_RENEWTILL_D, m_newDefaultRenewTillDay); - SetDlgItemText(IDC_EDIT_RENEWTILL_H, m_newDefaultRenewTillHr); - SetDlgItemText(IDC_EDIT_RENEWTILL_M, m_newDefaultRenewTillMin); - SetDlgItemText(IDC_EDIT_LIFE_MIN_D, m_newDefaultLifeMinDay); - SetDlgItemText(IDC_EDIT_LIFE_MIN_H, m_newDefaultLifeMinHr); - SetDlgItemText(IDC_EDIT_LIFE_MIN_M, m_newDefaultLifeMinMin); - SetDlgItemText(IDC_EDIT_LIFE_MAX_D, m_newDefaultLifeMaxDay); - SetDlgItemText(IDC_EDIT_LIFE_MAX_H, m_newDefaultLifeMaxHr); - SetDlgItemText(IDC_EDIT_LIFE_MAX_M, m_newDefaultLifeMaxMin); - SetDlgItemText(IDC_EDIT_RENEW_MIN_D, m_newDefaultRenewMinDay); - SetDlgItemText(IDC_EDIT_RENEW_MIN_H, m_newDefaultRenewMinHr); - SetDlgItemText(IDC_EDIT_RENEW_MIN_M, m_newDefaultRenewMinMin); - SetDlgItemText(IDC_EDIT_RENEW_MAX_D, m_newDefaultRenewMaxDay); - SetDlgItemText(IDC_EDIT_RENEW_MAX_H, m_newDefaultRenewMaxHr); - SetDlgItemText(IDC_EDIT_RENEW_MAX_M, m_newDefaultRenewMaxMin); -} - -BOOL CKrbMiscConfigOpt::PreTranslateMessage(MSG* pMsg) -{ - if (!m_startupPage2) - { - if (m_noLifeTime) - { - MessageBox("A lifetime setting of 0 is special in that it means that " - "the application is free to pick whatever default it deems " - "appropriate", - "Leash", MB_OK); - m_noLifeTime = FALSE; - } - } - - m_startupPage2 = FALSE; - return CPropertyPage::PreTranslateMessage(pMsg); -} - - -BEGIN_MESSAGE_MAP(CKrbMiscConfigOpt, CPropertyPage) - //{{AFX_MSG_MAP(CKrbConfigOptions) - ON_WM_SHOWWINDOW() - - ON_EN_KILLFOCUS(IDC_EDIT_LIFETIME_D, OnEditKillfocusEditDefaultLifeTime) - ON_CBN_SELCHANGE(IDC_EDIT_LIFETIME_D, OnSelchangeEditDefaultLifeTime) - ON_EN_KILLFOCUS(IDC_EDIT_LIFETIME_H, OnEditKillfocusEditDefaultLifeTime) - ON_CBN_SELCHANGE(IDC_EDIT_LIFETIME_H, OnSelchangeEditDefaultLifeTime) - ON_EN_KILLFOCUS(IDC_EDIT_LIFETIME_M, OnEditKillfocusEditDefaultLifeTime) - ON_CBN_SELCHANGE(IDC_EDIT_LIFETIME_M, OnSelchangeEditDefaultLifeTime) - - ON_EN_KILLFOCUS(IDC_EDIT_RENEWTILL_D, OnEditKillfocusEditDefaultRenewTill) - ON_CBN_SELCHANGE(IDC_EDIT_RENEWTILL_D, OnSelchangeEditDefaultRenewTill) - ON_EN_KILLFOCUS(IDC_EDIT_RENEWTILL_H, OnEditKillfocusEditDefaultRenewTill) - ON_CBN_SELCHANGE(IDC_EDIT_RENEWTILL_H, OnSelchangeEditDefaultRenewTill) - ON_EN_KILLFOCUS(IDC_EDIT_RENEWTILL_M, OnEditKillfocusEditDefaultRenewTill) - ON_CBN_SELCHANGE(IDC_EDIT_RENEWTILL_M, OnSelchangeEditDefaultRenewTill) - - ON_EN_KILLFOCUS(IDC_EDIT_LIFE_MIN_D, OnEditKillfocusEditDefaultLifeMin) - ON_CBN_SELCHANGE(IDC_EDIT_LIFE_MIN_D, OnSelchangeEditDefaultLifeMin) - ON_EN_KILLFOCUS(IDC_EDIT_LIFE_MIN_H, OnEditKillfocusEditDefaultLifeMin) - ON_CBN_SELCHANGE(IDC_EDIT_LIFE_MIN_H, OnSelchangeEditDefaultLifeMin) - ON_EN_KILLFOCUS(IDC_EDIT_LIFE_MIN_M, OnEditKillfocusEditDefaultLifeMin) - ON_CBN_SELCHANGE(IDC_EDIT_LIFE_MIN_M, OnSelchangeEditDefaultLifeMin) - - ON_EN_KILLFOCUS(IDC_EDIT_LIFE_MAX_D, OnEditKillfocusEditDefaultLifeMax) - ON_CBN_SELCHANGE(IDC_EDIT_LIFE_MAX_D, OnSelchangeEditDefaultLifeMax) - ON_EN_KILLFOCUS(IDC_EDIT_LIFE_MAX_H, OnEditKillfocusEditDefaultLifeMax) - ON_CBN_SELCHANGE(IDC_EDIT_LIFE_MAX_H, OnSelchangeEditDefaultLifeMax) - ON_EN_KILLFOCUS(IDC_EDIT_LIFE_MAX_M, OnEditKillfocusEditDefaultLifeMax) - ON_CBN_SELCHANGE(IDC_EDIT_LIFE_MAX_M, OnSelchangeEditDefaultLifeMax) - - ON_EN_KILLFOCUS(IDC_EDIT_RENEW_MIN_D, OnEditKillfocusEditDefaultRenewMin) - ON_CBN_SELCHANGE(IDC_EDIT_RENEW_MIN_D, OnSelchangeEditDefaultRenewMin) - ON_EN_KILLFOCUS(IDC_EDIT_RENEW_MIN_H, OnEditKillfocusEditDefaultRenewMin) - ON_CBN_SELCHANGE(IDC_EDIT_RENEW_MIN_H, OnSelchangeEditDefaultRenewMin) - ON_EN_KILLFOCUS(IDC_EDIT_RENEW_MIN_M, OnEditKillfocusEditDefaultRenewMin) - ON_CBN_SELCHANGE(IDC_EDIT_RENEW_MIN_M, OnSelchangeEditDefaultRenewMin) - - ON_EN_KILLFOCUS(IDC_EDIT_RENEW_MAX_D, OnEditKillfocusEditDefaultRenewMax) - ON_CBN_SELCHANGE(IDC_EDIT_RENEW_MAX_D, OnSelchangeEditDefaultRenewMax) - ON_EN_KILLFOCUS(IDC_EDIT_RENEW_MAX_H, OnEditKillfocusEditDefaultRenewMax) - ON_CBN_SELCHANGE(IDC_EDIT_RENEW_MAX_H, OnSelchangeEditDefaultRenewMax) - ON_EN_KILLFOCUS(IDC_EDIT_RENEW_MAX_M, OnEditKillfocusEditDefaultRenewMax) - ON_CBN_SELCHANGE(IDC_EDIT_RENEW_MAX_M, OnSelchangeEditDefaultRenewMax) - - ON_BN_CLICKED(IDC_CHECK_REQUEST_KRB4, OnCheckUseKrb4) - ON_BN_CLICKED(IDC_CHECK_PRESERVE_KINIT_OPTIONS, OnCheckKinitPreserve) - //}}AFX_MSG_MAP -END_MESSAGE_MAP() diff --git a/src/windows/leash/KrbMiscConfigOpt.h b/src/windows/leash/KrbMiscConfigOpt.h deleted file mode 100644 index e2daf29a34..0000000000 --- a/src/windows/leash/KrbMiscConfigOpt.h +++ /dev/null @@ -1,173 +0,0 @@ -//***************************************************************************** -// File: KrbMiscConfigOpt.h -// By: Paul B. Hill -// Created: 08/12/1999 -// Copyright: @1999 Massachusetts Institute of Technology - All rights -// reserved. -// Description: H file for KrbMiscConfigOpt.cpp. Contains variables -// and functions for Kerberos Properties. -// -// History: -// -// MM/DD/YY Inits Description of Change -// 08/12/99 PBH Original -//***************************************************************************** - - -#if !defined(AFX_MISCCONFIGOPT_H__CD702F99_7495_11D0_8FDC_00C04FC2A0C2__INCLUDED_) -#define AFX_MISCONFIGOPT_H__CD702F99_7495_11D0_8FDC_00C04FC2A0C2__INCLUDED_ - -#if _MSC_VER >= 1000 -#pragma once -#endif - - -#include "resource.h" - - -/////////////////////////////////////////////////////////////////////// -// CKrbMiscConfigOptions dialog - -class CKrbMiscConfigOpt : public CPropertyPage -{ -// Construction -private: - DECLARE_DYNCREATE(CKrbMiscConfigOpt) - BOOL m_startupPage2; - BOOL m_noLifeTime; - - static UINT m_DefaultLifeTime; - static CString m_initDefaultLifeTimeMin; - static CString m_newDefaultLifeTimeMin; - static CString m_initDefaultLifeTimeHr; - static CString m_newDefaultLifeTimeHr; - static CString m_initDefaultLifeTimeDay; - static CString m_newDefaultLifeTimeDay; - - static UINT m_DefaultRenewTill; - static CString m_initDefaultRenewTillMin; - static CString m_newDefaultRenewTillMin; - static CString m_initDefaultRenewTillHr; - static CString m_newDefaultRenewTillHr; - static CString m_initDefaultRenewTillDay; - static CString m_newDefaultRenewTillDay; - - static UINT m_DefaultLifeMin; - static CString m_initDefaultLifeMinMin; - static CString m_newDefaultLifeMinMin; - static CString m_initDefaultLifeMinHr; - static CString m_newDefaultLifeMinHr; - static CString m_initDefaultLifeMinDay; - static CString m_newDefaultLifeMinDay; - - static UINT m_DefaultLifeMax; - static CString m_initDefaultLifeMaxMin; - static CString m_newDefaultLifeMaxMin; - static CString m_initDefaultLifeMaxHr; - static CString m_newDefaultLifeMaxHr; - static CString m_initDefaultLifeMaxDay; - static CString m_newDefaultLifeMaxDay; - - static UINT m_DefaultRenewMin; - static CString m_initDefaultRenewMinMin; - static CString m_newDefaultRenewMinMin; - static CString m_initDefaultRenewMinHr; - static CString m_newDefaultRenewMinHr; - static CString m_initDefaultRenewMinDay; - static CString m_newDefaultRenewMinDay; - - static UINT m_DefaultRenewMax; - static CString m_initDefaultRenewMaxMin; - static CString m_newDefaultRenewMaxMin; - static CString m_initDefaultRenewMaxHr; - static CString m_newDefaultRenewMaxHr; - static CString m_initDefaultRenewMaxDay; - static CString m_newDefaultRenewMaxDay; - - static void ResetDefaultLifeTimeEditBox(); - static void ResetDefaultRenewTillEditBox(); - static void ResetDefaultLifeMinEditBox(); - static void ResetDefaultLifeMaxEditBox(); - static void ResetDefaultRenewMinEditBox(); - static void ResetDefaultRenewMaxEditBox(); - - BOOL m_initUseKrb4; - BOOL m_newUseKrb4; - BOOL m_initKinitPreserve; - BOOL m_newKinitPreserve; - -public: - CKrbMiscConfigOpt(); - ~CKrbMiscConfigOpt(); - -// Dialog Data - //{{AFX_DATA(CKrbMiscConfigOpt) - enum { IDD = IDD_KRB_PROP_MISC }; - static CEdit m_krbLifeTimeDayEditbox; - static CEdit m_krbLifeTimeMinEditbox; - static CEdit m_krbLifeTimeHrEditbox; - static CEdit m_krbRenewTillDayEditbox; - static CEdit m_krbRenewTillMinEditbox; - static CEdit m_krbRenewTillHrEditbox; - static CEdit m_krbRenewMaxDayEditbox; - static CEdit m_krbRenewMinDayEditbox; - static CEdit m_krbLifeMinDayEditbox; - static CEdit m_krbLifeMinMinEditbox; - static CEdit m_krbLifeMinHrEditbox; - static CEdit m_krbLifeMaxDayEditbox; - static CEdit m_krbLifeMaxMinEditbox; - static CEdit m_krbLifeMaxHrEditbox; - static CEdit m_krbRenewMinMinEditbox; - static CEdit m_krbRenewMinHrEditbox; - static CEdit m_krbRenewMaxMinEditbox; - static CEdit m_krbRenewMaxHrEditbox; - //}}AFX_DATA - - -// Overrides - // ClassWizard generate virtual function overrides - //{{AFX_VIRTUAL(CKrbConfigOptions) - public: - virtual BOOL PreTranslateMessage(MSG* pMsg); - protected: - virtual VOID DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL - - virtual BOOL OnApply(); - -// Implementation -protected: - // Generated message map functions - //{{AFX_MSG(CKrbMiscConfigOpt) - virtual BOOL OnInitDialog(); - afx_msg void OnShowWindow(BOOL bShow, UINT nStatus); - afx_msg void OnEditKillfocusEditDefaultLifeTime(); - afx_msg void OnResetDefaultLifeTimeEditBox(); - afx_msg void OnSelchangeEditDefaultLifeTime(); - afx_msg void OnEditKillfocusEditDefaultRenewTill(); - afx_msg void OnResetDefaultRenewTillEditBox(); - afx_msg void OnSelchangeEditDefaultRenewTill(); - afx_msg void OnEditKillfocusEditDefaultLifeMin(); - afx_msg void OnResetDefaultLifeMinEditBox(); - afx_msg void OnSelchangeEditDefaultLifeMin(); - afx_msg void OnEditKillfocusEditDefaultLifeMax(); - afx_msg void OnResetDefaultLifeMaxEditBox(); - afx_msg void OnSelchangeEditDefaultLifeMax(); - afx_msg void OnEditKillfocusEditDefaultRenewMin(); - afx_msg void OnResetDefaultRenewMinEditBox(); - afx_msg void OnSelchangeEditDefaultRenewMin(); - afx_msg void OnEditKillfocusEditDefaultRenewMax(); - afx_msg void OnResetDefaultRenewMaxEditBox(); - afx_msg void OnSelchangeEditDefaultRenewMax(); - afx_msg void OnCheckUseKrb4(); - afx_msg void OnCheckKinitPreserve(); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() - -}; - -///////////////////////////////////////////////////////////////////////////// -//{{AFX_INSERT_LOCATION}} -// Microsoft Developer Studio will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_MISCONFIGOPT_H__CD702F99_7495_11D0_8FDC_00C04FC2A0C2__INCLUDED_) diff --git a/src/windows/leash/KrbProperties.cpp b/src/windows/leash/KrbProperties.cpp deleted file mode 100644 index 9885b14881..0000000000 --- a/src/windows/leash/KrbProperties.cpp +++ /dev/null @@ -1,105 +0,0 @@ -// File: KrbProperties.cpp -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. -// Description: CPP file for KrbProperties.h. Contains variables and functions -// for Kerberos Four Properties -// -// History: -// -// MM/DD/YY Inits Description of Change -// 02/01/98 ADL Original -// ************************************************************************************** - - -#include "stdafx.h" -#include "KrbProperties.h" - -#include "Leash.h" -#include "wshelper.h" -#include "lglobals.h" -#include "reminder.h" - -CHAR CKrbProperties::m_krbPath[MAX_PATH]; -CHAR CKrbProperties::m_krbrealmPath[MAX_PATH]; -BOOL CKrbProperties::KrbPropertiesOn; - -/////////////////////////////////////////////////////////////////////// -// CKrbProperties - -IMPLEMENT_DYNAMIC(CKrbProperties, CPropertySheet) -CKrbProperties::CKrbProperties(UINT nIDCaption, CWnd* pParentWnd, - UINT iSelectPage) -:CPropertySheet(nIDCaption, pParentWnd, iSelectPage) -{ -} - -CKrbProperties::CKrbProperties(LPCTSTR pszCaption, CWnd* pParentWnd, - UINT iSelectPage) -:CPropertySheet(pszCaption, pParentWnd, iSelectPage) -{ - KrbPropertiesOn = FALSE; - -#ifdef COMMENT - // If this will not be fatal, then it does not need to be performed here. - if (CLeashApp::m_hKrb5DLL) - { - char *realm = NULL; - pkrb5_get_default_realm(CLeashApp::m_krbv5_context, &realm); - - if (!realm) - { - MessageBox("CKrbProperties::Unable to determine default Kerberos REALM.\ - \n Consult your Administrator!", - "Error", MB_OK); - // I don't think this is necessarily fatal. - jaltman - // return; - } - } -#endif /* COMMENT */ - -#ifndef NO_KRB4 - CLeashApp::GetKrb4ConFile(m_krbPath,sizeof(m_krbPath)); - CLeashApp::GetKrb4RealmFile(m_krbrealmPath,sizeof(m_krbrealmPath)); -#endif - - AddPage(&m_configOptions); - AddPage(&m_miscConfigOpt); - -#ifndef NO_KRB4 - if (CLeashApp::m_hKrb4DLL && !CLeashApp::m_hKrb5DLL) - { - AddPage(&m_krb4RealmHostMaintenance); - AddPage(&m_krb4DomainRealmMaintenance); - } - else -#endif - if (CLeashApp::m_hKrb5DLL) - { - AddPage(&m_realmHostMaintenance); - AddPage(&m_domainRealmMaintenance); - } - - KrbPropertiesOn = TRUE; -} - -CKrbProperties::~CKrbProperties() -{ - KrbPropertiesOn = FALSE; -} - -void CKrbProperties::OnHelp() -{ - AfxGetApp()->WinHelp(HID_KERBEROS_PROPERTIES_COMMAND); -} - - -BEGIN_MESSAGE_MAP(CKrbProperties, CPropertySheet) - //{{AFX_MSG_MAP(CKrbProperties) - // NOTE - the ClassWizard will add and remove mapping macros here. - ON_COMMAND(ID_HELP, OnHelp) - //}}AFX_MSG_MAP -END_MESSAGE_MAP() - -/////////////////////////////////////////////////////////////////////// -// CKrbProperties message handlers diff --git a/src/windows/leash/KrbProperties.h b/src/windows/leash/KrbProperties.h deleted file mode 100644 index f476ac1a26..0000000000 --- a/src/windows/leash/KrbProperties.h +++ /dev/null @@ -1,95 +0,0 @@ -// ************************************************************************************** -// File: KrbProperties.h -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. -// Description: H file for KrbProperties.cpp. Contains variables and functions -// for Kerberos Four Properties -// -// History: -// -// MM/DD/YY Inits Description of Change -// 02/01/98 ADL Original -// ************************************************************************************** - - -#if !defined(AFX_KRB_PROPERTY_H__CD702F99_7495_11D0_8FDC_00C04FC2A0C2__INCLUDED_) -#define AFX_KRB_PROPERTY_H__CD702F99_7495_11D0_8FDC_00C04FC2A0C2__INCLUDED_ - -#if _MSC_VER >= 1000 -#pragma once -#endif // _MSC_VER >= 1000 -// KrbProperties.h : header file -// - -#include "KrbConfigOptions.h" -#include "KrbRealmHostMaintenance.h" -#include "KrbDomainRealmMaintenance.h" -#ifndef NO_KRB4 -#include "Krb4DomainRealmMaintenance.h" -#include "Krb4RealmHostMaintenance.h" -#endif -#include "KrbMiscConfigOpt.h" - -////////////////////////////////////////////////////////////////////// -// CKrbProperties - -class CKrbProperties : public CPropertySheet -{ -private: - DECLARE_DYNAMIC(CKrbProperties) - -public: - //CKrbConfigFileLocation m_fileLocation; - CKrbConfigOptions m_configOptions; -#ifndef NO_KRB4 - CKrb4RealmHostMaintenance m_krb4RealmHostMaintenance; -#endif - CKrbRealmHostMaintenance m_realmHostMaintenance; -#ifndef NO_KRB4 - CKrb4DomainRealmMaintenance m_krb4DomainRealmMaintenance; -#endif - CKrbDomainRealmMaintenance m_domainRealmMaintenance; - CKrbMiscConfigOpt m_miscConfigOpt; - - static BOOL KrbPropertiesOn; - static BOOL applyButtonEnabled; - static CHAR m_krbPath[MAX_PATH]; - static CHAR m_krbrealmPath[MAX_PATH]; - -// Construction -public: - CKrbProperties(UINT nIDCaption, CWnd* pParentWnd = NULL, - UINT iSelectPage = 0); - CKrbProperties(LPCTSTR pszCaption, CWnd* pParentWnd = NULL, - UINT iSelectPage = 0); - -// Attributes -public: - -// Operations -public: - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CKrbProperties) - //}}AFX_VIRTUAL - -// Implementation -public: - virtual ~CKrbProperties(); - - // Generated message map functions -protected: - //{{AFX_MSG(CKrbProperties) - // NOTE - the ClassWizard will add and remove member functions here. - afx_msg void OnHelp(); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() -}; - -///////////////////////////////////////////////////////////////////////////// -//{{AFX_INSERT_LOCATION}} -// Microsoft Developer Studio will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_KRB_PROPERTY_H__CD702F99_7495_11D0_8FDC_00C04FC2A0C2__INCLUDED_) diff --git a/src/windows/leash/KrbRealmHostMaintenance.cpp b/src/windows/leash/KrbRealmHostMaintenance.cpp deleted file mode 100644 index bbe97d6056..0000000000 --- a/src/windows/leash/KrbRealmHostMaintenance.cpp +++ /dev/null @@ -1,1043 +0,0 @@ -// ************************************************************************************** -// File: KrbRealmHostMaintenance.cpp -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. -// Description: CPP file for KrbRealmHostMaintenance.h. Contains variables and functions -// for Kerberos Four and Five Properties -// -// History: -// -// MM/DD/YY Inits Description of Change -// 12/02/98 ADL Original -// ************************************************************************************** - - -#include "stdafx.h" -#include "leash.h" -#include "KrbProperties.h" -#include "KrbAddRealm.h" -#include "KrbAddHostServer.h" -#include "KrbRealmHostMaintenance.h" -#include "KrbEditRealm.h" -#include "KrbEditHostServer.h" -#include "KrbConfigOptions.h" - -#include "lglobals.h" -#include "MainFrm.h" - -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif - -///////////////////////////////////////////////////////////////////////////// -// CKrbRealmHostMaintenance dialog - - -IMPLEMENT_DYNCREATE(CKrbRealmHostMaintenance, CPropertyPage) - -CKrbRealmHostMaintenance::CKrbRealmHostMaintenance() - : CPropertyPage(CKrbRealmHostMaintenance::IDD) -{ - m_isRealmListBoxInFocus = FALSE; - m_isStart = TRUE; - m_theAdminServer = _T(""); - m_theAdminServerMarked = _T(""); - m_initDnsKdcLookup = 0; - m_newDnsKdcLookup = 0; - - m_KDCHostList.initOtherListbox(this, &m_KDCRealmList); -} - -CKrbRealmHostMaintenance::~CKrbRealmHostMaintenance() -{ -} - -void CKrbRealmHostMaintenance::DoDataExchange(CDataExchange* pDX) -{ - CPropertyPage::DoDataExchange(pDX); - //{{AFX_DATA_MAP(CKrbRealmHostMaintenance) - DDX_Control(pDX, IDC_LIST_KDC_REALM, m_KDCRealmList); - DDX_Control(pDX, IDC_LIST_KDC_HOST, m_KDCHostList); - //}}AFX_DATA_MAP -} - -BEGIN_MESSAGE_MAP(CKrbRealmHostMaintenance, CPropertyPage) - //{{AFX_MSG_MAP(CKrbRealmHostMaintenance) - ON_BN_CLICKED(IDC_BUTTON_REALM_HOST_ADD, OnButtonRealmHostAdd) - ON_BN_CLICKED(IDC_BUTTON_REALM_EDIT, OnButtonRealmHostEdit) - ON_BN_CLICKED(ID_BUTTON_REALM_REMOVE, OnButtonRealmHostRemove) - ON_LBN_SELCHANGE(IDC_LIST_KDC_REALM, OnSelchangeListKdcRealm) - ON_BN_CLICKED(IDC_BUTTON_ADMINSERVER, OnButtonAdminserver) - ON_LBN_SETFOCUS(IDC_LIST_KDC_REALM, OnSetfocusListKdcRealm) - ON_BN_CLICKED(IDC_BUTTON_KDCHOST_ADD, OnButtonKdchostAdd) - ON_BN_CLICKED(IDC_BUTTON_KDCHOST_REMOVE, OnButtonKdchostRemove) - ON_BN_CLICKED(IDC_BUTTON_REMOVE_ADMINSERVER, OnButtonRemoveAdminserver) - ON_LBN_SELCHANGE(IDC_LIST_KDC_HOST, OnSelchangeListKdcHost) - ON_BN_CLICKED(IDC_BUTTON_KDCHOST_EDIT, OnButtonKdchostEdit) - ON_LBN_DBLCLK(IDC_LIST_KDC_REALM, OnDblclkListKdcRealm) - ON_LBN_DBLCLK(IDC_LIST_KDC_HOST, OnDblclkListKdcHost) - ON_WM_KEYDOWN() - ON_WM_CANCELMODE() - ON_BN_CLICKED(IDC_BUTTON_REALMHOST_MAINT_HELP, OnButtonRealmhostMaintHelp) - ON_BN_CLICKED(IDC_DNS_KDC, OnCheckDnsKdcLookup) - //}}AFX_MSG_MAP -END_MESSAGE_MAP() - -///////////////////////////////////////////////////////////////////////////// -// CKrbRealmHostMaintenance message handlers - -BOOL CKrbRealmHostMaintenance::OnInitDialog() -{ - CPropertyPage::OnInitDialog(); - - const char* rootSection[] = {"realms", NULL}; - const char** rootsec = rootSection; - char **sections = NULL, - **cpp = NULL, - *value = NULL; - - long retval = pprofile_get_subsection_names(CLeashApp::m_krbv5_profile, - rootsec, §ions); - - if (retval && PROF_NO_RELATION != retval) - { - MessageBox("OnInitDialog::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - return TRUE; - } - - for (cpp = sections; *cpp; cpp++) - { - if (LB_ERR == m_KDCRealmList.AddString(*cpp)) - { - MessageBox("OnInitDialog::Can't add to Kerberos Realm Listbox", - "Leash", MB_OK); - return FALSE; - } - } - - pprofile_free_list(sections); - - // Determine the starting value for DNS KDC Lookup Checkbox - retval = pprofile_get_string(CLeashApp::m_krbv5_profile, "libdefaults", - "dns_lookup_kdc", 0, 0, &value); - if (value == 0 && retval == 0) - retval = pprofile_get_string(CLeashApp::m_krbv5_profile, "libdefaults", - "dns_fallback", 0, 0, &value); - if (value == 0) { - m_initDnsKdcLookup = m_newDnsKdcLookup = 1; - } else { - m_initDnsKdcLookup = m_newDnsKdcLookup = config_boolean_to_int(value); - pprofile_release_string(value); - } - CheckDlgButton(IDC_DNS_KDC, m_initDnsKdcLookup); - - // Compaire Krb Four with what's in the Krb Five Profile Linklist - // and add to m_KDCRealmList if needed. - m_KDCRealmList.SetCurSel(0); - - if (!m_KDCRealmList.GetCount()) - { - GetDlgItem(IDC_BUTTON_REALM_EDIT)->EnableWindow(FALSE); - } - else if (1 >= m_KDCRealmList.GetCount()) - { - GetDlgItem(ID_BUTTON_REALM_REMOVE)->EnableWindow(FALSE); - } - else - { - GetDlgItem(ID_BUTTON_REALM_REMOVE)->EnableWindow(); - GetDlgItem(IDC_BUTTON_REALM_EDIT)->EnableWindow(); - } - - - if (!m_KDCHostList.GetCount()) - { - GetDlgItem(IDC_BUTTON_KDCHOST_REMOVE)->EnableWindow(FALSE); - GetDlgItem(IDC_BUTTON_KDCHOST_EDIT)->EnableWindow(FALSE); - } - else - { - GetDlgItem(IDC_BUTTON_KDCHOST_REMOVE)->EnableWindow(); - GetDlgItem(IDC_BUTTON_KDCHOST_EDIT)->EnableWindow(); - } - - - return TRUE; -} - -BOOL CKrbRealmHostMaintenance::OnApply() -{ - char theSection[REALM_SZ + 1]; - const char* adminServer[] = {"realms", theSection, ADMIN_SERVER, NULL}; - const char* Section[] = {"realms", theSection, "kdc", NULL}; //theSection - const char** section = Section; - const char** adminServ = adminServer; - - if (!CLeashApp::m_krbv5_profile) { - CHAR confname[MAX_PATH]; - if (!CLeashApp::GetProfileFile(confname, sizeof(confname))) - { - const char *filenames[2]; - filenames[0] = confname; - filenames[1] = NULL; - pprofile_init(filenames, &CLeashApp::m_krbv5_profile); - } - } - - /* - // Safety check for empty section (may not be need, but left it in anyway) - INT maxRealms = m_KDCRealmList.GetCount(); - for (INT realm = 0; realm < maxRealms; realm++) - { - m_KDCRealmList.GetText(realm, theSection); - long retval = pprofile_get_values(CLeashApp::m_krbv5_profile, - section, &values); - pprofile_free_list(values); - - if (PROF_NO_RELATION == retval) - { - if (IDYES == AfxMessageBox("One or more Realms do not have any corresponing Servers!!!\n\nContinue?", - MB_YESNO)) - break; - else - return TRUE; - } - - if (retval && PROF_NO_RELATION != retval) - { - MessageBox("OnApply::There is an error, profile will not be saved!!!\nIf this error persist, contact your administrator.", - "Error", MB_OK); - return TRUE; - } - } - */ - - long retval = pprofile_flush(CLeashApp::m_krbv5_profile); - - if (retval && PROF_NO_RELATION != retval) - { - MessageBox("OnApply::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - } - -#ifndef NO_KRB4 - // Save to Kerberos Four config. file "Krb.con" - CStdioFile krbCon; - if (!krbCon.Open(CKrbProperties::m_krbPath, CFile::modeCreate | - CFile::modeNoTruncate | - CFile::modeReadWrite)) - { - LeashErrorBox("OnApply::Can't open Configuration File", - CKrbProperties::m_krbPath); - return TRUE; - } - - krbCon.SetLength(0); - - krbCon.WriteString(CKrbConfigOptions::m_newDefaultRealm); - krbCon.WriteString("\n"); - - for (INT maxItems = m_KDCRealmList.GetCount(), item = 0; item < maxItems; item++) - { - char **values = NULL, - **cpp = NULL, - **admin = NULL; - - if (LB_ERR == m_KDCRealmList.GetText(item, theSection)) - ASSERT(0); - - retval = pprofile_get_values(CLeashApp::m_krbv5_profile, - section, &values); - - if (retval && PROF_NO_RELATION != retval) - { - MessageBox("OnApply::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - } - - retval = pprofile_get_values(CLeashApp::m_krbv5_profile, - adminServ , &admin); - - if (retval && PROF_NO_RELATION != retval) - { - MessageBox("OnApply::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - } - - char* pSemiCl = NULL; - if (admin) - { - if (*admin) - { - if ((pSemiCl = strchr(*admin, ':'))) - *pSemiCl = 0; - } - } - - - char hostKdc[MAX_HSTNM]; - if (values) - for (cpp = values; *cpp; cpp++) - { - strcpy(hostKdc, *cpp); - - if ((pSemiCl = strchr(hostKdc, ':'))) - *pSemiCl = 0; - - if (admin) - { - if (*admin) - { - if (0 == stricmp(hostKdc, *admin)) - strcat(hostKdc, " admin server"); - } - } - - CString kdcHost = theSection; - kdcHost += " "; - kdcHost += hostKdc; - - krbCon.WriteString(kdcHost); - krbCon.WriteString("\n"); - } - - if (values) - pprofile_free_list(values); - - if (admin) - pprofile_free_list(admin); - } - - if ( m_newDnsKdcLookup ) - krbCon.WriteString(".KERBEROS.OPTION. dns\n"); - - krbCon. Close(); -#endif // NO_KRB4 - return TRUE; -} - -void CKrbRealmHostMaintenance::OnCancel() -{ - CHAR fileName[MAX_PATH]; - if (CLeashApp::GetProfileFile(fileName, sizeof(fileName))) - { - MessageBox("Can't locate Kerberos Five Config. file!", "Error", MB_OK); - return; - } - - - long retval = 0; - if (CLeashApp::m_krbv5_profile) - pprofile_abandon(CLeashApp::m_krbv5_profile); - - /* - if (retval) - { - MessageBox("OnButtonRealmHostAdd::There is an error, profile will not be abandon!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - return; - } - */ - - const char *filenames[2]; - filenames[0] = fileName; - filenames[1] = NULL; - retval = pprofile_init(filenames, &CLeashApp::m_krbv5_profile); - - if (retval) - { - MessageBox("OnButtonRealmHostAdd::There is an error, profile will not be initialized!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - return; - } - - - CPropertyPage::OnCancel(); -} - -void CKrbRealmHostMaintenance::OnCheckDnsKdcLookup() -{ - const char* dnsLookupKdc[] = {"libdefaults","dns_lookup_kdc",NULL}; - - m_newDnsKdcLookup = (BOOL)IsDlgButtonChecked(IDC_DNS_KDC); - - long retval = pprofile_clear_relation(CLeashApp::m_krbv5_profile, - dnsLookupKdc); - - if (retval && PROF_NO_RELATION != retval) - { - MessageBox("OnButtonAdminserver::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Error", MB_OK); - return; - } - - retval = pprofile_add_relation(CLeashApp::m_krbv5_profile, - dnsLookupKdc, - m_newDnsKdcLookup ? "true" : "false"); - - if (retval) - { // this might not be a good way to handle this type of error - MessageBox("OnButtonAdminserver::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Error", MB_OK); - return; - } - SetModified(TRUE); -} - -void CKrbRealmHostMaintenance::OnButtonRealmHostAdd() -{ - m_KDCRealmList.SetFocus(); - - CKrbAddRealm addToRealmHostList; - if (IDOK == addToRealmHostList.DoModal()) - { - char theSection[REALM_SZ + 1]; - const char* Section[] = {"realms", theSection, NULL}; - const char** section = Section; - - - if (!CLeashApp::m_krbv5_profile) { - CHAR confname[MAX_PATH]; - if (!CLeashApp::GetProfileFile(confname, sizeof(confname))) - { - const char *filenames[2]; - filenames[0] = confname; - filenames[1] = NULL; - pprofile_init(filenames, &CLeashApp::m_krbv5_profile); - } - } - - CString newRealm; // new section in the profile linklist - newRealm = addToRealmHostList.GetNewRealm(); - - if (LB_ERR != m_KDCRealmList.FindStringExact(-1, newRealm)) - { - MessageBox("We can't have duplicate Realms!\nYour entry was not saved to list.", - "Leash", MB_OK); - return; - } - - if (addToRealmHostList.GetNewRealm().IsEmpty()) - ASSERT(0); - - strcpy(theSection, newRealm); - long retval = pprofile_add_relation(CLeashApp::m_krbv5_profile, - section, NULL); - - if (retval) - { - MessageBox("OnButtonRealmHostAdd::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - return; - } - - if (LB_ERR == m_KDCRealmList.AddString(newRealm)) - ASSERT(0); - - if (LB_ERR == m_KDCRealmList.SetCurSel(m_KDCRealmList.FindStringExact(-1, newRealm))) - ASSERT(0); - - MessageBox("You must now add a Kerberos Host Server or Realm you just added will be removed!!!", - "Leash", MB_OK); - - m_KDCHostList.ResetContent(); - if (OnButtonKdchostAddInternal()) - { // Cancel - - long retval = pprofile_rename_section(CLeashApp::m_krbv5_profile, - section, NULL); - - if (retval) - { - MessageBox("OnButtonRealmHostRemove::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - return; - } - - if (LB_ERR == m_KDCRealmList.DeleteString(m_KDCRealmList.GetCurSel())) - ASSERT(0); - - m_KDCRealmList.SetCurSel(0); - } - - OnSelchangeListKdcRealm(); - SetModified(TRUE); - } - - if (1 >= m_KDCRealmList.GetCount()) - { - GetDlgItem(ID_BUTTON_REALM_REMOVE)->EnableWindow(FALSE); - } - else - { - GetDlgItem(ID_BUTTON_REALM_REMOVE)->EnableWindow(); - GetDlgItem(IDC_BUTTON_REALM_EDIT)->EnableWindow(); - } -} - -void CKrbRealmHostMaintenance::OnButtonKdchostAdd() -{ - OnButtonKdchostAddInternal(); -} - -bool CKrbRealmHostMaintenance::OnButtonKdchostAddInternal() -{ - CString newHost; // new section in the profile linklist - CKrbAddHostServer addHostServer; - if (IDOK == addHostServer.DoModal()) - { // OK - char theSection[MAX_HSTNM + 1]; - const char* Section[] = {"realms", theSection, "kdc", NULL}; - const char** section = Section; - - if (addHostServer.GetNewHost().IsEmpty()) - ASSERT(0); - - newHost = addHostServer.GetNewHost(); - - if (LB_ERR != m_KDCHostList.FindStringExact(-1, newHost)) - { - MessageBox("We can't have duplicate Host Servers for the same Realm!\ - \nYour entry was not saved to list.", - "Leash", MB_OK); - return true; - } - - m_KDCRealmList.GetText(m_KDCRealmList.GetCurSel(), theSection); - long retval = pprofile_add_relation(CLeashApp::m_krbv5_profile, - section, addHostServer.GetNewHost()); - - if (retval) - { - MessageBox("OnButtonKdchostAdd::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - - return true; - } - - if (LB_ERR == m_KDCHostList.AddString(newHost)) - ASSERT(0); - - SetModified(TRUE); - } - else - return true; - - if (m_KDCHostList.GetCount() > 1) - { - m_KDCHostList.SetCurSel(m_KDCHostList.FindStringExact(-1, newHost)); - m_KDCHostList.SetFocus(); - OnSelchangeListKdcHost(); - - GetDlgItem(IDC_BUTTON_KDCHOST_REMOVE)->EnableWindow(); - } - - if (1 == m_KDCRealmList.GetCount()) - { - GetDlgItem(IDC_BUTTON_KDCHOST_REMOVE)->EnableWindow(); - GetDlgItem(IDC_BUTTON_KDCHOST_EDIT)->EnableWindow(); - } - - return false; -} - -void CKrbRealmHostMaintenance::OnButtonRealmHostEdit() -{ - INT selItemIndex = m_KDCRealmList.GetCurSel(); - CString selItem; - - m_KDCHostList.SetFocus(); - //m_KDCRealmList.SetFocus(); - //m_KDCHostList.SetCurSel(0); - m_KDCRealmList.GetText(selItemIndex, selItem); - - CKrbEditRealm editRealmHostList(selItem); - - if (IDOK == editRealmHostList.DoModal()) - { - char theSection[REALM_SZ + 1]; - const char* Section[] = {"realms", theSection, NULL}; - const char** section = Section; - - CString editedRealm = editRealmHostList.GetEditedItem(); - - if (0 != editedRealm.CompareNoCase(selItem) && - LB_ERR != m_KDCRealmList.FindStringExact(-1, editedRealm)) - { - MessageBox("We can't have duplicate Realms!\nYour entry was not saved to list.", - "Leash", MB_OK); - return; - } - - strcpy(theSection, selItem); - - long retval = pprofile_rename_section(CLeashApp::m_krbv5_profile, - section, editRealmHostList.GetEditedItem()); - - if (retval) - { - MessageBox("OnButtonRealmHostEdit::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - return; - } - - m_KDCRealmList.DeleteString(selItemIndex); - m_KDCRealmList.AddString(editedRealm); - selItemIndex = m_KDCRealmList.FindStringExact(-1, editedRealm); - m_KDCRealmList.SetCurSel(selItemIndex); - - CKrbConfigOptions::ResetDefaultRealmComboBox(); - SetModified(TRUE); - } -} - -void CKrbRealmHostMaintenance::OnDblclkListKdcRealm() -{ - OnButtonRealmHostEdit(); -} - -void CKrbRealmHostMaintenance::OnButtonKdchostEdit() -{ - INT selItemIndex = m_KDCHostList.GetCurSel(); - CHAR OLD_VALUE[MAX_HSTNM + 1]; - CString editedHostServer; - CString _adminServer; - - m_KDCHostList.SetFocus(); - m_KDCHostList.GetText(selItemIndex, OLD_VALUE); - - LPSTR pOLD_VALUE = strchr(OLD_VALUE, ' '); - if (pOLD_VALUE) - { - *pOLD_VALUE = 0; - _adminServer = pOLD_VALUE + 1; - } - - CString selItem = OLD_VALUE; - CKrbEditHostServer editHostServerList(selItem); - - if (IDOK == editHostServerList.DoModal()) - { - char theSection[REALM_SZ + 1]; - const char* adminServer[] = {"realms", theSection, ADMIN_SERVER, NULL}; - const char* Section[] = {"realms", theSection, "kdc", NULL}; - const char** section = Section; - const char** adminServ = adminServer; - - editedHostServer = editHostServerList.GetEditedItem(); - - if (0 != editedHostServer.CompareNoCase(selItem) && - LB_ERR != m_KDCHostList.FindStringExact(-1, editedHostServer)) - { - MessageBox("We can't have duplicate Host Servers for the same Realm!\ - \nYour entry was not saved to list.", - "Leash", MB_OK); - return; - } - - m_KDCHostList.DeleteString(selItemIndex); - m_KDCRealmList.GetText(m_KDCRealmList.GetCurSel(), theSection); - - if (!_adminServer.IsEmpty()) - { // there is a admin_server - editedHostServer += " "; - editedHostServer += _adminServer; - - long retval = pprofile_update_relation(CLeashApp::m_krbv5_profile, - adminServ, OLD_VALUE, editHostServerList.GetEditedItem()); - if (retval) - { - MessageBox("OnButtonKdchostEdit::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - return; - } - } - - long retval = pprofile_update_relation(CLeashApp::m_krbv5_profile, - section, OLD_VALUE, editHostServerList.GetEditedItem()); - - if (retval) - { - MessageBox("OnButtonKdchostEdit::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - return; - } - - m_KDCHostList.InsertString(selItemIndex, editedHostServer); - m_KDCHostList.SetCurSel(selItemIndex); - - OnSelchangeListKdcHost(); - SetModified(TRUE); - } -} - -void CKrbRealmHostMaintenance::OnDblclkListKdcHost() -{ - OnButtonKdchostEdit(); -} - -void CKrbRealmHostMaintenance::OnButtonRealmHostRemove() -{ - char theSection[REALM_SZ + 1]; - const char* Section[] = {"realms", theSection, NULL}; - const char** section = Section; - - m_KDCRealmList.SetFocus(); - m_KDCRealmList.GetText(m_KDCRealmList.GetCurSel(), theSection); - - CString RealmMsg; - RealmMsg.Format("Your about to remove a Realm, \"%s\", and all it's dependents from the list!\n\nContinue?", - theSection); - - if (IDYES != AfxMessageBox(RealmMsg, MB_YESNO)) - return; - - long retval = pprofile_rename_section(CLeashApp::m_krbv5_profile, - section, NULL); - - if (retval) - { - MessageBox("OnButtonRealmHostRemove::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - return; - } - - INT curSel = m_KDCRealmList.GetCurSel(); - - if (LB_ERR == m_KDCRealmList.DeleteString(curSel)) - ASSERT(0);// Single Sel Listbox - - if (-1 == m_KDCRealmList.SetCurSel(curSel)) - m_KDCRealmList.SetCurSel(curSel - 1); - - SetModified(TRUE); - - if (!m_KDCRealmList.GetCount()) - { - GetDlgItem(IDC_BUTTON_REALM_EDIT)->EnableWindow(FALSE); - } - if (1 >= m_KDCRealmList.GetCount()) - { - OnSelchangeListKdcRealm(); - GetDlgItem(ID_BUTTON_REALM_REMOVE)->EnableWindow(FALSE); - } - else - OnSelchangeListKdcRealm(); -} - -void CKrbRealmHostMaintenance::OnButtonKdchostRemove() -{ - char theSection[REALM_SZ + 1]; - const char* adminServer[] = {"realms", theSection, ADMIN_SERVER, NULL}; - const char* Section[] = {"realms", theSection, "kdc", NULL}; - const char** section = Section; - const char** adminServ = adminServer; - CHAR OLD_VALUE[MAX_HSTNM + 1]; - CString serverHostMsg; - CString serverHost; - CString _adminServer; - - m_KDCHostList.GetText(m_KDCHostList.GetCurSel(), serverHost); - serverHostMsg.Format("Your about to remove Server \"%s\" from the list!\n\nContinue?", - serverHost); - - if (IDYES != AfxMessageBox(serverHostMsg, MB_YESNO)) - return; - - m_KDCRealmList.GetText(m_KDCRealmList.GetCurSel(), theSection); - INT curSel = m_KDCHostList.GetCurSel(); - m_KDCHostList.GetText(curSel, OLD_VALUE); - - LPSTR pOLD_VALUE = strchr(OLD_VALUE, ' '); - if (pOLD_VALUE) - { - *pOLD_VALUE = 0; - _adminServer = pOLD_VALUE + 1; - } - - long retval = pprofile_update_relation(CLeashApp::m_krbv5_profile, - section, OLD_VALUE, NULL); - if (retval) - { - MessageBox("OnButtonKdchostRemove::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Leash", MB_OK); - return; - } - - if (!_adminServer.IsEmpty()) - { // there is a admin_server - retval = pprofile_update_relation(CLeashApp::m_krbv5_profile, - adminServ, OLD_VALUE, NULL); - if (retval) - { - MessageBox("OnButtonKdchostRemove::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Error", MB_OK); - return; - } - } - - m_KDCHostList.DeleteString(curSel); - - if (-1 == m_KDCHostList.SetCurSel(curSel)) - m_KDCHostList.SetCurSel(curSel - 1); - - SetModified(TRUE); - - if (!m_KDCHostList.GetCount()) - { - GetDlgItem(IDC_BUTTON_KDCHOST_REMOVE)->EnableWindow(FALSE); - GetDlgItem(IDC_BUTTON_KDCHOST_EDIT)->EnableWindow(FALSE); - GetDlgItem(IDC_BUTTON_ADMINSERVER)->EnableWindow(FALSE); - GetDlgItem(IDC_BUTTON_REMOVE_ADMINSERVER)->EnableWindow(FALSE); - } - else if (m_KDCHostList.GetCount() <= 1) - GetDlgItem(IDC_BUTTON_KDCHOST_REMOVE)->EnableWindow(FALSE); - - OnSelchangeListKdcHost(); -} - -BOOL CKrbRealmHostMaintenance::PreTranslateMessage(MSG* pMsg) -{ - if (m_isStart) - { - OnSelchangeListKdcRealm(); - m_isStart = FALSE; - } - - return CPropertyPage::PreTranslateMessage(pMsg); -} - -void CKrbRealmHostMaintenance::OnSelchangeListKdcRealm() -{ - char theSection[REALM_SZ + 1]; - const char* adminServer[] = {"realms", theSection, ADMIN_SERVER, NULL}; - const char* Section[] = {"realms", theSection, "kdc", NULL}; //theSection - const char** section = Section; - const char** adminServ = adminServer; - char **values = NULL, - **adminValue = NULL, - **cpp = NULL; - - m_KDCRealmList.GetText(m_KDCRealmList.GetCurSel(), theSection); - - long retval = pprofile_get_values(CLeashApp::m_krbv5_profile, - section, &values); - - if (retval && PROF_NO_RELATION != retval) - { - MessageBox("OnSelchangeListKdcRealm::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Error", MB_OK); - return; - } - - m_KDCHostList.ResetContent(); - - if ( !retval && values ) { - retval = pprofile_get_values(CLeashApp::m_krbv5_profile, - adminServ, &adminValue); - - if (retval && PROF_NO_RELATION != retval) - { - MessageBox("OnSelchangeListKdcRealm::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Error", MB_OK); - return; - } - - m_theAdminServer = _T(""); - m_theAdminServerMarked = _T(""); - - for (cpp = values; *cpp; cpp++) - { - CString kdcHost = *cpp; - - if (adminValue && 0 == strcmp(*adminValue, *cpp)) - { - m_theAdminServer = kdcHost; - kdcHost += " "; - kdcHost += ADMIN_SERVER; - - m_theAdminServerMarked = kdcHost; - } - - if (LB_ERR == m_KDCHostList.AddString(kdcHost)) - { - MessageBox("OnSelchangeListKdcRealm::Can't add Realm to Listbox", - "Error", MB_OK); - } - } - - pprofile_free_list(values); - } else { - GetDlgItem(IDC_BUTTON_REALM_HOST_ADD)->EnableWindow(TRUE); - GetDlgItem(ID_BUTTON_REALM_REMOVE)->EnableWindow(FALSE); - GetDlgItem(IDC_BUTTON_REALM_EDIT)->EnableWindow(FALSE); - } - CKrbConfigOptions::ResetDefaultRealmComboBox(); - - GetDlgItem(IDC_BUTTON_KDCHOST_REMOVE)->EnableWindow(FALSE); - GetDlgItem(IDC_BUTTON_KDCHOST_EDIT)->EnableWindow(FALSE); -} - -void CKrbRealmHostMaintenance::OnSelchangeListKdcHost() -{ - CString adminServer; - m_KDCHostList.GetText(m_KDCHostList.GetCurSel(), adminServer); - - if (-1 != adminServer.Find(ADMIN_SERVER)) - { - GetDlgItem(IDC_BUTTON_ADMINSERVER)->EnableWindow(FALSE); - GetDlgItem(IDC_BUTTON_REMOVE_ADMINSERVER)->EnableWindow(); - } - else - { - GetDlgItem(IDC_BUTTON_ADMINSERVER)->EnableWindow(); - GetDlgItem(IDC_BUTTON_REMOVE_ADMINSERVER)->EnableWindow(FALSE); - } - - if (m_KDCHostList.GetCount() > 1) - GetDlgItem(IDC_BUTTON_KDCHOST_REMOVE)->EnableWindow(); - - GetDlgItem(IDC_BUTTON_KDCHOST_EDIT)->EnableWindow(); -} - -void CKrbRealmHostMaintenance::OnSetfocusListKdcRealm() -{ - GetDlgItem(IDC_BUTTON_ADMINSERVER)->EnableWindow(FALSE); - GetDlgItem(IDC_BUTTON_REMOVE_ADMINSERVER)->EnableWindow(FALSE); -} - -void CKrbRealmHostMaintenance::OnButtonAdminserver() -{ - // Install new admin.server in profile linklist - char theSection[REALM_SZ + 1]; - const char* Section[] = {"realms", theSection, ADMIN_SERVER, NULL}; - const char** section = Section; - - m_KDCHostList.SetFocus(); - INT index1 = m_KDCHostList.GetCurSel(); - INT index2 = m_KDCHostList.FindStringExact(-1, m_theAdminServerMarked); - - if (-1 != index2) - { - m_KDCHostList.DeleteString(index2); - if (LB_ERR == m_KDCHostList.InsertString(index2, m_theAdminServer)) - { - MessageBox("OnButtonAdminserver::Can't add to list!!!", - "Error, MB_OK"); - } - } - - CString makeAdmin; - m_KDCHostList.GetText(index1, makeAdmin); - m_KDCHostList.DeleteString(index1); - m_theAdminServer = makeAdmin; - makeAdmin += " "; - makeAdmin += ADMIN_SERVER; - m_theAdminServerMarked = makeAdmin; - - if (LB_ERR == m_KDCHostList.InsertString(index1, makeAdmin)) - { - MessageBox("OnButtonAdminserver::Can't add to list!!!", - "Error, MB_OK"); - } - - m_KDCHostList.SetCurSel(m_KDCHostList.FindStringExact(-1, makeAdmin)); //index2 -1); - GetDlgItem(IDC_BUTTON_ADMINSERVER)->EnableWindow(FALSE); - GetDlgItem(IDC_BUTTON_REMOVE_ADMINSERVER)->EnableWindow(); - - m_KDCRealmList.GetText(m_KDCRealmList.GetCurSel(), theSection); - - long retval = pprofile_clear_relation(CLeashApp::m_krbv5_profile, - section); - - if (retval && PROF_NO_RELATION != retval) - { - MessageBox("OnButtonAdminserver::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Error", MB_OK); - return; - } - - retval = pprofile_add_relation(CLeashApp::m_krbv5_profile, - section, m_theAdminServer); - - if (retval) - { // this might not be a good way to handle this type of error - MessageBox("OnButtonAdminserver::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Error", MB_OK); - return; - } - - SetModified(TRUE); -} - -void CKrbRealmHostMaintenance::OnButtonRemoveAdminserver() -{ - // Remove admin.server from profile linklist - char theSection[REALM_SZ + 1]; - const char* Section[] = {"realms", theSection, ADMIN_SERVER, NULL}; - const char** section = Section; - - m_KDCHostList.SetFocus(); - m_KDCRealmList.GetText(m_KDCRealmList.GetCurSel(), theSection); - - long retval = pprofile_clear_relation(CLeashApp::m_krbv5_profile, - section); - - if (retval) - { - MessageBox("OnButtonRemoveAdminserver::There is an error, profile will not be saved!!!\ - \nIf this error persist, contact your administrator.", - "Error", MB_OK); - return; - } - - INT index = m_KDCHostList.GetCurSel(); - m_KDCHostList.DeleteString(index); - - if (LB_ERR == m_KDCHostList.InsertString(index, m_theAdminServer)) - { - MessageBox("OnButtonRemoveAdminserver::Can't add to list!!!", - "Error, MB_OK"); - - - } - - m_theAdminServerMarked = m_theAdminServer; - m_KDCHostList.SetCurSel(m_KDCHostList.FindStringExact(-1, m_theAdminServer)); - GetDlgItem(IDC_BUTTON_ADMINSERVER)->EnableWindow(); - GetDlgItem(IDC_BUTTON_REMOVE_ADMINSERVER)->EnableWindow(FALSE); - - SetModified(TRUE); -} - - - -void CKrbRealmHostMaintenance::OnButtonRealmhostMaintHelp() -{ - MessageBox("No Help Available!", "Note", MB_OK); -} diff --git a/src/windows/leash/KrbRealmHostMaintenance.h b/src/windows/leash/KrbRealmHostMaintenance.h deleted file mode 100644 index c894e22a0a..0000000000 --- a/src/windows/leash/KrbRealmHostMaintenance.h +++ /dev/null @@ -1,102 +0,0 @@ -// ************************************************************************************** -// File: KrbRealmHostMaintenance.h -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. -// Description: H file for KrbRealmHostMaintenance.cpp. Contains variables and functions -// for Kerberos Four and Five Properties -// -// History: -// -// MM/DD/YY Inits Description of Change -// 12/02/98 ADL Original -// ************************************************************************************** - - -#if !defined(AFX_KRBREALMNAMEMAINTENANCE_H__2FE711C3_8E9A_11D2_94C5_0000861B8A3C__INCLUDED_) -#define AFX_KRBREALMNAMEMAINTENANCE_H__2FE711C3_8E9A_11D2_94C5_0000861B8A3C__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 - - -///////////////////////////////////////////////////////////////////////////// -// CKrbRealmHostMaintenance dialog - -#include "resource.h" -#include "CLeashDragListBox.h" - -#define MAXLINE 256 - -class CKrbRealmHostMaintenance : public CPropertyPage -{ -// Construction -private: - DECLARE_DYNCREATE(CKrbRealmHostMaintenance) - CHAR lineBuf[MAXLINE]; - CString m_theAdminServerMarked; - CString m_theAdminServer; - BOOL m_isRealmListBoxInFocus; - BOOL m_isStart; - BOOL m_initDnsKdcLookup; - BOOL m_newDnsKdcLookup; - - bool OnButtonKdchostAddInternal(); - - //void ResetDefaultRealmComboBox(); - -public: - //CKrbRealmHostMaintenance(CWnd* pParent = NULL); // standard constructor - CKrbRealmHostMaintenance(); - virtual ~CKrbRealmHostMaintenance(); - -// Dialog Data - //{{AFX_DATA(CKrbRealmHostMaintenance) - enum { IDD = IDD_KRB_REALMHOST_MAINT }; - CListBox m_KDCRealmList; - CLeashDragListBox m_KDCHostList; - //}}AFX_DATA - - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CKrbRealmHostMaintenance) - public: - virtual BOOL PreTranslateMessage(MSG* pMsg); - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL - - -// Implementation -protected: - - // Generated message map functions - //{{AFX_MSG(CKrbRealmHostMaintenance) - virtual BOOL OnInitDialog(); - virtual BOOL OnApply(); - virtual void OnCancel(); - afx_msg void OnButtonRealmHostAdd(); - afx_msg void OnButtonRealmHostEdit(); - afx_msg void OnButtonRealmHostRemove(); - afx_msg void OnSelchangeListKdcRealm(); - afx_msg void OnButtonAdminserver(); - afx_msg void OnSetfocusListKdcRealm(); - afx_msg void OnButtonKdchostAdd(); - afx_msg void OnButtonKdchostRemove(); - afx_msg void OnButtonRemoveAdminserver(); - afx_msg void OnSelchangeListKdcHost(); - afx_msg void OnButtonKdchostEdit(); - afx_msg void OnDblclkListKdcRealm(); - afx_msg void OnDblclkListKdcHost(); - afx_msg void OnButtonRealmhostMaintHelp(); - afx_msg void OnCheckDnsKdcLookup(); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() -}; - -//{{AFX_INSERT_LOCATION}} -// Microsoft Visual C++ will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_KRBREALMNAMEMAINTENANCE_H__2FE711C3_8E9A_11D2_94C5_0000861B8A3C__INCLUDED_) diff --git a/src/windows/leash/Leash.cpp b/src/windows/leash/Leash.cpp index f4e7493502..b342bbb65e 100644 --- a/src/windows/leash/Leash.cpp +++ b/src/windows/leash/Leash.cpp @@ -32,10 +32,6 @@ #include -#ifndef NO_AFS -#include "afscompat.h" -#endif - #include #include @@ -53,13 +49,8 @@ TicketInfoWrapper ticketinfo; HWND CLeashApp::m_hProgram = 0; HINSTANCE CLeashApp::m_hLeashDLL = 0; HINSTANCE CLeashApp::m_hComErr = 0; -////@#+Remove -#ifndef NO_KRB4 -HINSTANCE CLeashApp::m_hKrb4DLL = 0; -#endif HINSTANCE CLeashApp::m_hKrb5DLL = 0; HINSTANCE CLeashApp::m_hKrb5ProfileDLL= 0; -HINSTANCE CLeashApp::m_hAfsDLL = 0; HINSTANCE CLeashApp::m_hPsapi = 0; HINSTANCE CLeashApp::m_hToolHelp32 = 0; krb5_context CLeashApp::m_krbv5_context = 0; @@ -118,12 +109,8 @@ CLeashApp::~CLeashApp() CloseHandle(ticketinfo.lockObj); #endif AfxFreeLibrary(m_hLeashDLL); -#ifndef NO_KRB4 - AfxFreeLibrary(m_hKrb4DLL); -#endif AfxFreeLibrary(m_hKrb5DLL); AfxFreeLibrary(m_hKrb5ProfileDLL); - AfxFreeLibrary(m_hAfsDLL); AfxFreeLibrary(m_hPsapi); AfxFreeLibrary(m_hToolHelp32); AfxFreeLibrary(m_hKrbLSA); @@ -497,134 +484,35 @@ BOOL CLeashApp::InitInstance() // CLeashApp commands // leash functions -DECL_FUNC_PTR(not_an_API_LeashKRB4GetTickets); -DECL_FUNC_PTR(not_an_API_LeashAFSGetToken); -DECL_FUNC_PTR(not_an_API_LeashGetTimeServerName); DECL_FUNC_PTR(Leash_kdestroy); DECL_FUNC_PTR(Leash_changepwd_dlg); DECL_FUNC_PTR(Leash_changepwd_dlg_ex); DECL_FUNC_PTR(Leash_kinit_dlg); DECL_FUNC_PTR(Leash_kinit_dlg_ex); DECL_FUNC_PTR(Leash_timesync); -DECL_FUNC_PTR(Leash_get_default_lifetime); -DECL_FUNC_PTR(Leash_set_default_lifetime); -DECL_FUNC_PTR(Leash_get_default_forwardable); -DECL_FUNC_PTR(Leash_set_default_forwardable); -DECL_FUNC_PTR(Leash_get_default_renew_till); -DECL_FUNC_PTR(Leash_set_default_renew_till); -DECL_FUNC_PTR(Leash_get_default_noaddresses); -DECL_FUNC_PTR(Leash_set_default_noaddresses); -DECL_FUNC_PTR(Leash_get_default_proxiable); -DECL_FUNC_PTR(Leash_set_default_proxiable); -DECL_FUNC_PTR(Leash_get_default_publicip); -DECL_FUNC_PTR(Leash_set_default_publicip); -DECL_FUNC_PTR(Leash_get_default_use_krb4); -DECL_FUNC_PTR(Leash_set_default_use_krb4); -DECL_FUNC_PTR(Leash_get_default_life_min); -DECL_FUNC_PTR(Leash_set_default_life_min); -DECL_FUNC_PTR(Leash_get_default_life_max); -DECL_FUNC_PTR(Leash_set_default_life_max); -DECL_FUNC_PTR(Leash_get_default_renew_min); -DECL_FUNC_PTR(Leash_set_default_renew_min); -DECL_FUNC_PTR(Leash_get_default_renew_max); -DECL_FUNC_PTR(Leash_set_default_renew_max); -DECL_FUNC_PTR(Leash_get_default_renewable); -DECL_FUNC_PTR(Leash_set_default_renewable); -DECL_FUNC_PTR(Leash_get_lock_file_locations); -DECL_FUNC_PTR(Leash_set_lock_file_locations); DECL_FUNC_PTR(Leash_get_default_uppercaserealm); DECL_FUNC_PTR(Leash_set_default_uppercaserealm); DECL_FUNC_PTR(Leash_get_default_mslsa_import); -DECL_FUNC_PTR(Leash_set_default_mslsa_import); -DECL_FUNC_PTR(Leash_get_default_preserve_kinit_settings); -DECL_FUNC_PTR(Leash_set_default_preserve_kinit_settings); DECL_FUNC_PTR(Leash_import); DECL_FUNC_PTR(Leash_importable); DECL_FUNC_PTR(Leash_renew); -DECL_FUNC_PTR(Leash_reset_defaults); FUNC_INFO leash_fi[] = { - MAKE_FUNC_INFO(not_an_API_LeashKRB4GetTickets), - MAKE_FUNC_INFO(not_an_API_LeashAFSGetToken), - MAKE_FUNC_INFO(not_an_API_LeashGetTimeServerName), MAKE_FUNC_INFO(Leash_kdestroy), MAKE_FUNC_INFO(Leash_changepwd_dlg), MAKE_FUNC_INFO(Leash_changepwd_dlg_ex), MAKE_FUNC_INFO(Leash_kinit_dlg), MAKE_FUNC_INFO(Leash_kinit_dlg_ex), MAKE_FUNC_INFO(Leash_timesync), - MAKE_FUNC_INFO(Leash_get_default_lifetime), - MAKE_FUNC_INFO(Leash_set_default_lifetime), - MAKE_FUNC_INFO(Leash_get_default_renew_till), - MAKE_FUNC_INFO(Leash_set_default_renew_till), - MAKE_FUNC_INFO(Leash_get_default_forwardable), - MAKE_FUNC_INFO(Leash_set_default_forwardable), - MAKE_FUNC_INFO(Leash_get_default_noaddresses), - MAKE_FUNC_INFO(Leash_set_default_noaddresses), - MAKE_FUNC_INFO(Leash_get_default_proxiable), - MAKE_FUNC_INFO(Leash_set_default_proxiable), - MAKE_FUNC_INFO(Leash_get_default_publicip), - MAKE_FUNC_INFO(Leash_set_default_publicip), - MAKE_FUNC_INFO(Leash_get_default_use_krb4), - MAKE_FUNC_INFO(Leash_set_default_use_krb4), - MAKE_FUNC_INFO(Leash_get_default_life_min), - MAKE_FUNC_INFO(Leash_set_default_life_min), - MAKE_FUNC_INFO(Leash_get_default_life_max), - MAKE_FUNC_INFO(Leash_set_default_life_max), - MAKE_FUNC_INFO(Leash_get_default_renew_min), - MAKE_FUNC_INFO(Leash_set_default_renew_min), - MAKE_FUNC_INFO(Leash_get_default_renew_max), - MAKE_FUNC_INFO(Leash_set_default_renew_max), - MAKE_FUNC_INFO(Leash_get_default_renewable), - MAKE_FUNC_INFO(Leash_set_default_renewable), - MAKE_FUNC_INFO(Leash_get_lock_file_locations), - MAKE_FUNC_INFO(Leash_set_lock_file_locations), MAKE_FUNC_INFO(Leash_get_default_uppercaserealm), MAKE_FUNC_INFO(Leash_set_default_uppercaserealm), MAKE_FUNC_INFO(Leash_get_default_mslsa_import), - MAKE_FUNC_INFO(Leash_set_default_mslsa_import), - MAKE_FUNC_INFO(Leash_get_default_preserve_kinit_settings), - MAKE_FUNC_INFO(Leash_set_default_preserve_kinit_settings), MAKE_FUNC_INFO(Leash_import), MAKE_FUNC_INFO(Leash_importable), MAKE_FUNC_INFO(Leash_renew), - MAKE_FUNC_INFO(Leash_reset_defaults), END_FUNC_INFO }; -//// -#ifndef NO_KRB4 -// krb4 functions -DECL_FUNC_PTR(set_krb_debug); -DECL_FUNC_PTR(set_krb_ap_req_debug); -DECL_FUNC_PTR(krb_get_krbconf2); -DECL_FUNC_PTR(krb_get_krbrealm2); -DECL_FUNC_PTR(tkt_string); -DECL_FUNC_PTR(krb_set_tkt_string); -DECL_FUNC_PTR(krb_realmofhost); -DECL_FUNC_PTR(krb_get_lrealm); -DECL_FUNC_PTR(krb_get_krbhst); -DECL_FUNC_PTR(tf_init); -DECL_FUNC_PTR(tf_close); -DECL_FUNC_PTR(krb_get_tf_realm); - -FUNC_INFO krb4_fi[] = { - MAKE_FUNC_INFO(set_krb_debug), - MAKE_FUNC_INFO(set_krb_ap_req_debug), - MAKE_FUNC_INFO(krb_get_krbconf2), - MAKE_FUNC_INFO(krb_get_krbrealm2), - MAKE_FUNC_INFO(tkt_string), - MAKE_FUNC_INFO(krb_set_tkt_string), - MAKE_FUNC_INFO(krb_realmofhost), - MAKE_FUNC_INFO(krb_get_lrealm), - MAKE_FUNC_INFO(krb_get_krbhst), - MAKE_FUNC_INFO(tf_init), - MAKE_FUNC_INFO(tf_close), - MAKE_FUNC_INFO(krb_get_tf_realm), - END_FUNC_INFO -}; -#endif - // com_err funcitons DECL_FUNC_PTR(error_message); FUNC_INFO ce_fi[] = { @@ -783,18 +671,10 @@ FUNC_INFO profile_fi[] = { BOOL CLeashApp::InitDLLs() { m_hLeashDLL = AfxLoadLibrary(LEASHDLL); -#ifndef NO_KRB4 - m_hKrb4DLL = AfxLoadLibrary(KERB4DLL); -#endif m_hKrb5DLL = AfxLoadLibrary(KERB5DLL); m_hKrb5ProfileDLL = AfxLoadLibrary(KERB5_PPROFILE_DLL); m_hComErr = AfxLoadLibrary(COMERR_DLL); -#ifndef NO_AFS - afscompat_init(); - m_hAfsDLL = AfxLoadLibrary(AFSAuthentDLL()); -#endif - #define PSAPIDLL "psapi.dll" #define TOOLHELPDLL "kernel32.dll" @@ -824,19 +704,6 @@ BOOL CLeashApp::InitDLLs() "Error", MB_OK); return FALSE; } -//// -#ifndef NO_KRB4 - if (m_hKrb4DLL) - { - if (!LoadFuncs(KERB4DLL, krb4_fi, 0, 0, 1, 0, 0)) - { - MessageBox(hwnd, - "Unexpected error while loading " KERB4DLL ".\n" - "Kerberos 4 functionality will be disabled.\n", - "Error", MB_OK); - } - } -#endif if (m_hKrb5DLL) { @@ -943,7 +810,6 @@ BOOL CLeashApp::FirstInstance() void CLeashApp::ValidateConfigFiles() { - CStdioFile krbCon; char confname[257]; char realm[256]=""; @@ -953,8 +819,6 @@ CLeashApp::ValidateConfigFiles() return; if ( m_hKrb5DLL ) { - int krb_con_open = 0; - // Create the empty KRB5.INI file if (!GetProfileFile(confname,sizeof(confname))) { const char *filenames[2]; @@ -972,16 +836,6 @@ CLeashApp::ValidateConfigFiles() } - if ( !GetKrb4ConFile(confname,sizeof(confname)) ) { - if (!krbCon.Open(confname, CFile::modeNoTruncate | CFile::modeRead)) - { - if (krbCon.Open(confname, CFile::modeCreate | CFile::modeWrite)) - { - krb_con_open = 1; - } - } - } - const char* lookupKdc[] = {"libdefaults", "dns_lookup_kdc", NULL}; const char* lookupRealm[] = {"libdefaults", "dns_lookup_realm", NULL}; const char* defRealm[] = {"libdefaults", "default_realm", NULL}; @@ -1031,10 +885,6 @@ CLeashApp::ValidateConfigFiles() if ( domain[0] ) { strncpy(realm,domain,256); realm[255] = '\0'; - if ( krb_con_open ) { - krbCon.WriteString(realm); - krbCon.WriteString("\n"); - } strncat(realmkey,domain,256-strlen(realmkey)); realmkey[255] = '\0'; } @@ -1095,13 +945,6 @@ CLeashApp::ValidateConfigFiles() names, (const char *)p); - if ( krb_con_open ) { - krbCon.WriteString((const char *)subkey); - krbCon.WriteString("\t"); - krbCon.WriteString((const char *)p); - krbCon.WriteString("\n"); - } - p += strlen((char*)p) + 1; } free(lpszValue); @@ -1141,11 +984,6 @@ CLeashApp::ValidateConfigFiles() realm[krb5_princ_realm(ctx,me)->length] = '\0'; } - if ( krb_con_open ) { - krbCon.WriteString(realm); - krbCon.WriteString("\n"); - } - no_k5_realm: if ( me ) pkrb5_free_principal(ctx,me); @@ -1179,194 +1017,10 @@ CLeashApp::ValidateConfigFiles() pprofile_release(m_krbv5_profile); m_krbv5_profile = NULL; - // Close KRB.CON file - if ( krb_con_open ) { - krbCon.WriteString(".KERBEROS.OPTION. dns\n"); - krbCon.Close(); - } - - // Create the empty KRBREALM.CON file - if ( !GetKrb4RealmFile(confname,sizeof(confname)) ) { - if (!krbCon.Open(confname, CFile::modeNoTruncate | CFile::modeRead)) - { - if (krbCon.Open(confname, CFile::modeCreate | CFile::modeWrite)) - { - krbCon.Close(); - } - } else - krbCon.Close(); - } - } -//// -#ifndef NO_KRB4 - } else if ( m_hKrb4DLL ) { - if ( !realm[0] ) { - /* Open ticket file */ - char * file = ptkt_string(); - int k_errno; - - if (file != NULL && file[0]) { - if ((k_errno = ptf_init(file, R_TKT_FIL)) == KSUCCESS) { - /* Close ticket file */ - (void) ptf_close(); - - k_errno = pkrb_get_tf_realm(file, realm); - } - if (k_errno != KSUCCESS) { - k_errno = pkrb_get_lrealm(realm, 1); - } - } - } - - if ( !GetKrb4ConFile(confname,sizeof(confname)) ) { - if (!krbCon.Open(confname, CFile::modeNoTruncate | CFile::modeRead)) - { - if (krbCon.Open(confname, CFile::modeCreate | CFile::modeWrite)) - { - if ( realm[0] ) - krbCon.WriteString(realm); - krbCon.WriteString("\n.KERBEROS.OPTION. dns\n"); - krbCon.Close(); - } - } else - krbCon.Close(); - } - - if ( !GetKrb4RealmFile(confname,sizeof(confname)) ) { - if (!krbCon.Open(confname, CFile::modeNoTruncate | CFile::modeRead)) - { - if (krbCon.Open(confname, CFile::modeCreate | CFile::modeWrite)) - { - krbCon.Close(); - } - } else - krbCon.Close(); - } -#endif } } -////@#+Should this be just deleted or reworked? -BOOL -CLeashApp::GetKrb4ConFile( - LPSTR confname, - UINT szConfname - ) -{ - if (m_hKrb5DLL -//// -#ifndef NO_KRB4 - && !m_hKrb4DLL -#endif - ) - { // hold krb.con where krb5.ini is located - CHAR krbConFile[MAX_PATH]=""; - //strcpy(krbConFile, CLeashApp::m_krbv5_profile->first_file->filename); - if (GetProfileFile(krbConFile, sizeof(krbConFile))) - { - GetWindowsDirectory(krbConFile,sizeof(krbConFile)); - krbConFile[MAX_PATH-1] = '\0'; - strncat(krbConFile,"\\KRB5.INI",sizeof(krbConFile)-strlen(krbConFile)-1); - krbConFile[MAX_PATH-1] = '\0'; - } - - LPSTR pFind = strrchr(krbConFile, '\\'); - if (pFind) - { - *pFind = 0; - strncat(krbConFile, "\\",MAX_PATH-1); - krbConFile[MAX_PATH-1] = '\0'; - strncat(krbConFile, KRB_FILE,MAX_PATH-1); - krbConFile[MAX_PATH-1] = '\0'; - } - else - ASSERT(0); - - strncpy(confname, krbConFile, szConfname); - confname[szConfname-1] = '\0'; - } -//// -#ifndef NO_KRB4 - else if (m_hKrb4DLL) - { - unsigned int size = szConfname; - memset(confname, '\0', szConfname); - if (!pkrb_get_krbconf2(confname, &size)) - { // Error has happened - GetWindowsDirectory(confname,szConfname); - confname[szConfname-1] = '\0'; - strncat(confname, "\\",szConfname); - confname[szConfname-1] = '\0'; - strncat(confname,KRB_FILE,szConfname); - confname[szConfname-1] = '\0'; - } - } -#endif - - return FALSE; -} - -BOOL -CLeashApp::GetKrb4RealmFile( - LPSTR confname, - UINT szConfname - ) -{ - if (m_hKrb5DLL -//// -#ifndef NO_KRB4 - && !m_hKrb4DLL -#endif - ) - { // hold krb.con where krb5.ini is located - CHAR krbRealmConFile[MAX_PATH]; - //strcpy(krbRealmConFile, CLeashApp::m_krbv5_profile->first_file->filename); - if (GetProfileFile(krbRealmConFile, sizeof(krbRealmConFile))) - { - GetWindowsDirectory(krbRealmConFile,sizeof(krbRealmConFile)); - krbRealmConFile[MAX_PATH-1] = '\0'; - strncat(krbRealmConFile,"\\KRB5.INI",sizeof(krbRealmConFile)-strlen(krbRealmConFile)); - krbRealmConFile[MAX_PATH-1] = '\0'; - } - - LPSTR pFind = strrchr(krbRealmConFile, '\\'); - if (pFind) - { - *pFind = 0; - strncat(krbRealmConFile, "\\",MAX_PATH-1-strlen(krbRealmConFile)); - krbRealmConFile[MAX_PATH-1] = '\0'; - strncat(krbRealmConFile, KRBREALM_FILE,MAX_PATH-1-strlen(krbRealmConFile)); - krbRealmConFile[MAX_PATH-1] = '\0'; - } - else - ASSERT(0); - - strncpy(confname, krbRealmConFile, szConfname); - confname[szConfname-1] = '\0'; - } -//// -#ifndef NO_KRB4 - else if (m_hKrb4DLL) - { - unsigned int size = szConfname; - memset(confname, '\0', szConfname); - if (!pkrb_get_krbrealm2(confname, &size)) - { - GetWindowsDirectory(confname,szConfname); - confname[szConfname-1] = '\0'; - strncat(confname, "\\",szConfname-strlen(confname)); - confname[szConfname-1] = '\0'; - strncat(confname,KRBREALM_FILE,szConfname-strlen(confname)); - confname[szConfname-1] = '\0'; - return TRUE; - } - } -#endif - - return FALSE; -} - BOOL CLeashApp::GetProfileFile( LPSTR confname, diff --git a/src/windows/leash/Leash.h b/src/windows/leash/Leash.h index 6d5f815a9f..c2b5f1665a 100644 --- a/src/windows/leash/Leash.h +++ b/src/windows/leash/Leash.h @@ -39,8 +39,6 @@ #define HID_DESTROY_TICKETS_ON_EXIT 98321 #define HID_UPPERCASE_REALM_OPTION 98323 #define HID_RESET_WINDOW_OPTION 98326 -#define HID_AFS_PROPERTIES_COMMAND 98327 -#define HID_KRB4_PROPERTIES_COMMAND 98329 #define HID_KRB5_PROPERTIES_COMMAND 98330 #define HID_LEASH_PROPERTIES_COMMAND 98331 #define HID_LOW_TICKET_ALARM_OPTION 98334 @@ -56,7 +54,6 @@ #define HID_LEASH_COMMANDS 131200 #define HID_ABOUT_LEASH32_MODULES 131225 #define HID_DEBUG_WINDOW 131229 -#define HID_KRB4_PROPERTIES_EDIT 131232 #define HID_KERBEROS_PROPERTIES_EDIT 131233 #define HID_LEASH_PROPERTIES_EDIT 131239 #define HID_KRB5_PROPERTIES_FORWARDING 131240 @@ -108,12 +105,8 @@ public: static HINSTANCE m_hLeashDLL; static HINSTANCE m_hComErr; //// -#ifndef NO_KRB4 - static HINSTANCE m_hKrb4DLL; -#endif static HINSTANCE m_hKrb5DLL; static HINSTANCE m_hKrb5ProfileDLL; - static HINSTANCE m_hAfsDLL; static HINSTANCE m_hPsapi; static HINSTANCE m_hToolHelp32; static krb5_context m_krbv5_context; @@ -126,8 +119,6 @@ public: virtual ~CLeashApp(); static BOOL GetProfileFile(LPSTR confname, UINT szConfname); - static BOOL GetKrb4ConFile(LPSTR confname, UINT szConfname); - static BOOL GetKrb4RealmFile(LPSTR confname, UINT szConfname); static void ValidateConfigFiles(); static void ObtainTicketsViaUserIfNeeded(HWND hWnd); static DWORD GetNumOfIpAddrs(void); diff --git a/src/windows/leash/Leash.rc b/src/windows/leash/Leash.rc index 798e629693..2359a8d978 100644 --- a/src/windows/leash/Leash.rc +++ b/src/windows/leash/Leash.rc @@ -178,11 +178,6 @@ BEGIN "Z", ID_EDIT_UNDO, VIRTKEY, CONTROL, NOINVERT END -IDD_KRB4_DOMAINREALM_MAINT ACCELERATORS -BEGIN - "F", ID_BUTTON_HOSTNAME_REMOVE, VIRTKEY, CONTROL, NOINVERT -END - ///////////////////////////////////////////////////////////////////////////// // @@ -202,7 +197,7 @@ BEGIN CONTROL "Tree1",IDC_TREEVIEW,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_DISABLEDRAGDROP | TVS_INFOTIP | WS_HSCROLL | WS_TABSTOP,0,19,164,13 - LTEXT "Your Kerberos Tickets and AFS Tokens (Issued/Expires/[Renew]/Principal)", + LTEXT "Your Kerberos Tickets (Issued/Expires/[Renew]/Principal)", IDC_LABEL_KERB_TICKETS,6,5,280,12 CONTROL "",IDC_LEASH_MAINVIEW,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,0,43,347,88 @@ -259,30 +254,6 @@ BEGIN CTEXT "Leash Warning Here!!!",IDC_LEASH_WARNING_MSG,0,7,257,27 END -IDD_KRB4_PROP_LOCATION DIALOG 0, 0, 316, 191 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Client File Location" -FONT 8, "MS Sans Serif" -BEGIN - EDITTEXT IDC_EDIT_TICKET_FILE,64,24,239,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_KRB_LOC,64,110,203,12,ES_AUTOHSCROLL | WS_GROUP - PUSHBUTTON "Browse",IDC_BUTTON_KRB_BROWSE,271,109,31,14,WS_GROUP - PUSHBUTTON "Browse",IDC_BUTTON_KRBREALM_BROWSE,271,129,32,14, - WS_GROUP - LTEXT "Name:",IDC_STATIC_TICKET_FILEPATH,34,25,22,8 - GROUPBOX "Configuration File(s) Path",IDC_STATIC_CONFIG_FILES,7, - 92,301,93 - GROUPBOX "Ticket File",IDC_STATIC_TICKETFILE,7,8,301,71 - LTEXT "Config.:",IDC_STATIC_KRBCON,31,110,25,8 - LTEXT "Ticket file name is set in your computer's environment!\nTo edit, remove it from the environment.", - IDC_STATIC_TXT,12,54,283,19 - LTEXT "One or more Configuration file locations are set in your computer's environment!\nTo edit, remove all of them from the environment.", - IDC_STATIC_CONFILES,12,160,284,19 - EDITTEXT IDC_EDIT_KRBREALM_LOC,64,130,203,12,ES_AUTOHSCROLL | - WS_GROUP - LTEXT "Realms:",IDC_STATIC_KRBREALMS,30,130,26,8 -END - IDD_KRB_PROP_CONTENT DIALOG 0, 0, 314, 172 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Default Realm Configuration" @@ -315,36 +286,6 @@ BEGIN GROUPBOX "",stc32,7,7,227,98,NOT WS_VISIBLE END -IDD_LEASH_PROPERTIES DIALOGEX 0, 0, 305, 166 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Leash Properties" -FONT 8, "MS Sans Serif", 0, 0, 0x0 -BEGIN - EDITTEXT IDC_EDIT_TIME_SERVER,59,22,233,12,ES_AUTOHSCROLL - PUSHBUTTON "&Help",IDC_BUTTON_LEASHINI_HELP2,138,145,50,14 - DEFPUSHBUTTON "&OK",IDOK,242,145,50,14 - PUSHBUTTON "&Cancel",IDCANCEL,190,145,50,14 - LTEXT "Name:",IDC_STATIC_TIMESERVER,31,23,22,8 - GROUPBOX "Time Server",IDC_STATIC_OPTIONS,7,7,291,45 - LTEXT "Time server name is set in your computer's environment!\nTo edit, remove it from the environment.", - IDC_STATIC_TIMEHOST,31,22,201,21 - CONTROL "Create Configuration Files &Missing at Startup", - IDC_CHECK_CREATE_MISSING_CFG,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,15,105,244,10 - PUSHBUTTON "&Restore Leash Defaults",IDC_RESET_DEFAULTS,31,126,243, - 14 - GROUPBOX "Miscellaneous Options",IDC_GROUP_LEASH_MISC,7,95,291,29 - GROUPBOX "Automatic MSLSA Ticket Importation",IDC_STATIC,7,52,291, - 40 - CONTROL "Never",IDC_RADIO_MSLSA_IMPORT_OFF,"Button", - BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,16,70,35,10 - CONTROL "Always",IDC_RADIO_MSLSA_IMPORT_ON,"Button", - BS_AUTORADIOBUTTON | WS_TABSTOP,62,70,48,10 - CONTROL "When MSLSA Principal matches Default Realm", - IDC_RADIO_MSLSA_IMPORT_MATCH,"Button",BS_AUTORADIOBUTTON | - WS_TABSTOP,116,71,165,10 -END - IDD_KRB5_PROP_CONTENT DIALOG 0, 0, 321, 126 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Configuration Options" @@ -407,19 +348,6 @@ BEGIN BS_AUTOCHECKBOX | WS_TABSTOP,169,158,131,10 END -IDD_KRB4_DOMAINREALM_MAINT DIALOG 0, 0, 313, 213 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Domain-Host/Realm Maintenance" -FONT 8, "MS Sans Serif" -BEGIN - LISTBOX IDC_LIST_DOMAINREALM,7,7,299,174,LBS_NOINTEGRALHEIGHT | - WS_VSCROLL | WS_TABSTOP - DEFPUSHBUTTON "&Add",IDC_BUTTON_REALM_HOST_ADD,52,192,50,14 - PUSHBUTTON "&Remove",ID_BUTTON_REALM_HOST_REMOVE,106,192,50,14 - PUSHBUTTON "&Edit",IDC_BUTTON_REALM_HOST_EDIT,160,192,50,14 - PUSHBUTTON "&Help",IDC_BUTTON_HOSTMAINT_HELP,214,192,50,14 -END - IDD_KRB_ADD_REALM DIALOG 0, 0, 295, 94 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Add a Kerberos Realm" @@ -448,34 +376,6 @@ BEGIN IDC_STATIC_NOTE,11,15,267,8 END -IDD_KRB4_ADD_DOMAINREALMNAME DIALOG 0, 0, 295, 89 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Add Your Domain-Host/Kerberos Realm Names to List" -FONT 8, "MS Sans Serif" -BEGIN - EDITTEXT IDC_EDIT_DOMAINHOSTNAME,75,15,208,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_DOMAINREALMNAME,75,32,208,12,ES_UPPERCASE | - ES_AUTOHSCROLL - PUSHBUTTON "&OK",IDOK,232,62,50,14 - PUSHBUTTON "&Cancel",IDCANCEL,179,62,50,14 - LTEXT "Domain or Host: ",IDC_STATIC_DEFAULT_REALM,12,17,58,8 - LTEXT "Kerberos Realm:",IDC_STATIC_REALM_HOSTNAME,17,34,53,8 -END - -IDD_KRB4_EDIT_DOMAINREALMNAME DIALOG 0, 0, 295, 89 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Edit Your Domain-Host/Kerberos Realm Names to List" -FONT 8, "MS Sans Serif" -BEGIN - EDITTEXT IDC_EDIT_DOMAINHOST,75,15,208,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_REALMNAME,75,32,208,12,ES_UPPERCASE | - ES_AUTOHSCROLL - PUSHBUTTON "&OK",IDOK,232,62,50,14 - PUSHBUTTON "&Cancel",IDCANCEL,179,62,50,14 - LTEXT "Domain or Host: ",IDC_STATIC_DEFAULT_REALM,12,17,58,8 - LTEXT "Kerberos Realm:",IDC_STATIC_REALM_HOSTNAME,17,34,53,8 -END - IDD_KRB_ADD_KDC_HOSTSERVER DIALOG 0, 0, 295, 94 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Add a Kerberos Host Server" @@ -502,57 +402,6 @@ BEGIN IDC_STATIC_NOTE,11,15,267,8 END -IDD_KRB4_REALMHOST_MAINT2 DIALOG 0, 0, 313, 214 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Realm/Host Maintenance" -FONT 8, "MS Sans Serif" -BEGIN - DEFPUSHBUTTON "&Add",IDC_BUTTON_KRB4_REALM_HOST_ADD,53,161,50,14 - PUSHBUTTON "&Remove",ID_BUTTON_KRB4_REALM_HOST_REMOVE,107,161,50,14 - PUSHBUTTON "&Edit",IDC_BUTTON_KRB4_REALM_HOST_EDIT,161,161,50,14 - PUSHBUTTON "&Help",IDC_BUTTON_REALMHOST_MAINT_HELP2,214,161,50,14 - LISTBOX IDC_LIST_REMOVE_HOST,7,7,299,149,LBS_NOINTEGRALHEIGHT | - WS_VSCROLL | WS_TABSTOP - CONTROL "Use DNS KDC Lookup",IDC_KRB4_DNS_KDC,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,18,186,89,10 -END - -IDD_KRB4_EDIT_REALM DIALOG 0, 0, 296, 113 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Edit Kerberos Realm/Kerberos Host Names" -FONT 8, "MS Sans Serif" -BEGIN - EDITTEXT IDC_EDIT_DEFAULT_REALM,70,23,213,12,ES_UPPERCASE | - ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_REALM_HOSTNAME,70,41,213,12,ES_AUTOHSCROLL - CONTROL "Has Administrative Server",IDC_RADIO_ADMIN_SERVER, - "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,50,61,96,12 - CONTROL "No Administrative Server",IDC_RADIO_NO_ADMIN_SERVER, - "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,154,61,92,12 - PUSHBUTTON "&OK",IDOK,233,86,50,14 - PUSHBUTTON "&Cancel",IDCANCEL,181,86,50,14 - LTEXT "Kerberos Realm:",IDC_STATIC_DEFAULT_REALM,11,25,53,8 - LTEXT "Kerberos Host:",IDC_STATIC_REALM_HOSTNAME,16,43,48,8 -END - -IDD_KRB4_ADD_REALM DIALOG 0, 0, 296, 113 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Add Kerberos Realm/Kerberos Host Names" -FONT 8, "MS Sans Serif" -BEGIN - EDITTEXT IDC_EDIT_DEFAULT_REALM,70,23,213,12,ES_UPPERCASE | - ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_REALM_HOSTNAME,70,41,213,12,ES_AUTOHSCROLL - CONTROL "Has Administrative Server",IDC_RADIO_ADMIN_SERVER, - "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,50,61,95,12 - CONTROL "No Administrative Server",IDC_RADIO_NO_ADMIN_SERVER, - "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,154,61,92,12 - PUSHBUTTON "&OK",IDOK,232,86,50,14 - PUSHBUTTON "&Cancel",IDCANCEL,179,86,50,14 - LTEXT "Kerberos Realm:",IDC_STATIC_DEFAULT_REALM,11,25,53,8 - LTEXT "Kerberos Host:",IDC_STATIC_REALM_HOSTNAME,16,43,48,8 -END - IDD_KRB_DOMAINREALM_MAINT DIALOG 0, 0, 314, 213 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "DNS / Realm Mapping" @@ -565,21 +414,6 @@ BEGIN PUSHBUTTON "&Edit",IDC_BUTTON_HOST_EDIT,185,192,50,14 END -IDD_AFS_PROPERTIES DIALOG 0, 0, 290, 68 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "AFS Properties" -FONT 8, "MS Sans Serif" -BEGIN - CONTROL "AFS Enabled",IDC_RADIO_AFS_ENABLED,"Button", - BS_AUTORADIOBUTTON,12,19,59,10 - CONTROL "AFS Disabled",IDC_RADIO_AFS_DISABLED,"Button", - BS_AUTORADIOBUTTON,80,19,59,10 - PUSHBUTTON "AFS Properties",IDC_BUTTON_AFS_PROPERTIES,11,47,70,14 - DEFPUSHBUTTON "&OK",IDOK,227,47,50,14 - PUSHBUTTON "&Cancel",IDCANCEL,173,47,50,14 - PUSHBUTTON "&Help",IDC_BUTTON_LEASHINI_HELP2,119,47,50,14 -END - IDD_KRB_PROP_MISC DIALOGEX 0, 0, 314, 215 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Ticket Lifetime and Other Initialization Options" @@ -653,8 +487,6 @@ BEGIN LTEXT "h",IDC_STATIC,230,26,8,8 LTEXT "m",IDC_STATIC,267,26,8,8 GROUPBOX "Ticket Initialization Options",IDC_STATIC,7,151,300,59 - CONTROL "Request Kerberos 4 Tickets",IDC_CHECK_REQUEST_KRB4, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,167,203,10 CONTROL "Preserve Ticket Initialization Dialog Options", IDC_CHECK_PRESERVE_KINIT_OPTIONS,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,20,182,208,10 @@ -696,14 +528,6 @@ BEGIN BEGIN END - IDD_KRB4_PROP_LOCATION, DIALOG - BEGIN - LEFTMARGIN, 6 - RIGHTMARGIN, 307 - TOPMARGIN, 6 - BOTTOMMARGIN, 184 - END - IDD_KRB_PROP_CONTENT, DIALOG BEGIN LEFTMARGIN, 7 @@ -720,14 +544,6 @@ BEGIN BOTTOMMARGIN, 105 END - IDD_LEASH_PROPERTIES, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 298 - TOPMARGIN, 7 - BOTTOMMARGIN, 159 - END - IDD_KRB5_PROP_CONTENT, DIALOG BEGIN LEFTMARGIN, 7 @@ -753,14 +569,6 @@ BEGIN BOTTOMMARGIN, 206 END - IDD_KRB4_DOMAINREALM_MAINT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 306 - TOPMARGIN, 7 - BOTTOMMARGIN, 206 - END - IDD_KRB_ADD_REALM, DIALOG BEGIN LEFTMARGIN, 7 @@ -777,22 +585,6 @@ BEGIN BOTTOMMARGIN, 87 END - IDD_KRB4_ADD_DOMAINREALMNAME, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 288 - TOPMARGIN, 7 - BOTTOMMARGIN, 82 - END - - IDD_KRB4_EDIT_DOMAINREALMNAME, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 288 - TOPMARGIN, 7 - BOTTOMMARGIN, 82 - END - IDD_KRB_ADD_KDC_HOSTSERVER, DIALOG BEGIN LEFTMARGIN, 7 @@ -809,30 +601,6 @@ BEGIN BOTTOMMARGIN, 87 END - IDD_KRB4_REALMHOST_MAINT2, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 306 - TOPMARGIN, 7 - BOTTOMMARGIN, 206 - END - - IDD_KRB4_EDIT_REALM, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 289 - TOPMARGIN, 7 - BOTTOMMARGIN, 106 - END - - IDD_KRB4_ADD_REALM, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 289 - TOPMARGIN, 7 - BOTTOMMARGIN, 106 - END - IDD_KRB_DOMAINREALM_MAINT, DIALOG BEGIN LEFTMARGIN, 7 @@ -841,14 +609,6 @@ BEGIN BOTTOMMARGIN, 206 END - IDD_AFS_PROPERTIES, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 283 - TOPMARGIN, 7 - BOTTOMMARGIN, 61 - END - IDD_KRB_PROP_MISC, DIALOG BEGIN LEFTMARGIN, 7 @@ -957,7 +717,6 @@ BEGIN ID_OPTIONS_RESETWINDOWSIZE "Puts Leash's main window back to it's default size " ID_RESET_WINDOW_SIZE "Refresh Leash window to it's default size/position" - ID_AFS_CONTROL_PANEL "Enables you to change settings" ID_SYSTEM_CONTROL_PANEL "Open your System Properties window" ID_OPTIONS_LOWTICKETALARMSOUND "Turn alarm off or on, when ticket time is low" diff --git a/src/windows/leash/LeashAboutBox.cpp b/src/windows/leash/LeashAboutBox.cpp index d5c6be24bb..8c621c3509 100644 --- a/src/windows/leash/LeashAboutBox.cpp +++ b/src/windows/leash/LeashAboutBox.cpp @@ -327,22 +327,9 @@ void CLeashAboutBox::OnNotLoadedModules() { m_LB_DLLsLoaded.ResetContent(); -#ifndef NO_KRB4 - if (!CLeashApp::m_hKrb4DLL) - m_LB_DLLsLoaded.AddString(KERB4DLL); -#endif - if (!CLeashApp::m_hKrb5DLL) m_LB_DLLsLoaded.AddString(KERB5DLL); - // NOTE: If the snippet below is commented back in, - // it should read - // if (!CLeashApp::m_hAfsDLL) - // m_LB_DLLsLoaded.AddString(AFSAuthentDLL()); - - //if (!CLeashApp::m_hAfsDLL) - //m_LB_DLLsLoaded.AddString(ASFDLL); - HighlightFirstItem(); } diff --git a/src/windows/leash/LeashFileDialog.cpp b/src/windows/leash/LeashFileDialog.cpp deleted file mode 100644 index 7e45f42118..0000000000 --- a/src/windows/leash/LeashFileDialog.cpp +++ /dev/null @@ -1,75 +0,0 @@ -// ************************************************************************************** -// File: LeashFileDialog.cpp -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. -// Description: CPP file for LeashFileDialog.h. Contains variables and functions -// for the Leash File Dialog Box -// -// History: -// -// MM/DD/YY Inits Description of Change -// 12/02/98 ADL Original -// ************************************************************************************** - - -#include "stdafx.h" -#include "leash.h" -#include "LeashFileDialog.h" - -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif - -///////////////////////////////////////////////////////////////////////////// -// CLeashFileDialog - -IMPLEMENT_DYNAMIC(CLeashFileDialog, CFileDialog) - - - -CLeashFileDialog::CLeashFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName, - LPCTSTR lpszFilter, DWORD dwFlags, CWnd* pParentWnd) : - CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd) -{ - m_ofn.Flags |= OFN_ENABLETEMPLATE; - m_ofn.lpTemplateName = MAKEINTRESOURCE(IDD_FILESPECIAL); - m_ofn.lpstrFilter = lpszFilter; - m_ofn.lpstrFileTitle = m_lpstrFileTitle; - m_ofn.nMaxFileTitle = MAX_PATH; - *m_lpstrFileTitle = 0; - BOOL m_startup = TRUE; -} - - -BEGIN_MESSAGE_MAP(CLeashFileDialog, CFileDialog) - //{{AFX_MSG_MAP(CLeashFileDialog) - //}}AFX_MSG_MAP -END_MESSAGE_MAP() - - -BOOL CLeashFileDialog::OnInitDialog() -{ - BOOL bRet = CFileDialog::OnInitDialog(); - if (bRet == TRUE) - { - GetParent()->GetDlgItem(IDOK)->SetWindowText("&OK"); - //GetParent()->GetDlgItem(IDOK)->EnableWindow(FALSE); - } - - return bRet; -} - -void CLeashFileDialog::OnFileNameChange( ) -{ - if (!m_startup) - { //' keeps the OK button disabled until a real select is made - CString testString = GetFileName(); - if (-1 == testString.Find('*')) - GetParent()->GetDlgItem(IDOK)->EnableWindow(); - } - else - m_startup = FALSE; -} diff --git a/src/windows/leash/LeashFileDialog.h b/src/windows/leash/LeashFileDialog.h deleted file mode 100644 index aef156d355..0000000000 --- a/src/windows/leash/LeashFileDialog.h +++ /dev/null @@ -1,57 +0,0 @@ -// ************************************************************************************** -// File: LeashFileDialog.h -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. -// Description: H file for LeashFileDialog.cpp. Contains variables and functions -// for the Leash File Dialog Box -// -// History: -// -// MM/DD/YY Inits Description of Change -// 12/02/98 ADL Original -// ************************************************************************************** - - -#if !defined(AFX_LEASHFILEDIALOG_H__E74500E1_6B74_11D2_9448_0000861B8A3C__INCLUDED_) -#define AFX_LEASHFILEDIALOG_H__E74500E1_6B74_11D2_9448_0000861B8A3C__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 -// LeashFileDialog.h : header file -// - -///////////////////////////////////////////////////////////////////////////// -// CLeashFileDialog dialog - -class CLeashFileDialog : public CFileDialog -{ - DECLARE_DYNAMIC(CLeashFileDialog) - -private: - CHAR m_lpstrFileTitle[MAX_PATH]; - BOOL m_startup; - -public: - CLeashFileDialog(BOOL bOpenFileDialog, // TRUE for FileOpen, FALSE for FileSaveAs - LPCTSTR lpszDefExt = NULL, - LPCTSTR lpszFileName = NULL, - LPCTSTR lpszFilter = NULL, - DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_FILEMUSTEXIST, - CWnd* pParentWnd = NULL); - - CString GetSelectedFileName() {return m_lpstrFileTitle;} - -protected: - //{{AFX_MSG(CLeashFileDialog) - virtual BOOL OnInitDialog(); - virtual void OnFileNameChange( ); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() -}; - -//{{AFX_INSERT_LOCATION}} -// Microsoft Visual C++ will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_LEASHFILEDIALOG_H__E74500E1_6B74_11D2_9448_0000861B8A3C__INCLUDED_) diff --git a/src/windows/leash/LeashProperties.cpp b/src/windows/leash/LeashProperties.cpp deleted file mode 100644 index 2854231739..0000000000 --- a/src/windows/leash/LeashProperties.cpp +++ /dev/null @@ -1,202 +0,0 @@ -// ************************************************************************************** -// File: LeashProperties.cpp -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. -// Description: CPP file for LeashProperties.h. Contains variables and functions -// for the Leash Properties Dialog Box -// -// History: -// -// MM/DD/YY Inits Description of Change -// 12/02/98 ADL Original -// ************************************************************************************** - -#include "stdafx.h" -#include "leash.h" -#include "LeashProperties.h" -#include "LeashMessageBox.h" -#include -#include "lglobals.h" -#include "reminder.h" - -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif - -///////////////////////////////////////////////////////////////////////////// -// CLeashProperties dialog - -char CLeashProperties::timeServer[255] = {NULL}; - -CLeashProperties::CLeashProperties(CWnd* pParent /*=NULL*/) - : CDialog(CLeashProperties::IDD, pParent) -{ - m_initMissingFiles = m_newMissingFiles = 0; - dw_initMslsaImport = dw_newMslsaImport = 0; - - //{{AFX_DATA_INIT(CLeashProperties) - // NOTE: the ClassWizard will add member initialization here - //}}AFX_DATA_INIT -} - - -void CLeashProperties::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); - //{{AFX_DATA_MAP(CLeashProperties) - // NOTE: the ClassWizard will add DDX and DDV calls here - //}}AFX_DATA_MAP -} - - -BEGIN_MESSAGE_MAP(CLeashProperties, CDialog) - //{{AFX_MSG_MAP(CLeashProperties) - ON_BN_CLICKED(IDC_BUTTON_LEASHINI_HELP2, OnHelp) - ON_BN_CLICKED(IDC_CHECK_CREATE_MISSING_CFG, OnCheckMissingCfg) - ON_BN_CLICKED(IDC_RESET_DEFAULTS, OnButtonResetDefaults) - ON_BN_CLICKED(IDC_RADIO_MSLSA_IMPORT_OFF, OnRadioMslsaNever) - ON_BN_CLICKED(IDC_RADIO_MSLSA_IMPORT_ON, OnRadioMslsaAlways) - ON_BN_CLICKED(IDC_RADIO_MSLSA_IMPORT_MATCH, OnRadioMslsaMatchingRealm) - //}}AFX_MSG_MAP -END_MESSAGE_MAP() - -///////////////////////////////////////////////////////////////////////////// -// CLeashProperties message handlers - -BOOL CLeashProperties::OnInitDialog() -{ - CDialog::OnInitDialog(); - - pLeashGetTimeServerName(timeServer, TIMEHOST); - SetDlgItemText(IDC_EDIT_TIME_SERVER, timeServer); - - if (getenv(TIMEHOST)) - GetDlgItem(IDC_EDIT_TIME_SERVER)->EnableWindow(FALSE); - else - GetDlgItem(IDC_STATIC_TIMEHOST)->ShowWindow(FALSE); - - CWinApp * pApp = AfxGetApp(); - if (pApp) - m_initMissingFiles = m_newMissingFiles = - pApp->GetProfileInt("Settings", "CreateMissingConfig", FALSE_FLAG); - CheckDlgButton(IDC_CHECK_CREATE_MISSING_CFG, m_initMissingFiles); - - dw_initMslsaImport = dw_newMslsaImport = pLeash_get_default_mslsa_import(); - switch ( dw_initMslsaImport ) { - case 0: - CheckDlgButton(IDC_RADIO_MSLSA_IMPORT_OFF,TRUE); - break; - case 1: - CheckDlgButton(IDC_RADIO_MSLSA_IMPORT_ON,TRUE); - break; - case 2: - CheckDlgButton(IDC_RADIO_MSLSA_IMPORT_MATCH,TRUE); - break; - } - - return TRUE; -} - -void CLeashProperties::OnOK() -{ - CString timeServer_; - GetDlgItemText(IDC_EDIT_TIME_SERVER, timeServer_); - - if (getenv(TIMEHOST)) - { - // Check system for TIMEHOST, just in case it gets set (somehow) - MessageBox("Can't change the time host unless you remove it from the environment!", - "Error", MB_OK); - return; - } - - if( getenv("USEKRB4") != NULL) - { - MessageBox("Kerberos 4 ticket requests are being controlled by the environment" - "variable USEKRB4 instead of the registry. Leash cannot modify" - "the environment. Use the System control panel instead.", - "Leash", MB_OK); - return; - } - - if (SetRegistryVariable(TIMEHOST, timeServer_)) - { - MessageBox("There was an error putting your entry into the Registry!", - "Error", MB_OK); - } - - if ( m_initMissingFiles != m_newMissingFiles ) { - CWinApp * pApp = AfxGetApp(); - if (pApp) - pApp->WriteProfileInt("Settings", "CreateMissingConfig", - m_newMissingFiles ? TRUE_FLAG : FALSE_FLAG); - - if ( m_newMissingFiles ) - CLeashApp::ValidateConfigFiles(); - } - - if ( dw_initMslsaImport != dw_newMslsaImport ) { - pLeash_set_default_mslsa_import(dw_newMslsaImport); - } - - CDialog::OnOK(); -} - -void CLeashProperties::OnCheckMissingCfg() -{ - m_newMissingFiles = (BOOL)IsDlgButtonChecked(IDC_CHECK_CREATE_MISSING_CFG); -} - -void CLeashProperties::OnRadioMslsaNever() -{ - dw_newMslsaImport = 0; -} - -void CLeashProperties::OnRadioMslsaAlways() -{ - dw_newMslsaImport = 1; -} - -void CLeashProperties::OnRadioMslsaMatchingRealm() -{ - dw_newMslsaImport = 2; -} - -void CLeashProperties::OnHelp() -{ -#ifdef CALL_HTMLHELP - AfxGetApp()->HtmlHelp(HID_LEASH_PROPERTIES_COMMAND); -#else - AfxGetApp()->WinHelp(HID_LEASH_PROPERTIES_COMMAND); -#endif -} - -void CLeashProperties::OnButtonResetDefaults() -{ - if (IDYES != AfxMessageBox("You are about to reset all Leash settings to their default values!\n\nContinue?", - MB_YESNO)) - return; - - pLeash_reset_defaults(); - - HKEY hKey; - LONG rc; - - rc = RegOpenKeyEx(HKEY_CURRENT_USER, "SOFTWARE\\MIT\\Leash32\\Settings", - 0, KEY_WRITE, &hKey); - if (rc) - return; - - rc = RegDeleteValue(hKey, "AutoRenewTickets"); - rc = RegDeleteValue(hKey, "CreateMissingConfig"); - rc = RegDeleteValue(hKey, "DebugWindow"); - rc = RegDeleteValue(hKey, "LargeIcons"); - rc = RegDeleteValue(hKey, "TIMEHOST"); - rc = RegDeleteValue(hKey, "AfsStatus"); - rc = RegDeleteValue(hKey, "LowTicketAlarm"); - - RegCloseKey(hKey); -} diff --git a/src/windows/leash/LeashProperties.h b/src/windows/leash/LeashProperties.h deleted file mode 100644 index 314eba793c..0000000000 --- a/src/windows/leash/LeashProperties.h +++ /dev/null @@ -1,78 +0,0 @@ -// ************************************************************************************** -// File: LeashProperties.h -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright @1998 Massachusetts Institute of Technology - All rights reserved. -// Description: H file for LeashProperties.cpp. Contains variables and functions -// for the Leash Properties Dialog Box -// -// History: -// -// MM/DD/YY Inits Description of Change -// 12/02/98 ADL Original -// ************************************************************************************** - -#if !defined(AFX_LEASHPROPERTIES_H__7E54E028_726E_11D2_945E_0000861B8A3C__INCLUDED_) -#define AFX_LEASHPROPERTIES_H__7E54E028_726E_11D2_945E_0000861B8A3C__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 -// LeashProperties.h : header file -// - -///////////////////////////////////////////////////////////////////////////// -// CLeashProperties dialog - -#define TIMEHOST "TIMEHOST" - -class CLeashProperties : public CDialog -{ -private: - static char timeServer[255]; - CHAR sysDir[MAX_PATH]; - BOOL m_initMissingFiles; - BOOL m_newMissingFiles; - DWORD dw_initMslsaImport; - DWORD dw_newMslsaImport; - -// Construction -public: - CLeashProperties(CWnd* pParent = NULL); // standard constructor - -// Dialog Data - //{{AFX_DATA(CLeashProperties) - enum { IDD = IDD_LEASH_PROPERTIES }; - // NOTE: the ClassWizard will add data members here - //}}AFX_DATA - - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CLeashProperties) - public: - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - //}}AFX_VIRTUAL - -// Implementation -protected: - - // Generated message map functions - //{{AFX_MSG(CLeashProperties) - virtual BOOL OnInitDialog(); - virtual void OnOK(); - afx_msg void OnHelp(); - afx_msg void OnCheckMissingCfg(); - afx_msg void OnRadioMslsaNever(); - afx_msg void OnRadioMslsaAlways(); - afx_msg void OnRadioMslsaMatchingRealm(); - afx_msg void OnButtonResetDefaults(); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() -}; - -//{{AFX_INSERT_LOCATION}} -// Microsoft Visual C++ will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_LEASHPROPERTIES_H__7E54E028_726E_11D2_945E_0000861B8A3C__INCLUDED_) diff --git a/src/windows/leash/LeashView.cpp b/src/windows/leash/LeashView.cpp index 5115a1eb8d..a2d005bcad 100644 --- a/src/windows/leash/LeashView.cpp +++ b/src/windows/leash/LeashView.cpp @@ -24,10 +24,6 @@ #include "LeashDebugWindow.h" #include "LeashMessageBox.h" #include "LeashAboutBox.h" -#include "Krb5Properties.h" -#include "LeashProperties.h" -#include "KrbProperties.h" -#include "AfsProperties.h" #include #ifdef _DEBUG @@ -82,23 +78,15 @@ BEGIN_MESSAGE_MAP(CLeashView, CListView) ON_UPDATE_COMMAND_UI(ID_INIT_TICKET, OnUpdateInitTicket) ON_UPDATE_COMMAND_UI(ID_RENEW_TICKET, OnUpdateRenewTicket) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) - ON_COMMAND(ID_AFS_CONTROL_PANEL, OnAfsControlPanel) ON_UPDATE_COMMAND_UI(ID_DEBUG_MODE, OnUpdateDebugMode) ON_UPDATE_COMMAND_UI(ID_CFG_FILES, OnUpdateCfgFiles) - ON_COMMAND(ID_KRB4_PROPERTIES, OnKrb4Properties) - ON_COMMAND(ID_KRB5_PROPERTIES, OnKrb5Properties) - ON_COMMAND(ID_LEASH_PROPERTIES, OnLeashProperties) ON_COMMAND(ID_LEASH_RESTORE, OnLeashRestore) ON_COMMAND(ID_LEASH_MINIMIZE, OnLeashMinimize) ON_COMMAND(ID_LOW_TICKET_ALARM, OnLowTicketAlarm) ON_COMMAND(ID_AUTO_RENEW, OnAutoRenew) ON_UPDATE_COMMAND_UI(ID_LOW_TICKET_ALARM, OnUpdateLowTicketAlarm) ON_UPDATE_COMMAND_UI(ID_AUTO_RENEW, OnUpdateAutoRenew) - ON_UPDATE_COMMAND_UI(ID_KRB4_PROPERTIES, OnUpdateKrb4Properties) - ON_UPDATE_COMMAND_UI(ID_KRB5_PROPERTIES, OnUpdateKrb5Properties) - ON_UPDATE_COMMAND_UI(ID_AFS_CONTROL_PANEL, OnUpdateAfsControlPanel) ON_UPDATE_COMMAND_UI(ID_MAKE_DEFAULT, OnUpdateMakeDefault) - ON_COMMAND(ID_PROPERTIES, OnKrbProperties) ON_UPDATE_COMMAND_UI(ID_PROPERTIES, OnUpdateProperties) ON_COMMAND(ID_HELP_KERBEROS_, OnHelpKerberos) ON_COMMAND(ID_HELP_LEASH32, OnHelpLeash32) @@ -121,19 +109,8 @@ END_MESSAGE_MAP() time_t CLeashView::m_ticketTimeLeft = 0; // # of seconds left before tickets expire -INT CLeashView::m_forwardableTicket = 0; -INT CLeashView::m_proxiableTicket = 0; -INT CLeashView::m_renewableTicket = 0; -INT CLeashView::m_noaddressTicket = 0; -DWORD CLeashView::m_publicIPAddress = 0; -INT CLeashView::m_ticketStatusAfs = 0; // Defense Condition: are we low on tickets? -INT CLeashView::m_ticketStatusKrb4 = 0; // Defense Condition: are we low on tickets? INT CLeashView::m_ticketStatusKrb5 = 0; // Defense Condition: are we low on tickets? -INT CLeashView::m_warningOfTicketTimeLeftAfs = 0; // Prevents warning box from coming up repeatively -INT CLeashView::m_warningOfTicketTimeLeftKrb4 = 0; // Prevents warning box from coming up repeatively INT CLeashView::m_warningOfTicketTimeLeftKrb5 = 0; // Prevents warning box from coming up repeatively -INT CLeashView::m_warningOfTicketTimeLeftLockAfs = 0; -INT CLeashView::m_warningOfTicketTimeLeftLockKrb4 = 0; INT CLeashView::m_warningOfTicketTimeLeftLockKrb5 = 0; INT CLeashView::m_updateDisplayCount; INT CLeashView::m_alreadyPlayedDisplayCount; @@ -344,14 +321,8 @@ void DurationToString(long delta, LPTSTR *outStr) CLeashView::CLeashView() { ////@#+Need removing as well! -#ifndef NO_KRB4 - m_listKrb4 = NULL; -#endif - m_listAfs = NULL; m_startup = TRUE; - m_warningOfTicketTimeLeftKrb4 = 0; m_warningOfTicketTimeLeftKrb5 = 0; - m_warningOfTicketTimeLeftLockKrb4 = 0; m_warningOfTicketTimeLeftLockKrb5 = 0; m_largeIcons = 0; m_destroyTicketsOnExit = 0; @@ -376,11 +347,6 @@ CLeashView::CLeashView() m_hMenu = NULL; m_pApp = NULL; m_ccacheDisplay = NULL; - m_forwardableTicket = 0; - m_proxiableTicket = 0; - m_renewableTicket = 0; - m_noaddressTicket = 0; - m_publicIPAddress = 0; m_autoRenewTickets = 0; m_autoRenewalAttempted = 0; m_pWarningMessage = NULL; @@ -496,8 +462,7 @@ time_t CLeashView::LeashTime() // Call while possessing a lock to ticketinfo.lockObj INT CLeashView::GetLowTicketStatus(int ver) { - BOOL b_notix = (ver == 5 && !ticketinfo.Krb5.btickets) || - (ver == 1 && !ticketinfo.Afs.btickets); + BOOL b_notix = (ver == 5 && !ticketinfo.Krb5.btickets); if (b_notix) return NO_TICKETS; @@ -565,21 +530,6 @@ VOID CLeashView::OnShowWindow(BOOL bShow, UINT nStatus) // Get State of Upper Case Realm m_upperCaseRealm = pLeash_get_default_uppercaserealm(); - // Forwardable flag - m_forwardableTicket = pLeash_get_default_forwardable(); - - // Proxiable flag - m_proxiableTicket = pLeash_get_default_proxiable(); - - // Renewable flag - m_renewableTicket = pLeash_get_default_renewable(); - - // No Address flag - m_noaddressTicket = pLeash_get_default_noaddresses(); - - // Public IP Address - m_publicIPAddress = pLeash_get_default_publicip(); - // UI main display column widths for (int i=0; iGetProfileInt("Settings", "AfsStatus", 1); - CListCtrl& list = GetListCtrl(); // @TODO: there is probably a more sensible place to initialize these... if ((m_BaseFont == NULL) && (list.GetFont())) { @@ -1274,33 +1201,13 @@ VOID CLeashView::OnUpdateDisplay() } } -#ifndef NO_KRB4 - INT ticketIconStatusKrb4; - INT ticketIconStatus_SelectedKrb4; - INT iconStatusKrb4; -#endif - INT ticketIconStatusKrb5; INT ticketIconStatus_SelectedKrb5; INT iconStatusKrb5; - INT ticketIconStatusAfs; - INT ticketIconStatus_SelectedAfs; - INT iconStatusAfs; - -#ifndef NO_KRB4 - LONG krb4Error; -#endif - LONG afsError; - if (WaitForSingleObject( ticketinfo.lockObj, 100 ) != WAIT_OBJECT_0) throw("Unable to lock ticketinfo"); -#ifndef NO_KRB4 - // Get Kerb 4 tickets in list - krb4Error = pLeashKRB4GetTickets(&ticketinfo.Krb4, &m_listKrb4); -#endif - // Get Kerb 5 tickets in list LeashKRB5ListDefaultTickets(&ticketinfo.Krb5); if (CLeashApp::m_hKrb5DLL && !CLeashApp::m_krbv5_profile) @@ -1318,55 +1225,11 @@ VOID CLeashView::OnUpdateDisplay() pprofile_init(filenames, &CLeashApp::m_krbv5_profile); } - // Get AFS Tokens in list - if (CLeashApp::m_hAfsDLL) { - char * principal; - if ( ticketinfo.Krb5.principal[0] ) - principal = ticketinfo.Krb5.principal; - else - principal = ""; - afsError = pLeashAFSGetToken(&ticketinfo.Afs, &m_listAfs, principal); - } - /* * Update Ticket Status for Krb5 so that we may use their state * to select the appropriate Icon for the Parent Node */ -////Might need to delete dependent stuff as well!!! -#ifndef NO_KRB4 - /* Krb4 */ - UpdateTicketTime(ticketinfo.Krb4); - m_ticketStatusKrb4 = GetLowTicketStatus(4); - if (!m_listKrb4 || EXPIRED_TICKETS == ticketinfo.Krb4.btickets || - m_ticketStatusKrb4 == ZERO_MINUTES_LEFT) - { - ticketIconStatusKrb4 = EXPIRED_CLOCK; - ticketIconStatus_SelectedKrb4 = EXPIRED_CLOCK; - iconStatusKrb4 = EXPIRED_TICKET; - } - else if (TICKETS_LOW == ticketinfo.Krb4.btickets || - m_ticketStatusKrb4 == FIVE_MINUTES_LEFT || - m_ticketStatusKrb4 == TEN_MINUTES_LEFT || - m_ticketStatusKrb4 == FIFTEEN_MINUTES_LEFT) - { - ticketIconStatusKrb4 = LOW_CLOCK; - ticketIconStatus_SelectedKrb4 = LOW_CLOCK; - iconStatusKrb4 = LOW_TICKET; - } - else if ( CLeashApp::m_hKrb4DLL ) - { - ticketIconStatusKrb4 = ACTIVE_CLOCK; - ticketIconStatus_SelectedKrb4 = ACTIVE_CLOCK; - iconStatusKrb4 = ACTIVE_TICKET; - } else { - ticketIconStatusKrb4 = EXPIRED_CLOCK; - ticketIconStatus_SelectedKrb4 = EXPIRED_CLOCK; - iconStatusKrb4 = TICKET_NOT_INSTALLED; - } -#endif - - /* Krb5 */ UpdateTicketTime(ticketinfo.Krb5); m_ticketStatusKrb5 = GetLowTicketStatus(5); @@ -1399,37 +1262,6 @@ VOID CLeashView::OnUpdateDisplay() iconStatusKrb5 = TICKET_NOT_INSTALLED; } - /* Afs */ - UpdateTicketTime(ticketinfo.Afs); - m_ticketStatusAfs = GetLowTicketStatus(1); - if (!m_listAfs || EXPIRED_TICKETS == ticketinfo.Afs.btickets || - m_ticketStatusAfs == ZERO_MINUTES_LEFT) - { - ticketIconStatusAfs = EXPIRED_CLOCK; - ticketIconStatus_SelectedAfs = EXPIRED_CLOCK; - iconStatusAfs = EXPIRED_TICKET; - } - else if (TICKETS_LOW == ticketinfo.Afs.btickets || - m_ticketStatusAfs == FIVE_MINUTES_LEFT || - m_ticketStatusAfs == TEN_MINUTES_LEFT || - m_ticketStatusAfs == FIFTEEN_MINUTES_LEFT) - { - ticketIconStatusAfs = LOW_CLOCK; - ticketIconStatus_SelectedAfs = LOW_CLOCK; - iconStatusAfs = LOW_TICKET; - } - else if ( CLeashApp::m_hAfsDLL ) - { - ticketIconStatusAfs = ACTIVE_CLOCK; - ticketIconStatus_SelectedAfs = ACTIVE_CLOCK; - iconStatusAfs = ACTIVE_TICKET; - } else - { - ticketIconStatusAfs = EXPIRED_CLOCK; - ticketIconStatus_SelectedAfs = EXPIRED_CLOCK; - iconStatusAfs = TICKET_NOT_INSTALLED; - } - int trayIcon = NONE_PARENT_NODE; if (CLeashApp::m_hKrb5DLL && ticketinfo.Krb5.btickets) { switch ( iconStatusKrb5 ) { @@ -1553,8 +1385,6 @@ VOID CLeashView::OnUpdateDisplay() LeashKRB5FreeTicketInfo(&ticketinfo.Krb5); LeashKRB5FreeTickets(&principallist); - // @TODO: AFS-specific here - ReleaseMutex(ticketinfo.lockObj); } @@ -1655,9 +1485,6 @@ VOID CLeashView::OnActivateView(BOOL bActivate, CView* pActivateView, m_alreadyPlayed = TRUE; - if (!CKrbProperties::KrbPropertiesOn) - SendMessage(WM_COMMAND, ID_UPDATE_DISPLAY, 0); - if (m_debugStartUp) { OnDebugMode(); @@ -1671,11 +1498,6 @@ VOID CLeashView::OnActivateView(BOOL bActivate, CView* pActivateView, ////@#+Is this KRB4 only? VOID CLeashView::OnDebugMode() { -#ifndef NO_KRB4 - if (!pset_krb_debug) - return; -#endif - if (!m_pDebugWindow) { AfxMessageBox("There is a problem with the Leash Debug Window!", @@ -1724,11 +1546,6 @@ VOID CLeashView::OnDebugMode() m_pApp->WriteProfileInt("Settings", "DebugWindow", FALSE_FLAG); m_pDebugWindow->DestroyWindow(); -//// -#ifndef NO_KRB4 - pset_krb_debug(OFF); - pset_krb_ap_req_debug(OFF); -#endif return; } else @@ -1958,11 +1775,7 @@ VOID CLeashView::OnUpdateUppercaseRealm(CCmdUI *pCmdUI) VOID CLeashView::ResetTreeNodes() { m_hPrincipalState = 0; -#ifndef NO_KRB4 - m_hKerb4State = 0; -#endif m_hKerb5State = 0; - m_hAFSState = 0; } VOID CLeashView::OnDestroy() @@ -1998,13 +1811,7 @@ VOID CLeashView::OnUpdateDestroyTicket(CCmdUI* pCmdUI) VOID CLeashView::OnUpdateInitTicket(CCmdUI* pCmdUI) { - if ( -////Is this logic correct? -#ifndef NO_KRB4 - !CLeashApp::m_hKrb4DLL && -#endif - !CLeashApp::m_hKrb5DLL && - !CLeashApp::m_hAfsDLL) + if (!CLeashApp::m_hKrb5DLL) pCmdUI->Enable(FALSE); else pCmdUI->Enable(TRUE); @@ -2091,17 +1898,8 @@ LRESULT CLeashView::OnTrayIcon(WPARAM wParam, LPARAM lParam) menu->AppendMenu(MF_STRING, ID_INIT_TICKET, "&Get Tickets"); if (WaitForSingleObject( ticketinfo.lockObj, INFINITE ) != WAIT_OBJECT_0) throw("Unable to lock ticketinfo"); - if (!( -#ifndef NO_KRB4 - ticketinfo.Krb4.btickets || -#endif - ticketinfo.Krb5.btickets) || -////Not entirely sure about the logic -#ifndef NO_KRB4 - !CLeashApp::m_hKrb4DLL && -#endif - !CLeashApp::m_hKrb5DLL && - !CLeashApp::m_hAfsDLL) + if (!ticketinfo.Krb5.btickets || + !CLeashApp::m_hKrb5DLL) nFlags = MF_STRING | MF_GRAYED; else nFlags = MF_STRING; @@ -2111,7 +1909,7 @@ LRESULT CLeashView::OnTrayIcon(WPARAM wParam, LPARAM lParam) else nFlags = MF_STRING; menu->AppendMenu(MF_STRING, ID_IMPORT_TICKET, "&Import Tickets"); - if (!ticketinfo.Krb5.btickets && !ticketinfo.Afs.btickets) + if (!ticketinfo.Krb5.btickets) nFlags = MF_STRING | MF_GRAYED; else nFlags = MF_STRING; @@ -2161,12 +1959,6 @@ VOID CLeashView::OnAppAbout() } -VOID CLeashView::OnAfsControlPanel() -{ - CAfsProperties afsProperties; - afsProperties.DoModal(); -} - VOID CLeashView::OnInitialUpdate() { CListView::OnInitialUpdate(); @@ -2180,14 +1972,8 @@ VOID CLeashView::OnItemexpandedTreeview(NMHDR* pNMHDR, LRESULT* pResult) if (m_hPrincipal == pNMTreeView->itemNew.hItem) m_hPrincipalState = pNMTreeView->action; -#ifndef NO_KRB4 - else if (m_hKerb4 == pNMTreeView->itemNew.hItem) - m_hKerb4State = pNMTreeView->action; -#endif else if (m_hKerb5 == pNMTreeView->itemNew.hItem) m_hKerb5State = pNMTreeView->action; - else if (m_hAFS == pNMTreeView->itemNew.hItem) - m_hAFSState = pNMTreeView->action; CMainFrame::m_isBeingResized = TRUE; *pResult = 0; @@ -2195,56 +1981,12 @@ VOID CLeashView::OnItemexpandedTreeview(NMHDR* pNMHDR, LRESULT* pResult) VOID CLeashView::OnUpdateDebugMode(CCmdUI* pCmdUI) { -//// -#ifndef NO_KRB4 - if (!pset_krb_debug) -#endif pCmdUI->Enable(FALSE); -//// -#ifndef NO_KRB4 - else - pCmdUI->Enable(TRUE); -#endif } VOID CLeashView::OnUpdateCfgFiles(CCmdUI* pCmdUI) { -//// -#ifndef NO_KRB4 - if (!pkrb_get_krbconf2) -#endif pCmdUI->Enable(FALSE); -//// -#ifndef NO_KRB4 - else - pCmdUI->Enable(TRUE); -#endif -} - -VOID CLeashView::OnLeashProperties() -{ - CLeashProperties leashProperties; - leashProperties.DoModal(); -} - -VOID CLeashView::OnKrbProperties() -{ - CKrbProperties krbProperties("Kerberos Properties"); - krbProperties.DoModal(); -} - -VOID CLeashView::OnKrb4Properties() -{ -#ifndef NO_KRB4 - CKrb4Properties krb4Properties("Kerberos Four Properties"); - krb4Properties.DoModal(); -#endif -} - -VOID CLeashView::OnKrb5Properties() -{ - CKrb5Properties krb5Properties("Kerberos Five Properties"); - krb5Properties.DoModal(); } /* @@ -2369,10 +2111,8 @@ BOOL CLeashView::PreTranslateMessage(MSG* pMsg) if (InterlockedDecrement(&m_timerMsgNotInProgress) == 0) { CString ticketStatusKrb5 = TCHAR(NOT_INSTALLED); - CString ticketStatusAfs = TCHAR(NOT_INSTALLED); CString strTimeDate; CString lowTicketWarningKrb5; - CString lowTicketWarningAfs; timer_start: if (WaitForSingleObject( ticketinfo.lockObj, 100 ) != WAIT_OBJECT_0) @@ -2469,113 +2209,6 @@ BOOL CLeashView::PreTranslateMessage(MSG* pMsg) } //KRB5 - - if (CLeashApp::m_hAfsDLL) - { - // AFS - UpdateTicketTime(ticketinfo.Afs); - if (!ticketinfo.Afs.btickets) - { - BOOL AfsEnabled = m_pApp->GetProfileInt("Settings", "AfsStatus", 1); - if ( AfsEnabled ) - ticketStatusAfs = "AFS: No Tickets"; - else - ticketStatusAfs = "AFS: Disabled"; - } - else if (EXPIRED_TICKETS == ticketinfo.Afs.btickets) - { -#ifndef NO_KRB5 - if (ticketinfo.Krb5.btickets && - EXPIRED_TICKETS != ticketinfo.Krb5.btickets && - m_autoRenewTickets && - !m_autoRenewalAttempted && - ticketinfo.Krb5.renew_until && - (ticketinfo.Krb5.issued + ticketinfo.Krb5.renew_until -LeashTime() > 20 * 60) && - !stricmp(ticketinfo.Krb5.principal,ticketinfo.Afs.principal) - ) - { - m_autoRenewalAttempted = 1; - ReleaseMutex(ticketinfo.lockObj); - AfxBeginThread(RenewTicket,m_hWnd); - goto timer_start; - } -#endif /* NO_KRB5 */ - ticketStatusAfs = "AFS: Expired Tickets"; - lowTicketWarningAfs = "Your AFS token(s) have expired"; - if (!m_warningOfTicketTimeLeftLockAfs) - m_warningOfTicketTimeLeftAfs = 0; - m_warningOfTicketTimeLeftLockAfs = ZERO_MINUTES_LEFT; - m_ticketTimeLeft = 0; - } - else - { - m_ticketStatusAfs = GetLowTicketStatus(1); - switch (m_ticketStatusAfs) - { - case FIFTEEN_MINUTES_LEFT: - ticketinfo.Afs.btickets = TICKETS_LOW; - - lowTicketWarningAfs = "Less then 15 minutes left on your AFStoken(s)"; - break; - case TEN_MINUTES_LEFT: - ticketinfo.Afs.btickets = TICKETS_LOW; - - lowTicketWarningAfs = "Less then 10 minutes left on your AFS token(s)"; - - if (!m_warningOfTicketTimeLeftLockAfs) - m_warningOfTicketTimeLeftAfs = 0; - - m_warningOfTicketTimeLeftLockAfs = TEN_MINUTES_LEFT; - break; - case FIVE_MINUTES_LEFT: - ticketinfo.Afs.btickets = TICKETS_LOW; - if (m_warningOfTicketTimeLeftLockAfs == TEN_MINUTES_LEFT) - m_warningOfTicketTimeLeftAfs = 0; - - m_warningOfTicketTimeLeftLockAfs = FIVE_MINUTES_LEFT; - - lowTicketWarningAfs = "Less then 5 minutes left on your AFS token(s)"; - break; - default: - m_ticketStatusAfs = 0; - break; - } - - } - - if (CMainFrame::m_isMinimum) - { - // minimized dispay - ticketStatusAfs.Format("AFS: %02d:%02d Left", - (m_ticketTimeLeft / 60L / 60L), - (m_ticketTimeLeft / 60L % 60L)); - } - else - { - // normal display - if (GOOD_TICKETS == ticketinfo.Afs.btickets || - TICKETS_LOW == ticketinfo.Afs.btickets) - { - if ( m_ticketTimeLeft >= 60 ) { - ticketStatusAfs.Format("AFS Token Life: %02d:%02d", - (m_ticketTimeLeft / 60L / 60L), - (m_ticketTimeLeft / 60L % 60L)); - } else { - ticketStatusAfs.Format("AFS Token Life: < 1 min"); - } - } -#ifndef NO_STATUS_BAR - if (CMainFrame::m_wndStatusBar) - { - CMainFrame::m_wndStatusBar.SetPaneInfo(3, 111113, SBPS_NORMAL, 130); - CMainFrame::m_wndStatusBar.SetPaneText(3, ticketStatusAfs, SBT_POPOUT); - } -#endif - } - } - // AFS - -#ifndef NO_KRB5 if ( m_ticketStatusKrb5 == TWENTY_MINUTES_LEFT && m_autoRenewTickets && !m_autoRenewalAttempted && ticketinfo.Krb5.renew_until && (ticketinfo.Krb5.renew_until - LeashTime() > 20 * 60)) @@ -2585,17 +2218,13 @@ BOOL CLeashView::PreTranslateMessage(MSG* pMsg) AfxBeginThread(RenewTicket,m_hWnd); goto timer_start; } -#endif /* NO_KRB5 */ BOOL warningKrb5 = m_ticketStatusKrb5 > NO_TICKETS && m_ticketStatusKrb5 < TWENTY_MINUTES_LEFT && !m_warningOfTicketTimeLeftKrb5; - BOOL warningAfs = m_ticketStatusAfs > NO_TICKETS && - m_ticketStatusAfs < TWENTY_MINUTES_LEFT && - !m_warningOfTicketTimeLeftAfs; // Play warning message only once per each case statement above - if (warningKrb5 || warningAfs) + if (warningKrb5) { CString lowTicketWarning = ""; @@ -2606,13 +2235,6 @@ BOOL CLeashView::PreTranslateMessage(MSG* pMsg) m_warningOfTicketTimeLeftKrb5 = ON; warnings++; } - if (warningAfs) { - if ( warnings ) - lowTicketWarning += "\n"; - lowTicketWarning += lowTicketWarningAfs; - m_warningOfTicketTimeLeftAfs = ON; - warnings++; - } ReleaseMutex(ticketinfo.lockObj); AlarmBeep(); @@ -2625,17 +2247,10 @@ BOOL CLeashView::PreTranslateMessage(MSG* pMsg) if (CMainFrame::m_isMinimum) { - if ( CLeashApp::m_hAfsDLL ) - strTimeDate = ( "MIT Kerberos - " - "[" + ticketStatusKrb5 + "] - " + - "[" + ticketStatusAfs + "] - " + - "[" + ticketinfo.Krb5.principal + "]" + " - " + - tTimeDate.Format("%A, %B %d, %Y %H:%M ")); - else - strTimeDate = ( "MIT Kerberos - " - "[" + ticketStatusKrb5 + "] - " + - "[" + ticketinfo.Krb5.principal + "]" + " - " + - tTimeDate.Format("%A, %B %d, %Y %H:%M ")); + strTimeDate = ( "MIT Kerberos - " + "[" + ticketStatusKrb5 + "] - " + + "[" + ticketinfo.Krb5.principal + "]" + " - " + + tTimeDate.Format("%A, %B %d, %Y %H:%M ")); } else { @@ -2756,28 +2371,6 @@ VOID CLeashView::AlarmBeep() } VOID CLeashView::OnUpdateProperties(CCmdUI* pCmdUI) -{ - if (CLeashApp::m_hKrb5DLL -#ifndef NO_KRB4 - || CLeashApp::m_hKrb4DLL -#endif - ) - pCmdUI->Enable(); - else - pCmdUI->Enable(FALSE); -} - -VOID CLeashView::OnUpdateKrb4Properties(CCmdUI* pCmdUI) -{ -#ifndef NO_KRB4 - if (CLeashApp::m_hKrb4DLL) - pCmdUI->Enable(); - else -#endif - pCmdUI->Enable(FALSE); -} - -VOID CLeashView::OnUpdateKrb5Properties(CCmdUI* pCmdUI) { if (CLeashApp::m_hKrb5DLL) pCmdUI->Enable(); @@ -2785,18 +2378,6 @@ VOID CLeashView::OnUpdateKrb5Properties(CCmdUI* pCmdUI) pCmdUI->Enable(FALSE); } -VOID CLeashView::OnUpdateAfsControlPanel(CCmdUI* pCmdUI) -{ -////Is the comment even correct? -#ifndef NO_KRB4 - // need Krb 4 to get AFS tokens - if (CLeashApp::m_hAfsDLL && CLeashApp::m_hKrb4DLL) - pCmdUI->Enable(); - else -#endif - pCmdUI->m_pMenu->DeleteMenu(pCmdUI->m_nID, MF_BYCOMMAND); -} - void CLeashView::OnHelpLeash32() { #ifdef CALL_HTMLHELP diff --git a/src/windows/leash/LeashView.h b/src/windows/leash/LeashView.h index b6d288691a..2caecef32b 100644 --- a/src/windows/leash/LeashView.h +++ b/src/windows/leash/LeashView.h @@ -129,22 +129,13 @@ class CLeashView : public CListView { private: ////@#+Remove -#ifndef NO_KRB4 - TicketList* m_listKrb4; -#endif - TicketList* m_listAfs; CLeashDebugWindow* m_pDebugWindow; CCacheDisplayData* m_ccacheDisplay; CImageList m_imageList; CWinApp* m_pApp; HTREEITEM m_hPrincipal; -////@#+Remove -#ifndef NO_KRB4 - HTREEITEM m_hKerb4; -#endif HTREEITEM m_hKerb5; HTREEITEM m_hk5tkt; - HTREEITEM m_hAFS; TV_INSERTSTRUCT m_tvinsert; HMENU m_hMenu; BOOL m_startup; @@ -157,11 +148,7 @@ private: INT m_largeIcons; INT m_lowTicketAlarm; INT m_hPrincipalState; -#ifndef NO_KRB4 - INT m_hKerb4State; -#endif INT m_hKerb5State; - INT m_hAFSState; CString* m_pWarningMessage; BOOL m_bIconAdded; BOOL m_bIconDeleted; @@ -174,18 +161,9 @@ private: static ViewColumnInfo sm_viewColumns[NUM_VIEW_COLUMNS]; static INT m_autoRenewTickets; - static INT m_ticketStatusAfs; -////Remove as well? - static INT m_ticketStatusKrb4; static INT m_ticketStatusKrb5; static INT m_autoRenewalAttempted; - static INT m_warningOfTicketTimeLeftAfs; -////Remove as well? - static INT m_warningOfTicketTimeLeftKrb4; static INT m_warningOfTicketTimeLeftKrb5; - static INT m_warningOfTicketTimeLeftLockAfs; -////Remove as well? - static INT m_warningOfTicketTimeLeftLockKrb4; static INT m_warningOfTicketTimeLeftLockKrb5; static INT m_updateDisplayCount; static INT m_alreadyPlayedDisplayCount; @@ -246,11 +224,6 @@ protected: // create from serialization only // Attributes public: - static INT m_forwardableTicket; - static INT m_proxiableTicket; - static INT m_renewableTicket; - static INT m_noaddressTicket; - static DWORD m_publicIPAddress; static BOOL m_importedTickets; CLeashView(); @@ -327,18 +300,14 @@ protected: afx_msg VOID OnUpdateAutoRenew(CCmdUI* pCmdUI); afx_msg VOID OnUpdateMakeDefault(CCmdUI* pCmdUI); afx_msg VOID OnAppAbout(); - afx_msg VOID OnAfsControlPanel(); afx_msg VOID OnUpdateDebugMode(CCmdUI* pCmdUI); afx_msg VOID OnUpdateCfgFiles(CCmdUI* pCmdUI); - afx_msg VOID OnKrb4Properties(); afx_msg VOID OnKrb5Properties(); afx_msg void OnLeashProperties(); afx_msg void OnLeashRestore(); afx_msg void OnLeashMinimize(); afx_msg void OnLowTicketAlarm(); - afx_msg void OnUpdateKrb4Properties(CCmdUI* pCmdUI); afx_msg void OnUpdateKrb5Properties(CCmdUI* pCmdUI); - afx_msg void OnUpdateAfsControlPanel(CCmdUI* pCmdUI); afx_msg void OnKrbProperties(); afx_msg void OnUpdateProperties(CCmdUI* pCmdUI); afx_msg void OnHelpKerberos(); diff --git a/src/windows/leash/Lglobals.cpp b/src/windows/leash/Lglobals.cpp deleted file mode 100644 index 861255e6c8..0000000000 --- a/src/windows/leash/Lglobals.cpp +++ /dev/null @@ -1,148 +0,0 @@ -//***************************************************************************** -// File: lgobals.cpp -// By: Arthur David Leather -// Created: 12/02/98 -// Copyright: @1998 Massachusetts Institute of Technology - All rights -// reserved. -// Description: CPP file for lgobals.cpp. Contains global variables and helper -// functions -// -// History: -// -// MM/DD/YY Inits Description of Change -// 02/02/98 ADL Original -//***************************************************************************** - -#include "stdafx.h" -#include "leash.h" -#include -#include "lglobals.h" - -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 -config_boolean_to_int(const char *s) -{ - const char *const *p; - - for(p=conf_yes; *p; p++) { - if (!strcasecmp(*p,s)) - return 1; - } - - for(p=conf_no; *p; p++) { - if (!strcasecmp(*p,s)) - return 0; - } - - /* Default to "no" */ - return 0; -} - - -// Global Function for deleting or putting a value in the Registry -BOOL SetRegistryVariable(const CString& regVariable, - const CString& regValue, - const char* regSubKey) -{ - // Set Register Variable - HKEY hKey = NULL; - LONG err = 0L; - - - if (ERROR_SUCCESS != (err = RegOpenKeyEx(HKEY_CURRENT_USER, - regSubKey, - 0, KEY_ALL_ACCESS, &hKey))) - { - if ((err = RegCreateKeyEx(HKEY_CURRENT_USER, regSubKey, 0, 0, 0, - KEY_ALL_ACCESS, 0, &hKey, 0))) - { - // Error - return TRUE; - } - } - - if (ERROR_SUCCESS == err && hKey) - { - if (regValue.IsEmpty()) - { - // Delete - RegDeleteValue(hKey, regVariable); - } - else - { - // Insure that Name (Variable) is in the Registry and set - // it's new value - char nVariable[MAX_PATH+1]; - char* pVARIABLE = nVariable; - strncpy(pVARIABLE, regValue, MAX_PATH); - - if (ERROR_SUCCESS != - RegSetValueEx(hKey, regVariable, 0, - REG_SZ, (const unsigned char*)pVARIABLE, - lstrlen(regValue))) - { - // Error - return FALSE; - } - } - - RegCloseKey(hKey); - - // Send this message to all top-level windows in the system - ::PostMessage(HWND_BROADCAST, WM_WININICHANGE, 0L, (LPARAM) regSubKey); - return FALSE; - } - - return TRUE; -} - -VOID LeashErrorBox(LPCSTR errorMsg, LPCSTR insertedString, LPCSTR errorFlag) -{ - CString strMessage; - strMessage = errorMsg; - strMessage += ": "; - strMessage += insertedString; - - MessageBox(CLeashApp::m_hProgram, strMessage, errorFlag, MB_OK); - - //if (*errorFlag == 'E') - //ASSERT(0); // on error condition only -} - -Directory::Directory(LPCSTR pathToValidate) -{ - m_pathToValidate = pathToValidate; - _getdcwd(_getdrive(), m_savCurPath, sizeof(m_savCurPath)); -} - -Directory::~Directory() -{ - if (-1 == _chdir(m_savCurPath)) - ASSERT(0); -} - -BOOL Directory::IsValidDirectory() -{ - if (-1 == _chdir(m_pathToValidate)) - return FALSE; - - return TRUE; -} - -BOOL Directory::IsValidFile() -{ - CFileFind fileFind; - if (!fileFind.FindFile(m_pathToValidate)) - return FALSE; - - return TRUE; -} diff --git a/src/windows/leash/Lglobals.h b/src/windows/leash/Lglobals.h index 7141d79e0b..c462722ba1 100644 --- a/src/windows/leash/Lglobals.h +++ b/src/windows/leash/Lglobals.h @@ -60,76 +60,18 @@ TYPEDEF_FUNC( #define pGetModuleFileNameEx pGetModuleFileNameExA -// leash functions -TYPEDEF_FUNC( - long, - WINAPIV, - not_an_API_LeashKRB4GetTickets, - (TICKETINFO *, TicketList **) - ); -TYPEDEF_FUNC( - long, - WINAPIV, - not_an_API_LeashAFSGetToken, - (TICKETINFO *, TicketList **, char *) - ); -TYPEDEF_FUNC( - long, - WINAPIV, - not_an_API_LeashGetTimeServerName, - (char *, const char*) - ); - -extern DECL_FUNC_PTR(not_an_API_LeashKRB4GetTickets); -extern DECL_FUNC_PTR(not_an_API_LeashAFSGetToken); -extern DECL_FUNC_PTR(not_an_API_LeashGetTimeServerName); extern DECL_FUNC_PTR(Leash_kdestroy); extern DECL_FUNC_PTR(Leash_changepwd_dlg); extern DECL_FUNC_PTR(Leash_changepwd_dlg_ex); extern DECL_FUNC_PTR(Leash_kinit_dlg); extern DECL_FUNC_PTR(Leash_kinit_dlg_ex); extern DECL_FUNC_PTR(Leash_timesync); -extern DECL_FUNC_PTR(Leash_get_default_lifetime); -extern DECL_FUNC_PTR(Leash_set_default_lifetime); -extern DECL_FUNC_PTR(Leash_get_default_forwardable); -extern DECL_FUNC_PTR(Leash_set_default_forwardable); -extern DECL_FUNC_PTR(Leash_get_default_renew_till); -extern DECL_FUNC_PTR(Leash_set_default_renew_till); -extern DECL_FUNC_PTR(Leash_get_default_noaddresses); -extern DECL_FUNC_PTR(Leash_set_default_noaddresses); -extern DECL_FUNC_PTR(Leash_get_default_proxiable); -extern DECL_FUNC_PTR(Leash_set_default_proxiable); -extern DECL_FUNC_PTR(Leash_get_default_publicip); -extern DECL_FUNC_PTR(Leash_set_default_publicip); -extern DECL_FUNC_PTR(Leash_get_default_use_krb4); -extern DECL_FUNC_PTR(Leash_set_default_use_krb4); -extern DECL_FUNC_PTR(Leash_get_default_life_min); -extern DECL_FUNC_PTR(Leash_set_default_life_min); -extern DECL_FUNC_PTR(Leash_get_default_life_max); -extern DECL_FUNC_PTR(Leash_set_default_life_max); -extern DECL_FUNC_PTR(Leash_get_default_renew_min); -extern DECL_FUNC_PTR(Leash_set_default_renew_min); -extern DECL_FUNC_PTR(Leash_get_default_renew_max); -extern DECL_FUNC_PTR(Leash_set_default_renew_max); -extern DECL_FUNC_PTR(Leash_get_default_renewable); -extern DECL_FUNC_PTR(Leash_set_default_renewable); -extern DECL_FUNC_PTR(Leash_get_lock_file_locations); -extern DECL_FUNC_PTR(Leash_set_lock_file_locations); extern DECL_FUNC_PTR(Leash_get_default_uppercaserealm); extern DECL_FUNC_PTR(Leash_set_default_uppercaserealm); extern DECL_FUNC_PTR(Leash_get_default_mslsa_import); -extern DECL_FUNC_PTR(Leash_set_default_mslsa_import); -extern DECL_FUNC_PTR(Leash_get_default_preserve_kinit_settings); -extern DECL_FUNC_PTR(Leash_set_default_preserve_kinit_settings); extern DECL_FUNC_PTR(Leash_import); extern DECL_FUNC_PTR(Leash_importable); extern DECL_FUNC_PTR(Leash_renew); -extern DECL_FUNC_PTR(Leash_reset_defaults); - -////Do we still need this one? -#define pLeashKRB4GetTickets pnot_an_API_LeashKRB4GetTickets -#define pLeashAFSGetToken pnot_an_API_LeashAFSGetToken -#define pLeashGetTimeServerName pnot_an_API_LeashGetTimeServerName // psapi functions extern DECL_FUNC_PTR(GetModuleFileNameExA); @@ -232,13 +174,6 @@ extern DECL_FUNC_PTR(profile_release_string); #define LEASH_HELP_FILE "leash.chm" -extern int config_boolean_to_int(const char *); -extern BOOL SetRegistryVariable(const CString& regVariable, - const CString& regValue, - const char* regSubKey = "Software\\MIT\\Leash32\\Settings"); -extern VOID LeashErrorBox(LPCSTR errorMsg, LPCSTR insertedString, - LPCSTR errorFlag = "Error"); - // Get ticket info for the default ccache only extern void LeashKRB5ListDefaultTickets(TICKETINFO *ticketinfo); // clean up ticket info @@ -249,26 +184,10 @@ extern void LeashKRB5ListAllTickets(TICKETINFO **ticketinfolist); // clean up ticket info list extern void LeashKRB5FreeTickets(TICKETINFO **ticketinfolist); - - -class Directory -{ - CHAR m_savCurPath[MAX_PATH]; - CString m_pathToValidate; - -public: - Directory(LPCSTR pathToValidate); - virtual ~Directory(); - - BOOL IsValidDirectory(); - BOOL IsValidFile(); -}; - class TicketInfoWrapper { public: HANDLE lockObj; TICKETINFO Krb5; - TICKETINFO Afs; }; extern TicketInfoWrapper ticketinfo; diff --git a/src/windows/leash/MainFrm.cpp b/src/windows/leash/MainFrm.cpp index 886efe6d18..843f2cecf9 100644 --- a/src/windows/leash/MainFrm.cpp +++ b/src/windows/leash/MainFrm.cpp @@ -165,8 +165,7 @@ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) #ifndef NO_STATUS_BAR if (!m_wndStatusBar.Create(this) || - !m_wndStatusBar.SetIndicators(indicators, - (CLeashApp::m_hAfsDLL ? 4 : 3))) + !m_wndStatusBar.SetIndicators(indicators, 3)) { MessageBox("There is problem creating the Leash Status Bar!", "Error", MB_OK); diff --git a/src/windows/leash/Makefile.in b/src/windows/leash/Makefile.in index eac4b34843..861df16a1b 100644 --- a/src/windows/leash/Makefile.in +++ b/src/windows/leash/Makefile.in @@ -1,19 +1,6 @@ # makefile: Leash executable # -#TODO Fix later: -NO_AFS=1 - -!ifndef NO_AFS -###AFS_BASE= -AFS_INCLUDES=-I$(AFS_BASE)\Include -AFS_LIB=$(AFS_BASE)\lib -AFS_LIBS=$(AFS_LIB)\afsauthent.lib -!else -AFS_INCLUDES= -AFS_LIBS= -!endif - EXE_NAME=leash WSHELPER=wshelp32 @@ -24,35 +11,19 @@ WSHELPER=wshelp64 SUBDIRS= htmlhelp OBJS= \ - $(OUTPRE)Krb4EditDomainRealmList.obj \ - $(OUTPRE)CLeashDragListBox.obj \ - $(OUTPRE)Krb5Properties.obj \ - $(OUTPRE)KrbAddHostServer.obj \ - $(OUTPRE)KrbAddRealm.obj \ - $(OUTPRE)KrbConfigOptions.obj \ - $(OUTPRE)KrbDomainRealmMaintenance.obj \ - $(OUTPRE)KrbEditHostServer.obj \ - $(OUTPRE)KrbEditRealm.obj \ - $(OUTPRE)KrbProperties.obj \ - $(OUTPRE)KrbRealmHostMaintenance.obj \ $(OUTPRE)Leash.obj \ $(OUTPRE)LeashAboutBox.obj \ $(OUTPRE)LeashDebugWindow.obj \ $(OUTPRE)LeashDoc.obj \ - $(OUTPRE)LeashFileDialog.obj \ $(OUTPRE)LeashFrame.obj \ $(OUTPRE)LeashMessageBox.obj \ - $(OUTPRE)LeashProperties.obj \ $(OUTPRE)LeashUIApplication.obj \ $(OUTPRE)LeashUICommandHandler.obj \ $(OUTPRE)LeashView.obj \ - $(OUTPRE)lglobals.obj \ $(OUTPRE)MainFrm.obj \ $(OUTPRE)out2con.obj \ $(OUTPRE)StdAfx.obj \ - $(OUTPRE)AfsProperties.obj \ $(OUTPRE)VSroutines.obj \ - $(OUTPRE)KrbMiscConfigOpt.obj \ $(OUTPRE)KrbListTickets.obj RESFILE = $(OUTPRE)Leash.res @@ -68,17 +39,13 @@ LOCALINCLUDES= -I$(BUILDTOP) -I$(BUILDTOP)\include -I$(BUILDTOP)\windows\include RFLAGS = $(LOCALINCLUDES) RCFLAGS = $(RFLAGS) -D_WIN32 -DLEASH_APP -DEFINES = -DWINSOCK -DWIN32 -DWINDOWS -D_AFXDLL -DNO_KRB4 -DNO_STATUS_BAR -DUSE_MESSAGE_BOX +DEFINES = -DWINSOCK -DWIN32 -DWINDOWS -D_AFXDLL -DNO_STATUS_BAR -DUSE_MESSAGE_BOX !ifdef NODEBUG DEFINES = $(DEFINES) !else DEFINES = $(DEFINES) -DDBG !endif -!ifdef NO_AFS -DEFINES = $(DEFINES) -DNO_AFS -!endif - ##### Linker LINK = link LIBS = $(GLIB) $(CLIB) $(WLIB) diff --git a/src/windows/leash/htmlhelp/Images/Bullet.gif b/src/windows/leash/htmlhelp/Images/Bullet.gif deleted file mode 100644 index 090f96cd8bdfdbfd00b3e46c7cbd6b646e607595..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 816 zc-nLKbh9u|WMg1s_|5OYwEAIupAqhQzo9S{M^ f3k)2h4DuW@KNuPu8JPH$bSexIotv1LnHa1AulO6D diff --git a/src/windows/leash/htmlhelp/Images/Capture.PNG b/src/windows/leash/htmlhelp/Images/Capture.PNG deleted file mode 100644 index a87fa36e6475bcbefc19ff4717a330b0dd78fb75..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 5304 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 diff --git a/src/windows/leash/htmlhelp/Images/Get_Ticket_Icon.png b/src/windows/leash/htmlhelp/Images/Get_Ticket_Icon.png deleted file mode 100644 index 1c9c959c0531e1a186709ddf10a81751e3a93efe..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 1588 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 Y`mY_MS$0C}@3&#{|9mI&?#;q~0-}jxF#rGn diff --git a/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_6.jpg b/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_6.jpg deleted file mode 100644 index 536bc776695a2286a312e0332055627d7dec409a..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 7854 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 diff --git a/src/windows/leash/htmlhelp/Images/Leash_about_leash.jpg b/src/windows/leash/htmlhelp/Images/Leash_about_leash.jpg deleted file mode 100644 index bb6a1d58a59e3637649876ffa5aac946ed3cd31b..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 42760 zc-ri{WmH_ty8ep>2ol`Aad!>gIE^-_KDd)#yH*E_q%sOp~8Prc8t-kw#n#+XkFPu~%6RTPvJ5D*a&5#IiOAw0nm zjeoZF(D~FAravpB8bSpe}jUGfr^Sjh>eL&_`g1$x)Jcu5wQ{HkrC+;knj+Z@erSS z5vULl5s;7(|A_a$57cKUXy}N@NEp9Q8{r}#qWrESK0|$hj)8=VgogAx5Y%S~c=%`p zgy=-XboAOJ0N%t@Qa&MFJ^eQ+1x24Gr>18a1Z1=jo(`GQ_fbPLo zFeW9ib#h_tvcnDGm2O}MY5mHd$R%85gV&)3vsv_61 zvV@`&(jM>XkadHjTMqo`~0 zx*W1)3K}`Hu=rqG{&`*b-oAelU+JN1hx#gak)H31a(7IE*`W!W=?7U+lOVkl6Y&wN!dxO-2+(;0Xe2eC>=~j_S7j3`n;ZES#5h^(!Dr(b(?^VPFpb7c|%Z z#IZ~C-q%aa^Ji<#!|w6Hr|FlO?s>^G+dpk^KGQ^Me-sgiePxMmui2_>pl5pgG{2Nz zMmqLj_(R6maR4m9wkEo3?)px%G{ z7v>DjN;fccM=$ekV;Y}#&18-wBeHeXf-Z(EpWo*t~Ll57V$JHGh}& zV?1Cr_b;2n)iJ~yodSDYpSUQ~`gY9ieUO8cTawuP%F5aXFKDiHc4kW^r(CuTGV3-f6sd1z^#6VJtU|5sNR5{m;?M`!g;6Ls);POpgXG{%41O<<@_K z^@oVYe}z~1B1bM zctl_=Jbj(cKZj0BteME6K(jNd;bR)S^kMUJtrT9&t%0DvdOgKR(T&Rs4YI!V)2n^m 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∈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�?75czD5?=j=9WAQ7nc;~ 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

j@G5z`8gB|?-7m`%( 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 diff --git a/src/windows/leash/htmlhelp/Images/Leash_init_ticket_advanced.jpg b/src/windows/leash/htmlhelp/Images/Leash_init_ticket_advanced.jpg deleted file mode 100644 index b78716e8eafdb4eb2e999bb8578cf3deb7164b01..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 41549 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 M0>}&9+@AbD0EJ`71ONa4 diff --git a/src/windows/leash/htmlhelp/Images/Leash_init_ticket_basic.jpg b/src/windows/leash/htmlhelp/Images/Leash_init_ticket_basic.jpg deleted file mode 100644 index 09552c8d890b30f1343f8a95b443e954394a35b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 24631 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 P>K*xf%$LIa>)F2nYw+jn diff --git a/src/windows/leash/htmlhelp/Images/Leash_menu_action.jpg b/src/windows/leash/htmlhelp/Images/Leash_menu_action.jpg deleted file mode 100644 index a5e6581c282f4a6b1e77bb10099fc680932f5f50..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 16106 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 diff --git a/src/windows/leash/htmlhelp/Images/Leash_menu_file.jpg b/src/windows/leash/htmlhelp/Images/Leash_menu_file.jpg deleted file mode 100644 index b78fb93c196e13a4cc8051882e7bb5b8187ea82f..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 3447 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 Ct|-9( diff --git a/src/windows/leash/htmlhelp/Images/Leash_menu_help.jpg b/src/windows/leash/htmlhelp/Images/Leash_menu_help.jpg deleted file mode 100644 index 215891b9132e6e31a525d6f26b9a9f8696dd1f16..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 7711 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 diff --git a/src/windows/leash/htmlhelp/Images/Leash_menu_options.jpg b/src/windows/leash/htmlhelp/Images/Leash_menu_options.jpg deleted file mode 100644 index 808e7c20dab1f9fb4b152a372673a56009c286a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 18430 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 diff --git a/src/windows/leash/htmlhelp/Images/Leash_menu_view.jpg b/src/windows/leash/htmlhelp/Images/Leash_menu_view.jpg deleted file mode 100644 index 8c133583bf8a6f4feb160d6b705c9bebb1b423df..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 6673 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 Aq5uE@ diff --git a/src/windows/leash/htmlhelp/Images/Leash_properties_afs.jpg b/src/windows/leash/htmlhelp/Images/Leash_properties_afs.jpg deleted file mode 100644 index 389bc805c88f474f1c4943e788c151e647ca59db..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 10505 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 AFaQ7m diff --git a/src/windows/leash/htmlhelp/Images/Leash_properties_krb4.jpg b/src/windows/leash/htmlhelp/Images/Leash_properties_krb4.jpg deleted file mode 100644 index 1fb585de5dc8f4a97e76e62b5bb339643e6eb456..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 29475 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 bOLhGsdlvi)L#w>xWKwwIBugxgG;00>t|kw} diff --git a/src/windows/leash/htmlhelp/Images/Leash_properties_krb5_2.jpg b/src/windows/leash/htmlhelp/Images/Leash_properties_krb5_2.jpg deleted file mode 100644 index 597a6e65fe126c9c7bc10e90389071c23ec65395..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 21146 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/}4o(ZT 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�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 aYzAyc+!2336hI>ubz(C?kT5!s@!(HusOZ}O diff --git a/src/windows/leash/htmlhelp/Images/Leash_properties_krb_2.jpg b/src/windows/leash/htmlhelp/Images/Leash_properties_krb_2.jpg deleted file mode 100644 index 871cabb5c1a32aa3207792eac2136c5a6ef52b2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 50291 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�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 ILENGL0W9&-RsaA1 diff --git a/src/windows/leash/htmlhelp/Images/Leash_systray_menu.jpg b/src/windows/leash/htmlhelp/Images/Leash_systray_menu.jpg deleted file mode 100644 index 3145019c2715b3135b3be6a1c76f76609413f2fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 15892 zc-rl|cT`hb*DoBbC`BoPp$a5GfPj=x1&vZ%C^fWZrS*|lMG2ggxgZ3KhO%~>xjLbKf|1k*F`Col5T)cAe;uU5(8an3xHl6(m zV4wzcQH`9Z;su;zpgPY$b=D5x0#E^dLHh^Zf6}GP7pZ?~yL#o^FTTe0Ul*u;NnEA7 z0Jw1e$}c|ExnDM1Vqmtu({1PYoNG}~nAS>3uX*Lh z8K5w?{-ZX`$eF(KhHh`m%e+dLS?c?_Md(88>{Q<~8xX+)YW5hy7Gb8|7{u9OM;r`u zwmFDg@s1X7cGlB@xTM8jvPtVragt5K!grJUubYb&-Q@u$>+5R3BHbI=Hx(#E(Hp{$ z@nbOmkFRfJa%9`Kf=+%jN=oZ>v|t0NOa2ImQ(|dw!u70GSPFGt&{%KK%5_PRxcQ%{`~dPsA;s$DtC|r2>WwJ2Fvm|dmrQzL5Pl%0i zzszT%g$AE5U&QH@Mc2cUP9gQaT@efA&7<3GvBSp{V4sk_;P73chQM|s(lQRL?b(;u zY-_^fYV1Sr-C~=Z2f<4y-d$C6>C;-0+#2htjL9@M5~X|OF#%@UY;YoKeKhee{VZ}I zxt6bkS1KcW&??;|LMMIubmblL{7)=YJS(`wmXF41{fh3mv8Edzl|tKgl+)+%7_zxg zWMnl~qp|lB=ZJT4%-f6;2y?v&)6GaX&gd2Ck!44QPfis679?BT_jlvtt86ZBI0T?? zAhLR*l16YN#xk2a4>O)_0bojxjAz<%R_HJRi4n#V2$MQvfmw}Nv|Wy_w7&1yN>UX) zce6T6Z(OMnoC)6};gzb+_#DK*C&OHUKO$rm&F~-Q(o`4}c6e!=^nVYh1o|jaEqpek$0Bdfl{4 zuNZASsz0?{-|SO&P3R6wD>b%Z0L-5YRqu-*L--bU1v~ua_VlXeK5k+(DdBUK2G^Gc zs~)=@Mxy0Em9aaKqs{lWaWDHutB1!6621=EEa|#j-AfEjIhosNwOsnr;Q6yRo`Fn~ zF3o!<)AkWNl9wgWAqBi1&QsfFDtXwb^BRa>n4KPO&r=#G3< zG?RCHGz(FFr*Ms8;L2ekS6yq5j>?xLFOe%TX$IY+D!ba+qUlKr!Yo$S0S!Aga(?se zF@Iy{ydCu^TI|>|fQJL{p(?Hr+DWK{ak5CR{be>R|e zh5Il6_baTF)i+2ST4=8z5#UMFMmg1Ca1@4NeZt@0s_f1}P4jr4<%oa!x$wR``P#@7 zw>0N1yr_>{Bf`h;nu=65N^42^u-`>&uTlH-DCQ7kGhIc0f%ObIw0P1 zuG9a)*kkBn&fMZU!w1;~a`}n0%nuTX9o?s5P9`fSaQ{(}WeDSr@Gsmo+R44rDA-|{ zYP}yW*-d(lBqqyg6&#ytmAx2eDacMXq6?cbx1uAj-8z7td;W<V?rGIw2|JO*Y z(>76BLALzG$RDo@PfWH{UK$RTu*Gz=j#>EWtnm!|mn!0aP`gz(w{ww8 zUf=sl13Y++`Cc~@@|TsZU$t75>6psWSh6>a`WmcKcs&38;fja3_6_&Qji*TA2R+< ze?+;*tcZj+W+AAAV((X%3W0gxiJ-2oNWWbzZuPg{pIWHJ&Zo_7lYB|tUEQErp0*80 zVwxtz$(S*SEfxu?4@@s*3G*pD%6J=W6l~D(xm52k#ww+BLDIyG?^bba;52!{q5_*5 zj!0xejpz_`Hu$8H!)G)JYZaFkJubmKIt5Cr9;t98r_MGfmJMh+IQX`nHsq(qafWd6 zx#XK!7LHox>Ua>ndV6Lv^Nf}~Ag}80c2zze$=Y_l0*Lu=2H@>JMg_DqgU*ZY004jd zd)|I|VB3Rrz$Aj(59+@)ME{%TOXGf=TipImFLUVVd;n6v5D?P#LH7N0McY{1EudGL z5WTqi<4O4rmoOcotFl2XF83Qt zqLW%rO9`mSs{=wH2{PyanZ|-Z;QVpE9<-b>7wi39EOgF2rito*em`E*9e+bac8ph& zPr`;jiXEyR(=pnmB8`9i*!ibBB3;ug_}ll;kgJ(pdm`_`cecfhlTq_+zKEy5Ym!0? zLL44j=+#??Nf8?$@Z~1gZq+8`vh2~Cr-rLZagLRKGQw_b8=)1S_nPpUGMpoU4%$%H zC}Bl2qoh59WR-Cx!D-q0QW4>GgSd@b6&{cTwK%Ie9KTAx!147u>N*JcE5nOGIX7T| zUshjHVC$m<4L^5xZt<_gsg1_QiOkSpwFwiZ?1Sq@>377Rq2KC#iQlKHUUP9PcwbQh zEN9whq%5{ww@p-ShQ!aOn`s+dnV5T$XwY*8=vS9X?nmQrPVA0kxVrh6;8%5$?rv5% z>mzkNnCivHs%m;d9Kt3-hkUiYa}&lMt|lf)pk;MXO9M3i+BV2TuBaIuT^w{%lXE4# zXih1(bqSq+e8}KnYI_Skfs_}C~C#>86`a;ag$ z;#rl8ACj?QP!d{q|AhrCQNTsEy0jX&CH#@+!xu^KWV0x$B6c+q<66B^xTkRfMV${R zPiA9AV_uFuUqFouW4IH%7e4T_jLGg0AePH8n+M|wJwF5;;kF$UF>W@uNDIX%eWZRM z&KA!rDYX&bqiNB*)aa4V*o!X^kC`n%ZIVjS?}XfKw|9lXki+rv#RRiu6W*K!)647$ zwa2Ubn0Fo*Dra2KggO?AQucPQTT|=x8~wIWUdcq+4q>?qhpt9$L`RX4&1lec^nRrb zEL$Q6ESzSNfn=mnnb^qxlTbt`6V7zpvYJK5Nmz+6hG2J_OLc<;@Sq{p9O}rn8gN+w zC5!lL>D!GgdQ;{(>V4PjE8 zvg8H){INYd(?B)cRFwJXqv%3YhPKq3T-ULb;Svszlg!+`xGqexNaEMetnLe(OSKwg ziuX7?pA<$%;(9jHMLOE#k!O1p&28L!>Rf;skKF0K_9m6z<+FZLSdIXrdTBX9UOi*B z4|<(+x)nM(SRsEzt^RN`tLBdUek1P{i7)Lhb+T6E+#8HKY;ZKRMJ#udzWq6EmuXA?E85~#tDdGh*Ph_{jUUrDD6yj#Hlxxj z@__Y0Qnj_8$in!>mV8`U6Yusj!^EF?MiLvjqUSwU4R}*AhOQU7C>Ur`rj0!YDAfjJ z_uP`a3jxL+=se5`e$M~Y*?iEa!iY+5Jdq&{p90&Wzzdjr?eE!>x9$N`QyFfBfim@) z+*8+f37Yr`k`ZUEI8cjQHA7dln2%iER%}eFc~cc0MoU2|Vr_%s;(jGE zT+d*h-%^W3L6heED?VaZDrMDzZ6XcFbgfw>6D?vDc)MNAYz_nR>y8(NV7DgJ!6g~S z)Jbaf<4b+w4vxVwVRF@*SND6InN+bg%J0&gWMtg--O)DSJ?-##sBQs`=cokl7)f9F z1pIncXMC(Bcvo_hsw0>XETcT$IupOCGV@pU5S_T0O46|F86 zoR(~$lN1;=sss9>ANW}FT|q*}8v#X=0P)!rqD{+};F6iujtqt-)C*S~lc_h|7`V z6TVG69p&2MPD8EFcsB1iz1+a*ahmd#ket|un&vr@eZpaK4Q%#)Q7Fl=#=gG69tj8% z41yaocraWyb4k{TyZOEPoxH=y;PbZSfcd_Ua@}itM`pWS^F7@XvB?vY?n-Ox!4wY-)#}s-T_e6ShzT zOYe^MlrZ1dDbcT0im{OmqLiyHmohzHq8mmB=lHpKd6KJ;WVzrSRnCv;woOCix< zf3YNG!2x|$M=Wowhj!2!C80GNzyh<;C=70xtsy9F#pR*Y(wT4i*9VPk8?1; zv|z!ORh1AlOUW(z4dkkRMN~pwY;~u3NI#4*GIX>cQvQd<91*fP-A4j-cS|Pb- z!59j=;g$X)QpH&4JlvQi<-6(CcFQ64JePC_p@MnKbRHrRIOlQ-f2Piu ziFPOJ78gV>8eJ1_#+=)R7ie8A_f72cBIuMGy%-q=k7d%BX=`fqok)1QME5~f4j%7i z;`*CoHf2p#VZEyjKj)2IO?J^8iY++b7mektjPp8&iH#_@;+M#reJv#%Z0mtsRFsgA zi!jZ_CaR)iJFdhBBa28KNYZd+a0;IiHgarZ==mm=q&_D}o)`9x=9P>P2Bdxb2P1$$`Z!JcnsS&Bi3D&md=ypu=G=s)x?wtra zDU~51Pzj>o*sSJ8yd?Gt!ZuM@`BcEAZ1c{WafL@_LPqKqe=1AC_k|O--9k4Hb*sw!%e5jMg=5LihJZk}~zj znN+hub*Wi;K?ZL=UCHhtl zjWiW0HXP{4joWcB)v zJ4r93``evkH^#Hm)fHhILtjUACR9Q){V8P$rC(5)+y042fk@A968Uzpah6(-11Y`o z*PV;c5t=UteZV$FG#Woc+~(O2Ukxw~P7Ehn-@tC>s>hC&)d5WwODWLi z5F-~dTZ9i=6cQ76MBU31^U#$`CTV;Mo>V;ZdjJT0u4bgEd~%(Rv-cphyuGvM2aerSta zX`XmHT-Z5XpHQ#9>tnCKD%h=nHo7F&&QAEeeLFLuBl$*Xbqz_0x?nrq6*u?T*h_j= zV;eh`P}gQ{m!C$+%S!-B`w!MDcIbILnpv*|KAQ_R@zCFw`%-(f@q^1db4@8Rl_6E0 z%#enCjD_;w-%Xo2o=&DkOj}DRh+Fvi#`qE0`m47jhpJ^*CsZk$lVyRT3{n2GN71jV z9q8V8P6Vlcl2;phJp}w#=ElNceS&>LeXWlJ21J4rBxbUVd1U(f9-m+UY89-Q}U~ooR#C z4^vKFN`->dax@ydP8xr*ammXtW_L@sE!IML1~B^^#0v@Jf&4LFu`WA`Pp?)b?An2v1D&m`R2yo`nt2*2NqO>{qC*x2 zl#UT8LrL*SSl?JbV*Loob^tngf52$$tBcK7Au8=hHg061wbC@wU_c5yo|kW^ukT0S zyP(ga7eX~UJhY)n^FH%*s>|$ol^AY=_;-p@XMmTzT3~ZQtM~mctiCXEKb7Xg^2rjF zU7+kE9CHivd5JGFQTmOk_HbKY27&@Zdtw!y2QGOSOSvQHG($Lk2&%)FM4pZUgx zp)p#yn^1q@*Qs$8*v}vPeQKlf&E03fRTJ@G(8#mh&>;lE_ow`ZBCMXG*W9X?Fs|x? zHePJ#k?u#GE>GGnjr9#GV^|8tj6E(GhnlwMvLf5L1DVV?e{|a@!97=GgO7}Pt}4m} zn!c6PY9(q!^uYOfg`&CNOs;8vEJ{iCUmX zPXJf{Q_<>w^Pan`{%JdHPP}+w=dOlR*^gg|wj+mL>D$ClMB36kA~HvEjSOry$0Aum zCd7CA@+!_3J>?yC+gNKvLte#Gt=k#a&YOsOjm8btPT!NA4O^?vdwE2Vz>u^xqWzxW zCgsS|=m?yLuG@px@l>5#l(`qPrOmZTwj_8Goe&?cIX`DpDcf}J8}~$4<8wUFyJN00 z+Ht_#IikjG;Ngk_k8@4UgdB}YOe2AJTwuwbG&`9t13EqmU}%t9s%ZZ99efnx-YO71 zV&l5m<3H9&T?v9FIoRaiNtDP@DI_2zi1qfyVZy6vhg?mewJ%)(b$Mdx{R43m z(uo5aMMfn;5@VWaY(`L$gwLaiLs)^hU$gFukUX8&FL0EGm`AwbTLuY_eHwUR;`K3t74DDB=AD$KqL0mR=QP=vcv}LmjPo z2Ds-eG8Q#VB52=^>_)(GzJkolNmU1Cpz;vfZ!K5!Sb^eq!s<~G4~|huE5Y~2K1uM( zhuqZqX5v9#nwc*4Qh7$FzM2xoXdD}{SwLSQz9%I zih{}h3UE4(cCrda0rXqD2yRVlrkA4UxX>oufoallBoC;&ST2@kbZbkjy55W%uZp*^ z@b&+m%@oo}zMtlDwqCUf8{oYP`XiomrQM00k<%B&p|!^N+)owyh6rxBqR5;x*(CZQGpN&M zq|q@bym)FoXaSXM?wUf>;72>G-O6;FLk&Z1vLTn^kzC7r)GMuPSEL7RBnxoEal|Cj z^81!^zY=Pko~p{7ykARSjk+;i=LA{I=^$?;2NNc05~-B?Q8f7?v$o%?WU7GsnwWM} z(E>9%{XC(Q`SOPbq|%+*QJxWHbHUA+eq*Txyi_h>?76aDeSihGI4_RXwWOg!+}qW- zFt8Vf&6_sV)`1^q)Ea|j?NtavLz--%Ba5kdag$H7zu+E6&{a@^Pj9H$t`ti0PA$v2 z=;zIc@5)F2aLg-yfxr)S3pp!et0g9ji*J1>(}^{FKSG%acutm42fNe{FaRfavE0DVqjAru`N{M?i}F9vEDp^EqYfjExdWW#xahQ zu!h3cJu2_jcfT>8^l`5BL)ykm7#RD8y3g*s6;EWGU}R5MXm&YtF=TODm2S`p`^LWA zU4*H(MWPrpWwOK(Ge2TFV8-PS*A!AcRNuP#U>w$0bn+Qwes+0iyx972K;(BHRhjfk zsNM|MRchN}iaB}Iu;OC&p}<`1s-TMKui&y?0sPcFk}kY>lUDHKAEdWpoxa9=^(S5| z3E;0R%fp=s)eLDKl6+7%v2Us$G{ou7073kUY*@MOIIbM)Qt8fpWt@C zKhyeR*zO)EyeD{1E&AfY9((%L3qoP8OcpH4hwYFuX|xIfbEI1%l_=~YaI7&nHF=Ir zC|v#{G0Jh$c-lx9M{FMJ)ksLUS@v$as{PGlv#QJZKp8K~nQS6<^HohIOY~cITSd1@ zoG>uCYp8z{5As3||#Dj~+q#osWAW%PDayqO9057gk=m_oSk`Fvq>72)RN}z)SiN-8UB~d^s-Bh);`A=hkA@^S zumP`Tf^4W|dx5!|OIIyK2)1n`jUNW(#Zh?Gp1Y{ZbvpZ;-YCh^vF4EqS=bf_s~dbZhFr)` zc#gk-AU9B)CUqnvl6w}xssk#q8Z9wbPm9)CnJ*WK@MN!DYnj;SMu9gHH=N==;Wwlh zHhd3Ev8a#$GS%7CEM!_;~x%I{18(kyxL#T6=w;ornoLwdyBUAAPdpG(kI? zFHLGyGDdUQX|KH!F{vp2&iEtW=+DYB$VDF7W_488tb3TkES5ugBp0Qv%CeHz)m607 zy7J?M5hhh~VK>8qudFW7$`jQ&Qr(4L_zrsKLU*U9ADWLC%aT-{GKa8Yj5CzpaJ;oL zQj~wU=+}$4Q|j?GETW+_35=ek*w;1Li&c_S!32y;KU|6AAv z#8SUjX>Gc)das^rby7YOs+$+rQPhD`1)zw6as;kU%`cefS4Km}wyux^17u_-_p$!<+hbD|(TH}ouG^o}O3d(x zd?$`~N1J#`NwEt&{5XoF0})alndyqUgh29vnNyIhChxb!q2xiopC%tWO{v7!aa_*P zOso#l8}kbK(t{X568^!rPm83;2>9lN?=`M~4!1XA#grVYem?$_lfG`h2--XM0k+?odQlc2)Fmt{0PCF1w8fLxNt;IXj@iV1k6C z)c1l_sMM;5uK?RSY#DHO#}48>`plx2{G16|@Lhk6&+UO;3#@jnwP(0R2z^z;trTSU zv+dqdXRT%M$mWY1 zLzn1lEpZD=3;v3>5L>wI1;e%BB8a}ku$r4$8Bl(y-&|Y(PEzl^c)8*I-KQ8}{)78f zJ318u(G4Xpj5v*IN7rRiG71rg^X3~7JQ8f6w9&HB8BmY&i-bwq{3=$Gfz0u|FZKsJ zCyhd9NjRjvOK6q34wwFo8CHAARR;{yUsmSO0G3rmHt&h$%pNN>Z3RIYMohJseu`J-WZ`Yb+WM4C?2Svb1 zV_l7d>kNGsQI8Y{M0Cz`4pcO)_b4*4RnFWA(fA7U0MkhBfz{3cxU7^L_Cezknfw)B zvG4b-JQqhCxK*KN0BHdy#d4g-@Sb3`minxNkYp8`wN|jGQ z7s$$iR>w}{C^H(TCHOM1W*{-Vw{I){i{TWARgtbCK#}O4)5e44kIB3Y?wna(ok7Y-Zu#wHA2bFrn^&+T8PCI6^%5 zpUo41*Au|Gf3vosOpzwse%ItMPHoL=V{fnTEO&Mlj(Tk?S$xUMYGpX!nOYKT& z$czD2Be&B7%`3^v=aM6dEZ6Ov`n^RRZSrj*O49aRDqZuTaO z4%9B&50|cJ$R@K^r6dYC|XQU2R_;AkB*mo4bcWZ@ffEHO8pnF zq|)!r_pB=4@>vnzRy)l!43z0IGv45s!hEuUKv1LHYGGG~y3%-73Ol|>_|7ugP1#}C zEqn4G@HE5&F|R#)&`#{@lbzn#kQY`Nd?t1|gM?leC(%ZF<(|MKOrAgCZH?rh-&R~+ z>PUS&TN2$P(G-QDSvML`03EEO*MkIB0k<{6JC_e9a;bOvlcb~$V zpjY2Ng3bcA_JB?|l?y6G1Z z9N7E0yw((WGUIf%En2(ja(>^ocNW3GM^yXzO4Ea3ohDWH(2-jddS=~(QPRUyjI?91 zt1)p2t0}Cw)-vk^7^%)oc87g*7pfjZEPHIll`z*w75ODSoYC;TF(&+7Uys_qBpfvD z5Wz#ya7)NvFxJn%j>nt;?nd1zO=%lgK-`E&#$VVp*a($8cxsnK5o6h*ZRMGbr#O!Ni(9X~Dv zTs~sap3(WawRr3Icw^uV0NncbV$AuEUcY4-mw)?QkX_>OUR7*gdp%=B&qm1Jm4lRZ zjTjwPbH_>cs1^}Eg05c@4hdz<9XknGVQ!=Lqg2vwhzbukyhYi4*hx!_4*<8;KS=Y$ z)$tZ5n{g`1M2^f6ogf0MYS^$#(ch=ExPdI^qc#GLYh`|rBx-76@wug;4A!qLofUXA z)re5CR(*}^QeQ-|>qHGyZ51ZicOWUAq+{$yS+sWZt_b84sQVN0GEp_G_8WuHY}OU@ zTF0)5^2%-aTH3)E$)UvYNs33$5;0gj3A;Qsp`+VO_x%;J*Y~FQ@THu4wYKg2)M57g zYxd8P5VQ^s2QRh2_2O?-n41-x0bC}IX}c^tO;NhDzcOw4bqY5onh3KFavQJ9TQ|aH zAvJsFXAkX1!dsA(-UqyLTm)PBwCwf{QEE%+pbBw0b2`c+QS)phFkbSZyn$N+N zPC-L`?~9PF6ozBT=OLIdt#>1zfm+};NKw+2aXyTeIM4RH50`{Idik&jp zxM*N)_+!!>-J5HCiP?VF!VXG_@XFNphct@b-80>ZW#By|H75_YQo@+UOigt}(Y@ zEp%3*?8gH0PToRbg#MCT?b`Uy{81uykHKD2r1(Y}xh_||c1pjIC*9jPQ_HK#mpW|_ z$ATr4kQrMhLCXc*cs{(7QeGOm6G}TSSKGD(wB0M>b7AWbMK-wx3CT}g^$>I-OB@|X zMagw;Xj`x**ARG}&GIv|dGGm1M|)`hys&u6Av@7xbw_1S_Y4sKQ1!cBY+tXeUAUQH z+6|@7GAYVcq5{?lT1`Qyer3t`SJsuC%aXgav>&^UFV;^-(Soni|KU>KyuuzapaPbo z>iorV5|ab`TW5Sf)Ty4lK2?oBOgIDhd8_|E<8Leg0M!5HR^n*>OU_ZRi}kimc}pYJ zZ#9NXeOaxBNp}tWo-Dn;qTl{%RllNlJD+i_-x$&8#5Zb2v%?ejy{+RX2jwSIK)cIt z?;2@qb*Od&B7Vr}{NO(Wgg&xZI*ryn4QpExDwA9BiQqtVe5yzV8e5}E(?!uY!-W)9 zQN*rw<)mWXDRo{K)tqZCsmVhsjoNI)T@h08#Z07xxvJ&GhQz&+{8u41YRa&b&(AH( zbhIUWSvtFsM)eD$ys$LMcPHMB>yn?3btmbpz5SB{I!?ttt!jTtKjrxiOVM{&d*3_h zfv_;~rKSkENZo1jG*jrB^!~c{m~9|JnS~%_Uk-#o1M%9Cc+E8#yn-k&{$Cp-`2kd! zaxLP-Vz?)3Sms1!=?uX7)wSTO<{5w?3y?&6`CkGUe1g7o{x{L8z$n>Im6q3%Z2;} zl23_B4!%C29k_CbDa@mjm zwr$2^j7fTzIza8mHM4{CfCcbj_K@#($?WN_Sk2XQf1JDfSBw7nq`&R^Z(;t0_Za~U zr+>BFxtcbm&j8KnE#)V%ztWJunks+kV!rU?!oSdb|0U>GI`dcSZv%s=t115%=0EqI5r|-YDjT&0G#*z4X)3 zl4}^g1vq!%|1$nBZqU%vP*Kq_($U`pLm&`pTBci!;9Cq} z2>3b)5JZR}CZQl9p#a~Yx&i)wud6NqJvrbm(Kram1|Xsbg6M%)9|0@?01=RcfcAeE zkQhWlN=8mZLAchWBeX&a0+CV^Q4kT6UEdM`2rbaVNQD#_^sUKmLOfm;kb~LSMHLN@ ziAi%n}Ri1Sl=V@UiT#K@M;l24FVEc0MP^F0Oz`LeKmH8v5Lnx zX}C3K?Q)xHL&wMmS26H#FX&}L0^_NapJ6*v^i(W4?etW_n{Bl3eAU_}Pclq%rl>p~ zDqs(ojvlL{(Pd9q&^|9<>G#LS^fbLJWm;ZIIO1=duRW>>pYA^XpkKrBC8z_=*?uon zb>!S-rMF~qM3onlx5Ll0fhA+L8B#2OuH6O`*OS7|VM*su+jU9-W5<`6u@aFg=ecdD zNaja;U5q(GrL?PScy(^O&vBc$G?hCOc`%`sRl*}gi&`y{9&*(@yITzxnr3g!58Aum z)*M|1p)i^uL8{274cPHRAj2J!o>?T)$-PCckcyCY4*iCp-)YSqkZB5356AND9-)V? zNJe_Tt3-YGOf6+*Nl+*)t#jI^*!+CcGZHT}noZSHEKIT`1|ee+rm<`_KKHVt@2?tb z;gq=oaMsbET6$42*rGi+#KNP@ewFb6*R=I+aD&N7f3a1yN#8+FlcSuXg@U}9H{E|) zZI8Tuv=%SU662DxZEEL+_1#z-N*%f5=`y_ch_$t(=@Ruu0zdrkzVXUvMf~AjC#T=* z_gW|}vNfv`S9J1_DR}#$nHKbQ(|*x7DfQE%K~o)Lt_ag0+WQVPR?hI7LeTz4b+UI_GimAG(uj<^DR)!YixY&Q(30}PQ=J}`;fApL`4lXrIZ2%q?DsR z$nI5;XVn@mmo_P&;+J%wy>RKREj7PPQ;QwkTC;r5khYT9WEFfY7}`5o7(KK)co80CY( zDGOws`t=2_G~dlJ3p;cAX#Q>(BGz;IbVdspWFckVFVctnMQZ_HFsiYcpB%os&A%lm zLjEwoZif_%NatrI4@Xl`eVc8p&raI&Ek>D9;e2yd`&M5+5;1v<=%xP4VzX>rTqxy@E}f-C+3q9D=cfJoO0gW zS-%??-9wr5-0gYryqxFikP2Jo7>>AHSXh>mlLP0E{@{P4tRcPDSZ%6bk3AN7C`aCj z>hr3j!+oqeRP>!mx5?HhkYG1beId~V8f@MlR?qty5FF}QJaXvD9MQKRIQ$NIL|5|| z?eq;&|E{*7=1D^f$3OI??9Z?+jk$)zUCWTEOP}yUA@JS$hr_EDe7jn^R0g>xyMJD>_CypPt6)EVXzH_-CW$ODxb^xq zIUKckV_q^IrkleQ&5hOT=x(X1P$VxXSX8tIhkj{qX=iks^_^_#C6Tw1hDB~pZPh?~ z1?Uty@DoWCra+pmdi{+V;D@H2K_9AVo#L4(?Rmg}gwAHQ!wV0dXmj3TMzNlJE!&0C z(y6afznz-Z<$;UC(S}_MSX@$Gc$q5A$W-F9Y8xEQsc$oWx!E;9KTRh1g3F!m0HRR% z#64;kyDZ-Csk-2@-t0u>U!ZA;@^m&ps*I9K_4GU4AQSRmQ@#HtIxIZ+mbJw=n6aVN z7hOu(G9Jx`vi{;Bo`tUw@jT`TVgIJKchQ2#n?*k}RTrIEP91+cST`95o$%n+6Hh7Q z9gih_HwkUlwwmBd&72(hEx9G|O^FKvsf~4>V3W{z6Ce~UkUGM~CFEL(>&f@hN%7Q} z(~j2@eRfk;&jXPK(NBD6@8RyqAz;K4l93+wdK3=UQI%wlZ18l6v%h6XG;+^oNo#Fo zf@-L6o;L;2R|H>+iBb37QxN4$;j9YX2oZ9i(s@EpH>sy%w{FX%q@N(`V%B*Tn9m%VAE zpGcD1Zr1>n-9|VElPCA%oet<#FZb>OCb>*QF9eZu{T!RWAq`jDJS8SIC^$7O|CW3%Ff6wC*YS zv78^(qdVK|lgZV#$!h|h2ai0M;HjIUx5S@p$>q90GjU7B0U}obIh|v04dFHJqVdU+ zA0b8i>WMM-690@fsG>Tc{`BZai5HN7p)_doz-H|H8im8UK!}%awToh!v`BI0MxR`N zmS1gzYeEd`zU60b0>0gIMV@6=!?UrF_oAU4M)T4Or~B2Ns}bzp;YOF62h6-H<-3Gq zFvr38)1$F>8?@BhC5DoZ;V}U^qXv-cu&;LkP1@S%Ovv8@9 zd&~1VZ!(UQU&dAZKX7u8Sbk-wsv$73Hfr4zbuYUkKL=noZ- z*K{rRo>~;SH#`*1L%>RgY6mk{o-F05Dci5pVrHMbKWYd>Qd$7Tw^Wx&KwvTH`kiqKRnVGikP1*e0(C=v|)8y=VwDt2B!@ zllkKJW3KDbwNSx7bASAm>G%rJ@0R<>@e1I&UkneaT6FjyDSzfoh)XK+sHL}Gv!wS| zL-W&|Vnt&5)5ZfZ?hIwaDOTTWP)agqJ0nUt7($}IJ`LvB-Z8l(C{-S)xjcKF#o(ef(_lqM z#+jIapcy5*XL9h@q5>UWOTGndalZqx!I=N zKwimn%4?ndpD$uu+ZqpUAY?+=BnDyww6k1FbI!yiba#K`x+GXXK6!i*vd0RTm!%W7 zmG1J-V)>kK4i~I=P6Ic97BNK7{PSXQKKb@Y*~oy%ZErAQj(*!f&paPJm4ccoiNbw( zc1LUA)W~)_#cVJ_MX_}&#b~T8>JI!Xw|a>Q!BR!X(gkcXU1jKksl}PKB!pzCMx8Nx zT)dCWoA9U}k58-E#8%&=vu=1R@=Pw~3cz?6K_X$_ulT~?5tTK1#IqZhH;{k-^dg?! z>Ku#S@QJUd6t?B*xk=h3+>>J_VOcBdva%6&@5XmvS-qo+iW zKL@5joPJ1Q8W|?@;^hp;K{)C(`WrJ+GzPd^ZFR(>`Mz=tKt@TL!VfXXe`@n(;9O_D zk9bZNdLrwZ7FzU2Moi|PwQsp`clbBdRdsBzqFyNAgA84^oKX*8>S?8xS&EnIOiGys z@cy8M>e_tsRI_2Vn!UR&su)IFM7N%$SIU(EK6vMGIo%_|tiy3AsP7R6?Uhv(Z}9pD z35B7ha9IO%xK9ajYz5{@3cYPn-g`8>4B_E1GfCPv4L_#!jf-c9r?VUKCq=&aW{wzz z_7E%darB}C1f~)j7%QBQnm+S;yjk<#TU)cXTQJ&{L?P708II21A}PagV&ENDeckYV zX}oHDOZ!B2q@4P0VCX&#|I_cQ_4^3@>8VmK;bn6Ux`gco585bJN#Eq)6!dy6S(i9$ zq^(5)D$r|~K7^38xhwZF=)x`u4UytEP`hiHIA^9LiHq*1;rjhxqNmzsAL6bSSRxm( z7=v^KqMzmXrKJRMd2Bvi$8Fgmjam2@)ruE>Nj|2KMk%Q;x1f8nS2d@gn6{7g27q%#Ue}Q?uh`xsD&A+GfdCa!b28aD2d)0XvgK@r};xd?!*K1Vj zW760ObDOyWBst5T$-BU(DzvH(l^f&31^6>ch-{gJC8SRM{kimpUYF;%@M)OniLq~p zyJ&C82#%0%^smZ7M~5W8U>80omsT2VS$}*6ORXnMp;&3FYMJQC?$%{ohZ><@r?hJg z-8AhqNCGEP?s0ssN9z8Z`y6W@TC^`+uB!HMIKJdrpCt0cnzz~mX-cDFc?@3riy2Kg zxvr+|_&s14dGFkJ>j%T?w)Zk@}5a)hFF^#&x~;P2Y_QCs%pcBh@Xk%WvIH1TnCZf zM0z)yuX!3@yavO38zD?iw+rA^4fz<8!@Tgju3V9Vw>(Y6vsGm9N*Rt``j;PLfn_di z(gbVDZ4NPd$@+vevc|*hF9%OdQMZA9Ne%On%;Je!eQLl4t*+3&V zI;nY(Be3l&z)aeZy85nNVj2pMzVWmzmW^AuO0_Suenu4J)R=&80v`40cGm;V<{GEk zPK6T2Q}(|OadT5hmYH#tS3>AgS?xXv((;4bA9&d6v`vRHQWU0$s+C%q=Ra33v!Xto zx467DT|T?ionZV)L8A22Nv#p${!VheRL1>)ry7>o7~6wDx8dFB!ZcDf2+MAFncAlk z$0O_uk-a~a3)StZOR1S0M&z>Cf&*KpA?_I-hx$>_plgY*vtbl-@B){EGp!!duU3vu zCql}i$%^Lu3SjK)QA7DVlYKt>j}-J+e2lVj5xa{4T$KIhb<*%CSxOY$g74TZN6cf; z;%)zu(yTBz4;<9BQ0&DDXAg7J3A4fKz%Lp7o`jLK8%LwG@h4jO*$wtR5SX+K6~ z1cxeClzMifOx`Y0uj}?341r&fbqhZnfnHV zMhy0e-8AYCbq2`P@U85wLx1PYXoyUXxNn=;u+CgxaL^xW&|G`!-cZ^#r~Q*4CyT1w z;aW^>dU#-_AhZ!JRwcVj;8ewOTEspv|Bgk~CYMt-**rv!6gYP__pAC3wcP`~peEaA zT{}h?tg(g^%q}o9=oT%q9bWac^{g4yZ&Z4gJ^3Hgekj@_el)MG+x^0)!>666GmNxX zQZI-vnZ2?M&Lv!xJZnrDV}RMsq74J!r&6wsE0h*|X;MC{cdYWsj$e`XA%oROWRgXd?z^2Jb=J1WALO2rNIw im6b+!VzAl&0vE}-=0s)oLVF@R9&{B2o5}*Ou>S?B*rbgB diff --git a/src/windows/leash/htmlhelp/Images/Options_Button.PNG b/src/windows/leash/htmlhelp/Images/Options_Button.PNG deleted file mode 100644 index b33d4c49fcca2a0d66ed09211917938e8d3489c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 4116 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 KMNUMnLSTYlj~@R3 diff --git a/src/windows/leash/htmlhelp/Images/Ticket_Options.PNG b/src/windows/leash/htmlhelp/Images/Ticket_Options.PNG deleted file mode 100644 index e26fc1e4598a4a9c96d3d84a0b53b623f63b7cfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 6267 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 diff --git a/src/windows/leash/htmlhelp/Images/View_Menu.GIF b/src/windows/leash/htmlhelp/Images/View_Menu.GIF deleted file mode 100644 index 84c08e6c4b874f5ef060f3b55ae5c7ac85c98b3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 9618 zc-lpFWmHt}7xfkCkdj7Vh#?020hd%nLAsE8~{K700RI5U;qFE z0vH^CfdC8)U=RQc09X*f;s7iJU||4@0C)hvg8&`};2{7H19$`=000352snTM0R$Kz zAOHyfNFYGM0VD_@!2k*Qw;Mn}0KowW1RyYg{A>PUgCKwd0SE-(e=`sRfEWgz( zVJr^DLNFGFu?UO@U_1!paWEc&@i2@>U;+RWK$w7o2@p(xVFCh^0GI^ABpghFU=j?I z5Eubq1cVVBj6g5~!wB-fApCRVpCtcy{Tu#^0tP@ZAcDam7zn|@2nIp00D=V(EDpg! z2o^@L2!aO?Jc!_N2p&T4FoH)A0)P-egn&Z`5JG?v0)mhLgajfa972K+5{!`k2lg*$ z|J?p3`M#JdhwC@l0CEOFNl!O{o?zNbS_V_G zg1r%pA~qSR#Jv7Uf$I_bI<@(_F=C1Y`n$3sLkSq|?)y!WX|iudlcnC=ep+mlrTXd+ z7MBw<&eMK<0qgX_(WJmALDinNp_D|hD0RyGh$T#xSXDjwEAh^Gs@#m`bL-u@@2Y`R zjNMqJJ5TDHp8gyoIdeRnYxDn2_LZkedZEXUnb8RLtXX;=OQEeW>sf0vlq5p;ZqPV; zG~+Z;GygHT-a-HAq!HI_psZM)RwOvwvbGE_|Ic&FVbpF~K@RRTI zmltkd+SA8XM|d0eRvKSFD$Z&@e!e^wO@}-#tKNF>>B7>+ZAK2ixdY1a*6(!ReE0Wv zbnC7^y?*`g;a^h0BVS-qbpG`pE{km6bC)gVea_D)W_vTsmRJQdj%m+4AW!=I&6#gE zWc-Nd|`(zOoxk#ZY4f-#u>hNUQF+TTl&YB8Qd z@vgs{?A~gr(k!{VH&dotRzZ^qk3EKqKHqQ+So| z*AGHxJmWSm%4(UL7ETv$3AfL%dN!Dn@-zf0$&zdd$K89~qMV*{-u`#d!<9LED~F;0 z&dkSam)0!3lDCdXDpqfnx9eT5Ykk& zH_Ey`o~#oZ_#%I}pLi98%Z{_;)63*oT&+M4nYYrv`}{<`LUz$o-#~2U<<%!LlY!ma z?>1QWT;DCn+}mzgGcDV$-?TZc?D!gZ?`Qo{R{Hk4kNZEin`S8us+!0jMgHvi@$U3# z&*TVCWjhNGy<6XzEN@l+`AO#|9h`g4H3NTCeaBU$KS=Jua+5B5!%E-F_eNBXHupZ= zppx1jRptn)BPt5H){V)7hIQlMO{uyG88e1D5*b^?0r8&b+`-tRz48}oS}6}aK062* z9+F(@Toq>SzOQ&WHM2fNnS=X@tVX^$N2KQv=}cVMXfT45H;|8_qm)5qwg zx>sCf?D6XJhpL<3tEzlXX=(^~4EN@IN` z4Hl-XQXAM`J_+F$zE6!hZeQ#(VC_4fw}ucDXygnQ!?b*RgoS0onqSjn@W%iTRe=NqaE=rmA=x9JA_T|_l zmpKtG~+RnoQY zV0zM5@I^X~OSKNFenPA+M8DJ>ez<);bu%(o_N{WG6#MfKcz>1Q6T3c+AmyJX@U7m4 zy+sbE&h;xu^jeNulwXeZf2YRe0Fwa1VM-85eYx{pb=M^L>J&{5!{&G4Z$ZXq;`N>x zW^3PPxo&xNk7vCYqGAI&iApNV*?B#YYiG);flqAsKUJ%XeY~k3&#jTqOK}6BPfKBl zkjuH8B%+RQ>JC&P-uq|~BK!H7p&iTq1$Uv<6B~zjcIMWF9Oko13EW1dHcWB#=Cijz z_KEa~z3{)A!?ZakjV?HO*RMk#ENa$nKCU(7r(olisrslM3dB9XxIeFPU@hf&NU3np z_86IO8GA6WfALhh98h4^l>ig{<#dnrg;0%&^?-SsqU%oTVppb<8v6*=+BGh@lOLOztR-cyw-ZIhSeWk z9dPVLU}xTmk84d=3Ti?_v`_*M)^+JPT0PY=UX^o&0vg5Qux!_6NI1LAF$EWR^X`E*nLGpi?^e_b< zFxLqA)^AqT+pH-+vdKYx^jrO^lf=lZUs3XYTP{Laep^k&yFX4;1<<`Ig8PmRI;`_4 znTlSP=z%!Kytjthllf;16mryE-vTrm`$39qf%oP*&A)`56-|clY%DvHRlhrnI?@Q@ zZExi$8#>>(C}}C%Gc`R4bkRl%50e{!d(U5A=Cqmr8P1xHm%i0l6H($meAjt2f2Qwy zcyzNsDSk2S`81iFc=np7UTmxSguuJaAGL?MZ{3e|))yiP6Jr5=kEx_T zXpPLfM;H%u9^J$7t-Zj7@p;B2rDUHQuS?~O9u6m`TrchT9PE2rxcGWB(rVbPf#%-%qnV+BW|xgkrInuOUR{`3(mt6-$)dZSuY6ZJ za+`De_{Z=fUaMDw`=zQ3n^|SADV2;Hvf@O6b$O=!%Cm-9lI=kP2ZK@4eU^(H%^#Q# z=Cvu}jFjFnKmDw@T4OGS^8HGMW{UF#cbH{NSY(y_zyT%KJN7SDS)3_Vn8j57o`3vw z$L_y#S}6xsJPTG@JuiqkLEdN=BMT;lZqo~D-kc%!H14cIB`@hx-GR?s9UPZL?l4)b zc`G$pStxkh=(t~R3RnrSCOu}E-?OqU@nLt@cG|JSSv<22d&49X%A3o=*!7eR6~uB* z!@~Ky?5N_LQgpnZQ8Sl@F*B|P7N>@AE-)7~hG~`H+o@FBnZxL;gIE;< z=u(0orTU~%hrAFC&(#W#uy~bH67umFJ(}aQM+{Q8h*F{sEEZ*QU4Y1;*zLe-(Tn6j^PRo{$at=Kpo?`7W2yd?Yu+O zXR#ct%#_4W zq)l_jS#F(5Qz`=*@m5Y$3$Flx>IPXJZ9Ga?FI|NyeW=s&Wi`JO>fS3ij$jUv#KU5V zK1(;mI6LK;j@K*JC)^fO)MmUC=fpWORdz*&OGMbi`QD4AvY^mkJRyRzm9dvN;^|F6 z2;yy`&!;d?i#_i+;U1v#$XU~FQzji%i*jA$ldSd9kuR|+N)_KVCpUR?mg?z*W`a*r z&#RmG%a=7oJiMgNWE5<^Jn-;RxM0Eew*&(I0&``_VBzA4h|59yku&08A zW9)e^g`A#UytoH#rNX^~oZB6Jk7DKT$*tl=KU`pxb{h_U(&0fa(O5Nez@*ZM$5zwS zdOYYQdGz#I9ygGQHpX3G_PB}7R|ako$wL%t99(m2hggc zJLGg6N1x43rNZ%U+oM4&_k`gXy5R$I(5H=Rjl2! zyj9LFbrp5r{0mP&`ZI3lQhE~ntHP6-KhXQFB^~$QYCYGAJ1dvKFTL^?-?&o zO<&*h39TAN&T?!rC51xO$6w8QJVH($&qR*!^%%28AF8V+#``%Gg*^O8m|{J|#wRhI z@7lf8{%HxPX7Qvi+3M+q*D&_P`6656GWoQ0m7}L8u@yVH?>|~KMo;qG`$h8rV7UK_ zW(rNO_|D-?dVu3?&&i0gTw_-Fq-t?vB#*baj+y9+TiyrE@XgS|R;DK=njIgUVW;Y7tLKY8mZ&#v9gp z9Nc@MhVB86olGM=C8qD)khRpQ?`uN4WTPN?E;Zu~rkPM%+obmNSX`|9?N6OG19aSL zn)D~qWwrtu=Ze}apebvn5akfD*eHB0$T?cWwC;1IS9t-| zOvAl6pdDGxWAcIZDWH*KQ|1v@BFDkdWBjtXv%Z(k`}WXoNA0-MSHr`{XUKQPZVXs4sm!y}VfXeH-KS6~^)?^IFN5_m8UW z^rBlD%c}G$Ihy%hj`DU&H!9F1XCK969Th1lnfnKordG>+=FV^F$iu}F`BZR_Mx7gQ(6ABK z!tH;eTJygtVy;vpk-H!mU4H2%8$;QGNGE-gx?T^xD_^*ac$TcNt(=yAB8^;yhC?-< zat#r1q{J+4ca zL35c1zlDU{b~wbwCf?;$HcX>DOVj5zLI^DUje1W-WreHUBOEO``qWVJJMBNt5iBnS z26IaCm9ZA(vUVWW0%+4_vhK0`IKnF>afLCW@=jB_w^$5;pIuqPf|kQf4}HU$>A{Rd zHuczsT932)@C*#K#ZA&(nqCPIxet#umx?dD_iVP(pX?B}tw*!Z3E26KMpaA^9>f(n z@ty2k`cBVr-H)SsY$_{m!ZD9O12xIICef?@&_I@eMDg73X04Y=TW}UQvK9XMUO?4vI**n z%$)gyu{7kt6#9ZVcyt*?IVlNXP8rnlJh z^A?!=NmOL>Im5Fzh+&$SzbKqx5Sf69E`HJW@shS$^7OP>WR+xgKOxa%y0E) zv%gI)b}Wb+$gUU!ZX86TlWo3psxC$QUA);v_~voRYLY*lTiFrj?|7VNNXN8j8O zH>_NsMIKtI#|>mLB)OoLp$mk-#nJwSZ)(`3>(|!9Ot+GE1zS6;q!(GUP%ZpMMIRq# zf1?riTeRcbB2<{v$!!zu{kC7JPf)7OEuRYFjMlKS%bvT7R)KAy-5gA^bFqFqs<~(> zRdiJ)zio8e^48X?G(OTct7sO)EGtz175&a@s^(ZEWNKqcTuZxG?m>UQX8)a|e|t1{_DL)7(4Ga%ZUGAy>FG1E`N`6JBu8J=$fGMBG$BiW|Pl=XJVffCB z=Rd{Br#=5l+axv}lO!gSZ(X!yE)JYIQ;ZNEyqVzDH%7z;D|zN{oF z0xsI!{$`f8zR%_-xnpu6>Y5L}mRhoq*ojVUt(73PYBpNZm^IABx#U`+@N{TnP8brP zSK>D+wqD}bWJy_;nn!avaZ6oStK9pdbxbCpzAn~ZlkBD6LX~H&jW>I-Y*OB=9?sNV zWv91Rn9nW<3)Ql;G8U${1+u7xxOuw_1{6dYboNA?49gvu?}>>H!fzZ6q&U(_HApWv zWKm-BUE(Ej=kDR+9S(`ETytT}#6~pAG!7FIWU}4QsTk1T%%&h-t5QLz&d<>nGQ>c- zLVablI(^+@(n%xf&voPLBdSD+<$s>m7Oh?V*fmY-qAS{MYwKt8o`kv4{=0#KNV7z1s(`iLF&Qn+K148PBBEQb zY~X54;vE%-)wEX>!XD}_pA+cs)s&|jNf}5FvT!@rhND#+YRDo39j#K*cy++A9F=3C zTK1k2@jrUwZzp5gT?m7Z$Cm~aB;K6p7tUUp&`ywfM(vb+T_j*&(BWnHxv+q0f_5sf zIQrOhcb`ZWmJ|BWB#u92nj%2&%iJ=TUu3zZ))04|lFx7|Kb5}o`2DC`HMbS8}1SP(Lw)#!&l)cyTQhppCzif3)m8~S`)^;K;tnEz;U%v?b z9Rb0g!Tbuk9e+1)QmAxpiH6>}Qx@r;_@8yL9aCh^Q*|Y0v&E;;Eq5f;GFi6Mr0)z} zgnRotuDti_e0wKLS}Au~>E?-`WZBOdcT&0d-z$rx2m?}Tj4&PE%Jyr`L~+6abCI(% zH=pl>`t=+EoTaTGH5!cymveJ_1KsEmR!_}Ei+>3E2!-pk9mbBz+3Rb&>-MCkbVIz- z;E_-49lo)G-@kkBGA%3wW!3jkGwb_51zCG=#btjBO0g7l54w!bLmABOH!4B+T&4#P z^TN8QcquLCd1`L?9sRpp#A(LHUe56x-KX?&u~>s(jk|ujPn?mc(HZmZvO`Z7D=+=q zMrRI8_iI9L>@xH3&s^l#|0VGNk4FS;>dfnR%!3$q|< zF~!Qi;HjzI+{g5UT=!F;5y;7L8|_B(qHq={Y7M9mHfXeE=iv%$j}{3MxwiAki+Wk| zvq7l{Hc$uA7*EJBp%D}9(s99ivBWWlSTfr!>Lb`yrvwzWWCwBJH!z@hB}(GS5pqb0VHo z*I!s)rrg?Kw4PYG@=L|>8N<~_dorOFge(tz2dl%B_jZ5Dp*=_Jpx}3=Og>HPBUXoW zT2AAX#pkKyTc2)IP?!ImeyiW+ES#qCM%(tnkD@VKEa&?}_^z6~jLf+RBb$WAHtM)* zPkLAa$)@9jAH-qR{ctF{&ob3{40?Rym%ffX=I&XOeEq&=VYh8jqGH2H_R^1(S;_RV zE~Z0Q@140zjt95*=E(69ZP~6xLB&J2qk;}E3Xu6ZbPTZITz`5k{9S%oB&hy8r87N$ zdi6QcJJ0N;J+xG_$ezk`IOegwnG(W_gT3?K#r6!R8!;jp)vYpeE~6|?E^EJePBIU% z2YpUEYbn+5dE;Hq-zSw{6#6nttbJ9nvU0-N%aXuc7sse3j^fzU2AJKw4zGi0EmLHB(UPkYx3$p&o(eCEGUw>I zwaL_i#;R)9+Bkdc1P9xPW%LUTk{=D|#zy~UC;T$0aAi$XOkyxdH&=PM7we%>HDD+z znQP-DH7)WAZJhQ_?~z1k21=c0*BlC+UNvd%CGVC>iyBtf)CQK})jxkgY;A5Q35&q|{PlANL5tEo_&2h? zJvW|8?BL%dZ#~76LmIth{@#~pYbqM+f1NohJZ;-CB`mD)dT-#WkdN61UIo?S zn6KF8Uj51D%Q^RKYx4(bG2s@ym)xvi=|hq4jJ2gf5fAJxc zoio=yxH#JR9DI2^Xc4S=OE<}bO15KoP+0%%(pjx}yEBVoljiazi^)1%09o?21LatQ zUv<-y+{uN{e3S7Ls`P6EmMF1XH@Vf-80E`(FS1K0lbMx%po%N1KB&K1Y1J?{{Vis8 z)`0(!!-!7(p=;xjd$g1Bx<-6d^bo=2-nTz2pJ)WLYu6d_PGqm@c1{0E5#gp36SK~W z_c;@VM*XuBt#g;zA5>*ZWglBGdNFUce@S(<4N@tWu~*L@E}>_Smgh>D{G)y6wQr+< zzObl7a_TSIg!Rh5)N+QlZ*SG5i&&R>>xr$?i{BQ%XCe7RC(?Oq(jtopRO`jt=e>K92{x~}Vk zY$bxSDe2J@`Jtow*KC;D9UQ2LKK0VFVy9dJR;|j+H_@%zfWr+o> ztvs5pYvQWe4;OL=nJZ|e!_1_b(^)BWLFW5Hvb#NWsDwHq*9U4bmU~6tbBkJKG`-dH z6!S&TC3H%7HM$w7ou~Q0az8#OK~k4Ts$;CxQIJ(BzFhC4)VyHViCDu)X&1&5^5A&|(3Ta|Y-pu+u z#gZ!54b5s~$f^73q^D&JW{gs0Wkg>mQfC$D1~3WzB2|tO0 zDHnP3CH1<0XO;Y64OpYeGS^I(4BK{})y<~YFEQ8u5T`fm5Z;_P)KW0i+RM;7q2IQw z-!ZG-{zw1T?ocx?+zAgQmkhm^GkAX=?k>;|xCi(88uY$^dlL0qmOJ4Icz78e*@r)o z8(z4dF)D00!aGca4JK5Ehc$-BUJOtA4u7T}{+wtyRX;p2VPKD^oU@AQm2Htd}+ z^j*`fvbqFwSeSalhR zP#T#R{xoMEwqZG_O*FB4(Vc^=0moOS? zYID}x=`y}^caY|R(6^K9zmB8Q%My=dV$m&89bbqBzla8@ K6LPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf5_?HRK~#8N?OhFY z71g!=CJFfg(GbvDS0Vo~EK%EPQfOHZ2q7j41VgQ?>S_f9v7|K1zFOqvK~;*hzGAh( zL}O4`gom~T`Ab3we^!?%75f%1V49zsfQtHnBxnLf3wis@&%JYRX6|2Zaxa-Z;jG*_ zbIv~deBaq;@0r}$NEg5A?FAo<03#4I1f&aWgh2zJ2WA8W0#eVH>gpFcFZxU?U7B{ya7#05ZZW{B)ET0wWMa1f5eAls@mX zS`R<^GoSl#hk-+YIUG1_11VWLZ(@WMWQ2!PtI+)$<%VeP?p3`db93B!hkBWhR#CS~3MVT22ouqW(4C4rN`90m@{ft2LcpD4zD z;~UVIq=a~+r6l2IDv@M_o{oKmVTg^PGVOWTJT(sJ^=cHwd=I6q0Tp^x3hOV2fWT7a zQT<)CHyBX3aw^W3U|&E~={v{RL0CUwz4R9fqhd6turLWxk;4!j9f|0uVe;o;5#jcx zX0o#Xum=xe64sP2L!!xeW_|ltuc+2P8OHcr4Kf4Cq4I|;;_!bjqw|7Np34aaHm;oJ z;<*c@$PUQ560*eH)b%RQ^=&Lk8rXS;32cpup1`oMFbX{*WTT6Tra}fNj8J&NNUGBg zGg(@_Y!FmzC6h5~csLbh2Q#j#LDBHZvKLeO8=VUoR0?Z!a}e#c`ZwizZCp?K4Ylh7 z$)N))m6wtwDyQMdDQPv~L-3@uFDj%pkhKIwS>Y(ERXMID8Cfq-wA5Fo(ni$ZgV*pb zR@|zM<7QnLtshf8``UrBZdy_5laBiJYP3H4jzgYMc#6J7BQSzIoiMoJ)C@JlSlsbvCF7gnykumUKe)$w@<)|MP$@o=;^u!9BVBZIX>y=etjCPHS&bUKN^9N zni0lCVt7mxqR99nBO_%4RE#iM=LyZET~T*NaXlHS6U%Y`Ppfnz8`bIih<^I>D(u-n z26k^aMvq9tf7HK=f3%7=qJ9$cbCVR=IkWL2c{j7>PvAM6gw@CXg|j`Plw!J!tKfy| zi|*24-hgHuANFgy_8LbCx%VOC#6QU2G^1u4RPNl#^t3Kq_^*EhHL@=5WV)^o=P`WO z(QJJhufs6ISXB4td*KO1*f}gB0^#A|auMOF_FIIhUd5yKm^B4U>i&fzH?P5%5s#uy zj%$qSbitH9p4DPYLA+QH-AY+ELyc?gr$|I z`66s85N)aKf*M+i_H?a$9eRJ6u3Q^Q9#tOOrQWGe-y7ng?i97nF%TRoPK`LcUFCyt z&wG(JL3I#4mRhhP^Ra&y#%nw+t2S((m^uNQUTwha+!T9YCZ5EOZ=5gl`<-6`Pm3q( zGRJwyBSRB<7>%Fxf^NKm239fzj(gzK8uU1)6;`29V z9#~jt@6R8CkHFQ!VcU!UhKbw0kNP^r&_GW?|NYuENc;O+SezVu9EAo0siX9%i4krg zBlPw7p@|XRc&+2l7&M-*V!6Ga2n-a5dUg88XA54=9*>nrCgCY3gR8+W$OuzI!UzXm zN9oh^#-7km-nknizzFz=fb_}vFAc*{ALVd!Mt~9U69MUT7aO6U*l{;TARq{M^#$&L zjKo410Y<1GfKI&jk$m@U+2qpriM)=0Y7k$?22S5Ia&waSVz#+gK4ji_Dlq`K{;tBsqM(8fv zns}>1yh(BS@?~7Paz#$`bRQdGAi3$cEatG^5Dtm}dY{nb{UddFk!{Vj9B*tv<@S24 z{M}BR{;WebM)?@3?*v_~^I{IKiZ$u+RVKlsK2z7Yv15^vl!)5DwBl&PCunUyYd1pk zSA+Iq`RHhj)s^M+?onvHN+figii$QPz1&^%w!OD9T-%BBr8pq=ICv{V(Mf*{1c!6V zL@pWMbP6rbLt_nke6wCpq{y~5CN36l9kHRKs|Sf=N8`5i8|83R@q}&)CgN8|{)tm( zscc<{%KMk%V5l)7<{+kGq?fyE-nREvhEuz{@XXoun5KU#-AqTbx5ITL28=`Ear-0m zo{?tl-s%);oQHruUVUwCI3;)*Gdh-%J4GUH)V0{Y_n7=v{rxk)MKAbv`yMxE&&C5z zz4qdXG0_+&%41qGOHnr!8_Jd{^;GVqo!4>n?Q`%keH*pEmguyO*| zo2qh58?&GDyPCUsO!V}%8^)mf0`T^GAL7Ov;!ywoNt`*?gRwV_!sLu3e0k|h`~2Of zQ*tC+YAbsNl^N+sP!lj6cq|{iTQB0|*#@lo;2Bg%gZ6b~~H7hOZcA_x@*i|du{-*X-6}TgfvU4E`^Q*;JqP&TlbuwMYtDGmoKus5i z{^t7X5im+HrLQxZTMpKcPCulmVbzg~*tSGXSS35>zIu2{U!@TfI1ZJ~LE99UQ-UDn zN7K(7TY*{Q>IND2b@&r)G+Lh;loj8C*JM6QFjY5GPxBip*FA=#U;o+|RK9r>o437( zQ>VM}=W5{vCCttHrW}Sw>9Vc44@c|qWM&NF$HZVt({h}wDpXS2_3lM2C6C!MPh6XT zC;wKDX0b!cVGb?ErFSWxr_Z9rc^qxR8JhG-pkyU?Y}zGI!8&;>XOv7Q0M$=P7m5~4ksrRS zcy>2F`m_r-j2?+;-%XW`&?(!R+n7KjPrXr;|qg6NqLx=L56B0(m$As ztm$-)Mmn#?ZqT{N#Z& z^@UaqN6nu@2*@v8x`b;+L}B{mG)Uryj4?mwR{GT2H`|(aqf!Zhv@^*ehrJcucG$K30$ZWlwx3I33<&vy13C-w<@On zR|8g_P{)zw-GW#57|GLxbn;vk1Agi|F(?oZqBJYiaL_Evn-!?G9S{y(cSkXnDYh<{ zIpMw+D`eg$;HmM;u|P?wW~m~z|K9~Y&GvX>Tjfhm-Fl9#p4%2f15s_H^klIX)a61{HugAS6MwocRa8pqF6No!NV{D zmPLR(VUOWGp=A-_i8BI&jDTeOl#OtZG3VhJ0Vf1F9OVVU2m~1cHo_niz{4{FlI;@? zM|l}A0>MOpJz+4>=dl?9LO^O|Psj^_5eO;*rbf79>&reXmOpQ?&waQ9BVcs|+!~>; z+1A(yt-hRi{{A39_k?C&Sy#mQlx@vwUw`NM(h9NID-Q!OU#}j_c$=xqY!^86i)&CU z(uL`d1Iv&+YdubyZXLBK{(2T(Ym>JE`n(K>4BP74=^Gf;o3(Wn?AlI0zPB>`*%P^s z6%h#YkapAw6Hl4C%w$c;U4Z|tu60UFdZ>B><`q#=CE7?$(|U@1R=%Etr%%6tDQ0c$ z?ObFT)tj|-mF?8dWqfaCxSJba<21GE8t}>!_B&Ho)=bRXyc>t@CS8ktn-^e4mZ-4d zwb|Do;8C%pBU@MMb_4hP=)V8u$ z=7SLkECL>l(3ebI=Bnjj#)BKMPYX#8?8epyXJU%nAqfxd>_!VEk!m@;4QZ=>uQOI- ziH9FAK+}`Qls>s2gYowuLu;O?$e~T)eR=F0tR_9?Arr;#bmNUhA~6jgjKIJl;L!+u z%GBjXPZ5%Ct*Mn;9Il~IG&jf5n(hx3PbfT41KQkr9N|SXad)NY~poNU6@i$l`hoW={1N{BX*spp*{|$;+W(2NI z1Uwp{FPXaBLy&}Nvw*6ftwqx;CG(m6NLR9-L4>Iuaiq*$cOF4ioqF$R+DC-I6mFI( z-d7wa%hzJ-opUjb(<*pGnHvlq0v?Ufr%YWQ^p4M_WW4Xe5lV{o@fB^<4R7ojEH zLq7i-VAX9N`%L-mG4j5uY?42H)dW=RTU}da`02`qdS?4*26as97Aw>r(V?_km2(8FE&pD(J zU?U7EI#?MiBEUvyMb>%FA%y@NVMx)z%2*KrHo_2O-FB!Fb?q*SwZDVXZ4KzcDb!WG zL-`2!7%B*m5lS={E}?`$QbGcn+dp*T#n#@A)NkL4Sb7H}d*NitN5Gtg5@-FuF)8Kt5eIwe=y4sFKk|8rh#;L^VRZF{>= zoVpctVj~Pm*2f_!xg9nwByB&1=47ff(A9S6EnxbCcy!?`WOf{rjWaGb79Cxx5mMiC zqkxunogJ}ANnj%kCECOI)*?i2i4$){W~cCMWN4kY<4%#1L%R*s zR**QSyTr`7Y8+DHgh7hF@kmajbLl*J$5UvL=$t$w^By`FuqOyS+GXUoB3IF~ezOwH)H4x`A}T25;Be_9*YzT&(KHgTV5Dl24x81jm-5r#0uvGEi} zb^s~yX5r&?xMSMwl(%OWN?)On^p&^m4|8J0ePKrzMyvOK;=H-F-F_az)3%&yQVak8 zgq9Eo`i4D*g!5DT6%BM=k> zr1zW8un`6YdLEP!P!Nz_-S!q6A+H8TAczP^4b3015eAU}9-0yOe{o@X)WR{u4gdfE M07*qoM6N<$f~^}h!TPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf5zR?NK~#8N?OO+Q zRaMsh?&~e@B>__C0fbOR0qJETY7|fr3m}X*6j?eH#if9v&bV|Ol~KSl{x-0Lp+(`R zw;%)}C{<*r2?PS9C$HDM`OdxXB`|~kztA;EV$ND8_vYMt?m2t!b9VX8ev&&74x_%* zY7R&)f4vZEwFEhN$>FULqE3HhazY^>6s+x}l2{d>)n1v7U;wD9s+}}Sc5g^lr#ig~ zo7ZoITBCs!p+!6h1OjN&rY%~wN#ApBq@0FfcQzTdo zfb(bdy_#|U^If%C!r3$V2ze?XX^jX|SYaw5jYbWP6o$iJg?6c_T&Q8FbrLMxwSqhs z=c+98t1E&}X7b7D=kDj#@BhC)qBTe`MTQXkxtcLmf)J&0wW`&~J9{1;UkE{d#cVR6 zsH7BXwMKp}krBbu|Damxg@9gyjRUK=Z)3y+SoNZE^18^?z^iyitCC=p@16L4|7q~D zuS6ErjD0Qcg*sKi;dGIv3Yo^Rq=qC(aJrn_scM-?5w0$TRWWU$hmICokoKFTswi+z9;zDVEwZbu>2UX>Ti#tXaC_i;szGZ z8IIv&#v#{ahEQggj(hFy!?MuydL3e|CM3jLWg0a!Az}_<^^2;~7-2SR5o7C)s z#OjS7Am{ioe3iKu#Yg^*zFpHXXySY>hJ$Du*9{{Ew8xZ;)6jCvKBK4Mxv`JngJrK` z;|JNhc?S#shmHCEh~0OSpO1&9IO$D!mD@u|RyI1oqFxr*n^> zNAFZr1#_`yZ*P3{#d7p8szD9I?BV+3iC|&e1mc6tX>W*#Erl|qc`qjKsRaHqOKvYGY z8Vx!G1;t#kqFT)6YT}@#EzJ8C%d@xR%$XvbIGl|_mmkj4#n|#q4h9bEj9DW`;;DC+ z!5wIYUg>5OoYrwsv_f*jHMr;ZBe3;+IaM$xP(5yR{QvHi>qVwfuh-H%a4ca$ghNNo zV=(BI1sZwBV%6ZQxzq6Y^RMGnMHrPOWhg5yMrEZ5gC1^#;e*EGo0Ao&C@qGmVOJC$ z%0j0hz2J8o!Pxsp;bZ9r^h=1v<|Whlo(q-55+0b-6AyL01D_bXqko(Wg%?ZU^_9Tk z3UFH}_Saoefl3cB?t$i5daf~AvhCpd*D<8~P3Zj6lel$kKjh||KwP|VGR1rqo=F$& zip4b;wOI7--_WU37x)8yGFdUiLY9mrk(NGG{(sBnZCIA^0Y3VCF$|Q3!xe_sOdZbG zDNooUVT#8~2Z6eqa)-+qg26%ug7-pz6%J+M*RrTp8eBMk7KgsgLPAn9wMkIcJQD3w zMR_?|ckG6gHtl3v_tu*WaPI7JxE)SBF?}Yw-P8_tFKAlmpfKDrkq|FwHR*uO@6W~y zJ7V!&#xt0c{vhsNw-nvUvl171VJ7YDM~g%o48%luQ^{u*K6CII!>gVA5Zlp2k5NJw;9DMWa=0$)!as)DZPkC=v{tOj_Ba6va(@9uUsJPZS+_M)QdZ z^25j-9H2k~zlbd=Sgdriyj9d@Dp2F2(*D!q%R($Dr-%DquKfQAU}`mazm3UL zh%{c2qSaDqN8y@F=&z!VjjEd3%ogF9YJLKD3lZQD9&>Fh(z#MaooaPDWM{3X=O$bc zITVMQUWk_#Jf(FzG;NV0hZeQ92nWXFapS;uyBHTLu$!Qf&9c4ka&u2uVr(*!Q`?Gk zwp7`P8lvBacdbM7R;eV)Pwz>OqVg)-(lrIkR<6Z>TZbUv7txG{F0NXEg{X<`!X^EM zMQhSS&E4+x36xz8ORNU&O5eXZAT{l3h6Eb!8jrWe;A_~Xld2$^ga@oAZsz4TqVSan zpU$5<15=ouiiWXoRftZ51?3FP8d<~0yYyf8NTzF&3)$unJ~d38oI104K-W_sI*Gm+=D;7iH{*ydKSb1Me+43ip|#$S=#o zbA$hY^J=|p9il*mP^WgnZiOY~Y?E*@-;SqV{z^6#0+N$?z4OKHiD4<{{fSd1|g{2!Z;Xiy7q0%iFH)J@byq1Zbul)f7?j46tEqmjlQHM2i z$6|2WC~V7k5mW#1BX<00INsjw#_O}k;K;!o%$htDGhWC-qt@|QJa;;J-k65{l^Qfi zXatS(2&UbCFUI`w4M=q3#s0FyTIF4)HO3&Zi4TuOcp&go0lOJwARs0t4zWac z4zBzF58pQot9H3?di%?``__BWCuIPRm*it)pF6Pr;6>;ezEqDF9rqesYXCSA_{t!S zo=C;l_IyQEE5g$u~3b z@iRlPKj##8uo3$+Gm+jZqFKjue70&6`V^i;>d;Ym zV)9Hhv#EKU#$6Qw^`qNEL1YLk#+a~se*q@V7CSJE+xxfU!W7#zB0&MWxq?U=_Y&s6 z@(kkD4oE&Hj+}FVS|0~~+<{FWUceVwUt`k1E>OiJp-ay;&OTg^a1-dt369*VrfJ76!f!{G^Vca`JKsUz^n z{A{G9wLwuqF;WNhMZjLblappdJi@fo$>=e-9Aobqf$8skkF+5jQF5V(J-r;$PDDtL zMeonTsbVjM?t_zU0$+^MCzHoTDv*x*?&yFx!YNNYGC;J#K=l~qy$r?iv>-r}BGXM< z?eSG2XUA@E8Np#UqTdJ`9vLwn8T)dH3s<7}R4(@YcuF=$)%=X|^%`8IydvUe!Vxf- zuwvm`=+L1v3_7tv!#tw#(t9H;}K~sZ#6Dr%rA+WKe+Wu!XidX$TYi!&(P)Juw5 zXW+u6R^m4*1!Dax7b*9mvmSQ)m4)z2hnG%WRMcsGsl6PKa?jTYQJ^+gDni8y17BaR zPYy^YFDOFPYIWG1y-CgrlQUrG*zguUIwQj1CpT@W*vtBI-En}{ljZ$@irckQtj_o`5fMO3<)TAs!#}7{c-F7i%VbWk$oq3d~5K4pl=f zzTb2NyFPjrAFe*ma7Tgs>g!MQfI<|iQ`9TNZaPgQfrvs5`8-IxcMddb-e;h;AD+Z% zh&{g*(uQl?j;f09h#^IbT2&r^@hiWm-icRw}F*S27-WWfW zsRl}n8Swdt>@dqrV@25KC883GX@6OSccC z7R_T*0Eo-1^c7$?Qv`O4z9+;vef%IS_+KZ6wgSG}w+nu^2M#yU52u|+L4K4KmZRUO zzIgebJ28EJ27F9D4l-wC;P}z_Z02Cx)pHnP#*cx~S&Y*13Y3+J%r6^CPyG)*+kOZE zmzxNX&~0FjwU3XJg)@%I=vCAzMPK^9Xk;-RRClM&(MU2TJ8*@_rN<9*lp8# zEL*w+$q82E(|#^mwu))+;5|R>;X18+mM4XLku%2Yh-25`RH}s-737t|2%*{n;y$V;Sbq)c@xe!@`)3V)`i zC43YRiB1}ZI?MzRKavsWqIJD+C(6-b?XD70o$`Ea*q0~&lIx$lx8YE35lZvlBtuQX==44uIdp-UZ#GzylaUa#<3yzv4MHU-@L141$r#Bks@*)OGeQ(87fqWa z;rP+hNNSwGxK;oKT4t_WP+8_<23;%?^+h=9O+Y*2MdXJYAcn~?gpF(cBCbA9tP{qc zHcp&+_(j?_p+2=NBwkg-e3_gj(GK#*drVxX6C{P?B&oVk>Xs1ef<%4>4brK?nrye9 u(Z9aSb-)2>&9?n@Kajc(82#Uz!oL9Us?MDV6f0T)0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf6&*=LK~#8N?Oh9a zRMoZqC+`H%Nx%oRkT7|OpMc&1DYRUH5F#iDLM>SNS^-fgDdp2!ihCo>DjxvyJWA(}uyAP^P^I9h~5hJ_)75&{86z|s7bh>&6{2n50ffv9j%MCc(9 z5C~9&Y&tI@q}T`ofp9^S*05l$4_GB9YfIl%49sZ zY89r>5)smpB|3=6pAA_BK2T$0qY)n)gCW@iq(fEMu!D?4VuJp&N6+tnA8PN_vnMiK zy;1Z=HI9~jit5@^l41R|z4=jaCQ={qG-^6-y(DQ5<|Y0ZE2=wGXjlr<+K^wn(o&I? z;lef4$ruJEHfL% z$HgKcAr1-gvEbLSG0`4U|5%a@-@kx{7P&u__if;!x9Mm+)v^M)A=y{Vi`S;?S81(p zVwS6Y))~c*Sgm%gF_V%K(5b%$wSQOWv^HdW#Zn|>2TV+$ zPR_^<$D^OMy-`ObkUp zcD^Kvik<0j?b0a`ostr1ES{W{qh+E+8_JH5LI++7AEwG)0y{|g1R3+KGx3iHp7h*f zd#szjOTPEl(UOgr{)0a2aC+ZL{A%J5tlLhGO5-&ZWf(N^7NjXOTAu4Bu)NV&+Pn+D zpls{+r58{zCtcy^wXKi+xAw(DGs(d%=&84-cdw-*&z6qfeQ2~lwQ?vzTK`ck)cvY% z*!bE}Y}j%Hb)Pih)jb>?9hfxc1}RmIPe{<5u4eo%Dkmo2PeKkUxASlu51??pLdf6^DUBmF>m@X>A}rI zPwvD=pSf{m*De_GqfE&mISsOu?|5>e49qJ2H%hK~9Njw2MzNG58I5TYE;WzR=2g52 zcylz#ed#F4^V;fSH5Ut%t6hrsm9=w(9a4C3&TC*=bqla-&jYJ{i%@?RLXk({CRZl6pxWZ zv*6$#a?J60{peMzWK=e?M|VHzutcM|-}{#@U~zUCs`x#kGVVK;iLC6mQK6)wtwr0h z-orz_w{1_AE(O<(`^<^llvR44NS*(7tU4jvj&1o(Y^d5zZ(HxRv7LPBGcalrP_g4f zVA9R>&`-7#r?skmtCv5H_1U*$RB!d3?_Toq8-tstY4!!%-_pFcd*hqwXtqCn4OE=J%oGcL~J!2%fLPJXJY+Crlr0EO8Uw4bZ_-iwEnh_e6I^dT1mEU+-FYP zH|>{V(6ghndQkGixRWPOp}xKW?#4!(IeV5K#x4-v2O>iRqZr)k0E{U%)VIvLK$uyo#9F1KpD`r<1{qu>4q@ zKb^zBwT=I%eCLdOzdXgwjzvIk!$8u%EgK$x_C^fe@)H~`mYojtH1)qOdmLHszK(m+ z18Lnc_uE59$7ePiauYeE-S#sRhrIeS?_+h+!7f`tA0z_pWkanx-^`v>Se1J%7M2Xb zqdv}8fZvcqW`>1Bwx5oU&l;^q$RPKCm?jVq2v|hG@oD2%mQz-XJO!CRKp+q#0*+7I z!XbmiPD~RBgdBmOKU^MiO$0-MfIt9_k41zO+dv=?HV8OAZV)MJ*jPg-67dL-L!K88 zbs~Nn2mrzb0mnzeA;ZNMLJxre93Rz-2r2e~Kp^cK8e0_WwSZvW616`q>o^>1jvMLa@19k9t332{d_4#I$qucs%ER}&+U;e-2`jmFjy;{) z-;Uw7ugvucs$zgPRtKs&=hwq97!Q|xiMmtNH_yPv$#ZZZ+^oZkRjs&8kk}X7g`RpP)ZFXSM2_7g`_y8eJT@F_SI&{gsozE?vbVLJbKpKLjWS;?1Y1meB;M6nJ4TV! zh9~FfUU?7lx1J4~k-nB!PlRS`h{Jd|TV0E89d^WMXhUv8Lp}Uq>&5K0mCIz? zDz>RzIb5+Z9nwLr?^2u=RFNxNRpH5f-LDrJh|?I<4v>?q=IwG;jBH5iaZ zRm$MPv^^|~`)jyH!&5JB;}lL6Rb9OLo9nABVq{cYOFL$?wmdveI{l2YiA5#nuw|A~ ztV;^oZS@FLx=Y=pp|hcUP^bswd@6_}|ET(zW6PM8FD{dCUyA>sLr0xcfRzib!;6wV zmSMQxJrrogm)8BDQdT=v=lrLvhw(^uB2v30Vpzp|oYVP&?F|m;n6~UmluyZ5 zo*ZT%W6)vj*sHB}?R{2Y9CXa)q$6iMrK$N#P(FSPQmF=P&iG>}T3(J;>004?ZKnL1 z3NUT*2|ivuYM)zzO@m}7R-aqQx|r+h)%7Nf`Z;9;%L_e+zB#|PYt;r)U)i!%tOknq zv!SmJK7rp5TODRP+<85z_dbt>bePsqc4T#ZmpWZgDXX2TbN*9SO)AzqA5T4Y4AaIe z!--ZpA<03ppfA#{NTg1ur1puTkF`}E=5tchufsc(_V!7a(^J0Qw0@1}8ab5uuAd;w z+6`}nR8r(V6?aSbhAjXVE~9ALMi)Q&YIewoKb2wO2Z|ht-*tFlmk~cr+9$15cIHQa zn23q|5KHw)6$jPJtn5aGwq0zfKPg$3DYiPyd~h$sLz3P5;?Zm8W4c^gE+V?4_KOy+ zdHv=eTQ)vtyXxG;JMRrmjwQH+1c7k1;fd#RFl^gI9HQq4oT)@=a~!wfkXy+i?Y7%Y z9J2S7Nv5nwC%a+zYi;#55~g3@5eN`=3~S*$MMgtN63gpNi19- z&_M_U^^~=PbQ59(0uhG*MaX8$?;#@&9kF16KnEk>sQFAdWCvp|#0dmU5fCY>*c<|Z zFhW2$WEdGks3H(>)O;#ZR+o8389BTfDmw0iwG$;f5zCI|!~6#?50>96XX9z_1%cZEYn>edqL4h8{o$R^7l4A{1Lwe;a~u2^Q& z_`f)hjg3ZpYz&5E4}k2DGlS7f%n=AgBmzM{)X`R*zjK;BPu( z0hdkFw*7OFK5jWqm`*Ojg6=tZ@i-Ik>$x~+NUNpO5*Uq}(drrN>9q2#@(6^AxF6{V zMA<1hX#^HmEQ^neMM6Rx65?Z}*Re6t9#S*@!$wcXOM8lZ%EBJpvldh4Q9&t+*`|6C zXZcii)E2G)8j3 z#02W(jO>sc9ph*$V9ObcDI0d;kcY4cdpAtSs2m=s!Hc(cMn(_0|8%ulCQcXadZ^J- ziI@s~#sfP8iZ>>pNXI-^&(+E1@rl@s5-k3)s*ge|MQhOn0--@5D2I%p2*}QtL{YJG zQUbbkN<^omL>h}HC*^3FXhFL?jGDR@d)2gc|4wY4Iu^sEnJ(P5y$MyHaNmNgMSsya zt}*LF4@^YGBc<}3(IDpuwvp3Sj+Ob)0r8F`I}eLVk15E;g14IR%1kcABbq=U^aupy zka4O*CdMHtF&^>ch;eaok~7K}@d+e5XhCA4K%fl*K{+HxNKQ>-V`2~;9W8ZEVb$N9 z%35kU^RS?N2|c7ChbsRAW=iQQHFn0oT!Vc|gbd!fENLN#1Oj1$Ku``Ty-%bbqc|ix zBX|C@hxFc(#;r9MMvMb?|9S~3#>o}nJgtvh1rD6b24qGR%m$WVcd_zb({v7}$&`|= zkfSoU6RVeC^T0_M5#gmH0zxbZIs}2B95Nw34ku5ZLVbM$+>MPmbM`Ennw!zw(t_sZ z7K)Ts9g-@* zwZ&S)9s%KyVQ(U#U?d?R95RH~t~t07#kD$ywQpg?mNK|ehvGGFQ7wdaXe?vRMo)kF zy)zbtuueO1)UA@YqmC9eigYsi=$!bk1VXk6YTv|)+FqDFyqAY%&A|<*Nt=q?w2(>h zVdQ>qCtf=0#7#4XQk?~EjX1hx2TD?I^wGmuIy+z~k|&MD0B8H?C%D=}AbRfozkAr; z6hUo@0B!2VeRaSOdLdaNs>9KJ4!Cmonm7L&XmDkrhg493uXmvE-BKJmJY&(8iHBsyVg5co7_FJvTZ^q_>f#7&WV2FV+lhRS_!QtI3bxifA= zCY;EgG!>I?(D7!Oq~qxUIH}E-XZ_Llm2|ugN2G|&Yg41PWdI|dP&j0W zw}2~+Hat0#>O`4o-t^Tgstz^PAjjB1@B1jdY;c4A!AZ4kQ>y8nJm=!WYtkV}K8_^P(yYb7$xzMCQm^<1V)rpT7U&cbt3k=~oG z9gP$9ukt*-F#D4#~aCF@PfO9m%D1*ia-Ed&}0| z5)sng0cL^va->s^T6Lflr(M0s?Ti{l5puk$6H0pOA<@s}Yd31%BRWG~y)bYfQ1U9L zplYLsItTs_7}!sfDtl$Q-z!CBisIaUSHtPIMn_J+EzOgeI&b(-Wb@(DU;#2g;z2+- zWIJpIXDX$d^*}~y+xKO%IEo@8uBTc;JFwz;N?V`zI+T;&N7lR1Re8V2*Ok?^o@>3j z&Kt(!j)86zN_@EQK$UBp?meLsT^rtz?!QF!i?T=bQw|E*=}KPRfS1|nbTiyI6iiNZMiOMBmpDVDiHWK5cq$CKgPtHRl5fO0000< KMNUMnLSTYfjfy4! diff --git a/src/windows/leash/htmlhelp/Images/allowed_mix_case_realm_name.png b/src/windows/leash/htmlhelp/Images/allowed_mix_case_realm_name.png deleted file mode 100644 index b3589111607bf0facf9956bfdd99561af741030f..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 1986 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 diff --git a/src/windows/leash/htmlhelp/Images/destroy_tickets_on_exit.png b/src/windows/leash/htmlhelp/Images/destroy_tickets_on_exit.png deleted file mode 100644 index 39843614d93f1ae1e028b02fc1de9cbf17d780b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 1742 zc-jHZ1~K`GP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf24hJ?K~!i%?OAJV z6jc=dW?$Xiib2%G9~kL&DMhRPFf?pz{86Cv5kQLsqlpi&wa{7{NFb@iA6iJj1Y)U_ zPytJ#@ex5FrKK&Jh^7txFu}DzY4M+8c$TvDMZ2DRXJ+@#?44zo*w8jJ7D)USKmYUJNKhCQd5 zcj7)aYC2+AE;JRWbADDWnN1l!Mi1&AccQ3iP+M1kx*D=8Y{Uh#FMoj+V-U@SPSka3 z@j9yndt>hUXP`JP-G?DpdeyYy*_`R5x=|iU9M{^k@bXK)} zLZvqPF#9vcn2ntIJvcX@uIZ{N0}hSiN~9l~`$+73z5|UL^6+_t&F{v7Xfd`&=w+Zv zy7}}dI;ykzT9C;5a$9lbL@j1%zWTQH(;8ZLC=c}&B=%@FipoQ1Jwh8tHW&KCm{(rL z?Pa-JVP`m7SGB3WcNS~$nGg2TG$4m?ZC_-SlMKH($3#3VW@0|79m~D`?6X>~75H(( z`{ow!K#<_hlf1#O(2S zxS&;0dxc7E_M+d9Y1Kn~F3uf8+diQ6IVbMV%)#5eB=$jOn~mA?Td?xYV*)y}FLoco zvf_Yd!+Z(%MN9E=?-%GGf3u2LU|!!j4B|XG4nkOCg^SIbafZ-Pw>SaM*OfUqxA7$2 z$ku&X zH`8!wqGp0-gMHHDy*ACqc$6G_`tihVV$a*L?um84R;mtsj#`oY9vp5TNN5Gv`mDA4 z(U2d;0PDYnhF9*p1f{PDzB-TKK>i9W%3^DSShO7IKY9jOUWzOWyhf~XL0jQuFXXb8 zlURQ?7bPF+Iaudp_AkpZeyk_UN5m%QM$VDm;?O>n1D_2a1VVy^D1 zJdF2RYC)Rjwpp|DaA1EJON;f`iN92dMcU|}aGnr+*V5M;A%0=wSuFjEa^Uk;Ihpax zax`K}mX9@7)1hJDU*)d5b_x2ZuoM!f)my`O!IY1T>q%0i`MxNB-1t{KT=B`?rnLW} z_|obc;cT6lKmNMw8O%TUJbJrTq1)HgWk9)T67{Df>U6IcEkym$z46a}GM^MX-B5R6 zKY%?8=i;4HA-wz3cc{$10~hv^NyUJ2amZMyClz`dtj&Og0p<6he+=!1&63T)WM@G6 k?Yb@M$-ap;ej@|_0eCyAUzUCDZ~y=R07*qoM6N<$f(h4E*8l(j diff --git a/src/windows/leash/htmlhelp/Images/encryption_type.png b/src/windows/leash/htmlhelp/Images/encryption_type.png deleted file mode 100644 index 7e4b4b76a60307d6990a5cc309fd5b72e28d6d3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 1660 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 D>DFsy diff --git a/src/windows/leash/htmlhelp/Images/flags.png b/src/windows/leash/htmlhelp/Images/flags.png deleted file mode 100644 index a1b7d4d35ae019725605ec052de9b34e96eae121..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 1142 zc-jGW1d02JP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf1Pe(-K~!i%?V4Fg zR8bhm|92d7w1w2s7MfhAk{0U0kPw<|0ij531AC~15~_#r$;2!oD2RHJu$7AJp-o%R z#!|5bM$sN3p@$r`%}P_D8Eq`*cFwsoI>p@aj@HAyo$vB7!#&^GzTf%2d+wPLKJ>Xn za8b1fT&|xG-gA(uhDZlL#6b4)h*Uetp`idEZ(KPO^!&E&*c)^mUSZ-MU?AVgMC45Z za?kGFvc2f_dI*Am;o)Jp-EN#ae;!*n$ca-KM+-j)NF7A7*YT&G25ah{<4+aqa3ev)KQg;wX(#_t0LQh`K77+{Q^4nx=^L`6J;$)GO&mqc$Y9 z`oFyMoe^t=#gJE=ykC9prHxh?;OL}~@C!PAH@2X3KP_n?r7KCTeSQ5nkhhX; zXo^lg!23`Ah>f0#RV&O4WN4`V?>Tskw{N-MDlV^Pjl#}uh5g7obCBzCc}vube_$? z%DXves3NI&qK#>!zS}KAXqN$5K|ls8*)kv#Vk7)EMfz6M1%+ohWb@djp`@`6yJ+-r zVIB|}$j|;GlKV(K9-!G#(Sd+^ru6@gltiSH|3g6K{ONW@uz%tpRnCzOpQlzWP~;#r zLXo~l+PipaRXtAfyFPzLs-B`W0sf5SAT{CvjZA|_q((sg0#2Z7eDO2XvH$=807*qo IM6N<$g2vbv5dZ)H diff --git a/src/windows/leash/htmlhelp/Images/issued.png b/src/windows/leash/htmlhelp/Images/issued.png deleted file mode 100644 index 266f0d1ebf609f06b966c294293041036a1f4d7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 1183 zc-jG<1YrA#P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf1T;xRK~!i%?OJO{ zR6!K}=I)xN89p|%XagT>LM8R1$XbY=6usyHLP12OR9Fc?g+;%tA4P%{7;O)V4Ej;_ zGEIe`2TEi=q@qNnhnivOTD#I(?rrAo-u3S8T_0Q6?l$*w*t=)WId|rKbIzHWU1IGO zMer-=Js<@A2>1Xb4-kuuM`S3>1@fH(845Up0%_+pG6bL`-+p)ldA_)4*hAaCbMLTq zxWeD_0O?i%@&W}iCp+8cTeMm&2qEa}>x12H$2pS;+c=Pa4;4Qw32dq3NwS^Fhfm>2 zuiiAGq_h@CPToP==S~SwcB$Fnypi+EpxY1qq)CuzvR;qWY(&K;&-ji}{Fx2)F$JPcfh}1*NeN_RWCV2a zF^C8sg}B(UD1A^5K@gC&awaTRi%V3^j*=%il~VH=BVr>ply;!XC$9o|kwz(+95&Rx zGaHn0D-``_ax(vx#FyVYSpR~(eZU$yK0yad5AfvqM&xRfnrLpW{QD1vkoBG!m>|K0`{W;Smvvh*Y!0 zcy?#Ru;&yQ=9rMR`@Z6>YCNTmr;Yn4yGTJ=t3iBJ8V=Rg;B6C=Vf;+2S(fauy>vA; zOVRv)+=5qLRU8j=b(xX3b-uKq$v<%qE$wC`#7ASnT!RE;SeUjy3lEf=WGOKfJF0)- z*_30@MeRhjq@%`DBzM`a%LaSML_z&8e6cvFaEUWVD`k|&9KoJ9htU54Q>)Ep!OHF{2sJpIeTr^B%CRq6i*eEEI6O5UIms;bsqs>gb1)lM)-hR1 zci~KvOrExx3LzdyceF**$d=yi!FSW~UeFC;lB*`GK-D9kzy0(&Yc08O#_eQ>MIt-R zVaslIn!`So7dzS6v@O?-$G?oM2S~dLkk=@X!@V~805WlGn9CG>*Ko~p`5}6Mw0C<) zPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1NccqK~!i%?U>6? z6G0ru=Wn7k**`#|sCSd1i=-M84<^P$JW&!FFEwI_&jSIX1k?meJSeEq#%L&y6p}7c zD18aV(uauldGa^&+wRUzmx^)mpfmX%W@dk{`ONI}K{7jaDaQ$r&7HcG;{?d&*SeJB z1ORJI%5ef@<7-XIaROwcSd(&`fQa?Rz`%awcpd*(K=Qd*;{{BA*tKf4TC3H{@)k@tukXx*o zg=a!ixe71D8c(J!`X0jxjYQMuuZ|x-bNBfh4Q|!gdR)h9^=`b}oxfD4f20Hxxa2)JOAa%^MJk?sdJoY^a;@zlKZSq+AGN1-0uB3n{xcC#exNPe+6qYSK)=H^~3Dkc77*t|K+i+yC=Hu1*ezsOKT>RL9Buo8`A1~!z@}j z&_=w&bTZoOCT;#GXV00LF3o22CTVjk=nH+1>eb@_Ry9Zi(ld)0>0vi45jt0oO>m>0 zVU@mHIMnYhVJ&8nww3dfCP|XquJA&vbMp(Ut80mL_WJ#qn?tX6znAlcLN1rjX18^$ zRxcKzk$^o4^(&-35Q08MjLkbNnsF|oStU76-*nG7E06EfM0nMB^^IhyJ*tA&0tGE3 zY7TDJAMI^7t_ZA9Sc_RC-2>Ra{wTLt%c>2MfVIqv|CI&b{Na$oClz$~UtaXITD{~@ zAV3n^WnTOFLjY_9FBqC13S6(*>_3?yiELTQaRL(Sft)J9T9R^{0EvGoNjXkHVm**k pC9xh5)~!-p%4q^bGCc?aKLN>ynes5OLPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf1g1$uK~!i%?OJO{ zR9PJV-RqcA?oujN(iGZQeJClYK9n#x*`SN=vf4u^C<$|( zC@U?ii%8m7rad6U`XB|;L$imyRcJ;UakO*py)$#?&b`j-YFFl-;V^gZ{lCutcYgnK z?osB=uxk=3H`mv3l`ZP#q#2l)^oNb5Kh^Gf+Gjok%y?RH~gVgi5KY}hUXwE2}z3S@r0(Ub0*!yjE z#E*uIUYQEi{~#sd4ZHmF}2fiBnegRl8M${f#pRPFrYa9?5J97 z!Ige0K(8y%AuB7E6AQ@QSCW+)mdc6!hiW5iVyUJ;7%AGe%9v$Y2C2#Oal5MzLnBUP z7*mkFY7tjjc}50yN=$Qp8UAUp`w_OI^hO`9{G0?+I^TEL`ef`87NmRFDKJ!!Hyv#b?q7+?)TXUM;+y&^ zMm@T4YO^OEss9LF&X5`@t-g=P=fbp9I7WfH-LJ4HEgAP84&dWwCyeO}kh38ZW3Dl8 zcw&9eHUH3xt-CLy%~M|6n^C{J5N7UKCiXTt@NAIw2CS$)F9KYCuDixhfJ)8oNp^mkvK}R5mombxLTeWsqycoCtF$#k@b>iBxS-Q^mFT?Qlo6%h@bL= z1XH$0oH7E|0U-{~PB7mQJDO2N+0r^ZJc7zHGq<5RcD5O>-;E$GLV)N!jdHH6l14#1zY;eEMn(=wXko;Hl=vXLMB-|C^TFpqVzow7v`1ZU}3sq7E(R zq;y{5s{m~Swi?v0FF|fbP$#omK(@3R;#iCfeZ;ncY*;oeM_x`A`Od-@hXYRMDB|Ko zjGP)tEXykay5TE}G+o?AsF*LUtq7q^k~Q_W(?E50P#yD`9#RDa+r<8s>ecwG>5%^< zl7&o|1m4Zg?823K@nO_^jNVZ9hu_H#WgmxckK@t@%Xs#YBIZW zF{`6x`b9uC5+K8EzsdmVCO}fQDK)xd)SJ2)VEW(t7^#+Nw_9hVTDc6>j^cqps0MU7 zZDfD|IUNVm+8A6cMZwDb@gmxLv6Miqj8!kKT0tVpICLPROrTcO{SO4xS}wIRx)_Rs zA@6jm|2t$1NX - - - - - - - - -

- diff --git a/src/windows/leash/htmlhelp/html/Button_Menu.htm b/src/windows/leash/htmlhelp/html/Button_Menu.htm deleted file mode 100644 index 7b5b19b843..0000000000 --- a/src/windows/leash/htmlhelp/html/Button_Menu.htm +++ /dev/null @@ -1,97 +0,0 @@ - - - - - -Button Panel - - -

Using the Button Panel

- -

-Use the main buttons in the riboon menu to work with tickets and passwords. Several button functions can also be reached with keyboard shortcuts. -

-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ButtonClick to...Details
Get Ticket Get a new Kerberos ticket. Click this button to open the Get Ticket window. Enter or select your Kerberos principal and password. To verify or change ticket settings and flags, click Show Advanced. When you are finished, click Okay.
-More Get Tickets help
Renew TicketRenew tickets.

-If you have multiple principals, renew tickets for the selected principal(s).

-
All of the renewable tickets for the selected principal(s) will have their useable lifetimes extended. Each ticket will be reset to the length of the original ticket's lifespan. Note that you cannot renew tickets that have already expired.
-How to renew tickets
Destroy TicketDestroy all existing tickets. - - -

-This button is greyed out and not accessible if the Automatically Import option is selected and you have Windows domain tickets imported from your Windows Logon session.
-About importable (Windows domain) tickets -
-Imported Windows domain tickets are obtained and renewed by the Windows Logon session, so if you destroy them in MIT Kerberos they are not destroyed in the Windows session. Kerberos would immediately import them again.
-How to destroy tickets
Export Ticket Export tickets to use in your Windows Logon session to a Windows domain.Click this button to export a ticket you've obtained with the Get Ticket window into your Windows Logon Session. This allows you to use a computer that is not part of a Kerberos realm (or Windows domain) to access that realm.
-How to export tickets
Make Default Make the selected principal the default principal. -

-You won't need to use this button if you have only one principal.
Select a principal by clicking it and then click Make Default to make the selected principal the default one. The default principal is the one whose tickets are used when an application or service asks for tickets without specifying which principal is being authenticated. - - How to Make Default Principal -
Change Password Change your Kerberos password. If you have multiple principals, you can enter or select the appropriate one in the Change Password window. Or you can click a principal to select it before using the Change Password button.
-How to change your password
-

Related help

- - - - - - - - - - diff --git a/src/windows/leash/htmlhelp/html/Distroy_Tickets.htm b/src/windows/leash/htmlhelp/html/Distroy_Tickets.htm deleted file mode 100644 index f8936e8d3c..0000000000 --- a/src/windows/leash/htmlhelp/html/Distroy_Tickets.htm +++ /dev/null @@ -1,11 +0,0 @@ - - - - -Destroy_Tickets - - -

Distroy Tickets

- - - diff --git a/src/windows/leash/htmlhelp/html/Export_Tickets.htm b/src/windows/leash/htmlhelp/html/Export_Tickets.htm deleted file mode 100644 index b1083bbde8..0000000000 --- a/src/windows/leash/htmlhelp/html/Export_Tickets.htm +++ /dev/null @@ -1,36 +0,0 @@ - - - - - -Export_Tickets - - -

Export Tickets

-

-You can export tickets into your Windows Logon session so they can be used with Windows services. This is useful when you want to you use a computer that is not part of a Kerberos realm (or Windows domain) to access that realm (or domain).

-

-Note: Exporting tickets will destroy any tickets you already have for your Windows Logon session. If you have unexpired tickets when you run the Export Ticket command, MIT Kerberos will warn you and give you the option to cancel the command.

-

-To export tickets you have already obtained with the Get Ticket window into your Windows Logon session:

-
    -
  1. Click the Export Ticket button in the Home tab.
  2. -
  3. Click Okay to confirm that you want to export the tickets and destroy any you already have for your Windows Logon session. -
- - -

Related help

- - - - - - - diff --git a/src/windows/leash/htmlhelp/html/How_Use_Kerberos.htm b/src/windows/leash/htmlhelp/html/How_Use_Kerberos.htm deleted file mode 100644 index 38e54f60e1..0000000000 --- a/src/windows/leash/htmlhelp/html/How_Use_Kerberos.htm +++ /dev/null @@ -1,44 +0,0 @@ - - - - - -How_Use_Kerberos - - -

How Do I Use Kerberos?

-

It is simple to use Kerberos through the MIT Kerberos program. Click the Get Ticket button and log on to get a Kerberos ticket. This ticket is proof of your identity and allows you to access all of the network resources you are pemitted to use. For the most part, your tickets are passed on through the network without needing anything more from you.

-

-Kerberos tickets do expire, usually after about the length of a working day.

- -

Related Help

- - - - -It is helpful to understand three concepts before using Kerberos; realms, principals, and tickets. - - - - - - - - -

Realm

- A Kerberos realm is the group of network resources that that you gain access to when you log on with a Kerberos identity and password. For example, a university might have a Kerberos realm that includes all of the servers that students should be allowed to access. Some companies or universities might maintain more than one realm, potentially overlapping them. If you have access to more than one realm, you must log on to each one separately. By definition, each network resource in a Kerberos realm uses the same Kerberos installation for authentication. - -

Principal

-A Kerberos principal is the identity you use to log on through Kerberos. Some people will have more than one principal. For example, an administrator might have a regular principal and a seperate one with admin rights, like root access. - -

Tickets

- - - - diff --git a/src/windows/leash/htmlhelp/html/Import_Status.htm b/src/windows/leash/htmlhelp/html/Import_Status.htm deleted file mode 100644 index ba7ec793cb..0000000000 --- a/src/windows/leash/htmlhelp/html/Import_Status.htm +++ /dev/null @@ -1,75 +0,0 @@ - - - - -Import Status - - - -

Import Status

-

-The Import Status column in the main window shows whether tickets were -obtained with the Get Ticket function in MIT Kerberos or if they were -obtained by a Windows Logon session when you logged on to a domain, and -whether they have been imported or exported to the other application.

-

-To show or hide this column, open the Options tab and use the Import -Status checkbox in the View Options panel. Note that Import Status is -only available if you have obtained tickets through a Windows Logon -session.
-How to: Use View Options Panel

- -
Tickets
-To keep passwords from being transmitted in the clear and to provide users the convenience of a single log-on to access multiple services and hosts, Kerberos uses the concept of tickets. Once a user provides a valid identity and password, Kerberos issues the user a ticket with a limited lifetime. In most cases the ticket then allows the user to access all of the servers and hosts he or she should be able to access, for the lifetime of the ticket. -When you get tickets through Leash, Kerberos verfies that you are who you say you are by checking your user name and password and then gives you an initial ticket. When you access a service in your Kerberos realm, Leash passes your initial Kerberos ticket to the service. The service verifies the ticket and then issues you a service ticket that allows you access to that service. You don't have to worry about obtaining these new service tickets; they are automatically given to you. You can view service tickets with Leash but cannot directly obtain or destroy them. -
- - - - - - - - - - - - - - - - - - - - - - -
Import Status Meaning
importedThe tickets were obtained when you started a Windows Logon session by logging in to a domain. - -They have been imported into MIT Kerberos.
importableThe tickets were obtained when you started a Windows Logon session by logging in to a domain. -

-They have not been imported into MIT Kerberos because Automatic Import -has been turned off. To import them, select Automatic Import in the -Ticket Options panel of the Options tab, or click the Import button in the Home tab.
- How to: Use Ticket Options Panel
-How to: Import Tickets
protectedThe tickets were obtained when you started a Windows Logon session by logging in to a domain. -

-They have not been imported into Windows for Kerberos because User -Access Control (UAC) in Windows is preventing that action. If you want -to allow the tickets to be imported, turn off your computer's UAC.
exportable You used the Get Ticket window to obtain these tickets. -

-They have not been exported.

-To export these tickets for use with Windows services, click the Export -Ticket button. Note that exporting your tickets replaces rather than -adds to any existing tickets in your Windows Logon session.
exportedYou used the Get Ticket window to obtain these tickets. -

-They have been exported into your Windows Logon session and can be used with Windows services.
- -

Related Help

- - - diff --git a/src/windows/leash/htmlhelp/html/Import_Tickets.htm b/src/windows/leash/htmlhelp/html/Import_Tickets.htm deleted file mode 100644 index 0e71ab4309..0000000000 --- a/src/windows/leash/htmlhelp/html/Import_Tickets.htm +++ /dev/null @@ -1,82 +0,0 @@ - - - - - -Import_Tickets - - -

Import Tickets

-

-You can import Windows domain tickets that you have already obtained -through a Windows Logon session. Imported tickets can be fully used by -applications that require the MIT Kerberos interface. In most -installations, MIT Kerberos will automatically import these tickets if -possible.

- - - - - - -
On this pageOn other pages
-How to... - - Learn about... - -
- -

Turn Automatic Import on or off

-

-In most installations, MIT Kerberos will automatically import tickets -if possible. Go to the Options tab and click the Automatic Import -Tickets checkbox in the Ticket Options panel to turn the feature on or -off.
-How to: Use Ticket Options Panel -

-In some cases MIT Kerberos tries to automatically import tickets but is -prevented from doing so by the Windows User Access Control (UAC) -feature. If this happens the tickets are still displayed in the main -window, but have the Import Status of protected. You can turn off UAC on your computer to allow the tickets to be imported. -

-

-Back to top

- - -

Use the Import Ticket button

-

-If the Automatic Import option is turned off, you can still import tickets. -

    -
  1. Go to the Home tab.
  2. -
  3. Click the Import Tickets button.
  4. -
  5. Click Okay to confirm that you want to import your tickets and destroy any that are already in MIT Kerberos.
  6. -
- -

-

-Back to top

- - - - -

Related help

- - - diff --git a/src/windows/leash/htmlhelp/html/More_Menu.htm b/src/windows/leash/htmlhelp/html/More_Menu.htm deleted file mode 100644 index 96b9968323..0000000000 --- a/src/windows/leash/htmlhelp/html/More_Menu.htm +++ /dev/null @@ -1,49 +0,0 @@ - - - - - -More Panel - - -

Using the More Panel

- -

-Use the More panel to reach features not needed by all users. -

-

Find the More panel

-

The More panel is the panel on the far right of the ribbon menu. If your Kerberos window is wide enough, you will see the full More panel. If the window is too small to display it, you will see a More button. Click the More button to reach the full panel options.

-

- - - - - - - - - - - - - - - -
OptionSelect if...Details
Forget Principals You have previously entered a principal in the Get Ticket window and saved it, but you no longer want that principal included in the auto-complete feature or list of saved principals. - Select this to delete all saved principals from the auto-complete list in the Get Ticket and Change Password windows. -
-
More Forget Principals help
-Allow Mixed Case Realm NameIf your Kerberos realm name uses any lower case letters. -Kerberos realms are a way of logically grouping resources and identities that use Kerberos. By convention, realm names use all upper case letters. This helps distinguish a realm from the DNS domain it corrosponds to. Realm names are case sensitive. So for convenience, anything you enter in the realm field of the Get Ticket window is converted to upper case, unless you turn this option on.
-

Related help

- - - - - - - diff --git a/src/windows/leash/htmlhelp/html/Options_Menu.htm b/src/windows/leash/htmlhelp/html/Options_Menu.htm deleted file mode 100644 index 5fe492072e..0000000000 --- a/src/windows/leash/htmlhelp/html/Options_Menu.htm +++ /dev/null @@ -1,62 +0,0 @@ - - - - - -Options Panel - - -

Using the Options Panel

-

-Use the Options panel to manage general MIT Kerberos settings. -

-

Find the Options panel

-

Look to the right of the buttons and View panel. If your Kerberos window is wide enough, you will see the Option checkboxes. If the window is too small to display them, you will see an Options button. Click the Options button to reach the option checkboxes.

- -

Turning Options on and off

-

-A checkmark indicates that the option is currently turned on. Click an Option checkbox to turn the option on or off. -

-

- - - - - - - - - - - - - - - - - - - -
-Option -Turn this on to... -Details
Destroy Tickets on Exit Have MIT Kerberos destroy your tickets when you exit the program. -

-Note: MIT Kerberos cannot permanently destroy tickets you've obtained by logging into a Windows domain, even if you've imported them. Those tickets are destroyed when you log out of the domain.
Turning this option on provides greater security. However, you will need to turn this off if you want to exit MIT Kerberos but leave processes running which require your valid tickets.
Automatic Ticket Renewal -Automatically renew tickets flagged as renewable, without promptings or requiring a password, until the renewal lifetime is reached. -Renewing your tickets allows you to run batch jobs without interruption and to work through a long session without continually reentering your -password. About renewable tickets -

-Note: Automatic ticket renewal will not work if you exit MIT Kerberos or if your machine is in hibernation mode. -
Expiration AlarmHave Kerberos provide an audible alarm 15, 10, and 5 minutes before your tickets expire.Regardless of whether this option is on, Kerberos alerts you to expiring tickets at the same intervals with pop up window. However, the pop up -window will not always be visible on a busy desktop. About ticket expiration
-

Related help

- - - - diff --git a/src/windows/leash/htmlhelp/html/Renew_Tickets2.htm b/src/windows/leash/htmlhelp/html/Renew_Tickets2.htm deleted file mode 100644 index 1233c67a73..0000000000 --- a/src/windows/leash/htmlhelp/html/Renew_Tickets2.htm +++ /dev/null @@ -1,87 +0,0 @@ - - - - -Renew_Tickets - - - -

Renew Tickets

-

-Renewing your tickets allows you to run batch jobs without interruption and to work through a long session without continually reentering your password. Each time you renew your ticket, Kerberos resets the ticket lifetime to the length of the orginal ticket.

- - - - -

How to...

- -

-

Get renewable tickets

-

-In most configurations of Kerberos, you can choose to get renewable tickets. In some installations they will even be the default ticket setting. -

    -
  1. Click the Get Ticket button on the top of the window.
  2. -
  3. Enter your user name and password in the Get Ticket window. If the advanced settings are not visible, click Show Advanced Settings.
  4. -
  5. Under "Flag this ticket as, " select Renewable if it is not already checked. -
  6. Use the Renewable Until slider if you want to adjust how many days (or hours) you will be able to renew this ticket.
  7. -
  8. Click OK.
  9. -
-

- -

-

See which of your tickets are renewable

-

-In the main Kerberos window, click the Flags checkbox. The Flags column is added to your view. Renewable tickets have the word "renewbale" in this column. -

-

-

Find how long a ticket can be renewed

-

-In the main Kerberos window, click the Renewable Until checkbox. The Renewable Until column will appear. Your can renew your ticket repeatedly until the date and time in this column is reached, as long as you renew it while it is still valid. -

-

-

Renew ticket once

-

-To renew your existing Kerberos ticket(s) just once, click the Renew Ticket button at the top of the window. Your ticket(s) will be renewed with the same lifespan as the original ticket. The new expiration time is listed in the "Valid Until" column. -

- -

-

Renew ticket automatically

-

To set your Kerberos tickets to automatically renew for the entire renewable lifetime of the tickets, click the Options drop down button and select Automatic Ticket Renewal. If this option is already checked, selecting it will uncheck it and turn automatic renewal off.

-

-Note: MIT Kerberos can only automatically renew tickets while MIT Kerberos is active and running. This means that if your machine is in hibernation mode or if MIT Kerberos is not running when it is time to renew your tickets, your tickets will not be renewed.

-

- -

Renew Ticket Errors

-If any of the conditions listed below is not met, you will see an error message and then the Get Tickets window will open, allowing you to get a new ticket.

-

-You can renew your existing Kerberos tickets if all of the following are true: -

    -
  • The "Get tickets that can be renewed" box was selected when you obtained the ticket;
    -and
  • -
  • The " renewable by" deadline has not been reached ;
    -and
  • -
  • Your ticket has not already expired.
  • -
- - - -Related help - - - diff --git a/src/windows/leash/htmlhelp/html/View_Menu.htm b/src/windows/leash/htmlhelp/html/View_Menu.htm deleted file mode 100644 index 73aee193df..0000000000 --- a/src/windows/leash/htmlhelp/html/View_Menu.htm +++ /dev/null @@ -1,99 +0,0 @@ - - - - - -View Panel - - -

Using the View Panel

-

-Use the View panel to choose which information columns are displayed in the main window. The View panel is to the right of the buttons in the top of the Kerberos window.

-

Show or Hide View Columns

-

-A checkmark next to a View option indicates that the View column is currently shown in the main window. For example, "Valid Until" is selected by default, so the main window shows the Valid Until column unless you unselect that checkbox.

- -

Viewing Ticket Information

-

-The columns selected in the View panel show in the main window. -Click and drag the line separating two column headings to make a column wider or narrower. Click the blue triangle next to a principal to see information for all of the principal's tickets. More help about viewing tickets

-

-

-

Column Descriptions

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Checkbox Name -Select this checkbox to... -Details
Issued See the date and time your ticket was originally obtained. If the ticket is imported, this is the time it was originally obtained when you logged on to a Windows domain with a Windows Logon session.
- Renewable UntilSee the date and time that your renewable tickets cannot be renewed any more. After this time you must get a new ticket to access services authenticated by Kerberos. - If this column shows Not Renewable, the ticket was not flagged as renewable when you obtained it. -

-Related Help: -
Valid Until -See when your ticket will expire. Note that you cannot renew a ticket if you let it expire. - Kerberos alerts you to expiring tickets with a warning in a pop up window. -To add an audible warning, select Expiration Alarm in the Options panel.
Using the Options Panel -
Encryption Type See the encryption type used to encrypt each session key and ticket. This can be useful when troubleshooting. Kerberos supports multiple types of encryption. The type used for a particular ticket or session key is automatically negotiated when you request a ticket or a service.
-More About Encryption Types
FlagsSee how the tickets were flagged (renewable and/or fowardable) when you obtained them. - You cannot change how an existing flag is set. If you need a ticket with different flags, you must get a new ticket.
-About ticket settings and flags -
Import Status See which of your tickets have been imported (or can be imported), from a Windows Logon session, and which have been exported (or can be exported) into a Windows Logon session. - -

-This column is only available when you have Kerberos tickets obtained by logging into Windows Logon session to enter a Windows domain. -

-About importable (Windows domain) tickets -
The import status tells you what application was used to obtain the ticket, and what application can fully use it now. Tickets originally obtained by starting a Windows Logon session in a domain are imported or importable to MIT Kerberos, or they are protected from being imported.

Tickets obtained with the Get Ticket window are eithe exportable or exported to the Windows Logon session. Import Status meanings - -
-

Related help

- - - - diff --git a/src/windows/leash/htmlhelp/html/Windows_Logon_Tickets.htm b/src/windows/leash/htmlhelp/html/Windows_Logon_Tickets.htm deleted file mode 100644 index f3d44a6613..0000000000 --- a/src/windows/leash/htmlhelp/html/Windows_Logon_Tickets.htm +++ /dev/null @@ -1,45 +0,0 @@ - - - - -Windows Logon Tickets - - -

Windows Logon Session Tickets

-

-MIT Kerberos is not the only interface for managing Kerberos tickets. -When you log on to a Windows domain, you are issued a Kerberos ticket -for your Windows Logon session. This ticket is automatically renewed -until you log out of the session, when it is destroyed.

-

-Sometimes applications that require Kerberos authentication only work -with MIT Kerberos. Others work only with the interface that is part of -the Windows Logon session. For this reason, you can use MIT Kerberos to -import tickets from your Windows domain or export tickets into your -Windows Logon session for use with Windows services, depending on your -needs. -

- - - - - - - - -
Learn about... How to...
- - - -
- - - - - diff --git a/src/windows/leash/htmlhelp/html/afx_hidw_status_bar.htm b/src/windows/leash/htmlhelp/html/afx_hidw_status_bar.htm deleted file mode 100644 index 82cb4d9d3f..0000000000 --- a/src/windows/leash/htmlhelp/html/afx_hidw_status_bar.htm +++ /dev/null @@ -1,34 +0,0 @@ - - - - -(status bar) - - - - - - - - - -

Status Bar

- -

The status bar is displayed at the bottom of the <<YourApp>> window. To display or hide the status bar, use the - Status Bar command in the View menu.

- -

The left area of the status bar describes actions of menu items as you use the arrow keys to navigate through menus. This area similarly shows messages that describe the actions of toolbar buttons as you -press them, before releasing them. If after viewing the description of the toolbar button command you wish not to execute the command, then release the mouse button while the pointer is off the toolbar button.

- -

The right areas of the status bar indicate which of the following keys are latched down:

- -

Indicator    Description

- -

CAP           The Caps Lock key is latched down.

- -

NUM         The Num Lock key is latched down.

- -

SCRL         The Scroll Lock key is latched down.

- - - diff --git a/src/windows/leash/htmlhelp/html/afx_hidw_toolbar.htm b/src/windows/leash/htmlhelp/html/afx_hidw_toolbar.htm deleted file mode 100644 index fc47454f23..0000000000 --- a/src/windows/leash/htmlhelp/html/afx_hidw_toolbar.htm +++ /dev/null @@ -1,23 +0,0 @@ - - - - -(toolbar) - - - - - - - - - -

Toolbar

- - -

The toolbar is displayed across the top of the application window, below the menu bar. The toolbar provides quick mouse access to many tools used in <<YourApp>>,

- -

To hide or display the toolbar, click Toolbar from the View menu.

- - - diff --git a/src/windows/leash/htmlhelp/html/hid_app_about.htm b/src/windows/leash/htmlhelp/html/hid_app_about.htm deleted file mode 100644 index 538cc9e1f7..0000000000 --- a/src/windows/leash/htmlhelp/html/hid_app_about.htm +++ /dev/null @@ -1,16 +0,0 @@ - - - - -(About command (Help menu)) - - - - - -

About command (Help menu)

- -

Use this command to display the copyright notice and version number of your copy of <<YourApp>>.

- - - diff --git a/src/windows/leash/htmlhelp/html/hid_app_exit.htm b/src/windows/leash/htmlhelp/html/hid_app_exit.htm deleted file mode 100644 index 805f043489..0000000000 --- a/src/windows/leash/htmlhelp/html/hid_app_exit.htm +++ /dev/null @@ -1,22 +0,0 @@ - - - - -(File Exit command) - - - - - - - - - -

Exit command (File menu)

- -

Use this command to end your <<YourApp>> session. You can also use the - Close command on the application Control menu. <<YourApp>> prompts you to save documents with unsaved changes.

- - - - diff --git a/src/windows/leash/htmlhelp/html/hid_context_help.htm b/src/windows/leash/htmlhelp/html/hid_context_help.htm deleted file mode 100644 index 34f742ecaf..0000000000 --- a/src/windows/leash/htmlhelp/html/hid_context_help.htm +++ /dev/null @@ -1,20 +0,0 @@ - - - - -(Help Using Help Command) - - - - - -

Context Help command

- - -

Use this command to obtain help on some portion of <<YourApp>>. When you choose the -toolbar's Context Help button, the mouse pointer will change to an arrow and question mark. Then click somewhere in the <<YourApp>> window, such as another -toolbar button. The help topic will be shown for the item you clicked.

- - - - diff --git a/src/windows/leash/htmlhelp/html/hid_help_index.htm b/src/windows/leash/htmlhelp/html/hid_help_index.htm deleted file mode 100644 index 93561776f0..0000000000 --- a/src/windows/leash/htmlhelp/html/hid_help_index.htm +++ /dev/null @@ -1,18 +0,0 @@ - - - - -(Index command (Help menu)) - - - - - -

Index command (Help menu)

- -

Use this command to display the opening screen of help. From the opening screen, you can jump to step-by-step instructions for using <<YourApp>> and various types of reference information.

- -

Once you open help, you can click the Contents button whenever you want to return to the opening screen.

- - - diff --git a/src/windows/leash/htmlhelp/html/hid_help_using.htm b/src/windows/leash/htmlhelp/html/hid_help_using.htm deleted file mode 100644 index bcf07e873e..0000000000 --- a/src/windows/leash/htmlhelp/html/hid_help_using.htm +++ /dev/null @@ -1,16 +0,0 @@ - - - - -(Using Help command (Help menu)) - - - - - -

Using Help command (Help menu)

- -

Use this command for instructions about using help.

- - - diff --git a/src/windows/leash/htmlhelp/html/hid_sc_close.htm b/src/windows/leash/htmlhelp/html/hid_sc_close.htm deleted file mode 100644 index 775be73105..0000000000 --- a/src/windows/leash/htmlhelp/html/hid_sc_close.htm +++ /dev/null @@ -1 +0,0 @@ -(Close command (Control menus))

Close command (Control menus)

Use this command to close the active window or dialog box.

Double-clicking a Control menu box is the same as choosing the Close command.

Note: If you have multiple windows open for a single document, the Close command on the document Control menu closes only one window at a time. You can close all windows at once with the Close command on the File menu.

diff --git a/src/windows/leash/htmlhelp/html/hid_sc_maximize.htm b/src/windows/leash/htmlhelp/html/hid_sc_maximize.htm deleted file mode 100644 index 241292d189..0000000000 --- a/src/windows/leash/htmlhelp/html/hid_sc_maximize.htm +++ /dev/null @@ -1,17 +0,0 @@ - - - - -(Maximize command (System menu)) - - - - - -

Maximize command (System menu)

- -

Use this command to enlarge the active window to fill the available space.

- - - - diff --git a/src/windows/leash/htmlhelp/html/hid_sc_minimize.htm b/src/windows/leash/htmlhelp/html/hid_sc_minimize.htm deleted file mode 100644 index 118fe1e391..0000000000 --- a/src/windows/leash/htmlhelp/html/hid_sc_minimize.htm +++ /dev/null @@ -1,16 +0,0 @@ - - - - -(System Minimize Command) - - - - - -

Minimize command (application Control menu)

- -

Use this command to reduce the <<YourApp>> window to an icon.

- - - diff --git a/src/windows/leash/htmlhelp/html/hid_sc_move.htm b/src/windows/leash/htmlhelp/html/hid_sc_move.htm deleted file mode 100644 index f97f8553be..0000000000 --- a/src/windows/leash/htmlhelp/html/hid_sc_move.htm +++ /dev/null @@ -1,18 +0,0 @@ - - - - -(Move command (Control menu)) - - - - - -

Move command (Control menu)

- -

Use this command to display a four-headed arrow so you can move the active window or dialog box with the arrow keys.

- -

Note: This command is unavailable if you maximize the window.

- - - diff --git a/src/windows/leash/htmlhelp/html/hid_sc_restore.htm b/src/windows/leash/htmlhelp/html/hid_sc_restore.htm deleted file mode 100644 index bdef3572cf..0000000000 --- a/src/windows/leash/htmlhelp/html/hid_sc_restore.htm +++ /dev/null @@ -1,17 +0,0 @@ - - - - -(Restore command (Control menu)) - - - - - -

Restore command (Control menu)

- -

Use this command to return the active window to its size and position before you chose the - Maximize or Minimize command.

- - - diff --git a/src/windows/leash/htmlhelp/html/hid_sc_size.htm b/src/windows/leash/htmlhelp/html/hid_sc_size.htm deleted file mode 100644 index 933271998e..0000000000 --- a/src/windows/leash/htmlhelp/html/hid_sc_size.htm +++ /dev/null @@ -1,26 +0,0 @@ - - - - -(Size command (System menu)) - - - - - -

Size command (System menu)

- -

Use this command to display a four-headed arrow so you can size the active window with the arrow keys.

- -

After the pointer changes to the four-headed arrow:

- -

1.Press one of the direction keys (left, right, up, or down arrow key) to move the pointer to the border you want to move.

- -

2.Press a direction key to move the border.

- -

3.Press ENTER when the window is the size you want.

- -

Note: This command is unavailable if you maximize the window.

- - - diff --git a/src/windows/leash/htmlhelp/html/hid_view_status_bar.htm b/src/windows/leash/htmlhelp/html/hid_view_status_bar.htm deleted file mode 100644 index 6068737354..0000000000 --- a/src/windows/leash/htmlhelp/html/hid_view_status_bar.htm +++ /dev/null @@ -1,24 +0,0 @@ - - - - -(View Status Bar Command) - - - - - - - - - -

Status Bar command (View menu)

- -

Use this command to display and hide the status bar, which describes the action to be executed by the selected menu item or -pressed toolbar button, and keyboard latch state. A checkmark appears next to the menu item when the -status bar is displayed.

- -

See Status Bar for help on using the status bar.

- - - diff --git a/src/windows/leash/htmlhelp/html/hid_view_toolbar.htm b/src/windows/leash/htmlhelp/html/hid_view_toolbar.htm deleted file mode 100644 index 43dfe353de..0000000000 --- a/src/windows/leash/htmlhelp/html/hid_view_toolbar.htm +++ /dev/null @@ -1,23 +0,0 @@ - - - - -(View Toolbar command) - - - - - - - - - -

Toolbar command (View menu)

- -

Use this command to display and hide the toolbar, which includes buttons for some of the most common commands in <<YourApp>>, such as - File Open. A checkmark appears next to the menu item when the toolbar is displayed.

- -

See Toolbar for help on using the toolbar.

- - - diff --git a/src/windows/leash/htmlhelp/html/leash_acknowledgements.htm b/src/windows/leash/htmlhelp/html/leash_acknowledgements.htm deleted file mode 100644 index 577ceb5841..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_acknowledgements.htm +++ /dev/null @@ -1,76 +0,0 @@ - - - - - The MIT Kerberos Team - - - - -

-

The MIT Kerberos Team

-This is by no means a complete list, as we have contributors and -collaborators from all over the net.
-
-MIT Team Members
- -The following people are not officially affiliated with MIT, but -contribute to the MIT Kerberos V5 effort: - -
- - diff --git a/src/windows/leash/htmlhelp/html/leash_bug_reports.htm b/src/windows/leash/htmlhelp/html/leash_bug_reports.htm deleted file mode 100644 index d830815327..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_bug_reports.htm +++ /dev/null @@ -1,30 +0,0 @@ - - - - - Reporting Bugs and Requesting Assistance - - - - -

-

Reporting Bugs and Requesting -Assistance
-

-

-

If you find bugs, please mail -them to kfw-bugs@MIT.EDU.

-

kerberos@MIT.EDU is a mailing list set up for -discussing -Kerberos issues. It is gatewayed to the Usenet newsgroup -'comp.protocols.kerberos'. If you prefer to read it via mail, send a -request to -kerberos-request@MIT.EDU to get added or subscribe via the web page: 

-

http://mailman.mit.edu/mailman/listinfo/kerberos

-

 

- - diff --git a/src/windows/leash/htmlhelp/html/leash_command_change_password.htm b/src/windows/leash/htmlhelp/html/leash_command_change_password.htm deleted file mode 100644 index e2e971eacc..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_command_change_password.htm +++ /dev/null @@ -1,28 +0,0 @@ - - - - - Change Password Command - - - - -

Change Password Command

-

The Change Password command is found on the Action menu; it is also -the fifth button (from the left) in the toolbar.  This command -changes your Kerberos password.
-

-

Change Password Dialog
-

-

Note: This command will not change your local machine password -unless your Windows Logon Session is authenticated using Kerberos.
-

-

How To -Choose a Password.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_command_destroy_tickets.htm b/src/windows/leash/htmlhelp/html/leash_command_destroy_tickets.htm deleted file mode 100644 index 595ce8161a..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_command_destroy_tickets.htm +++ /dev/null @@ -1,27 +0,0 @@ - - - - - Destroy Tickets Command - - - - -

Destroy Ticket(s)/Token(s) Command, Ctrl+D

-This command is found on the Action menu; it is also the fourth button -(from the left) in the toolbar.  Use this command to destroy all -of the Kerberos tickets (and perhaps AFS tokens) on your local -machine.  Leash confirms your intentions before completing the -request.  Tickets for individual services may not be destroyed by -the Leash Application.
-
-Once tickets are destroyed, you must Get or Import new tickets before -Kerberized applications can once again access network services.
-
- - diff --git a/src/windows/leash/htmlhelp/html/leash_command_get_tickets.htm b/src/windows/leash/htmlhelp/html/leash_command_get_tickets.htm deleted file mode 100644 index a38091905a..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_command_get_tickets.htm +++ /dev/null @@ -1,43 +0,0 @@ - - - - - Get Tickets Command - - - - -

Get Ticket(s)/Token(s) Command, Ctrl+T

-This command is found under the Action menu; it is also the first -button (from the left) in the toolbar.  Use this command to obtain -new Kerberos tickets (and perhaps AFS tokens.)
-
-Advanced Initialize Tickets Dialog
-
-Basic Initialize Tickets Dialog
-
-When you select this commmand, Leash displays a dialog requesting your -Username, Kerberos Realm, and Password; if these are correct, Leash -will obtain tickets for you.  You may optionally specify a ticket -lifetime and various Kerberos 5 ticket options:
-
    -
  • ticket forwarding
  • -
  • addressless tickets
  • -
  • renewable ticket times
    -
  • -
-

See Also

-

Kerberos tickets

-

AFS tokens

- - diff --git a/src/windows/leash/htmlhelp/html/leash_command_import_tickets.htm b/src/windows/leash/htmlhelp/html/leash_command_import_tickets.htm deleted file mode 100644 index 846bb35eba..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_command_import_tickets.htm +++ /dev/null @@ -1,27 +0,0 @@ - - - - - Import Tickets Command - - - - -

Import Ticket(s)/Token(s) Command, Ctrl+I

-This command is found on the Action menu; it is the third button (from -the left) in the toolbar.  Use this command to import Kerberos -tickets from your Windows Logon Session.  Importing tickets will -result in the destruction of existing tickets.  Leash will confirm -the operation if necessary.
-
-Note:  This command is only available if your Windows Logon -Session is authenticated using Kerberos.
-

See Also

-

Kerberos tickets

-

AFS tokens

- - diff --git a/src/windows/leash/htmlhelp/html/leash_command_renew_tickets.htm b/src/windows/leash/htmlhelp/html/leash_command_renew_tickets.htm deleted file mode 100644 index cca2fb8f22..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_command_renew_tickets.htm +++ /dev/null @@ -1,27 +0,0 @@ - - - - - Renew Tickets Command - - - - -

Renew Ticket(s)/Token(s) Command, Ctrl+R

-This command is found on the Action menu; it is also the second button -(from the left) in the toolbar.  Use this command to renew the -Kerberos tickets (and perhaps AFS tokens) on your local machine without -requiring the use of a password.  If your existing tickets cannot -be renewed the ticket initialization dialog will be displayed allowing -you to request new tickets.
-
-Note: This command is only available if your existing Kerberos tickets -are renewable.
-
-
- - diff --git a/src/windows/leash/htmlhelp/html/leash_command_reset_window.htm b/src/windows/leash/htmlhelp/html/leash_command_reset_window.htm deleted file mode 100644 index 3c189e772b..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_command_reset_window.htm +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Reset Window Size/Pos Option - - - - -

Reset Window Size/Pos -Option

-

When you select this from the Options menu, the Leash window moves -to its default size and position, near the upper left corner of the -screen.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_command_sync_time.htm b/src/windows/leash/htmlhelp/html/leash_command_sync_time.htm deleted file mode 100644 index 8b69f87b50..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_command_sync_time.htm +++ /dev/null @@ -1,27 +0,0 @@ - - - - - Synchronize Time Option - - - - -

Synchronize Time

-

This command is found on the Action menu; it is also the sixth -button (from the left) in the toolbar.  When you select this -command, Leash synchronizes the local machine time with the time server -specified in the Leash Properties dialog.
-

-

Note: Kerberos authentication protocol requires loosely synchronized -time between computers.  The local machine clock and the Kerberos -server clock need to be within five minutes of each other for Kerberos -to function properly.  This function can also be performed with -the clock icon on the toolbar and has no keyboard equivalent.
-
-

- - diff --git a/src/windows/leash/htmlhelp/html/leash_command_update_display.htm b/src/windows/leash/htmlhelp/html/leash_command_update_display.htm deleted file mode 100644 index a10718aa98..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_command_update_display.htm +++ /dev/null @@ -1,30 +0,0 @@ - - - - - Update Display Command - - - - -

Update Display Command, F5

-

Use this command (in the Actions menu, or the black rectangular -icon) to update the display of your current Kerberos tickets. You can -also perform this function by clicking in the main Leash window.

-

Why Use It...

-

Although most end users will likely find this Leash feature -irrelevant, application developers and support staff may occasionally -find it to be useful. For example, you may want an immediate status -check of Kerberos tickets if you have just used command-line kinit or kdestroy and want to check that -they have functioned successfully.

-

How It Works...

-

While Leash automatically checks the status of your Kerberos tickets -every 30 seconds, the Update Display command forces an immediate status -check.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_copyright.htm b/src/windows/leash/htmlhelp/html/leash_copyright.htm deleted file mode 100644 index f3bc88eab5..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_copyright.htm +++ /dev/null @@ -1,45 +0,0 @@ - - - - - Leash Copyright - - - - -

-

Leash Copyright

-

-

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:

-

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:

-

Copyright 1992-2004 by the Massachusetts Institute of Technology. -All rights reserved.

-

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.

-

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.

-

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.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_errors.htm b/src/windows/leash/htmlhelp/html/leash_errors.htm deleted file mode 100644 index 9179109235..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_errors.htm +++ /dev/null @@ -1,18 +0,0 @@ - - - - - Leash Copyright - - - - -

-

Common Leash Error Messages

-

-This section describes error messages commonly displayed by Leash. - - diff --git a/src/windows/leash/htmlhelp/html/leash_export.htm b/src/windows/leash/htmlhelp/html/leash_export.htm deleted file mode 100644 index b7b39a7f0c..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_export.htm +++ /dev/null @@ -1,34 +0,0 @@ - - - - - Kerberos Export Restrictions and Source Code Access - - - - -

-

Kerberos Export Restrictions and Source Code Access

-

-

Copyright (C) 1989-2004 by the Massachusetts Institute of Technology

-

Export of this software from the United States of America may -require a specific license from the United States Government. It is the -responsibility of any person or organization contemplating export to -obtain such a license before exporting.

-

WITHIN THAT CONSTRAINT, permission to use, copy, modify, and -distribute this software and its documentation for any purpose and -without fee is hereby granted, provided that the above copyright notice -appear in all copies and that both that copyright notice and this -permission notice appear in supporting documentation, and that the name -of M.I.T. not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior -permission. M.I.T. makes no representations about the suitability of -this software for any purpose. It is provided "as is" without express -or implied warranty.

-

Export of the documentation is not restricted.

-
- - diff --git a/src/windows/leash/htmlhelp/html/leash_external_aklog.htm b/src/windows/leash/htmlhelp/html/leash_external_aklog.htm deleted file mode 100644 index 5b00030b94..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_external_aklog.htm +++ /dev/null @@ -1,20 +0,0 @@ - - - - - aklog.exe - - - - -

aklog.exe program

-

aklog is a program which may be used to obtain AFS tokens for a cell -which may or may not be equivalent to the Kerberos realm whose tickets -are used to obtain the tokens.
-
-

- - diff --git a/src/windows/leash/htmlhelp/html/leash_external_kdestroy.htm b/src/windows/leash/htmlhelp/html/leash_external_kdestroy.htm deleted file mode 100644 index a623193e8d..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_external_kdestroy.htm +++ /dev/null @@ -1,19 +0,0 @@ - - - - -kdestroy.exe - - - - - - - - -

kdestroy.exe program

- -

This is another way to destroy your tickets. Running this application will immediately destroy all tickets and tokens you might have, no matter how they were obtained.

- - - diff --git a/src/windows/leash/htmlhelp/html/leash_external_kinit.htm b/src/windows/leash/htmlhelp/html/leash_external_kinit.htm deleted file mode 100644 index 97d62c0718..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_external_kinit.htm +++ /dev/null @@ -1,19 +0,0 @@ - - - - -kinit.exe - - - - - - - - -

kinit.exe program

- -

This is a little program which will run a command-prompt, text-based version of the ticket initialization window. (However, unlike in the graphical version, you do not have the option of changing the ticket lifetime.) This can be useful if you have a slow computer, or if you are having difficulty with the graphical version for some reason.

- - - diff --git a/src/windows/leash/htmlhelp/html/leash_external_klist.htm b/src/windows/leash/htmlhelp/html/leash_external_klist.htm deleted file mode 100644 index a2e7bdbdda..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_external_klist.htm +++ /dev/null @@ -1,19 +0,0 @@ - - - - -Why Use - - - - - - - - -

klist.exe program

- -

This application will quickly list all of the tickets you have.

- - - diff --git a/src/windows/leash/htmlhelp/html/leash_external_ms2mit.htm b/src/windows/leash/htmlhelp/html/leash_external_ms2mit.htm deleted file mode 100644 index a2f301e9d8..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_external_ms2mit.htm +++ /dev/null @@ -1,20 +0,0 @@ - - - - - ms2mit.exe - - - - -

ms2mit.exe program

-

This is another way to import Windows Logon Session Kerberos tickets -for use by Leash and other Kerberos for Windows applications.  The -functionality is equivalent to the Import Tickets Command.
-
-

- - diff --git a/src/windows/leash/htmlhelp/html/leash_file_exit.htm b/src/windows/leash/htmlhelp/html/leash_file_exit.htm deleted file mode 100644 index 72ecf4911a..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_file_exit.htm +++ /dev/null @@ -1,24 +0,0 @@ - - - - - Exit/End Leash Program - - - - -

Exit Command

-

From the File menu, you can use this command to exit the Leash -program.  If any other means is used to close the Leash window, -the Leash program will continue to execute and remain present in the -Windows System Tray.
-

-

Important Note...

-

Exiting the Leash program will not destroy your current -Kerberos tickets. Unless you have selected this in the options menu, -you need to use the destroy tickets command.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_help_about_leash32.htm b/src/windows/leash/htmlhelp/html/leash_help_about_leash32.htm deleted file mode 100644 index 8eedd894b4..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_help_about_leash32.htm +++ /dev/null @@ -1,42 +0,0 @@ - - - - - About Leash Command - - - - -

About Leash

-

When you access this window from the Help menu, you see a Module -list, three radio buttons, and a Properties button. Modules are -executables and dll files that Leash may require.
-

-

About Leash dialog
-

-

The radio buttons let you choose to view a list of: -

-
    -
  • Leash Modules - displays the modules that Leash currently has -loaded for its own use;
    -
    -
  • -
  • All Modules - displays Leash modules as well as those loaded by -the OS;
    -
    -
  • -
  • Missing Modules - displays modules that Leash needs for -complete functionality but that are not found. (Leash can still -function with some modules missing.). This is useful if part of Leash -is missing; you can find which files are needed to restore full -functionality.
  • -
-

If you select a module and click on the Properties button, Leash -displays the properties of the selected module - both the general -properties and those of this particular version.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_kerberos_copyright.htm b/src/windows/leash/htmlhelp/html/leash_kerberos_copyright.htm deleted file mode 100644 index 68fa98fc38..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_kerberos_copyright.htm +++ /dev/null @@ -1,45 +0,0 @@ - - - - - Kerberos Copyright - - - - -

-

Kerberos Copyright

-

-

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:

-

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:

-

Copyright 1992-2004 by the Massachusetts Institute of Technology. -All rights reserved.

-

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.

-

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.

-

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.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_manpage_aklog.htm b/src/windows/leash/htmlhelp/html/leash_manpage_aklog.htm deleted file mode 100644 index a9c5f6ddce..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_manpage_aklog.htm +++ /dev/null @@ -1,17 +0,0 @@ - - - - - AKLOG Command - - - - -

AKLOG Command

-

(from UNIX man page)

-
User Commands                                            AKLOG(1)

NAME
aklog - Obtain tokens for authentication to AFS

SYNOPSIS
aklog [ -d ] [ -force ] [ -hosts ] [ -zsubs ] [ -noprdb ] [
[ -cell | -c ] cell [ -k kerberos-realm ] ] [ [ -path | -p ]
pathname ]

DESCRIPTION
The aklog program is used to authenticate to a cell or
directory in AFS, the Andrew Filesystem, by obtaining AFS
tokens. Ordinarily, aklog is not used directly but called by
attach(1).

If aklog is invoked with no command line arguments, it will
obtain tokens for the workstation's local cell. It is pos-
sible to invoke aklog with arbitrarily many cells and path-
names specified on the command line. aklog knows how to
expand cell name abbreviations, so short forms of cell names
can be use used. In addition, aklog understands the follow-
ing command line options:

-cell | -c cell
This flag is not ordinarily necessary since aklog can
usually figure out when an argument is a cell. It can
be used to introduce a cell name that would ordinarily
be mistaken for a path name if this should be required.
If this flag is omitted, an argument will be treated as
a cell name if it contains no slashes (/) and is neither
"." nor ".." .

-k kerberos-realm
This flag is valid only when immediately following the
name of a cell. It is used to tell aklog what kerberos
realm should be used while authenticating to the preced-
ing cell. This argument is unnecessary except when the
workstation is not properly configured. Ordinarily,
aklog can determine this information on its own.

-path | -p pathname
Like the -cell flag, this flag is usually unnecessary.
When it appears, the next command line argument is
always treated as a path name. Ordinarily, an argument
is treated as a path name if it is "." or ".." or if it
contains a slash (/).

-hosts
Prints all the server addresses which may act as a sin-
gle point of failure in accessing the specified direc-
tory path. Each element of the path is examined, and as
new volumes are traversed, if they are not replicated,
the server's IP address containing the volume will be
displayed. Attach(1) invokes aklog with this option.
The output is of the form

host: IP address

-zsubs
Causes the printing of the zephyr subscription informa-
tion that a person using a given path or cell would
want. Attach(1) invokes aklog with this option. The
output is of the form

zsub: instance

where instance is the instance of a class filsrv zephyr
subscription.

-noprdb
Ordinarily, aklog looks up the AFS ID corresponding to
the name of the person invoking the command. Specifying
this flag turns off this functionality. This may be
desirable if the protection database is unavailable for
some reason and tokens are desired anyway.

-d Turns on printing of debugging information. This option
is not intended for general users.

-force
Forces aklog to obtain new tokens even if the user
already appears to have tokens identical to the new ones
they would get. This option is most often required when
the user has recently been added to an AFS group.

EXIT CODES
The exit status of aklog will be one of the following:

0 Success -- No error occurred.

1 Usage -- Bad command syntax; accompanied by a usage
message.

2 Something failed -- More than one cell or pathname was
given on the command line and at least one failure
occurred. A more specific error status is returned
when only one directive is given.

3 AFS -- Unable to get AFS configuration or unable to get
information about a specific cell.

4 Kerberos -- Unable to get tickets for authentication.

5 Token -- Unable to get tokens.

6 Bad pathname -- The path given was not a directory or
lstat(2) failed on some component of the pathname.

7 Miscellaneous -- An internal failure occurred. For
example, aklog returns this if it runs out of memory.

EXAMPLES
To get tokens for the local cell:
% aklog

To get tokens for the athena.mit.edu cell:
% aklog athena.mit.edu
or
% aklog athena

To get tokens adequate to read
/afs/athena.mit.edu/user/p/potato:
% aklog /afs/athena.mit.edu/user/p/potato

To get tokens for a test cell that is in a test Kerberos
realm:
% aklog testcell.mit.edu -k TESTREALM.MIT.EDU

SEE ALSO
attach(1), tokens(1), unlog(1)


- - diff --git a/src/windows/leash/htmlhelp/html/leash_manpage_kdestroy.htm b/src/windows/leash/htmlhelp/html/leash_manpage_kdestroy.htm deleted file mode 100644 index 9c7aa421b7..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_manpage_kdestroy.htm +++ /dev/null @@ -1,86 +0,0 @@ - - - - -KDESTROY Command - - - - - - - - -

KDESTROY Command

- -

(from UNIX man page)

- -
User Commands  KDESTROY ( 1 )
-
-NAME
- kdestroy - destroy Kerberos tickets
-
-SYNOPSIS
- kdestroy [-5] [-4] [-q] [-c cache_name]
-
-DESCRIPTION
-
- The kdestroy utility destroys the user's active Kerberos
- authorization tickets by writing zeros to the specified credentials
- cache that contains them.  If the credentials cache is not specified,
- the default credentials cache is destroyed.  If kdestroy was built with
- Kerberos 4 support, the default behavior is to destroy both Kerberos 5
- and Kerberos 4 credentials.  Otherwise, kdestroy will default to
- destroying only Kerberos 5 credentials.
-
-OPTIONS
-
- -5 destroy Kerberos 5 credentials.  This overrides whatever the
-    default built-in behavior may be.  This option may be used with -4
-
- -4 destroy Kerberos 4 credentials.  This overrides whatever the
-    default built-in behavior may be.  This option is only available
-    if kinit was built with Kerberos 4 compatibility.  This option may
-    be used with -5
-
- -q Run quietly.  Normally kdestroy beeps if it fails to destroy the
-    user's tickets.  The -q flag suppresses this behavior.
-
- -c cache_name
-    use cache_name as the credentials (ticket) cache name and
-    location; if this option is not used, the default cache name and
-    location are used.
-
- The default credentials cache may vary between systems.  If the
- KRB5CCNAME environment variable is set, its value is used to name the
- default ticket cache.
-
- Most installations recommend that you place the kdestroy command in
- your .logout file, so that your tickets are destroyed automatically
- when you log out.
-
-ENVIRONMENT
- Kdestroy uses the following environment variables:
-
- KRB5CCNAME Location of the Kerberos 5 credentials (ticket) cache.
-
- KRBTKFILE Filename of the Kerberos 4 credentials (ticket) cache.
-
-FILES
- /tmp/krb5cc_[uid] default location of Kerberos 5 credentials cache
- ([uid] is the decimal UID of the user).
-
- /tmp/tkt[uid] default location of Kerberos 4 credentials cache ([uid]
- is the decimal UID of the user).
-
-SEE  ALSO
- kinit(1), klist(1), krb5(3)
-
-BUGS
- Only the tickets in the specified credentials cache are
- destroyed.  Separate ticket caches are used to hold root instance and
- password changing tickets.  These should probably be destroyed too,
- or all of a user's tickets kept in a single credentials cache.
- - - diff --git a/src/windows/leash/htmlhelp/html/leash_manpage_kinit.htm b/src/windows/leash/htmlhelp/html/leash_manpage_kinit.htm deleted file mode 100644 index 88e54f3e0f..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_manpage_kinit.htm +++ /dev/null @@ -1,17 +0,0 @@ - - - - - KINIT Command - - - - -

KINIT Command

-

(from UNIX man page)

-
User Commands                                            KINIT(1)

NAME
kinit - obtain and cache Kerberos ticket-granting ticket

SYNOPSIS
kinit
[-5] [-4] [-V] [-l lifetime] [-s start_time] [-r
renewable_life] [-p | -P] [-f | -F] [-A] [-v] [-R] [-k
[-t keytab_file]] [-c cache_name] [-S service_name]
[principal]

DESCRIPTION
kinit obtains and caches an initial ticket-granting ticket
for principal.Thetypicaldefaultbehavior Kerberos 5 tickets.
However, if kinit was built with both Kerberos 4 support and
with the default behavior of acquiring both types of tick-
ets, it will try to acquire both Kerberos 5 and Kerberos 4
by default. Any documentation particular to Kerberos 4 does
not apply if Kerberos 4 support was not built into kinit.

OPTIONS
-5 get Kerberos 5 tickets. This overrides whatever the
default built-in behavior may be. This option may be
used with -4

-4 get Kerberos 4 tickets. This overrides whatever the
default built-in behavior may be. This option is only
available if kinit was built with Kerberos 4 compati-
bility. This option may be used with -5

-V display verbose output.

-l lifetime
requests a ticket with the lifetime lifetime. The
value for lifetime must be followed immediately by one
of the following delimiters:

s seconds
m minutes
h hours
d days

as in "kinit -l 90m". You cannot mix units; a value of
`3h30m' will result in an error.

If the -l option is not specified, the default ticket
lifetime (configured by each site) is used. Specifying
a ticket lifetime longer than the maximum ticket life-
time (configured by each site) results in a ticket with
the maximum lifetime.

-s start_time
requests a postdated ticket, valid starting at
start_time. Postdated tickets are issued with the
invalid flag set, and need to be fed back to the kdc
before use. (Not applicaple to Kerberos 4.)

-r renewable_life
requests renewable tickets, with a total lifetime of
renewable_life. The duration is in the same format as
the -l option, with the same delimiters. (Not applica-
ple to Kerberos 4.)

-f request forwardable tickets. (Not applicaple to Ker-
beros 4.)

-F do not request forwardable tickets. (Not applicaple to
Kerberos 4.)

-p request proxiable tickets. (Not applicaple to Kerberos
4.)

-P do not request proxiable tickets. (Not applicaple to
Kerberos 4.)

-A request address-less tickets. (Not applicaple to Ker-
beros 4.)

-v requests that the ticket granting ticket in the cache
(with the invalid flag set) be passed to the kdc for
validation. If the ticket is within its requested time
range, the cache is replaced with the validated ticket.
(Not applicaple to Kerberos 4.)

-R requests renewal of the ticket-granting ticket. Note
that an expired ticket cannot be renewed, even if the
ticket is still within its renewable life. When using
this option with Kerberos 4, the kdc must support Ker-
beros 5 to Kerberos 4 ticket conversion.

-k [-t keytab_file]
requests a host ticket, obtained from a key in the
local host's keytab file. The name and location of the
keytab file may be specified with the -t keytab_file
option; otherwise the default name and location will be
used. When using this option with Kerberos 4, the kdc
must support Kerberos 5 to Kerberos 4 ticket conver-
sion.

-c cache_name
use cache_name as the Kerberos 5 credentials (ticket)
cache name and location; if this option is not used,
the default cache name and location are used.

The default credentials cache may vary between systems.

If the KRB5CCNAME environment variable is set, its
value is used to name the default ticket cache. Any
existing contents of the cache are destroyed by kinit.
(Note: The default name for Kerberos 4 comes from the
KRBTKFILE environment variable. This option does not
apply to Kerberos 4.)

-S service_name
specify an alternate service name to use when getting
initial tickets. (Applicable to Kerberos 5 or if using
both Kerberos 5 and Kerberos 4 with a kdc that supports
Kerberos 5 to Kerberos 4 ticket conversion.)

ENVIRONMENT
Kinit uses the following environment variables:

KRB5CCNAME Location of the Kerberos 5 credentials
(ticket) cache.

KRBTKFILE Filename of the Kerberos 4 credentials
(ticket) cache.

FILES
/tmp/krb5cc_[uid] default location of Kerberos 5 creden-
tials cache ([uid] is the decimal UID of
the user).

/tmp/tkt[uid] default location of Kerberos 4 credentials
cache ([uid] is the decimal UID of the user).

/etc/krb5.keytab
default location for the local host's keytab
file.

SEE ALSO
klist(1), kdestroy(1), krb5(3)


- - diff --git a/src/windows/leash/htmlhelp/html/leash_manpage_klist.htm b/src/windows/leash/htmlhelp/html/leash_manpage_klist.htm deleted file mode 100644 index 9bc955e2cb..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_manpage_klist.htm +++ /dev/null @@ -1,106 +0,0 @@ - - - - -KLIST Command - - - - - - - - -

KLIST Command

- -

(from UNIX man page)

- -
User Commands  KLIST ( 1 )
-
-NAME
- klist - list cached Kerberos tickets
-
-SYNOPSIS
- klist [-5] [-4] [-e] [[-c] [-f] [-s] [-a [-n]]] [-k [-t] [-K]]
- [cache_name | keytab_name]
-
-DESCRIPTION
-
- Klist lists the Kerberos principal and Kerberos tickets held in a
- credentials cache, or the keys held in a keytab file.  If klist was
- built with Kerberos 4 support, the default behavior is to list both
- Kerberos 5 and Kerberos 4 credentials.  Otherwise, klist will default
- to listing only Kerberos 5 credentials.
-
-OPTIONS
- -5 list Kerberos 5 credentials.  This overrides whatever the default
- built-in behavior may be.  This option may be used with -4
-
- -4 list Kerberos 4 credentials.  This overrides whatever the default
- built-in behavior may be.  This option is only available if kinit was
- built with Kerberos 4 compatibility.  This option may be used with -5
-
- -e displays the encryption types of the session key and the ticket
- for each credential in the credential cache, or each key in the
- keytab file.
-
- -c List tickets held in a credentials cache.  This is the default if
- neither -c nor -k is specified.
-
- -f shows the flags present in the credentials, using the following
- abbreviations:
-
- F Forwardable
- f forwarded
- P Proxiable
- p proxy
- D postDateable
- d postdated
- R Renewable
- I Initial
- i invalid
-
- -s causes klist to run silently (produce no output), but to still set
- the exit status according to whether it finds the credentials cache.
- The exit status is `0' if klist finds a credentials cache, and `1' if
- it does not.
-
- -a display list of addresses in credentials.
-
- -n show numeric addresses instead of reverse-resolving addresses.
-
- -k List keys held in a keytab file.
-
- -t display the time entry timestamps for each keytab entry in the
- keytab file.
-
- -K display the value of the encryption key in each keytab entry in
- the keytab file.
-
- If cache_name or keytab_name is not specified, klist will display the
- credentials in the default credentials cache or keytab file as
- appropriate.  If the KRB5CCNAME environment variable is set, its
- value is used to name the default ticket cache.
-
-ENVIRONMENT
- Klist uses the following environment variables:
-
- KRB5CCNAME Location of the Kerberos 5 credentials (ticket) cache.
-
- KRBTKFILE Filename of the Kerberos 4 credentials (ticket) cache.
-
-FILES
- /tmp/krb5cc_[uid] default location of Kerberos 5 credentials cache
- ([uid] is the decimal UID of the user).
-
- /tmp/tkt[uid] default location of Kerberos 4 credentials cache ([uid]
- is the decimal UID of the user).
-
- /etc/krb5.keytab
- default location for the local host's keytab file.
-
-SEE  ALSO
- kinit(1), kdestroy(1), krb5(3)
- - - diff --git a/src/windows/leash/htmlhelp/html/leash_manpage_ms2mit.htm b/src/windows/leash/htmlhelp/html/leash_manpage_ms2mit.htm deleted file mode 100644 index 99184f6cdb..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_manpage_ms2mit.htm +++ /dev/null @@ -1,16 +0,0 @@ - - - - - MS2MIT Command - - - - -

MS2MIT Command

-
NAME
ms2mit - import Kerberos credentials from the current Windows Logon
Session and insert them into the Kerberos for Windows
default Credentials Cache

SYNOPSIS
ms2mit

DESCRIPTION



SEE ALSO
klist(1), kdestroy(1), krb5(3)
- - diff --git a/src/windows/leash/htmlhelp/html/leash_manpages.htm b/src/windows/leash/htmlhelp/html/leash_manpages.htm deleted file mode 100644 index 3838622542..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_manpages.htm +++ /dev/null @@ -1,18 +0,0 @@ - - - - - Leash Copyright - - - - -

-

Kerberos for Windows Command Line Tools Manpages

-

-

This section reproduces the manpages for the Kerberos for Windows command line tools.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_menu_commands.htm b/src/windows/leash/htmlhelp/html/leash_menu_commands.htm deleted file mode 100644 index a3d8a8ab86..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_menu_commands.htm +++ /dev/null @@ -1,58 +0,0 @@ - - - - - Leash Commands - - - - - -

-

Leash Commands

-

-

File:
-File menu
-

-

Exit

-

Action:
-Action Menu
-

-

Get Ticket(s)/Token(s)

-

Renew Ticket(s)/Token(s)

-

Import Ticket(s)/Token(s)

-

Destroy Ticket(s)/Token(s)

-

Change Password

-

Reset Window Size/Pos

-

Synchronize Time

-

Update Display

-

View:
-View menu
-

-

Large Icons

-

Toolbar

-

Status Bar

-

Debug Window

-

Options:
-Options menu
-

-

Upper Case Realm Name

-

Expiration Alarm

-

Destroy Tickets/Tokens on Exit

-

Leash PropertiesÂ…

-

Kerberos Properties

-

Kerberos v4 PropertiesÂ…

-

Kerberos v5 PropertiesÂ…

-

AFS Properties

-

Help:
-Help menu
-

-

About Leash...

- - diff --git a/src/windows/leash/htmlhelp/html/leash_menu_help_why_use.htm b/src/windows/leash/htmlhelp/html/leash_menu_help_why_use.htm deleted file mode 100644 index 9a0f1bde15..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_menu_help_why_use.htm +++ /dev/null @@ -1,17 +0,0 @@ - - - - - Why Use - - - - -

Why Use Leash

-

This command, found under the Help menu, starts Leash help (the -document you are currently viewing).

- - diff --git a/src/windows/leash/htmlhelp/html/leash_option_afs_properties.htm b/src/windows/leash/htmlhelp/html/leash_option_afs_properties.htm deleted file mode 100644 index c64aabd4cb..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_option_afs_properties.htm +++ /dev/null @@ -1,27 +0,0 @@ - - - - - AFS Properties Command - - - - -

AFS Properties Command, -Ctrl+A

-

The AFS Properties dialog can be found on the Options menu when AFS -is available.

-

AFS Properties Dialog
-

-

There is a radio button pair to enable or disable the retrieval and -display of AFS tokens. There is also an AFS Properties button to bring -up the AFS Client Configuration program in order to alter settings for -Client Properties, Cell Hosts, and Submounts.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_option_auto_renewal.htm b/src/windows/leash/htmlhelp/html/leash_option_auto_renewal.htm deleted file mode 100644 index 904b9b4aa6..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_option_auto_renewal.htm +++ /dev/null @@ -1,22 +0,0 @@ - - - - - Automatic Ticket Renewal Option - - - - -

Automatic Ticket -Renewal Option

-When Automatic Ticket Renewal is on, whenever tickets (or tokens) are -near expiration (within 15 minutes) Leash will attempt to extend the -ticket lifetime either via ticket renewal or ticket importation.  -If these attempts fail, Leash will display the ticket initialization -dialog.  In this way, Leash ensures that there are always valid -Kerberos tickets (and AFS tokens).
- - diff --git a/src/windows/leash/htmlhelp/html/leash_option_destroy_tickets_on_exit.htm b/src/windows/leash/htmlhelp/html/leash_option_destroy_tickets_on_exit.htm deleted file mode 100644 index d8da0d91d4..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_option_destroy_tickets_on_exit.htm +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Destroy Tickets/Tokens on Exit Option - - - - -

Destroy Tickets/Tokens -on Exit Option

-

If this option is selected under the Options menu, Leash destroys -your tickets and tokens when you Exit Leash; otherwise, the tickets -remain. This option is turned off by default.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_option_expiration_alarm.htm b/src/windows/leash/htmlhelp/html/leash_option_expiration_alarm.htm deleted file mode 100644 index c253970c9a..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_option_expiration_alarm.htm +++ /dev/null @@ -1,25 +0,0 @@ - - - - - Low Ticket/Token Time Alarm Option - - - - -

Expiration Alarm Option

-

Leash will always pop up windows with warnings that your tickets are -about to expire, beginning 15 minutes before the time of expiration and -continuing every 5 minutes. However, when this option is selected under -the Options menu, a bell will ring as well.

-

When you view your tickets and tokens, those shown in yellow are due -to expire in less than 15 minutes; those in green have 15 minutes or -greater. (A red ticket is one you have but is expired; gray tickets are -not available to you at the current time, because Leash or your machine -is missing a requisite module or piece of functionality.)
-

- - diff --git a/src/windows/leash/htmlhelp/html/leash_option_kerberos_properties.htm b/src/windows/leash/htmlhelp/html/leash_option_kerberos_properties.htm deleted file mode 100644 index d3ea1301ce..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_option_kerberos_properties.htm +++ /dev/null @@ -1,133 +0,0 @@ - - - - - Kerberos Properties Command - - - - -

Kerberos Properties Command, Ctrl+K

-

When you select this from the Options menu, Leash will display a -tabbed window. The box within this window has four tabs:
-

-
    -
  • Default Realm Configuration
  • -
  • Ticket Lifetime and Other Initialization Options
    -
  • -
  • Realm/Server Mapping
    -
  • -
  • DNS/Realm Mapping.
  • -
-

Default Realm Configuration:
-Default Realm Configuration
-

-

There are two groups, the Kerberos -Realm/Host Server and the Computer -Host/Domain Name.

-

Kerberos Realm/Host Server: In the Your -Kerberos Realm field, select a Kerberos realm from the dropdown -list. The list is editable using the Realm/Server Mapping tab. Leash -automatically fills in your Kerberos server with the first server in -the "Servers Hosting a KDC" list on the Realm/Server Mappings tab.

-

Computer Host/Domain Name: The field labeled Your Computer's Host Name displays -the name of your local machine.  The Your Computer's Domain Name field -displays the domain to which your local machine currently belongs.
-

-

Ticket Lifetime and Other Initialization Options:
-Ticket Lifetime
-

-

-

-<>There are two expiration times associated with Kerberos -tickets.  The first specifies the length of the time period during -which the tickets are valid for use.  The second specifies the -length of the renewable lifetime.  Valid Kerberos tickets may have -their valid use lifetime repeatedly extended up until the renewable -lifetime expires.  The settings on this page are used to configure -default lifetime values for Leash to use when requesting Kerberos -tickets from the Kerberos server (key distribution center).  The -Kerberos server may issue tickets with shorter lifetimes than were -requested.
-
-The minimum and maximum values are used by the ticket initialization -dialog box when constructing the Lifetime and Renewable Lifetime -sliders.  These sliders can be used to modify the requested ticket -lifetimes when Kerberos tickets are initialized.
-
-When the Request Kerberos 4 -credentials button is checked, Leash will attempt to retrieve -Kerberos 4 -credentials when ticket initialization, renewal, or importation is -performed.  Leash will attempt a Kerberos -5 to Kerberos 4 conversion and if that fails an initial Kerberos 4 -ticket -request will be generated.  Kerberos -realms are increasingly configured to support on Kerberos 5.  If the realms you use do not support Kerberos -4 it is suggested that this button be unchecked. -<> 
-
-When the Preserve Ticket Initialization Options button -is checked, changes -to the Lifetime, Renewable Lifetime, and Kerberos 5 ticket properties -on the -Ticket Initialization Dialog will be saved as the new default values -for the -current user. -

-

-

Realm/Server Mapping:
-Realm / Server Mapping
-

-The Kerberos Realms list box -is used to add, remove or rename realms from the local Kerberos -configuration files. To add a new realm, click on the Insert button -beneath the Kerberos Realms list box.  In the dialog, type the -name of the new realm and click OK.  However, for the realm to be -inserted, it needs one or more servers.  Immediately after you -enter the new realm name, you will be prompted for the names of one -Kerberos server in that realm.  If you do not enter a server name, -Leash will not insert the realm.
-
-To add servers to an existing realm, select the realm from the Kerberos -Realms list box and click the Insert button under Servers Hosting a KDC -list box.  You will be prompted for the name of the new -server.  You can also remove servers, and designate either one or -none as the administrative server.  (The administrative server is -the preferred server for performing password changes.)  
-
-By clicking and dragging on the server that you want to move, you can -change their order; this is important because the server listed at the -top appears in this window under the Default -Realm Configuration tab as the value for Your Kerberos Server.
-
-The Use DNS KDC Lookup -checkbox is used to specify whether or not Kerberos should utilize the -domain name service to attempt to find Kerberos Servers when the -existing listed servers are not available.
-
-

DNS/Realm Mapping:
-DNS / Realm Mapping
-

-

Each entry here consists of two portions: the domain name (such as -.mit.edu) or hostname (such as dialup.athena.mit.edu) followed by a -space and the Kerberos realm (such as ATHENA.MIT.EDU) which is used by -that domain or machine.  You can insert new entries, edit existing -ones, or delete old entries.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_option_krb4_properties.htm b/src/windows/leash/htmlhelp/html/leash_option_krb4_properties.htm deleted file mode 100644 index a8922c9d50..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_option_krb4_properties.htm +++ /dev/null @@ -1,33 +0,0 @@ - - - - - Kerberos Four Properties Command - - - - -

Kerberos v4 PropertiesÂ… Command, Ctrl+4

-

The Kerberos v4 Properties dialog is accessible from the Options -menu.
-

-

Kerberos Four Properties
-

-

Here, you can specify the name of the in-memory cache used to store -the Kerberos 4 tickets.  The format of the name is “API:” followed -by the cache name.  Disk caches are not supported by Kerberos for -Windows.
-
-The paths to the Kerberos 4 configuration files: krb.con and -krbrealm.con may be changed from this dialog if necessary.  The -default is to store the configuration files in the Windows directory.
-
-

- - diff --git a/src/windows/leash/htmlhelp/html/leash_option_krb5_properties.htm b/src/windows/leash/htmlhelp/html/leash_option_krb5_properties.htm deleted file mode 100644 index d6868824c6..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_option_krb5_properties.htm +++ /dev/null @@ -1,126 +0,0 @@ - - - - - Kerberos Five Properties Command - - - - -

Kerberos v5 Properties Command, Ctrl+5

-The Kerberos v5 Properties dialog is accessible from the Options menu. -This dialog has two tabs: File -Location and Configuration -Options.
-
-File Location:
-
-Kerberos Five Properties: File Location
-
-

The File -Location -tab allows you to specify the location of the default Kerberos 5 ticket -cache and -configuration file.  The Ticket -File field specifies the name of -the in-memory cache (Ticket File) used to store the Kerberos 5 tickets.  The format of the name is “API:” followed by -the cache name or "MSLSA:".  Disk caches -(type "FILE:") are not -supported by Kerberos for Windows.  The Configuration File field specifies the -path to the Kerberos 5 configuration file, krb5.ini.  -If Confirm -that new configuration file exists is checked when the -configuration file -location is changed, then Leash will not accept values which are not -pre-existing Kerberos 5 configuration files.
-

-


-Configuration Options:

-

-

Kerberos Five Properties: Configuration Options
-

-

-

On the Configuration -Options page, you provide default attribute values to be used when -requesting Kerberos 5 tickets from the Kerberos server.  -

-

When Forwardable 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.  When tickets are -forwarded, there is no need to obtain Kerberos tickets again to access -Kerberized -services on the remote host.

-

When Proxiable tickets -are received from the Kerberos Server, these tickets can be passed onto -Kerberized services which can in turn act on your behalf.  

-

When Renewable -tickets are received from the Kerberos Server, the ticket lifetimes may -be -renewed without prompting the user for her password.  -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.  When combined with Automatic -Ticket Renewal (Option menu), Leash can maintain valid -tickets for a week, a month, or longer by automatically renewing -tickets prior -to their expiration.  The ability to -renew tickets without a password is limited by the ticketÂ’s renewable -lifetime as -issued by the Kerberos Server.

-

Traditionally, Kerberos tickets have included a -list of -network addresses within the tickets.  -This address list restricts the use of the tickets to the -computers -which are assigned those addresses.  The -use of address lists has become a headache for many users of Kerberos -on -network connections which use either Network Address Translation -(Cable/DSL -routers) or Network Address Hiding (VPN) capabilities.  -On these networks the address of the client -machine appears to be different to the network service than it does to -the -client.  The result is the Kerberos -ticket is deemed to be invalid by the service even though it has not been -stolen.  When No Addresses is -checked, Kerberos will not insert an address list -into the Kerberos tickets.  For -Kerberized services which do not require address lists, this will -enable -Kerberos to be used across NAT and VPN based connections.  

-

Note 1:  As of -Kerberos 5 release 1.3, the library default is to disable the use of -address -lists.  Leash will detect the setting -from the Kerberos 5 configuration and check the No -Addresses box.  If you -attempt to re-enable address lists while the library is configured to -disable -them , Leash will warn you that the Kerberos 5 configuration file must -be -altered.   

-

Note 2: Distributed Computing Environment (DCE) -servers -require the use of address lists.

-
- - diff --git a/src/windows/leash/htmlhelp/html/leash_option_leash_properties.htm b/src/windows/leash/htmlhelp/html/leash_option_leash_properties.htm deleted file mode 100644 index 2ca9221930..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_option_leash_properties.htm +++ /dev/null @@ -1,79 +0,0 @@ - - - - - Leash Properties Command - - - - -

Leash PropertiesÂ… Command, Ctrl+L

-

-

-

The Leash Properties dialog, located on the -Options menu, -allows you to configure operational properties specific to the Leash -application which are not accessible directly via the Options menu.

-


-Leash Properties

-

Here you can set a time server from which Leash -will obtain -the correct time.  Leash needs the -correct time because of the time dependencies in Kerberos tickets.  When you specify a time server, Leash tries -to get the time from that server when you next run the Synchronize Time -command.  The default value for the time -server is "time".  If access to -a time server were to fail, Leash would notify you, and revert to the -server -"time".  Whichever server -succeeds, Leash would tell you where it found the time.  -See the Synchronize Time command for more -information.

-

-

-

The Automatic MSLSA -Ticket Importation radio buttons allow you to configure how Leash -interacts -with the Microsoft Kerberos Authentication Provider.  -Leash 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.  Never -means do not import tickets from -the MSLSA; Always means do import -tickets from the MSLSA; and When MSLSA -Principal matches Default Realm means import tickets from the MSLSA -only if -the Kerberos principal belongs to the Kerberos Realm specified within -the Kerberos Properties Dialog.

-

-

When Request Kerberos 4 credentials is -checked, Leash -will attempt to retrieve Kerberos 4 credentials when ticket -initialization, -renewal, or importation is performed.  -Leash will attempt a Kerberos 5 to Kerberos 4 conversion and if -that -fails an initial Kerberos 4 ticket request will be generated.  Kerberos realms are increasingly configured -to support on Kerberos 5.  If the realms -you use do not support Kerberos 4 it is suggested that this button be -unchecked.

-

The Restore Leash Defaults button is used -to restore -user configurable Leash settings to the defaults as configured either -by the -local machine system administrator or by the Kerberos for Windows -distribution.
-
-

- - diff --git a/src/windows/leash/htmlhelp/html/leash_option_upper_case_realm.htm b/src/windows/leash/htmlhelp/html/leash_option_upper_case_realm.htm deleted file mode 100644 index c4c1abe59b..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_option_upper_case_realm.htm +++ /dev/null @@ -1,24 +0,0 @@ - - - - - Upper Case Realm Name Option - - - - -

Upper Case Realm Name -Option

-

-

-

The default for this (accessible from the Options -menu) is -on; when this option is selected, the Kerberos realm name that you type -(such -as ATHENA.MIT.EDU) is converted to upper case regardless of how you -type it.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_topic_about_kerberos.htm b/src/windows/leash/htmlhelp/html/leash_topic_about_kerberos.htm deleted file mode 100644 index a71181a57d..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_topic_about_kerberos.htm +++ /dev/null @@ -1,52 +0,0 @@ - - - - -KERBEROS - - - - - - - - -

About Kerberos

- -

In Greek myth, the three-headed dog Kerberos guarded the gates of Hades. -These days, Kerberos is an authentication service developed at -MIT for open network computing environments such as MITnet. Kerberos verifies -that you are who you claim to be by matching your username and password, -called a Kerberos principal, to a -private key encryption.

- -

When you start an application that relies on Kerberos authentication, you -must identify yourself by giving your Kerberos principal. The Kerberos service -checks to make sure that your name and password match the encrypted key before -it gives you access to the service you have requested. The security of the -network environment is maintained by never sending your unencrypted Kerberos -password over the network.

- -

To use the Athena system, you must have a Kerberos username and password. -Some Macintosh and Windows applications at MIT that use Kerberos to -authenticate a user's identity are Eudora, Zephyr and AFS.

- -

See Also

- -

An Authentication Service for Open Network -Systems

- -

(This technical description of Kerberos, by Steiner, Neuman, and Schiller, -is available via anonymous ftp from athena-dist.mit.edu, -/pub/kerberos/doc/usenix.txt.)

- -

Kerberos: How Does the Other Guy Know Who I -Am?.

- -

(This basic introduction to Kerberos and definitions of Kerberos-related -terms is available in the SIPB publication An Inessential Guide to -Athena.)

- - - diff --git a/src/windows/leash/htmlhelp/html/leash_topic_error_57.htm b/src/windows/leash/htmlhelp/html/leash_topic_error_57.htm deleted file mode 100644 index f765293c03..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_topic_error_57.htm +++ /dev/null @@ -1,25 +0,0 @@ - - - - - Kerberos Error 57 - - - - -

Kerberos Error 57: Cannot contact the Kerberos server for the selected realm.

-

This error has three common causes:

-

1.The realm is misspelled, e.g. pbh@AHTENA.MIT.EDU instead of -pbh@ATHENA.MIT.EDU (realms are case sensitive).

-

2.Your krb.con file contains an entry for ATHENA.MIT.EDU but not -athena.mit.edu.

-

3.The realm is missing from your KRB.CON file, which should be -located in your \net\kerb directory. If you suspect the problem is with -your KRB.CON file, either call the Network Help Desk, 3-4101, or copy -the /etc/krb.conf file from a nearby UNIX workstation to your -\net\kerb\krb.con file.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_topic_error_62.htm b/src/windows/leash/htmlhelp/html/leash_topic_error_62.htm deleted file mode 100644 index 41f45405e9..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_topic_error_62.htm +++ /dev/null @@ -1,20 +0,0 @@ - - - - - Kerberos Error 62 - - - - -

Kerberos Error 62: Password incorrect.

-

This means that either you have misspelled your password or you have -gotten the case wrong. Check the state of your CAPS Lock key.

-

Characters do not echo to the screen or cause a beep when you type -your password so that nearby users won't be able to tell how many -letters are in your password.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_topic_error_8.htm b/src/windows/leash/htmlhelp/html/leash_topic_error_8.htm deleted file mode 100644 index 5fb88467dc..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_topic_error_8.htm +++ /dev/null @@ -1,21 +0,0 @@ - - - - - Kerberos Error 8 - - - - -

Kerberos Error 8: Unknown username, instance, or realm.

-

This error usually occurs when the username is not known for the -designated realm. For example, at the time of this writing, there is no -user "zzwn" in the Athena realm, so entering zzwn as a username will -generate this error.

-

Check the entered username or realm name for spelling mistakes or -the wrong case.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_topic_error_invalid_principal.htm b/src/windows/leash/htmlhelp/html/leash_topic_error_invalid_principal.htm deleted file mode 100644 index fa7829f1fc..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_topic_error_invalid_principal.htm +++ /dev/null @@ -1,17 +0,0 @@ - - - - - Invalid Principle - - - - -

Invalid principal.

-

This usually means that you just clicked on the OK button or pressed -Enter without typing your username.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_topic_kerberos_auth_service.htm b/src/windows/leash/htmlhelp/html/leash_topic_kerberos_auth_service.htm deleted file mode 100644 index 6aeb65763b..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_topic_kerberos_auth_service.htm +++ /dev/null @@ -1,988 +0,0 @@ - - - - - An Authentication Service for Open Network Systems - - - - -

Kerberos: An Authentication -Service for Open Network Systems

-

Jennifer G. Steiner

-
-
-
Project Athena
-
-
-
-
Massachusetts Institute of Technology
-
-
-
-
Cambridge, MA 02139
-
-
-
-
steiner@ATHENA.MIT.EDU
-
-
-

Clifford Neuman *

-
-
-
Department of Computer Science, FR-35
-
-
-
-
University of Washington
-
-
-
-
Seattle, WA 98195
-
-
-
-
bcn@CS.WASHINGTON.EDU
-
-
-

Jeffrey I. Schiller

-
-
-
Project Athena
-
-
-
-
Massachusetts Institute of Technology
-
-
-
-
Cambridge, MA 02139
-
-
-
-
jis@ATHENA.MIT.EDU
-
-

* Clifford Neuman was a member of the Project Athena staff during -the design and initial implementation phase of Kerberos.

-

-

ABSTRACT

-

In an open network computing -environment, a workstation cannot be trusted to identify its users -correctly to network services. Kerberos provides an alternative -approach whereby a trusted third-party authentication service is used -to verify users' identities. This paper gives an overview of the Kerberos -authentication model as implemented for MIT's Project Athena. It -describes the protocols used by clients, servers, and Kerberos -to achieve authentication. It also describes the management and -replication of the database required. The views of Kerberos as -seen by the user, programmer, and administrator are described. Finally, -the role of Kerberos in the larger Athena picture is given, -along with a list of applications that presently use Kerberos -for user authentication. We describe the addition of Kerberos -authentication to the Sun Network File System as a case study for -integrating Kerberos with an existing application.

-

Introduction

-

This paper gives an overview of Kerberos, an authentication -system designed by Miller and Neumanfor open network computing -environments, and describes our experience using it at MIT's Project -Athena. In the first section of the paper, we explain why a new -authentication model is needed for open networks, and what its -requirements are. The second section lists the components of the Kerberos -software and describes how they interact in providing the -authentication service. In Section 3, we describe the Kerberos -naming scheme.

-

Section 4 presents the building blocks of Kerberos -authentication - the ticket and the authenticator. This -leads to a discussion of the two authentication protocols: the initial -authentication of a user to Kerberos (analogous to logging in), -and the protocol for mutual authentication of a potential consumer and -a potential producer of a network service.

-

Kerberos requires a database of information about its -clients; Section 5 describes the database, its management, and the -protocol for its modification. Section 6 describes the Kerberos -interface to its users, applications programmers, and administrators. -In Section 7, we describe how the Project Athena Kerberos fits -into the rest of the Athena environment. We also describe the -interaction of different Kerberos authentication domains, or realms -; in our case, the relation between the Project Athena Kerberos -and the Kerberos running at MIT's Laboratory for Computer -Science.

-

In Section 8, we mention open issues and problems as yet unsolved. -The last section gives the current status of Kerberos at -Project Athena. In the appendix, we describe in detail how Kerberos -is applied to a network file service to authenticate users who wish to -gain access to remote file systems.

-

Conventions. Throughout this paper we use terms that may be -ambiguous, new to the reader, or used differently elsewhere. Below we -state our use of those terms.

-

User, Client, Server. By user, we mean a human being -who uses a program or service. A client also uses something, -but is not necessarily a person; it can be a program. Often network -applications consist of two parts; one program which runs on one -machine and requests a remote service, and another program which runs -on the remote machine and performs that service. We call those the client -side and server side of the application, respectively. Often, a -client will contact a server on behalf of a user.

-

Each entity that uses the Kerberos system, be it a user or a -network server, is in one sense a client, since it uses the Kerberos -service. So to distinguish Kerberos clients from clients of -other services, we use the term principal to indicate such an -entity. Note that a Kerberos principal can be either a user or -a server. (We describe the naming of Kerberos principals in a -later section.)

-

Service vs. Server. We use service as an abstract -specification of some actions to be performed. A process which performs -those actions is called a server. At a given time, there may be -several servers (usually running on different machines) -performing a given service. For example, at Athena there is one -BSD UNIX rlog-in server running on each of our timesharing -machines.

-

Key, Private Key, Password. Kerberos uses private key -encryption. Each Kerberos principal is assigned a large number, -its private key, known only to that principal and Kerberos. In -the case of a user, the private key is the result of a one-way function -applied to the user's password. We use key as shorthand -for private key.

-

Credentials. Unfortunately, this word has a special meaning -for both the Sun Network File System and the Kerberos system. -We explicitly state whether we mean NFS credentials or Kerberos -credentials, otherwise the term is used in the normal English language -sense.

-

Master and Slave. It is possible to run Kerberos -authentication software on more than one machine. However, there is -always only one definitive copy of the Kerberos database. The -machine which houses this database is called the master -machine, or just the master. Other machines may possess -read-only copies of the Kerberos database, and these are called -slaves.

-

1. Motivation

-

In a non-networked personal computing environment, resources and -information can be protected by physically securing the personal -computer. In a timesharing computing environment, the operating system -protects users from one another and controls resources. In order to -determine what each user is able to read or modify, it is necessary for -the timesharing system to identify each user. This is accomplished when -the user logs in.

-

In a network of users requiring services from many separate -computers, there are three approaches one can take to access control: -One can do nothing, relying on the machine to which the user is logged -in to prevent unauthorized access; one can require the host to prove -its identity, but trust the host's word as to who the user is; or one -can require the user to prove her/his identity for each required -service.

-

In a closed environment where all the machines are under strict -control, one can use the first approach. When the organization controls -all the hosts communicating over the network, this is a reasonable -approach.

-

In a more open environment, one might selectively trust only those -hosts under organizational control. In this case, each host must be -required to prove its identity. The rlog-in and rsh programs use this -approach. In those protocols, authentication is done by checking the -Internet address from which a connection has been established.

-

In the Athena environment, we must be able to honor requests from -hosts that are not under organizational control. Users have complete -control of their workstations: they can reboot them, bring them up -standalone, or even boot off their own tapes. As such, the third -approach must be taken; the user must prove her/his identity for each -desired service. The server must also prove its identity. It is not -sufficient to physically secure the host running a network server; -someone elsewhere on the network may be masquerading as the given -server.

-

Our environment places several requirements on an identification -mechanism. First, it must be secure. Circumventing it must be difficult -enough that a potential attacker does not find the authentication -mechanism to be the weak link. Someone watching the network should not -be able to obtain the information necessary to impersonate another -user. Second, it must be reliable. Access to many services will depend -on the authentication service. If it is not reliable, the system of -services as a whole will not be. Third, it should be transparent. -Ideally, the user should not be aware of authentication taking place. -Finally, it should be scalable. Many systems can communicate with -Athena hosts. Not all of these will support our mechanism, but software -should not break if they did.

-

Kerberos is the result of our work to satisfy the above -requirements. When a user walks up to a workstation s/he "logs in". As -far as the user can tell, this initial identification is sufficient to -prove her/his identity to all the required network servers for the -duration of the log-in session. The security of Kerberos relies on the -security of several authentication servers, but not on the system from -which users log in, nor on the security of the end servers that will be -used. The authentication server provides a properly authenticated user -with a way to prove her/his identity to servers scattered across the -network.

-

Authentication is a fundamental building block for a secure -networked environment. If, for example, a server knows for certain the -identity of a client, it can decide whether to provide the service, -whether the user should be given special privileges, who should receive -the bill for the service, and so forth. In other words, authorization -and accounting schemes can be built on top of the authentication that -Kerberos provides, resulting in equivalent security to the lone -personal computer or the timesharing system.

-

2. What is Kerberos ?

-

Kerberos is a trusted third-party authentication service -based on the model presented by Needham and Schroeder.It is trusted in -the sense that each of its clients believes Kerberos' judgement -as to the identity of each of its other clients to be accurate. Time -stamps (large numbers representing the current date and time) have been -added to the original model to aid in the detection of replay. -Replay occurs when a message is stolen off the network and resent -later. For a more complete description of replay, and other issues of -authentication, see Voydock and Kent.

-

2.1. What Does It Do?

-

Kerberos keeps a database of its clients and their private -keys. The private key is a large number known only to Kerberos -and the client it belongs to. In the case that the client is a user, it -is an encrypted password. Network services requiring authentication -register with Kerberos, as do clients wishing to use those -services. The private keys are negotiated at registration.

-

Because Kerberos knows these private keys, it can create -messages which convince one client that another is really who it claims -to be. Kerberos also generates temporary private keys, called session -keys, which are given to two clients and no one else. A session key -can be used to encrypt messages between two parties.

-

Kerberos provides three distinct levels of protection. The -application programmer determines which is appropriate, according to -the requirements of the application. For example, some applications -require only that authenticity be established at the initiation of a -network connection, and can assume that further messages from a given -network address originate from the authenticated party. Our -authenticated network file system uses this level of security.

-

Other applications require authentication of each message, but do -not care whether the content of the message is disclosed or not. For -these, Kerberos provides safe messages. Yet a higher -level of security is provided by private messages, where each -message is not only authenticated, but also encrypted. Private messages -are used, for example, by the Kerberos server itself for -sending passwords over the network

-

2.2. Software Components

-

The Athena implementation comprises several modules (see Figure 1). -The Kerberos applications library provides an interface for -application clients and application servers. It contains, among others, -routines for creating or reading authentication requests, and the -routines for creating safe or private messages.
-

-
    -
  • Kerberos applications -library
  • -
  • encryption library
  • -
  • database library
  • -
  • database administration programs
  • -
  • administration server
  • -
  • authentication server
  • -
  • propogation software
  • -
  • user programs
  • -
  • applications
  • -
-

Figure 1. Kerberos -Software Components

-

Encryption in Kerberos is based on DES, the Data Encryption -Standard.The encryption library implements those routines. Several -methods of encryption are provided, with tradeoffs between speed and -security. An extension to the DES Cypher Block Chaining (CBC) mode, -called the Propagating CBC mode, is also provided. In CBC, an error is -propagated only through the current block of the cipher, whereas in -PCBC, the error is propagated throughout the message. This renders the -entire message useless if an error occurs, rather than just a portion -of it. The encryption library is an independent module, and may be -replaced with other DES implementations or a different encryption -library.

-

Another replaceable module is the database management system. The -current Athena implementation of the database library uses ndbm, -although INGRES was originally used. Other database management -libraries could be used as well.

-

The Kerberos database needs are straightforward; a record is -held for each principal, containing the name, private key, and -expiration date of the principal, along with some administrative -information. (The expiration date is the date after which an entry is -no longer valid. It is usually set to a few years into the future at -registration.)

-

Other user information, such as real name, phone number, and so -forth, is kept by another server, the Hesiod nameserver. This -way, sensitive information, namely passwords, can be handled by Kerberos, -using fairly high security measures; while the non-sensitive -information kept by Hesiod is dealt with differently; it can, -for example, be sent unencrypted over the network.

-

The Kerberos servers use the database library, as do the -tools for administering the database.

-

The administration server (or KDBM server) provides a -read-write network interface to the database. The client side of the -program may be run on any machine on the network. The server side, -however, must run on the machine housing the Kerberos database -in order to make changes to the database.

-

The authentication server (or Kerberos server), on -the other hand, performs read-only operations on the Kerberos -database, namely, the authentication of principals, and generation of -session keys. Since this server does not modify the Kerberos -database, it may run on a machine housing a read-only copy of the -master Kerberos database.

-

Database propagation software manages replication of the Kerberos -database. It is possible to have copies of the database on several -different machines, with a copy of the authentication server running on -each machine. Each of these slave machines receives an update -of the Kerberos database from the master machine at -given intervals.

-

Finally, there are end-user programs for logging in to Kerberos, -changing a Kerberos password, and displaying or destroying Kerberos -tickets (tickets are explained later on).

-

3. Kerberos Names

-

Part of authenticating an entity is naming it. The process of -authentication is the verification that the client is the one named in -a request. What does a name consist of? In Kerberos, both users -and servers are named. As far as the authentication server is -concerned, they are equivalent. A name consists of a primary name, an -instance, and a realm, expressed as name.instance@realm (see -Figure 2).

-

bcn

-

treese.root

-

jis@LCS.MIT.EDU

-

rlog-in.priam@ATHENA.MIT.EDU

-

Figure 2. Kerberos Names

-

The primary name is the name of the user or the service. The -instance is used to distinguish among variations on the primary -name. For users, an instance may entail special privileges, such as the -"root" or "admin" instances. For services in the Athena environment, -the instance is usually the name of the machine on which the server -runs. For example, the rlog-in service has different instances -on different hosts: rlog-in.priam is the rlog-in server -on the host named priam. A Kerberos ticket is only good for a -single named server. As such, a separate ticket is required to gain -access to different instances of the same service. The realm is -the name of an administrative entity that maintains authentication -data. For example, different institutions may each have their own Kerberos -machine, housing a different database. They have different Kerberos -realms. (Realms are discussed further in section 8.2.).

-

4. How It Works

-

This section describes the Kerberos authentication -protocols. The following abbreviations are used in the figures.
-

-
-
c        ->     client
s       ->     server
addr    -> client's network address
life -> lifetime of ticket
tgs, TGS -> ticket-granting ticket
Kerberos -> authentication server
KDBM -> administration server
Kx -> x's private key
Kx,y -> session key for x and y
{abc}Kx -> abc encrypted in x's key
Tx,y -> x's ticket to use y
Ax -> authenticator for x
WS -> workstation
-
-

As mentioned above, the Kerberos authentication model is -based on the Needham and Schroeder key distribution protocol. When a -user requests a service, her/his identity must be established. To do -this, a ticket is presented to the server, along with proof that the -ticket was originally issued to the user, not stolen. There are three -phases to authentication through Kerberos. In the first phase, -the user obtains credentials to be used to request access to other -services. In the second phase, the user requests authentication for a -specific service. In the final phase, the user presents those -credentials to the end server.

-

4.1 Credentials

-

There are two types of credentials used in the Kerberos -authentication model: tickets and authenticators. Both -are based on private key encryption, but they are encrypted using -different keys. A ticket is used to securely pass the identity of the -person to whom the ticket was issued between the authentication server -and the end server. A ticket also passes information that can be used -to make sure that the person using the ticket is the same person to -which it was issued. The authenticator contains the additional -information which, when compared against that in the ticket proves that -the client presenting the ticket is the same one to which the ticket -was issued.

-

A ticket is good for a single server and a single client. It -contains the name of the server, the name of the client, the Internet -address of the client, a time stamp, a lifetime, and a random session -key. This information is encrypted using the key of the server for -which the ticket will be used. Once the ticket has been issued, it may -be used multiple times by the named client to gain access to the named -server, until the ticket expires. Note that because the ticket is -encrypted in the key of the server, it is safe to allow the user to -pass the ticket on to the server without having to worry about the user -modifying the ticket (see Figure 3).
-

-

{s, c, addr, timestamp, life, Ks,c} -Ks
-

-

Figure 3. Kerberos Ticket.

-

Unlike the ticket, the authenticator can only be used once. A new -one must be generated each time a client wants to use a service. This -does not present a problem because the client is able to build the -authenticator itself. An authenticator contains the name of the client, -the workstation's IP address, and the current workstation time. The -authenticator is encrypted in the session key that is part of the -ticket (see Figure 4).

-
{ c, addr, timestamp } Ks,c
-
-

Figure 4. A Kerberos -Authenticator

-

4.2. Getting the Initial Ticket

-

When the user walks up to a workstation, only one piece of -information can prove her/his identity: the user's password. The -initial exchange with the authentication server is designed to minimize -the chance that the password will be compromised, while at the same -time not allowing a user to properly authenticate her/himself without -knowledge of that password. The process of logging in appears to the -user to be the same as logging in to a timesharing system. Behind the -scenes, though, it is quite different (see Figure 5).

-


-Figure 5.
Getting the Initial Ticket.

-

The user is prompted for her/his username. Once it has been entered, -a request is sent to the authentication server containing the user's -name and the name of a special service known as the ticket-granting -service.

-

The authentication server checks that it knows about the client. If -so, it generates a random session key which will later be used between -the client and the ticket-granting server. It then creates a ticket for -the ticket-granting server which contains the client's name, the name -of the ticket-granting server, the current time, a lifetime for the -ticket, the client's IP address, and the random session key just -created. This is all encrypted in a key known only to the -ticket-granting server and the authentication server.

-

The authentication server then sends the ticket, along with a copy -of the random session key and some additional information, back to the -client. This response is encrypted in the client's private key, known -only to Kerberos and the client, which is derived from the -user's password.

-

Once the response has been received by the client, the user is asked -for her/his password. The password is converted to a DES key and used -to decrypt the response from the authentication server. The ticket and -the session key, along with some of the other information, are stored -for future use, and the user's password and DES key are erased from -memory.

-

Once the exchange has been completed, the workstation possesses -information that it can use to prove the identity of its user for the -lifetime of the ticket-granting ticket. As long as the software on the -workstation had not been previously tampered with, no information -exists that will allow someone else to impersonate the user beyond the -life of the ticket.

-

4.3. Requesting a Service

-

For the moment, let us pretend that the user already has a ticket -for the desired server. In order to gain access to the server, the -application builds an authenticator containing the client's name and IP -address, and the current time. The authenticator is then encrypted in -the session key that was received with the ticket for the server. The -client then sends the authenticator along with the ticket to the server -in a manner defined by the individual application.

-

Once the authenticator and ticket have been received by the server, -the server decrypts the ticket, uses the session key included in the -ticket to decrypt the authenticator, compares the information in the -ticket with that in the authenticator, the IP address from which the -request was received, and the present time. If everything matches, it -allows the request to proceed (see Figure 6).

-


-Figure 6.
Requesting a Service

-

It is assumed that clocks are synchronized to within several -minutes. If the time in the request is too far in the future or the -past, the server treats the request as an attempt to replay a previous -request. The server is also allowed to keep track of all past requests -with time stamps that are still valid. In order to further foil replay -attacks, a request received with the same ticket and time stamp as one -already received can be discarded.

-

Finally, if the client specifies that it wants the server to prove -its identity too, the server adds one to the time stamp the client sent -in the authenticator, encrypts the result in the session key, and sends -the result back to the client (see Figure 7).

-


-Figure 7.
Mutual Authentication

-

At the end of this exchange, the server is certain that, according -to Kerberos, the client is who it says it is. If mutual -authentication occurs, the client is also convinced that the server is -authentic. Moreover, the client and server share a key which no one -else knows, and can safely assume that a reasonably recent message -encrypted in that key originated with the other party.

-

4.4 Getting Server Tickets

-

Recall that a ticket is only good for a single server. As such, it -is necessary to obtain a separate ticket for each service the client -wants to use. Tickets for individual servers can be obtained from the -ticket-granting service. Since the ticket-granting service is itself a -service, it makes use of the service access protocol described in the -previous section.

-

When a program requires a ticket that has not already been -requested, it sends a request to the ticket-granting server (see Figure -8). The request contains the name of the server for which a ticket is -requested, along with the ticket-granting ticket and an authenticator -built as described in the previous section.

-


-Figure 8.
Getting a Server Ticket

-

The ticket-granting server then checks the authenticator and -ticket-granting ticket as described above. If valid, the -ticket-granting server generates a new random session key to be used -between the client and the new server. It then builds a ticket for the -new server containing the client's name, the server name, the current -time, the client's IP address and the new session key it just -generated. The lifetime of the new ticket is the minimum of the -remaining life for the ticket-granting ticket and the default for the -service.

-

The ticket-granting server then sends the ticket, along with the -session key and other information, back to the client. This time, -however, the reply is encrypted in the session key that was part of the -ticket-granting ticket. This way, there is no need for the user to -enter her/his password again. Figure 9 summarizes the authentication -protocols.

-

-


-Figure 9.
Kerberos Authentication Protocols.

-

5. Kerberos Database

-

Up to this point, we have discussed operations requiring read-only -access to the Kerberos database. These operations are performed -by the authentication service, which can run on both master and slave -machines (see Figure 10).

-


-Figure 10.
Authentication Requests.

-

In this section, we discuss operations that require write access to -the database. These operations are performed by the administration -service, called the Kerberos Database Management Service (KDBM). -The current implementation stipulates that changes may only be made to -the master Kerberos database; slave copies are read-only. -Therefore, the KDBM server may only run on the master Kerberos -machine (see Figure 11).

-


-Figure 11.
Administration Requests

-

Note that, while authentication can still occur (on slaves), -administration requests cannot be serviced if the master machine is -down. In our experience, this has not presented a problem, as -administration requests are infrequent.

-

The KDBM handles requests from users to change their passwords. The -client side of this program, which sends requests to the KDBM over the -network, is the kpasswd program. The KDBM also accepts requests -from Kerberos administrators, who may add principals to the -database, as well as change passwords for existing principals. The -client side of the administration program, which also sends requests to -the KDBM over the network, is the kadmin program.

-

5.1. The KDBM Server

-

The KDBM server accepts requests to add principals to the database -or change the passwords for existing principals. This service is unique -in that the ticket-granting service will not issue tickets for it. -Instead, the authentication service itself must be used (the same -service that is used to get a ticket-granting ticket). The purpose of -this is to require the user to enter a password. If this were not so, -then if a user left her/his workstation unattended, a passerby could -walk up and change her/his password for them, something which should be -prevented. Likewise, if an administrator left her/his workstation -unguarded, a passerby could change any password in the system.

-

When the KDBM server receives a request, it authorizes it by -comparing the authenticated principal name of the requester of the -change to the principal name of the target of the request. If they are -the same, the request is permitted. If they are not the same, the KDBM -server consults an access control list (stored in a file on the master Kerberos -system). If the requester's principal name is found in this file, the -request is permitted, otherwise it is denied.

-

By convention, names with a. NULL instance (the default -instance) do not appear in the access control list file; instead, an admin -instance is used. Therefore, for a user to become an administrator of Kerberos -an admin instance for that username must be created, and added -to the access control list. This convention allows an administrator to -use a different password for Kerberos administration then s/he -would use for normal log-in.

-

All requests to the KDBM program, whether permitted or denied, are -logged.

-

5.2. The kadmin and kpasswd Programs

-

Administrators of Kerberos use the kadmin program to -add principals to the database, or change the passwords of existing -principals. An administrator is required to enter the password for -their admin instance name when they invoke the kadmin -program. This password is used to fetch a ticket for the KDBM server -(see Figure 12).

-

-


-Figure 12.
Kerberos Administration Protocol.

-

Users may change their Kerberos passwords using the kpasswd -program. They are required to enter their old password when they invoke -the program. This password is used to fetch a ticket for the KDBM -server.

-

5.3. Database Replication

-

Each Kerberos realm has a master Kerberos -machine, which houses the master copy of the authentication database. -It is possible (although not necessary) to have additional, read-only -copies of the database on slave machines elsewhere in the -system. The advantages of having multiple copies of the database are -those usually cited for replication: higher availability and better -performance. If the master machine is down, authentication can still be -achieved on one of the slave machines. The ability to perform -authentication on any one of several machines reduces the probability -of a bottleneck at the master machine.

-

Keeping multiple copies of the database introduces the problem of -data consistency. We have found that very simple methods suffice for -dealing with inconsistency. The master database is dumped every hour. -The database is sent, in its entirety, to the slave machines, which -then update their own databases. A program on the master host, called kprop, -sends the update to a peer program, called kpropd, running on -each of the slave machines (see Figure 13). First kprop sends a -checksum of the new database it is about to send. The checksum is -encrypted in the Kerberos master database key, which both the -master and slave Kerberos machines possess. The data is then -transferred over the network to the kpropd on the slave -machine. The slave propagation server calculates a checksum of the data -it has received, and if it matches the checksum sent by the master, the -new information is used to update the slave's database.

-


-Figure 13.
Database Propagation

-

All passwords in the Kerberos database are encrypted in the -master database key Therefore, the information passed from master to -slave over the network is not useful to an eavesdropper. However, it is -essential that only information from the master host be accepted by the -slaves, and that tampering of data be detected, thus the checksum.

-

6. Kerberos From the Outside Looking In

-

The section will describe Kerberos from the practical point -of view, first as seen by the user, then from the application -programmer's viewpoint, and finally, through the tasks of the Kerberos -administrator.

-

6.1. User's Eye View

-

If all goes well, the user will hardly notice that Kerberos -is present. In our UNIX implementation, the ticket-granting ticket is -obtained from Kerberos as part of the log-in process. -The changing of a user's Kerberos password is part of the passwd -program. And Kerberos tickets are automatically destroyed when -a user logs out.

-

If the user's log-in session lasts longer than the lifetime of the -ticket-granting ticket (currently 8 hours), the user will notice Kerberos' -presence because the next time a Kerberos -authenticated -application is executed, it will fail. The Kerberos ticket for -it will have expired. At that point, the user can run the kinit -program to obtain a new ticket for the ticket-granting server. As when -logging in, a password must be provided in order to get it. A user -executing the klist command out of curiosity may be surprised -at all the tickets which have silently been obtained on her/his behalf -for services which require Kerberos authentication.

-

6.2. From the Programmer's Viewpoint

-

A programmer writing a Kerberos application will often be -adding authentication to an already existing network application -consisting of a client and server side. We call this process -"Kerberizing" a program. Kerberizing usually involves making a call to -the Kerberos library in order to perform authentication at the -initial request for service. It may also involve calls to the DES -library to encrypt messages and data which are subsequently sent -between application client and application server.

-

The most commonly used library functions are krb_mk_req on -the client side, and krb_rd_req on the server side. The krb_mk_req -routine takes as parameters the name, instance, and realm of the target -server, which will be requested, and possibly a checksum of the data to -be sent. The client then sends the message returned by the krb_mk_req -call over the network to the server side of the application. When the -server receives this message, it makes a call to the library routine krb_rd_req. -The routine returns a judgement about the authenticity of the sender's -alleged identity.

-

If the application requires that messages sent between client and -server be secret, then library calls can be made to krb_mk_priv -(krb_rd_priv) to encrypt (decrypt) messages in the session key -which both sides now share.

-

6.3. The Kerberos Administrator's Job

-

The Kerberos administrator's job begins with running a -program to initialize the database. Another program must be run to -register essential principals in the database, such as the Kerberos -administrator's name with an admin instance. The Kerberos -authentication server and the administration server must be started up. -If there are slave databases, the administrator must arrange that the -programs to propagate database updates from master to slaves be kicked -off periodically.

-

After these initial steps have been taken, the administrator -manipulates the database over the network, using the kadmin -program. Through that program, new principals can be added, and -passwords can be changed.

-

In particular, when a new Kerberos application is added to -the system, the Kerberos administrator must take a few steps to -get it working. The server must be registered in the database, and -assigned a private key (usually this is an automatically generated -random key). Then, some data (including the server's key) must be -extracted from the database and installed in a file on the server's -machine. The default file is /etc/srvtab. The krb_rd_req -library routine called by the server (see the previous section) uses -the information in that file to decrypt messages sent encrypted in the -server's private key. The /etc/srvtab file authenticates the -server as a password typed at a terminal authenticates the user.

-

The Kerberos administrator must also ensure that Kerberos -machines are physically secure, and would also be wise to maintain -backups of the Master database.

-

7. The Bigger Picture

-

In this section, we describe how Kerberos fits into the -Athena environment, including its use by other network services and -applications, and how it interacts with remote Kerberos realms. -For a more complete description of the Athena environment, please see -G. W. Treese.

-

7.1. Other Network Services' Use of Kerberos

-

Several network applications have been modified to use Kerberos. -The rlog-in and rsh commands first try to authenticate -using Kerberos. A user with valid Kerberos tickets can -rlog-in to another Athena machine without having to set up.rhosts -files. If the Kerberos authentication fails, the programs fall -back on their usual methods of authorization, in this case, the.rhosts -files.

-

We have modified the Post Office Protocol to use Kerberos -for authenticating users who wish to retrieve their electronic mail -from the "post office". A message delivery program, called Zephyr, -has been recently developed at Athena, and it uses Kerberos for -authentication as well.

-

The program for signing up new users, called register, uses -both the Service Management System (SMS) and Kerberos. From -SMS, it determines whether the information entered by the would-be new -Athena user, such as name and MIT identification number, is valid. It -then checks with Kerberos to see if the requested username is -unique. If all goes well, a new entry is made to the Kerberos -database, containing the username and password.

-

For a detailed discussion of the use of Kerberos to secure -Sun's Network File System, please refer to the appendix..

-

7.2. Interaction with Other Kerberi

-

It is expected that different administrative organizations will want -to use Kerberos for user authentication. It is also expected -that in many cases, users in one organization will want to use services -in another. Kerberos supports multiple administrative domains. -The specification of names in Kerberos includes a field called -the realm. This field contains the name of the administrative -domain within which the user is to be authenticated.

-

Services are usually registered in a single realm and will only -accept credentials issued by an authentication server for that realm. A -user is usually registered in a single realm (the local realm), but it -is possible for her/him to obtain credentials issued by another realm -(the remote realm), on the strength of the authentication provided by -the local realm. Credentials valid in a remote realm indicate the realm -in which the user was originally authenticated. Services in the remote -realm can choose whether to honor those credentials, depending on the -degree of security required and the level of trust in the realm that -initially authenticated the user.

-

In order to perform cross-realm authentication, it is necessary that -the administrators of each pair of realms select a key to be shared -between their realms. A user in the local realm can then request a -ticket-granting ticket from the local authentication server for the -ticket-granting server in the remote realm. When that ticket is used, -the remote ticket-granting server recognizes that the request is not -from its own realm, and it uses the previously exchanged key to decrypt -the ticket-granting ticket. It then issues a ticket as it normally -would, except that the realm field for the client contains the name of -the realm in which the client was originally authenticated.

-

This approach could be extended to allow one to authenticate oneself -through a series of realms until reaching the realm with the desired -service. In order to do this, though, it would be necessary to record -the entire path that was taken, and not just the name of the initial -realm in which the user was authenticated. In such a situation, all -that is known by the server is that A says that B says that C says that -the user is so-and-so. This statement can only be trusted if everyone -along the path is also trusted.

-

8. Issues and Open Problems

-

There are a number of issues and open problems associated with the Kerberos -authentication mechanism. Among the issues are how to decide the -correct lifetime for a ticket, how to allow proxies, and how to -guarantee workstation integrity.

-

The ticket lifetime problem is a matter of choosing the proper -tradeoff between security and convenience. If the life of a ticket is -long, then if a ticket and its associated session key are stolen or -misplaced, they can be used for a longer period of time. Such -information can be stolen if a user forgets to log out of a public -workstation. Alternatively, if a user has been authenticated on a -system that allows multiple users, another user with access to root -might be able to find the information needed to use stolen tickets. The -problem with giving a ticket a short lifetime, however, is that when it -expires, the user will have to obtain a new one which requires the user -to enter the password again.

-

An open problem is the proxy problem. How can an authenticated user -allow a server to acquire other network services on her/his behalf? An -example where this would be important is the use of a service that will -gain access to protected files directly from a fileserver. Another -example of this problem is what we call authentication forwarding. -If a user is logged into a workstation and logs in to a remote host, it -would be nice if the user had access to the same services available -locally, while running a program on the remote host. What makes this -difficult is that the user might not trust the remote host, thus -authentication forwarding is not desirable in all cases. We do not -presently have a solution to this problem.

-

Another problem, and one that is important in the Athena -environment, is how to guarantee the integrity of the software running -on a workstation. This is not so much of a problem on private -workstations since the user that will be using it has control over it. -On public workstations, however, someone might have come along and -modified the log-in program to save the user's password. The -only solution presently available in our environment is to make it -difficult for people to modify software running on the public -workstations. A better solution would require that the user's key never -leave a system that the user knows can be trusted. One way this could -be done would be if the user possessed a smartcard capable of -doing the encryptions required in the authentication protocol.

-

9. Status

-

A prototype version of Kerberos went into production in -September of 1986. Since January of 1987, Kerberos has been -Project Athena's sole means of authenticating its 5,000 users, 650 -workstations, and 65 servers. In addition, Kerberos is now -being used in place of.rhosts files for controlling access in -several of Athena's timesharing systems.

-

10. Acknowledgments

-

Kerberos was initially designed by Steve Miller and Clifford -Neuman with suggestions from Jeff Schiller and Jerry Saltzer. Since -that time, numerous other people have been involved with the project. -Among them are Jim Aspnes, Bob Baldwin, John Barba, Richard Basch, Jim -Bloom, Bill Bryant, Mark Colan, Rob French, Dan Geer, John Kohl, John -Kubiatowicz, Bob Mckie, Brian Murphy, John Ostlund Ken Raeburn, Chris -Reed, Jon Rochlis, Mike Shanzer, Bill Sommerfeld, Ted T'so, Win Treese, -and Stan Zanarotti.

-

We are grateful to Dan Geer, Kathy Lieben, Josh Lubarr, Ken Raeburn, -Jerry Saltzer, Ed Steiner, Robbert van Renesse, and Win Treese whose -suggestions much improved earlier drafts of this paper.

-

The illustration on the title page is by Betsy Bruemmer.

-

Appendix

-

Kerberos Application to Sun's Network File System (NFS)

-

A key component of the Project Athena workstation system is the -interposing of the network between the user's workstation and her/his -private file storage (home directory). All private storage resides on a -set of computers (currently VAX 11/750s) that are dedicated to this -purpose. This allows us to offer services on publicly available UNIX -workstations. When a user logs in to one of these publicly available -workstations, rather then validate her/his name and password against a -locally resident password file, we use Kerberos to determine -her/his authenticity. The log-in program prompts for a username -(as on any UNIX system). This username is used to fetch a Kerberos -ticket-granting ticket. The log-in program uses the password to -generate a DES key for decrypting the ticket. If decryption is -successful, the user's home directory is located by consulting the Hesiod -naming service and mounted through NFS. The log-in program then -turns control over to the user's shell, which then can run the -traditional per-user customization files because the home directory is -now "attached" to the workstation. The Hesiod service is also -used to construct an entry in the local password file. (This is for the -benefit of programs that look up information in /etc/passwd.)

-

From several options for delivery of remote file service, we chose -Sun's Network File System. However this system fails to mesh with our -needs in a crucial way. NFS assumes that all workstations fall into two -categories (as viewed from a file server's point of view): trusted and -untrusted. Untrusted systems cannot access any files at all, trusted -can. Trusted systems are completely trusted. It is assumed that a -trusted system is managed by friendly management. Specifically, it is -possible from a trusted workstation to masquerade as any valid user of -the file service system and thus gain access to just about every file -on the system. (Only files owned by "root" are exempted.).

-

In our environment, the management of a workstation (in the -traditional sense of UNIX system management) is in the hands of the -user currently using it. We make no secret of the root password on our -workstations, as we realize that a truly unfriendly user can break in -by the very fact that s/he is sitting in the same physical location as -the machine and has access to all console functions. Therefore we -cannot truly trust our workstations in the NFS interpretation of trust. -To allow proper access controls in our environment we had to make some -modifications to the base NFS software, and integrate Kerberos -into the scheme.

-

Unmodified NFS

-

In the implementation of NFS that we started with (from the -University of Wisconsin), authentication was provided in the form of a -piece of data included in each NFS request (called a "credential" in -NFS terminology). This credential contains information about the unique -user identifier (UID) of the requester and a list of the group -identifiers (GIDs) of the requester's membership. This information is -then used by the NFS server for access checking. The difference between -a trusted and a non-trusted workstation is whether or not its -credentials are accepted by the NFS server.

-

Modified NFS

-

In our environment, NFS servers must accept credentials from a -workstation if and only if the credentials indicate the UID of the -workstation's user, and no other.

-

One obvious solution would be to change the nature of credentials -from mere indicators of UID and GIDs to full blown Kerberos -authenticated data. However a significant performance penalty would be -paid if this solution were adopted. Credentials are exchanged on every -NFS operation including all disk read and write activities. Including a -Kerberos authentication on each disk transaction would add a -fair number of full-blown encryptions (done in software) per -transaction and, according to our envelope calculations, would have -delivered unacceptable performance. (It would also have required -placing the Kerberos library routines in the kernel address -space.)

-

We needed a hybrid approach, described below. The basic idea is to -have the NFS server map credentials received from client workstations, -to a valid (and possibly different) credential on the server system. -This mapping is performed in the server's kernel on each NFS -transaction and is setup at "mount" time by a user-level process that -engages in Kerberos - moderated authentication prior to -establishing a valid kernel credential mapping.

-

To implement this we added a new system call to the kernel (required -only on server systems, not on client systems) that provides for the -control of the mapping function that maps incoming credentials from -client workstations to credentials valid for use on the server (if -any). The basic mapping function maps the tuple:

-

<CLIENT-IP-ADDRESS, UID-ON-CLIENT>

-

to a valid NFS credential on the server system. The -CLIENT-IP-ADDRESS is extracted from the NFS request packet and the -UID-ON-CLIENT is extracted from the credential supplied by the client -system. Note: all information in the client-generated credential except -the UID-ON-CLIENT is discarded.

-

If no mapping exists, the server reacts in one of two ways, -depending it is configured. In our friendly configuration we default -the unmappable requests into the credentials for the user "nobody" who -has no privileged access and has a unique UID. Unfriendly servers -return an NFS access error when no valid mapping can be found for an -incoming NFS credential.

-

Our new system call is used to add and delete entries from the -kernel resident map. It also provides the ability to flush all entries -that map to a specific UID on the server system, or flush all entries -from a given CLIENT-IP-ADDRESS.

-

We modified the mount daemon (which handles NFS mount requests on -server systems) to accept a new transaction type, the Kerberos -authentication mapping request. Basically, as part of the mounting -process, the client system provides a Kerberos authenticator -along with an indication of her/his UID-ON-CLIENT (encrypted in the Kerberos -authenticator) on the workstation. The server's mount daemon converts -the Kerberos principal name into a local username. This -username is then looked up in a special file to yield the user's UID -and GIDs list. For efficiency, this file is a ndbm database -file with the username as the key. From this information, an NFS -credential is constructed and handed to the kernel as the valid mapping -of the <CLIENT-IP-ADDRESS, CLIENT-UID> tuple for this request.

-

At unmount time a request is sent to the mount daemon to remove the -previously added mapping from the kernel. It is also possible to send a -request at log-out time to invalidate all mapping for the current user -on the server in question, thus cleaning up any remaining mappings that -exist (though they shouldn't) before the workstation is made available -for the next user.

-

Security Implications of the Modified NFS

-

This implementation is not completely secure. For starters, user -data is still sent across the network in an unencrypted, and therefore -interceptable, form. The low-level, per-transaction authentication is -based on a <CLIENT-IP-ADDRESS, CLIENT-UID> pair provided -unencrypted in the request packet. This information could be forged and -thus security compromised. However, it should be noted that only while -a user is actively using her/his files (i.e., while logged in) are -valid mappings in place and therefore this form of attack is limited to -when the user in question is logged in. When a user is not logged in, -no amount of IP address forgery will permit unauthorized access to -her/his files.

-

References

-

1.S. P. Miller, B. C. Neuman, J. I. Schiller, and J. H. Saltzer, Section -E.2.1: Kerberos Authentication and Authorization System, M.I.T. -Project Athena, Cambridge, Massachusetts (December 21, 1987).

-

2.E. Balkovich, S. R. Lerman, and R. P. Parmelee, "Computing in -Higher Education: The Athena Experience," Communications of the ACM. -28(11), pp. 1214-1224, ACM (November, 1985).

-

3.R. M. Needham and M. D. Schroeder, "Using Encryption for -Authentication in Large Networks of Computers," Communications of -the ACM 21(12), pp. 993-999 (December, 1978).

-

4.V. L. Voydock and S. T. Kent, "Security Mechanisms in High-Level -Network Protocols," Computing Surveys 15(2), ACM (June -1983).

-

5.National Bureau of Standards, "Data Encryption Standard," Federal -Information Processing Standards Publication 46, Government Printing -Office, Washington, D.C. (1977).

-

6.S. P. Dyer, "Hesiod," in Usenix Conference Proceedings -(Winter, 1988).

-

7.W. J. Bryant, Kerberos Programmer's Tutorial, M.I.T. -Project Athena (In preparation).

-

8.W. J. Bryant, Kerberos Administrator's Manual, M.I.T. -Project Athena (In preparation).

-

9.G. W. Treese, "Berkeley Unix on 1000 Workstations: Athena Changes -to 4.3BSD," in Usenix Conference Proceedings (Winter, 1988)

-

10.C. A. DellaFera, M. W. Eichin, R. S. French, D. C. Jedlinsky, J. -T. Kohl, and W. E. Sommerfeld, "The Zephyr Notification System," in Usenix -Conference Proceedings (Winter, 1988).

-

11.M. A. Rosenstein, D. E. Geer, and P. J. Levine, in Usenix -Conference Proceedings (Winter, 1988).

-

12.R. Sandberg, D. Goldberg, S. Kleiman, D. Walsh, and B. Lyon, -"Design and Implementation of the Sun Network Filesystem," in Usenix -Conference Proceedings (Summer, 1985).

- - diff --git a/src/windows/leash/htmlhelp/html/leash_topic_kerberos_command_prompt.htm b/src/windows/leash/htmlhelp/html/leash_topic_kerberos_command_prompt.htm deleted file mode 100644 index 5d1eed6bdb..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_topic_kerberos_command_prompt.htm +++ /dev/null @@ -1,29 +0,0 @@ - - - - -Using Kerberos in a Command Prompt Environment - - - - - - - - -

Using Kerberos in a Command Prompt Environment

- -

Command Prompt commands that are available to perform Kerberos functions

- -

KINIT - Kerberos log-in utility

- -

KLIST - list currently held Kerberos tickets

- -

KDESTROY - destroy Kerberos tickets

- -

MS2MIT - import Kerberos tickets from Windows Logon Session

- -

AKLOG - obtain AFS tokens

- - - diff --git a/src/windows/leash/htmlhelp/html/leash_topic_kerberos_help_topics.htm b/src/windows/leash/htmlhelp/html/leash_topic_kerberos_help_topics.htm deleted file mode 100644 index 6696ffea5b..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_topic_kerberos_help_topics.htm +++ /dev/null @@ -1,26 +0,0 @@ - - - - - Leash Program - - - - -

-

Kerberos Help Topics

-

-

About Kerberos

-

Kerberos Names

-

Kerberos Tickets

-

Using Kerberos in -a Command Prompt Environment

-

Kerberos Copyright

-

Kerberos Export Restrictions and Source -Code Access

-

Kerberos Timing Issues

- - diff --git a/src/windows/leash/htmlhelp/html/leash_topic_kerberos_names.htm b/src/windows/leash/htmlhelp/html/leash_topic_kerberos_names.htm deleted file mode 100644 index 64a512bbd8..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_topic_kerberos_names.htm +++ /dev/null @@ -1,29 +0,0 @@ - - - - -Kerberos Names - - - - - - - - -

Kerberos Names

- -

A Kerberos name contains three parts. The first is the principal name, which is usually a user's or service's name. The second is the instance, which in the case of a user is usually null. Some users may have privileged instances, however, such as "root" or "admin." In the case of a service, the instance is the name of the machine on which it runs; i.e. there can be an rlogin service running on the machine ABC, which is different from the rlogin service running on the machine XYZ. The third part of a Kerberos name is the realm. The realm corresponds to the Kerberos service providing authentication for the principal. For example, at MIT there is a Kerberos running at the Laboratory for Computer Science and one running at Project Athena.

- -

When writing a Kerberos name, the principal name is separated from the instance (if not null) by a period, and the realm (if not the local realm) follows, preceded by an "@" sign. The following are examples of valid Kerberos names:

- -

billb

- -

jis.admin

- -

srz@LCS.MIT.EDU

- -

treese.root@ATHENA.MIT.EDU

- - - diff --git a/src/windows/leash/htmlhelp/html/leash_topic_kerberos_principals.htm b/src/windows/leash/htmlhelp/html/leash_topic_kerberos_principals.htm deleted file mode 100644 index 7b83d8a0e1..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_topic_kerberos_principals.htm +++ /dev/null @@ -1,125 +0,0 @@ - - - - - Kerberos: How does the other guy know who I am? - - - - -

Kerberos: How Does the Other Guy Know -Who I Am?

-

A portion of the text below was copied with permission from An -Inessential Guide to Athena (5th edition) published by the MIT -Student Information Processing Board.

-

MIT's Athena Project developed a system known as Kerberos to provide -for security on a physically insecure network. A complete description -of the mechanisms used by Kerberos to provide this security is beyond -the scope of this document. This section describes why Kerberos is -necessary in a distributed computing environment, the theory behind -Kerberos (with pointers to further information), and the user commands -which interface to Kerberos. It also gives hints for using Kerberos -more effectively.

-

Why Kerberos is needed. -Most moderately-sized to large computer systems use some form of -password protection scheme to authenticate users; that is, -they require a user who wishes to log in to give both his name and a -secret password which only he and the computer system know. Anyone who -happens to know the password can claim to be that user. It is therefore -desirable to prevent people from listening in on the conversation -between the computer and the user's terminal or workstation.

-

This is relatively easy in the case of terminals directly connected -to the machine, since each terminal has its own cable. In a local-area -network, several (typically between 10 and 200) computers share one -cable, and any computer can listen in on any network traffic. With the -advent of network monitoring packages for IBM PC's and similar -machines, it is relatively easy for a determined user to set up a -program to listen in on a network for any and all passwords being sent -over. This would allow an intruder to masquerade as someone else, -violating their privacy and perhaps stealing information (academic or -otherwise). Note that THE ELECTRONIC COMMUNICATIONS PRIVACY ACT of -1986 makes this a Federal crime punishable by lots of nasty stuff -(ask your lawyer for details).

-

In addition, since Athena (like the Internet) uses a -workstation-based model of computation, with most operations taking -place on a single-user workstation with occasional requests (for files, -etc.) going to other "server" machines, Athena needed to set up some -way to allow users to prove their identity to such server -machines.

-

A few definitions. Knowledge of the following terms is not -essential for use of Kerberos but is helpful in understanding what is -going on:

-

user:A human being who wishes to use a computer system. A -user, through his workstation, may make a series of requests to several -servers in the course of a session, and would like to avoid (due to -sheer laziness, among other things) having to type his password to each -machine in question.

-

service:A program or set of programs running on a computer -which is accessible over the network. The service would like to know -with certainty that the workstation to which it is providing the -service is really being used by the user who claims to be -logged in on the workstation. Note that workstations are not services, -and thus one may not use Kerberos to log into them over the network.

-

principal:An entity which can -both prove its identity and verify the identities of other principals -who wish to communicate with it; each user and each service -registered with Kerberos is thus a principal.

-

ticket: A block of data which, when given to a user, enables -her to prove her identity to a service. Tickets are stored in RAM in an -area of memory reserved by the Kerberos cache. They are automatically -erased when the computer is rebooted or when the user issues the -destroy tickets command from Leash. They may also be destroyed from a -Command Prompt by executing the command: kdestroy. Tickets contain -information which must be considered private to the user, and thus -should be protected. As they contain a time stamp, they cease to be -valid after a limited time. One ticket is needed for each service; -tickets are used to build authenticators, which are sent over -the network to the service.

-

authenticator: A block of data which a user's workstation -sends over the network to a specific service to prove that the -workstation really is in use by that user. An authenticator expires -after five minutes. One authenticator is typically built per session of -use of a service; once the service decodes the authenticator, it -generally permits the user to operate for as long as she wants. This -behavior is not in any way mandated by the Kerberos suite of programs -and libraries (it is just a detail of the implementation), but it is -convenient and considered secure enough for most environments.

-

How It Works...

-

Kerberos uses a standard encryption-based authentication technique -with a few variations designed to increase ease of use across -administrative entities and reduce the number of possible "attacks" on -the system. The system uses cryptographically sealed tickets -and authenticators} which may be passed over the network and -decrypted only by a user or machine which knows the appropriate -encryption/decryption key.

-

Using Kerberos...

-

After obtaining your initial ticket getting ticket either by logging -onto your workstation or by utilizing a Kerberos Ticket Manager (e.g., -Leash), Kerberos aware applications will generate authenticators and -obtain service tickets without further end user interaction.  -Examples of programs which utilize Kerberos authentication include -e-mail, distributed file systems, remote login tools, and browsers.
-

-

Registering with Kerberos...

-

To use Kerberos you must have an account registered in a REALM -associated with the service(s) you wish to access.  Contact your -network administrator to determine the registration procedures for your -organization.
-

-

Once registered with Kerberos, tickets are obtained by the login -program every time you log onto a workstation. You can also manually -obtain new tickets (which you usually do only if your old ones have -expired, 10 hours after you log in) by running the program kinit. -It prompts for a username, requests an initial ticket from Kerberos, -and then asks for your password. If you are not registered with -Kerberos, it will print Principal unknown (Kerberos). -Unless you mistype your username, this should not happen. To correct -this, or any other errors, contact the appropriate Help Desk personnel -for your organization.
-
-

- - diff --git a/src/windows/leash/htmlhelp/html/leash_topic_kerberos_tickets.htm b/src/windows/leash/htmlhelp/html/leash_topic_kerberos_tickets.htm deleted file mode 100644 index 20b88599f2..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_topic_kerberos_tickets.htm +++ /dev/null @@ -1,23 +0,0 @@ - - - - -Kerberos Tickets - - - - -

Kerberos Tickets

- -

When you authenticate yourself with Kerberos, through either the Leash program or the kinit command, Kerberos gives you an initial Kerberos ticket. (A Kerberos ticket is an encrypted protocol message that provides authentication.) Kerberos uses this ticket for network utilities such as telnet, ftp or email. The ticket transactions are done transparently, so you don't have to worry about their management.

- -

Note, however, that tickets expire. Privileged tickets, such as root instance tickets, expire in a few minutes, while tickets that carry more ordinary privileges may be good for several hours or a day, depending on the installation's policy. On Athena, the default time limit is 10 hours; if your login session extends beyond the time limit, you will have to reauthenticate yourself to Kerberos to get new tickets.

- -

See Also

- -

An Authentication Service

- -

How Does the Other Guy Know Who I Am?

- - - diff --git a/src/windows/leash/htmlhelp/html/leash_topic_leash_help_topics.htm b/src/windows/leash/htmlhelp/html/leash_topic_leash_help_topics.htm deleted file mode 100644 index 57457d9290..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_topic_leash_help_topics.htm +++ /dev/null @@ -1,33 +0,0 @@ - - - - -Leash Program - - - - - - - - -

Leash Program

- -

leash \'le-sh\ n [ME lees, leshe, fr. OF laisse, fr. laissier] 1: a line for leading or restraining an animal 2a: a set of three animals (as greyhounds, foxes, bucks, or hares) 2b: a set of three - leash vt 3: a Windows program developed at MIT to manage a user's Kerberos tickets.

- -

Leash Help Topics

- -

Leash Screen Display (Kerberometer and Dash Notification)

- -

Leash Commands

- -

How To Use Leash Online Help

- -

Leash Copyright

- -

Acknowledgments

- -

Reporting Problems with Leash

- - - diff --git a/src/windows/leash/htmlhelp/html/leash_topic_leash_systray.htm b/src/windows/leash/htmlhelp/html/leash_topic_leash_systray.htm deleted file mode 100644 index 1ac822e5c1..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_topic_leash_systray.htm +++ /dev/null @@ -1,64 +0,0 @@ - - - - - Leash System Tray Tool - - - - -

-

Leash System Tray Tool

-

While Leash is running one of the following icons -will be -displayed in the system tray based upon the current state of your -Kerberos -tickets.  Clicking on the icon with the -first mouse button will open or close the Leash display window.  Clicking with the second mouse button will -display a menu of commands.

-System Tray Icons
-
-
    -
  • Green:     tickets are -valid and have a lifetime of greater than 20 minutes
  • -
  • Grey:       no -tickets -are present
  • -
  • Orange:  tickets are -valid and about to expire
  • -
  • Red:        tickets -have expired
    -
  • -
-

System Tray Menu
-

-System Tray Menu
-
- -

-
-

-

- - diff --git a/src/windows/leash/htmlhelp/html/leash_topic_leash_window.htm b/src/windows/leash/htmlhelp/html/leash_topic_leash_window.htm deleted file mode 100644 index 8e515da111..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_topic_leash_window.htm +++ /dev/null @@ -1,81 +0,0 @@ - - - - - Leash Screen Display (Kerberometer and Dash Notification) - - - - -

-

Leash Screen Display (Kerberometer and Dash Notification)

-

-

The window -title contains -the name “Leash” followed by the current date and time.  -Below the title are a menu bar; a tool bar -(optional); a tree view; and a status bar (optional).

-

Leash Display Window
-

-

-

The root of the Leash tree view shows the active -user -principal name (user@REALM).  This entry -appears with a "+" icon and a Kerberos icon to its left.  -Click on this plus icon of a line to expand -the branch, displaying a "-" icon.  -To retract the branch click on the minus sign.

-

Below user principal, the tree contains ticket -categories.  Below each ticket category -are the current tickets belonging to the group.  -Each ticket entry contains the current ticket status, the time -it was -issued, the time it will expire, and the service principal and flags.  For Kerberos 5 tickets, encryption types and -network address information are listed below each ticket.

-

The tree updates once per minute.  -If you need an immediate update of your -ticket status, you can either click in the window or the press the -Update -Display button on the toolbar.

-

On the right of the status bar is a -display of the remaining -time of your tickets (both Kerberos 4 and Kerberos 5, as some programs -obtain -only Kerberos 4 tickets, these are not necessarily the same) in hours, -minutes, -and seconds.  This used to be known as -the Kerberometer. 

-

Each ticket is described and represented by an -icon of a -little ticket. The color of the ticket changes based on its viability:

-

green = normal

-

yellow = tickets are -within 15 -minutes of expiration

-

red = tickets have -expired, or you -have no tickets

-

gray = these tickets -are not available -to you

-

At 15, 10, and 5 -minutes before your Kerberos tickets expire, a screen pops up to warn -that your Kerberos tickets will expire soon and to give you the -opportunity to renew them.  This used to be known as Dash-style -notification.

-

Andrew File System (AFS) tokens information is -displayed -only on machines that have either OpenAFS for Windows http://www.openafs.org or Transarc -AFS 3.6 -for Windows.

-

- - diff --git a/src/windows/leash/htmlhelp/html/leash_topic_online_help.htm b/src/windows/leash/htmlhelp/html/leash_topic_online_help.htm deleted file mode 100644 index 1a91f3ef32..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_topic_online_help.htm +++ /dev/null @@ -1,25 +0,0 @@ - - - - - Help on Using Leash Online Help - - - - -

How To Use Leash Online Help

-

In Leash, F1 are the online Help keys. Here's what they do:

-

Pressing F1...gets you...

-

in the Leash main window: Leash -Help Topics -- click the one you need.

-

in Leash Help Topics: Contents for How To Use Help -- list of topics -explaining the features and functions of Windows online help -- click -the one you need.

-

in a Leash dialogue box: context-sensitive help, i.e., the specific -topic that explains where you are and what you're doing.

-

at an error message: explanation for the error message.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_topic_password_choice.htm b/src/windows/leash/htmlhelp/html/leash_topic_password_choice.htm deleted file mode 100644 index 5fd7dfa884..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_topic_password_choice.htm +++ /dev/null @@ -1,91 +0,0 @@ - - - - -How to Choose a Password - - - - - - - - -

How To Choose a Password...

- -

Your passwords are the keys to many computers, from a bank machine to a multiuser mainframe to a server on a network. Your password helps to prove that you are who you say you are, and ensures your privacy.

- -

Compromised passwords are the means by which most unauthorized (and unscrupulous) people gain access to a system. Someone logging on under your name has access not only to your computer files, but to most of the facilities of the computer system. Since tampering can have far-reaching and serious consequences, it's important to take to heart the following guidelines for choosing a password.

- -

Do choose:

- -

*Something easy for you to remember with at least six characters.

- -

*Something obscure. For instance, you might deliberately misspell a term or use an odd character in an otherwise familiar term, such as "phnybon" instead of "funnybone." Or use a combination of two unrelated words or a combination of letters and numbers.

- -

*A combination of letters and numbers, or a phrase like "many colors" and then use only the consonants "mnYc0l0rz."

- -

*An acronym for your favorite saying, for example, "L!isn!" (Live! It's Saturday Night!)

- -

Don't choose:

- -

*Your name in any form - first, middle, last, maiden, spelled backwards, nickname or initials.

- -

*Your userid, or your userid spelled backwards.

- -

*Part of your userid or name.

- -

*Any common name, such as Joe.

- -

*The name of a close relative, friend, or pet.

- -

*Your phone or office number, address, birthday, or anniversary.

- -

*Your license-plate number, your social-security number, or any all numeral password.

- -

*Names from popular culture, e.g., spock, sleepy.

- -

*Any word in a dictionary.

- -

*Passwords of fewer than four characters.

- -

Mum's the Word

- -

Never tell anyone your password -- not even your system administrator or account manager -- and don't write it down. Make sure you have chosen a password that you can remember. And, finally, change your password at regular intervals

- -

Reprinted from i/s, Vol. 4, No. 9,

- -

May 1989. Revised March 1993.

- -

Copyright C 1993 MIT Information Systems

- -

Send comments or questions about this publication to

- -

<comment-ispubs@mit.edu> or call x3-5150

- -

Before You Begin...

- -

Remember that passwords are case-sensitive, and note whether your keyboard has Caps Lock on. Leash is not programmed to inform you about the state of your Caps Lock key.

- -

How To Use Change Password...

- -

1.In Leash, click on the Change Password button (the one that says abc and has a green arrow), type your username in the first field of the dialogue box that opens, and press Enter or click OK. You may start over anytime by clicking Restart, stop at any time by clicking Cancel, or get help at any time with the Help button.

- -

2.Type your current password in the second field and press Enter or click OK.

- -

The program checks the username and password you entered and notifies you if either is invalid.

- -

3.Type your new password in the third field and press Enter or click OK.

- -

4.Retype your new password, to verify it, and press Enter or click OK.

- -

Once you have entered the new password twice with consistent spellings, the Leash program replaces your old password with the new, if it is a strong password. If Kerberos determines the password is weak, a message notifies you, and you need to repeat steps 1 through 4 with a strong password, as described by the "How To Choose a Password" guidelines above.

- -

How Change Password Works...

- -

When you type into the password fields of the dialog box, neither characters nor sounds echo back, thus keeping secret even the number of password characters. The program accepts only printable characters for new passwords, i.e., characters between ASCII codes 0x20 and 0x7E.

- -

When you have entered the new password twice consistently, the program attempts to change the password via a dialogue with the Kerberos administrative server. Some Kerberos sites, including MIT's Athena environment, check the password's strength before allowing the change to take place and notifies you if it determines that the password is weak.

- - - diff --git a/src/windows/leash/htmlhelp/html/leash_topic_timing_issues.htm b/src/windows/leash/htmlhelp/html/leash_topic_timing_issues.htm deleted file mode 100644 index 281ee1af88..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_topic_timing_issues.htm +++ /dev/null @@ -1,27 +0,0 @@ - - - - - Kerberos Timing Issues - - - - -

-

Kerberos Timing Issues

-

-

To resynchronize your computer's clock to the network's clock, -manually set it, or run the leash Synchronize Time Command.  If -you are using Windows XP or Windows 2003, the Date and Time Control -Panel contains an Internet Time page which can be used to automatically -synchronize the clock on a regular basis.
-

-

Why Do It...

-

Kerberos authentication uses time stamps as part of its protocol. -When the clocks of the Kerberos server and your computer are too far -out of synchronization, you cannot authenticate properly.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_topic_why_use.htm b/src/windows/leash/htmlhelp/html/leash_topic_why_use.htm deleted file mode 100644 index 26e1b7ede6..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_topic_why_use.htm +++ /dev/null @@ -1,77 +0,0 @@ - - - - - Why use Leash? - - - - -

Why -Use Leash?

-

Leash is a graphical system-tray tool designed to -manage for -Kerberos tickets on Microsoft Windows.  Leash -is used to obtain Kerberos tickets, -change your Kerberos password, and obtain Andrew File System (AFS) -tokens.

-

Leash combines the functionality of several command line tools a -user would use to manage Kerberos functions: kinit, klist, kdestroy, ms2mit, aklog, and -passwd or kpasswd. Leash combines all of these functions into one user -interface and supports  auto-renewal or user notification when tickets -are approaching expiration.

-

There are many ways to execute Leash. In addition -to -clicking on a Leash shortcut, you can start Leash from the Windows -command -Prompt or Run... option.  Command-line -options may be specified.  If you run Leash -with the options -i or -kinit, it will display the ticket -initialization dialog -and exit; -m or –ms2mit or –import will import tickets from the -Microsoft -Windows logon session (if available) and exit; -d or -destroy will -destroy all -existing tickets and exit; -r or –renew will renew existing Kerberos -tickets -(if possible) and exit; -a or –autoinit will display the ticket -initialization -dialog if you have no Kerberos tickets. 

-

You may create a shortcut to Leash within your -Windows -Startup folder (Start Menu->Programs->Startup).  - A -shortcut to “Leash32.exe –autoinit” ensures that Kerberos tickets are -available -for the use of Kerberized applications throughout your Windows logon -session.

-

If Leash is not executed before using a Kerberized -application, the application may prompt you for your password. Some -applications, like lpr, never prompt you for a password. These -applications -simply terminate with a message indicating that you are not -authenticated. Before -these applications can successfully be used a separate program, such as -Leash -or kinit, must be used to first authenticate you using Kerberos. 

-

Leash does not perform a logon in the sense of the -Windows -Logon Service.  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 Leash. Leash -simply -allows you to manage Kerberos tickets on behalf of compatible -applications and -to change your Kerberos password.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_view_debug_window.htm b/src/windows/leash/htmlhelp/html/leash_view_debug_window.htm deleted file mode 100644 index 1ed4c3c854..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_view_debug_window.htm +++ /dev/null @@ -1,32 +0,0 @@ - - - - - Debug Window Option - - - - -

Debug Window

-

When this item (found under the Action menu) is checked, the Leash -Debug Window appears.
-

-

Debug Window

-

-

From this window, commands that -Leash issues to the Kerberos server are visible. Here, you can see -exactly what -Leash is doing. This action is useful if you are having a problem with -Leash -and want to see more exactly what is going on, or if you are writing -Kerberized -applications dependent on Kerberos tickets or the actions of Leash. 

-

Note: Debugging is only -supported by Kerberos 4 and AFS.  -Kerberos 5 protocol operations cannot be debugged using Leash.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_view_large_icons.htm b/src/windows/leash/htmlhelp/html/leash_view_large_icons.htm deleted file mode 100644 index 6e676db9e4..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_view_large_icons.htm +++ /dev/null @@ -1,25 +0,0 @@ - - - - - Large Icons Option - - - - -

Large Icons

-

-

-

When this option is checked on the View menu, the -icons and -fonts in the main window (such as the picture of Kerberos) will be -about twice -as big as the minimal icon and font size.  -Naturally, smaller icons allow many more tickets to fit into a -nonscrolling window.  The default setting -of Leash is Large Icons.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_view_status_bar.htm b/src/windows/leash/htmlhelp/html/leash_view_status_bar.htm deleted file mode 100644 index 18d722aa9b..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_view_status_bar.htm +++ /dev/null @@ -1,21 +0,0 @@ - - - - - Status Bar Option - - - - -

Status Bar

-

-

-

The Status Bar is on by default; -turning it off causes the bar at the bottom of the Leash window (with -the time -remaining on any tickets that you might have) to disappear.

- - diff --git a/src/windows/leash/htmlhelp/html/leash_view_toolbar.htm b/src/windows/leash/htmlhelp/html/leash_view_toolbar.htm deleted file mode 100644 index 1f6e674535..0000000000 --- a/src/windows/leash/htmlhelp/html/leash_view_toolbar.htm +++ /dev/null @@ -1,49 +0,0 @@ - - - - - Leash Toolbar - - - - -

Leash Toolbar

-

-

-

By default, this option on the View menu is -selected. When -it is checked, the toolbar containing icons for commonly used commands -is -visible. Otherwise, Leash hides it.
-

-

Leash Toolbar
-

-

-

The Leash Toolbar contains buttons which act as -shortcuts to -the most frequently used Actions found on the Menubar.  -From left to right:

-
    -
  1. Get -Tickets
  2. -
  3. Renew Tickets
  4. -
  5. Import Tickets
  6. -
  7. Destroy Tickets
  8. -
  9. Change Password
  10. -
  11. Update Display
  12. -
  13. Synchronize -Time
  14. -
-
- - diff --git a/src/windows/leash/htmlhelp/leash32.hhk b/src/windows/leash/htmlhelp/leash32.hhk deleted file mode 100644 index 85b6221919..0000000000 --- a/src/windows/leash/htmlhelp/leash32.hhk +++ /dev/null @@ -1,364 +0,0 @@ - - - - -
    -
  • - - - - -
  • - - - - -
  • - - - -
      -
    • - - - -
    • - - - -
    -
  • - - - - -
  • - - - - -
  • - - - - -
  • - - - - -
  • - - - -
      -
    • - - - -
    • - - - -
    -
  • - - - - -
  • - - - - - - -
  • - - - - -
  • - - - - -
  • - - - -
      -
    • - - - -
    • - - - -
    • - - - -
    • - - - -
    -
  • - - - - -
  • - - - - -
  • - - - - -
  • - - - - -
  • - - - - -
  • - - - -
  • - - - - -
      -
    • - - - -
    • - - - -
    • - - - -
    • - - - -
    -
  • - - - -
      -
    • - - - -
    • - - - -
    -
  • - - - - -
  • - - - -
      -
    • - - - -
    • - - - -
    • - - - -
    • - - - -
    • - - - -
    • - - - -
    • - - - -
    • - - - -
    • - - - -
    -
  • - - - -
      -
    • - - - -
    -
  • - - - -
      -
    • - - - -
    • - - - -
    -
  • - - - -
      -
    • - - - -
    • - - - -
    -
  • - - - - -
  • - - - - -
  • - - - -
      -
    • - - - -
    • - - - -
    -
  • - - - - -
  • - - - -
      -
    • - - - -
    • - - - -
    • - - - -
    • - - - -
    • - - - -
    -
  • - - - - -
  • - - - - -
  • - - - - -
  • - - - - -
  • - - - - -
  • - - - - -
  • - - - - -
  • - - - - -
  • - - - - -
  • - - - - -
diff --git a/src/windows/leash/htmlhelp/leash32.hhp b/src/windows/leash/htmlhelp/leash32.hhp deleted file mode 100644 index 5946eeb30e..0000000000 --- a/src/windows/leash/htmlhelp/leash32.hhp +++ /dev/null @@ -1,228 +0,0 @@ -[OPTIONS] -Auto Index=Yes -Auto TOC=9 -Compatibility=1.1 or later -Compiled file=leash.chm -Contents file=Table_of_Contents.hhc -Default Font=Arial,10,0 -Default Window=Default Leash Help Window -Default topic=html\leash_topic_why_use.htm -Display compile progress=Yes -Error log file=.\leash.log -Full-text search=Yes -Index file=leash32.hhk -Language=0x409 English (United States) -Title=Leash Ticket Manager Help - -[WINDOWS] -Default Leash Help Window="Leash Ticket Manager Help","Table_of_Contents.hhc","leash32.hhk","html\leash_topic_leash_help_topics.htm","html\leash_topic_leash_help_topics.htm",,,,,0x42520,320,0x304e,[0,0,800,560],0x7b0000,,,,,,0 - - -[FILES] -html\leash_topic_why_use.htm -html\leash_topic_leash_help_topics.htm -html\leash_topic_leash_window.htm -html\leash_topic_leash_systray.htm -html\leash_menu_commands.htm -html\leash_file_exit.htm -html\leash_command_get_tickets.htm -html\leash_command_import_tickets.htm -html\leash_command_renew_tickets.htm -html\leash_command_destroy_tickets.htm -html\leash_command_change_password.htm -html\leash_topic_password_choice.htm -html\leash_command_reset_window.htm -html\leash_command_sync_time.htm -html\leash_command_update_display.htm -html\leash_view_large_icons.htm -html\leash_view_toolbar.htm -html\leash_view_status_bar.htm -html\leash_view_debug_window.htm -html\leash_option_auto_renewal.htm -html\leash_option_destroy_tickets_on_exit.htm -html\leash_option_expiration_alarm.htm -html\leash_option_upper_case_realm.htm -html\leash_option_leash_properties.htm -html\leash_option_kerberos_properties.htm -html\leash_option_krb4_properties.htm -html\leash_option_krb5_properties.htm -html\leash_option_afs_properties.htm -html\leash_menu_help_why_use.htm -html\leash_help_about_leash32.htm -html\leash_topic_kerberos_help_topics.htm -html\leash_topic_about_kerberos.htm -html\leash_topic_kerberos_names.htm -html\leash_topic_kerberos_tickets.htm -html\leash_topic_kerberos_command_prompt.htm -html\leash_topic_timing_issues.htm -html\leash_external_kdestroy.htm -html\leash_external_kinit.htm -html\leash_external_klist.htm -html\leash_external_ms2mit.htm -html\leash_external_aklog.htm -html\leash_topic_kerberos_principals.htm -html\leash_topic_kerberos_auth_service.htm -html\leash_manpages.htm -html\leash_manpage_kinit.htm -html\leash_manpage_klist.htm -html\leash_manpage_kdestroy.htm -html\leash_manpage_ms2mit.htm -html\leash_manpage_aklog.htm -html\leash_errors.htm -html\leash_topic_error_8.htm -html\leash_topic_error_57.htm -html\leash_topic_error_62.htm -html\leash_topic_error_invalid_principal.htm -html\leash_topic_online_help.htm -html\leash_copyright.htm -html\leash_kerberos_copyright.htm -html\leash_export.htm -html\leash_bug_reports.htm -html\leash_acknowledgements.htm -html\hid_view_toolbar.htm -html\afx_hidw_toolbar.htm -html\hid_view_status_bar.htm -html\afx_hidw_status_bar.htm -html\hid_app_about.htm -html\hid_app_exit.htm -html\hid_help_index.htm -html\hid_help_using.htm -html\hid_context_help.htm -html\hid_sc_size.htm -html\hid_sc_move.htm -html\hid_sc_minimize.htm -html\hid_sc_maximize.htm -html\hid_sc_close.htm -html\hid_sc_restore.htm - -[ALIAS] -HID_ABOUT_KERBEROS = html\leash_topic_about_kerberos.htm -HID_ABOUT_LEASH32_COMMAND = html\leash_menu_commands.htm -HID_ABOUT_LEASH32_MODULES = html\leash_help_about_leash32.htm -HID_AFS_PROPERTIES_COMMAND = html\leash_option_afs_properties.htm -HID_CHANGE_PASSWORD_COMMAND = html\leash_command_change_password.htm -HID_DEBUG_WINDOW = html\leash_view_debug_window.htm -HID_DEBUG_WINDOW_OPTION = html\leash_view_debug_window.htm -HID_DESTROY_TICKETS_COMMAND = html\leash_command_destroy_tickets.htm -HID_DESTROY_TICKETS_ON_EXIT = html\leash_option_destroy_tickets_on_exit.htm -HID_EXIT_COMMAND = html\leash_file_exit.htm -HID_GET_TICKETS_COMMAND = html\leash_command_get_tickets.htm -HID_RENEW_TICKETS_COMMAND = html\leash_command_renew_tickets.htm -HID_IMPORT_TICKETS_COMMAND = html\leash_command_import_tickets.htm -HID_HELP_CONTENTS = html\leash_topic_leash_help_topics.htm -HID_KERBEROS_PROPERTIES_ADDDOM = html\leash_option_kerberos_properties.htm -HID_KERBEROS_PROPERTIES_ADDHOST = html\leash_option_kerberos_properties.htm -HID_KERBEROS_PROPERTIES_ADDHOST = html\leash_option_kerberos_properties.htm -HID_KERBEROS_PROPERTIES_ADDRLM = html\leash_option_kerberos_properties.htm -HID_KERBEROS_PROPERTIES_COMMAND = html\leash_option_kerberos_properties.htm -HID_KERBEROS_PROPERTIES_EDIT = html\leash_option_kerberos_properties.htm -HID_KERBEROS_PROPERTIES_EDITDOM = html\leash_option_kerberos_properties.htm -HID_KERBEROS_PROPERTIES_EDITHOST = html\leash_option_kerberos_properties.htm -HID_KERBEROS_PROPERTIES_LISTDOM = html\leash_option_kerberos_properties.htm -HID_KERBEROS_PROPERTIES_LISTRLM = html\leash_option_kerberos_properties.htm -HID_KRB4_PROPERTIES_COMMAND = html\leash_option_krb4_properties.htm -HID_KRB4_PROPERTIES_EDIT = html\leash_option_krb4_properties.htm -HID_KRB5_PROPERTIES_COMMAND = html\leash_option_krb5_properties.htm -HID_KRB5_PROPERTIES_EDIT = html\leash_option_krb5_properties.htm -HID_KRB5_PROPERTIES_FORWARDING = html\leash_option_krb5_properties.htm -HID_LARGE_ICONS_OPTION = html\leash_view_large_icons.htm -HID_LEASH_COMMANDS = html\leash_menu_commands.htm -HID_LEASH_PROGRAM = html\leash_topic_leash_help_topics.htm -HID_LEASH_PROPERTIES_COMMAND = html\leash_option_leash_properties.htm -HID_LEASH_PROPERTIES_EDIT = html\leash_option_leash_properties.htm -HID_LOW_TICKET_ALARM_OPTION = html\leash_option_expiration_alarm.htm -HID_RESET_WINDOW_OPTION = html\leash_command_reset_window.htm -HID_SCNCHRONIZE_TIME_OPTION = html\leash_command_sync_time.htm -HID_STATUS_BAR_OPTION = html\leash_view_status_bar.htm -HID_TOOLBAR_OPTION = html\leash_view_toolbar.htm -HID_UPDATE_DISPLAY_COMMAND = html\leash_command_update_display.htm -HID_UPPERCASE_REALM_OPTION = html\leash_option_upper_case_realm.htm -HID_WHY_USE_LEASH32 = html\leash_topic_why_use.htm -ID_CHANGEPASSWORD = html\leash_command_change_password.htm -ID_COUNTDOWN = html\leash_option_expiration_alarm.htm -ID_DESTROY = html\leash_command_destroy_tickets.htm -ID_EXIT = html\leash_file_exit.htm -ID_HELP_CHOOSE_PASSWORD = html\leash_topic_password_choice.htm -ID_HELP_KERBEROS = html\leash_topic_kerberos_help_topics.htm -ID_HELP_LEASH = html\leash_topic_leash_help_topics.htm -ID_HELP_PURPOSE = html\leash_topic_why_use.htm -ID_INITTICKETS = html\leash_command_get_tickets.htm -hid_view_toolbar = html\hid_view_toolbar.htm -afx_hidw_toolbar = html\afx_hidw_toolbar.htm -hid_view_status_bar = html\hid_view_status_bar.htm -afx_hidw_status_bar = html\afx_hidw_status_bar.htm -hid_app_about = html\hid_app_about.htm -hid_app_exit = html\hid_app_exit.htm -hid_help_index = html\hid_help_index.htm -hid_help_using = html\hid_help_using.htm -hid_context_help = html\hid_context_help.htm -hid_sc_size = html\hid_sc_size.htm -hid_sc_move = html\hid_sc_move.htm -hid_sc_minimize = html\hid_sc_minimize.htm -hid_sc_maximize = html\hid_sc_maximize.htm -hid_sc_close = html\hid_sc_close.htm -hid_sc_restore = html\hid_sc_restore.htm - -[MAP] -#define HID_ABOUT_KERBEROS 98320 -#define HID_ABOUT_LEASH32_COMMAND 123200 -#define HID_ABOUT_LEASH32_MODULES 131225 -#define HID_AFS_PROPERTIES_COMMAND 98327 -#define HID_CHANGE_PASSWORD_COMMAND 98315 -#define HID_DEBUG_WINDOW 131229 -#define HID_DEBUG_WINDOW_OPTION 98317 -#define HID_DESTROY_TICKETS_COMMAND 98313 -#define HID_DESTROY_TICKETS_ON_EXIT 98321 -#define HID_EXIT_COMMAND 123201 -#define HID_GET_TICKETS_COMMAND 98343 -#define HID_RENEW_TICKETS_COMMAND 98312 -#define HID_IMPORT_TICKETS_COMMAND 98342 -#define HID_HELP_CONTENTS 98340 -#define HID_KERBEROS_PROPERTIES_ADDDOM 131255 -#define HID_KERBEROS_PROPERTIES_ADDHOST 131254 -#define HID_KERBEROS_PROPERTIES_ADDHOST 131269 -#define HID_KERBEROS_PROPERTIES_ADDRLM 131253 -#define HID_KERBEROS_PROPERTIES_COMMAND 98337 -#define HID_KERBEROS_PROPERTIES_EDIT 131233 -#define HID_KERBEROS_PROPERTIES_EDITDOM 131256 -#define HID_KERBEROS_PROPERTIES_EDITHOST 131271 -#define HID_KERBEROS_PROPERTIES_LISTDOM 131279 -#define HID_KERBEROS_PROPERTIES_LISTRLM 131250 -#define HID_KRB4_PROPERTIES_COMMAND 98329 -#define HID_KRB4_PROPERTIES_EDIT 131232 -#define HID_KRB5_PROPERTIES_COMMAND 98330 -#define HID_KRB5_PROPERTIES_EDIT 131241 -#define HID_KRB5_PROPERTIES_FORWARDING 131240 -#define HID_KRBCHECK_OPTION 98335 -#define HID_LARGE_ICONS_OPTION 98322 -#define HID_LEASH_COMMANDS 131200 -#define HID_LEASH_PROGRAM 98319 -#define HID_LEASH_PROPERTIES_COMMAND 98331 -#define HID_LEASH_PROPERTIES_EDIT 131239 -#define HID_LOW_TICKET_ALARM_OPTION 98334 -#define HID_RESET_WINDOW_OPTION 98326 -#define HID_SCNCHRONIZE_TIME_OPTION 98314 -#define HID_STATUS_BAR_OPTION 124929 -#define HID_TOOLBAR_OPTION 124928 -#define HID_UPDATE_DISPLAY_COMMAND 98316 -#define HID_UPPERCASE_REALM_OPTION 98323 -#define HID_WHY_USE_LEASH32 98341 -#define ID_CHANGEPASSWORD 112 -#define ID_COUNTDOWN 101 -#define ID_DESTROY 111 -#define ID_EXIT 200 -#define ID_HELP_CHOOSE_PASSWORD 2511841056 -#define ID_HELP_KERBEROS 211 -#define ID_HELP_LEASH 210 -#define ID_HELP_PURPOSE 115 -#define ID_INITTICKETS 113 -#define KRB_BAD_NAME 39525457 -#define KRB_BAD_TIME 39525413 -#DEFINE KRB_ERROR_78 39525454 -#define KRB_INCORR_PASSWD 39525438 -#define KRB_NO_TKT_FILE 39525446 -#define KRB_UNKNOWN_REALM 39525433 -#define KRB_UNKNOWN_USER 39525384 -#define LSH_INVINSTANCE 40591875 - -[INFOTYPES] diff --git a/src/windows/leash/resource.h b/src/windows/leash/resource.h index 5f606fc6cc..5b4a3e73b3 100644 --- a/src/windows/leash/resource.h +++ b/src/windows/leash/resource.h @@ -27,35 +27,23 @@ #define IDD_DEBUG_WINDOW 157 #define IDD_LEASH_DEBUG_WINDOW 157 #define IDD_PAGE1 160 -#define IDD_KRB4_PROP_LOCATION 160 #define IDD_PAGE2 161 -#define IDD_KRB4_PROP_CONTENT 161 #define IDD_KRB_PROP_CONTENT 161 #define IDD_LEASH_PROPERTIES 167 #define IDD_KERB5_PAGE_PROP 168 #define IDD_KRB5_PROP_CONTENT 168 #define IDD_KRB5_PROP_LOCATION 169 -#define IDD_KRB4_REALMHOST_MAINT 178 #define IDD_KRB_REALMHOST_MAINT 178 #define IDC_CURSOR1 179 -#define IDD_KRB4_DOMAINREALM_MAINT 180 -#define IDD_KRB4_ADD_REALMHOSTNAMES 181 #define IDD_KRB_ADD_REALM 181 -#define IDD_KRB4_EDIT_REALMHOSTNAMES 182 #define IDD_KRB_EDIT_REALM 182 -#define IDD_KRB4_ADD_DOMAINREALMNAME 183 -#define IDD_KRB4_EDIT_DOMAINREALMNAME 184 #define IDD_DIALOG5 187 #define IDD_KRB_ADD_KDC_HOSTSERVER 197 #define IDD_KRB_EDIT_KDC_HOSTSERVER 199 -#define IDD_KRB4_REALMHOST_MAINT2 203 -#define IDD_KRB4_EDIT_REALM 204 -#define IDD_KRB4_ADD_REALM 205 #define IDD_DIALOG6 207 #define IDD_KRB_DOMAINREALM_MAINT 207 #define IDD_DIALOG7 210 #define IDI_ICON1 221 -#define IDD_AFS_PROPERTIES 224 #define IDD_AUTHENTICATE 229 #define IDI_LEASH_PRINCIPAL_GOOD 230 #define IDI_LEASH_PRINCIPAL_LOW 231 @@ -102,7 +90,6 @@ #define IDC_LABEL_KERB_TICKETS 1011 #define IDC_LIST1 1012 #define IDC_LEASH_MODULE_LB 1012 -#define IDC_LIST_KRB4_REALM_HOST 1012 #define IDC_LIST_UTILITY 1012 #define IDC_LIST_KDC_REALM 1012 #define IDC_LIST_REMOVE_HOST 1012 @@ -173,7 +160,6 @@ #define IDC_STATIC_OPTIONS 1083 #define IDC_STATIC_TICKET_OPTIONS 1085 #define IDC_BUTTON1 1086 -#define IDC_BUTTON_AFS_PROPERTIES 1086 #define IDC_RESET_DEFAULTS 1086 #define IDC_BUTTON_KRB_HELP 1087 #define IDC_STATIC_KRBREALM 1088 @@ -213,9 +199,6 @@ #define IDC_STATIC_NOTE 1129 #define IDC_EDIT_KDC_HOST 1130 #define IDC_EDIT_REALM 1131 -#define IDC_BUTTON_KRB4_REALM_HOST_ADD 1133 -#define ID_BUTTON_KRB4_REALM_HOST_REMOVE 1134 -#define IDC_BUTTON_KRB4_REALM_HOST_EDIT 1135 #define IDC_BUTTON_REALMHOST_MAINT_HELP2 1136 #define IDC_BUTTON_HOST_ADD 1138 #define ID_BUTTON_HOST_REMOVE 1139 @@ -229,8 +212,6 @@ #define IDC_STATIC_KRBREALMS 1149 #define IDC_STATIC_INIFILES 1150 #define IDC_CHECK_CONFIRM_KRB5_EXISTS 1151 -#define IDC_RADIO_AFS_ENABLED 1152 -#define IDC_RADIO_AFS_DISABLED 1153 #define IDC_STATIC_KRB_DEFAULT_LIFETIME 1154 #define IDC_STATIC_TIME_UNITS 1155 #define IDC_STATIC_KRB_DEFAULT_RENEWTILL 1155 @@ -256,7 +237,6 @@ #define IDC_STATIC_KRB5 1171 #define IDC_EDIT_RENEWTILL_H 1171 #define IDC_CHECK1 1172 -#define IDC_CHECK_REQUEST_KRB4 1172 #define IDC_CHECK2 1173 #define IDC_CHECK_PRESERVE_KINIT_OPTIONS 1173 #define IDC_CHECK3 1174 @@ -265,7 +245,6 @@ #define IDC_STATIC_RENEW_TILL_VALUE 1177 #define IDC_PICTURE 1179 #define IDC_DNS_KDC 1180 -#define IDC_KRB4_DNS_KDC 1181 #define IDC_CHECK_CREATE_MISSING_CFG 1182 #define IDC_GROUP_LEASH_MISC 1183 #define IDC_STATIC_LIFETIME_RANGE 1184 @@ -306,9 +285,7 @@ #define ID_UPPERCASE_REALM 32787 #define ID_OPTIONS_RESETWINDOWSIZE 32789 #define ID_RESET_WINDOW_SIZE 32790 -#define ID_AFS_CONTROL_PANEL 32791 #define ID_SYSTEM_CONTROL_PANEL 32792 -#define ID_KRB4_PROPERTIES 32793 #define ID_KRB5_PROPERTIES 32794 #define ID_LEASH_PROPERTIES 32795 #define ID_OPTIONS_LOWTICKETALARMSOUND 32796 diff --git a/src/windows/leashdll/AFSroutines.c b/src/windows/leashdll/AFSroutines.c deleted file mode 100644 index f04ab29792..0000000000 --- a/src/windows/leashdll/AFSroutines.c +++ /dev/null @@ -1,833 +0,0 @@ -//* Module name: AFSroutines.c - -#include -#include -#include -#include - -/* Private Include files */ -#include -#include -#include "leashdll.h" -#include - -#ifndef NO_AFS -#include -#include -#include -#include -#endif -#include "leash-int.h" - -#define MAXCELLCHARS 64 -#define MAXHOSTCHARS 64 -#define MAXHOSTSPERCELL 8 -#define TRANSARCAFSDAEMON "TransarcAFSDaemon" -typedef struct { - char name[MAXCELLCHARS]; - short numServers; - short flags; - struct sockaddr_in hostAddr[MAXHOSTSPERCELL]; - char hostName[MAXHOSTSPERCELL][MAXHOSTCHARS]; - char *linkedCell; -} afsconf_cell; - -DWORD AfsOnLine = 1; -extern DWORD AfsAvailable; - -int not_an_API_LeashAFSGetToken(TICKETINFO * ticketinfo, TicketList** ticketList, char * kprinc); -DWORD GetServiceStatus(LPSTR lpszMachineName, LPSTR lpszServiceName, DWORD *lpdwCurrentState); -BOOL SetAfsStatus(DWORD AfsStatus); -BOOL GetAfsStatus(DWORD *AfsStatus); -void Leash_afs_error(LONG rc, LPCSTR FailedFunctionName); - -static char *afs_realm_of_cell(afsconf_cell *); -static long get_cellconfig_callback(void *, struct sockaddr_in *, char *); -static int get_cellconfig(char *, afsconf_cell *, char *); - -/**************************************/ -/* LeashAFSdestroyToken(): */ -/**************************************/ -int -Leash_afs_unlog( - void - ) -{ -#ifdef NO_AFS - return(0); -#else - long rc; - char HostName[64]; - DWORD CurrentState; - - if (!AfsAvailable || GetAfsStatus(&AfsOnLine) && !AfsOnLine) - return(0); - - CurrentState = 0; - memset(HostName, '\0', sizeof(HostName)); - gethostname(HostName, sizeof(HostName)); - if (GetServiceStatus(HostName, TRANSARCAFSDAEMON, &CurrentState) != NOERROR) - return(0); - if (CurrentState != SERVICE_RUNNING) - return(0); - - rc = ktc_ForgetAllTokens(); - - return(0); -#endif -} - - -int -not_an_API_LeashAFSGetToken( - TICKETINFO * ticketinfo, - TicketList** ticketList, - char * kerberosPrincipal - ) -{ -#ifdef NO_AFS - return(0); -#else - struct ktc_principal aserver; - struct ktc_principal aclient; - struct ktc_token atoken; - int EndMonth; - int EndDay; - int cellNum; - int BreakAtEnd; - char UserName[64]; - char CellName[64]; - char ServiceName[64]; - char InstanceName[64]; - char EndTime[16]; - char Buffer[256]; - char Months[12][4] = {"Jan\0", "Feb\0", "Mar\0", "Apr\0", "May\0", "Jun\0", "Jul\0", "Aug\0", "Sep\0", "Oct\0", "Nov\0", "Dec\0"}; - char TokenStatus[16]; - time_t CurrentTime; - struct tm *newtime; - DWORD CurrentState; - DWORD rc; - char HostName[64]; - - - TicketList* list = NULL; - if ( ticketinfo ) { - ticketinfo->btickets = NO_TICKETS; - ticketinfo->principal[0] = '\0'; - } - if ( !kerberosPrincipal ) - kerberosPrincipal = ""; - - if (!AfsAvailable || GetAfsStatus(&AfsOnLine) && !AfsOnLine) - return(0); - - CurrentState = 0; - memset(HostName, '\0', sizeof(HostName)); - gethostname(HostName, sizeof(HostName)); - if (GetServiceStatus(HostName, TRANSARCAFSDAEMON, &CurrentState) != NOERROR) - return(0); - if (CurrentState != SERVICE_RUNNING) - return(0); - - BreakAtEnd = 0; - cellNum = 0; - while (1) - { - if (rc = ktc_ListTokens(cellNum, &cellNum, &aserver)) - { - if (rc != KTC_NOENT) - return(0); - - if (BreakAtEnd == 1) - break; - } - BreakAtEnd = 1; - memset(&atoken, '\0', sizeof(atoken)); - if (rc = ktc_GetToken(&aserver, &atoken, sizeof(atoken), &aclient)) - { - if (rc == KTC_ERROR) - return(0); - - continue; - } - - if (!list) - { - list = (TicketList*) calloc(1, sizeof(TicketList)); - (*ticketList) = list; - } - else - { - list->next = (struct TicketList*) calloc(1, sizeof(TicketList)); - list = (TicketList*) list->next; - } - - CurrentTime = time(NULL); - - newtime = localtime(&atoken.endTime); - - memset(UserName, '\0', sizeof(UserName)); - strcpy(UserName, aclient.name); - - memset(CellName, '\0', sizeof(CellName)); - strcpy(CellName, aclient.cell); - - memset(InstanceName, '\0', sizeof(InstanceName)); - strcpy(InstanceName, aclient.instance); - - memset(ServiceName, '\0', sizeof(ServiceName)); - strcpy(ServiceName, aserver.name); - - memset(TokenStatus, '\0', sizeof(TokenStatus)); - - EndDay = newtime->tm_mday; - - EndMonth = newtime->tm_mon + 1;; - - sprintf(EndTime, "%02d:%02d:%02d", newtime->tm_hour, newtime->tm_min, newtime->tm_sec); - - sprintf(Buffer," %s %02d %s %s%s%s@%s %s", - Months[EndMonth - 1], EndDay, EndTime, - UserName, - InstanceName[0] ? "." : "", - InstanceName, - CellName, - TokenStatus); - - list->theTicket = (char*) calloc(1, sizeof(Buffer)); - if (!list->theTicket) - { -#ifdef USE_MESSAGE_BOX - MessageBox(NULL, "Memory Error", "Error", MB_OK); -#endif /* USE_MESSAGE_BOX */ - return ENOMEM; - } - - strcpy(list->theTicket, Buffer); - list->name = strdup(aclient.name); - list->inst = aclient.instance[0] ? strdup(aclient.instance) : NULL; - list->realm = strdup(aclient.cell); - list->encTypes = NULL; - list->addrCount = 0; - list->addrList = NULL; - - if ( ticketinfo ) { - sprintf(Buffer,"%s@%s",UserName,CellName); - if (!ticketinfo->principal[0] || !stricmp(Buffer,kerberosPrincipal)) { - strcpy(ticketinfo->principal, Buffer); - ticketinfo->issue_date = 0; - ticketinfo->lifetime = atoken.endTime; - ticketinfo->renew_till = 0; - - _tzset(); - if ( ticketinfo->lifetime - time(0) <= 0L ) - ticketinfo->btickets = EXPD_TICKETS; - else - ticketinfo->btickets = GOOD_TICKETS; - } - } - } - return(0); -#endif -} - -static char OpenAFSConfigKeyName[] = "SOFTWARE\\OpenAFS\\Client"; - -static int -use_krb524(void) -{ - HKEY parmKey; - DWORD code, len; - DWORD use524 = 0; - - code = RegOpenKeyEx(HKEY_CURRENT_USER, OpenAFSConfigKeyName, - 0, KEY_QUERY_VALUE, &parmKey); - if (code == ERROR_SUCCESS) { - len = sizeof(use524); - code = RegQueryValueEx(parmKey, "Use524", NULL, NULL, - (BYTE *) &use524, &len); - RegCloseKey(parmKey); - } - if (code != ERROR_SUCCESS) { - code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, OpenAFSConfigKeyName, - 0, KEY_QUERY_VALUE, &parmKey); - if (code == ERROR_SUCCESS) { - len = sizeof(use524); - code = RegQueryValueEx(parmKey, "Use524", NULL, NULL, - (BYTE *) &use524, &len); - RegCloseKey (parmKey); - } - } - return use524; -} - - - -int -Leash_afs_klog( - char *service, - char *cell, - char *realm, - int LifeTime - ) -{ -/////#ifdef NO_AFS -#if defined(NO_AFS) || defined(NO_KRB4) - return(0); -#else - long rc; -////This is defined in krb.h: - CREDENTIALS creds; - KTEXT_ST ticket; - struct ktc_principal aserver; - struct ktc_principal aclient; - char realm_of_user[REALM_SZ]; /* Kerberos realm of user */ - char realm_of_cell[REALM_SZ]; /* Kerberos realm of cell */ - char local_cell[MAXCELLCHARS+1]; - char Dmycell[MAXCELLCHARS+1]; - struct ktc_token atoken; - struct ktc_token btoken; - afsconf_cell ak_cellconfig; /* General information about the cell */ - char RealmName[128]; - char CellName[128]; - char ServiceName[128]; - DWORD CurrentState; - char HostName[64]; - BOOL try_krb5 = 0; - int retry = 0; - int len; -#ifndef NO_KRB5 - krb5_context context = 0; - krb5_ccache _krb425_ccache = 0; - krb5_creds increds; - krb5_creds * k5creds = 0; - krb5_error_code r; - krb5_principal client_principal = 0; - krb5_flags flags = 0; -#endif /* NO_KRB5 */ - - if (!AfsAvailable || GetAfsStatus(&AfsOnLine) && !AfsOnLine) - return(0); - - if ( !realm ) realm = ""; - if ( !cell ) cell = ""; - if ( !service ) service = ""; - - CurrentState = 0; - memset(HostName, '\0', sizeof(HostName)); - gethostname(HostName, sizeof(HostName)); - if (GetServiceStatus(HostName, TRANSARCAFSDAEMON, &CurrentState) != NOERROR) - return(0); - if (CurrentState != SERVICE_RUNNING) - return(0); - - memset(RealmName, '\0', sizeof(RealmName)); - memset(CellName, '\0', sizeof(CellName)); - memset(ServiceName, '\0', sizeof(ServiceName)); - memset(realm_of_user, '\0', sizeof(realm_of_user)); - memset(realm_of_cell, '\0', sizeof(realm_of_cell)); - memset(Dmycell, '\0', sizeof(Dmycell)); - - // NULL or empty cell returns information on local cell - if (cell && cell[0]) - strcpy(Dmycell, cell); - rc = get_cellconfig(Dmycell, &ak_cellconfig, local_cell); - if (rc && cell && cell[0]) { - memset(Dmycell, '\0', sizeof(Dmycell)); - rc = get_cellconfig(Dmycell, &ak_cellconfig, local_cell); - } - if (rc) - return(rc); - -#ifndef NO_KRB5 - if (!(r = Leash_krb5_initialize(&context, &_krb425_ccache))) { - int i; - - memset((char *)&increds, 0, sizeof(increds)); - - (*pkrb5_cc_get_principal)(context, _krb425_ccache, &client_principal); - i = krb5_princ_realm(context, client_principal)->length; - if (i > REALM_SZ-1) - i = REALM_SZ-1; - strncpy(realm_of_user,krb5_princ_realm(context, client_principal)->data,i); - realm_of_user[i] = 0; - try_krb5 = 1; - } -#endif /* NO_KRB5 */ - -#ifndef NO_KRB4 - if ( !try_krb5 || !realm_of_user[0] ) { - if ((rc = (*pkrb_get_tf_realm)((*ptkt_string)(), realm_of_user)) != KSUCCESS) - { - return(rc); - } - } -#endif - strcpy(realm_of_cell, afs_realm_of_cell(&ak_cellconfig)); - - if (strlen(service) == 0) - strcpy(ServiceName, "afs"); - else - strcpy(ServiceName, service); - - if (strlen(cell) == 0) - strcpy(CellName, local_cell); - else - strcpy(CellName, cell); - - if (strlen(realm) == 0) - strcpy(RealmName, realm_of_cell); - else - strcpy(RealmName, realm); - - memset(&creds, '\0', sizeof(creds)); - -#ifndef NO_KRB5 - if ( try_krb5 ) { - /* First try Service/Cell@REALM */ - if (r = (*pkrb5_build_principal)(context, &increds.server, - strlen(RealmName), - RealmName, - ServiceName, - CellName, - 0)) - { - try_krb5 = 0; - goto use_krb4; - } - - increds.client = client_principal; - increds.times.endtime = 0; - /* Ask for DES since that is what V4 understands */ - increds.keyblock.enctype = ENCTYPE_DES_CBC_CRC; - -#ifdef KRB5_TC_NOTICKET - flags = 0; - r = pkrb5_cc_set_flags(context, _krb425_ccache, flags); -#endif - if (r == 0) - r = pkrb5_get_credentials(context, 0, _krb425_ccache, &increds, &k5creds); - if (r == KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN || - r == KRB5KRB_ERR_GENERIC /* Heimdal */) { - /* Next try Service@REALM */ - pkrb5_free_principal(context, increds.server); - r = pkrb5_build_principal(context, &increds.server, - strlen(RealmName), - RealmName, - ServiceName, - 0); - if (r == 0) - r = pkrb5_get_credentials(context, 0, _krb425_ccache, &increds, &k5creds); - } - - pkrb5_free_principal(context, increds.server); - pkrb5_free_principal(context, client_principal); -#ifdef KRB5_TC_NOTICKET - flags = KRB5_TC_NOTICKET; - pkrb5_cc_set_flags(context, _krb425_ccache, flags); -#endif - (void) pkrb5_cc_close(context, _krb425_ccache); - _krb425_ccache = 0; - - if (r || k5creds == 0) { - pkrb5_free_context(context); - try_krb5 = 0; - goto use_krb4; - } - - /* This code inserts the entire K5 ticket into the token - * No need to perform a krb524 translation which is - * commented out in the code below - */ - if ( use_krb524() || k5creds->ticket.length > MAXKTCTICKETLEN ) - goto try_krb524d; - - memset(&aserver, '\0', sizeof(aserver)); - strncpy(aserver.name, ServiceName, MAXKTCNAMELEN - 1); - strncpy(aserver.cell, CellName, MAXKTCREALMLEN - 1); - - memset(&atoken, '\0', sizeof(atoken)); - atoken.kvno = RXKAD_TKT_TYPE_KERBEROS_V5; - atoken.startTime = k5creds->times.starttime; - atoken.endTime = k5creds->times.endtime; - memcpy(&atoken.sessionKey, k5creds->keyblock.contents, k5creds->keyblock.length); - atoken.ticketLen = k5creds->ticket.length; - memcpy(atoken.ticket, k5creds->ticket.data, atoken.ticketLen); - - retry_gettoken5: - rc = ktc_GetToken(&aserver, &btoken, sizeof(btoken), &aclient); - if (rc != 0 && rc != KTC_NOENT && rc != KTC_NOCELL) { - if ( rc == KTC_NOCM && retry < 20 ) { - Sleep(500); - retry++; - goto retry_gettoken5; - } - goto try_krb524d; - } - - if (atoken.kvno == btoken.kvno && - atoken.ticketLen == btoken.ticketLen && - !memcmp(&atoken.sessionKey, &btoken.sessionKey, sizeof(atoken.sessionKey)) && - !memcmp(atoken.ticket, btoken.ticket, atoken.ticketLen)) - { - /* Success */ - pkrb5_free_creds(context, k5creds); - pkrb5_free_context(context); - return(0); - } - - // * Reset the "aclient" structure before we call ktc_SetToken. - // * This structure was first set by the ktc_GetToken call when - // * we were comparing whether identical tokens already existed. - - len = min(k5creds->client->data[0].length,MAXKTCNAMELEN - 1); - strncpy(aclient.name, k5creds->client->data[0].data, len); - aclient.name[len] = '\0'; - - if ( k5creds->client->length > 1 ) { - char * p; - strcat(aclient.name, "."); - p = aclient.name + strlen(aclient.name); - len = min(k5creds->client->data[1].length,MAXKTCNAMELEN - strlen(aclient.name) - 1); - strncpy(p, k5creds->client->data[1].data, len); - p[len] = '\0'; - } - aclient.instance[0] = '\0'; - - strcpy(aclient.cell, realm_of_cell); - - len = min(k5creds->client->realm.length,strlen(realm_of_cell)); - if ( strncmp(realm_of_cell, k5creds->client->realm.data, len) ) { - char * p; - strcat(aclient.name, "@"); - p = aclient.name + strlen(aclient.name); - len = min(k5creds->client->realm.length,MAXKTCNAMELEN - strlen(aclient.name) - 1); - strncpy(p, k5creds->client->realm.data, len); - p[len] = '\0'; - } - - rc = ktc_SetToken(&aserver, &atoken, &aclient, 0); - if (!rc) { - /* Success */ - pkrb5_free_creds(context, k5creds); - pkrb5_free_context(context); - return(0); - } - - try_krb524d: - /* This requires krb524d to be running with the KDC */ - r = pkrb524_convert_creds_kdc(context, k5creds, &creds); - pkrb5_free_creds(context, k5creds); - pkrb5_free_context(context); - if (r) { - try_krb5 = 0; - goto use_krb4; - } - rc = KSUCCESS; - } else -#endif /* NO_KRB5 */ - { - use_krb4: - rc = KFAILURE; - } - if (rc != KSUCCESS) - { - return(rc); - } - - memset(&aserver, '\0', sizeof(aserver)); - strncpy(aserver.name, ServiceName, MAXKTCNAMELEN - 1); - strncpy(aserver.cell, CellName, MAXKTCNAMELEN - 1); - - memset(&atoken, '\0', sizeof(atoken)); - atoken.kvno = creds.kvno; - atoken.startTime = creds.issue_date; - atoken.endTime = (*pkrb_life_to_time)(creds.issue_date,creds.lifetime); - memcpy(&atoken.sessionKey, creds.session, 8); - atoken.ticketLen = creds.ticket_st.length; - memcpy(atoken.ticket, creds.ticket_st.dat, atoken.ticketLen); - - if (!(rc = ktc_GetToken(&aserver, &btoken, sizeof(btoken), &aclient)) && - atoken.kvno == btoken.kvno && - atoken.ticketLen == btoken.ticketLen && - !memcmp(&atoken.sessionKey, &btoken.sessionKey, sizeof(atoken.sessionKey)) && - !memcmp(atoken.ticket, btoken.ticket, atoken.ticketLen)) - { - return(0); - } - - // * Reset the "aclient" structure before we call ktc_SetToken. - // * This structure was first set by the ktc_GetToken call when - // * we were comparing whether identical tokens already existed. - - strncpy(aclient.name, creds.pname, MAXKTCNAMELEN - 1); - aclient.name[MAXKTCNAMELEN - 1] = '\0'; - if (creds.pinst[0]) - { - strncat(aclient.name, ".", MAXKTCNAMELEN - 1 - strlen(aclient.name)); - aclient.name[MAXKTCNAMELEN - 1] = '\0'; - strncat(aclient.name, creds.pinst, MAXKTCNAMELEN - 1 - strlen(aclient.name)); - aclient.name[MAXKTCNAMELEN - 1] = '\0'; - } - strcpy(aclient.instance, ""); - - if ( strcmp(realm_of_cell, creds.realm) ) - { - strncat(aclient.name, "@", MAXKTCNAMELEN - 1 - strlen(aclient.name)); - aclient.name[MAXKTCNAMELEN - 1] = '\0'; - strncat(aclient.name, creds.realm, MAXKTCNAMELEN - 1 - strlen(aclient.name)); - aclient.name[MAXKTCNAMELEN - 1] = '\0'; - } - aclient.name[MAXKTCNAMELEN-1] = '\0'; - - strcpy(aclient.cell, CellName); - - // * NOTE: On WIN32, the order of SetToken params changed... - // * to ktc_SetToken(&aserver, &aclient, &atoken, 0) - // * from ktc_SetToken(&aserver, &atoken, &aclient, 0) on Unix... - // * The afscompat ktc_SetToken provides the Unix order - - if (rc = ktc_SetToken(&aserver, &atoken, &aclient, 0)) - { - Leash_afs_error(rc, "ktc_SetToken()"); - return(rc); - } - - return(0); -#endif -} - -/**************************************/ -/* afs_realm_of_cell(): */ -/**************************************/ -static char *afs_realm_of_cell(afsconf_cell *cellconfig) -{ -#ifdef NO_AFS - return(0); -#else - char krbhst[MAX_HSTNM]=""; - static char krbrlm[REALM_SZ+1]=""; -#ifndef NO_KRB5 - krb5_context ctx = 0; - char ** realmlist=NULL; - krb5_error_code r; -#endif /* NO_KRB5 */ - - if (!cellconfig) - return 0; - -#ifndef NO_KRB5 - if ( pkrb5_init_context ) { - r = pkrb5_init_context(&ctx); - if ( !r ) - r = pkrb5_get_host_realm(ctx, cellconfig->hostName[0], &realmlist); - if ( !r && realmlist && realmlist[0] ) { - strcpy(krbrlm, realmlist[0]); - pkrb5_free_host_realm(ctx, realmlist); - } - if (ctx) - pkrb5_free_context(ctx); - } -#endif /* NO_KRB5 */ - - if ( !krbrlm[0] ) - { - char *s = krbrlm; - char *t = cellconfig->name; - int c; - - while (c = *t++) - { - if (islower(c)) c=toupper(c); - *s++ = c; - } - *s++ = 0; - } - return(krbrlm); -#endif -} - -/**************************************/ -/* get_cellconfig(): */ -/**************************************/ -static int get_cellconfig(char *cell, afsconf_cell *cellconfig, char *local_cell) -{ -#ifdef NO_AFS - return(0); -#else - int rc; - - local_cell[0] = (char)0; - memset(cellconfig, 0, sizeof(*cellconfig)); - - /* WIN32: cm_GetRootCellName(local_cell) - NOTE: no way to get max chars */ - if (rc = cm_GetRootCellName(local_cell)) - { - return(rc); - } - - if (strlen(cell) == 0) - strcpy(cell, local_cell); - - /* WIN32: cm_SearchCellFile(cell, pcallback, pdata) */ - strcpy(cellconfig->name, cell); - - return cm_SearchCell(cell, get_cellconfig_callback, NULL, (void*)cellconfig); -#endif -} - -/**************************************/ -/* get_cellconfig_callback(): */ -/**************************************/ -static long get_cellconfig_callback(void *cellconfig, struct sockaddr_in *addrp, char *namep) -{ -#ifdef NO_AFS - return(0); -#else - afsconf_cell *cc = (afsconf_cell *)cellconfig; - - cc->hostAddr[cc->numServers] = *addrp; - strcpy(cc->hostName[cc->numServers], namep); - cc->numServers++; - return(0); -#endif -} - - -/**************************************/ -/* Leash_afs_error(): */ -/**************************************/ -void -Leash_afs_error(LONG rc, LPCSTR FailedFunctionName) -{ -#ifdef NO_AFS - return; -#else -#ifdef USE_MESSAGE_BOX - char message[256]; - const char *errText; - - // Using AFS defines as error messages for now, until Transarc - // gets back to me with "string" translations of each of these - // const. defines. - if (rc == KTC_ERROR) - errText = "KTC_ERROR"; - else if (rc == KTC_TOOBIG) - errText = "KTC_TOOBIG"; - else if (rc == KTC_INVAL) - errText = "KTC_INVAL"; - else if (rc == KTC_NOENT) - errText = "KTC_NOENT"; - else if (rc == KTC_PIOCTLFAIL) - errText = "KTC_PIOCTLFAIL"; - else if (rc == KTC_NOPIOCTL) - errText = "KTC_NOPIOCTL"; - else if (rc == KTC_NOCELL) - errText = "KTC_NOCELL"; - else if (rc == KTC_NOCM) - errText = "KTC_NOCM: The service, Transarc AFS Daemon, most likely is not started!"; - else - errText = "Unknown error!"; - - sprintf(message, "%s\n(%s failed)", errText, FailedFunctionName); - MessageBox(NULL, message, "AFS", MB_OK | MB_ICONERROR | MB_TASKMODAL | MB_SETFOREGROUND); -#endif /* USE_MESSAGE_BOX */ - return; - -#endif -} - -DWORD GetServiceStatus( - LPSTR lpszMachineName, - LPSTR lpszServiceName, - DWORD *lpdwCurrentState) -{ -#ifdef NO_AFS - return(NOERROR); -#else - DWORD hr = NOERROR; - SC_HANDLE schSCManager = NULL; - SC_HANDLE schService = NULL; - DWORD fdwDesiredAccess = 0; - SERVICE_STATUS ssServiceStatus = {0}; - BOOL fRet = FALSE; - - if ((pOpenSCManagerA == NULL) || - (pOpenServiceA == NULL) || - (pQueryServiceStatus == NULL) || - (pCloseServiceHandle == NULL)) - { - *lpdwCurrentState = SERVICE_RUNNING; - return(NOERROR); - } - - *lpdwCurrentState = 0; - - fdwDesiredAccess = GENERIC_READ; - - schSCManager = (*pOpenSCManagerA)(lpszMachineName, - NULL, - fdwDesiredAccess); - - if(schSCManager == NULL) - { - hr = GetLastError(); - goto cleanup; - } - - schService = (*pOpenServiceA)(schSCManager, - lpszServiceName, - fdwDesiredAccess); - - if(schService == NULL) - { - hr = GetLastError(); - goto cleanup; - } - - fRet = (*pQueryServiceStatus)(schService, - &ssServiceStatus); - - if(fRet == FALSE) - { - hr = GetLastError(); - goto cleanup; - } - - *lpdwCurrentState = ssServiceStatus.dwCurrentState; - -cleanup: - - (*pCloseServiceHandle)(schService); - (*pCloseServiceHandle)(schSCManager); - - return(hr); -#endif -} - -BOOL -SetAfsStatus( - DWORD AfsStatus - ) -{ -#ifdef NO_AFS - return(TRUE); -#else - return write_registry_setting(LEASH_SETTINGS_REGISTRY_VALUE_AFS_STATUS, - REG_DWORD, &AfsStatus, - sizeof(AfsStatus)) ? FALSE : TRUE; -#endif -} - -BOOL -GetAfsStatus( - DWORD *AfsStatus - ) -{ -#ifdef NO_AFS - return(TRUE); -#else - return read_registry_setting(LEASH_SETTINGS_REGISTRY_VALUE_AFS_STATUS, - AfsStatus, sizeof(DWORD)) ? FALSE : TRUE; -#endif -} diff --git a/src/windows/leashdll/Makefile.in b/src/windows/leashdll/Makefile.in index 07ced1cc17..390a0a475f 100644 --- a/src/windows/leashdll/Makefile.in +++ b/src/windows/leashdll/Makefile.in @@ -1,18 +1,5 @@ BUILDTOP=..\.. -##FIX ME: Enable proper compilation with AFS -NO_AFS=1 - -!ifndef NO_AFS -###AFS_BASE= -AFS_INCLUDES=-I$(AFS_BASE)\Include -AFS_LIB=$(AFS_BASE)\lib -AFS_LIBS=$(AFS_LIB)\afsauthent.lib -!else -AFS_INCLUDES= -AFS_LIBS= -!endif - DLL_NAME=leashw32 # Use 64-bit DLL_NAME and DEF_FILE on 64-bit platforms @@ -22,18 +9,15 @@ DLL_NAME=leashw64 DEF_FILE=leashw32.def -OBJS= $(OUTPRE)AFSroutines.$(OBJEXT) \ - $(OUTPRE)krb5routines.$(OBJEXT) \ +OBJS= $(OUTPRE)krb5routines.$(OBJEXT) \ $(OUTPRE)leashdll.$(OBJEXT) \ $(OUTPRE)leasherr.$(OBJEXT) \ $(OUTPRE)lsh_pwd.$(OBJEXT) \ - $(OUTPRE)lshcallb.$(OBJEXT) \ $(OUTPRE)lshfunc.$(OBJEXT) \ $(OUTPRE)lshutil.$(OBJEXT) \ $(OUTPRE)timesync.$(OBJEXT) \ $(OUTPRE)winerr.$(OBJEXT) \ - $(OUTPRE)winutil.$(OBJEXT) \ - $(OUTPRE)registry.$(OBJEXT) + $(OUTPRE)winutil.$(OBJEXT) #TODO: Fix resource compilation RESFILE = $(OUTPRE)lsh_pwd.res @@ -48,25 +32,21 @@ RCFLAGS = -I$(BUILDTOP)\include -I$(BUILDTOP) -DLEASHDLL_LIB # Set NODEBUG if building release instead of debug -LOCALINCLUDES = -I$(BUILDTOP)\include -I$(BUILDTOP)\windows\include -I.\include\krb4 $(AFS_INCLUDES) +LOCALINCLUDES = -I$(BUILDTOP)\include -I$(BUILDTOP)\windows\include WINLIBS = kernel32.lib advapi32.lib user32.lib gdi32.lib Version.lib \ - ws2_32.lib dnsapi.lib $(BUILDTOP)\ccapi\lib\win\srctmp\$(CCLIB).lib $(AFS_LIBS) + ws2_32.lib dnsapi.lib $(BUILDTOP)\ccapi\lib\win\srctmp\$(CCLIB).lib WINDLLFLAGS = /nologo /dll /incremental:no /release $(LOPTS) -DEFINES = -DWINSOCK -DWIN32 -DWINDOWS -DNO_KRB4 -DUSE_MESSAGE_BOX +DEFINES = -DWINSOCK -DWIN32 -DWINDOWS -DUSE_MESSAGE_BOX !ifdef NODEBUG DEFINES = $(DEFINES) !else DEFINES = $(DEFINES) -DDBG !endif -!ifdef NO_AFS -DEFINES = $(DEFINES) -DNO_AFS -!endif - all-windows: all-windows: $(OUTPRE)$(DLL_NAME).dll diff --git a/src/windows/leashdll/include/krb4/conf-pc.h b/src/windows/leashdll/include/krb4/conf-pc.h deleted file mode 100644 index 65a8779caf..0000000000 --- a/src/windows/leashdll/include/krb4/conf-pc.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright 1988 by the Massachusetts Institute of Technology. - * - * For copying and distribution information, please see the file - * . - * - * Machine-type definitions: IBM PC 8086 - */ - -#if defined(_WIN32) && !defined(WIN32) -#define WIN32 -#endif - -#if ( defined(WIN16) || defined(WIN32) || defined(_WINDOWS)) && !defined(WINDOWS) -#define WINDOWS -#endif - -#if defined(__OS2__) && !defined(OS2) -#define OS2 -#endif - -#ifdef WIN16 -#define BITS16 -#else -#ifdef MSDOS -#define BITS16 -#else -#define BITS32 -#endif -#endif -#define LSBFIRST - -#define index(s,c) strchr(s,c) /* PC version of index */ -#define rindex(s,c) strrchr(s,c) -#if !defined(OS2) && !defined(LWP) /* utils.h under OS/2 */ -#define bcmp(s1,s2,n) memcmp((s1),(s2),(n)) -#define bcopy(a,b,c) memcpy( (b), (a), (c) ) -#define bzero(a,b) memset( (a), 0, (b) ) -#endif - -typedef unsigned char u_char; -typedef unsigned long u_long; -typedef unsigned short u_short; -typedef unsigned int u_int; -#define NO_UIDGID_T - -#if !defined(WINDOWS) && !defined(DWORD) -typedef long DWORD; -#endif - -#if defined(PC)&&!defined(WINDOWS) -#ifndef LPSTR -typedef char *LPSTR; -typedef char *LPBYTE; -typedef char *CHARPTR; -typedef char *LPINT; -typedef unsigned int WORD; -#endif -#define LONG long -#define FAR -#define PASCAL -#define EXPORT -#endif - -#ifdef OS2 -#include -#define lstrcpy strcpy -#define lstrlen strlen -#define lstrcmp strcmp -#define lstrcpyn strncpy -#endif - -#ifdef WIN32 -#define _export -#endif - -#if defined(BITS32) -#define far -#define near -#endif - -#ifdef WINDOWS -#include -#endif - -#ifdef WIN32 -#include -#endif - -#ifdef WIN16 -#pragma message ( "WIN16 in " __FILE__ ) -#include -#include -#ifndef KRB_INT32 -#define KRB_INT32 long -#endif -#ifndef KRB_UINT32 -#define KRB_UINT32 unsigned KRB_INT32 -#endif -#endif - - -#define RANDOM_KRB_INT32_1 ((KRB_INT32) time(NULL)) -#define RANDOM_KRB_INT32_2 ((KRB_INT32) getpid()) -#define TIME_GMT_UNIXSEC unix_time_gmt_unixsec((unsigned KRB_INT32 *)0); -#ifndef MAXPATHLEN -#define MAXPATHLEN _MAX_PATH -#endif diff --git a/src/windows/leashdll/include/krb4/conf.h b/src/windows/leashdll/include/krb4/conf.h deleted file mode 100644 index 2e2a84cd6e..0000000000 --- a/src/windows/leashdll/include/krb4/conf.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 1988 by the Massachusetts Institute of Technology. - * - * For copying and distribution information, please see the file - * . - * - * Configuration info for operating system, hardware description, - * language implementation, C library, etc. - * - * This file should be included in (almost) every file in the Kerberos - * sources, and probably should *not* be needed outside of those - * sources. (How do we deal with /usr/include/des.h and - * /usr/include/krb.h?) - */ - -#ifndef _CONF_H_ -#define _CONF_H_ - -#include "osconf.h" - -#ifdef SHORTNAMES -#include "names.h" -#endif - -/* - * Language implementation-specific definitions - */ - -/* special cases */ -#ifdef __HIGHC__ -/* broken implementation of ANSI C */ -#undef __STDC__ -#endif - -#if !defined(__STDC__) && !defined(PC) -#define const -#define volatile -#define signed -typedef char *pointer; /* pointer to generic data */ -#ifndef PROTOTYPE -#define PROTOTYPE(p) () -#endif -#else -typedef void *pointer; -#ifndef PROTOTYPE -#define PROTOTYPE(p) p -#endif -#endif - -/* Does your compiler understand "void"? */ -#ifdef notdef -#define void int -#endif - -/* - * A few checks to see that necessary definitions are included. - */ - -#ifndef MSBFIRST -#ifndef LSBFIRST -#error byte order not defined -#endif -#endif - -/* machine size */ -#ifndef BITS16 -#ifndef BITS32 -#error number of bits? -#endif -#endif - -/* end of checks */ - -#endif /* _CONF_H_ */ diff --git a/src/windows/leashdll/include/krb4/osconf.h b/src/windows/leashdll/include/krb4/osconf.h deleted file mode 100644 index 340421e868..0000000000 --- a/src/windows/leashdll/include/krb4/osconf.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 1988 by the Massachusetts Institute of Technology. - * - * For copying and distribution information, please see the file - * . - * - * Athena configuration. - */ - -#ifndef _OSCONF_H_ -#define _OSCONF_H_ - -#ifndef PC -#if defined(IBMPC) || defined(__MSDOS__) || defined(OS2) || defined(_MSDOS) || defined(_WIN32) -#define PC -#endif -#endif - -#ifdef tahoe -#include "conf-bsdtahoe.h" -#else /* !tahoe */ -#ifdef vax -#include "conf-bsdvax.h" -#else /* !vax */ -#if defined(mips) && defined(ultrix) -#include "conf-ultmips2.h" -#else /* !Ultrix MIPS-2 */ -#ifdef ibm032 -#include "conf-bsdibm032.h" -#else /* !ibm032 */ -#ifdef apollo -#include "conf-bsdapollo.h" -#else /* !apollo */ -#ifdef sun -#ifdef sparc -#include "conf-bsdsparc.h" -#else /* sun but not sparc */ -#ifdef i386 -#include "conf-bsd386i.h" -#else /* sun but not (sparc or 386i) */ -#include "conf-bsdm68k.h" -#endif /* i386 */ -#endif /* sparc */ -#else /* !sun */ -#ifdef pyr -#include "conf-pyr.h" -#else -#if defined(PC) || defined(__MSDOS__) || defined(OS2) || defined(_MSDOS) || defined(_WIN32) -#include "conf-pc.h" -#endif /* PC */ -#endif /* pyr */ -#endif /* sun */ -#endif /* apollo */ -#endif /* ibm032 */ -#endif /* mips */ -#endif /* vax */ -#endif /* tahoe */ - -#endif /* _OSCONF_H_ */ diff --git a/src/windows/leashdll/krb5routines.c b/src/windows/leashdll/krb5routines.c index 3911720aea..ff4f360f63 100644 --- a/src/windows/leashdll/krb5routines.c +++ b/src/windows/leashdll/krb5routines.c @@ -80,139 +80,9 @@ char *GetTicketFlag(krb5_creds *cred) return buf; } -long -Leash_convert524( - krb5_context alt_ctx - ) -{ -#if defined(NO_KRB5) || defined(NO_KRB4) - 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. - */ - - 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)); - free(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); -#endif /* NO_KRB5 */ -} - - int LeashKRB5_renew(void) { -#ifdef NO_KRB5 - return(0); -#else krb5_error_code code = 0; krb5_context ctx = 0; krb5_ccache cc = 0; @@ -247,13 +117,9 @@ LeashKRB5_renew(void) my_creds.client = me; my_creds.server = server; -#ifdef KRB5_TC_NOTICKET pkrb5_cc_set_flags(ctx, cc, 0); -#endif code = pkrb5_get_renewed_creds(ctx, &my_creds, me, cc, NULL); -#ifdef KRB5_TC_NOTICKET pkrb5_cc_set_flags(ctx, cc, KRB5_TC_NOTICKET); -#endif if (code) { if ( code != KRB5KDC_ERR_ETYPE_NOSUPP || code != KRB5_KDC_UNREACH) @@ -282,10 +148,8 @@ LeashKRB5_renew(void) if (ctx) pkrb5_free_context(ctx); return(code); -#endif /* NO_KRB5 */ } -#ifndef NO_KRB5 static krb5_error_code KRB5_CALLCONV leash_krb5_prompter( krb5_context context, void *data, @@ -293,7 +157,6 @@ leash_krb5_prompter( krb5_context context, const char *banner, int num_prompts, krb5_prompt prompts[]); -#endif /* NO_KRB5 */ int Leash_krb5_kinit( @@ -309,9 +172,6 @@ DWORD addressless, DWORD publicIP ) { -#ifdef NO_KRB5 - return(0); -#else krb5_error_code code = 0; krb5_context ctx = 0; krb5_ccache cc = 0, defcache = 0; @@ -500,7 +360,6 @@ DWORD publicIP if (ctx && (ctx != alt_ctx)) pkrb5_free_context(ctx); return(code); -#endif //!NO_KRB5 } @@ -512,9 +371,6 @@ Leash_krb5_kdestroy( void ) { -#ifdef NO_KRB5 - return(0); -#else krb5_context ctx; krb5_ccache cache; krb5_error_code rc; @@ -535,7 +391,6 @@ Leash_krb5_kdestroy( return(rc); -#endif //!NO_KRB5 } krb5_error_code @@ -552,9 +407,7 @@ Leash_krb5_cc_default(krb5_context *ctx, krb5_ccache *cache) goto on_error; } } -#ifdef KRB5_TC_NOTICKET flags = KRB5_TC_NOTICKET; -#endif rc = pkrb5_cc_set_flags(*ctx, *cache, flags); if (rc) { if (rc == KRB5_FCC_NOFILE || rc == KRB5_CC_NOTFOUND) { @@ -577,10 +430,6 @@ on_error: /**************************************/ int Leash_krb5_initialize(krb5_context *ctx) { -#ifdef NO_KRB5 - return(0); -#else - LPCSTR functionName = NULL; krb5_error_code rc; @@ -594,7 +443,6 @@ int Leash_krb5_initialize(krb5_context *ctx) } } return 0; -#endif //!NO_KRB5 } @@ -606,9 +454,6 @@ Leash_krb5_error(krb5_error_code rc, LPCSTR FailedFunctionName, int FreeContextFlag, krb5_context * ctx, krb5_ccache * cache) { -#ifdef NO_KRB5 - return 0; -#else #ifdef USE_MESSAGE_BOX char message[256]; const char *errText; @@ -639,17 +484,12 @@ Leash_krb5_error(krb5_error_code rc, LPCSTR FailedFunctionName, } return rc; - -#endif //!NO_KRB5 } BOOL Leash_ms2mit(BOOL save_creds) { -#ifdef NO_KRB5 - return(FALSE); -#else /* NO_KRB5 */ krb5_context kcontext = 0; krb5_error_code code; krb5_ccache ccache=0; @@ -709,11 +549,9 @@ Leash_ms2mit(BOOL save_creds) if (kcontext) pkrb5_free_context(kcontext); return(rc); -#endif /* NO_KRB5 */ } -#ifndef NO_KRB5 /* User Query data structures and functions */ struct textField { @@ -1063,4 +901,3 @@ leash_krb5_prompter( krb5_context context, } return errcode; } -#endif /* NO_KRB5 */ diff --git a/src/windows/leashdll/leash-int.h b/src/windows/leashdll/leash-int.h index b5c0b2738b..a11c3fc5a2 100644 --- a/src/windows/leashdll/leash-int.h +++ b/src/windows/leashdll/leash-int.h @@ -27,16 +27,10 @@ Unregister_MITPasswordEditControl( extern char KRB_HelpFile[_MAX_PATH]; // Function Prototypes. -int lsh_com_err_proc (LPSTR whoami, long code, LPSTR fmt, va_list args); int DoNiftyErrorReport(long errnum, LPSTR what); LONG Leash_timesync(int); BOOL Leash_ms2mit(BOOL); -#ifndef NO_AFS -int not_an_API_LeashAFSGetToken(TICKETINFO * ticketinfo, TicketList** ticketList, char * kprinc); -long FAR not_an_API_LeashFreeTicketList(TicketList** ticketList) ; -#endif - // Crap... #include @@ -90,66 +84,9 @@ Leash_krb5_kinit( DWORD publicIP ); -long -Leash_convert524( - krb5_context ctx - ); - -int -Leash_afs_unlog( - void - ); - -int -Leash_afs_klog( - char *, - char *, - char *, - int - ); - int LeashKRB5_renew(void); -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 @@ -158,14 +95,12 @@ config_boolean_to_int( BOOL GetSecurityLogonSessionData(PSECURITY_LOGON_SESSION_DATA * ppSessionData); BOOL IsKerberosLogon(VOID); -#ifndef NO_KRB5 int Leash_krb5_error(krb5_error_code rc, LPCSTR FailedFunctionName, int FreeContextFlag, krb5_context *ctx, krb5_ccache *cache); int Leash_krb5_initialize(krb5_context *); krb5_error_code Leash_krb5_cc_default(krb5_context *ctx, krb5_ccache *cache); -#endif /* NO_KRB5 */ LPSTR err_describe(LPSTR buf, long code); @@ -304,22 +239,14 @@ cc_free_NC_info, ); #define CCAPI_DLL "krbcc32.dll" -/* The following definitions are summarized from KRB4, KRB5, Leash32, and +/* The following definitions are summarized from KRB5, Leash32, and * Leashw32 modules. They are current as of KfW 2.6.2. There is no * guarrantee that changes to other modules will be updated in this list. */ /* Must match the values used in Leash32.exe */ #define LEASH_SETTINGS_REGISTRY_KEY_NAME "Software\\MIT\\Leash32\\Settings" -#define LEASH_SETTINGS_REGISTRY_VALUE_AFS_STATUS "AfsStatus" -#define LEASH_SETTINGS_REGISTRY_VALUE_DEBUG_WINDOW "DebugWindow" -#define LEASH_SETTINGS_REGISTRY_VALUE_LARGE_ICONS "LargeIcons" -#define LEASH_SETTINGS_REGISTRY_VALUE_DESTROY_TKTS "DestroyTickets" -#define LEASH_SETTINGS_REGISTRY_VALUE_LOW_TKT_ALARM "LowTicketAlarm" -#define LEASH_SETTINGS_REGISTRY_VALUE_AUTO_RENEW_TKTS "AutoRenewTickets" #define LEASH_SETTINGS_REGISTRY_VALUE_UPPERCASEREALM "UpperCaseRealm" -#define LEASH_SETTINGS_REGISTRY_VALUE_TIMEHOST "TIMEHOST" -#define LEASH_SETTINGS_REGISTRY_VALUE_CREATE_MISSING_CFG "CreateMissingConfig" #define LEASH_SETTINGS_REGISTRY_VALUE_MSLSA_IMPORT "MsLsaImport" /* These values are defined and used within Leashw32.dll */ @@ -331,22 +258,13 @@ cc_free_NC_info, #define LEASH_REGISTRY_VALUE_NOADDRESSES "noaddresses" #define LEASH_REGISTRY_VALUE_PROXIABLE "proxiable" #define LEASH_REGISTRY_VALUE_PUBLICIP "publicip" -#define LEASH_REGISTRY_VALUE_USEKRB4 "usekrb4" #define LEASH_REGISTRY_VALUE_KINIT_OPT "hide_kinit_options" #define LEASH_REGISTRY_VALUE_LIFE_MIN "life_min" #define LEASH_REGISTRY_VALUE_LIFE_MAX "life_max" #define LEASH_REGISTRY_VALUE_RENEW_MIN "renew_min" #define LEASH_REGISTRY_VALUE_RENEW_MAX "renew_max" -#define LEASH_REGISTRY_VALUE_LOCK_LOCATION "lock_file_locations" #define LEASH_REGISTRY_VALUE_PRESERVE_KINIT "preserve_kinit_options" -/* must match values used within krbv4w32.dll */ -#define KRB4_REGISTRY_KEY_NAME "Software\\MIT\\Kerberos4" -#define KRB4_REGISTRY_VALUE_CONFIGFILE "config" -#define KRB4_REGISTRY_VALUE_KRB_CONF "krb.conf" -#define KRB4_REGISTRY_VALUE_KRB_REALMS "krb.realms" -#define KRB4_REGISTRY_VALUE_TICKETFILE "ticketfile" - /* must match values used within krb5_32.dll */ #define KRB5_REGISTRY_KEY_NAME "Software\\MIT\\Kerberos5" #define KRB5_REGISTRY_VALUE_CCNAME "ccname" diff --git a/src/windows/leashdll/leashdll.c b/src/windows/leashdll/leashdll.c index b6d6318772..b1813a0cbb 100644 --- a/src/windows/leashdll/leashdll.c +++ b/src/windows/leashdll/leashdll.c @@ -5,9 +5,6 @@ HINSTANCE hLeashInst; -#ifndef NO_KRB4 -HINSTANCE hKrb4 = 0; -#endif HINSTANCE hKrb5 = 0; HINSTANCE hKrb524 = 0; HINSTANCE hSecur32 = 0; @@ -18,8 +15,6 @@ HINSTANCE hPsapi = 0; HINSTANCE hToolHelp32 = 0; HINSTANCE hCcapi = 0; -DWORD AfsAvailable = 0; - // krb5 functions DECL_FUNC_PTR(krb5_change_password); DECL_FUNC_PTR(krb5_get_init_creds_opt_alloc); @@ -332,23 +327,9 @@ DllMain( Register_MITPasswordEditControl(hLeashInst); -#ifndef NO_AFS - { - DWORD AfsStatus = 0; - GetAfsStatus(&AfsStatus); - - AfsAvailable = afscompat_init(); - - if ( AfsStatus && !AfsAvailable ) - SetAfsStatus(0); - } -#endif return TRUE; } case DLL_PROCESS_DETACH: -#ifndef NO_AFS - afscompat_close(); -#endif if (hKrb5) FreeLibrary(hKrb5); if (hCcapi) diff --git a/src/windows/leashdll/leashdll.h b/src/windows/leashdll/leashdll.h index b990224da1..c95afe7b80 100644 --- a/src/windows/leashdll/leashdll.h +++ b/src/windows/leashdll/leashdll.h @@ -5,42 +5,6 @@ #ifdef __cplusplus extern "C" { #endif -#ifndef NO_KRB4 -/* - * 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 -extern void Leash_initialize_krb_error_func(err_func func,struct et_list **); -#undef init_krb_err_func -#define init_krb_err_func(erf) Leash_initialize_krb_error_func(erf,&_et_list) - -#include - -extern void Leash_initialize_kadm_error_table(struct et_list **); -#undef init_kadm_err_tbl -#define init_kadm_err_tbl() Leash_initialize_kadm_error_table(&_et_list) -#define kadm_err_base ERROR_TABLE_BASE_kadm -#endif - -#define krb_err_func Leash_krb_err_func - -#include -int lsh_com_err_proc (LPSTR whoami, long code, - LPSTR fmt, va_list args); -void FAR Leash_load_com_err_callback(FARPROC,FARPROC,FARPROC); - - -#ifndef KRBERR -#define KRBERR(code) (code + krb_err_base) -#endif - /* Internal Stuff */ @@ -63,17 +27,12 @@ void FAR Leash_load_com_err_callback(FARPROC,FARPROC,FARPROC); #include -#ifndef NO_KRB4 -extern HINSTANCE hKrb4; -#endif extern HINSTANCE hKrb5; extern HINSTANCE hProfile; #define TIMEHOST "TIMEHOST" #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 @@ -95,19 +54,10 @@ extern HINSTANCE hProfile; #include #include #include -#ifndef NO_KRB4 -#include -#include -#endif #include #include -#ifndef NO_AFS -////Can't find it! -////#include "afscompat.h" -#endif - // service definitions typedef SC_HANDLE (WINAPI *FP_OpenSCManagerA)(char *, char *, DWORD); typedef SC_HANDLE (WINAPI *FP_OpenServiceA)(SC_HANDLE, char *, DWORD); @@ -116,40 +66,6 @@ typedef BOOL (WINAPI *FP_CloseServiceHandle)(SC_HANDLE); ////////////////////////////////////////////////////////////////////////////// -#ifndef NO_KRB4 -// 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); -#endif - // krb5 functions extern DECL_FUNC_PTR(krb5_change_password); extern DECL_FUNC_PTR(krb5_get_init_creds_opt_alloc); @@ -230,12 +146,6 @@ extern DECL_FUNC_PTR(krb5_cc_support_switch); extern DECL_FUNC_PTR(krb5_cc_switch); extern DECL_FUNC_PTR(krb5int_cc_user_set_default_name); -#ifndef NO_KRB4 -// Krb524 functions -extern DECL_FUNC_PTR(krb524_init_ets); -extern DECL_FUNC_PTR(krb524_convert_creds_kdc); -#endif - // ComErr functions extern DECL_FUNC_PTR(com_err); extern DECL_FUNC_PTR(error_message); diff --git a/src/windows/leashdll/leashids.h b/src/windows/leashdll/leashids.h index 94e05b6b60..ae62383015 100644 --- a/src/windows/leashdll/leashids.h +++ b/src/windows/leashdll/leashids.h @@ -72,7 +72,6 @@ #define LSH_DEFAULT_TICKET_NOADDRESS 1974 #define LSH_DEFAULT_TICKET_PROXIABLE 1975 #define LSH_DEFAULT_TICKET_PUBLICIP 1976 -#define LSH_DEFAULT_TICKET_USEKRB4 1977 #define LSH_DEFAULT_DIALOG_KINIT_OPT 1978 #define LSH_DEFAULT_DIALOG_LIFE_MIN 1979 #define LSH_DEFAULT_DIALOG_LIFE_MAX 1980 diff --git a/src/windows/leashdll/leashw32.def b/src/windows/leashdll/leashw32.def index a45392475b..378090bad8 100644 --- a/src/windows/leashdll/leashw32.def +++ b/src/windows/leashdll/leashw32.def @@ -6,26 +6,6 @@ HEAPSIZE 8092 STACKSIZE 36864 EXPORTS -; DllMain @1 - ; Leash_kinit_dlg @3 - ; Leash_changepwd_dlg @4 - ; Leash_kinit @48 - ; Leash_kdestroy @49 - ; Leash_klist @50 - ; Leash_checkpwd @51 - ; Leash_changepwd @52 - ; Leash_get_lsh_errno @61 - ; initialize_lsh_error_table @80 - ; lsh_com_err_proc @81 - ; Leash_initialize_krb_error_func @82 - ; Leash_initialize_kadm_error_table @83 - ; Leash_krb_err_func @84 - ; Leash_load_com_err_callback @85 - ; Leash_set_help_file @86 - ; Leash_get_help_file @87 - ; Leash_timesync @88 -; Leash_WhichOS @89 - Leash_kinit_dlg Leash_kinit_dlg_ex Leash_changepwd_dlg @@ -38,11 +18,8 @@ EXPORTS Leash_changepwd Leash_get_lsh_errno initialize_lsh_error_table - lsh_com_err_proc Leash_initialize_krb_error_func Leash_initialize_kadm_error_table - Leash_krb_err_func - Leash_load_com_err_callback Leash_set_help_file Leash_get_help_file Leash_timesync @@ -67,9 +44,6 @@ EXPORTS Leash_get_default_publicip Leash_set_default_publicip Leash_reset_default_publicip - Leash_get_default_use_krb4 - Leash_set_default_use_krb4 - Leash_reset_default_use_krb4 Leash_get_default_life_min Leash_set_default_life_min Leash_reset_default_life_min @@ -82,9 +56,6 @@ EXPORTS Leash_get_default_renew_max Leash_set_default_renew_max Leash_reset_default_renew_max - Leash_get_lock_file_locations - Leash_set_lock_file_locations - Leash_reset_lock_file_locations Leash_get_default_uppercaserealm Leash_set_default_uppercaserealm Leash_reset_default_uppercaserealm @@ -100,8 +71,4 @@ EXPORTS Leash_reset_defaults ; XXX - These have to go... - not_an_API_LeashAFSGetToken - not_an_API_LeashFreeTicketList - not_an_API_LeashKRB4GetTickets - not_an_API_LeashGetTimeServerName not_an_API_Leash_AcquireInitialTicketsIfNeeded diff --git a/src/windows/leashdll/lsh_pwd.c b/src/windows/leashdll/lsh_pwd.c index ac85625a0b..45840c19d0 100644 --- a/src/windows/leashdll/lsh_pwd.c +++ b/src/windows/leashdll/lsh_pwd.c @@ -23,19 +23,17 @@ /* Standard Include files */ #include +#include #include #include /* Private Inlclude files */ #include "leashdll.h" -#include #include #include "leash-int.h" #include "leashids.h" #include -#ifndef NO_KRB5 #include -#endif /* NO_KRB5 */ #include extern void * Leash_pec_create(HWND hEditCtl); @@ -47,7 +45,6 @@ extern void Leash_pec_clear_history(void *pec); static long lsh_errno; static char *err_context; /* error context */ extern HINSTANCE hLeashInst; -extern HINSTANCE hKrb4; extern HINSTANCE hKrb5; @@ -985,88 +982,6 @@ GetProfileFile( return FALSE; } -BOOL -GetKrb4ConFile( - LPSTR confname, - UINT szConfname - ) -{ - if (hKrb5 - ) - { // hold krb.con where krb5.ini is located - CHAR krbConFile[MAX_PATH]=""; - LPSTR pFind; - - //strcpy(krbConFile, CLeashApp::m_krbv5_profile->first_file->filename); - if (GetProfileFile(krbConFile, sizeof(krbConFile))) - { - GetWindowsDirectory(krbConFile,sizeof(krbConFile)); - krbConFile[MAX_PATH-1] = '\0'; - strncat(krbConFile, "\\",sizeof(krbConFile)-strlen(krbConFile)); - krbConFile[MAX_PATH-1] = '\0'; - strncat(krbConFile, KRB5_FILE,sizeof(krbConFile)-strlen(krbConFile)); - krbConFile[MAX_PATH-1] = '\0'; - } - - pFind = strrchr(krbConFile, '\\'); - if (pFind) - { - *pFind = 0; - strncat(krbConFile, "\\",sizeof(krbConFile)-strlen(krbConFile)); - krbConFile[MAX_PATH-1] = '\0'; - strncat(krbConFile, KRB_FILE,sizeof(krbConFile)-strlen(krbConFile)); - krbConFile[MAX_PATH-1] = '\0'; - } - else - krbConFile[0] = 0; - - strncpy(confname, krbConFile, szConfname); - confname[szConfname-1] = '\0'; - } - return FALSE; -} - -BOOL -GetKrb4RealmFile( - LPSTR confname, - UINT szConfname - ) -{ - if (hKrb5 - ) - { // hold krb.con where krb5.ini is located - CHAR krbRealmConFile[MAX_PATH]; - LPSTR pFind; - - //strcpy(krbRealmConFile, CLeashApp::m_krbv5_profile->first_file->filename); - if (GetProfileFile(krbRealmConFile, sizeof(krbRealmConFile))) - { - GetWindowsDirectory(krbRealmConFile,sizeof(krbRealmConFile)); - krbRealmConFile[MAX_PATH-1] = '\0'; - strncat(krbRealmConFile, "\\",sizeof(krbRealmConFile)-strlen(krbRealmConFile)); - krbRealmConFile[MAX_PATH-1] = '\0'; - strncat(krbRealmConFile, KRB5_FILE,sizeof(krbRealmConFile)-strlen(krbRealmConFile)); - krbRealmConFile[MAX_PATH-1] = '\0'; - } - - pFind = strrchr(krbRealmConFile, '\\'); - if (pFind) - { - *pFind = 0; - strncat(krbRealmConFile, "\\", sizeof(krbRealmConFile)-strlen(krbRealmConFile)); - krbRealmConFile[MAX_PATH-1] = '\0'; - strncat(krbRealmConFile, KRBREALM_FILE, sizeof(krbRealmConFile)-strlen(krbRealmConFile)); - krbRealmConFile[MAX_PATH-1] = '\0'; - } - else - krbRealmConFile[0] = 0; - - strncpy(confname, krbRealmConFile, szConfname); - confname[szConfname-1] = '\0'; - } - return FALSE; -} - int readstring(FILE * file, char * buf, int len) { diff --git a/src/windows/leashdll/lsh_pwd.rc b/src/windows/leashdll/lsh_pwd.rc index 98b4d5c647..d08378d063 100644 --- a/src/windows/leashdll/lsh_pwd.rc +++ b/src/windows/leashdll/lsh_pwd.rc @@ -217,7 +217,6 @@ BEGIN LSH_DEFAULT_TICKET_NOADDRESS "1" LSH_DEFAULT_TICKET_PROXIABLE "0" LSH_DEFAULT_TICKET_PUBLICIP "0" - LSH_DEFAULT_TICKET_USEKRB4 "0" LSH_DEFAULT_DIALOG_KINIT_OPT "1" LSH_DEFAULT_DIALOG_LIFE_MIN "30" LSH_DEFAULT_DIALOG_LIFE_MAX "1440" diff --git a/src/windows/leashdll/lshcallb.c b/src/windows/leashdll/lshcallb.c deleted file mode 100644 index 0344b796f3..0000000000 --- a/src/windows/leashdll/lshcallb.c +++ /dev/null @@ -1,14 +0,0 @@ -#include - -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) -{ - (FARPROC)Lcom_err=ce; - (FARPROC)Lerror_message=em; - (FARPROC)Lerror_table_name=etn; -} diff --git a/src/windows/leashdll/lshfunc.c b/src/windows/leashdll/lshfunc.c index 8dafb7bede..be2779063c 100644 --- a/src/windows/leashdll/lshfunc.c +++ b/src/windows/leashdll/lshfunc.c @@ -3,14 +3,6 @@ #include #include #include "leashdll.h" -#ifndef NO_KRB4 -#include -#include -#else -/* General definitions */ -#define KSUCCESS 0 -#define KFAILURE 255 -#endif #include #include @@ -71,8 +63,6 @@ leash_error_message( int size = sizeof(message) - 1; /* -1 to leave room for NULL terminator */ int n; - // XXX: ignore AFS for now. - if (!rc5 && !rcL) return 0; @@ -583,23 +573,6 @@ Leash_int_kinit_ex( addressless, publicip ); -#ifndef NO_AFS - if ( !rc5 ) { - char c; - char *r; - char *t; - for ( r=realm, t=temp; c=*r; r++,t++ ) - *t = isupper(c) ? tolower(c) : c; - *t = '\0'; - - rcA = Leash_afs_klog("afs", temp, "", lifetime); - rcB = Leash_afs_klog("afs", "", "", lifetime); - if (!(rcA && rcB)) - rcA = 0; - else if (!rcA) - rcA = rcB; - } -#endif /* NO_AFS */ custom_msg = (rc5 == KRB5KRB_AP_ERR_BAD_INTEGRITY) ? "Password incorrect" : NULL; return leash_error_message("Ticket initialization failed.", rcL, rc5, rcA, custom_msg, @@ -612,15 +585,6 @@ Leash_renew(void) if ( hKrb5 && !LeashKRB5_renew() ) { int lifetime; lifetime = Leash_get_default_lifetime() / 5; -#ifndef NO_AFS - { - TicketList * list = NULL, * token; - not_an_API_LeashAFSGetToken(NULL,&list,NULL); - for ( token = list ; token ; token = token->next ) - Leash_afs_klog("afs", token->realm, "", lifetime); - not_an_API_LeashFreeTicketList(&list); - } -#endif /* NO_AFS */ return 1; } return 0; @@ -789,57 +753,6 @@ Leash_import(void) if ( Leash_ms2mit(1) ) { int lifetime; lifetime = Leash_get_default_lifetime() / 5; -#ifndef NO_AFS - { - char c; - char *r; - char *t; - char cell[256]; - char realm[256]; - int i = 0; - int rcA = 0; - int rcB = 0; - - krb5_context ctx = 0; - krb5_error_code code = 0; - krb5_ccache cc = 0; - krb5_principal me = 0; - - if ( !pkrb5_init_context ) - goto cleanup; - - code = pkrb5_init_context(&ctx); - if (code) goto cleanup; - - code = pkrb5_cc_default(ctx, &cc); - if (code) goto cleanup; - - if (code = pkrb5_cc_get_principal(ctx, cc, &me)) - goto cleanup; - - for ( r=realm, t=cell, i=0; ilength; r++,t++,i++ ) { - c = krb5_princ_realm(ctx, me)->data[i]; - *r = c; - *t = isupper(c) ? tolower(c) : c; - } - *r = *t = '\0'; - - rcA = Leash_afs_klog("afs", cell, "", lifetime); - rcB = Leash_afs_klog("afs", "", "", lifetime); - if (!(rcA && rcB)) - rcA = 0; - else if (!rcA) - rcA = rcB; - - cleanup: - if (me) - pkrb5_free_principal(ctx, me); - if (cc) - pkrb5_cc_close(ctx, cc); - if (ctx) - pkrb5_free_context(ctx); - } -#endif /* NO_AFS */ return 1; } return 0; @@ -848,45 +761,14 @@ Leash_import(void) long Leash_kdestroy(void) { - Leash_afs_unlog(); Leash_krb5_kdestroy(); return 0; } -long FAR -not_an_API_LeashFreeTicketList(TicketList** ticketList) -{ - TicketList* tempList = *ticketList, *killList; - - //if (tempList == NULL) - //return -1; - - while (tempList) - { - killList = tempList; - - tempList = (TicketList*)tempList->next; - free(killList->service); - if (killList->encTypes) - free(killList->encTypes); - free(killList); - } - - *ticketList = NULL; - return 0; -} - -long -not_an_API_LeashKRB4GetTickets(TICKETINFO FAR* ticketinfo, - TicketList** ticketList) -{ - return(KFAILURE); -} - long FAR Leash_klist(HWND hlist, TICKETINFO FAR *ticketinfo) { - return(KFAILURE); + return(255); } @@ -1018,7 +900,7 @@ config_boolean_to_int(const char *s) * - string resource in the leash DLL */ -BOOL +static BOOL get_DWORD_from_registry( HKEY hBaseKey, char * key, @@ -1041,33 +923,6 @@ get_DWORD_from_registry( return rc?FALSE:TRUE; } -BOOL -get_STRING_from_registry( - HKEY hBaseKey, - char * key, - char * value, - char * outbuf, - DWORD outlen - ) -{ - HKEY hKey; - DWORD dwCount; - LONG rc; - - if (!outbuf || outlen == 0) - return FALSE; - - rc = RegOpenKeyEx(hBaseKey, key, 0, KEY_QUERY_VALUE, &hKey); - if (rc) - return FALSE; - - dwCount = outlen; - rc = RegQueryValueEx(hKey, value, 0, 0, (LPBYTE) outbuf, &dwCount); - RegCloseKey(hKey); - - return rc?FALSE:TRUE; -} - static BOOL get_default_lifetime_from_registry( @@ -1888,63 +1743,6 @@ Leash_get_default_publicip( return 0; } -static -BOOL -get_default_use_krb4_from_registry( - HKEY hBaseKey, - DWORD * result - ) -{ - return get_DWORD_from_registry(hBaseKey, - LEASH_REGISTRY_KEY_NAME, - LEASH_REGISTRY_VALUE_USEKRB4, - result); -} - -DWORD -Leash_reset_default_use_krb4( - ) -{ - HKEY hKey; - LONG rc; - - rc = RegOpenKeyEx(HKEY_CURRENT_USER, LEASH_REGISTRY_KEY_NAME, 0, KEY_WRITE, &hKey); - if (rc) - return rc; - - rc = RegDeleteValue(hKey, LEASH_REGISTRY_VALUE_USEKRB4); - RegCloseKey(hKey); - - return rc; -} - -DWORD -Leash_set_default_use_krb4( - DWORD minutes - ) -{ - HKEY hKey; - LONG rc; - - rc = RegCreateKeyEx(HKEY_CURRENT_USER, LEASH_REGISTRY_KEY_NAME, 0, - 0, 0, KEY_WRITE, 0, &hKey, 0); - if (rc) - return rc; - - rc = RegSetValueEx(hKey, LEASH_REGISTRY_VALUE_USEKRB4, 0, REG_DWORD, - (LPBYTE) &minutes, sizeof(DWORD)); - RegCloseKey(hKey); - - return rc; -} - -DWORD -Leash_get_default_use_krb4( - ) -{ - return 0; /* don't use krb4 */ -} - static BOOL get_hide_kinit_options_from_registry( @@ -2011,12 +1809,12 @@ Leash_get_hide_kinit_options( hmLeash = GetModuleHandle(LEASH_DLL); if (hmLeash) { - char use_krb4[80]; + char hide_kinit_options[80]; if (LoadString(hmLeash, LSH_DEFAULT_DIALOG_KINIT_OPT, - use_krb4, sizeof(use_krb4))) + hide_kinit_options, sizeof(hide_kinit_options))) { - use_krb4[sizeof(use_krb4) - 1] = 0; - return atoi(use_krb4); + hide_kinit_options[sizeof(hide_kinit_options) - 1] = 0; + return atoi(hide_kinit_options); } } return 0; /* hide unless otherwise indicated */ @@ -2090,12 +1888,12 @@ Leash_get_default_life_min( hmLeash = GetModuleHandle(LEASH_DLL); if (hmLeash) { - char use_krb4[80]; + char life_min[80]; if (LoadString(hmLeash, LSH_DEFAULT_DIALOG_LIFE_MIN, - use_krb4, sizeof(use_krb4))) + life_min, sizeof(life_min))) { - use_krb4[sizeof(use_krb4) - 1] = 0; - return atoi(use_krb4); + life_min[sizeof(life_min) - 1] = 0; + return atoi(life_min); } } return 5; /* 5 minutes */ @@ -2167,12 +1965,12 @@ Leash_get_default_life_max( hmLeash = GetModuleHandle(LEASH_DLL); if (hmLeash) { - char use_krb4[80]; + char life_max[80]; if (LoadString(hmLeash, LSH_DEFAULT_DIALOG_LIFE_MAX, - use_krb4, sizeof(use_krb4))) + life_max, sizeof(life_max))) { - use_krb4[sizeof(use_krb4) - 1] = 0; - return atoi(use_krb4); + life_max[sizeof(life_max) - 1] = 0; + return atoi(life_max); } } return 1440; @@ -2244,12 +2042,12 @@ Leash_get_default_renew_min( hmLeash = GetModuleHandle(LEASH_DLL); if (hmLeash) { - char use_krb4[80]; + char renew_min[80]; if (LoadString(hmLeash, LSH_DEFAULT_DIALOG_RENEW_MIN, - use_krb4, sizeof(use_krb4))) + renew_min, sizeof(renew_min))) { - use_krb4[sizeof(use_krb4) - 1] = 0; - return atoi(use_krb4); + renew_min[sizeof(renew_min) - 1] = 0; + return atoi(renew_min); } } return 600; /* 10 hours */ @@ -2321,94 +2119,17 @@ Leash_get_default_renew_max( hmLeash = GetModuleHandle(LEASH_DLL); if (hmLeash) { - char use_krb4[80]; + char renew_max[80]; if (LoadString(hmLeash, LSH_DEFAULT_DIALOG_RENEW_MAX, - use_krb4, sizeof(use_krb4))) + renew_max, sizeof(renew_max))) { - use_krb4[sizeof(use_krb4) - 1] = 0; - return atoi(use_krb4); + renew_max[sizeof(renew_max) - 1] = 0; + return atoi(renew_max); } } return 60 * 24 * 30; } -static -BOOL -get_lock_file_locations_from_registry( - HKEY hBaseKey, - DWORD * result - ) -{ - return get_DWORD_from_registry(hBaseKey, - LEASH_REGISTRY_KEY_NAME, - LEASH_REGISTRY_VALUE_LOCK_LOCATION, - result); -} - -DWORD -Leash_reset_lock_file_locations( - ) -{ - HKEY hKey; - LONG rc; - - rc = RegOpenKeyEx(HKEY_CURRENT_USER, LEASH_REGISTRY_KEY_NAME, 0, KEY_WRITE, &hKey); - if (rc) - return rc; - - rc = RegDeleteValue(hKey, LEASH_REGISTRY_VALUE_LOCK_LOCATION); - RegCloseKey(hKey); - - return rc; -} - -DWORD -Leash_set_lock_file_locations( - DWORD onoff - ) -{ - HKEY hKey; - LONG rc; - - rc = RegCreateKeyEx(HKEY_CURRENT_USER, LEASH_REGISTRY_KEY_NAME, 0, - 0, 0, KEY_WRITE, 0, &hKey, 0); - if (rc) - return rc; - - rc = RegSetValueEx(hKey, LEASH_REGISTRY_VALUE_LOCK_LOCATION, 0, REG_DWORD, - (LPBYTE) &onoff, sizeof(DWORD)); - RegCloseKey(hKey); - - return rc; -} - -DWORD -Leash_get_lock_file_locations( - ) -{ - HMODULE hmLeash; - DWORD result; - - if (get_lock_file_locations_from_registry(HKEY_CURRENT_USER, &result) || - get_lock_file_locations_from_registry(HKEY_LOCAL_MACHINE, &result)) - { - return result; - } - - hmLeash = GetModuleHandle(LEASH_DLL); - if (hmLeash) - { - char lock_file_locations[80]; - if (LoadString(hmLeash, LSH_DEFAULT_DIALOG_LOCK_LOCATION, - lock_file_locations, sizeof(lock_file_locations))) - { - lock_file_locations[sizeof(lock_file_locations) - 1] = 0; - return atoi(lock_file_locations); - } - } - return 0; -} - static BOOL get_default_uppercaserealm_from_registry( @@ -2651,7 +2372,6 @@ Leash_reset_defaults(void) Leash_reset_default_noaddresses(); Leash_reset_default_proxiable(); Leash_reset_default_publicip(); - Leash_reset_default_use_krb4(); Leash_reset_hide_kinit_options(); Leash_reset_default_life_min(); Leash_reset_default_life_max(); diff --git a/src/windows/leashdll/registry.c b/src/windows/leashdll/registry.c deleted file mode 100644 index 7113d056e0..0000000000 --- a/src/windows/leashdll/registry.c +++ /dev/null @@ -1,105 +0,0 @@ -#include -#include "leash-int.h" - -static -LONG -write_registry_setting_ex( - HKEY hRoot, - char* setting, - DWORD type, - void* buffer, - size_t size - ) -{ - HKEY hKey = 0; - LONG rc = 0; - - if (rc = RegCreateKeyEx(hRoot, LEASH_SETTINGS_REGISTRY_KEY_NAME, 0, 0, 0, - KEY_ALL_ACCESS, 0, &hKey, 0)) - goto cleanup; - - rc = RegSetValueEx(hKey, setting, 0, type, (LPBYTE)buffer, size); - cleanup: - if (hKey) - RegCloseKey(hKey); - return rc; -} - -LONG -write_registry_setting( - char* setting, - DWORD type, - void* buffer, - size_t size - ) -{ - return write_registry_setting_ex(HKEY_CURRENT_USER, - setting, - type, - buffer, - size); -} - -static -LONG -read_registry_setting_ex( - HKEY hRoot, - char* setting, - void* buffer, - size_t size - ) -{ - HKEY hKey = 0; - LONG rc = 0; - DWORD dwType; - DWORD dwCount; - - if (rc = RegOpenKeyEx(hRoot, - LEASH_SETTINGS_REGISTRY_KEY_NAME, - 0, KEY_QUERY_VALUE, &hKey)) - goto cleanup; - - memset(buffer, 0, size); - dwCount = size; - rc = RegQueryValueEx(hKey, setting, NULL, &dwType, (LPBYTE)buffer, - &dwCount); - cleanup: - if (hKey) - RegCloseKey(hKey); - return rc; -} - -LONG -read_registry_setting_user( - char* setting, - void* buffer, - size_t size - ) -{ - return read_registry_setting_ex(HKEY_CURRENT_USER, setting, buffer, size); -} - -static -LONG -read_registry_setting_machine( - char* setting, - void* buffer, - size_t size - ) -{ - return read_registry_setting_ex(HKEY_LOCAL_MACHINE, setting, buffer, size); -} - -LONG -read_registry_setting( - char* setting, - void* buffer, - size_t size - ) -{ - LONG rc; - rc = read_registry_setting_user(setting, buffer, size); - if (!rc) return rc; - rc = read_registry_setting_machine(setting, buffer, size); - return rc; -} diff --git a/src/windows/leashdll/timesync.c b/src/windows/leashdll/timesync.c index 32ab5e6282..0c9e30dcc9 100644 --- a/src/windows/leashdll/timesync.c +++ b/src/windows/leashdll/timesync.c @@ -8,10 +8,6 @@ #include #include -#ifndef NO_KRB4 -#include -#endif - #ifdef WSHELPER #include #else @@ -80,7 +76,7 @@ gettimeofday( LONG -not_an_API_LeashGetTimeServerName( +get_time_server_name( char *timeServerName, const char *valueName ) @@ -167,11 +163,7 @@ LONG Leash_timesync(int MessageP) WSADATA wsaData; char name[80]; - if ((pkrb5_init_context == NULL) -#ifndef NO_KRB4 - && (ptkt_string == NULL) -#endif - ) + if (pkrb5_init_context == NULL) return(0); wVersionRequested = 0x0101; @@ -192,7 +184,7 @@ LONG Leash_timesync(int MessageP) else Port = sp->s_port; - not_an_API_LeashGetTimeServerName(hostname, TIMEHOST); + get_time_server_name(hostname, TIMEHOST); rc = ProcessTimeSync(hostname, Port, tmpstr); diff --git a/src/windows/leashdll/winerr.c b/src/windows/leashdll/winerr.c index e624fc085f..a10d4854d9 100644 --- a/src/windows/leashdll/winerr.c +++ b/src/windows/leashdll/winerr.c @@ -11,7 +11,6 @@ */ #include -#include "conf.h" // Private Include files #include "leashdll.h" @@ -77,49 +76,3 @@ LPSTR err_describe(LPSTR buf, long code) return (LPSTR)buf; } - -int _export lsh_com_err_proc (LPSTR whoami, long code, - LPSTR fmt, va_list args) -{ -#ifdef USE_MESSAGE_BOX - int retval; - HWND hOldFocus; - char buf[1024], *cp; /* changed to 512 by jms 8/23/93 */ - 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'; - } - wvsprintf((LPSTR)cp, fmt, args); - } - hOldFocus = GetFocus(); - retval = MessageBox(/*GetRootParent(hOldFocus)*/NULL, buf, whoami, - mbformat | MB_ICONHAND | MB_TASKMODAL); - SetFocus(hOldFocus); - return retval; -#else - return IDOK; -#endif /* USE_MESSAGE_BOX */ -} diff --git a/src/windows/version.rc b/src/windows/version.rc index 7c936275ed..3899be44bd 100644 --- a/src/windows/version.rc +++ b/src/windows/version.rc @@ -155,39 +155,6 @@ #endif #endif /* WSHELPER_LIB */ -#ifdef KRB4_LIB -#define K5_DESCRIPTION "Kerberos v4 - " KRB5_PRODUCTNAME_STR "\0" -#define K5_INTERNAL_NAME "krb4\0" -#define K5_FILETYPE VFT_DLL -#if !defined(_WIN32) -#define K5_ORIGINAL_NAME "krb4_16.dll\0" -#else -#define K5_ORIGINAL_NAME "krb4_32.dll\0" -#endif -#endif /* KRB4 */ - -#ifdef SAPKRB_LIB -#define K5_DESCRIPTION "Kerberos v5 - " KRB5_PRODUCTNAME_STR " (for SAP)\0" -#define K5_INTERNAL_NAME "sapkrb5\0" -#define K5_FILETYPE VFT_DLL -#if !defined(_WIN32) -#define K5_ORIGINAL_NAME "sapkrb16.dll\0" -#else -#define K5_ORIGINAL_NAME "sapkrb32.dll\0" -#endif -#endif /* SAPKRB */ - -#ifdef SAPGSS_LIB -#define K5_DESCRIPTION "GSSAPI - GSS API implementation for Kerberos 5 mechanism(for SAP)\0" -#define K5_INTERNAL_NAME "sapgss\0" -#define K5_FILETYPE VFT_DLL -#if !defined(_WIN32) -#define K5_ORIGINAL_NAME "sapgss16.dll\0" -#else -#define K5_ORIGINAL_NAME "sapgss32.dll\0" -#endif -#endif /* SAPGSS */ - #ifdef KRB5_APP #define K5_DESCRIPTION "KRB5 Ticket Manager - " KRB5_PRODUCTNAME_STR "\0" #define K5_FILETYPE VFT_APP @@ -202,27 +169,6 @@ #define K5_ORIGINAL_NAME "gss.exe\0" #endif -#ifdef TELNET_APP -#define K5_DESCRIPTION "Telnet - Telnet Application for " KRB5_PRODUCTNAME_STR "\0" -#define K5_FILETYPE VFT_APP -#define K5_INTERNAL_NAME "TELNET\0" -#define K5_ORIGINAL_NAME "telnet.exe\0" -#endif - -#ifdef KRB524_LIB -#define K5_DESCRIPTION "Kerberos v5 to v4 - " KRB5_PRODUCTNAME_STR "\0" -#define K5_INTERNAL_NAME "krb524\0" -#define K5_FILETYPE VFT_DLL -#define K5_ORIGINAL_NAME "krb524.dll\0" -#endif /* KRB524_LIB */ - -#ifdef KRB524_INIT -#define K5_DESCRIPTION "Kerberos v5 to v4 Application - " KRB5_PRODUCTNAME_STR "\0" -#define K5_INTERNAL_NAME "krb524_init\0" -#define K5_FILETYPE VFT_DLL -#define K5_ORIGINAL_NAME "krb524_init.exe\0" -#endif /* KRB524_INIT */ - #ifdef MS2MIT_APP #define K5_DESCRIPTION "Microsoft LSA to MIT Credential Cache Application - " KRB5_PRODUCTNAME_STR "\0" #define K5_INTERNAL_NAME "ms2mit\0" -- 2.47.2