Squash commits for KfW updates
authorTom Yu <tlyu@mit.edu>
Wed, 14 Dec 2011 00:07:54 +0000 (00:07 +0000)
committerTom Yu <tlyu@mit.edu>
Wed, 14 Dec 2011 00:07:54 +0000 (00:07 +0000)
windows ccapiserver: replace Sleep with event wait

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
fix warning in test_cc_credentials_iterator_next.c

include test_ccapi_iterators.h for check_cc_credentials_iterator_next

Make ccapiserver exit if its receiveloop thread terminates for any reason.

This happens, for example, when the rpc endpoint is already registered
by another ccapiserver process.  There's no reason to leave a zombie
process running that can't receive messages.

windows ccapi: launch server without console by default.

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
windows ccapi: use a random challenge to authenticate ccapiserver.

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
LeashView.cpp: only specify TVIF_TEXT if there is actually text.

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw installer: add runtime.wxi WIXINCLUDES in Makefile to fix dependencies.

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
Windows leash64 fixes: use proper names for leash and krb5 dlls

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
Windows leash fixes: 'make install' installs leash exes.

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw installer: use MSVC 2010 merge modules

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw installer: install leash32.exe

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw: clean out unused #defines from Lglobals.h

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw: use correct message id to obtain tgt from leash

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw: update copyright notice in license.rtf

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw fixes: install xpprof32

TODO: xpprof64!

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw installer: purge support for old compilers

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw installer: don't build installer into installer

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw fixes: make leash ignore credentials that store config principals.

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw fix: make Leash_kdestroy() actually destroy k5 tickets

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw fix: Add custom "Password incorrect" message to Leash_int_kinit_ex()

Overrides obscure KRB5KRB_AP_ERR_BAD_INTEGRITY message.

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw fixes: define USE_MESSAGE_BOX in leashdll code for user feedback.

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw fixes: krb5_get_init_creds_opt_init->krb5_get_init_creds_opt_alloc

Should enable leash to generate config credentials (needs verification!)

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw fix: int -> size_t to fix warning in krb5routines.c

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw fix: restructure low ticket warning popup code to workaround mfc bug

mfc bug causes assertions when dialog is generated from
within PreTranslateMessages() (MSG input param points to a global
variable which is corrupted in the dialog message loop).  So we need
to instead PostMessage() to cause the popup later.
Also fixed logic to cause warning dialog to actually be modal as intended
when the leash window is not minimized.

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw fixes: fix _snprintf usage; use full error code in leash_error_message

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw fixes: ccapiserver only quits after all clients detach.

Not sure if this is really a good idea or not...

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw: generate manifests

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw installer: generate leash shortcuts (desktop and start menu)

...also install xpprof64

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw: fix 'K5_ORIGINAL_NAME' for 64 bit dlls.

...still need to actually to define _WIN64 for rc.exe though

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw installer: purge bufferoverflowu from custom.dll

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw: rename leash32/64.exe to simply leash.exe

Also install leash.exe in 64 bit installer.

Split cci_thread_init into per-process and per-thread portions

Call the per-thread code on thread attach and per-process once per
process.  Previously, while the function was named 'thread', it was
only actually called once per process.  Currently, the per-thread
code does nothing on non-windows platforms and is not even actually
invoked.

Fixes a windows bug when multiple non-main threads try to use ccapi
at the same time.

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw leash: add -console option to create console for debug output

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw: use _WIN64 names where appropriate

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw leash: bracket krb.con code with #ifndef NO_KRB4

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw installer: install krb5.ini to CommonAppDataFolder, not WindowsFolder

...but only if there isn't already a krb5.ini in the WindowsFolder.

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw: "make install" also installs pdbs

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw installer: leash32.pdb->leash.pdb

kfw installer: add site-local.wxi

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw: leash htmlhelp file source

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw: use html help in leash

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw: "make install" installs htmlhelp (leash.chm)

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw installer: install leash help file (leash.chm)

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw: remove line breaks from html to fix table of contents generation

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw leash help: fix/add aliases for command help

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
kfw leash: fix bad data in get tickets dialog when -autoinit specified

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
ticket: 7050
version_fixed: 1.10
status: resolved

git-svn-id: svn://anonsvn.mit.edu/krb5/branches/krb5-1-10@25585 dc483132-0cff-0310-8789-dd5450dbe970

160 files changed:
src/Makefile.in
src/ccapi/common/win/OldCC/autolock.hxx
src/ccapi/common/win/win-utils.h
src/ccapi/lib/ccapi_context.c
src/ccapi/lib/ccapi_ipc.c
src/ccapi/lib/ccapi_ipc.h
src/ccapi/lib/ccapi_os_ipc.h
src/ccapi/lib/win/OldCC/client.cxx
src/ccapi/lib/win/ccapi_os_ipc.cxx
src/ccapi/lib/win/debug.exports
src/ccapi/lib/win/dllmain.cxx
src/ccapi/server/ccs_server.c
src/ccapi/server/ccs_server.h
src/ccapi/server/win/WorkItem.cpp
src/ccapi/server/win/WorkQueue.cpp
src/ccapi/server/win/WorkQueue.h
src/ccapi/server/win/ccs_os_server.cpp
src/ccapi/server/win/workitem.h
src/ccapi/test/test_cc_credentials_iterator_next.c
src/config/win-pre.in
src/lib/krb5/os/init_os_ctx.c
src/util/wshelper/res_init.c
src/windows/include/loadfuncs-krb5.h
src/windows/installer/wix/Makefile
src/windows/installer/wix/config.wxi
src/windows/installer/wix/custom/custom.cpp
src/windows/installer/wix/features.wxi
src/windows/installer/wix/files.wxi
src/windows/installer/wix/lang/license.rtf
src/windows/installer/wix/platform.wxi
src/windows/installer/wix/runtime.wxi
src/windows/installer/wix/site-local.wxi [new file with mode: 0644]
src/windows/leash/KrbRealmHostMaintenance.cpp
src/windows/leash/Leash.cpp
src/windows/leash/Leash.h
src/windows/leash/LeashProperties.cpp
src/windows/leash/LeashView.cpp
src/windows/leash/LeashView.h
src/windows/leash/Lglobals.h
src/windows/leash/Makefile.in
src/windows/leash/htmlhelp/Images/Bullet.gif [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_10.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_11.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_12.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_13.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_5.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_6.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_7.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_8.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_9.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_about_leash.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_change_password.JPG [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_debug_window.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_display_window.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_init_ticket_advanced.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_init_ticket_basic.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_menu_action.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_menu_file.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_menu_help.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_menu_options.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_menu_view.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_properties_afs.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_properties_krb4.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_properties_krb5_1.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_properties_krb5_2.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_properties_krb_1.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_properties_krb_2.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_properties_krb_3.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_properties_krb_4.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_properties_leash.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_systray_icons.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_systray_menu.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Images/Leash_toolbar.jpg [new file with mode: 0644]
src/windows/leash/htmlhelp/Makefile.in [new file with mode: 0644]
src/windows/leash/htmlhelp/Table of Contents.hhc [new file with mode: 0644]
src/windows/leash/htmlhelp/html/afx_hidw_status_bar.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/afx_hidw_toolbar.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/hid_app_about.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/hid_app_exit.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/hid_context_help.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/hid_help_index.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/hid_help_using.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/hid_sc_close.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/hid_sc_maximize.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/hid_sc_minimize.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/hid_sc_move.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/hid_sc_restore.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/hid_sc_size.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/hid_view_status_bar.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/hid_view_toolbar.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_acknowledgements.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_bug_reports.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_command_change_password.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_command_destroy_tickets.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_command_get_tickets.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_command_import_tickets.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_command_renew_tickets.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_command_reset_window.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_command_sync_time.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_command_update_display.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_copyright.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_errors.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_export.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_external_aklog.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_external_kdestroy.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_external_kinit.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_external_klist.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_external_ms2mit.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_file_exit.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_help_about_leash32.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_kerberos_copyright.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_manpage_aklog.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_manpage_kdestroy.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_manpage_kinit.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_manpage_klist.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_manpage_ms2mit.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_manpages.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_menu_commands.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_menu_help_why_use.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_option_afs_properties.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_option_auto_renewal.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_option_destroy_tickets_on_exit.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_option_expiration_alarm.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_option_kerberos_properties.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_option_krb4_properties.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_option_krb5_properties.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_option_leash_properties.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_option_upper_case_realm.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_topic_about_kerberos.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_topic_error_57.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_topic_error_62.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_topic_error_8.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_topic_error_invalid_principal.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_topic_kerberos_auth_service.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_topic_kerberos_command_prompt.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_topic_kerberos_help_topics.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_topic_kerberos_names.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_topic_kerberos_principals.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_topic_kerberos_tickets.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_topic_leash_help_topics.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_topic_leash_systray.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_topic_leash_window.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_topic_online_help.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_topic_password_choice.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_topic_timing_issues.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_topic_why_use.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_view_debug_window.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_view_large_icons.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_view_status_bar.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/html/leash_view_toolbar.htm [new file with mode: 0644]
src/windows/leash/htmlhelp/leash32.hhk [new file with mode: 0644]
src/windows/leash/htmlhelp/leash32.hhp [new file with mode: 0644]
src/windows/leash/out2con.cpp [new file with mode: 0644]
src/windows/leash/out2con.h [new file with mode: 0644]
src/windows/leashdll/Makefile.in
src/windows/leashdll/krb5routines.c
src/windows/leashdll/leashdll.c
src/windows/leashdll/leashdll.h
src/windows/leashdll/lshfunc.c
src/windows/version.rc

index 7ac83206e5119bebe0cbd1ae6a7eaa8f192f2a89..d73e223fa0b9920238be26953d210be43429dc80 100644 (file)
@@ -196,7 +196,8 @@ WINMAKEFILES=Makefile \
        windows\cns\Makefile windows\gina\Makefile \
        windows\ms2mit\Makefile \
        windows\wintel\Makefile windows\kfwlogon\Makefile \
-       windows\leashdll\Makefile windows\leash\Makefile
+       windows\leashdll\Makefile windows\leash\Makefile \
+       windows\leash\htmlhelp\Makefile
 
 ##DOS##Makefile-windows:: $(MKFDEP) $(WINMAKEFILES)
 
@@ -326,6 +327,8 @@ WINMAKEFILES=Makefile \
 ##DOS##        $(WCONFIG) config < $@.in > $@
 ##DOS##windows\leash\Makefile: windows\leash\Makefile.in $(MKFDEP)
 ##DOS##        $(WCONFIG) config < $@.in > $@
+##DOS##windows\leash\htmlhelp\Makefile: windows\leash\htmlhelp\Makefile.in $(MKFDEP)
+##DOS##        $(WCONFIG) config < $@.in > $@
 
 clean-windows:: Makefile-windows
 
@@ -553,19 +556,30 @@ install-windows::
        copy include\gssapi\gssapi_ext.h "$(KRB_INSTALL_DIR)\include\gssapi\."
        copy lib\$(OUTPRE)*.lib "$(KRB_INSTALL_DIR)\lib\."
        copy lib\$(OUTPRE)*.dll "$(KRB_INSTALL_DIR)\bin\."
+       copy lib\$(OUTPRE)*.pdb "$(KRB_INSTALL_DIR)\bin\."
        copy windows\cns\$(OUTPRE)krb5.exe "$(KRB_INSTALL_DIR)\bin\."
+       copy windows\cns\$(OUTPRE)krb5.pdb "$(KRB_INSTALL_DIR)\bin\."
        copy appl\gss-sample\$(OUTPRE)gss-server.exe "$(KRB_INSTALL_DIR)\bin\."
+       copy appl\gss-sample\$(OUTPRE)gss-server.pdb "$(KRB_INSTALL_DIR)\bin\."
        copy appl\gss-sample\$(OUTPRE)gss-client.exe "$(KRB_INSTALL_DIR)\bin\."
+       copy appl\gss-sample\$(OUTPRE)gss-client.pdb "$(KRB_INSTALL_DIR)\bin\."
        copy windows\ms2mit\$(OUTPRE)*.exe "$(KRB_INSTALL_DIR)\bin\."
+       copy windows\ms2mit\$(OUTPRE)*.pdb "$(KRB_INSTALL_DIR)\bin\."
        copy windows\leashdll\$(OUTPRE)*.lib "$(KRB_INSTALL_DIR)\lib\."
        copy windows\leashdll\$(OUTPRE)*.dll "$(KRB_INSTALL_DIR)\bin\."
+       copy windows\leashdll\$(OUTPRE)*.pdb "$(KRB_INSTALL_DIR)\bin\."
+       copy windows\leash\$(OUTPRE)*.exe "$(KRB_INSTALL_DIR)\bin\."
+       copy windows\leash\$(OUTPRE)*.pdb "$(KRB_INSTALL_DIR)\bin\."
        copy windows\kfwlogon\$(OUTPRE)*.lib "$(KRB_INSTALL_DIR)\lib\."
        copy windows\kfwlogon\$(OUTPRE)*.exe "$(KRB_INSTALL_DIR)\bin\."
        copy windows\kfwlogon\$(OUTPRE)*.dll "$(KRB_INSTALL_DIR)\bin\."
+       copy windows\kfwlogon\$(OUTPRE)*.pdb "$(KRB_INSTALL_DIR)\bin\."
        copy util\windows\$(OUTPRE)*.lib $(KRB_INSTALL_DIR)\lib\."
        copy util\wshelper\$(OUTPRE)$(DLIB).lib "$(KRB_INSTALL_DIR)\lib\."
        copy util\wshelper\$(OUTPRE)$(DLIB).dll "$(KRB_INSTALL_DIR)\bin\."
+       copy util\wshelper\$(OUTPRE)$(DLIB).pdb "$(KRB_INSTALL_DIR)\bin\."
        copy ccapi\lib\win\srctmp\$(OUTPRE)$(CCLIB).dll "$(KRB_INSTALL_DIR)\bin\."
+       copy ccapi\lib\win\srctmp\$(OUTPRE)$(CCLIB).pdb "$(KRB_INSTALL_DIR)\bin\."
        copy ccapi\lib\win\srctmp\$(CCLIB).lib "$(KRB_INSTALL_DIR)\lib\."
        copy ccapi\server\win\srctmp\$(OUTPRE)ccapiserver.exe "$(KRB_INSTALL_DIR)\bin\."
        copy clients\kvno\$(OUTPRE)kvno.exe "$(KRB_INSTALL_DIR)\bin\."
@@ -576,6 +590,16 @@ install-windows::
        copy clients\kdeltkt\$(OUTPRE)kdeltkt.exe "$(KRB_INSTALL_DIR)\bin\."
        copy clients\kpasswd\$(OUTPRE)kpasswd.exe "$(KRB_INSTALL_DIR)\bin\."
        copy clients\kswitch\$(OUTPRE)kswitch.exe "$(KRB_INSTALL_DIR)\bin\."
+       copy ccapi\server\win\srctmp\$(OUTPRE)ccapiserver.pdb "$(KRB_INSTALL_DIR)\bin\."
+       copy clients\kvno\$(OUTPRE)kvno.pdb "$(KRB_INSTALL_DIR)\bin\."
+       copy clients\klist\$(OUTPRE)klist.pdb "$(KRB_INSTALL_DIR)\bin\."
+       copy clients\kinit\$(OUTPRE)kinit.pdb "$(KRB_INSTALL_DIR)\bin\."
+       copy clients\kdestroy\$(OUTPRE)kdestroy.pdb "$(KRB_INSTALL_DIR)\bin\."
+       copy clients\kcpytkt\$(OUTPRE)kcpytkt.pdb "$(KRB_INSTALL_DIR)\bin\."
+       copy clients\kdeltkt\$(OUTPRE)kdeltkt.pdb "$(KRB_INSTALL_DIR)\bin\."
+       copy clients\kpasswd\$(OUTPRE)kpasswd.pdb "$(KRB_INSTALL_DIR)\bin\."
+       copy clients\kswitch\$(OUTPRE)kswitch.pdb "$(KRB_INSTALL_DIR)\bin\."
+       copy windows\leash\htmlhelp\*.chm "$(KRB_INSTALL_DIR)\bin\."
 
 install-unix:: 
        $(INSTALL_SCRIPT) krb5-config \
index bbd773488c0271d9b354647a877e06b19620f64d..45b881e221aa6a3074a937b75c13d588a5c8e5aa 100644 (file)
@@ -35,10 +35,8 @@ public:
     ~CcOsLock()     {DeleteCriticalSection(&cs);       valid = false;}
     void lock()     {if (valid) EnterCriticalSection(&cs);}
     void unlock()   {if (valid) LeaveCriticalSection(&cs);}
-#if 0
     bool trylock()  {return valid ? (TryEnterCriticalSection(&cs) ? true : false)
                                   : false; }
-#endif
 };
 
 class CcAutoLock {
@@ -50,4 +48,13 @@ public:
     ~CcAutoLock() { m_lock.unlock(); }
 };
 
+class CcAutoTryLock {
+    CcOsLock& m_lock;
+    bool m_locked;
+public:
+    CcAutoTryLock(CcOsLock& lock):m_lock(lock) { m_locked = m_lock.trylock(); }
+    ~CcAutoTryLock() { if (m_locked) m_lock.unlock(); m_locked = false; }
+    bool IsLocked() const { return m_locked; }
+};
+
 #endif /* __AUTOLOCK_HXX */
index 6469a61e8b88ea5dc0cb17afd991275d62060a27..41cab24dcdffae9f0dd07181214de1ed0ba68881 100644 (file)
@@ -42,7 +42,8 @@ static enum ccapiMsgType {
     CCMSG_REQUEST_REPLY,
     CCMSG_DISCONNECT,
     CCMSG_LISTEN,
-    CCMSG_PING
+    CCMSG_PING,
+    CCMSG_QUIT
     };
 
 char*                   clientEndpoint(const char* UUID);
index a16ce0e580b91002ab7e2b278585bd1fc24b513c..cf677fc551426d4309e05db415a09a443eab63c7 100644 (file)
@@ -79,12 +79,12 @@ static cc_int32 cci_context_sync (cci_context_t in_context,
 #pragma mark -
 #endif
 
-MAKE_INIT_FUNCTION(cci_thread_init);
-MAKE_FINI_FUNCTION(cci_thread_fini);
+MAKE_INIT_FUNCTION(cci_process_init);
+MAKE_FINI_FUNCTION(cci_process_fini);
 
 /* ------------------------------------------------------------------------ */
 
-static int cci_thread_init (void)
+static int cci_process_init (void)
 {
     cc_int32 err = ccNoError;
 
@@ -93,7 +93,7 @@ static int cci_thread_init (void)
     }
 
     if (!err) {
-        err = cci_ipc_thread_init ();
+        err = cci_ipc_process_init ();
     }
 
     if (!err) {
@@ -105,9 +105,9 @@ static int cci_thread_init (void)
 
 /* ------------------------------------------------------------------------ */
 
-static void cci_thread_fini (void)
+static void cci_process_fini (void)
 {
-    if (!INITIALIZER_RAN (cci_thread_init) || PROGRAM_EXITING ()) {
+    if (!INITIALIZER_RAN (cci_process_init) || PROGRAM_EXITING ()) {
        return;
     }
 
@@ -134,7 +134,7 @@ cc_int32 cc_initialize (cc_context_t  *out_context,
     if (!out_context) { err = cci_check_error (ccErrBadParam); }
 
     if (!err) {
-        err = CALL_INIT_FUNCTION (cci_thread_init);
+        err = CALL_INIT_FUNCTION (cci_process_init);
     }
 
     if (!err) {
index 66830de8eb57937da112dfe670283e6347a786fe..2c1fcba6102944f68aacdd0ee419defc6ff38d8e 100644 (file)
 
 /* ------------------------------------------------------------------------ */
 
+cc_int32 cci_ipc_process_init (void)
+{
+    return cci_os_ipc_process_init ();
+}
+
+/* ------------------------------------------------------------------------ */
+
 cc_int32 cci_ipc_thread_init (void)
 {
     return cci_os_ipc_thread_init ();
index a23791cf46ef0be86be7337bf002bca8a6624c54..a23772b29f7ba516869327ab9cb578fc2be64843 100644 (file)
@@ -28,6 +28,8 @@
 
 #include "cci_common.h"
 
+cc_int32 cci_ipc_process_init (void);
+
 cc_int32 cci_ipc_thread_init (void);
 
 cc_int32 cci_ipc_send (enum cci_msg_id_t  in_request_name,
index e27ae63c24326fa808d9cb288f438c69a4b16fa8..fe7c87a08c9b58c6c685ef26cf938fc5592f6e9a 100644 (file)
@@ -28,6 +28,8 @@
 
 #include "cci_common.h"
 
+cc_int32 cci_os_ipc_process_init (void);
+
 cc_int32 cci_os_ipc_thread_init (void);
 
 cc_int32 cci_os_ipc (cc_int32      in_launch_server,
index ed8712339a5b5fdd9246b10ba3d848943861c4b2..4b2d718cc431db20f6dd022efeecd5d18c7d0974 100644 (file)
@@ -195,12 +195,13 @@ DWORD find_server(Init::InitInfo& info, LPSTR endpoint) {
                                        psa,         // SA
                                        FALSE, 
                                        CREATE_NEW_PROCESS_GROUP | 
-                                       CREATE_NEW_CONSOLE |
                                        NORMAL_PRIORITY_CLASS |
-                                       // CREATE_NO_WINDOW |
-                                       // DETACHED_PROCESS |    /* KPK TODO: was set - restore */
-                                       0
-                                       ,
+#ifdef CCAPI_LAUNCH_SERVER_WITH_CONSOLE
+                                       CREATE_NEW_CONSOLE |
+#else
+                                       DETACHED_PROCESS |
+#endif
+                                       0,
                                        NULL,        // environment
                                        szDir,       // current dir
                                        &si,
@@ -236,11 +237,41 @@ DWORD find_server(Init::InitInfo& info, LPSTR endpoint) {
 
 }
 
+static
+DWORD
+make_random_challenge(DWORD *challenge_out) {
+    HCRYPTPROV provider;
+    DWORD status = 0;
+    *challenge_out = 0;
+    if (!CryptAcquireContext(&provider, NULL, NULL, PROV_RSA_FULL,
+                             CRYPT_VERIFYCONTEXT)) {
+        status = GetLastError();
+        cci_check_error(status);
+        return status;
+        }
+    if (!CryptGenRandom(provider, sizeof(*challenge_out),
+                        (BYTE *)challenge_out)) {
+        status = GetLastError();
+        cci_check_error(status);
+        return status;
+        }
+    if (!CryptReleaseContext(provider, 0)) {
+        /*
+         * Note: even though CryptReleaseContext() failed, we don't really
+         * care since a) we've already successfully obtained our challenge
+         * anyway and b) at least one of the potential errors, "ERROR_BUSY"
+         * does not really seem to be an error at all.  So GetLastError() is
+         * logged for informational purposes only and should not be returned.
+         */
+        cci_check_error(GetLastError());
+        }
+    return status;
+}
+
 static
 DWORD
 authenticate_server(Init::InitInfo& info) {
-    DWORD               challenge       = 17; // XXX - maybe use random number
-    DWORD               desired_response= challenge + 1;
+    DWORD               challenge, desired_response;
     HANDLE              hMap            = 0;
     LPSTR               mem_name        = 0;
     PDWORD              pvalue          = 0;
@@ -253,6 +284,12 @@ authenticate_server(Init::InitInfo& info) {
     status = alloc_name(&mem_name, "auth", isNT());
     cci_check_error(status);
 
+    if (!status) {
+        status = make_random_challenge(&challenge);
+        desired_response = challenge + 1;
+        cci_check_error(status);
+        }
+
     if (!status) {
         if (isNT()) {
             sa.nLength = sizeof(sa);
@@ -358,10 +395,11 @@ Client::Connect(char* ep OPTIONAL) {
     }
 
 DWORD Client::Initialize(char* ep OPTIONAL) {
-    CcAutoLock AL(Client::sLock);
+    CcAutoTryLock AL(Client::sLock);
+    if (!AL.IsLocked() || s_init)
+        return 0;
     SecureClient s;
     ccs_request_IfHandle  = NULL;
-    if (s_init) return 0;
     DWORD status = Client::Connect(ep);
     if (!status) s_init = true;
     return status;
index 7359eb0bad2367c7152864498001c46cadc1ad9d..8cc9d03bd4f8385c19ad2ee878acb4786d1afec5 100644 (file)
@@ -64,7 +64,7 @@ SECURITY_ATTRIBUTES     sa                  = { 0 };
  */
 
 cc_int32        ccapi_connect(const struct tspdata* tsp);
-static DWORD    handle_exception(DWORD code);
+static DWORD    handle_exception(DWORD code, struct tspdata* ptspdata);
 
 extern "C" {
 cc_int32        cci_os_ipc_msg( cc_int32        in_launch_server,
@@ -75,12 +75,46 @@ cc_int32        cci_os_ipc_msg( cc_int32        in_launch_server,
 
 /* ------------------------------------------------------------------------ */
 
+extern "C" cc_int32 cci_os_ipc_process_init (void) {
+    RPC_STATUS status;
+
+    opts.cMinCalls  = 1;
+    opts.cMaxCalls  = 20;
+    if (!isNT()) {
+        status = RpcServerRegisterIf(ccs_reply_ServerIfHandle,  // interface
+                                     NULL,                      // MgrTypeUuid
+                                     NULL);                     // MgrEpv; null means use default
+        }
+    else {
+        status = RpcServerRegisterIfEx(ccs_reply_ServerIfHandle,  // interface
+                                       NULL,                      // MgrTypeUuid
+                                       NULL,                      // MgrEpv; 0 means default
+                                       RPC_IF_ALLOW_SECURE_ONLY,
+                                       opts.cMaxCalls,
+                                       NULL);                     // No security callback.
+        }
+    cci_check_error(status);
+
+    if (!status) {
+        status = RpcServerRegisterAuthInfo(0, // server principal
+                                           RPC_C_AUTHN_WINNT,
+                                           0,
+                                           0 );
+        cci_check_error(status);
+        }
+
+    return status; // ugh. needs translation
+}
+
+/* ------------------------------------------------------------------------ */
+
 extern "C" cc_int32 cci_os_ipc_thread_init (void) {
     cc_int32                    err         = ccNoError;
     struct tspdata*             ptspdata;
-    HANDLE                      replyEvent;
+    HANDLE                      replyEvent  = NULL;
     UUID __RPC_FAR              uuid;
-    unsigned char __RPC_FAR*    uuidString  = NULL;
+    RPC_CSTR __RPC_FAR          uuidString  = NULL;
+    char*                       endpoint    = NULL;
 
     if (!GetTspData(GetTlsIndex(), &ptspdata)) return ccErrNoMem;
 
@@ -91,10 +125,18 @@ extern "C" cc_int32 cci_os_ipc_thread_init (void) {
     err   = cci_check_error(UuidCreate(&uuid)); // Get a UUID
     if (err == RPC_S_OK) {                      // Convert to string
         err = UuidToString(&uuid, &uuidString);
+        cci_check_error(err);
         }
     if (!err) {                                 // Save in thread local storage
         tspdata_setUUID(ptspdata, uuidString);
+        endpoint = clientEndpoint((const char *)uuidString);
+        err = RpcServerUseProtseqEp((RPC_CSTR)"ncalrpc",
+                                    opts.cMaxCalls,
+                                    (RPC_CSTR)endpoint,
+                                    sa.lpSecurityDescriptor);  // SD
+        cci_check_error(err);
         }
+
 #if 0
     cci_debug_printf("%s UUID:<%s>", __FUNCTION__, tspdata_getUUID(ptspdata));
 #endif
@@ -109,6 +151,17 @@ extern "C" cc_int32 cci_os_ipc_thread_init (void) {
         replyEvent = createThreadEvent((char*)uuidString, REPLY_SUFFIX);
         }
 
+    if (!err) {
+        static bool bListening = false;
+        if (!bListening) {
+            err = RpcServerListen(opts.cMinCalls,
+                                  opts.cMaxCalls,
+                                  TRUE);
+            cci_check_error(err);
+            }
+            bListening = err == 0;
+        }
+
     if (replyEvent) tspdata_setReplyEvent(ptspdata, replyEvent);
     else            err = cci_check_error(GetLastError());
 
@@ -159,6 +212,10 @@ extern "C" cc_int32 cci_os_ipc_msg( cc_int32        in_launch_server,
     sst              = tspdata_getSST (ptspdata);
     uuid             = tspdata_getUUID(ptspdata);
 
+    // Initialize old CCAPI if necessary:
+    if (!err) if (!Init::  Initialized()) err = cci_check_error(Init::  Initialize( ));
+    if (!err) if (!Client::Initialized()) err = cci_check_error(Client::Initialize(0));
+
     // The lazy connection to the server has been put off as long as possible!
     // ccapi_connect starts listening for replies as an RPC server and then
     //   calls ccs_rpc_connect.
@@ -183,10 +240,6 @@ extern "C" cc_int32 cci_os_ipc_msg( cc_int32        in_launch_server,
     CcAutoLock*     a = 0;
     CcAutoLock::Start(a, Client::sLock);
 
-    // Initialize old CCAPI if necessary:
-    if (!err) if (!Init::  Initialized()) err = cci_check_error(Init::  Initialize( ));
-    if (!err) if (!Client::Initialized()) err = cci_check_error(Client::Initialize(0));
-
     // New code using new RPC procedures for sending the data and receiving a reply:
     if (!err) {
         RpcTryExcept {
@@ -209,7 +262,7 @@ extern "C" cc_int32 cci_os_ipc_msg( cc_int32        in_launch_server,
                 (long*)(&err) );                /* Return code */
             }
         RpcExcept(1) {
-            handle_exception(RpcExceptionCode());
+            err = handle_exception(RpcExceptionCode(), ptspdata);
             }
         RpcEndExcept;
         }
@@ -247,12 +300,13 @@ extern "C" cc_int32 cci_os_ipc_msg( cc_int32        in_launch_server,
 
 
 
-static DWORD handle_exception(DWORD code) {
+static DWORD handle_exception(DWORD code, struct tspdata* ptspdata) {
     cci_debug_printf("%s code %u; ccs_request_IfHandle:0x%X", __FUNCTION__, code, ccs_request_IfHandle);
     if ( (code == RPC_S_SERVER_UNAVAILABLE) || (code == RPC_S_INVALID_BINDING) ) {
-        Client::Reconnect(0);
+        Client::Cleanup();
+        tspdata_setConnected(ptspdata, FALSE);
         }
-    return 4;
+    return code;
     }
 
 
@@ -262,7 +316,6 @@ static DWORD handle_exception(DWORD code) {
  */
 cc_int32 ccapi_connect(const struct tspdata* tsp) {
     BOOL                    bListen     = TRUE;
-    char*                   endpoint    = NULL;
     HANDLE                  replyEvent  = 0;
     RPC_STATUS              status      = FALSE;
     char*                   uuid        = NULL;
@@ -275,56 +328,13 @@ cc_int32 ccapi_connect(const struct tspdata* tsp) {
     /* Build complete RPC uuid using previous CCAPI implementation: */
     replyEvent      = tspdata_getReplyEvent(tsp);
     uuid            = tspdata_getUUID(tsp);
-    endpoint        = clientEndpoint(uuid);
-    cci_debug_printf("%s Registering endpoint %s", __FUNCTION__, endpoint);
 
     opts.cMinCalls  = 1;
     opts.cMaxCalls  = 20;
     opts.fDontWait  = TRUE;
 
-    if (!status) {
-        status = RpcServerUseProtseqEp((RPC_CSTR)"ncalrpc",
-                                       opts.cMaxCalls,
-                                       (RPC_CSTR)endpoint,
-                                       sa.lpSecurityDescriptor);  // SD
-        cci_check_error(status);
-        }
-
-    if (!status) {
-        status = RpcServerRegisterAuthInfo(0, // server principal
-                                           RPC_C_AUTHN_WINNT,
-                                           0,
-                                           0 );
-        cci_check_error(status);
-        }
-
     cci_debug_printf("%s is listening ...", __FUNCTION__);
 
-    if (!status) {
-        if (!isNT()) {
-            status = RpcServerRegisterIf(ccs_reply_ServerIfHandle,  // interface 
-                                         NULL,                      // MgrTypeUuid
-                                         NULL);                     // MgrEpv; null means use default
-            } 
-        else {
-            status = RpcServerRegisterIfEx(ccs_reply_ServerIfHandle,// interface
-                                         NULL,                      // MgrTypeUuid
-                                         NULL,                      // MgrEpv; 0 means default
-                                         RPC_IF_ALLOW_SECURE_ONLY,
-                                         opts.cMaxCalls,
-                                         NULL);                     // No security callback.
-            }
-
-        cci_check_error(status);
-
-        if (!status) {
-            status = RpcServerListen(opts.cMinCalls,
-                                     opts.cMaxCalls,
-                                     TRUE);
-            cci_check_error(status);
-            }
-        }
-
     // Clear replyEvent so we can detect when a reply to our connect request has been received:
     ResetEvent(replyEvent);
 
index 583e9ca1ee6473d99b174d898a6603864b8e86b8..6dc1fc083a2a601047a5cc06a36db6292b45f2c0 100644 (file)
@@ -8,3 +8,4 @@
     krb5int_ipc_stream_new
 
     ccs_authenticate
+    cci_os_ipc_process_init
index e37a9ad6bfcde82c657a749de5d2b0ce57c6e62a..3141e190e7acfbac571a3706a0170e05b250c463 100644 (file)
@@ -32,9 +32,10 @@ extern "C" {
 #include "tls.h"
 #include "cci_debugging.h"
 #include "ccapi_context.h"
+#include "ccapi_ipc.h"
 #include "client.h"
 
-void cci_thread_init__auxinit();
+void cci_process_init__auxinit();
     }
 
 
@@ -91,10 +92,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL,     // DLL module handle
 
             // Allocate a TLS index:
             if ((dwTlsIndex = TlsAlloc()) == TLS_OUT_OF_INDEXES) return FALSE; 
-            // Initialize CCAPI once per DLL load:
-            firstThreadID = GetCurrentThreadId();
 
+            cci_process_init__auxinit();
             // Don't break; fallthrough: Initialize the TLS index for first thread.
  
         // The attached process creates a new thread:
@@ -107,8 +106,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL,     // DLL module handle
 
             memset(ptspdata, 0, sizeof(struct tspdata));
 
-            // Initialize CCAPI once per DLL load:
-            if (GetCurrentThreadId() == firstThreadID) cci_thread_init__auxinit();
+            // Initialize CCAPI thread data:
+            cci_ipc_thread_init();
 
             break; 
  
index aeff7235ac4b8eee908624903a133988ae206aea..1fc8d2c5e37f282d47b87398624fb128475203a2 100644 (file)
@@ -399,3 +399,10 @@ cc_int32 ccs_server_send_reply (ccs_pipe_t     in_reply_pipe,
 
     return cci_check_error (err);
 }
+
+/* ------------------------------------------------------------------------ */
+
+cc_uint64 ccs_server_client_count ()
+{
+    return ccs_client_array_count (g_client_array);
+}
index 4d17099d014d71ec19673918a7ee5b61502a6b7f..e920ad9395dfee57f8079569d9c6f80564ad42ca 100644 (file)
@@ -48,4 +48,6 @@ cc_int32 ccs_server_send_reply (ccs_pipe_t     in_reply_pipe,
                                 cc_int32       in_reply_err,
                                 k5_ipc_stream   in_reply_data);
 
+cc_uint64 ccs_server_client_count ();
+
 #endif /* CCS_SERVER_H */
index 22e209de9f89fb2c07bfa820809e6e0d5ba56853..79a348737db390acc5c37f54703935b92f84f0fa 100644 (file)
@@ -103,10 +103,26 @@ char* WorkItem::print(char* buf) {
     return buf;
     }
 
+int WorkList::initialize() {
+    hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
+    return 0;
+    }
+
+int WorkList::cleanup() {
+    CloseHandle(hEvent);
+    hEvent = INVALID_HANDLE_VALUE;
+    return 0;
+    }
+
+void WorkList::wait() {
+    WaitForSingleObject(hEvent, INFINITE);
+    }
+
 int WorkList::add(WorkItem* item) {
     EnterCriticalSection(&cs);
         wl.push_front(item);
     LeaveCriticalSection(&cs);
+    SetEvent(hEvent);
     return 1;
     }
 
index cc12054a10b613674400bbe711ed6d660a211107..fc5fa7e150797021ed03438ebe3e41e3bf3c4a64 100644 (file)
@@ -24,6 +24,7 @@
  * or implied warranty.
  */
 
+#include "WorkQueue.h"
 extern "C" {
     #include "cci_debugging.h"
     }
@@ -32,9 +33,21 @@ extern "C" {
 
 WorkList    worklist;
 
+EXTERN_C    int worklist_initialize() {
+        return worklist.initialize();
+        }
+
+EXTERN_C    int worklist_cleanup() {
+        return worklist.cleanup();
+        }
+
+EXTERN_C    void worklist_wait() {
+        worklist.wait();
+        }
+
 /* C interfaces: */
-EXTERN_C    bool worklist_isEmpty() {
-        return worklist.isEmpty();
+EXTERN_C    BOOL worklist_isEmpty() {
+        return worklist.isEmpty() ? TRUE : FALSE;
         }
 
 EXTERN_C    int worklist_add(   const long          rpcmsg,
index 6b22651ccc57719ce31f13f4a6bfe6735a7b17f7..68aa8b1cacddcd36baad017c09b7c887d49c1035 100644 (file)
 #include "windows.h"
 #include "ccs_pipe.h"
 
+EXTERN_C    int worklist_initialize();
+
+EXTERN_C    int worklist_cleanup();
+
+/* Wait for work to be added to the list (via worklist_add) from another thread */
+EXTERN_C    void worklist_wait();
+
 EXTERN_C    BOOL worklist_isEmpty();
 
-EXTERN_C    void worklist_add(  const long          rpcmsg,
+EXTERN_C    int worklist_add(  const long          rpcmsg,
                                 const ccs_pipe_t    pipe,
                                 const k5_ipc_stream stream,
                                 const time_t        serverStartTime);
index b9c70a91234c4c23463f052674799c214dc405f1..f84239491dac005a1ea5865a1f74cc3547535ee0 100644 (file)
@@ -156,6 +156,10 @@ cc_int32 ccs_os_server_initialize (int argc, const char *argv[]) {
 //        status = startup_server(opts);
 //        }
 
+    if (!err) {
+        err = worklist_initialize();
+        }
+
     if (err) {
         Init::Cleanup();
         fprintf(    stderr, "An error occured while %s the server (%u)\n",
@@ -174,6 +178,8 @@ cc_int32 ccs_os_server_cleanup (int argc, const char *argv[]) {
 
     cci_debug_printf("%s for user <%s> shutting down.", argv[0], argv[1]);
 
+    worklist_cleanup();
+
     return cci_check_error (err);
     }
 
@@ -190,10 +196,10 @@ cc_int32 ccs_os_server_cleanup (int argc, const char *argv[]) {
 cc_int32 ccs_os_server_listen_loop (int argc, const char *argv[]) {
     cc_int32        err = 0;
     uintptr_t       threadStatus;
-    unsigned int    loopCounter  = 0;
 
     ParseOpts::Opts opts         = { 0 };
     ParseOpts       PO;
+    BOOL            bQuitIfNoClients = FALSE;
 
     opts.cMinCalls  = 1;
     opts.cMaxCalls  = 20;
@@ -221,15 +227,13 @@ cc_int32 ccs_os_server_listen_loop (int argc, const char *argv[]) {
        queue.  */
     rpcargs.sessID  = (unsigned char*)sessID;
     rpcargs.opts    = &opts;
+    /// TODO: check for NULL handle, error, etc.  probably move to initialize func...
     threadStatus    = _beginthread(receiveLoop, 0, (void*)&rpcargs);
 
     /* We handle the queue entries here.  Work loop: */
-    while (TRUE) {
-        loopCounter++;
-        if (worklist_isEmpty() & 1) {
-            SleepEx(1000, TRUE);
-            }
-        else if (TRUE) {      // Take next WorkItem from the queue:
+    while (ccs_server_client_count() > 0 || !bQuitIfNoClients) {
+        worklist_wait();
+        while (!worklist_isEmpty()) {
             k5_ipc_stream    buf             = NULL;
             long            rpcmsg          = CCMSG_INVALID;
             time_t          serverStartTime = 0xDEADDEAD;
@@ -282,6 +286,9 @@ cc_int32 ccs_os_server_listen_loop (int argc, const char *argv[]) {
                             err = krb5int_ipc_stream_write(stream, "This is a test of the emergency broadcasting system", 52);
                             err = ccs_os_server_send_reply(pipe, stream);
                             break;
+                        case CCMSG_QUIT:
+                            bQuitIfNoClients = TRUE;
+                            break;
                         default:
                             cci_debug_printf("Huh?  Received invalid message type %ld from UUID:<%s>",
                                 rpcmsg, uuid);
@@ -303,7 +310,6 @@ cc_int32 ccs_os_server_listen_loop (int argc, const char *argv[]) {
             else {cci_debug_printf("Huh?  Queue not empty but no item to remove.");}
             }
         }
-
     return cci_check_error (err);
     }
 
@@ -460,6 +466,8 @@ void    receiveLoop(void* rpcargs) {
             free_alloc_p(&endpoint);
         }
 
+    // tell main thread to shutdown since it won't receive any more messages
+    worklist_add(CCMSG_QUIT, NULL, NULL, 0);
     _endthread();
     }   // End receiveLoop
 
index 1d3df155c4d33855cfee1542cae49bbc2ce13aa2..fff56f32643fcf84de0f22ee6b004ad04b2a7cd2 100644 (file)
@@ -36,9 +36,13 @@ class WorkList {
 private:
     std::list <WorkItem*>   wl;
     CRITICAL_SECTION        cs;
+    HANDLE                  hEvent;
 public:
     WorkList();
     ~WorkList();
+    int initialize();
+    int cleanup();
+    void wait();
     int add(WorkItem*);
     int remove(WorkItem**);
     bool isEmpty() {return wl.empty();}
index beed791b84156cf685655308c258eae5a49bf350..ff5f46737ccf8170ca23218a07e744a3ae3d2e39 100644 (file)
@@ -5,6 +5,7 @@
 #include "test_ccapi_constants.h"
 #include "test_ccapi_context.h"
 #include "test_ccapi_ccache.h"
+#include "test_ccapi_iterators.h"
 
 int main (int argc, const char * argv[]) {
 
index a79133d240130e71819402b6e22b9cd525345d61..313cea6e2c9a61a7e40fe0ee1528a839309766e5 100644 (file)
@@ -135,7 +135,7 @@ CC=cl
 PDB_OPTS=-Fd$(OUTPRE)\ -FD
 CPPFLAGS=-I$(top_srcdir)\include -I$(top_srcdir)\include\krb5 $(DNSFLAGS) -DWIN32_LEAN_AND_MEAN -DKRB5_DEPRECATED=1 -DKRB5_PRIVATE -D_CRT_SECURE_NO_DEPRECATE $(KFWFLAGS) $(TIME_T_FLAGS)
 CCOPTS=-nologo /EHsc /W3 $(PDB_OPTS) $(DLL_FILE_DEF)
-LOPTS=-nologo -incremental:no
+LOPTS=-nologo -incremental:no -manifest
 
 !if  ("$(CPU)" == "IA64" ) || ("$(CPU)" == "AMD64" ) || ("$(CPU)" == "ALPHA64" )
 ENTRYPOINT=_DllMainCRTStartup
index bba1883fa09333cedf3d1f68305b65d8e3e166e0..f7dc429944d7c042c4a3609e5a6d2ea5a10cd5fc 100644 (file)
@@ -72,7 +72,11 @@ get_from_module_dir(
     if (!name)
         return ENOMEM;
 
+#ifdef _WIN64
+    if (!GetModuleFileName(GetModuleHandle("krb5_64"), name, size))
+#else
     if (!GetModuleFileName(GetModuleHandle("krb5_32"), name, size))
+#endif
         goto cleanup;
 
     p = name + strlen(name);
index bf3d97b5099b3ef42f3f3559fd25aff72162dbae..743b0c7922e3ae8e25bddd753d9a2811342312f4 100644 (file)
@@ -759,10 +759,10 @@ this_module()
     if (!hModWSHelp)
     {
         // Note: these must match the DEF file entries
-#if defined (_WIN32)
-        hModWSHelp = GetModuleHandle("WSHELP32");
+#if defined(_WIN64)
+        hModWSHelp = GetModuleHandle( "WSHELP64" );
 #else
-        hModWSHelp = GetModuleHandle("WSHELPER");
+        hModWSHelp = GetModuleHandle( "WSHELP32" );
 #endif
     }
     return hModWSHelp;
index 58ff443bff546f2bcf51598e22ef6ec2d45df153..bff0ceae5604bba23f64f219b16e403e508b407f 100644 (file)
@@ -1383,6 +1383,22 @@ TYPEDEF_FUNC(
      krb5_prompt prompts[])
     );
 
+TYPEDEF_FUNC(
+    krb5_error_code,
+    KRB5_CALLCONV,
+    krb5_get_init_creds_opt_alloc,
+    (krb5_context ctx,
+     krb5_get_init_creds_opt **opt)
+    );
+
+TYPEDEF_FUNC(
+    void,
+    KRB5_CALLCONV,
+    krb5_get_init_creds_opt_free,
+    (krb5_context ctx,
+     krb5_get_init_creds_opt *opt)
+    );
+
 TYPEDEF_FUNC(
     void,
     KRB5_CALLCONV,
@@ -1465,6 +1481,15 @@ TYPEDEF_FUNC(
      int prompt)
     );
 
+TYPEDEF_FUNC(
+    krb5_error_code,
+    KRB5_CALLCONV,
+    krb5_get_init_creds_opt_set_out_ccache,
+    (krb5_context context,
+     krb5_get_init_creds_opt *opt,
+     krb5_ccache ccache)
+    );
+
 TYPEDEF_FUNC(
     krb5_error_code,
     KRB5_CALLCONV,
@@ -1775,4 +1800,11 @@ TYPEDEF_FUNC(
     krb5_clear_error_message,
     (krb5_context)
     );
+
+TYPEDEF_FUNC(
+    krb5_boolean,
+    KRB5_CALLCONV,
+    krb5_is_config_principal,
+    (krb5_context, krb5_const_principal)
+    );
 #endif /* __LOADFUNCS_KRB5_H__ */
index 02de33ca70f864f272acb78a8793141d80fd8ba8..7b66b1211cc38267e7d876154e50ec9ec38e60ff 100644 (file)
@@ -27,6 +27,7 @@ WIXINCLUDES= \
        features.wxi \
        files.wxi \
        property.wxi \
+       runtime.wxi \
        site-local.wxi \
        lang\strings_$(LANG).wxl \
        lang\ui_$(LANG).wxi \
index 813e1259fa965c31b0ad2162d0adc88095bc2f9d..3bb1cc95cd156fd840117e2b3b751b802c313525 100644 (file)
     <?include site-local.wxi?>
     
     <!-- Sanity checks -->
-    <!-- <?ifndef var.CL1200?>
-        <?ifndef var.CL1300?>
-            <?ifndef var.CL1310?>
-                <?ifndef var.CL1400?>
-                    <?error Must define one of CL1200, CL1300, CL1310 or CL1400?>
-                <?endif?>
-            <?endif?>
-        <?endif?>
-    <?endif?> -->
+    <?ifndef var.CL1600?>
+        <?error Must define CL1600 (MSVC10.0)?>
+    <?endif?>
 
     <!-- Build type specifications -->
     <?ifndef env.CPU?>
     <?endif?>
     <?define BinDir="$(env.KRB_INSTALL_DIR)\bin\"?>
     <?define LibDir="$(env.KRB_INSTALL_DIR)\lib\"?>
+    <?define InstallerVersion="300"?>
     <?if $(env.CPU) = "i386"?>
-        <?define InstallerVersion="110"?>
         <?define Platform="Intel"?>
         <?define Win64="no"?>
     <?elseif $(env.CPU) = "AMD64"?>
-        <?define InstallerVersion="200"?>
         <?define Platform="x64"?>
         <?define Win64="yes"?>
     <?else?>
index 98d669f3efd38e36b2f000b8871b103a4519bb62..5f0f42f65556c89e141e0d68e32bbe5ae1c9453a 100644 (file)
@@ -87,9 +87,6 @@ SOFTWARE.
 // linker stuff
 #pragma comment(lib, "msi")
 #pragma comment(lib, "advapi32")
-#if defined(_M_IA64) || defined(_M_AMD64)
-#pragma comment(lib, "bufferoverflowu")
-#endif
 
 
 void ShowMsiError( MSIHANDLE hInstall, DWORD errcode, DWORD param ){
index fcb6d59ce8c300d8de6028b76f0a71883bf355f5..fa8c8f0d3dfc4a0317785df094041aa49a73135e 100644 (file)
             <ComponentRef Id="cmf_ms2mit_exe" />
             <ComponentRef Id="cmf_mit2ms_exe" />
             <ComponentRef Id="cmf_wshelp32_dll" />
-<!--            <ComponentRef Id="cmf_xpprof32_dll" /> -->
+            <ComponentRef Id="cmf_xpprof32_dll" />
 
             <ComponentRef Id="cmf_leashw32_dll" />
 
-        <?if $(var.Platform) = "Intel" ?>
-<!--            <ComponentRef Id="cmf_leash32_exe" /> -->
+            <ComponentRef Id="cmf_leash_exe" />
 <!--            <ComponentRef Id="csc_leash32_exe" /> -->
-        <?endif?>
            <ComponentRef Id="cmf_kfwlogon_DLL" />
             <ComponentRef Id="cmf_kfwcpcc_EXE" />
 
@@ -91,7 +89,6 @@
             <ComponentRef Id="rcm_krb5_2" />
             <ComponentRef Id="rcm_krb5_3" />
 
-        <?if $(var.Platform) = "Intel" ?>
             <!-- Leash config options -->
             <ComponentRef Id="rcm_leash_1" />
             <ComponentRef Id="rcm_leash_2" />
             <ComponentRef Id="rcm_leash_5" />
             <ComponentRef Id="rcm_leash_6" />
             
-<!--        <?ifdef OldHelp?>
-            <ComponentRef Id="cmf_leash32_hlp" />
-        <?else?>
             <ComponentRef Id="cmf_leash32_chm" />
-        <?endif?> -->
-        <?endif?>
             
             <!-- Leash dll options -->
             <ComponentRef Id="rcm_leashdll_1" />
             <ComponentRef Id="cmf_psapi_dll" />
             
             <ComponentRef Id="cmf_krb5_ini" />
-            <ComponentRef Id="cmf_krb_con" />
-            <ComponentRef Id="cmf_krbrealm_con" />
             
             <ComponentRef Id="rcm_common" />
             <ComponentRef Id="rcm_client" />
             <ComponentRef Id="cmp_dirinc_loadfuncs" />
             <ComponentRef Id="cmp_dirinc_wshelper" />
             <ComponentRef Id="cmp_dirinc_wshelper_arpa" />
-            <ComponentRef Id="cmp_dirinstall_wix" />
-            <ComponentRef Id="cmp_dirinstall_wix_lang" />
-            <ComponentRef Id="cmp_dirinstall_wix_Binary" />
-            <ComponentRef Id="cmp_dirinstall_wix_custom" />
             <ComponentRef Id="rcm_common" />
             <ComponentRef Id="rcm_sdk" />
         </Feature> <!-- /feaKfwSDK -->
index b73a2fd777ecb73584064e304b2f18ef10851b09..a7245e7e45e37cd9f15e9cb004e9a7eaf89e4ee2 100644 (file)
   
   -->
 <Include xmlns="http://schemas.microsoft.com/wix/2006/wi">
-<Directory Id="TARGETDIR" Name="SourceDir">
+  <Property Id="DISABLEADVTSHORTCUTS" Value="1" />
+  <Property Id="SYSTEMKRB5INI">
+    <DirectorySearch Id="WindowsFolder" Path="[WindowsFolder]">
+      <FileSearch Name="krb5.ini"/>
+    </DirectorySearch>
+  </Property>
+
+  <Directory Id="TARGETDIR" Name="SourceDir">
+    <Directory Id="DesktopFolder" Name="Desktop"/>
     <Directory Id="$(var.PISystemFolder)" SourceName="System">
         <Component Win64="$(var.Win64)" Id="cmf_kfwlogon_DLL" Guid="$(var.cmf_kfwlogon_DLL_guid)">
             <File Id="filekfwlogon_DLL" Name="kfwlogon.dll" KeyPath="yes" DiskId="1" Source="$(var.BinDir)kfwlogon.dll" />
                            <Registry Id="reg_ts_krbcc32s_0" Root="HKLM" Key="Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\Compatibility\Applications\ccapiserver" Action="createKeyAndRemoveKeyOnUninstall" />
                            <Registry Id="reg_ts_krbcc32s_1" Root="HKLM" Key="Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\Compatibility\Applications\ccapiserver" Name="Flags" Type="integer" Value="1032" />
                     </Component>
-        <?if $(var.Platform) = "Intel" ?>
-                  <!--                    <Component Win64="$(var.Win64)" Id="cmf_leash32_exe" Guid="$(var.cmf_leash32_exe_guid)" DiskId="1">
-                           <File Id="fil_leash32_exe" Name="leash32.exe" KeyPath="yes" />
-                           <Registry Id="reg_ts_leash32_0" Root="HKLM" Key="Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\Compatibility\Applications\leash32" Action="createKeyAndRemoveKeyOnUninstall" KeyPath="yes"/>
+                    <Component Win64="$(var.Win64)" Id="cmf_leash_exe" Guid="$(var.cmf_leash_exe_guid)" DiskId="1">
+                      <File Id="fil_leash_exe" Name="leash.exe" KeyPath="yes">
+                        <Shortcut Id="sc_leash_exe" Advertise="yes" Directory="dirShortcut" Name="Leash Kerberos Ticket Manager.lnk" Arguments="[LEASHAUTOINIT]" />
+                        <Shortcut Id="sc_leash_desktop_exe" Advertise="yes" Directory="DesktopFolder" Name="Leash Kerberos Ticket Manager.lnk" Arguments="[LEASHAUTOINIT]" />
+                      </File>
+                      <Registry Id="reg_ts_leash32_0" Root="HKLM" Key="Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\Compatibility\Applications\leash32" Action="createKeyAndRemoveKeyOnUninstall" />
                            <Registry Id="reg_ts_leash32_1" Root="HKLM" Key="Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\Compatibility\Applications\leash32" Name="Flags" Type="integer" Value="1032" />
-                    </Component> -->
+                    </Component>
 
 <!--                    <Component Win64="$(var.Win64)" Id="csc_leash32_exe" Guid="$(var.csc_leash32_exe_guid)" DiskId="1">
-                        <Shortcut Id="sc_leash32_exe" Advertise="no" Directory="dirShortcut" Name="Leash Kerberos Ticket Manager.lnk" Arguments="[LEASHAUTOINIT]" Target="[!fil_leash32_exe]" />
+                        <CreateFolder Directory="dirShortcut" />
                         <Condition>USELEASH</Condition>
                     </Component> -->
 
                         <Condition>USELEASH</Condition>
                     </Component> -->
 
-<!--                <?ifdef OldHelp?>
-                    <Component Win64="$(var.Win64)" Id="cmf_leash32_hlp" Guid="$(var.cmf_leash32_hlp_guid)" DiskId="1">
-                           <File Id="fil_leash32_hlp" Name="leash32.hlp" KeyPath="yes" />
-                    </Component>
-                <?else?>
                     <Component Win64="$(var.Win64)" Id="cmf_leash32_chm" Guid="$(var.cmf_leash32_chm_guid)" DiskId="1">
-                           <File Id="fil_leash32_chm" Name="leash32.chm" KeyPath="yes" />
+                           <File Id="fil_leash32_chm" Name="leash.chm" KeyPath="yes" />
                     </Component>
-                <?endif?> -->
-        <?endif?>
                     
                     <Component Win64="$(var.Win64)" Id="cmf_leashw32_dll" Guid="$(var.cmf_leashw32_dll_guid)" DiskId="1">
                            <File Id="fil_leashw32_dll" Name="$(var.cmf_leashw32_dll_name)" KeyPath="yes" />
                     <Component Win64="$(var.Win64)" Id="cmf_wshelp32_dll" Guid="$(var.cmf_wshelp32_dll_guid)" DiskId="1">
                            <File Id="fil_wshelp32_dll" Name="$(var.cmf_wshelp32_dll_name)" KeyPath="yes" />
                     </Component>
-<!--                    <Component Win64="$(var.Win64)" Id="cmf_xpprof32_dll" Guid="$(var.cmf_xpprof32_dll_guid)" DiskId="1">
+                    <Component Win64="$(var.Win64)" Id="cmf_xpprof32_dll" Guid="$(var.cmf_xpprof32_dll_guid)" DiskId="1">
                            <File Id="fil_xpprof32_dll" Name="$(var.cmf_xpprof32_dll_name)" KeyPath="yes" />
-                    </Component> -->
+                    </Component>
                     
                     <!-- Debug symbols -->
                 <?ifdef DebugSyms?>
                     <Component Win64="$(var.Win64)" Id="cmf_bin_debug" Guid="$(var.cmf_bin_debug_guid)" DiskId="1">
                         <?if $(var.Platform) = "Intel" ?>
-                           <File Id="fil_leash32_pdb" Name="leash32.pdb" />
-
                            <File Id="fil_comerr32_pdb" Name="comerr32.pdb" />
                            <File Id="fil_gssapi32_pdb" Name="gssapi32.pdb" />
                            <File Id="fil_krb5_32_pdb" Name="krb5_32.pdb" KeyPath="yes" />
                            <File Id="fil_wshelp64_pdb" Name="wshelp64.pdb" />
                            <File Id="fil_xpprof64_pdb" Name="xpprof64.pdb" />
                         <?endif?>
+                      <File Id="fil_leash_pdb" Name="leash.pdb" />
                       <File Id="fil_ccapiserver_pdb" Name="ccapiserver.pdb" />
                       <File Id="fil_gss_client_pdb" Name="gss-client.pdb" />
                            <File Id="fil_gss_server_pdb" Name="gss-server.pdb" />
                     </Component>
                 <?endif?>
                 
-                    <!-- Runtime (for compilers previous to VS8) -->
-                <?ifndef Debug?>
-                    <?ifdef CL1200?>
-                        <Component Win64="$(var.Win64)" Id="cmf_mfc42_dll" Guid="BE2D0D08-E26E-4906-BEEA-1C550BA9B405" DiskId="1">
-                               <File Id="fil_mfc42_dll" Name="mfc42.dll" src="$(var.SystemDir)mfc42.dll" KeyPath="yes" />
-                        </Component>
-                        <Component Win64="$(var.Win64)" Id="cmf_msvcp60_dll" Guid="7DBB5E61-AA59-4FD8-87CA-7F139D355050" DiskId="1">
-                               <File Id="fil_msvcp60_dll" Name="msvcp60.dll" src="$(var.SystemDir)msvcp60.dll" KeyPath="yes" />
-                        </Component>
-                        <Component Win64="$(var.Win64)" Id="cmf_msvcrt_dll" Guid="07B1612B-F52B-4A22-BC20-948BB7D50916" DiskId="1">
-                               <File Id="fil_msvcrt_dll" Name="msvcrt.dll" src="$(var.SystemDir)msvcrt.dll" KeyPath="yes" />
-                        </Component>
-                    <?endif?>
-                    <?ifdef CL1300?>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70_dll" Guid="E064D66F-45A5-46FA-A0C0-EE68B5DCA248" DiskId="1">
-                                   <File Id="fil_mfc70_dll" Name="mfc70.dll" src="$(var.SystemDir)mfc70.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_msvcr70_dll" Guid="3489059D-B8C5-4F9A-9DF9-CC8F19B97898" DiskId="1">
-                                   <File Id="fil_msvcr70_dll" Name="msvcr70.dll" src="$(var.SystemDir)msvcr70.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Guid="E3E6DC28-A229-45D7-804B-BC5A2CAB86B6" DiskId="1">
-                                   <File Id="fil_msvcp70_dll" Name="msvcp70.dll" src="$(var.SystemDir)msvcp70.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70chs_dll" Guid="CAFD61A5-8A13-4A7C-AA15-6FEED7D43A3A" DiskId="1">
-                                   <File Id="fil_mfc70chs_dll" Name="mfc70chs.dll" src="$(var.SystemDir)mfc70chs.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70cht_dll" Guid="A3F60016-825A-4096-A45F-98B4972FF1CA" DiskId="1">
-                                   <File Id="fil_mfc70cht_dll" Name="mfc70cht.dll" src="$(var.SystemDir)mfc70cht.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70deu_dll" Guid="D146EE00-8880-4E39-A131-784B947883DB" DiskId="1">
-                                   <File Id="fil_mfc70deu_dll" Name="mfc70deu.dll" src="$(var.SystemDir)mfc70deu.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70enu_dll" Guid="11E2059D-62E6-40DF-87C1-B03E425048CE" DiskId="1">
-                                   <File Id="fil_mfc70enu_dll" Name="mfc70enu.dll" src="$(var.SystemDir)mfc70enu.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70esp_dll" Guid="3D1AAC2A-0FB1-4EF7-8406-1BF771CEB4BB" DiskId="1">
-                                   <File Id="fil_mfc70esp_dll" Name="mfc70esp.dll" src="$(var.SystemDir)mfc70esp.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70fra_dll" Guid="36A2B8B3-E6C6-4725-96B8-82905D2ADE4E" DiskId="1">
-                                   <File Id="fil_mfc70fra_dll" Name="mfc70fra.dll" src="$(var.SystemDir)mfc70fra.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70ita_dll" Guid="4EE49FC8-ED41-48F4-90A9-1FC06FE6237D" DiskId="1">
-                                   <File Id="fil_mfc70ita_dll" Name="mfc70ita.dll" src="$(var.SystemDir)mfc70ita.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70jpn_dll" Guid="A6ADFFF1-C48B-446C-9B7D-6137F00EC0E4" DiskId="1">
-                                   <File Id="fil_mfc70jpn_dll" Name="mfc70jpn.dll" src="$(var.SystemDir)mfc70jpn.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70kor_dll" Guid="720F98E2-5525-41CA-8734-98B0A5756708" DiskId="1">
-                                   <File Id="fil_mfc70kor_dll" Name="mfc70kor.dll" src="$(var.SystemDir)mfc70kor.dll" KeyPath="yes" />
-                            </Component>
-                    <?endif?>
-                    <?ifdef CL1310?>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71_dll" Guid="6A4854A8-35AE-42CB-9671-9F6F096BE20C" DiskId="1">
-                                   <File Id="fil_mfc71_dll" Name="mfc71.dll" src="$(var.SystemDir)mfc71.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_msvcr71_dll" Guid="C6952DEE-E62A-4635-9CE8-405F1E459FB2" DiskId="1">
-                                   <File Id="fil_msvcr71_dll" Name="msvcr71.dll" src="$(var.SystemDir)msvcr71.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_msvcp71_dll" Guid="CA7D0EDE-0B81-4709-86E9-31DC8543918F" DiskId="1">
-                                   <File Id="fil_msvcp71_dll" Name="msvcp71.dll" src="$(var.SystemDir)msvcp71.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71chs_dll" Guid="693F64CF-1AE5-4756-94CC-095ED48C217F" DiskId="1">
-                                   <File Id="fil_mfc71chs_dll" Name="mfc71chs.dll" src="$(var.SystemDir)mfc71chs.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71cht_dll" Guid="A5552AAE-048F-41AB-AC2D-6C96411D812D" DiskId="1">
-                                   <File Id="fil_mfc71cht_dll" Name="mfc71cht.dll" src="$(var.SystemDir)mfc71cht.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71deu_dll" Guid="E8AE39B8-1B23-4DC9-944F-CA823F53CFF3" DiskId="1">
-                                   <File Id="fil_mfc71deu_dll" Name="mfc71deu.dll" src="$(var.SystemDir)mfc71deu.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71enu_dll" Guid="1FF5B6B6-4015-40F1-AEFF-004DBCFDB5E7" DiskId="1">
-                                   <File Id="fil_mfc71enu_dll" Name="mfc71enu.dll" src="$(var.SystemDir)mfc71enu.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71esp_dll" Guid="028AC2DA-B4F9-4A9E-A728-1100B3C7E259" DiskId="1">
-                                   <File Id="fil_mfc71esp_dll" Name="mfc71esp.dll" src="$(var.SystemDir)mfc71esp.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71fra_dll" Guid="7D6C3457-F08C-426C-BEE2-8D9F214223C5" DiskId="1">
-                                   <File Id="fil_mfc71fra_dll" Name="mfc71fra.dll" src="$(var.SystemDir)mfc71fra.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71ita_dll" Guid="5CE98F88-CD33-4887-9634-B6263B6DB3CB" DiskId="1">
-                                   <File Id="fil_mfc71ita_dll" Name="mfc71ita.dll" src="$(var.SystemDir)mfc71ita.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71jpn_dll" Guid="6DE66BB3-5DD2-4D87-89E4-D73FF405932C" DiskId="1">
-                                   <File Id="fil_mfc71jpn_dll" Name="mfc71jpn.dll" src="$(var.SystemDir)mfc71jpn.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71kor_dll" Guid="B7290849-638E-4C39-9E56-0D73CF564D69" DiskId="1">
-                                   <File Id="fil_mfc71kor_dll" Name="mfc71kor.dll" src="$(var.SystemDir)mfc71kor.dll" KeyPath="yes" />
-                            </Component>
-                    <?endif?>
-                <?else?> <!-- Debug -->
-                    <?ifdef CL1200?>
-                        <Component Win64="$(var.Win64)" Id="cmf_mfc42d_dll" Guid="B7360C15-61FA-409F-8F0A-87B96FB30BBD" DiskId="1">
-                               <File Id="fil_mfc42d_dll" Name="mfc42d.dll" src="$(var.SystemDir)mfc42d.dll" KeyPath="yes" />
-                        </Component>
-                        <Component Win64="$(var.Win64)" Id="cmf_msvcp60d_dll" Guid="BFF28D63-B60A-48B6-A403-A7DE00BDB37E" DiskId="1">
-                               <File Id="fil_msvcp60d_dll" Name="msvcp60d.dll" src="$(var.SystemDir)msvcp60d.dll" KeyPath="yes" />
-                        </Component>
-                        <Component Win64="$(var.Win64)" Id="cmf_msvcrtd_dll" Guid="69069738-3202-43C3-92A3-4139816B6527" DiskId="1">
-                               <File Id="fil_msvcrtd_dll" Name="msvcrtd.dll" src="$(var.SystemDir)msvcrtd.dll" KeyPath="yes" />
-                        </Component>
-                        <Component Win64="$(var.Win64)" Id="cmf_runtime_debug1200" Guid="3FAD9513-AB33-4eed-9359-E96F8D5ABD2A" DiskId="1">
-                               <File Id="fil_mfc42d_pdb" Name="mfc42d.pdb" src="$(var.SystemDir)mfc42d.pdb" />
-                               <File Id="fil_msvcp60d_pdb" Name="msvcp60d.pdb" src="$(var.SystemDir)msvcp60d.pdb" />
-                               <File Id="fil_msvcrtd_pdb" Name="msvcrtd.pdb" src="$(var.SystemDir)msvcrtd.pdb" KeyPath="yes" />
-                        </Component>
-                    <?endif?>
-                    <?ifdef CL1300?>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70d_dll" Guid="40C7120A-9B28-4DD1-86D0-9F66056A2463" DiskId="1">
-                                   <File Id="fil_mfc70d_dll" Name="mfc70d.dll" src="$(var.SystemDir)mfc70d.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_msvcr70d_dll" Guid="D0A7B06E-6F65-4559-A99A-63C4C837BE0E" DiskId="1">
-                                   <File Id="fil_msvcr70d_dll" Name="msvcr70d.dll" src="$(var.SystemDir)msvcr70d.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_msvcp70d_dll" Guid="DC82F644-8705-4C89-BE63-4CD6680BF580" DiskId="1">
-                                   <File Id="fil_msvcp70d_dll" Name="msvcp70d.dll" src="$(var.SystemDir)msvcp70d.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70chs_dll" Guid="CAFD61A5-8A13-4A7C-AA15-6FEED7D43A3A" DiskId="1">
-                                   <File Id="fil_mfc70chs_dll" Name="mfc70chs.dll" src="$(var.SystemDir)mfc70chs.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70cht_dll" Guid="A3F60016-825A-4096-A45F-98B4972FF1CA" DiskId="1">
-                                   <File Id="fil_mfc70cht_dll" Name="mfc70cht.dll" src="$(var.SystemDir)mfc70cht.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70deu_dll" Guid="D146EE00-8880-4E39-A131-784B947883DB" DiskId="1">
-                                   <File Id="fil_mfc70deu_dll" Name="mfc70deu.dll" src="$(var.SystemDir)mfc70deu.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70enu_dll" Guid="11E2059D-62E6-40DF-87C1-B03E425048CE" DiskId="1">
-                                   <File Id="fil_mfc70enu_dll" Name="mfc70enu.dll" src="$(var.SystemDir)mfc70enu.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70esp_dll" Guid="3D1AAC2A-0FB1-4EF7-8406-1BF771CEB4BB" DiskId="1">
-                                   <File Id="fil_mfc70esp_dll" Name="mfc70esp.dll" src="$(var.SystemDir)mfc70esp.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70fra_dll" Guid="36A2B8B3-E6C6-4725-96B8-82905D2ADE4E" DiskId="1">
-                                   <File Id="fil_mfc70fra_dll" Name="mfc70fra.dll" src="$(var.SystemDir)mfc70fra.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70ita_dll" Guid="4EE49FC8-ED41-48F4-90A9-1FC06FE6237D" DiskId="1">
-                                   <File Id="fil_mfc70ita_dll" Name="mfc70ita.dll" src="$(var.SystemDir)mfc70ita.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70jpn_dll" Guid="A6ADFFF1-C48B-446C-9B7D-6137F00EC0E4" DiskId="1">
-                                   <File Id="fil_mfc70jpn_dll" Name="mfc70jpn.dll" src="$(var.SystemDir)mfc70jpn.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc70kor_dll" Guid="720F98E2-5525-41CA-8734-98B0A5756708" DiskId="1">
-                                   <File Id="fil_mfc70kor_dll" Name="mfc70kor.dll" src="$(var.SystemDir)mfc70kor.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_runtime_debug1300" Guid="157D7DE8-6AFE-44b3-A317-840667C76D0D" DiskId="1">
-                                   <File Id="fil_mfc70d_pdb" Name="mfc70d.pdb" src="$(var.SystemDir)mfc70d.pdb" />
-                                   <File Id="fil_msvcr70d_pdb" Name="msvcr70d.pdb" src="$(var.SystemDir)msvcr70d.pdb" KeyPath="yes" />
-                                   <File Id="fil_msvcp70d_pdb" Name="msvcp70d.pdb" src="$(var.SystemDir)msvcp70d.pdb" />
-                            </Component>
-                    <?endif?>
-                    <?ifdef CL1310?>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71d_dll" Guid="0E0A47A3-892C-4526-8591-C719E1A184F2" DiskId="1">
-                                   <File Id="fil_mfc71d_dll" Name="mfc71d.dll" src="$(var.SystemDir)mfc71d.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_msvcr71d_dll" Guid="CB2A282D-CF73-4DA8-929D-8035776F4FB8" DiskId="1">
-                                   <File Id="fil_msvcr71d_dll" Name="msvcr71d.dll" src="$(var.SystemDir)msvcr71d.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_msvcp71d_dll" Guid="7D6003B6-B3A1-417A-BE16-5DDD52023456" DiskId="1">
-                                   <File Id="fil_msvcp71d_dll" Name="msvcp71d.dll" src="$(var.SystemDir)msvcp71d.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71chs_dll" Guid="693F64CF-1AE5-4756-94CC-095ED48C217F" DiskId="1">
-                                   <File Id="fil_mfc71chs_dll" Name="mfc71chs.dll" src="$(var.SystemDir)mfc71chs.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71cht_dll" Guid="A5552AAE-048F-41AB-AC2D-6C96411D812D" DiskId="1">
-                                   <File Id="fil_mfc71cht_dll" Name="mfc71cht.dll" src="$(var.SystemDir)mfc71cht.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71deu_dll" Guid="E8AE39B8-1B23-4DC9-944F-CA823F53CFF3" DiskId="1">
-                                   <File Id="fil_mfc71deu_dll" Name="mfc71deu.dll" src="$(var.SystemDir)mfc71deu.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71enu_dll" Guid="1FF5B6B6-4015-40F1-AEFF-004DBCFDB5E7" DiskId="1">
-                                   <File Id="fil_mfc71enu_dll" Name="mfc71enu.dll" src="$(var.SystemDir)mfc71enu.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71esp_dll" Guid="028AC2DA-B4F9-4A9E-A728-1100B3C7E259" DiskId="1">
-                                   <File Id="fil_mfc71esp_dll" Name="mfc71esp.dll" src="$(var.SystemDir)mfc71esp.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71fra_dll" Guid="7D6C3457-F08C-426C-BEE2-8D9F214223C5" DiskId="1">
-                                   <File Id="fil_mfc71fra_dll" Name="mfc71fra.dll" src="$(var.SystemDir)mfc71fra.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71ita_dll" Guid="5CE98F88-CD33-4887-9634-B6263B6DB3CB" DiskId="1">
-                                   <File Id="fil_mfc71ita_dll" Name="mfc71ita.dll" src="$(var.SystemDir)mfc71ita.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71jpn_dll" Guid="6DE66BB3-5DD2-4D87-89E4-D73FF405932C" DiskId="1">
-                                   <File Id="fil_mfc71jpn_dll" Name="mfc71jpn.dll" src="$(var.SystemDir)mfc71jpn.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_mfc71kor_dll" Guid="B7290849-638E-4C39-9E56-0D73CF564D69" DiskId="1">
-                                   <File Id="fil_mfc71kor_dll" Name="mfc71kor.dll" src="$(var.SystemDir)mfc71kor.dll" KeyPath="yes" />
-                            </Component>
-                            <Component Win64="$(var.Win64)" Id="cmf_runtime_debug1310" Guid="0125814E-9EED-4d57-A4E6-3E685CE5AB5C" DiskId="1">
-                                   <File Id="fil_mfc71d_pdb" Name="mfc71d.pdb" src="$(var.SystemDir)mfc71d.pdb" />
-                                   <File Id="fil_msvcr71d_pdb" Name="msvcr71d.pdb" src="$(var.SystemDir)msvcr71d.pdb" KeyPath="yes" />
-                                   <File Id="fil_msvcp71d_pdb" Name="msvcp71d.pdb" src="$(var.SystemDir)msvcp71d.pdb" />
-                            </Component>
-                    <?endif?>
-                <?endif?>
-                
                     <Component Win64="$(var.Win64)" Id="cmf_psapi_dll" Guid="877F4DD5-8AE0-451C-8F4D-C27F6F30D221" DiskId="1">
                            <File Id="fil_psapi_dll" Name="psapi.dll" src="$(var.SystemDir)psapi.dll" KeyPath="yes" />
                     </Component>
                             <File Id="fil_krbcc32_lib" Name="krbcc32.lib" />
                             <File Id="fil_leashw32_lib" Name="leashw32.lib" />
                             <File Id="fil_wshelp32_lib" Name="wshelp32.lib" />
-<!--                            <File Id="fil_xpprof32_lib" Name="xpprof32.lib" /> -->
+                            <File Id="fil_xpprof32_lib" Name="xpprof32.lib" />
                         </Component>
                     </Directory>
                     <?endif?>
                             <File Id="fil_krbcc64_lib" Name="krbcc64.lib" />
                             <File Id="fil_leashw64_lib" Name="leashw64.lib" />
                             <File Id="fil_wshelp64_lib" Name="wshelp64.lib" />
-<!--                            <File Id="fil_xpprof64_lib" Name="xpprof64.lib" /> -->
+                            <File Id="fil_xpprof64_lib" Name="xpprof64.lib" />
                         </Component>
                     </Directory>
                     <?endif?>
                 </Directory>
                 
-                <Directory Id="dirinstall" Name="install" src="$(var.InstallDir)">
-                    <Directory Id="dirinstall_wix" Name="wix" src="$(var.InstallDir)wix\">
-                        <Component Win64="$(var.Win64)" Id="cmp_dirinstall_wix" Guid="14DD16AB-6920-4ee1-8B78-623F39DB70BB" DiskId="1">
-                            <File Id="fil_config_wxi" Name="config.wxi" />
-                            <File Id="fil_features_wxi" Name="features.wxi" />
-                            <File Id="fil_files_wxi" Name="files.wxi" />
-                            <File Id="fil_kfw_wxs" Name="kfw.wxs" KeyPath="yes" />
-                            <File Id="fil_Makefile_" Name="Makefile" />
-                            <File Id="fil_property_wxi" Name="property.wxi" />
-                            <File Id="fil_site_local_wxi" Name="site-local-tagged.wxi" />
-                        </Component>
-                        <Directory Id="dirinstall_wix_lang" Name="lang" src="$(var.InstallDir)wix\lang\">
-                            <Component Win64="$(var.Win64)" Id="cmp_dirinstall_wix_lang" Guid="70741A69-1103-4B54-B146-2E14C271945D" DiskId="1">
-                                <File Id="fil_config_1033_wxi" Name="config_1033.wxi" KeyPath="yes" />
-                                <File Id="fil_strings_1033_wxl" Name="strings_1033.wxl"  />
-                                <File Id="fil_ui_1033_wxi" Name="ui_1033.wxi" />
-                            </Component>
-                        </Directory>
-                        <Directory Id="dirinstall_wix_Binary" Name="Binary" src="$(var.InstallDir)wix\Binary\">
-                            <Component Win64="$(var.Win64)" Id="cmp_dirinstall_wix_Binary" Guid="5F021D71-A398-41FD-8F9C-9C0665C18660" DiskId="1">
-                                <File Id="fil_bannrbmp_bmp" Name="bannrbmp.bmp" />
-                                <File Id="fil_completi_ico" Name="completi.ico" />
-                                <File Id="fil_custicon_ico" Name="custicon.ico" />
-                                <File Id="fil_dlgbmp_bmp" Name="dlgbmp.bmp" />
-                                <File Id="fil_exclamic_ico" Name="exclamic.ico" />
-                                <File Id="fil_info_bmp" Name="info.bmp" />
-                                <File Id="fil_insticon_ico" Name="insticon.ico" />
-                                <File Id="fil_new_bmp" Name="new.bmp" />
-                                <File Id="fil_removico_ico" Name="removico.ico" />
-                                <File Id="fil_repairic_ico" Name="repairic.ico" />
-                                <File Id="fil_up_bmp" Name="up.bmp" />
-                            </Component>
-                        </Directory>
-                        <Directory Id="dirinstall_wix_custom" Name="custom" src="$(var.InstallDir)wix\custom\">
-                            <Component Win64="$(var.Win64)" Id="cmp_dirinstall_wix_custom" Guid="872AA948-39B0-4CDC-B764-7EB69F280E50" DiskId="1">
-                                <File Id="fil_custom_cpp" Name="custom.cpp" KeyPath="yes" />
-                                <File Id="fil_custom_h" Name="custom.h" />
-                            </Component>
-                        </Directory>
-                    </Directory>
-                </Directory>
-                
 <!--                <Directory Id="dirdoc" Name="doc" src="$(var.DocDir)">
                 <?if $(var.Platform) = "Intel" ?>
                     <Component Win64="$(var.Win64)" Id="efl_leash_userdoc_pdf" Guid="68FB24DD-5EC2-4db1-AD42-5B9DDEC247C5" DiskId="1">
             </Directory> <!-- /Kerberos -->
         </Directory> <!-- /MIT -->
     </Directory> <!-- /Program Files -->
-    <Directory Id="WindowsFolder">
-        <Component Win64="$(var.Win64)" Id="cmf_krb5_ini" Guid="C1AF0670-BBF1-4AA6-B2A6-6C8B1584A1F4" NeverOverwrite="yes" Permanent="yes" DiskId="1">
-               <File Id="fil_krb5_ini" Name="krb5.ini" src="$(var.ConfigDir)krb5.ini" KeyPath="yes" />
-        </Component>
-        <Component Win64="$(var.Win64)" Id="cmf_krb_con" Guid="5E91A051-CF14-45FF-BF64-CEE78A7A90C2" NeverOverwrite="yes" Permanent="yes" DiskId="1">
-               <File Id="fil_krb_con" Name="krb.con" src="$(var.ConfigDir)krb.con" KeyPath="yes" />
-        </Component>
-        <Component Win64="$(var.Win64)" Id="cmf_krbrealm_con" Guid="D667B54F-1C98-43FB-87C6-0F0517623B90" NeverOverwrite="yes" Permanent="yes" DiskId="1">
-               <File Id="fil_krbrealm_con" Name="krbrealm.con" src="$(var.ConfigDir)krbrealm.con" KeyPath="yes" />
-        </Component>
+    <Directory Id="CommonAppDataFolder" Name="CommonAppDataFolder">
+      <Directory Id="APPDATAMITDIR" Name="MIT">
+        <Directory Id="APPDATAKERBEROS5DIR" Name="Kerberos5">
+          <Component Win64="$(var.Win64)" Id="cmf_krb5_ini" Guid="C1AF0670-BBF1-4AA6-B2A6-6C8B1584A1F4" NeverOverwrite="yes" Permanent="yes" DiskId="1">
+            <Condition>NOT SYSTEMKRB5INI</Condition>
+            <File Id="fil_krb5_ini" Name="krb5.ini" src="$(var.ConfigDir)krb5.ini" KeyPath="yes" />
+            <CreateFolder/>
+          </Component>
+        </Directory>
+      </Directory>
     </Directory>
     
     <Directory Id="ProgramMenuFolder">
         <Registry Id="reg_docs20" Root="HKLM" Key="$(var.KfwRegRoot)\Documentation\$(var.VersionString)" Name="PatchLevel" Type="integer" Value="$(var.VersionPatch)" />
     </Component>
 
-    <!-- Shared assembly runtime for VS 2005 -->
-    <?ifdef CL1400?>
-       <?ifdef env.CommonProgramFiles6432?>
-         <?define CPF="$(env.CommonProgramFiles(x86)"?>
-       <?else?>
-         <?define CPF="$(env.CommonProgramFiles)"?>
-       <?endif?>
-
-       <?if $(var.Platform) = "x64" ?>
-               <?ifndef Debug?>
-                       <Merge Id="MSVCRT8MEM" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_CRT_x86_x64.msm"/>
-                       <Merge Id="MSVCRT8POL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_CRT_x86_x64.msm"/>
-                       <Merge Id="MSVCRT8MFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_MFC_x86_x64.msm"/>
-                       <Merge Id="MSVCRT8PFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_MFC_x86_x64.msm"/>
-                       <Merge Id="MSVCRT8MFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_MFCLOC_x86_x64.msm"/>
-                       <Merge Id="MSVCRT8PFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_MFCLOC_x86_x64.msm"/>
-               <?else?>
-                       <Merge Id="MSVCRT8MEM" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_DebugCRT_x86_x64.msm"/>
-                       <Merge Id="MSVCRT8POL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_DebugCRT_x86_x64.msm"/>
-                       <Merge Id="MSVCRT8MFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_DebugMFC_x86_x64.msm"/>
-                       <Merge Id="MSVCRT8PFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_DebugMFC_x86_x64.msm"/>
-                       <Merge Id="MSVCRT8MFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_MFCLOC_x86_x64.msm"/>
-                       <Merge Id="MSVCRT8PFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_MFCLOC_x86_x64.msm"/>
-               <?endif?>
-       <?else?>
-               <?ifndef Debug?>
-                       <Merge Id="MSVCRT8MEM" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_CRT_x86.msm"/>
-                       <Merge Id="MSVCRT8POL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_CRT_x86.msm"/>
-                       <Merge Id="MSVCRT8MFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_MFC_x86.msm"/>
-                       <Merge Id="MSVCRT8PFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_MFC_x86.msm"/>
-                       <Merge Id="MSVCRT8MFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_MFCLOC_x86.msm"/>
-                       <Merge Id="MSVCRT8PFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_MFCLOC_x86.msm"/>
-               <?else?>
-                       <Merge Id="MSVCRT8MEM" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_DebugCRT_x86.msm"/>
-                       <Merge Id="MSVCRT8POL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_DebugCRT_x86.msm"/>
-                       <Merge Id="MSVCRT8MFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_DebugMFC_x86.msm"/>
-                       <Merge Id="MSVCRT8PFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_DebugMFC_x86.msm"/>
-                       <Merge Id="MSVCRT8MFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_MFCLOC_x86.msm"/>
-                       <Merge Id="MSVCRT8PFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_MFCLOC_x86.msm"/>
-               <?endif?>
-       <?endif?>
+    <!-- Shared assembly runtime for VS 2010 -->
+    <!-- Note that these cause numerous LGHT1055 and ICE82 warnings.  They are unavoidable but innocuous.  -->
+    <?ifdef CL1600?>
+      <?ifdef env.CommonProgramFiles6432?>
+        <?define CPF="$(env.CommonProgramFiles(x86)"?>
+      <?else?>
+        <?define CPF="$(env.CommonProgramFiles)"?>
+      <?endif?>
+      <?if $(var.Platform) = "x64" ?>
+        <?ifndef Debug?>
+          <Merge Id="MSVCRT100MEM" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC100_CRT_x64.msm"/>
+          <Merge Id="MSVCRT100MFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC100_MFC_x64.msm"/>
+          <Merge Id="MSVCRT100MFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC100_MFCLOC_x64.msm"/>
+        <?else?>
+          <Merge Id="MSVCRT100MEM" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC100_DebugCRT_x64.msm"/>
+          <Merge Id="MSVCRT100MFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC100_DebugMFC_x64.msm"/>
+          <Merge Id="MSVCRT100MFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC100_MFCLOC_x64.msm"/>
+        <?endif?>
+      <?else?>
+        <?ifndef Debug?>
+          <Merge Id="MSVCRT100MEM" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC100_CRT_x86.msm"/>
+          <Merge Id="MSVCRT100MFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC100_MFC_x86.msm"/>
+          <Merge Id="MSVCRT100MFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC100_MFCLOC_x86.msm"/>
+        <?else?>
+          <Merge Id="MSVCRT100MEM" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC100_DebugCRT_x86.msm"/>
+          <Merge Id="MSVCRT100MFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC100_DebugMFC_x86.msm"/>
+          <Merge Id="MSVCRT100MFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC100_MFCLOC_x86.msm"/>
+        <?endif?>
+      <?endif?>
     <?endif?>
 
 </Directory>
index dd7b0b6ea147641efc9a8b5aa4a6af846503ef6e..c128e2b8f8d13e9adcc85c84b8b21e5d5078aa6c 100644 (file)
@@ -2,7 +2,7 @@
 {\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\nowidctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\f0\fs20 Copyright Notice and Legal Administrivia\par
 ----------------------------------------\par
 \par
-Copyright (C) 1985-2005 by the Massachusetts Institute of Technology.\par
+Copyright (C) 1985-2011 by the Massachusetts Institute of Technology.\par
 \par
 All rights reserved.\par
 \par
index ab7d0f5d78bd5fdee97dde2aaacee5e93ce254fa..fb7f37f6a1d89f4323d05a96eee20dc51718d963 100644 (file)
         <?define cmf_krb524_dll_name="krb524.dll"?>
         <?define cmf_krbcc32_dll_guid="56DAD1B9-4A59-46e6-81CA-54E2B6C9D618"?>
         <?define cmf_krbcc32_dll_name="krbcc64.dll"?>
-        <?define cmf_ccpaiserver_exe_guid="0192F58B-9129-426d-A271-E18455EDC80E"?>
+        <?define cmf_ccapiserver_exe_guid="0192F58B-9129-426d-A271-E18455EDC80E"?>
         <?define cmf_ccapiserver_exe_name="ccapiserver.exe"?>
         <?define cmf_krbv4w32_dll_guid="D195FADB-A3B0-4023-A824-8895552CDC56"?>
         <?define cmf_krbv4w32_dll_name="krbv4w64.dll"?>
-        <?define cmf_leash32_exe_guid="D195FADB-A3B0-4023-A824-8895552CDC56"?>
-        <?define csc_leash32_exe_guid="9D43350A-A8AE-4405-AB82-64E90E5A1A70"?>
+        <?define cmf_leash_exe_guid="D195FADB-A3B0-4023-A824-8895552CDC56"?>
+        <?define csc_leash_exe_guid="9D43350A-A8AE-4405-AB82-64E90E5A1A70"?>
         <?define rcm_leash_1_guid="7E5517FF-FB76-431f-A92B-2895C9BE7E98"?>
         <?define rcm_leash_2_guid="008208AC-46BE-4ca4-BEA7-8FCAAD8BA7C3"?>
         <?define rcm_leash_3_guid="66D97178-E735-499b-961F-C7B8B8074E1A"?>
         <?define cmf_ccapiserver_exe_name="ccapiserver.exe"?>
         <?define cmf_krbv4w32_dll_guid="DFA23F6C-5297-4876-AF52-6F7CF2CB34AC"?>
         <?define cmf_krbv4w32_dll_name="krbv4w32.dll"?>
-        <?define cmf_leash32_exe_guid="990D5F6B-4CEE-4706-96F4-F7AF12F97DF7"?>
-        <?define csc_leash32_exe_guid="8A096700-47B1-4A0B-B7B5-44F75086DEAE"?>
+        <?define cmf_leash_exe_guid="990D5F6B-4CEE-4706-96F4-F7AF12F97DF7"?>
+        <?define csc_leash_exe_guid="8A096700-47B1-4A0B-B7B5-44F75086DEAE"?>
         <?define rcm_leash_1_guid="B91648A0-26F7-43BB-A954-202FF3811E3C"?>
         <?define rcm_leash_2_guid="0D8DCC52-F855-4C46-86A1-198E6EE0CB8A"?>
         <?define rcm_leash_3_guid="9610A7E3-251F-4286-B776-1C3AF5DE7815"?>
index 7b09fea2cd3b81405b7b5e3ea0e71c824b5d37c5..a5f2163b058c16d5cabff2f007a5064e57d7fe2f 100644 (file)
@@ -1,90 +1,8 @@
 ï»¿<?xml version="1.0"?> 
 <Include>
-    <?ifdef CL1400 ?>
-               <MergeRef Id="MSVCRT8MEM"/>
-               <MergeRef Id="MSVCRT8POL"/>
-               <MergeRef Id="MSVCRT8MFC"/>
-               <MergeRef Id="MSVCRT8PFC"/>
-               <MergeRef Id="MSVCRT8MFL"/>
-               <MergeRef Id="MSVCRT8PFL"/>
+    <?ifdef CL1600 ?>
+      <MergeRef Id="MSVCRT100MEM"/>
+      <MergeRef Id="MSVCRT100MFC"/>
+      <MergeRef Id="MSVCRT100MFL"/>
     <?endif?>
-<?ifndef Debug?>
-    <?ifdef CL1310 ?>
-        <?ifdef comment?>
-        <MergeRef Id="mergeVC1310LibMFC" />
-        <MergeRef Id="mergeVC1310LibCRT" />
-        <?else?>
-            <ComponentRef Id="cmf_mfc71_dll" />
-            <ComponentRef Id="cmf_msvcr71_dll" />
-            <ComponentRef Id="cmf_msvcp71_dll" />
-            <ComponentRef Id="cmf_mfc71chs_dll" />
-            <ComponentRef Id="cmf_mfc71cht_dll" />
-            <ComponentRef Id="cmf_mfc71deu_dll" />
-            <ComponentRef Id="cmf_mfc71enu_dll" />
-            <ComponentRef Id="cmf_mfc71esp_dll" />
-            <ComponentRef Id="cmf_mfc71fra_dll" />
-            <ComponentRef Id="cmf_mfc71ita_dll" />
-            <ComponentRef Id="cmf_mfc71jpn_dll" />
-            <ComponentRef Id="cmf_mfc71kor_dll" />
-        <?endif?>
-    <?endif?>
-    <?ifdef CL1300 ?>
-        <?ifdef comment?>
-        <MergeRef Id="mergeVC1300LibMFC" />
-        <MergeRef Id="mergeVC1300LibCRT" />
-        <?else?>
-            <ComponentRef Id="cmf_mfc70_dll" />
-            <ComponentRef Id="cmf_msvcr70_dll" />
-            <ComponentRef Id="cmf_msvcp70_dll" />
-            <ComponentRef Id="cmf_mfc70chs_dll" />
-            <ComponentRef Id="cmf_mfc70cht_dll" />
-            <ComponentRef Id="cmf_mfc70deu_dll" />
-            <ComponentRef Id="cmf_mfc70enu_dll" />
-            <ComponentRef Id="cmf_mfc70esp_dll" />
-            <ComponentRef Id="cmf_mfc70fra_dll" />
-            <ComponentRef Id="cmf_mfc70ita_dll" />
-            <ComponentRef Id="cmf_mfc70jpn_dll" />
-            <ComponentRef Id="cmf_mfc70kor_dll" />
-        <?endif?>
-    <?endif?>
-    <?ifdef CL1200 ?>
-        <ComponentRef Id="cmf_mfc42_dll" />
-        <ComponentRef Id="cmf_msvcp60_dll" />
-        <ComponentRef Id="cmf_msvcrt_dll" />
-    <?endif?>
-<?else?>
-    <?ifdef CL1310 ?>
-        <ComponentRef Id="cmf_mfc71d_dll" />
-        <ComponentRef Id="cmf_msvcr71d_dll" />
-        <ComponentRef Id="cmf_msvcp71d_dll" />
-        <ComponentRef Id="cmf_mfc71chs_dll" />
-        <ComponentRef Id="cmf_mfc71cht_dll" />
-        <ComponentRef Id="cmf_mfc71deu_dll" />
-        <ComponentRef Id="cmf_mfc71enu_dll" />
-        <ComponentRef Id="cmf_mfc71esp_dll" />
-        <ComponentRef Id="cmf_mfc71fra_dll" />
-        <ComponentRef Id="cmf_mfc71ita_dll" />
-        <ComponentRef Id="cmf_mfc71jpn_dll" />
-        <ComponentRef Id="cmf_mfc71kor_dll" />
-    <?endif?>
-    <?ifdef CL1300 ?>
-        <ComponentRef Id="cmf_mfc70d_dll" />
-        <ComponentRef Id="cmf_msvcr70d_dll" />
-        <ComponentRef Id="cmf_msvcp70d_dll" />
-        <ComponentRef Id="cmf_mfc70chs_dll" />
-        <ComponentRef Id="cmf_mfc70cht_dll" />
-        <ComponentRef Id="cmf_mfc70deu_dll" />
-        <ComponentRef Id="cmf_mfc70enu_dll" />
-        <ComponentRef Id="cmf_mfc70esp_dll" />
-        <ComponentRef Id="cmf_mfc70fra_dll" />
-        <ComponentRef Id="cmf_mfc70ita_dll" />
-        <ComponentRef Id="cmf_mfc70jpn_dll" />
-        <ComponentRef Id="cmf_mfc70kor_dll" />
-    <?endif?>
-    <?ifdef CL1200 ?>
-        <ComponentRef Id="cmf_mfc42d_dll" />
-        <ComponentRef Id="cmf_msvcp60d_dll" />
-        <ComponentRef Id="cmf_msvcrtd_dll" />
-    <?endif?>
-<?endif?>
 </Include>
\ No newline at end of file
diff --git a/src/windows/installer/wix/site-local.wxi b/src/windows/installer/wix/site-local.wxi
new file mode 100644 (file)
index 0000000..80defd9
--- /dev/null
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Include xmlns="http://schemas.microsoft.com/wix/2003/01/wi">
+
+    <!-- User configurable options -->
+
+    <!-- Items enclosed in double percent marks will be substituted by
+        the build script. -->
+
+    <!-- TargetDir should point to build target directory and must end with
+         a backslash.  If not specified, assume we are in TargetDir\install -->
+
+    <!-- <?define TargetDir="%TARGETDIR%\"?> -->
+
+    <!-- ConfigDir should point to directory containing configuration files
+         (krb5.ini, krb.con, krbrealm.con) to be bundled with the installer.
+         The directory name should end with a backslash. -->
+
+    <!-- <?define ConfigDir="%CONFIGDIR-WIX%\"?> -->
+
+    <!-- VersionMajor, VersionMinor and VersionPatch must all be specified, or
+         none should be specified (in which case, the defaults will be
+         selected below. -->
+
+    <!-- version defs go here -->
+    <!--    <?define VersionMajor="%VERSION_MAJOR%"?>
+        <?define VersionMinor="%VERSION_MINOR%"?>
+        <?define VersionPatch="%VERSION_PATCH%"?> -->
+
+    <!-- BuildLang is the language code for the installation.  If you are
+         changing this, you should also change the ProductCode below. -->
+    <?ifndef BuildLang?>
+        <?define BuildLang="1033"?>
+    <?endif?>
+
+    <!-- ProductCode is an uppercase GUID.  Each release should have its
+         own ProductCode.  If one is not defined, we generate a random one. -->
+    <?ifndef ProductCode?>
+        <?define ProductCode="????????-????-????-????-????????????"?>
+    <?endif?>
+
+    <!-- DefaultRealm, is your default realm.  Must be uppercase -->
+    <?define DefaultRealm="ATHENA.MIT.EDU"?>
+
+    <!-- One of the following must be defined and must correspond to the
+         version of compiler used for building Kerberos for Windows -->
+
+    <!-- <?define CL1200?> -->
+    <!-- <?define CL1300?> -->
+    <!-- <?define CL1310?> -->
+    <!-- <?define CL1400?> -->
+    <?define CL1600?>
+
+    <!-- At most one of the following could be defined and must correspond
+         to the type of build performed. -->
+    <?define Debug?>
+    <!--<?define Release?>-->
+
+    <!-- We are including debug symbols anyway.  Undefine this for a leaner
+         installer without debug syms. -->
+    <?define DebugSyms?>
+
+    <!-- Optional defines -->
+    <!-- <?define Beta="1"?>  --> <!-- Numeric Beta identifier -->
+    <!-- <?define OldHelp?> --> <!-- Specifies the use of the old leash32.hlp file
+                           instead of the new leash32.chm file -->
+
+
+    <!-- End of user configurable options -->
+
+    <!-- Assert that required options are defined, or select defaults if
+         they weren't -->
+
+    <?ifndef TargetDir?>
+        <?define TargetDir="$(sys.SOURCEFILEDIR)..\..\..\"?>
+    <?endif?>
+
+    <?ifndef ConfigDir?>
+        <?define ConfigDir="$(env.SystemRoot)\"?>
+    <?endif?>
+
+    <?ifndef VersionMajor?>
+        <?define VersionMajor="4"?>
+        <?define VersionMinor="0"?>
+        <?define VersionPatch="0"?>
+    <?else?>
+        <?if Not ($(var.VersionMinor) And $(var.VersionPatch))?>
+            <?error VersionMajor, VersionMinor and VersionPatch should be specified together?>
+        <?endif?>
+    <?endif?>
+
+    <?ifndef ProductCode?>
+        <?error Must define ProductCode?>
+    <?endif?>
+
+    <?ifndef BuildLang?>
+        <?error Must define BuildLang?>
+    <?endif?>
+
+    <!-- DefaultRealm.  Must be uppercase. -->
+    <?ifndef DefaultRealm?>
+        <?error Must define DefaultRealm?>
+    <?endif?>
+
+    <!-- The build makefile defines 'Date' and 'Time' which are strings that
+         identify the time at which the build was performed. -->
+</Include>
index 7dac506f13fa256ecf83f540616de98c1351686b..7b76c011ec022ccd01a67cf5eed995bde7792f3a 100644 (file)
@@ -231,7 +231,7 @@ BOOL CKrbRealmHostMaintenance::OnApply()
                                   "Leash", MB_OK);
        }
 
-
+#ifndef NO_KRB4
     // Save to Kerberos Four config. file "Krb.con"
     CStdioFile krbCon;
        if (!krbCon.Open(CKrbProperties::m_krbPath, CFile::modeCreate |
@@ -325,6 +325,7 @@ BOOL CKrbRealmHostMaintenance::OnApply()
         krbCon.WriteString(".KERBEROS.OPTION. dns\n");
 
     krbCon. Close();
+#endif // NO_KRB4
     return TRUE;
 }
 
index 88ee7356a060a4006d428461912f7df045082614..0c68faf5eda0d71867169437c602a23d295be651 100644 (file)
@@ -26,6 +26,7 @@
 #include "mitwhich.h"
 #include <leasherr.h>
 #include "lglobals.h"
+#include "out2con.h"
 #include <krb5.h>
 #include <com_err.h>
 
@@ -240,7 +241,7 @@ BOOL CLeashApp::InitInstance()
                 }
                 ReleaseMutex(ticketinfo.lockObj);
 
-                               ldi.size = sizeof(ldi);
+                               ldi.size = LSH_DLGINFO_EX_V1_SZ;
                                ldi.dlgtype = DLGTYPE_PASSWD;
                 ldi.title = "Initialize Ticket";
                 ldi.username = username;
@@ -305,6 +306,11 @@ BOOL CLeashApp::InitInstance()
             {
                 autoInit = TRUE;
             }
+            else if (0 == stricmp(optionParam+1, "console") ||
+                     0 == stricmp(optionParam+1, "c"))
+            {
+                CreateConsoleEcho();
+            }
             else
             {
                 MessageBox(hMsg,
@@ -312,6 +318,7 @@ BOOL CLeashApp::InitInstance()
                             "'-renew' or '-r' to perform ticket renewal (and exit)\n"
                             "'-destroy' or '-d' to perform ticket destruction (and exit)\n"
                             "'-autoinit' or '-a' to perform automatic ticket initialization\n"
+                            "'-console' or '-c' to attach a console for debugging\n"
                             "'-ms2mit' or '-import' or '-m' to perform ticket importation (and exit)",
                            "Leash Error", MB_OK);
                 return FALSE;
@@ -1459,7 +1466,7 @@ CLeashApp::ObtainTicketsViaUserIfNeeded(HWND hWnd)
             ReleaseMutex(m_tgsReqMutex);
 #endif
             LSH_DLGINFO_EX ldi;
-            ldi.size = sizeof(ldi);
+            ldi.size = LSH_DLGINFO_EX_V1_SZ;
             ldi.dlgtype = DLGTYPE_PASSWD;
             ldi.title = "Initialize Ticket";
             ldi.username = NULL;
@@ -1492,7 +1499,7 @@ CLeashApp::ObtainTicketsViaUserIfNeeded(HWND hWnd)
             ReleaseMutex(m_tgsReqMutex);
 #endif
             LSH_DLGINFO_EX ldi;
-            ldi.size = sizeof(ldi);
+            ldi.size = LSH_DLGINFO_EX_V1_SZ;
             ldi.dlgtype = DLGTYPE_PASSWD;
             ldi.title = "Initialize Ticket";
             ldi.username = NULL;
@@ -1518,7 +1525,7 @@ CLeashApp::ObtainTicketsViaUserIfNeeded(HWND hWnd)
             ReleaseMutex(m_tgsReqMutex);
 #endif
             LSH_DLGINFO_EX ldi;
-            ldi.size = sizeof(ldi);
+            ldi.size = LSH_DLGINFO_EX_V1_SZ;
             ldi.dlgtype = DLGTYPE_PASSWD;
             ldi.title = "Initialize Ticket";
             ldi.username = NULL;
@@ -1616,7 +1623,7 @@ CLeashApp::InitWorker(void * hWnd)
 #endif
     if ( ProbeKDC() ) {
         LSH_DLGINFO_EX ldi;
-        ldi.size = sizeof(ldi);
+        ldi.size = LSH_DLGINFO_EX_V1_SZ;
         ldi.dlgtype = DLGTYPE_PASSWD;
         ldi.title = "Initialize Ticket";
         ldi.username = NULL;
index 7975987d1f8157c7e91b15c06237d2098d25473d..557e40f2bc72450e9805e5f9a2b2bf0ffec8df60 100644 (file)
@@ -25,7 +25,9 @@
 #endif
 
 // Help
-#define HID_GET_TICKETS_COMMAND                        98312
+#define HID_GET_TICKETS_COMMAND                        98343 // ID_INIT_TICKET + 65536
+#define HID_RENEW_TICKETS_COMMAND       98312 // ID_RENEW_TICKET + 65536
+#define HID_IMPORT_TICKETS_COMMAND      98342 // ID_IMPORT_TICKET + 65536
 #define HID_DESTROY_TICKETS_COMMAND     98313
 #define HID_SYNCHRONIZE_TIME_OPTION     98314
 #define HID_CHANGE_PASSWORD_COMMAND            98315
@@ -68,8 +70,7 @@
 #define HID_KERBEROS_PROPERTIES_EDITHOST 131271
 #define HID_KERBEROS_PROPERTIES_LISTDOM 131279
 
-////@#+This might be problematic with the latest Platform SDK...
-////#define USE_HTMLHELP
+#define USE_HTMLHELP
 
 #ifdef USE_HTMLHELP
 #if _MSC_VER >= 1300
index 0089baf5aad218655d96a0ac2951c38a1f216483..2854231739354848ceb4fd6df7b90bffb164cec4 100644 (file)
 static char THIS_FILE[] = __FILE__;
 #endif
 
-////Some unknown Platform SDK/VC uglines
-#if defined(__HTMLHELP_H__)
-#ifdef HtmlHelp
-#undef HtmlHelp
-#endif
-#endif
-
-
 /////////////////////////////////////////////////////////////////////////////
 // CLeashProperties dialog
 
index 14f9fc1314647ef994908ffce041cb2322411133..1b67937c5141a8961b692564de062bd09dcbc343 100644 (file)
@@ -44,6 +44,7 @@ IMPLEMENT_DYNCREATE(CLeashView, CFormView)
 
 BEGIN_MESSAGE_MAP(CLeashView, CFormView)
        //{{AFX_MSG_MAP(CLeashView)
+    ON_MESSAGE(WM_WARNINGPOPUP, OnWarningPopup)
        ON_MESSAGE(WM_GOODBYE, OnGoodbye)
     ON_MESSAGE(WM_TRAYICON, OnTrayIcon)
     ON_NOTIFY(TVN_ITEMEXPANDED, IDC_TREEVIEW, OnItemexpandedTreeview)
@@ -172,7 +173,7 @@ CFormView(CLeashView::IDD)
     m_publicIPAddress = 0;
     m_autoRenewTickets = 0;
     m_autoRenewalAttempted = 0;
-
+    m_pWarningMessage = NULL;
     m_bIconAdded = FALSE;
     m_bIconDeleted = FALSE;
 #ifndef KRB5_TC_NOTICKET
@@ -1010,7 +1011,7 @@ VOID CLeashView::OnUpdateDisplay()
 
     m_tvinsert.hParent = NULL;
     m_tvinsert.hInsertAfter = TVI_LAST;
-    m_tvinsert.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT;
+    m_tvinsert.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE;
     m_tvinsert.item.hItem = NULL;
     m_tvinsert.item.state = 0;
     m_tvinsert.item.stateMask = 0; //TVIS_EXPANDED;
@@ -1018,6 +1019,7 @@ VOID CLeashView::OnUpdateDisplay()
 
     if (CLeashApp::m_hKrb5DLL && m_listKrb5) {
         m_tvinsert.item.pszText = ticketinfo.Krb5.principal;
+        m_tvinsert.item.mask |= TVIF_TEXT;
         switch ( iconStatusKrb5 ) {
         case ACTIVE_TICKET:
             m_tvinsert.item.iSelectedImage = ACTIVE_PARENT_NODE;
@@ -1033,6 +1035,7 @@ VOID CLeashView::OnUpdateDisplay()
 #ifndef NO_KRB4
     } else if (CLeashApp::m_hKrb4DLL && m_listKrb4) {
         m_tvinsert.item.pszText = ticketinfo.Krb4.principal;
+        m_tvinsert.item.mask |= TVIF_TEXT;
         switch ( iconStatusKrb4 ) {
         case ACTIVE_TICKET:
             m_tvinsert.item.iSelectedImage = ACTIVE_PARENT_NODE;
@@ -1047,6 +1050,7 @@ VOID CLeashView::OnUpdateDisplay()
 #endif
     } else {
         m_tvinsert.item.iSelectedImage = NONE_PARENT_NODE;
+        m_tvinsert.item.pszText = NULL;
     }
     m_tvinsert.item.iImage = m_tvinsert.item.iSelectedImage;
     m_tvinsert.item.cChildren = 0;
@@ -2070,6 +2074,27 @@ void CLeashView::SetTrayIcon(int nim, int state)
         m_bIconDeleted = TRUE;
 }
 
+BOOL CLeashView::PostWarningMessage(const CString& message)
+{
+    if (m_pWarningMessage)
+    {
+        return FALSE; // can't post more than one warning at a time
+    }
+    m_pWarningMessage = new CString(message);
+    PostMessage(WM_WARNINGPOPUP);
+    return TRUE;
+}
+
+LRESULT CLeashView::OnWarningPopup(WPARAM wParam, LPARAM lParam)
+{
+    CLeashMessageBox leashMessageBox(CMainFrame::m_isMinimum ? GetDesktopWindow() : NULL,
+                                        *m_pWarningMessage, 100000);
+    leashMessageBox.DoModal();
+    delete m_pWarningMessage;
+    m_pWarningMessage = NULL;
+    return 0L;
+}
+
 BOOL CLeashView::PreTranslateMessage(MSG* pMsg)
 {
        if ( pMsg->message == ID_OBTAIN_TGT_WITH_LPARAM )
@@ -2461,9 +2486,7 @@ BOOL CLeashView::PreTranslateMessage(MSG* pMsg)
 
                 ReleaseMutex(ticketinfo.lockObj);
                 AlarmBeep();
-                CLeashMessageBox leashMessageBox(!CMainFrame::m_isMinimum ? GetDesktopWindow() : NULL,
-                                                  lowTicketWarning, 100000);
-                leashMessageBox.DoModal();
+                PostWarningMessage(lowTicketWarning);
                 if (WaitForSingleObject( ticketinfo.lockObj, 100 ) != WAIT_OBJECT_0)
                     throw("Unable to lock ticketinfo");
             }
index e469058ae0393152176c9853aea0e6260e62bf7d..0d9009a34cbaf3241dfffcebf588f7c3d540218d 100644 (file)
@@ -59,6 +59,7 @@
 #endif
 
 #define WM_TRAYICON (WM_USER+100)
+#define WM_WARNINGPOPUP (WM_USER+101)
 
 enum ticketTimeLeft{NO_TICKETS, ZERO_MINUTES_LEFT, FIVE_MINUTES_LEFT, TEN_MINUTES_LEFT,
                                        FIFTEEN_MINUTES_LEFT, TWENTY_MINUTES_LEFT, PLENTY_OF_TIME,
@@ -106,6 +107,7 @@ private:
 #endif
        INT                                     m_hKerb5State;
        INT                                     m_hAFSState;
+    CString*            m_pWarningMessage;
     BOOL                m_bIconAdded;
     BOOL                m_bIconDeleted;
 
@@ -154,6 +156,12 @@ private:
     static UINT InitTicket(void *);
     static UINT RenewTicket(void *);
     static UINT ImportTicket(void *);
+    // Queue a warning popup message.
+    // This is a workaround to the MFC deficiency that you cannot safely create
+    // a modal dialog while processing messages within AfxPreTranslateMessage()
+    // returns TRUE if message is queued successfully.
+    BOOL PostWarningMessage(const CString& message);
+    afx_msg LRESULT OnWarningPopup(WPARAM wParam, LPARAM lParam);
 
 protected: // create from serialization only
        DECLARE_DYNCREATE(CLeashView)
index 777e056bb451605cf95a33cadba63451e840e250..2ec5f756a8c6636d08025c7be9c34580b0c7d9cc 100644 (file)
@@ -216,19 +216,21 @@ extern DECL_FUNC_PTR(profile_release_string);
 #define OFF 0
 #define TRUE_FLAG              1
 #define FALSE_FLAG             0
+#ifdef _WIN64
+#define LEASHDLL "leashw64.dll"
+#define KERB5DLL "krb5_64.dll"
+#define KERB5_PPROFILE_DLL "xpprof64.dll"
+#else
 #define LEASHDLL "leashw32.dll"
-#define KERB4DLL "krbv4w32.dll"
 #define KERB5DLL "krb5_32.dll"
 #define KERB5_PPROFILE_DLL "xpprof32.dll"
+#endif
 #define SECUR32DLL "secur32.dll"
-
 #define KRB_FILE               "KRB.CON"
 #define KRBREALM_FILE  "KRBREALM.CON"
 #define TICKET_FILE            "TICKET.KRB"
-////Wow. Why?
-#define WIN95_AUTOEXEC  "C:\\AUTOEXEC.BAT"
 
-#define LEASH_HELP_FILE "leash32.chm"
+#define LEASH_HELP_FILE "leash.chm"
 
 extern int  config_boolean_to_int(const char *);
 extern BOOL SetRegistryVariable(const CString& regVariable,
index 1b1ae69056e502f14dbf1780297c5b9ffdf7cb20..3f98c951b12fb5a51f6cc77a57d8fb601cad3b40 100644 (file)
@@ -15,14 +15,15 @@ AFS_LIBS=
 !endif
 
 MFCLIB=MFC100D.LIB
-EXE_NAME=leash32
+EXE_NAME=leash
 WSHELPER=wshelp32
 
 !if ("$(CPU)" == "IA64") || ("$(CPU)" == "AMD64") || ("$(CPU)" == "ALPHA64")
-EXE_NAME=leash64
 WSHELPER=wshelp64
 !endif
 
+SUBDIRS= htmlhelp
+
 OBJS=   \
        $(OUTPRE)Krb4EditDomainRealmList.obj \
        $(OUTPRE)CLeashDragListBox.obj \
@@ -46,6 +47,7 @@ OBJS=   \
        $(OUTPRE)LeashView.obj \
        $(OUTPRE)lglobals.obj \
        $(OUTPRE)MainFrm.obj \
+       $(OUTPRE)out2con.obj \
        $(OUTPRE)StdAfx.obj \
        $(OUTPRE)AfsProperties.obj \
        $(OUTPRE)VSroutines.obj \
diff --git a/src/windows/leash/htmlhelp/Images/Bullet.gif b/src/windows/leash/htmlhelp/Images/Bullet.gif
new file mode 100644 (file)
index 0000000..090f96c
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Bullet.gif differ
diff --git a/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_10.jpg b/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_10.jpg
new file mode 100644 (file)
index 0000000..fdbfe84
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_10.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_11.jpg b/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_11.jpg
new file mode 100644 (file)
index 0000000..45eaa8b
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_11.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_12.jpg b/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_12.jpg
new file mode 100644 (file)
index 0000000..c3c73d5
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_12.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_13.jpg b/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_13.jpg
new file mode 100644 (file)
index 0000000..5fec2fb
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_13.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_5.jpg b/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_5.jpg
new file mode 100644 (file)
index 0000000..517a342
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_5.jpg differ
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
new file mode 100644 (file)
index 0000000..536bc77
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_6.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_7.jpg b/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_7.jpg
new file mode 100644 (file)
index 0000000..b61a044
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_7.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_8.jpg b/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_8.jpg
new file mode 100644 (file)
index 0000000..c45ecc1
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_8.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_9.jpg b/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_9.jpg
new file mode 100644 (file)
index 0000000..c6a8e55
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Kerberos_auth_serv_fig_9.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_about_leash.jpg b/src/windows/leash/htmlhelp/Images/Leash_about_leash.jpg
new file mode 100644 (file)
index 0000000..bb6a1d5
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_about_leash.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_change_password.JPG b/src/windows/leash/htmlhelp/Images/Leash_change_password.JPG
new file mode 100644 (file)
index 0000000..ade00bc
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_change_password.JPG differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_debug_window.jpg b/src/windows/leash/htmlhelp/Images/Leash_debug_window.jpg
new file mode 100644 (file)
index 0000000..56c06cc
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_debug_window.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_display_window.jpg b/src/windows/leash/htmlhelp/Images/Leash_display_window.jpg
new file mode 100644 (file)
index 0000000..c022797
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_display_window.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_init_ticket_advanced.jpg b/src/windows/leash/htmlhelp/Images/Leash_init_ticket_advanced.jpg
new file mode 100644 (file)
index 0000000..b78716e
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_init_ticket_advanced.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_init_ticket_basic.jpg b/src/windows/leash/htmlhelp/Images/Leash_init_ticket_basic.jpg
new file mode 100644 (file)
index 0000000..09552c8
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_init_ticket_basic.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_menu_action.jpg b/src/windows/leash/htmlhelp/Images/Leash_menu_action.jpg
new file mode 100644 (file)
index 0000000..a5e6581
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_menu_action.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_menu_file.jpg b/src/windows/leash/htmlhelp/Images/Leash_menu_file.jpg
new file mode 100644 (file)
index 0000000..b78fb93
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_menu_file.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_menu_help.jpg b/src/windows/leash/htmlhelp/Images/Leash_menu_help.jpg
new file mode 100644 (file)
index 0000000..215891b
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_menu_help.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_menu_options.jpg b/src/windows/leash/htmlhelp/Images/Leash_menu_options.jpg
new file mode 100644 (file)
index 0000000..808e7c2
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_menu_options.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_menu_view.jpg b/src/windows/leash/htmlhelp/Images/Leash_menu_view.jpg
new file mode 100644 (file)
index 0000000..8c13358
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_menu_view.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_properties_afs.jpg b/src/windows/leash/htmlhelp/Images/Leash_properties_afs.jpg
new file mode 100644 (file)
index 0000000..389bc80
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_properties_afs.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_properties_krb4.jpg b/src/windows/leash/htmlhelp/Images/Leash_properties_krb4.jpg
new file mode 100644 (file)
index 0000000..1fb585d
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_properties_krb4.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_properties_krb5_1.jpg b/src/windows/leash/htmlhelp/Images/Leash_properties_krb5_1.jpg
new file mode 100644 (file)
index 0000000..57b99af
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_properties_krb5_1.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_properties_krb5_2.jpg b/src/windows/leash/htmlhelp/Images/Leash_properties_krb5_2.jpg
new file mode 100644 (file)
index 0000000..597a6e6
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_properties_krb5_2.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_properties_krb_1.jpg b/src/windows/leash/htmlhelp/Images/Leash_properties_krb_1.jpg
new file mode 100644 (file)
index 0000000..797a2ff
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_properties_krb_1.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_properties_krb_2.jpg b/src/windows/leash/htmlhelp/Images/Leash_properties_krb_2.jpg
new file mode 100644 (file)
index 0000000..871cabb
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_properties_krb_2.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_properties_krb_3.jpg b/src/windows/leash/htmlhelp/Images/Leash_properties_krb_3.jpg
new file mode 100644 (file)
index 0000000..9175442
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_properties_krb_3.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_properties_krb_4.jpg b/src/windows/leash/htmlhelp/Images/Leash_properties_krb_4.jpg
new file mode 100644 (file)
index 0000000..948c3e4
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_properties_krb_4.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_properties_leash.jpg b/src/windows/leash/htmlhelp/Images/Leash_properties_leash.jpg
new file mode 100644 (file)
index 0000000..2358a6e
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_properties_leash.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_systray_icons.jpg b/src/windows/leash/htmlhelp/Images/Leash_systray_icons.jpg
new file mode 100644 (file)
index 0000000..fb8ff66
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_systray_icons.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_systray_menu.jpg b/src/windows/leash/htmlhelp/Images/Leash_systray_menu.jpg
new file mode 100644 (file)
index 0000000..3145019
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_systray_menu.jpg differ
diff --git a/src/windows/leash/htmlhelp/Images/Leash_toolbar.jpg b/src/windows/leash/htmlhelp/Images/Leash_toolbar.jpg
new file mode 100644 (file)
index 0000000..d66952b
Binary files /dev/null and b/src/windows/leash/htmlhelp/Images/Leash_toolbar.jpg differ
diff --git a/src/windows/leash/htmlhelp/Makefile.in b/src/windows/leash/htmlhelp/Makefile.in
new file mode 100644 (file)
index 0000000..b953c38
--- /dev/null
@@ -0,0 +1,23 @@
+BUILDTOP=..\..\..
+
+TARGETTYPE=NONE
+
+TARGET=leash.chm
+HHK=leash32.hhk
+HHP=leash32.hhp
+ERR=leash.log
+
+all:: $(TARGET) rename
+
+clean::
+       @if exist $(TARGET) del $(TARGET)
+       @if exist $(ERR) del $(ERR)
+
+rename:
+       @if exist $(TARGET) ren $(TARGET) $(TARGET)
+       @if exist $(ERR) ren $(ERR) $(ERR)
+
+# We rename the file to get a lower-case file.
+# It looks like the silly help compiler gives us uppercase.
+$(TARGET): $(HHK) $(HHP)
+   - hhc $(HHP)
diff --git a/src/windows/leash/htmlhelp/Table of Contents.hhc b/src/windows/leash/htmlhelp/Table of Contents.hhc
new file mode 100644 (file)
index 0000000..5e50e24
--- /dev/null
@@ -0,0 +1,232 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<HTML>
+<HEAD>
+<meta name="GENERATOR" content="Microsoft&reg; HTML Help Workshop 4.1">
+<!-- Sitemap 1.0 -->
+</HEAD><BODY>
+<OBJECT type="text/site properties">
+       <param name="Auto Generated" value="Yes">
+</OBJECT>
+<UL>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Name" value="Why Use Leash?">
+               <param name="Local" value="html/leash_topic_why_use.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Name" value="Leash Help Topics">
+               <param name="Local" value="html/leash_topic_leash_help_topics.htm">
+               </OBJECT>
+       <UL>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Name" value="Leash Screen Display (Kerberometer and Dash Notification)">
+                       <param name="Local" value="html/leash_topic_leash_window.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Name" value="Leash System Tray Tool">
+                       <param name="Local" value="html/leash_topic_leash_systray.htm">
+                       </OBJECT>
+               <UL>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="System Tray Menu">
+                               <param name="Local" value="html/leash_topic_leash_systray.htm">
+                               </OBJECT>
+               </UL>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Name" value="Leash Commands">
+                       <param name="Local" value="html/leash_menu_commands.htm">
+                       </OBJECT>
+               <UL>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Exit Command">
+                               <param name="Local" value="html/leash_file_exit.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Get Ticket(s)/Token(s) Command, Ctrl+T">
+                               <param name="Local" value="html/leash_command_get_tickets.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Import Ticket(s)/Token(s) Command, Ctrl+I">
+                               <param name="Local" value="html/leash_command_import_tickets.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Renew Ticket(s)/Token(s) Command, Ctrl+R">
+                               <param name="Local" value="html/leash_command_renew_tickets.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Destroy Ticket(s)/Token(s) Command, Ctrl+D">
+                               <param name="Local" value="html/leash_command_destroy_tickets.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Change Password Command">
+                               <param name="Local" value="html/leash_command_change_password.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Reset Window Size/Pos Option">
+                               <param name="Local" value="html/leash_command_reset_window.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Synchronize Time">
+                               <param name="Local" value="html/leash_command_sync_time.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Update Display Command, F5">
+                               <param name="Local" value="html/leash_command_update_display.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Large Icons">
+                               <param name="Local" value="html/leash_view_large_icons.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Leash Toolbar">
+                               <param name="Local" value="html/leash_view_toolbar.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Status Bar">
+                               <param name="Local" value="html/leash_view_status_bar.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Debug Window">
+                               <param name="Local" value="html/leash_view_debug_window.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Automatic Ticket Renewal Option">
+                               <param name="Local" value="html/leash_option_auto_renewal.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Destroy Tickets/Tokens on Exit Option">
+                               <param name="Local" value="html/leash_option_destroy_tickets_on_exit.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Expiration Alarm Option">
+                               <param name="Local" value="html/leash_option_expiration_alarm.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Upper Case Realm Name Option">
+                               <param name="Local" value="html/leash_option_upper_case_realm.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Leash Properties\85 Command, Ctrl+L">
+                               <param name="Local" value="html/leash_option_leash_properties.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Kerberos Properties Command, Ctrl+K">
+                               <param name="Local" value="html/leash_option_kerberos_properties.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Kerberos v4 Properties\85 Command, Ctrl+4">
+                               <param name="Local" value="html/leash_option_krb4_properties.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="Kerberos v5 Properties Command, Ctrl+5">
+                               <param name="Local" value="html/leash_option_krb5_properties.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="AFS Properties Command, Ctrl+A">
+                               <param name="Local" value="html/leash_option_afs_properties.htm">
+                               </OBJECT>
+                       <LI> <OBJECT type="text/sitemap">
+                               <param name="Name" value="About Leash">
+                               <param name="Local" value="html/leash_help_about_leash32.htm">
+                               </OBJECT>
+               </UL>
+       </UL>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Name" value="Kerberos Help Topics">
+               <param name="Local" value="html/leash_topic_kerberos_help_topics.htm">
+               </OBJECT>
+       <UL>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Name" value="About Kerberos">
+                       <param name="Local" value="html/leash_topic_about_kerberos.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Name" value="Kerberos Names">
+                       <param name="Local" value="html/leash_topic_kerberos_names.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Name" value="Kerberos Tickets">
+                       <param name="Local" value="html/leash_topic_kerberos_tickets.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Name" value="Using Kerberos in a Command Prompt Environment">
+                       <param name="Local" value="html/leash_topic_kerberos_command_prompt.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Name" value="Kerberos Timing Issues">
+                       <param name="Local" value="html/leash_topic_timing_issues.htm">
+                       </OBJECT>
+       </UL>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Name" value="Kerberos for Windows Command Line Tools Manpages">
+               <param name="Local" value="html/leash_manpages.htm">
+               </OBJECT>
+       <UL>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Name" value="KINIT Command">
+                       <param name="Local" value="html/leash_manpage_kinit.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Name" value="KLIST Command">
+                       <param name="Local" value="html/leash_manpage_klist.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Name" value="KDESTROY Command">
+                       <param name="Local" value="html/leash_manpage_kdestroy.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Name" value="MS2MIT Command">
+                       <param name="Local" value="html/leash_manpage_ms2mit.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Name" value="AKLOG Command">
+                       <param name="Local" value="html/leash_manpage_aklog.htm">
+                       </OBJECT>
+       </UL>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Name" value="Common Leash Error Messages">
+               <param name="Local" value="html/leash_errors.htm">
+               </OBJECT>
+       <UL>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Name" value="Kerberos Error 8: Unknown username, instance, or realm.">
+                       <param name="Local" value="html/leash_topic_error_8.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Name" value="Kerberos Error 57: Cannot contact the Kerberos server for the selected realm.">
+                       <param name="Local" value="html/leash_topic_error_57.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Name" value="Kerberos Error 62: Password incorrect.">
+                       <param name="Local" value="html/leash_topic_error_62.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Name" value="Invalid principal.">
+                       <param name="Local" value="html/leash_topic_error_invalid_principal.htm">
+                       </OBJECT>
+       </UL>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Name" value="How To Use Leash Online Help">
+               <param name="Local" value="html/leash_topic_online_help.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Name" value="Leash Copyright">
+               <param name="Local" value="html/leash_copyright.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Name" value="Kerberos Copyright">
+               <param name="Local" value="html/leash_kerberos_copyright.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Name" value="Kerberos Export Restrictions and Source Code Access">
+               <param name="Local" value="html/leash_export.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Name" value="Reporting Bugs and Requesting Assistance">
+               <param name="Local" value="html/leash_bug_reports.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Name" value="The MIT Kerberos Team">
+               <param name="Local" value="html/leash_acknowledgements.htm">
+               </OBJECT>
+</UL>
+</BODY></HTML>
diff --git a/src/windows/leash/htmlhelp/html/afx_hidw_status_bar.htm b/src/windows/leash/htmlhelp/html/afx_hidw_status_bar.htm
new file mode 100644 (file)
index 0000000..82cb4d9
--- /dev/null
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>(status bar)</TITLE>
+</HEAD>
+
+<BODY>
+
+
+<OBJECT TYPE="application/x-oleobject" CLASSID="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
+       <PARAM NAME="Keyword" VALUE="status bar">
+</OBJECT>
+
+<P><A NAME="afx_hidw_status_bar"></A><B>Status Bar</B></P>
+
+<P>The status bar is displayed at the bottom of the &lt;&lt;YourApp&gt;&gt; window.  To display or hide the status bar, use the
+<b> Status Bar</b> command in the <b> View</b> menu.</P>
+
+<P>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.</P>
+
+<P>The right areas of the status bar indicate which of the following keys are latched down:</P>
+
+<P><B>Indicator &nbsp;&nbsp;&nbsp;Description</B></P>
+
+<P>CAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Caps Lock key is latched down.</P>
+
+<P>NUM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Num Lock key is latched down.</P>
+
+<P>SCRL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Scroll Lock key is latched down.</P>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/afx_hidw_toolbar.htm b/src/windows/leash/htmlhelp/html/afx_hidw_toolbar.htm
new file mode 100644 (file)
index 0000000..fc47454
--- /dev/null
@@ -0,0 +1,23 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>(toolbar)</TITLE>
+</HEAD>
+
+<BODY>
+
+
+<OBJECT TYPE="application/x-oleobject" CLASSID="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e" width="14" height="14">
+       <PARAM NAME="Keyword" VALUE="toolbar">
+</OBJECT>
+
+<P><A NAME="afx_hidw_toolbar"></A><B>Toolbar</B></P>
+
+
+<P>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 &lt;&lt;YourApp&gt;&gt;,</P>
+
+<P>To hide or display the toolbar, click <b>Toolbar</b> from the <b> View</b> menu.</P>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/hid_app_about.htm b/src/windows/leash/htmlhelp/html/hid_app_about.htm
new file mode 100644 (file)
index 0000000..538cc9e
--- /dev/null
@@ -0,0 +1,16 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>(About command (Help menu))</TITLE>
+</HEAD>
+
+<BODY>
+
+
+<P><A NAME="hid_app_about"></A><B>About command (Help menu)</B></P>
+
+<P>Use this command to display the copyright notice and version number of your copy of &lt;&lt;YourApp&gt;&gt;.</P>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/hid_app_exit.htm b/src/windows/leash/htmlhelp/html/hid_app_exit.htm
new file mode 100644 (file)
index 0000000..805f043
--- /dev/null
@@ -0,0 +1,22 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>(File Exit command)</TITLE>
+</HEAD>
+
+<BODY>
+
+
+<OBJECT TYPE="application/x-oleobject" CLASSID="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
+       <PARAM NAME="Keyword" VALUE="exit">
+</OBJECT>
+
+<P><A NAME="hid_app_exit"></A><B>Exit command (File menu)</B></P>
+
+<P>Use this command to end your &lt;&lt;YourApp&gt;&gt; session.  You can also use the
+<b> Close</b> command on the application <b> Control</b> menu.  &lt;&lt;YourApp&gt;&gt; prompts you to save documents with unsaved changes.</P>
+
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/hid_context_help.htm b/src/windows/leash/htmlhelp/html/hid_context_help.htm
new file mode 100644 (file)
index 0000000..34f742e
--- /dev/null
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>(Help Using Help Command)</TITLE>
+</HEAD>
+
+<BODY>
+
+
+<P><A NAME="hid_context_help"></A><B>Context Help command </B></P>
+
+
+<P>Use this command to obtain help on some portion of &lt;&lt;YourApp&gt;&gt;.  When you choose the
+toolbar's <b> Context Help</b> button, the mouse pointer will change to an arrow and question mark.  Then click somewhere in the &lt;&lt;YourApp&gt;&gt; window, such as another
+toolbar button.  The help topic will be shown for the item you clicked.</P>
+
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/hid_help_index.htm b/src/windows/leash/htmlhelp/html/hid_help_index.htm
new file mode 100644 (file)
index 0000000..9356177
--- /dev/null
@@ -0,0 +1,18 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>(Index command (Help menu))</TITLE>
+</HEAD>
+
+<BODY>
+
+
+<P><A NAME="hid_help_index"></A><B>Index command (Help menu)</B></P>
+
+<P>Use this command to display the opening screen of help.  From the opening screen, you can jump to step-by-step instructions for using &lt;&lt;YourApp&gt;&gt; and various types of reference information.  </P>
+
+<P>Once you open help, you can click the <b> Contents</b> button whenever you want to return to the opening screen.</P>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/hid_help_using.htm b/src/windows/leash/htmlhelp/html/hid_help_using.htm
new file mode 100644 (file)
index 0000000..bcf07e8
--- /dev/null
@@ -0,0 +1,16 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>(Using Help command (Help menu))</TITLE>
+</HEAD>
+
+<BODY>
+
+
+<P><A NAME="hid_help_using"></A><B>Using Help command (Help menu)</B></P>
+
+<P>Use this command for instructions about using help.</P>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/hid_sc_close.htm b/src/windows/leash/htmlhelp/html/hid_sc_close.htm
new file mode 100644 (file)
index 0000000..775be73
--- /dev/null
@@ -0,0 +1 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML><HEAD><META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252"><TITLE>(Close command (Control menus))</TITLE></HEAD><BODY><P><A NAME="hid_sc_close"></A><B>Close command (Control menus)</B></P><P>Use this command to close the active window or dialog box.</P><P>Double-clicking a <b>Control</b> menu box is the same as choosing the <b> Close</b> command.</P><P>Note:  If you have multiple windows open for a single document, the <b> Close</b> command on the document<b> Control</b> menu closes only one window at a time.  You can close all windows at once with the<b> Close</b> command on the <b> File</b> menu.</P></BODY></HTML>
diff --git a/src/windows/leash/htmlhelp/html/hid_sc_maximize.htm b/src/windows/leash/htmlhelp/html/hid_sc_maximize.htm
new file mode 100644 (file)
index 0000000..241292d
--- /dev/null
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>(Maximize command (System menu))</TITLE>
+</HEAD>
+
+<BODY>
+
+
+<P><A NAME="hid_sc_maximize"></A><B>Maximize command (System menu)</B></P>
+
+<P>Use this command to enlarge the active window to fill the available space.</P>
+
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/hid_sc_minimize.htm b/src/windows/leash/htmlhelp/html/hid_sc_minimize.htm
new file mode 100644 (file)
index 0000000..118fe1e
--- /dev/null
@@ -0,0 +1,16 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>(System Minimize Command)</TITLE>
+</HEAD>
+
+<BODY>
+
+
+<P><A NAME="hid_sc_minimize"></A><B>Minimize command (application Control menu)</B></P>
+
+<P>Use this command to reduce the &lt;&lt;YourApp&gt;&gt; window to an icon.</P>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/hid_sc_move.htm b/src/windows/leash/htmlhelp/html/hid_sc_move.htm
new file mode 100644 (file)
index 0000000..f97f855
--- /dev/null
@@ -0,0 +1,18 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>(Move command (Control menu))</TITLE>
+</HEAD>
+
+<BODY>
+
+
+<P><A NAME="hid_sc_move"></A><B>Move command (Control menu)</B></P>
+
+<P>Use this command to display a four-headed arrow so you can move the active window or dialog box with the arrow keys.</P>
+
+<P>Note:  This command is unavailable if you maximize the window.</P>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/hid_sc_restore.htm b/src/windows/leash/htmlhelp/html/hid_sc_restore.htm
new file mode 100644 (file)
index 0000000..bdef357
--- /dev/null
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>(Restore command (Control menu))</TITLE>
+</HEAD>
+
+<BODY>
+
+
+<P><A NAME="hid_sc_restore"></A><B>Restore command (Control menu)</B></P>
+
+<P>Use this command to return the active window to its size and position before you chose the
+<b> Maximize</b> or <b> Minimize</b> command.</P>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/hid_sc_size.htm b/src/windows/leash/htmlhelp/html/hid_sc_size.htm
new file mode 100644 (file)
index 0000000..9332719
--- /dev/null
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>(Size command (System menu))</TITLE>
+</HEAD>
+
+<BODY>
+
+
+<P><A NAME="hid_sc_size"></A><B>Size command (System menu)</B></P>
+
+<P>Use this command to display a four-headed arrow so you can size the active window with the arrow keys.</P>
+
+<P>After the pointer changes to the four-headed arrow:</P>
+
+<P>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.  </P>
+
+<P>2.Press a direction key to move the border.</P>
+
+<P>3.Press ENTER when the window is the size you want.</P>
+
+<P>Note:  This command is unavailable if you maximize the window.</P>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/hid_view_status_bar.htm b/src/windows/leash/htmlhelp/html/hid_view_status_bar.htm
new file mode 100644 (file)
index 0000000..6068737
--- /dev/null
@@ -0,0 +1,24 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>(View Status Bar Command)</TITLE>
+</HEAD>
+
+<BODY>
+
+
+<OBJECT TYPE="application/x-oleobject" CLASSID="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
+       <PARAM NAME="Keyword" VALUE="status bar">
+</OBJECT>
+
+<P><A NAME="hid_view_status_bar"></A><B>Status Bar command (View menu)</B></P>
+
+<P>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.</P>
+
+<P>See <A HREF="afx_hidw_status_bar.htm">Status Bar</A> for help on using the status bar.</P>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/hid_view_toolbar.htm b/src/windows/leash/htmlhelp/html/hid_view_toolbar.htm
new file mode 100644 (file)
index 0000000..43dfe35
--- /dev/null
@@ -0,0 +1,23 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>(View Toolbar command)</TITLE>
+</HEAD>
+
+<BODY>
+
+
+<OBJECT TYPE="application/x-oleobject" CLASSID="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
+       <PARAM NAME="Keyword" VALUE="toolbar">
+</OBJECT>
+
+<P><A NAME="hid_view_toolbar"></A><B>Toolbar command (View menu)</B></P>
+
+<P>Use this command to display and hide the toolbar, which includes buttons for some of the most common commands in &lt;&lt;YourApp&gt;&gt;, such as
+<b> File Open</b>.  A checkmark appears next to the menu item when the toolbar is displayed.</P>
+
+<P>See <A HREF="afx_hidw_toolbar.htm">Toolbar</A> for help on using the toolbar.</P>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/leash_acknowledgements.htm b/src/windows/leash/htmlhelp/html/leash_acknowledgements.htm
new file mode 100644 (file)
index 0000000..577ceb5
--- /dev/null
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>The MIT Kerberos Team</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="acknowledgements">
+</object>
+<p></p>
+<h1><a name="id_help_people"></a>The MIT Kerberos Team</h1>
+This is by no means a complete list, as we have contributors and
+collaborators from all over the net. <br>
+<big><span style="font-weight: bold; text-decoration: underline;"><br>
+MIT Team Members</span></big>
+<ul>
+  <li>Marshall Vale - Team Leader </li>
+  <li>Jeffrey Altman </li>
+  <li><a href="http://web.mit.edu/lxs/www/">Alexandra Ellwood</a> ('97)
+PGP key: <a
+ href="http://pgp.mit.edu:11371/pks/lookup?op=vindex&amp;search=0x22412C62">22412C62</a>
+  </li>
+  <li>Sam Hartman ('97) PGP keys: <a
+ href="http://pgp.mit.edu:11371/pks/lookup?op=vindex&amp;search=0x3C86260F">3C86260F</a>
+    <a
+ href="http://pgp.mit.edu:11371/pks/lookup?op=vindex&amp;search=0x68DEB5D1">68DEB5D1</a>
+  </li>
+  <li><a href="http://web.mit.edu/pbh/www/home.html">Paul Hill</a> </li>
+  <li>Scott McGuire </li>
+  <li>Ken Raeburn ('88) PGP keys: <a
+ href="http://pgp.mit.edu:11371/pks/lookup?op=vindex&amp;search=0xC43E7B98">C43E7B98</a>
+  </li>
+  <li>Jeff Schiller ('79) PGP keys: <a
+ href="http://pgp.mit.edu:11371/pks/lookup?op=vindex&amp;search=0xF414952B">F414952B</a>
+    <a
+ href="http://pgp.mit.edu:11371/pks/lookup?op=vindex&amp;search=0x0DBF906D">0DBF906D</a>
+  </li>
+  <li><a href="http://www.mit.edu/people/tlyu/home.html">Tom Yu</a>
+('96) PGP keys: <a
+ href="http://pgp.mit.edu:11371/pks/lookup?op=vindex&amp;search=0x2E2F668E">2E2F668E</a>
+    <a
+ href="http://pgp.mit.edu:11371/pks/lookup?op=vindex&amp;search=0x749D7889">749D7889</a>
+    <a
+ href="http://pgp.mit.edu:11371/pks/lookup?op=vindex&amp;search=0xF376813D">F376813D</a>
+  </li>
+</ul>
+The following people are not officially affiliated with MIT, but
+contribute to the MIT Kerberos V5 effort:
+<ul>
+  <li><a href="http://web.mit.edu/probe/www/home.html">Richard Basch</a>
+('90) </li>
+  <li>Danilo Almeida ('98) </li>
+  <li>Marc Horowitz ('92) </li>
+  <li>Barry Jaspan ('92) </li>
+  <li>Miro Jurisic ('01) </li>
+  <li>Ezra Peisach ('89) </li>
+  <li><a href="http://web.mit.edu/tytso/www/home.html">Ted Ts'o</a>
+('90) PGP keys: <a
+ href="http://pgp.mit.edu:11371/pks/lookup?op=vindex&amp;search=0x80B07A4F">80B07A4F</a>
+    <a
+ href="http://pgp.mit.edu:11371/pks/lookup?op=vindex&amp;search=0xE086CB93">E086CB93</a>
+    <a
+ href="http://pgp.mit.edu:11371/pks/lookup?op=vindex&amp;search=0x103D4013">103D4013</a>
+    <a
+ href="http://pgp.mit.edu:11371/pks/lookup?op=vindex&amp;search=0x93674C40">93674C40</a>
+    <a
+ href="http://pgp.mit.edu:11371/pks/lookup?op=vindex&amp;search=0xF1A37611">F1A37611</a>
+    <a
+ href="http://pgp.mit.edu:11371/pks/lookup?op=vindex&amp;search=0x466B4289">466B4289</a></li>
+</ul>
+<br>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_bug_reports.htm b/src/windows/leash/htmlhelp/html/leash_bug_reports.htm
new file mode 100644 (file)
index 0000000..d830815
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Reporting Bugs and Requesting Assistance</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="bugs">
+</object>
+<p></p>
+<h1><a name="id_help_problems"></a>Reporting Bugs and Requesting
+Assistance<br>
+</h1>
+<p></p>
+<p class="MsoNormal" style="">If you find bugs, please mail
+them to kfw-bugs@MIT.EDU.</p>
+<p class="MsoNormal">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:<o:p>&nbsp;</o:p></p>
+<p class="MsoNormal" style="text-indent: 0.5in;"><a
+ href="http://mailman.mit.edu/mailman/listinfo/kerberos">http://mailman.mit.edu/mailman/listinfo/kerberos</a><o:p></o:p></p>
+<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_command_change_password.htm b/src/windows/leash/htmlhelp/html/leash_command_change_password.htm
new file mode 100644 (file)
index 0000000..e2e971e
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Change Password Command</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="change">
+</object>
+<h3><a name="hid_change_password_command"></a><a name="id_help_change"></a><b>Change Password Command</b></h3>
+<p>The Change Password command is found on the Action menu; it is also
+the fifth button (from the left) in the toolbar.&nbsp; This command
+changes your Kerberos password.<br>
+</p>
+<p><img style="width: 616px; height: 377px;"
+ alt="Change Password Dialog" title="Change Password Dialog"
+ src="..%5CImages%5CLeash_change_password.jpg"><br>
+</p>
+<p>Note: This command will not change your local machine password
+unless your Windows Logon Session is authenticated using Kerberos.<br>
+</p>
+<p><a href="leash_topic_password_choice.htm#id_help_choose">How To
+Choose a Password</a>.</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_command_destroy_tickets.htm b/src/windows/leash/htmlhelp/html/leash_command_destroy_tickets.htm
new file mode 100644 (file)
index 0000000..595ce81
--- /dev/null
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Destroy Tickets Command</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="destroy"> <param name="Keyword"
+ value="key, Ctrl+D">
+</object>
+<h3><b><a name="id_help_destroy"></a><a
+ name="hid_destroy_tickets_command"></a>Destroy Ticket(s)/Token(s) Command, Ctrl+D</b></h3>
+This command is found on the Action menu; it is also the fourth button
+(from the left) in the toolbar.&nbsp; Use this command to destroy all
+of the Kerberos tickets (and perhaps AFS tokens) on your local
+machine.&nbsp; Leash confirms your intentions before completing the
+request.&nbsp; Tickets for individual services may not be destroyed by
+the Leash Application.<br>
+<br>
+Once tickets are destroyed, you must Get or Import new tickets before
+Kerberized applications can once again access network services.<br>
+<br>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_command_get_tickets.htm b/src/windows/leash/htmlhelp/html/leash_command_get_tickets.htm
new file mode 100644 (file)
index 0000000..a380919
--- /dev/null
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Get Tickets Command</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="renew"> <param name="Keyword"
+ value="key, Ctrl+T">
+</object>
+<h3><b><a name="hid_get_tickets_command"></a><a name="id_help_get"></a>Get Ticket(s)/Token(s) Command, Ctrl+T</b></h3>
+This command is found under the Action menu; it is also the first
+button (from the left) in the toolbar.&nbsp; Use this command to obtain
+new Kerberos tickets (and perhaps AFS tokens.)<br>
+<br>
+<img style="width: 700px; height: 584px;"
+ alt="Advanced Initialize Tickets Dialog"
+ title="Advanced Initialize Tickets Dialog"
+ src="../Images/Leash_init_ticket_advanced.jpg"><br>
+<br>
+<img style="width: 700px; height: 316px;"
+ alt="Basic Initialize Tickets Dialog"
+ title="Basic Initialize Tickets Dialog"
+ src="..%5CImages%5CLeash_init_ticket_basic.jpg"><br>
+<br>
+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.&nbsp; You may optionally specify a ticket
+lifetime and various Kerberos 5 ticket options: <br>
+<ul>
+  <li>ticket forwarding</li>
+  <li>addressless tickets</li>
+  <li>renewable ticket times<br>
+  </li>
+</ul>
+<p>See Also</p>
+<p><a href="leash_topic_kerberos_tickets.htm">Kerberos tickets</a></p>
+<p>AFS tokens</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_command_import_tickets.htm b/src/windows/leash/htmlhelp/html/leash_command_import_tickets.htm
new file mode 100644 (file)
index 0000000..846bb35
--- /dev/null
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Import Tickets Command</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="renew"> <param name="Keyword"
+ value="key, Ctrl+T">
+</object>
+<h3><b><a name="hid_import_tickets_command"></a><a name="id_help_import"></a>Import Ticket(s)/Token(s) Command, Ctrl+I</b></h3>
+This command is found on the Action menu; it is the third button (from
+the left) in the toolbar.&nbsp; Use this command to import Kerberos
+tickets from your Windows Logon Session.&nbsp; Importing tickets will
+result in the destruction of existing tickets.&nbsp; Leash will confirm
+the operation if necessary.<br>
+<br>
+Note:&nbsp; This command is only available if your Windows Logon
+Session is authenticated using Kerberos.<br>
+<p>See Also</p>
+<p><a href="leash_topic_kerberos_tickets.htm">Kerberos tickets</a></p>
+<p>AFS tokens</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_command_renew_tickets.htm b/src/windows/leash/htmlhelp/html/leash_command_renew_tickets.htm
new file mode 100644 (file)
index 0000000..cca2fb8
--- /dev/null
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Renew Tickets Command</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="renew"> <param name="Keyword"
+ value="key, Ctrl+T">
+</object>
+<h3><b><a name="hid_renew_tickets_command"></a><a name="id_help_renew"></a>Renew Ticket(s)/Token(s) Command, Ctrl+R</b></h3>
+This command is found on the Action menu; it is also the second button
+(from the left) in the toolbar.&nbsp; Use this command to renew the
+Kerberos tickets (and perhaps AFS tokens) on your local machine without
+requiring the use of a password.&nbsp; If your existing tickets cannot
+be renewed the ticket initialization dialog will be displayed allowing
+you to request new tickets.<br>
+<br>
+Note: This command is only available if your existing Kerberos tickets
+are renewable.<br>
+<br>
+<br>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_command_reset_window.htm b/src/windows/leash/htmlhelp/html/leash_command_reset_window.htm
new file mode 100644 (file)
index 0000000..3c189e7
--- /dev/null
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Reset Window Size/Pos Option</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="reset">
+</object>
+<h3><a name="hid_reset_window_option"></a><b>Reset Window Size/Pos
+Option</b></h3>
+<p>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.</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_command_sync_time.htm b/src/windows/leash/htmlhelp/html/leash_command_sync_time.htm
new file mode 100644 (file)
index 0000000..8b69f87
--- /dev/null
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Synchronize Time Option</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="synchronize">
+</object>
+<h3><a name="hid_scnchronize_time_option"></a><b>Synchronize Time</b></h3>
+<p>This command is found on the Action menu; it is also the sixth
+button (from the left) in the toolbar.&nbsp; When you select this
+command, Leash synchronizes the local machine time with the time server
+specified in the Leash Properties dialog.<br>
+</p>
+<p>Note: Kerberos authentication protocol requires loosely synchronized
+time between computers.&nbsp; The local machine clock and the Kerberos
+server clock need to be within five minutes of each other for Kerberos
+to function properly.&nbsp; This function can also be performed with
+the clock icon on the toolbar and has no keyboard equivalent.<br>
+<br>
+</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_command_update_display.htm b/src/windows/leash/htmlhelp/html/leash_command_update_display.htm
new file mode 100644 (file)
index 0000000..a10718a
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Update Display Command</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="update"> <param name="Keyword" value="Key, F5">
+</object>
+<h3><b><a name="id_help_pdate"></a><a name="hid_update_display_cammand"></a>Update Display Command, F5</b></h3>
+<p>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.</p>
+<p><b>Why Use It...</b></p>
+<p>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 <a
+ href="leash_external_kinit.htm">kinit</a> or <a
+ href="leash_external_kdestroy.htm">kdestroy</a> and want to check that
+they have functioned successfully.</p>
+<p><b>How It Works...</b></p>
+<p>While Leash automatically checks the status of your Kerberos tickets
+every 30 seconds, the Update Display command forces an immediate status
+check.</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_copyright.htm b/src/windows/leash/htmlhelp/html/leash_copyright.htm
new file mode 100644 (file)
index 0000000..f3bc88e
--- /dev/null
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Leash Copyright</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="copyright, Leash">
+</object>
+<p></p>
+<h1><a name="id_help_lcopyright"></a>Leash Copyright</h1>
+<p></p>
+<p>This software is being provided to you, the LICENSEE, by the
+Massachusetts Institute of Technology (M.I.T) under the following
+license. By obtaining, using and/or copying this software, you agree
+that you have read, understood, and will comply with these terms and
+conditions: </p>
+<p>Permission to use, copy, modify and distribute this software and its
+documentation for any purpose and without fee or royalty is hereby
+granted, provided that you agree to comply with the following copyright
+notice and statements, including the disclaimer, and that the same
+appear on ALL copies of the software and documentation, including
+modifications that you make for internal use or for distribution:</p>
+<p>Copyright 1992-2004 by the Massachusetts Institute of Technology.
+All rights reserved. </p>
+<p>THIS SOFTWARE IS PROVIDED "AS IS", AND M.I.T. MAKES NO
+REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. By way of example,
+but not limitation, M.I.T. MAKES NO REPRESENTATIONS OR WARRANTIES OF
+MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE
+OF THE LICENSED SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD
+PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. </p>
+<p>The name of the Massachusetts Institute of Technology or M.I.T. may
+NOT be used in advertising or publicity pertaining to distribution of
+the software. Title to copyright in this software and any associated
+documentation shall at all times remain with M.I.T., and USER agrees to
+preserve same.</p>
+<p>Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos,
+Moira, OLC, X Window System, and Zephyr are trademarks of the
+Massachusetts Institute of Technology (MIT). No commercial use of these
+trademarks may be made without prior written permission of MIT.</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_errors.htm b/src/windows/leash/htmlhelp/html/leash_errors.htm
new file mode 100644 (file)
index 0000000..9179109
--- /dev/null
@@ -0,0 +1,18 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Leash Copyright</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="copyright, Leash">
+</object>
+<p></p>
+<h1><a name="id_leash_errors"></a>Common Leash Error Messages</h1>
+<p></p>
+This section describes error messages commonly displayed by Leash.
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_export.htm b/src/windows/leash/htmlhelp/html/leash_export.htm
new file mode 100644 (file)
index 0000000..b7b39a7
--- /dev/null
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Kerberos Export Restrictions and Source Code Access</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="export">
+</object>
+<p></p>
+<h1><a name="id_help_export"></a>Kerberos Export Restrictions and Source Code Access</h1>
+<p></p>
+<p>Copyright (C) 1989-2004 by the Massachusetts Institute of Technology</p>
+<p><b>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.</b></p>
+<p>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.</p>
+<p>Export of the documentation is not restricted.</p>
+<br>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_external_aklog.htm b/src/windows/leash/htmlhelp/html/leash_external_aklog.htm
new file mode 100644 (file)
index 0000000..5b00030
--- /dev/null
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>aklog.exe</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="kdestroy, exe">
+</object>
+<p><b>aklog.exe program</b></p>
+<p>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.<br>
+<br>
+</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_external_kdestroy.htm b/src/windows/leash/htmlhelp/html/leash_external_kdestroy.htm
new file mode 100644 (file)
index 0000000..a623193
--- /dev/null
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>kdestroy.exe</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+<OBJECT TYPE="application/x-oleobject" CLASSID="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
+       <PARAM NAME="Keyword" VALUE="kdestroy, exe">
+</OBJECT>
+
+<P><B>kdestroy.exe program</B></P>
+
+<P>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.</P>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/leash_external_kinit.htm b/src/windows/leash/htmlhelp/html/leash_external_kinit.htm
new file mode 100644 (file)
index 0000000..97d62c0
--- /dev/null
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>kinit.exe</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+<OBJECT TYPE="application/x-oleobject" CLASSID="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
+       <PARAM NAME="Keyword" VALUE="kinit, exe">
+</OBJECT>
+
+<P><B>kinit.exe program</B></P>
+
+<P>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.</P>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/leash_external_klist.htm b/src/windows/leash/htmlhelp/html/leash_external_klist.htm
new file mode 100644 (file)
index 0000000..a2e7bdb
--- /dev/null
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Why Use</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+<OBJECT TYPE="application/x-oleobject" CLASSID="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
+       <PARAM NAME="Keyword" VALUE="klist, exe">
+</OBJECT>
+
+<P><B>klist.exe program</B></P>
+
+<P>This application will quickly list all of the tickets you have.</P>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/leash_external_ms2mit.htm b/src/windows/leash/htmlhelp/html/leash_external_ms2mit.htm
new file mode 100644 (file)
index 0000000..a2f301e
--- /dev/null
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>ms2mit.exe</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="kdestroy, exe">
+</object>
+<p><b>ms2mit.exe program</b></p>
+<p>This is another way to import Windows Logon Session Kerberos tickets
+for use by Leash and other Kerberos for Windows applications.&nbsp; The
+functionality is equivalent to the Import Tickets Command.<br>
+<br>
+</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_file_exit.htm b/src/windows/leash/htmlhelp/html/leash_file_exit.htm
new file mode 100644 (file)
index 0000000..72ecf49
--- /dev/null
@@ -0,0 +1,24 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Exit/End Leash Program</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="exit">
+</object>
+<h3><b><a name="id_help_exit"></a><a name="hid_exit_command"></a>Exit Command</b></h3>
+<p>From the File menu, you can use this command to exit the Leash
+program.&nbsp; 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.<br>
+</p>
+<p><b>Important Note...</b></p>
+<p>Exiting the Leash program will <b>not</b> destroy your current
+Kerberos tickets. Unless you have selected this in the options menu,
+you need to use the destroy tickets command.</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_help_about_leash32.htm b/src/windows/leash/htmlhelp/html/leash_help_about_leash32.htm
new file mode 100644 (file)
index 0000000..8eedd89
--- /dev/null
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>About Leash Command</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="help, About Leash">
+</object>
+<h3><a name="hid_about_leash32_comand"></a><b>About Leash</b></h3>
+<p>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.<br>
+</p>
+<p><img style="width: 471px; height: 269px;" alt="About Leash dialog"
+ title="About Leash dialog" src="..%5CImages%5CLeash_about_leash.jpg"><br>
+</p>
+<p>The radio buttons let you choose to view a list of:
+</p>
+<ul>
+  <li>Leash Modules - displays the modules that Leash currently has
+loaded for its own use; <br>
+    <br>
+  </li>
+  <li>All Modules - displays Leash modules as well as those loaded by
+the OS;<br>
+    <br>
+  </li>
+  <li>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. </li>
+</ul>
+<p>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.</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_kerberos_copyright.htm b/src/windows/leash/htmlhelp/html/leash_kerberos_copyright.htm
new file mode 100644 (file)
index 0000000..68fa98f
--- /dev/null
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Kerberos Copyright</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="copyright, kerberos">
+</object>
+<p></p>
+<h1><a name="id_help_kcopyright"></a>Kerberos Copyright</h1>
+<p></p>
+<p>This software is being provided to you, the LICENSEE, by the
+Massachusetts Institute of Technology (M.I.T.) under the following
+license. By obtaining, using and/or copying this software, you agree
+that you have read, understood, and will comply with these terms and
+conditions: </p>
+<p>Permission to use, copy, modify and distribute this software and its
+documentation for any purpose and without fee or royalty is hereby
+granted, provided that you agree to comply with the following copyright
+notice and statements, including the disclaimer, and that the same
+appear on ALL copies of the software and documentation, including
+modifications that you make for internal use or for distribution:</p>
+<p>Copyright 1992-2004 by the Massachusetts Institute of Technology.
+All rights reserved. </p>
+<p>THIS SOFTWARE IS PROVIDED "AS IS", AND M.I.T. MAKES NO
+REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. By way of example,
+but not limitation, M.I.T. MAKES NO REPRESENTATIONS OR WARRANTIES OF
+MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE
+OF THE LICENSED SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD
+PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. </p>
+<p>The name of the Massachusetts Institute of Technology or M.I.T. may
+NOT be used in advertising or publicity pertaining to distribution of
+the software. Title to copyright in this software and any associated
+documentation shall at all times remain with M.I.T., and USER agrees to
+preserve same.</p>
+<p>Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos,
+Moira, OLC, X Window System, and Zephyr are trademarks of the
+Massachusetts Institute of Technology (MIT). No commercial use of these
+trademarks may be made without prior written permission of MIT.</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_manpage_aklog.htm b/src/windows/leash/htmlhelp/html/leash_manpage_aklog.htm
new file mode 100644 (file)
index 0000000..a9c5f6d
--- /dev/null
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>AKLOG Command</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="kinit, man">
+</object>
+<p><h2><a name="id_help_kinit"></a>AKLOG Command</h2></p>
+<p>(from UNIX man page)</p>
+<pre><code>User Commands                                            AKLOG(1)<br><br>NAME<br>     aklog - Obtain tokens for authentication to AFS<br><br>SYNOPSIS<br>     aklog [ -d ] [ -force ] [ -hosts ] [ -zsubs ] [ -noprdb ]  [<br>     [ -cell | -c ] cell [ -k kerberos-realm ] ] [ [ -path | -p ]<br>     pathname ]<br><br>DESCRIPTION<br>     The aklog program is used  to  authenticate  to  a  cell  or<br>     directory  in  AFS,  the Andrew Filesystem, by obtaining AFS<br>     tokens. Ordinarily, aklog is not used directly but called by<br>     attach(1).<br><br>     If aklog is invoked with no command line arguments, it  will<br>     obtain  tokens for the workstation's local cell.  It is pos-<br>     sible to invoke aklog with arbitrarily many cells and  path-<br>     names  specified  on  the  command  line. aklog knows how to<br>     expand cell name abbreviations, so short forms of cell names<br>     can be use used.  In addition, aklog understands the follow-<br>     ing command line options:<br><br>     -cell | -c cell<br>         This flag is not ordinarily necessary  since  aklog  can<br>         usually  figure  out when an argument is a cell.  It can<br>         be used to introduce a cell name that  would  ordinarily<br>         be  mistaken for a path name if this should be required.<br>         If this flag is omitted, an argument will be treated  as<br>         a cell name if it contains no slashes (/) and is neither<br>         "." nor ".." .<br><br>     -k kerberos-realm<br>         This flag is valid only when immediately  following  the<br>         name  of a cell.  It is used to tell aklog what kerberos<br>         realm should be used while authenticating to the preced-<br>         ing  cell.  This argument is unnecessary except when the<br>         workstation is  not  properly  configured.   Ordinarily,<br>         aklog can determine this information on its own.<br><br>     -path | -p pathname<br>         Like the -cell flag, this flag is  usually  unnecessary.<br>         When  it  appears,  the  next  command  line argument is<br>         always treated as a path name.  Ordinarily, an  argument<br>         is  treated as a path name if it is "." or ".." or if it<br>         contains a slash (/).<br><br>     -hosts<br>         Prints all the server addresses which may act as a  sin-<br>         gle  point  of failure in accessing the specified direc-<br>         tory path.  Each element of the path is examined, and as<br>         new  volumes  are traversed, if they are not replicated,<br>         the server's IP address containing the  volume  will  be<br>         displayed.   Attach(1)  invokes  aklog with this option.<br>         The output is of the form<br><br>         host: IP address<br><br>     -zsubs<br>         Causes the printing of the zephyr subscription  informa-<br>         tion  that  a  person  using  a given path or cell would<br>         want. Attach(1) invokes aklog  with  this  option.   The<br>         output is of the form<br><br>         zsub: instance<br><br>         where instance is the instance of a class filsrv  zephyr<br>         subscription.<br><br>     -noprdb<br>         Ordinarily, aklog looks up the AFS ID  corresponding  to<br>         the name of the person invoking the command.  Specifying<br>         this flag turns off this  functionality.   This  may  be<br>         desirable  if the protection database is unavailable for<br>         some reason and tokens are desired anyway.<br><br>     -d  Turns on printing of debugging information.  This option<br>         is not intended for general users.<br><br>     -force<br>         Forces aklog to obtain  new  tokens  even  if  the  user<br>         already appears to have tokens identical to the new ones<br>         they would get.  This option is most often required when<br>         the user has recently been added to an AFS group.<br><br>EXIT CODES<br>     The exit status of aklog will be one of the following:<br><br>     0    Success -- No error occurred.<br><br>     1    Usage -- Bad command syntax;  accompanied  by  a  usage<br>          message.<br><br>     2    Something failed -- More than one cell or pathname  was<br>          given  on  the  command  line  and at least one failure<br>          occurred.  A more specific  error  status  is  returned<br>          when only one directive is given.<br><br>     3    AFS -- Unable to get AFS configuration or unable to get<br>          information about a specific cell.<br><br>     4    Kerberos -- Unable to get tickets for authentication.<br><br>     5    Token -- Unable to get tokens.<br><br>     6    Bad pathname -- The path given was not a  directory  or<br>          lstat(2) failed on some component of the pathname.<br><br>     7    Miscellaneous -- An  internal  failure  occurred.   For<br>          example, aklog returns this if it runs out of memory.<br><br>EXAMPLES<br>     To get tokens for the local cell:<br>     % aklog<br><br>     To get tokens for the athena.mit.edu cell:<br>     % aklog athena.mit.edu<br>     or<br>     % aklog athena<br><br>     To       get       tokens       adequate       to       read<br>     /afs/athena.mit.edu/user/p/potato:<br>     % aklog /afs/athena.mit.edu/user/p/potato<br><br>     To get tokens for a test cell that is  in  a  test  Kerberos<br>     realm:<br>     % aklog testcell.mit.edu -k TESTREALM.MIT.EDU<br><br>SEE ALSO<br>     attach(1), tokens(1), unlog(1)<br><br><br></code></pre>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_manpage_kdestroy.htm b/src/windows/leash/htmlhelp/html/leash_manpage_kdestroy.htm
new file mode 100644 (file)
index 0000000..9c7aa42
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>KDESTROY Command</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+<OBJECT TYPE="application/x-oleobject" CLASSID="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
+       <PARAM NAME="Keyword" VALUE="kdestroy, man">
+</OBJECT>
+
+<P><h2><A NAME="id_help_kdestroy"></A>KDESTROY Command</h2></P>
+
+<P>(from UNIX man page)</P>
+
+<PRE><CODE>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.</CODE></PRE>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/leash_manpage_kinit.htm b/src/windows/leash/htmlhelp/html/leash_manpage_kinit.htm
new file mode 100644 (file)
index 0000000..88e54f3
--- /dev/null
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>KINIT Command</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="kinit, man">
+</object>
+<p><h2><a name="id_help_kinit"></a>KINIT Command</h2></p>
+<p>(from UNIX man page)</p>
+<pre><code>User Commands                                            KINIT(1)<br><br>NAME<br>     kinit - obtain and cache Kerberos ticket-granting ticket<br><br>SYNOPSIS<br>     kinit<br>          [-5] [-4] [-V] [-l lifetime] [-s start_time] [-r<br>          renewable_life] [-p | -P] [-f | -F] [-A] [-v] [-R] [-k<br>          [-t keytab_file]] [-c cache_name] [-S service_name]<br>          [principal]<br><br>DESCRIPTION<br>     kinit obtains and caches an initial  ticket-granting  ticket<br>     for  principal.Thetypicaldefaultbehavior Kerberos 5 tickets.<br>     However, if kinit was built with both Kerberos 4 support and<br>     with  the  default behavior of acquiring both types of tick-<br>     ets, it will try to acquire both Kerberos 5 and  Kerberos  4<br>     by default.  Any documentation particular to Kerberos 4 does<br>     not apply if Kerberos 4 support was not built into kinit.<br><br>OPTIONS<br>     -5   get Kerberos 5 tickets.  This  overrides  whatever  the<br>          default  built-in  behavior may be.  This option may be<br>          used with -4<br><br>     -4   get Kerberos 4 tickets.  This  overrides  whatever  the<br>          default  built-in behavior may be.  This option is only<br>          available if kinit was built with Kerberos  4  compati-<br>          bility.  This option may be used with -5<br><br>     -V   display verbose output.<br><br>     -l lifetime<br>          requests a ticket  with  the  lifetime  lifetime.   The<br>          value  for lifetime must be followed immediately by one<br>          of the following delimiters:<br><br>             s  seconds<br>             m  minutes<br>             h  hours<br>             d  days<br><br>          as in "kinit -l 90m".  You cannot mix units; a value of<br>          `3h30m' will result in an error.<br><br>          If the -l option is not specified, the  default  ticket<br>          lifetime (configured by each site) is used.  Specifying<br>          a ticket lifetime longer than the maximum ticket  life-<br>          time (configured by each site) results in a ticket with<br>          the maximum lifetime.<br><br>     -s start_time<br>          requests  a  postdated  ticket,   valid   starting   at<br>          start_time.   Postdated  tickets  are  issued  with the<br>          invalid flag set, and need to be fed back  to  the  kdc<br>          before use.  (Not applicaple to Kerberos 4.)<br><br>     -r renewable_life<br>          requests renewable tickets, with a  total  lifetime  of<br>          renewable_life.   The duration is in the same format as<br>          the -l option, with the same delimiters.  (Not applica-<br>          ple to Kerberos 4.)<br><br>     -f   request forwardable tickets.  (Not applicaple  to  Ker-<br>          beros 4.)<br><br>     -F   do not request forwardable tickets.  (Not applicaple to<br>          Kerberos 4.)<br><br>     -p   request proxiable tickets.  (Not applicaple to Kerberos<br>          4.)<br><br>     -P   do not request proxiable tickets.  (Not  applicaple  to<br>          Kerberos 4.)<br><br>     -A   request address-less tickets.  (Not applicaple to  Ker-<br>          beros 4.)<br><br>     -v   requests that the ticket granting ticket in  the  cache<br>          (with  the  invalid  flag set) be passed to the kdc for<br>          validation.  If the ticket is within its requested time<br>          range, the cache is replaced with the validated ticket.<br>          (Not applicaple to Kerberos 4.)<br><br>     -R   requests renewal of the ticket-granting  ticket.   Note<br>          that  an  expired ticket cannot be renewed, even if the<br>          ticket is still within its renewable life.  When  using<br>          this  option with Kerberos 4, the kdc must support Ker-<br>          beros 5 to Kerberos 4 ticket conversion.<br><br>     -k [-t keytab_file]<br>          requests a host ticket, obtained  from  a  key  in  the<br>          local host's keytab file.  The name and location of the<br>          keytab file may be specified with  the  -t  keytab_file<br>          option; otherwise the default name and location will be<br>          used.  When using this option with Kerberos 4, the  kdc<br>          must  support  Kerberos  5 to Kerberos 4 ticket conver-<br>          sion.<br><br>     -c cache_name<br>          use cache_name as the Kerberos 5  credentials  (ticket)<br>          cache  name  and  location; if this option is not used,<br>          the default cache name and location are used.<br><br>          The default credentials cache may vary between systems.<br><br>          If  the  KRB5CCNAME  environment  variable  is set, its<br>          value is used to name the default  ticket  cache.   Any<br>          existing  contents of the cache are destroyed by kinit.<br>          (Note: The default name for Kerberos 4 comes  from  the<br>          KRBTKFILE  environment  variable.  This option does not<br>          apply to Kerberos 4.)<br><br>     -S service_name<br>          specify an alternate service name to use  when  getting<br>          initial tickets.  (Applicable to Kerberos 5 or if using<br>          both Kerberos 5 and Kerberos 4 with a kdc that supports<br>          Kerberos 5 to Kerberos 4 ticket conversion.)<br><br>ENVIRONMENT<br>     Kinit uses the following environment variables:<br><br>     KRB5CCNAME      Location  of  the  Kerberos  5   credentials<br>                     (ticket) cache.<br><br>     KRBTKFILE      Filename  of  the  Kerberos   4   credentials<br>                    (ticket) cache.<br><br>FILES<br>     /tmp/krb5cc_[uid]  default location of  Kerberos  5  creden-<br>                        tials  cache ([uid] is the decimal UID of<br>                        the user).<br><br>     /tmp/tkt[uid]  default location of  Kerberos  4  credentials<br>                    cache ([uid] is the decimal UID of the user).<br><br>     /etc/krb5.keytab<br>                    default location for the local host's  keytab<br>                    file.<br><br>SEE ALSO<br>     klist(1), kdestroy(1), krb5(3)<br><br><br></code></pre>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_manpage_klist.htm b/src/windows/leash/htmlhelp/html/leash_manpage_klist.htm
new file mode 100644 (file)
index 0000000..9bc955e
--- /dev/null
@@ -0,0 +1,106 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>KLIST Command</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+<OBJECT TYPE="application/x-oleobject" CLASSID="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
+       <PARAM NAME="Keyword" VALUE="klist, man">
+</OBJECT>
+
+<P><h2><A NAME="id_help_klist"></A>KLIST Command</h2></P>
+
+<P>(from UNIX man page)</P>
+
+<PRE><CODE>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)</CODE></PRE>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/leash_manpage_ms2mit.htm b/src/windows/leash/htmlhelp/html/leash_manpage_ms2mit.htm
new file mode 100644 (file)
index 0000000..99184f6
--- /dev/null
@@ -0,0 +1,16 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>MS2MIT Command</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="kinit, man">
+</object>
+<p><h2><a name="id_help_kinit"></a>MS2MIT Command</h2></p>
+<pre><code>NAME<br> ms2mit - import Kerberos credentials from the current Windows Logon <br>          Session and insert them into the Kerberos for Windows <br>          default Credentials Cache<br><br>SYNOPSIS<br> ms2mit<br><br>DESCRIPTION<br><br>  <br><br>SEE  ALSO<br> klist(1), kdestroy(1), krb5(3)</code></pre>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_manpages.htm b/src/windows/leash/htmlhelp/html/leash_manpages.htm
new file mode 100644 (file)
index 0000000..3838622
--- /dev/null
@@ -0,0 +1,18 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Leash Copyright</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="copyright, Leash">
+</object>
+<p></p>
+<h1><a name="id_kfw_manpages"></a>Kerberos for Windows Command Line Tools Manpages</h1>
+<p></p>
+<p>This section reproduces the manpages for the Kerberos for Windows command line tools.</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_menu_commands.htm b/src/windows/leash/htmlhelp/html/leash_menu_commands.htm
new file mode 100644 (file)
index 0000000..a3d8a8a
--- /dev/null
@@ -0,0 +1,58 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Leash Commands</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
+<param name="Keyword" value="commands">
+</object>
+<p></p>
+<h2><a name="id_help_commands"></a><a name="hid_leash_commands"></a>Leash Commands</h2>
+<p></p>
+<p>File:<br>
+<img style="width: 232px; height: 52px;" alt="File menu"
+ title="File menu" src="..%5CImages%5CLeash_menu_file.jpg"><br>
+</p>
+<p><a href="leash_file_exit.htm">Exit</a></p>
+<p>Action:<br>
+<img style="width: 288px; height: 223px;" alt="Action Menu"
+ title="Action Menu" src="..%5CImages%5Cleash_menu_action.jpg"><br>
+</p>
+<p><a href="leash_command_get_tickets.htm#id_help_get">Get Ticket(s)/Token(s)</a></p>
+<p><a href="leash_command_renew_tickets.htm#id_help_renew">Renew Ticket(s)/Token(s)</a></p>
+<p><a href="leash_command_import_tickets.htm#id_help_import">Import Ticket(s)/Token(s)</a></p>
+<p><a href="leash_command_destroy_tickets.htm">Destroy Ticket(s)/Token(s)</a></p>
+<p><a href="leash_command_change_password.htm">Change Password </a></p>
+<p><a href="leash_command_reset_window.htm">Reset Window Size/Pos </a></p>
+<p><a href="leash_command_sync_time.htm">Synchronize Time </a></p>
+<p><a href="leash_command_update_display.htm#hid_update_display_command">Update Display </a></p>
+<p>View:<br>
+<img style="width: 232px; height: 116px;" alt="View menu"
+ title="View menu" src="..%5CImages%5CLeash_menu_view.jpg"><br>
+</p>
+<p><a href="leash_view_large_icons.htm">Large Icons </a></p>
+<p><a href="leash_view_toolbar.htm">Toolbar </a></p>
+<p><a href="leash_view_status_bar.htm">Status Bar </a></p>
+<p><a href="leash_view_debug_window.htm">Debug Window </a></p>
+<p>Options:<br>
+<img style="width: 416px; height: 233px;" alt="Options menu"
+ title="Options menu" src="..%5CImages%5CLeash_menu_options.jpg"><br>
+</p>
+<p><a href="leash_option_upper_case_realm.htm">Upper Case Realm Name </a></p>
+<p><a href="leash_option_expiration_alarm.htm">Expiration Alarm </a></p>
+<p><a href="leash_option_destroy_tickets_on_exit.htm">Destroy Tickets/Tokens on Exit </a></p>
+<p><a href="leash_option_leash_properties.htm">Leash Properties\85</a></p>
+<p><a href="leash_option_kerberos_properties.htm">Kerberos Properties </a></p>
+<p><a href="leash_option_krb4_properties.htm">Kerberos v4 Properties\85</a></p>
+<p><a href="leash_option_krb5_properties.htm">Kerberos v5 Properties\85</a></p>
+<p><a href="leash_option_afs_properties.htm">AFS Properties </a></p>
+<p><u>Help:<br>
+<img style="width: 320px; height: 52px;" alt="Help menu"
+ title="Help menu" src="..%5CImages%5CLeash_menu_help.jpg"><br>
+</u></p>
+<p><a href="leash_help_about_leash32.htm">About Leash...</a></p>
+</body>
+</html>
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
new file mode 100644 (file)
index 0000000..9a0f1bd
--- /dev/null
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Why Use</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="help, Why use Leash">
+</object>
+<p><b>Why Use Leash</b></p>
+<p>This command, found under the Help menu, starts Leash help (the
+document you are currently viewing).</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_option_afs_properties.htm b/src/windows/leash/htmlhelp/html/leash_option_afs_properties.htm
new file mode 100644 (file)
index 0000000..c64aabd
--- /dev/null
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>AFS Properties Command</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="properties, AFS"> <param name="Keyword"
+ value="key, Ctrl+A">
+</object>
+<h3><a name="hid_afs_properties_command"></a><b>AFS Properties Command,
+Ctrl+A</b></h3>
+<p>The AFS Properties dialog can be found on the Options menu when AFS
+is available.</p>
+<p><img style="width: 550px; height: 178px;" alt="AFS Properties Dialog"
+ title="AFS Properties Dialog"
+ src="..%5CImages%5CLeash_properties_afs.jpg"><br>
+</p>
+<p>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.</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_option_auto_renewal.htm b/src/windows/leash/htmlhelp/html/leash_option_auto_renewal.htm
new file mode 100644 (file)
index 0000000..904b9b4
--- /dev/null
@@ -0,0 +1,22 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Automatic Ticket Renewal Option</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="expiration">
+</object>
+<h3><a name="hid_low_ticket_alarm_option"></a><b>Automatic Ticket
+Renewal Option</b></h3>
+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.&nbsp;
+If these attempts fail, Leash will display the ticket initialization
+dialog.&nbsp; In this way, Leash ensures that there are always valid
+Kerberos tickets (and AFS tokens).<br>
+</body>
+</html>
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
new file mode 100644 (file)
index 0000000..d8da0d9
--- /dev/null
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Destroy Tickets/Tokens on Exit Option</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="destroy">
+</object>
+<h3><a name="hid_destroy_tickets_on_exit"></a><b>Destroy Tickets/Tokens
+on Exit Option</b></h3>
+<p>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. </p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_option_expiration_alarm.htm b/src/windows/leash/htmlhelp/html/leash_option_expiration_alarm.htm
new file mode 100644 (file)
index 0000000..c253970
--- /dev/null
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Low Ticket/Token Time Alarm Option</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="expiration">
+</object>
+<h3><a name="hid_low_ticket_alarm_option"></a><b>Expiration Alarm Option</b></h3>
+<p>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. </p>
+<p>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.)<br>
+</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_option_kerberos_properties.htm b/src/windows/leash/htmlhelp/html/leash_option_kerberos_properties.htm
new file mode 100644 (file)
index 0000000..d3ea130
--- /dev/null
@@ -0,0 +1,133 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Kerberos Properties Command</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="properties, Kerberos"> <param name="Keyword"
+ value="key, Ctrl+K">
+</object>
+<h3><a name="hid_kerberos_properties_command"></a><b>Kerberos Properties Command, Ctrl+K</b></h3>
+<p>When you select this from the Options menu, Leash will display a
+tabbed window. The box within this window has four tabs: <br>
+</p>
+<ul>
+  <li>Default Realm Configuration</li>
+  <li>Ticket Lifetime and Other Initialization Options<br>
+  </li>
+  <li>Realm/Server Mapping<br>
+  </li>
+  <li>DNS/Realm Mapping.</li>
+</ul>
+<p><i>Default Realm Configuration:<br>
+<img style="width: 623px; height: 558px;"
+ alt="Default Realm Configuration" title="Default Realm Configuration"
+ src="..%5CImages%5CLeash_properties_krb_1.jpg"><br>
+</i></p>
+<p>There are two groups, the <span style="font-weight: bold;">Kerberos
+Realm/Host Server</span> and the <span style="font-weight: bold;">Computer
+Host/Domain Name</span>. </p>
+<p>Kerberos Realm/Host Server: In the <span style="font-weight: bold;">Your
+Kerberos Realm</span> 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. </p>
+<p>Computer Host/Domain Name: The field labeled <span
+ style="font-weight: bold;">Your Computer's Host Name</span> displays
+the name of your local machine.&nbsp; The <span
+ style="font-weight: bold;">Your Computer's Domain Name</span> field
+displays the domain to which your local machine currently belongs.<br>
+</p>
+<p><i>Ticket Lifetime and Other Initialization Options:<br>
+<img style="width: 623px; height: 558px;" alt="Ticket Lifetime"
+ title="Ticket Lifetime" src="..%5CImages%5CLeash_properties_krb_2.jpg"><br>
+</i></p>
+<p>
+</p>
+<>There are two expiration times associated with Kerberos
+tickets.&nbsp; The first specifies the length of the time period during
+which the tickets are valid for use.&nbsp; The second specifies the
+length of the renewable lifetime.&nbsp; Valid Kerberos tickets may have
+their valid use lifetime repeatedly extended up until the renewable
+lifetime expires.&nbsp; The settings on this page are used to configure
+default lifetime values for Leash to use when requesting Kerberos
+tickets from the Kerberos server (key distribution center).&nbsp; The
+Kerberos server may issue tickets with shorter lifetimes than were
+requested.<br>
+<br>
+The minimum and maximum values are used by the ticket initialization
+dialog box when constructing the Lifetime and Renewable Lifetime
+sliders.&nbsp; These sliders can be used to modify the requested ticket
+lifetimes when Kerberos tickets are initialized.<br>
+<br>
+When the <b>Request Kerberos 4
+credentials</b> button is checked, Leash will attempt to retrieve
+Kerberos 4
+credentials when ticket initialization, renewal, or importation is
+performed.<span style="">&nbsp; </span>Leash will attempt a Kerberos
+5 to Kerberos 4 conversion and if that fails an initial Kerberos 4
+ticket
+request will be generated.<span style="">&nbsp; </span>Kerberos
+realms are increasingly configured to support on Kerberos 5.<span
+ style="">&nbsp; </span>If the realms you use do not support Kerberos
+4 it is suggested that this button be unchecked.</>
+<><o:p>&nbsp;</o:p><br>
+<br>
+When the <b style="">Preserve Ticket Initialization Options</b> 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. <o:p></o:p></>
+<p>
+</p>
+<p><i>Realm/Server Mapping</i>:<br>
+<img style="width: 623px; height: 558px;" alt="Realm / Server Mapping"
+ title="Realm / Server Mapping"
+ src="..%5CImages%5CLeash_properties_krb_3.jpg"><br>
+</p>
+The <span style="font-weight: bold;">Kerberos Realms</span> 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.&nbsp; In the dialog, type the
+name of the new realm and click OK.&nbsp; However, for the realm to be
+inserted, it needs one or more servers.&nbsp; Immediately after you
+enter the new realm name, you will be prompted for the names of one
+Kerberos server in that realm.&nbsp; If you do not enter a server name,
+Leash will not insert the realm.<br>
+<br>
+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.&nbsp; You will be prompted for the name of the new
+server.&nbsp; You can also remove servers, and designate either one or
+none as the administrative server.&nbsp; (The administrative server is
+the preferred server for performing password changes.) &nbsp;<br>
+<br>
+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 <span style="font-weight: bold;">Default
+Realm Configuration</span> tab as the value for <span
+ style="font-weight: bold;">Your Kerberos Server</span>.<br>
+<br>
+The <span style="font-weight: bold;">Use DNS KDC Lookup</span>
+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.<br>
+<br>
+<p><i>DNS/Realm Mapping</i>:<br>
+<img style="width: 623px; height: 558px;" alt="DNS / Realm Mapping"
+ title="DNS / Realm Mapping"
+ src="..%5CImages%5CLeash_properties_krb_4.jpg"><br>
+</p>
+<p>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.&nbsp; You can insert new entries, edit existing
+ones, or delete old entries.</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_option_krb4_properties.htm b/src/windows/leash/htmlhelp/html/leash_option_krb4_properties.htm
new file mode 100644 (file)
index 0000000..a8922c9
--- /dev/null
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Kerberos Four Properties Command</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="properties, Kerberos4"> <param name="Keyword"
+ value="key, Ctrl+4">
+</object>
+<h3><a name="hid_krb4_properties_command"></a><b>Kerberos v4 Properties\85 Command, Ctrl+4</b></h3>
+<p>The Kerberos v4 Properties dialog is accessible from the Options
+menu. <br>
+</p>
+<p><img style="width: 623px; height: 513px;"
+ alt="Kerberos Four Properties" title="Kerberos Four Properties"
+ src="..%5CImages%5CLeash_properties_krb4.jpg"><br>
+</p>
+<p>Here, you can specify the name of the in-memory cache used to store
+the Kerberos 4 tickets.&nbsp; The format of the name is \93API:\94 followed
+by the cache name.&nbsp; Disk caches are not supported by Kerberos for
+Windows.<br>
+<br>
+The paths to the Kerberos 4 configuration files: krb.con and
+krbrealm.con may be changed from this dialog if necessary.&nbsp; The
+default is to store the configuration files in the Windows directory.<br>
+<br>
+</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_option_krb5_properties.htm b/src/windows/leash/htmlhelp/html/leash_option_krb5_properties.htm
new file mode 100644 (file)
index 0000000..d686882
--- /dev/null
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Kerberos Five Properties Command</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="properties, Kerberos5"> <param name="Keyword"
+ value="key, Ctrl+5">
+</object>
+<h3><a name="hid_krb5_properties_command"></a><b>Kerberos v5 Properties Command, Ctrl+5</b></h3>
+The Kerberos v5 Properties dialog is accessible from the Options menu.
+This dialog has two tabs: <span style="font-weight: bold;">File
+Location</span> and <span style="font-weight: bold;">Configuration
+Options</span>.<br>
+<br>
+<span style="font-style: italic;">File Location:</span><br>
+<br>
+<img style="width: 633px; height: 477px;"
+ alt="Kerberos Five Properties: File Location"
+ title="Kerberos Five Properties: File Location"
+ src="..%5CImages%5CLeash_properties_krb5_1.jpg"><br>
+<br>
+<p class="MsoBodyTextIndent2" style="text-indent: 0in;">The <b>File
+Location</b>
+tab allows you to specify the location of the default Kerberos 5 ticket
+cache and
+configuration file.<span style="">&nbsp; </span>The <b style="">Ticket
+File </b>field specifies the name of
+the in-memory cache (Ticket File) used to store the Kerberos 5 tickets.<span
+ style="">&nbsp; </span>The format of the name is \93API:\94 followed by
+the cache name or "MSLSA:".<span style="">&nbsp; </span>Disk caches
+(type "FILE:") are not
+supported by Kerberos for Windows.<span style="">&nbsp; </span>The <b
+ style="">Configuration File </b>field specifies the
+path to the Kerberos 5 configuration file, krb5.ini.<span style="">&nbsp;
+</span>If <b style="">Confirm
+that new configuration file exists</b> is checked when the
+configuration file
+location is changed, then Leash will not accept values which are not
+pre-existing Kerberos 5 configuration files.<br>
+</p>
+<p class="MsoBodyTextIndent2" style="text-indent: 0in;"><span
+ style="font-style: italic;"><br>
+Configuration Options:</span><br>
+</p>
+<p class="MsoBodyTextIndent2" style="text-indent: 0in;"><img
+ style="width: 633px; height: 477px;"
+ alt="Kerberos Five Properties: Configuration Options"
+ title="Kerberos Five Properties: Configuration Options"
+ src="..%5CImages%5CLeash_properties_krb5_2.jpg"><br>
+</p>
+<p class="MsoBodyTextIndent2" style="text-indent: 0in;"></p>
+<p class="MsoNormal">On the <b style="">Configuration
+Options</b> page, you provide default attribute values to be used when
+requesting Kerberos 5 tickets from the Kerberos server.<span style="">&nbsp;
+</span></p>
+<p class="MsoNormal">When <b style="">Forwardable </b>tickets
+are received from the Kerberos Server, these tickets can be forwarded
+to a
+remote host when you connect via telnet, ssh, ftp, rlogin, or similar
+applications.<span style="">&nbsp; </span>When tickets are
+forwarded, there is no need to obtain Kerberos tickets again to access
+Kerberized
+services on the remote host. </p>
+<p class="MsoNormal">When <b style="">Proxiable </b>tickets
+are received from the Kerberos Server, these tickets can be passed onto
+Kerberized services which can in turn act on your behalf.<span style="">&nbsp;</span><o:p>&nbsp;</o:p></p>
+<p class="MsoNormal">When <b style="">Renewable</b>
+tickets are received from the Kerberos Server, the ticket lifetimes may
+be
+renewed without prompting the user for her password.<span style="">&nbsp;
+</span>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.<span
+ style="">&nbsp; </span>When combined with <b style="">Automatic
+Ticket Renewal </b>(Option menu), Leash can maintain valid
+tickets for a week, a month, or longer by automatically renewing
+tickets prior
+to their expiration.<span style="">&nbsp; </span>The ability to
+renew tickets without a password is limited by the ticket\92s renewable
+lifetime as
+issued by the Kerberos Server.<o:p></o:p></p>
+<p class="MsoNormal">Traditionally, Kerberos tickets have included a
+list of
+network addresses within the tickets.<span style="">&nbsp;
+</span>This address list restricts the use of the tickets to the
+computers
+which are assigned those addresses.<span style="">&nbsp; </span>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.<span style="">&nbsp;
+</span>On these networks the address of the client
+machine appears to be different to the network service than it does to
+the
+client.<span style="">&nbsp; </span>The result is the Kerberos
+ticket is deemed to be invalid by the service even though it has not been
+stolen.<span style="">&nbsp; </span>When <b style="">No Addresses </b>is
+checked, Kerberos will not insert an address list
+into the Kerberos tickets.<span style="">&nbsp; </span>For
+Kerberized services which do not require address lists, this will
+enable
+Kerberos to be used across NAT and VPN based connections.<span style="">&nbsp;</span><o:p>&nbsp;</o:p></p>
+<p class="MsoNormal">Note 1:<span style="">&nbsp; </span>As of
+Kerberos 5 release 1.3, the library default is to disable the use of
+address
+lists.<span style="">&nbsp; </span>Leash will detect the setting
+from the Kerberos 5 configuration and check the <b style="">No
+Addresses</b> box.<span style="">&nbsp; </span>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. <span style="">&nbsp;</span><o:p>&nbsp;</o:p></p>
+<p class="MsoNormal">Note 2: Distributed Computing Environment (DCE)
+servers
+require the use of address lists.</p>
+<br>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_option_leash_properties.htm b/src/windows/leash/htmlhelp/html/leash_option_leash_properties.htm
new file mode 100644 (file)
index 0000000..2ca9221
--- /dev/null
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Leash Properties Command</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="properties, Leash"> <param name="Keyword"
+ value="key, Ctrl+L">
+</object>
+<h3><a name="hid_leash_properties_command"></a><b>Leash Properties\85 Command, Ctrl+L</b></h3>
+<p>
+</p>
+<p class="MsoNormal">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.</p>
+<p><br>
+<img style="width: 578px; height: 377px;" alt="Leash Properties"
+ title="Leash Properties" src="..%5CImages%5CLeash_properties_leash.jpg"></p>
+<p class="MsoNormal">Here you can set a time server from which Leash
+will obtain
+the correct time.<span style="">&nbsp; </span>Leash needs the
+correct time because of the time dependencies in Kerberos tickets.<span
+ style="">&nbsp; </span>When you specify a time server, Leash tries
+to get the time from that server when you next run the Synchronize Time
+command.<span style="">&nbsp; </span>The default value for the time
+server is "time".<span style="">&nbsp; </span>If access to
+a time server were to fail, Leash would notify you, and revert to the
+server
+"time".<span style="">&nbsp; </span>Whichever server
+succeeds, Leash would tell you where it found the time.<span style="">&nbsp;
+</span>See the Synchronize Time command for more
+information.</p>
+<p class="MsoNormal">
+</p>
+<p class="MsoNormal">The <b style="">Automatic MSLSA
+Ticket Importation</b> radio buttons allow you to configure how Leash
+interacts
+with the Microsoft Kerberos Authentication Provider.<span style="">&nbsp;
+</span>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.<span style="">&nbsp; </span><b style="">Never</b>
+means do not import tickets from
+the MSLSA; <b style="">Always</b> means do import
+tickets from the MSLSA; and <b style="">When MSLSA
+Principal matches Default Realm</b> means import tickets from the MSLSA
+only if
+the Kerberos principal belongs to the Kerberos Realm specified within
+the <u style="">Kerberos Properties Dialog.</u><o:p></o:p></p>
+<p class="MsoNormal"><o:p></o:p></p>
+<p class="MsoNormal">When <b>Request Kerberos 4 credentials</b> is
+checked, Leash
+will attempt to retrieve Kerberos 4 credentials when ticket
+initialization,
+renewal, or importation is performed.<span style="">&nbsp;
+</span>Leash will attempt a Kerberos 5 to Kerberos 4 conversion and if
+that
+fails an initial Kerberos 4 ticket request will be generated.<span
+ style="">&nbsp; </span>Kerberos realms are increasingly configured
+to support on Kerberos 5.<span style="">&nbsp; </span>If the realms
+you use do not support Kerberos 4 it is suggested that this button be
+unchecked.</p>
+<p class="MsoNormal">The <b>Restore Leash Defaults</b> 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.<br>
+<br>
+</p>
+</body>
+</html>
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
new file mode 100644 (file)
index 0000000..c4c1abe
--- /dev/null
@@ -0,0 +1,24 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Upper Case Realm Name Option</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="uppercase">
+</object>
+<h3><a name="hid_uppercase_realm_option"></a><b>Upper Case Realm Name
+Option</b></h3>
+<p>
+</p>
+<p class="MsoNormal">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.</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_topic_about_kerberos.htm b/src/windows/leash/htmlhelp/html/leash_topic_about_kerberos.htm
new file mode 100644 (file)
index 0000000..a71181a
--- /dev/null
@@ -0,0 +1,52 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>KERBEROS</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+<OBJECT TYPE="application/x-oleobject" CLASSID="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
+       <PARAM NAME="Keyword" VALUE="about">
+</OBJECT>
+
+<P><H2><A NAME="id_help_kerberos"></A><A NAME="hid_about_kerberos"></A>About Kerberos</H2></P>
+
+<P>In Greek myth, the three-headed dog Kerberos guarded the gates of Hades.
+These days, Kerberos is an <A
+HREF="leas6oyq.htm#id_help_authentic">authentication</A> 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 <A HREF="leash_topic_kerberos_principal.htm#id_help_principal">principal</A>, to a
+private key encryption. </P>
+
+<P>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. </P>
+
+<P>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.</P>
+
+<P><B>See Also</B></P>
+
+<P><A HREF="leash_topic_kerberos_auth_service.htm">An Authentication Service for Open Network
+Systems</A></P>
+
+<P>(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.)</P>
+
+<P><A HREF="leash_topic_kerberos_principals.htm">Kerberos: How Does the Other Guy Know Who I
+Am?</A>.</P>
+
+<P>(This basic introduction to Kerberos and definitions of Kerberos-related
+terms is available in the SIPB publication <I>An Inessential Guide to
+Athena</I>.)</P>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/leash_topic_error_57.htm b/src/windows/leash/htmlhelp/html/leash_topic_error_57.htm
new file mode 100644 (file)
index 0000000..f765293
--- /dev/null
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Kerberos Error 57</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="error, 57">
+</object>
+<p><h2><a name="krb_unknown_realm"></a><span style="font-weight: bold;">Kerberos Error 57: Cannot contact the Kerberos server for the selected realm.</span></h2></p>
+<p>This error has three common causes:</p>
+<p>1.The realm is misspelled, e.g. pbh@AHTENA.MIT.EDU instead of
+pbh@ATHENA.MIT.EDU (realms are case sensitive).</p>
+<p>2.Your krb.con file contains an entry for ATHENA.MIT.EDU but not
+athena.mit.edu.</p>
+<p>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.</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_topic_error_62.htm b/src/windows/leash/htmlhelp/html/leash_topic_error_62.htm
new file mode 100644 (file)
index 0000000..41f4540
--- /dev/null
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Kerberos Error 62</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="error, 62">
+</object>
+<p><h2><a name="krb_incorr_passwd"></a><span style="font-weight: bold;">Kerberos Error 62: Password incorrect.</span></h2></p>
+<p>This means that either you have misspelled your password or you have
+gotten the case wrong. Check the state of your CAPS Lock key.</p>
+<p>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.</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_topic_error_8.htm b/src/windows/leash/htmlhelp/html/leash_topic_error_8.htm
new file mode 100644 (file)
index 0000000..5fb8846
--- /dev/null
@@ -0,0 +1,21 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Kerberos Error 8</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="error, 8">
+</object>
+<p><h2><a name="krb_unknown_user"></a><span style="font-weight: bold;">Kerberos Error 8: Unknown username, instance, or realm.</span></h2></p>
+<p>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. </p>
+<p>Check the entered username or realm name for spelling mistakes or
+the wrong case.</p>
+</body>
+</html>
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
new file mode 100644 (file)
index 0000000..fa7829f
--- /dev/null
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Invalid Principle</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="error, invalid principal">
+</object>
+<p><h2><a name="lsh_invprincipal"></a><span style="font-weight: bold;">Invalid principal.</span></h2></p>
+<p>This usually means that you just clicked on the OK button or pressed
+Enter without typing your username. </p>
+</body>
+</html>
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
new file mode 100644 (file)
index 0000000..6aeb657
--- /dev/null
@@ -0,0 +1,988 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>An Authentication Service for Open Network Systems</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="Kerberos">
+</object>
+<p><b><a name="id_help_usenix88"></a><i>Kerberos</i>: An Authentication
+Service for Open Network Systems</b></p>
+<p style="text-align: center;"><i>Jennifer G. Steiner</i></p>
+<div style="text-align: center;"></div>
+<div style="text-align: center;">
+<address>Project Athena </address>
+</div>
+<div></div>
+<div style="text-align: center;">
+<address>Massachusetts Institute of Technology</address>
+</div>
+<div style="text-align: center;"></div>
+<div style="text-align: center;">
+<address>Cambridge, MA 02139 </address>
+</div>
+<div style="text-align: center;"></div>
+<div style="text-align: center;">
+<address>steiner@ATHENA.MIT.EDU</address>
+</div>
+<div style="text-align: center;"></div>
+<p style="text-align: center;"><i>Clifford Neuman</i> *</p>
+<div style="text-align: center;"></div>
+<div style="text-align: center;">
+<address>Department of Computer Science, FR-35</address>
+</div>
+<div style="text-align: center;"></div>
+<div style="text-align: center;">
+<address>University of Washington</address>
+</div>
+<div style="text-align: center;"></div>
+<div style="text-align: center;">
+<address>Seattle, WA 98195</address>
+</div>
+<div style="text-align: center;"></div>
+<div style="text-align: center;">
+<address>bcn@CS.WASHINGTON.EDU</address>
+</div>
+<div style="text-align: center;"></div>
+<p style="text-align: center;">Jeffrey I. Schiller</p>
+<div style="text-align: center;"></div>
+<div style="text-align: center;">
+<address>Project Athena</address>
+</div>
+<div style="text-align: center;"></div>
+<div style="text-align: center;">
+<address>Massachusetts Institute of Technology</address>
+</div>
+<div style="text-align: center;"></div>
+<div style="text-align: center;">
+<address>Cambridge, MA 02139</address>
+</div>
+<div style="text-align: center;"></div>
+<div style="text-align: center;">
+<address>jis@ATHENA.MIT.EDU</address>
+</div>
+<p>* Clifford Neuman was a member of the Project Athena staff during
+the design and initial implementation phase of <i>Kerberos.</i></p>
+<p></p>
+<p style="text-align: center;"><i>ABSTRACT</i></p>
+<p style="text-align: center;">In an open network computing
+environment, a workstation cannot be trusted to identify its users
+correctly to network services. <i>Kerberos</i> provides an alternative
+approach whereby a trusted third-party authentication service is used
+to verify users' identities. This paper gives an overview of the <i>Kerberos</i>
+authentication model as implemented for MIT's Project Athena. It
+describes the protocols used by clients, servers, and <i>Kerberos</i>
+to achieve authentication. It also describes the management and
+replication of the database required. The views of <i>Kerberos</i> as
+seen by the user, programmer, and administrator are described. Finally,
+the role of <i>Kerberos</i> in the larger Athena picture is given,
+along with a list of applications that presently use <i>Kerberos</i>
+for user authentication. We describe the addition of <i>Kerberos</i>
+authentication to the Sun Network File System as a case study for
+integrating <i>Kerberos</i> with an existing application.</p>
+<p><b>Introduction</b></p>
+<p>This paper gives an overview of <i>Kerberos,</i> 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 <i>Kerberos</i>
+software and describes how they interact in providing the
+authentication service. In Section 3, we describe the <i>Kerberos</i>
+naming scheme.</p>
+<p>Section 4 presents the building blocks of <i>Kerberos</i>
+authentication - the <i>ticket</i> and the <i>authenticator.</i> This
+leads to a discussion of the two authentication protocols: the initial
+authentication of a user to <i>Kerberos</i> (analogous to logging in),
+and the protocol for mutual authentication of a potential consumer and
+a potential producer of a network service.</p>
+<p><i>Kerberos</i> 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 <i>Kerberos</i>
+interface to its users, applications programmers, and administrators.
+In Section 7, we describe how the Project Athena <i>Kerberos</i> fits
+into the rest of the Athena environment. We also describe the
+interaction of different <i>Kerberos</i> authentication domains, or <i>realms
+;</i> in our case, the relation between the Project Athena <i>Kerberos</i>
+and the <i>Kerberos</i> running at MIT's Laboratory for Computer
+Science.</p>
+<p>In Section 8, we mention open issues and problems as yet unsolved.
+The last section gives the current status of <i>Kerberos</i> at
+Project Athena. In the appendix, we describe in detail how <i>Kerberos</i>
+is applied to a network file service to authenticate users who wish to
+gain access to remote file systems. </p>
+<p><b>Conventions.</b> 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. </p>
+<p><i>User, Client, Server.</i> By <i>user,</i> we mean a human being
+who uses a program or service. A <i>client</i> 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 <i>client</i>
+side and <i>server</i> side of the application, respectively. Often, a
+<i>client</i> will contact a <i>server</i> on behalf of a <i>user.</i></p>
+<p>Each entity that uses the <i>Kerberos</i> system, be it a user or a
+network server, is in one sense a client, since it uses the <i>Kerberos</i>
+service. So to distinguish <i>Kerberos</i> clients from clients of
+other services, we use the term <i>principal</i> to indicate such an
+entity. Note that a <i>Kerberos</i> principal can be either a user or
+a server. (We describe the naming of <i>Kerberos</i> principals in a
+later section.) </p>
+<p><i>Service vs. Server.</i> We use <i>service</i> as an abstract
+specification of some actions to be performed. A process which performs
+those actions is called a <i>server.</i> At a given time, there may be
+several <i>servers</i> (usually running on different machines)
+performing a given <i>service.</i> For example, at Athena there is one
+BSD UNIX <i>rlog-in</i> server running on each of our timesharing
+machines. </p>
+<p><i>Key, Private Key, Password. Kerberos</i> uses private key
+encryption. Each <i>Kerberos</i> principal is assigned a large number,
+its private key, known only to that principal and <i>Kerberos.</i> In
+the case of a user, the private key is the result of a one-way function
+applied to the user's <i>password.</i> We use <i>key</i> as shorthand
+for <i>private key.</i> </p>
+<p><i>Credentials.</i> Unfortunately, this word has a special meaning
+for both the Sun Network File System and the <i>Kerberos</i> system.
+We explicitly state whether we mean NFS credentials or <i>Kerberos</i>
+credentials, otherwise the term is used in the normal English language
+sense. </p>
+<p><i>Master and Slave.</i> It is possible to run <i>Kerberos</i>
+authentication software on more than one machine. However, there is
+always only one definitive copy of the <i>Kerberos</i> database. The
+machine which houses this database is called the <i>master</i>
+machine, or just the <i>master.</i> Other machines may possess
+read-only copies of the <i>Kerberos</i> database, and these are called
+<i>slaves.</i></p>
+<p><b>1. Motivation</b></p>
+<p>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.</p>
+<p>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.</p>
+<p>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.</p>
+<p>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.</p>
+<p>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.</p>
+<p>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.</p>
+<p>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.</p>
+<p>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.</p>
+<p><b>2. What is <i>Kerberos</i> ?</b></p>
+<p><i>Kerberos</i> 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 <i>Kerberos'</i> 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 <i>replay.</i>
+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.</p>
+<p><b>2.1. What Does It Do?</b></p>
+<p><i>Kerberos</i> keeps a database of its clients and their <i>private
+keys. </i>The private key is a large number known only to <i>Kerberos</i>
+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 <i>Kerberos,</i> as do clients wishing to use those
+services. The private keys are negotiated at registration.</p>
+<p>Because <i>Kerberos</i> knows these private keys, it can create
+messages which convince one client that another is really who it claims
+to be. <i>Kerberos</i> also generates temporary private keys, called <i>session
+keys,</i> which are given to two clients and no one else. A session key
+can be used to encrypt messages between two parties.</p>
+<p><i>Kerberos</i> 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.</p>
+<p>Other applications require authentication of each message, but do
+not care whether the content of the message is disclosed or not. For
+these, <i>Kerberos</i> provides <i>safe messages.</i> Yet a higher
+level of security is provided by <i>private messages,</i> where each
+message is not only authenticated, but also encrypted. Private messages
+are used, for example, by the <i>Kerberos</i> server itself for
+sending passwords over the network</p>
+<p><b>2.2. Software Components</b></p>
+<p>The Athena implementation comprises several modules (see Figure 1).
+The <i>Kerberos</i> 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.<br>
+</p>
+<ul style="margin-left: 40px;">
+  <li><span style="font-style: italic;">Kerberos</span> applications
+library</li>
+  <li>encryption library</li>
+  <li>database library</li>
+  <li>database administration programs</li>
+  <li>administration server</li>
+  <li>authentication server</li>
+  <li>propogation software</li>
+  <li>user programs</li>
+  <li>applications</li>
+</ul>
+<p style="text-align: left; margin-left: 40px;"><b>Figure 1. </b>Kerberos
+Software Components</p>
+<p>Encryption in <i>Kerberos</i> 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.</p>
+<p>Another replaceable module is the database management system. The
+current Athena implementation of the database library uses <i>ndbm,</i>
+although INGRES was originally used. Other database management
+libraries could be used as well.</p>
+<p>The <i>Kerberos</i> 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.)</p>
+<p>Other user information, such as real name, phone number, and so
+forth, is kept by another server, the <i>Hesiod</i> nameserver. This
+way, sensitive information, namely passwords, can be handled by <i>Kerberos,</i>
+using fairly high security measures; while the non-sensitive
+information kept by <i>Hesiod</i> is dealt with differently; it can,
+for example, be sent unencrypted over the network.</p>
+<p>The <i>Kerberos</i> servers use the database library, as do the
+tools for administering the database.</p>
+<p>The <i>administration server</i> (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 <i>Kerberos</i> database
+in order to make changes to the database.</p>
+<p>The <i>authentication server </i>(or <i>Kerberos</i> server), on
+the other hand, performs read-only operations on the <i>Kerberos</i>
+database, namely, the authentication of principals, and generation of
+session keys. Since this server does not modify the <i>Kerberos</i>
+database, it may run on a machine housing a read-only copy of the
+master <i>Kerberos</i> database.</p>
+<p>Database propagation software manages replication of the <i>Kerberos</i>
+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 <i>slave</i> machines receives an update
+of the <i>Kerberos</i> database from the <i>master</i> machine at
+given intervals.</p>
+<p>Finally, there are end-user programs for logging in to <i>Kerberos,</i>
+changing a <i>Kerberos</i> password, and displaying or destroying <i>Kerberos</i>
+<i>tickets</i> (tickets are explained later on).</p>
+<p><b>3. <i>Kerberos</i> Names</b></p>
+<p>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 <i>Kerberos,</i> 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 <i>name.instance@realm</i> (see
+Figure 2).</p>
+<p style="margin-left: 80px;">bcn</p>
+<p style="margin-left: 80px;">treese.root</p>
+<p style="margin-left: 80px;">jis@LCS.MIT.EDU</p>
+<p style="margin-left: 80px;">rlog-in.priam@ATHENA.MIT.EDU</p>
+<p style="margin-left: 40px;"><b>Figure 2.</b> <i>Kerberos</i> Names</p>
+<p>The <i>primary name</i> is the name of the user or the service. The
+<i>instance</i> 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 <i>rlog-in</i> service has different instances
+on different hosts: <i>rlog-in.priam</i> is the <i>rlog-in</i> server
+on the host named priam. A <i>Kerberos</i> 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 <i>realm</i> is
+the name of an administrative entity that maintains authentication
+data. For example, different institutions may each have their own <i>Kerberos</i>
+machine, housing a different database. They have different <i>Kerberos</i>
+realms. (Realms are discussed further in section 8.2.).</p>
+<p><b>4. How It Works</b></p>
+<p>This section describes the <i>Kerberos</i> authentication
+protocols. The following abbreviations are used in the figures.<br>
+</p>
+<div style="margin-left: 40px;">
+<pre>c&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; -&gt; &nbsp;&nbsp;  client<br>s&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; -&gt;&nbsp;&nbsp;&nbsp; &nbsp;server<br>addr &nbsp;&nbsp;  -&gt;        client's network address<br>life         -&gt;  lifetime of ticket<br>tgs, TGS -&gt;    ticket-granting ticket<br>Kerberos -&gt;        authentication server<br>KDBM    -&gt;  administration server<br>K<sub>x</sub>   -&gt;  x's private key<br>K<sub>x,y</sub>        -&gt;         session key for x and y<br>{abc}K<sub>x</sub>    -&gt;  abc encrypted in x's key<br>T<sub>x,y</sub>       -&gt; x's ticket to use y<br>A<sub>x</sub>     -&gt;  authenticator for x<br>WS        -&gt;  workstation<br></pre>
+<span style="font-weight: bold;"></span></div>
+<p>As mentioned above, the <i>Kerberos</i> 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 <i>Kerberos.</i> 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.</p>
+<p><b>4.1 Credentials</b></p>
+<p>There are two types of credentials used in the <i>Kerberos</i>
+authentication model: <i>tickets</i> and <i>authenticators.</i> 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.</p>
+<p>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).<br>
+</p>
+<p style="margin-left: 40px;">{s, c, addr, timestamp, life, K<sub>s,c</sub>}
+K<sub>s</sub><br>
+</p>
+<p style="margin-left: 40px;"><b>Figure 3.</b> Kerberos Ticket.</p>
+<p>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).</p>
+<div style="margin-left: 40px;">{ c, addr, timestamp } K<sub>s,c</sub><br>
+</div>
+<p style="margin-left: 40px;"><b>Figure 4.</b> A <i>Kerberos</i>
+Authenticator</p>
+<p><b>4.2. Getting the Initial Ticket</b></p>
+<p>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).</p>
+<p style="margin-left: 40px;"><b><img
+ style="width: 447px; height: 170px;" alt=""
+ src="../Images/Kerberos_auth_serv_fig_5.jpg"><br>
+Figure 5.</b> Getting the Initial Ticket.</p>
+<p>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 <i>ticket-granting
+service.</i></p>
+<p>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.</p>
+<p>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 <i>Kerberos</i> and the client, which is derived from the
+user's password.</p>
+<p>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.</p>
+<p>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.</p>
+<p><b>4.3. Requesting a Service</b></p>
+<p>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.</p>
+<p>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).</p>
+<p style="margin-left: 40px;"><b><img
+ style="width: 434px; height: 101px;" alt=""
+ src="..%5CImages%5CKerberos_auth_serv_fig_6.jpg"><br>
+Figure 6.</b> Requesting a Service</p>
+<p>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.</p>
+<p>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).</p>
+<p style="margin-left: 40px;"><b><img
+ style="width: 421px; height: 108px;" alt=""
+ src="..%5CImages%5CKerberos_auth_serv_fig_7.jpg"><br>
+Figure 7.</b> Mutual Authentication</p>
+<p>At the end of this exchange, the server is certain that, according
+to <i>Kerberos,</i> 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.</p>
+<p><b>4.4 Getting Server Tickets</b></p>
+<p>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.</p>
+<p>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.</p>
+<p style="margin-left: 40px;"><b><img
+ style="width: 482px; height: 183px;" alt=""
+ src="..%5CImages%5CKerberos_auth_serv_fig_8.jpg"><br>
+Figure 8.</b> Getting a Server Ticket</p>
+<p>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.</p>
+<p>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.</p>
+<p></p>
+<p style="margin-left: 40px;"><b><img
+ style="width: 702px; height: 334px;" alt=""
+ src="..%5CImages%5CKerberos_auth_serv_fig_9.jpg"><br>
+Figure 9. </b><i>Kerberos</i> Authentication Protocols.</p>
+<p><b>5. <i>Kerberos</i> Database</b></p>
+<p>Up to this point, we have discussed operations requiring read-only
+access to the <i>Kerberos</i> database. These operations are performed
+by the authentication service, which can run on both master and slave
+machines (see Figure 10).</p>
+<p style="margin-left: 40px;"><b><img
+ style="width: 416px; height: 271px;" alt=""
+ src="..%5CImages%5CKerberos_auth_serv_fig_10.jpg"><br>
+Figure 10.</b> Authentication Requests.</p>
+<p>In this section, we discuss operations that require write access to
+the database. These operations are performed by the administration
+service, called the <i>Kerberos</i> Database Management Service <i>(KDBM).</i>
+The current implementation stipulates that changes may only be made to
+the master <i>Kerberos</i> database; slave copies are read-only.
+Therefore, the KDBM server may only run on the master <i>Kerberos</i>
+machine (see Figure 11).</p>
+<p style="margin-left: 40px;"><b><img
+ style="width: 401px; height: 273px;" alt=""
+ src="..%5CImages%5CKerberos_auth_serv_fig_11.jpg"><br>
+Figure 11.</b> Administration Requests</p>
+<p>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.</p>
+<p>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 <i>kpasswd</i> program. The KDBM also accepts requests
+from <i>Kerberos</i> 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 <i>kadmin</i> program.</p>
+<p><b>5.1. The KDBM Server</b></p>
+<p>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.</p>
+<p>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 <i>Kerberos</i>
+system). If the requester's principal name is found in this file, the
+request is permitted, otherwise it is denied.</p>
+<p>By convention, names with a. <b>NULL</b> instance (the default
+instance) do not appear in the access control list file; instead, an <b>admin</b>
+instance is used. Therefore, for a user to become an administrator of <i>Kerberos</i>
+an <b>admin</b> 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 <i>Kerberos</i> administration then s/he
+would use for normal log-in.</p>
+<p>All requests to the KDBM program, whether permitted or denied, are
+logged.</p>
+<p><b>5.2. The <i>kadmin</i> and <i>kpasswd</i> Programs</b></p>
+<p>Administrators of <i>Kerberos</i> use the <i>kadmin</i> program to
+add principals to the database, or change the passwords of existing
+principals. An administrator is required to enter the password for
+their <i>admin</i> instance name when they invoke the <i>kadmin</i>
+program. This password is used to fetch a ticket for the KDBM server
+(see Figure 12).</p>
+<p></p>
+<p style="margin-left: 40px;"><b><img
+ style="width: 642px; height: 304px;" alt=""
+ src="..%5CImages%5CKerberos_auth_serv_fig_12.jpg"><br>
+Figure 12.</b> Kerberos Administration Protocol.</p>
+<p>Users may change their <i>Kerberos</i> passwords using the <i>kpasswd</i>
+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.</p>
+<p><b>5.3. Database Replication</b></p>
+<p>Each <i>Kerberos</i> realm has a <i>master</i> <i>Kerberos</i>
+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 <i>slave</i> 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.</p>
+<p>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 <i>kprop,</i>
+sends the update to a peer program, called <i>kpropd,</i> running on
+each of the slave machines (see Figure 13). First <i>kprop</i> sends a
+checksum of the new database it is about to send. The checksum is
+encrypted in the <i>Kerberos</i> master database key, which both the
+master and slave <i>Kerberos</i> machines possess. The data is then
+transferred over the network to the <i>kpropd</i> 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.</p>
+<p style="margin-left: 40px;"><b><img
+ style="width: 387px; height: 247px;" alt=""
+ src="..%5CImages%5CKerberos_auth_serv_fig_13.jpg"><br>
+Figure 13. </b>Database Propagation</p>
+<p>All passwords in the <i>Kerberos</i> 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.</p>
+<p><b>6. <i>Kerberos</i> From the Outside Looking In</b></p>
+<p>The section will describe <i>Kerberos</i> 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 <i>Kerberos</i>
+administrator.</p>
+<p><b>6.1. User's Eye View</b></p>
+<p>If all goes well, the user will hardly notice that <i>Kerberos</i>
+is present. In our UNIX implementation, the ticket-granting ticket is
+obtained from <i>Kerberos</i> as part of the <i>log-in</i> process.
+The changing of a user's <i>Kerberos</i> password is part of the <i>passwd</i>
+program. And <i>Kerberos</i> tickets are automatically destroyed when
+a user logs out.</p>
+<p>If the user's log-in session lasts longer than the lifetime of the
+ticket-granting ticket (currently 8 hours), the user will notice <i>Kerberos'</i>
+presence because the next time a <i>Kerberos -authenticated</i>
+application is executed, it will fail. The <i>Kerberos</i> ticket for
+it will have expired. At that point, the user can run the <i>kinit</i>
+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 <i>klist</i> command out of curiosity may be surprised
+at all the tickets which have silently been obtained on her/his behalf
+for services which require <i>Kerberos</i> authentication.</p>
+<p><b>6.2. From the Programmer's Viewpoint</b></p>
+<p>A programmer writing a <i>Kerberos</i> 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 <i>Kerberos</i> 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.</p>
+<p>The most commonly used library functions are <i>krb_mk_req</i> on
+the client side, and <i>krb_rd_req</i> on the server side. The <i>krb_mk_req</i>
+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 <i>krb_mk_req</i>
+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 <i>krb_rd_req.</i>
+The routine returns a judgement about the authenticity of the sender's
+alleged identity.</p>
+<p>If the application requires that messages sent between client and
+server be secret, then library calls can be made to <i>krb_mk_priv
+(krb_rd_priv)</i> to encrypt (decrypt) messages in the session key
+which both sides now share.</p>
+<p><b>6.3. The <i>Kerberos</i> Administrator's Job</b></p>
+<p>The <i>Kerberos</i> 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 <i>Kerberos</i>
+administrator's name with an <b>admin </b>instance. The <i>Kerberos</i>
+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.</p>
+<p>After these initial steps have been taken, the administrator
+manipulates the database over the network, using the <i>kadmin</i>
+program. Through that program, new principals can be added, and
+passwords can be changed.</p>
+<p>In particular, when a new <i>Kerberos</i> application is added to
+the system, the <i>Kerberos</i> 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 <i>/etc/srvtab.</i> The <i>krb_rd_req</i>
+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 <i>/etc/srvtab</i> file authenticates the
+server as a password typed at a terminal authenticates the user.</p>
+<p>The <i>Kerberos</i> administrator must also ensure that <i>Kerberos</i>
+machines are physically secure, and would also be wise to maintain
+backups of the Master database.</p>
+<p><b>7. The Bigger Picture</b></p>
+<p>In this section, we describe how <i>Kerberos</i> fits into the
+Athena environment, including its use by other network services and
+applications, and how it interacts with remote <i>Kerberos</i> realms.
+For a more complete description of the Athena environment, please see
+G. W. Treese.</p>
+<p><b>7.1. Other Network Services' Use of <i>Kerberos</i></b></p>
+<p>Several network applications have been modified to use <i>Kerberos.</i>
+The <i>rlog-in</i> and <i>rsh</i> commands first try to authenticate
+using <i>Kerberos.</i> A user with valid <i>Kerberos</i> tickets can
+rlog-in to another Athena machine without having to set up.<i>rhosts</i>
+files. If the <i>Kerberos</i> authentication fails, the programs fall
+back on their usual methods of authorization, in this case, the.<i>rhosts</i>
+files.</p>
+<p>We have modified the Post Office Protocol to use <i>Kerberos</i>
+for authenticating users who wish to retrieve their electronic mail
+from the "post office". A message delivery program, called <i>Zephyr,</i>
+has been recently developed at Athena, and it uses <i>Kerberos</i> for
+authentication as well.</p>
+<p>The program for signing up new users, called <i>register,</i> uses
+both the Service Management System (SMS) and <i>Kerberos.</i> 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 <i>Kerberos</i> to see if the requested username is
+unique. If all goes well, a new entry is made to the <i>Kerberos</i>
+database, containing the username and password.</p>
+<p>For a detailed discussion of the use of <i>Kerberos</i> to secure
+Sun's Network File System, please refer to the appendix..</p>
+<p><b>7.2. Interaction with Other Kerberi</b></p>
+<p>It is expected that different administrative organizations will want
+to use <i>Kerberos</i> for user authentication. It is also expected
+that in many cases, users in one organization will want to use services
+in another. <i>Kerberos</i> supports multiple administrative domains.
+The specification of names in <i>Kerberos</i> includes a field called
+the <i>realm.</i> This field contains the name of the administrative
+domain within which the user is to be authenticated.</p>
+<p>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.</p>
+<p>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.</p>
+<p>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.</p>
+<p><b>8. Issues and Open Problems</b></p>
+<p>There are a number of issues and open problems associated with the <i>Kerberos</i>
+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.</p>
+<p>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.</p>
+<p>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 <i>authentication forwarding.</i>
+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.</p>
+<p>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 <i>log-in</i> 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 <i>smartcard</i> capable of
+doing the encryptions required in the authentication protocol.</p>
+<p><b>9. Status</b></p>
+<p>A prototype version of <i>Kerberos</i> went into production in
+September of 1986. Since January of 1987, <i>Kerberos</i> has been
+Project Athena's sole means of authenticating its 5,000 users, 650
+workstations, and 65 servers. In addition, <i>Kerberos</i> is now
+being used in place of.<i>rhosts</i> files for controlling access in
+several of Athena's timesharing systems.</p>
+<p><b>10. Acknowledgments</b></p>
+<p><i>Kerberos</i> 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.</p>
+<p>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.</p>
+<p>The illustration on the title page is by Betsy Bruemmer.</p>
+<p><b>Appendix</b></p>
+<p><b><i>Kerberos</i> Application to Sun's Network File System (NFS)</b></p>
+<p>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 <i>Kerberos</i> to determine
+her/his authenticity. The <i>log-in</i> program prompts for a username
+(as on any UNIX system). This username is used to fetch a <i>Kerberos</i>
+ticket-granting ticket. The <i>log-in</i> 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 <i>Hesiod</i>
+naming service and mounted through NFS. The <i>log-in</i> 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 <i>Hesiod</i> 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 <i>/etc/passwd.)</i></p>
+<p>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.).</p>
+<p>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 <i>Kerberos</i>
+into the scheme.</p>
+<p><b>Unmodified NFS</b></p>
+<p>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.</p>
+<p><b>Modified NFS</b></p>
+<p>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.</p>
+<p>One obvious solution would be to change the nature of credentials
+from mere indicators of UID and GIDs to full blown <i>Kerberos</i>
+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
+<i>Kerberos</i> 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 <i>Kerberos</i> library routines in the kernel address
+space.)</p>
+<p>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 <i>Kerberos -</i> moderated authentication prior to
+establishing a valid kernel credential mapping.</p>
+<p>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:</p>
+<p>&lt;CLIENT-IP-ADDRESS, UID-ON-CLIENT&gt;</p>
+<p>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.</p>
+<p>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.</p>
+<p>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.</p>
+<p>We modified the mount daemon (which handles NFS mount requests on
+server systems) to accept a new transaction type, the <i>Kerberos</i>
+authentication mapping request. Basically, as part of the mounting
+process, the client system provides a <i>Kerberos</i> authenticator
+along with an indication of her/his UID-ON-CLIENT (encrypted in the <i>Kerberos</i>
+authenticator) on the workstation. The server's mount daemon converts
+the <i>Kerberos</i> 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 <i>ndbm</i> 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 &lt;CLIENT-IP-ADDRESS, CLIENT-UID&gt; tuple for this request.</p>
+<p>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.</p>
+<p><b>Security Implications of the Modified NFS</b></p>
+<p>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 &lt;CLIENT-IP-ADDRESS, CLIENT-UID&gt; 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.</p>
+<p><b>References</b></p>
+<p>1.S. P. Miller, B. C. Neuman, J. I. Schiller, and J. H. Saltzer, <i>Section
+E.2.1: Kerberos Authentication and Authorization System</i>, M.I.T.
+Project Athena, Cambridge, Massachusetts (December 21, 1987). </p>
+<p>2.E. Balkovich, S. R. Lerman, and R. P. Parmelee, "Computing in
+Higher Education: The Athena Experience," <i>Communications of the ACM.</i>
+<b>28</b>(11), pp. 1214-1224, ACM (November, 1985).</p>
+<p>3.R. M. Needham and M. D. Schroeder, "Using Encryption for
+Authentication in Large Networks of Computers," <i>Communications of
+the ACM</i> <b>21</b>(12), pp. 993-999 (December, 1978). </p>
+<p>4.V. L. Voydock and S. T. Kent, "Security Mechanisms in High-Level
+Network Protocols," <i>Computing Surveys</i> <b>15</b>(2), ACM (June
+1983).</p>
+<p>5.National Bureau of Standards, "Data Encryption Standard," Federal
+Information Processing Standards Publication 46, Government Printing
+Office, Washington, D.C. (1977). </p>
+<p>6.S. P. Dyer, "Hesiod," in <i>Usenix Conference Proceedings</i>
+(Winter, 1988). </p>
+<p>7.W. J. Bryant, <i>Kerberos Programmer's Tutorial</i>, M.I.T.
+Project Athena (In preparation). </p>
+<p>8.W. J. Bryant, <i>Kerberos Administrator's Manual</i>, M.I.T.
+Project Athena (In preparation).</p>
+<p>9.G. W. Treese, "Berkeley Unix on 1000 Workstations: Athena Changes
+to 4.3BSD," in <i>Usenix Conference Proceedings</i> (Winter, 1988)</p>
+<p>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 <i>Usenix
+Conference Proceedings</i> (Winter, 1988).</p>
+<p>11.M. A. Rosenstein, D. E. Geer, and P. J. Levine, in <i>Usenix
+Conference Proceedings</i> (Winter, 1988).</p>
+<p>12.R. Sandberg, D. Goldberg, S. Kleiman, D. Walsh, and B. Lyon,
+"Design and Implementation of the Sun Network Filesystem," in <i>Usenix
+Conference Proceedings </i>(Summer, 1985).</p>
+</body>
+</html>
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
new file mode 100644 (file)
index 0000000..5d1eed6
--- /dev/null
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Using Kerberos in a Command Prompt Environment</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+<OBJECT TYPE="application/x-oleobject" CLASSID="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
+       <PARAM NAME="Keyword" VALUE="DOS commands">
+</OBJECT>
+
+<P><H2><A NAME="id_help_dos_kerberos"></A>Using Kerberos in a Command Prompt Environment</H2></P>
+
+<P>Command Prompt commands that are available to perform Kerberos functions</P>
+
+<P><A HREF="leash_manpage_kinit.htm">KINIT</A> - Kerberos log-in utility</P>
+
+<P><A HREF="leash_manpage_klist.htm">KLIST</A> - list currently held Kerberos tickets</P>
+
+<P><A HREF="leash_manpage_kdestroy.htm">KDESTROY</A> - destroy Kerberos tickets</P>
+
+<P><A HREF="leash_manpage_ms2mit.htm">MS2MIT</A> - import Kerberos tickets from Windows Logon Session</P>
+
+<P><A HREF="leash_manpage_aklog.htm">AKLOG</A> - obtain AFS tokens</P>
+
+</BODY>
+</HTML>
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
new file mode 100644 (file)
index 0000000..6696ffe
--- /dev/null
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Leash Program</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="Kerberos Help Topics">
+</object>
+<p></p>
+<h1><b>Kerberos Help Topics</b></h1>
+<p></p>
+<p><a href="leash_topic_about_kerberos.htm">About Kerberos</a></p>
+<p><a href="leash_topic_kerberos_names.htm">Kerberos Names</a></p>
+<p><a href="leash_topic_kerberos_tickets.htm">Kerberos Tickets</a></p>
+<p><a href="leash_topic_kerberos_command_prompt.htm">Using Kerberos in
+a Command Prompt Environment</a></p>
+<p><a href="leash_kerberos_copyright.htm">Kerberos Copyright</a></p>
+<p><a href="leash_export.htm">Kerberos Export Restrictions and Source
+Code Access</a></p>
+<p><a href="leash_topic_timing_issues.htm">Kerberos Timing Issues</a></p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_topic_kerberos_names.htm b/src/windows/leash/htmlhelp/html/leash_topic_kerberos_names.htm
new file mode 100644 (file)
index 0000000..64a512b
--- /dev/null
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Kerberos Names</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+<OBJECT TYPE="application/x-oleobject" CLASSID="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
+       <PARAM NAME="Keyword" VALUE="names">
+</OBJECT>
+
+<P><H2><A NAME="id_help_names"></A>Kerberos Names</H2></P>
+
+<P>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 <B>rlogin</B> 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.</P>
+
+<P>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:</P>
+
+<P>billb</P>
+
+<P>jis.admin</P>
+
+<P>srz@LCS.MIT.EDU</P>
+
+<P>treese.root@ATHENA.MIT.EDU</P>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/leash_topic_kerberos_principals.htm b/src/windows/leash/htmlhelp/html/leash_topic_kerberos_principals.htm
new file mode 100644 (file)
index 0000000..7b83d8a
--- /dev/null
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Kerberos: How does the other guy know who I am?</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="guide">
+</object>
+<p><b><a name="id_help_sipb"></a>Kerberos: How Does the Other Guy Know
+Who I Am?</b></p>
+<p>A portion of the text below was copied with permission from <i>An
+Inessential Guide to Athena</i> (5th edition) published by the MIT
+Student Information Processing Board.</p>
+<p>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.</p>
+<p><b>Why</b> <b>Kerberos</b> <b>is </b><a name="id_help_authentic"></a><b>needed</b>.
+Most moderately-sized to large computer systems use some form of
+password protection scheme to <i>authenticate </i>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.</p>
+<p>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). <b>Note that THE ELECTRONIC COMMUNICATIONS PRIVACY ACT of
+1986 makes this a Federal crime</b> punishable by lots of nasty stuff
+(ask your lawyer for details).</p>
+<p>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 <i>prove</i> their identity to such server
+machines.</p>
+<p><b>A few definitions</b>. Knowledge of the following terms is not
+essential for use of Kerberos but is helpful in understanding what is
+going on:</p>
+<p><b>user:</b>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.</p>
+<p><b>service:</b>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 <b>user</b> who claims to be
+logged in on the workstation. Note that workstations are <i>not </i>services,
+and thus one may not use Kerberos to log into them over the network.</p>
+<p><a name="id_help_principal"></a><b>principal:</b>An entity which can
+both prove its identity and verify the identities of other principals
+who wish to communicate with it; each <b>user</b> and each <b>service</b>
+registered with Kerberos is thus a principal.</p>
+<p><b>ticket:</b> 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 <b>authenticators</b>, which are sent over
+the network to the service.</p>
+<p><b>authenticator:</b> 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.</p>
+<p><b>How It Works...</b></p>
+<p>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 <i>tickets</i>
+and <i>authenticators</i>} which may be passed over the network and
+decrypted only by a user or machine which knows the appropriate
+encryption/decryption key.</p>
+<p><b>Using Kerberos...</b></p>
+<p>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.&nbsp;
+Examples of programs which utilize Kerberos authentication include
+e-mail, distributed file systems, remote login tools, and browsers.<br>
+</p>
+<p><b>Registering with Kerberos...</b></p>
+<p>To use Kerberos you must have an account registered in a REALM
+associated with the service(s) you wish to access.&nbsp; Contact your
+network administrator to determine the registration procedures for your
+organization.<br>
+</p>
+<p>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<code> kinit</code>.
+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<code> Principal unknown (Kerberos)</code>.
+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.<br>
+<br>
+</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_topic_kerberos_tickets.htm b/src/windows/leash/htmlhelp/html/leash_topic_kerberos_tickets.htm
new file mode 100644 (file)
index 0000000..20b8859
--- /dev/null
@@ -0,0 +1,23 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Kerberos Tickets</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+<P><H2><SUP><A NAME="id_help_tickets"></A></SUP>Kerberos Tickets</H2></P>
+
+<P>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.</P>
+
+<P>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.</P>
+
+<P><B>See Also</B></P>
+
+<P><A HREF="leash_topic_kerberos_auth_service.htm">An Authentication Service</A></P>
+
+<P><A HREF="leash_topic_kerberos_principals.htm">How Does the Other Guy Know Who I Am?</A></P>
+
+</BODY>
+</HTML>
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
new file mode 100644 (file)
index 0000000..57457d9
--- /dev/null
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Leash Program</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+<OBJECT TYPE="application/x-oleobject" CLASSID="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
+       <PARAM NAME="Keyword" VALUE="Leash program">
+</OBJECT>
+
+<P><B><A NAME="id_help_leash"></A><A NAME="hid_leash_program"></A>Leash Program</B></P>
+
+<P><I><B>leash</B> \'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.</I></P>
+
+<H1>Leash Help Topics</H1>
+
+<P><A HREF="leash_topic_leash_window.htm">Leash Screen Display (Kerberometer and Dash Notification)</A></P>
+
+<P><A HREF="leash_menu_commands.htm">Leash Commands</A></P>
+
+<P><A HREF="leash_topic_online_help.htm">How To Use Leash Online Help</A></P>
+
+<P><A HREF="leash_copyright.htm">Leash Copyright</A></P>
+
+<P><A HREF="leash_acknowledgements.htm">Acknowledgments</A></P>
+
+<P><A HREF="leash_bug_reports.htm">Reporting Problems with Leash</A></P>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/leash_topic_leash_systray.htm b/src/windows/leash/htmlhelp/html/leash_topic_leash_systray.htm
new file mode 100644 (file)
index 0000000..1ac822e
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Leash System Tray Tool</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="systray">
+</object>
+<p></p>
+<h2><a name="id_help_systray"></a>Leash System Tray Tool</h2>
+<p class="MsoNormal">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.<span style="">&nbsp; </span>Clicking on the icon with the
+first mouse button will open or close the Leash display window.<span
+ style="">&nbsp; </span>Clicking with the second mouse button will
+display a menu of commands.</p>
+<img style="width: 367px; height: 53px;" alt="System Tray Icons"
+ title="System Tray Icons" src="..%5CImages%5CLeash_systray_icons.jpg"><br>
+<br>
+<ul>
+  <li>Green: <span style="">&nbsp;&nbsp;&nbsp; </span>tickets are
+valid and have a lifetime of greater than 20 minutes</li>
+  <li>Grey: <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>no
+tickets
+are present</li>
+  <li>Orange:<span style="">&nbsp; </span>tickets are
+valid and about to expire</li>
+  <li>Red:<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>tickets
+have expired<br>
+  </li>
+</ul>
+<h3>System Tray Menu<br>
+</h3>
+<img style="width: 650px; height: 253px;" alt="System Tray Menu"
+ title="System Tray Menu" src="..%5CImages%5CLeash_systray_menu.jpg"><br>
+<br>
+<ul>
+  <li><span style="font-weight: bold;">Open Leash Window</span> will
+restore the <a href="leash_topic_leash_window.htm">Leash Ticket
+Display window</a>. If the window is already open this option will
+appear as <span style="font-weight: bold;">Close Leash Window</span>.<br>
+  </li>
+  <li><a href="leash_command_get_tickets.htm">Get Ticket(s)/Token(s)</a></li>
+  <li><a href="leash_command_renew_tickets.htm">Renew Ticket(s)/Token(s)</a></li>
+  <li><a href="leash_command_import_tickets.htm">Import Tickets</a></li>
+  <li><a href="leash_command_destroy_tickets.htm">Destroy
+Ticket(s)/Token(s)</a></li>
+  <li><a href="leash_command_change_password.htm">Change Password</a></li>
+  <li><a href="leash_option_auto_renewal.htm">Automatic Ticket Renewal</a></li>
+  <li><a href="leash_option_expiration_alarm.htm">Expiration Alarm</a></li>
+  <li><a href="leash_file_exit.htm">Exit</a></li>
+</ul>
+<p class="MsoNormal"><o:p></o:p></p>
+<br>
+<p></p>
+<p></p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_topic_leash_window.htm b/src/windows/leash/htmlhelp/html/leash_topic_leash_window.htm
new file mode 100644 (file)
index 0000000..8e515da
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Leash Screen Display (Kerberometer and Dash Notification)</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="display">
+</object>
+<p></p>
+<h2><a name="id_help_meter"></a>Leash Screen Display (Kerberometer and Dash Notification)</h2>
+<p></p>
+<p class="MsoBodyTextIndent2" style="text-indent: 0in;">The window
+title contains
+the name \93Leash\94 followed by the current date and time.<span style="">&nbsp;
+</span>Below the title are a menu bar; a tool bar
+(optional); a tree view; and a status bar (optional).</p>
+<p class="MsoNormal"><b><o:p><img style="width: 718px; height: 453px;"
+ alt="Leash Display Window" title="Leash Display Window"
+ src="..%5CImages%5CLeash_display_window.jpg"><br>
+</o:p></b></p>
+<p class="MsoNormal"></p>
+<p class="MsoNormal">The root of the Leash tree view shows the active
+user
+principal name (user@REALM).<span style="">&nbsp; </span>This entry
+appears with a "+" icon and a Kerberos icon to its left.<span style="">&nbsp;
+</span>Click on this plus icon of a line to expand
+the branch, displaying a "-" icon.<span style="">&nbsp;
+</span>To retract the branch click on the minus sign.</p>
+<p class="MsoNormal">Below user principal, the tree contains ticket
+categories.<span style="">&nbsp; </span>Below each ticket category
+are the current tickets belonging to the group.<span style="">&nbsp;
+</span>Each ticket entry contains the current ticket status, the time
+it was
+issued, the time it will expire, and the service principal and flags.<span
+ style="">&nbsp; </span>For Kerberos 5 tickets, encryption types and
+network address information are listed below each ticket.</p>
+<p class="MsoNormal">The tree updates once per minute.<span style="">&nbsp;
+</span>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.</p>
+<p class="MsoNormal"><o:p></o:p>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.<span style="">&nbsp; </span>This used to be known as
+the <b>Kerberometer</b>.<span style="">&nbsp; </span></p>
+<p class="MsoNormal">Each ticket is described and represented by an
+icon of a
+little ticket. The color of the ticket changes based on its viability: </p>
+<p class="MsoNormal" style="margin-left: 1.5in;">green = normal</p>
+<p class="MsoNormal" style="margin-left: 1.5in;">yellow = tickets are
+within 15
+minutes of expiration</p>
+<p class="MsoNormal" style="margin-left: 1.5in;">red = tickets have
+expired, or you
+have no tickets</p>
+<p class="MsoNormal" style="margin-left: 1.5in;">gray = these tickets
+are not available
+to you</p>
+<p class="MsoNormal"><o:p></o:p><span
+ style="font-family: &quot;Times New Roman&quot;;"></span>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.&nbsp; This used to be known as Dash-style
+notification.</p>
+<p class="MsoNormal">Andrew File System (AFS) tokens information is
+displayed
+only on machines that have either OpenAFS for Windows <a
+ href="http://www.openafs.org/">http://www.openafs.org</a> or Transarc
+AFS 3.6
+for Windows.<o:p></o:p></p>
+<p class="MsoNormal"></p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_topic_online_help.htm b/src/windows/leash/htmlhelp/html/leash_topic_online_help.htm
new file mode 100644 (file)
index 0000000..1a91f3e
--- /dev/null
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Help on Using Leash Online Help</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="help, online">
+</object>
+<h1><a name="id_help_leash_help"></a>How To Use Leash Online Help</h1>
+<p>In Leash, <b>F1</b> are the online Help keys. Here's what they do:</p>
+<p><b>Pressing F1...</b><b>gets you...</b></p>
+<p>in the Leash main window: <span style="font-weight: bold;">Leash
+Help Topics</span> -- click the one you need.</p>
+<p>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.</p>
+<p>in a Leash dialogue box: context-sensitive help, i.e., the specific
+topic that explains where you are and what you're doing.</p>
+<p>at an error message: explanation for the error message.</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_topic_password_choice.htm b/src/windows/leash/htmlhelp/html/leash_topic_password_choice.htm
new file mode 100644 (file)
index 0000000..5fd7dfa
--- /dev/null
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>How to Choose a Password</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+<OBJECT TYPE="application/x-oleobject" CLASSID="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
+       <PARAM NAME="Keyword" VALUE="choose">
+</OBJECT>
+
+<P><A NAME="hid_choose_password"></A><A NAME="id_help_choose"></A><B>How To Choose a Password...</B></P>
+
+<P>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.</P>
+
+<P>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.</P>
+
+<P><B>Do choose</B>:</P>
+
+<P>*Something easy for you to remember with at least six characters.</P>
+
+<P>*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.</P>
+
+<P>*A combination of letters and numbers, or a phrase like "many colors" and then use only the consonants "mnYc0l0rz."</P>
+
+<P>*An acronym for your favorite saying, for example, "L!isn!" (Live! It's Saturday Night!)</P>
+
+<P><B>Don't choose</B>:</P>
+
+<P>*Your name in any form - first, middle, last, maiden, spelled backwards, nickname or initials.</P>
+
+<P>*Your userid, or your userid spelled backwards.</P>
+
+<P>*Part of your userid or name.</P>
+
+<P>*Any common name, such as Joe.</P>
+
+<P>*The name of a close relative, friend, or pet.</P>
+
+<P>*Your phone or office number, address, birthday, or anniversary.</P>
+
+<P>*Your license-plate number, your social-security number, or any all numeral password.</P>
+
+<P>*Names from popular culture, e.g., spock, sleepy. </P>
+
+<P>*Any word in a dictionary.</P>
+
+<P>*Passwords of fewer than four characters.</P>
+
+<P><B>Mum's the Word</B></P>
+
+<P>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</P>
+
+<P>Reprinted from i/s, Vol. 4, No. 9,</P>
+
+<P>May 1989. Revised March 1993.</P>
+
+<P>Copyright C 1993 MIT Information Systems</P>
+
+<P>Send comments or questions about this publication to</P>
+
+<P>&lt;comment-ispubs@mit.edu&gt; or call x3-5150</P>
+
+<P>Before You Begin...</P>
+
+<P>Remember that <I>passwords are case-sensitive, </I>and<I> </I>note whether your keyboard has Caps Lock on.<B> </B>Leash is<B> </B>not programmed to inform you about the state of your Caps Lock key.</P>
+
+<P><B>How To Use Change Password...</B></P>
+
+<P><B>1.</B>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.</P>
+
+<P><B>2.</B>Type your <I>current</I> password in the second field and press Enter or click OK.</P>
+
+<P>The program checks the username and password you entered and notifies you if either is invalid.</P>
+
+<P><B>3.</B>Type your <I>new</I> password in the third field and press Enter or click OK.</P>
+
+<P><B>4</B>.Retype your <I>new</I> password, to verify it, and press Enter or click OK.</P>
+
+<P>Once you have entered the new password twice with consistent spellings, the Leash program replaces your old password with the new, <I>if it is a strong password. </I>If Kerberos determines the password is weak, a message notifies you, and you need to<I> </I>repeat steps 1 through 4 with a strong password, as described by the "How To Choose a Password" guidelines above.</P>
+
+<P><B>How Change Password Works...</B></P>
+
+<P>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.</P>
+
+<P>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.</P>
+
+</BODY>
+</HTML>
diff --git a/src/windows/leash/htmlhelp/html/leash_topic_timing_issues.htm b/src/windows/leash/htmlhelp/html/leash_topic_timing_issues.htm
new file mode 100644 (file)
index 0000000..281ee1a
--- /dev/null
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Kerberos Timing Issues</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="time">
+</object>
+<p></p>
+<h2><a name="id_help_time"></a>Kerberos Timing Issues</h2>
+<p></p>
+<p>To resynchronize your computer's clock to the network's clock,
+manually set it, or run the leash Synchronize Time Command.&nbsp; 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.<br>
+</p>
+<p><b>Why Do It...</b></p>
+<p>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.</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_topic_why_use.htm b/src/windows/leash/htmlhelp/html/leash_topic_why_use.htm
new file mode 100644 (file)
index 0000000..26e1b7e
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Why use Leash?</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="why">
+</object>
+<h1><a name="id_help_purpose"></a><a name="hid_why_use_leash32"></a>Why
+Use Leash?</h1>
+<p class="MsoNormal">Leash is a graphical system-tray tool designed to
+manage for
+Kerberos tickets on Microsoft Windows. <span style="">&nbsp;</span>Leash
+is used to obtain Kerberos tickets,
+change your Kerberos password, and obtain Andrew File System (AFS)
+tokens.</p>
+<p>Leash combines the functionality of several command line tools a
+user would use to manage Kerberos functions: <a
+ href="leash_external_kinit.htm">kinit</a>, <a
+ href="leash_external_klist.htm">klist</a>, <a
+ href="leash_external_kdestroy.htm">kdestroy</a>, ms2mit, aklog, and
+passwd or kpasswd. Leash combines all of these functions into one user
+interface and supports&nbsp; auto-renewal or <a
+ href="leash_topic_leash_window.htm">user notification</a> when tickets
+are approaching expiration.</p>
+<p class="MsoNormal">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. <span style="">&nbsp;</span>Command-line
+options may be specified.<span style="">&nbsp; </span>If you run Leash
+with the options -i or -kinit, it will display the ticket
+initialization dialog
+and exit; -m or \96ms2mit or \96import 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 \96renew will renew existing Kerberos
+tickets
+(if possible) and exit; -a or \96autoinit will display the ticket
+initialization
+dialog if you have no Kerberos tickets.<o:p>&nbsp;</o:p></p>
+<p class="MsoNormal">You may create a shortcut to Leash within your
+Windows
+Startup folder (Start Menu-&gt;Programs-&gt;Startup).<span style="">&nbsp;
+</span><span style="">&nbsp;</span>A
+shortcut to \93Leash32.exe \96autoinit\94 ensures that Kerberos tickets are
+available
+for the use of Kerberized applications throughout your Windows logon
+session.</p>
+<p class="MsoNormal">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.<b><o:p>&nbsp;</o:p></b></p>
+<p class="MsoNormal">Leash does not perform a logon in the sense of the
+Windows
+Logon Service.<span style="">&nbsp; </span>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. <o:p></o:p></p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_view_debug_window.htm b/src/windows/leash/htmlhelp/html/leash_view_debug_window.htm
new file mode 100644 (file)
index 0000000..1ed4c3c
--- /dev/null
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Debug Window Option</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="debug">
+</object>
+<h3><a name="hid_debug_window_option"></a><b>Debug Window</b></h3>
+<p>When this item (found under the Action menu) is checked, the Leash
+Debug Window appears. <br>
+</p>
+<p><img style="width: 640px; height: 439px;" alt="Debug Window"
+ title="Debug Window" src="..%5CImages%5CLeash_debug_window.jpg"></p>
+<p></p>
+<p class="MsoNormal" style="">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.<o:p>&nbsp;</o:p></p>
+<p class="MsoNormal" style="">Note: Debugging is only
+supported by Kerberos 4 and AFS.<span style="">&nbsp;
+</span>Kerberos 5 protocol operations cannot be debugged using Leash.</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_view_large_icons.htm b/src/windows/leash/htmlhelp/html/leash_view_large_icons.htm
new file mode 100644 (file)
index 0000000..6e676db
--- /dev/null
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Large Icons Option</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="large icons">
+</object>
+<h3><a name="hid_large_icons_option"></a><b>Large Icons</b></h3>
+<p>
+</p>
+<p class="MsoNormal">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.<span style="">&nbsp;
+</span>Naturally, smaller icons allow many more tickets to fit into a
+nonscrolling window.<span style="">&nbsp; </span>The default setting
+of Leash is Large Icons.</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_view_status_bar.htm b/src/windows/leash/htmlhelp/html/leash_view_status_bar.htm
new file mode 100644 (file)
index 0000000..18d722a
--- /dev/null
@@ -0,0 +1,21 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Status Bar Option</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="status bar">
+</object>
+<h3><a name="hid_status_bar_option"></a><b>Status Bar</b></h3>
+<p>
+</p>
+<p class="MsoNormal" style="">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.</p>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/html/leash_view_toolbar.htm b/src/windows/leash/htmlhelp/html/leash_view_toolbar.htm
new file mode 100644 (file)
index 0000000..1f6e674
--- /dev/null
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+  <meta http-equiv="Content-Type"
+ content="text/html; charset=Windows-1252">
+  <title>Leash Toolbar</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<object type="application/x-oleobject"
+ classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param
+ name="Keyword" value="toolbar">
+</object>
+<h3><a name="hid_toolbar_option"></a><b>Leash Toolbar</b></h3>
+<p>
+</p>
+<p class="MsoNormal">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.<br>
+</p>
+<p class="MsoNormal"><img style="width: 718px; height: 28px;"
+ alt="Leash Toolbar" title="Leash Toolbar"
+ src="..%5CImages%5CLeash_toolbar.jpg"><br>
+</p>
+<p class="MsoNormal"></p>
+<p class="MsoNormal">The Leash Toolbar contains buttons which act as
+shortcuts to
+the most frequently used Actions found on the Menubar.<span style="">&nbsp;
+</span>From left to right:</p>
+<ol style="margin-top: 0in;" start="1" type="1">
+  <li class="MsoNormal" style=""><a href="leash_command_get_tickets.htm">Get
+Tickets</a></li>
+  <li class="MsoNormal" style=""><a
+ href="leash_command_renew_tickets.htm">Renew Tickets</a></li>
+  <li class="MsoNormal" style=""><a
+ href="leash_command_import_tickets.htm">Import Tickets</a></li>
+  <li class="MsoNormal" style=""><a
+ href="leash_command_destroy_tickets.htm">Destroy Tickets</a></li>
+  <li class="MsoNormal" style=""><a
+ href="leash_command_change_password.htm">Change Password</a></li>
+  <li class="MsoNormal" style=""><a
+ href="leash_command_update_display.htm">Update Display</a></li>
+  <li class="MsoNormal" style=""><a href="leash_command_sync_time.htm">Synchronize
+Time</a><o:p></o:p></li>
+</ol>
+<br>
+</body>
+</html>
diff --git a/src/windows/leash/htmlhelp/leash32.hhk b/src/windows/leash/htmlhelp/leash32.hhk
new file mode 100644 (file)
index 0000000..85b6221
--- /dev/null
@@ -0,0 +1,364 @@
+<HTML>
+<!-- Sitemap 1.0 -->
+<OBJECT type="text/site properties">
+</OBJECT>
+<UL>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="about">
+               <param name="Name" value="KERBEROS">
+               <param name="Local" value="html/leash_topic_about_kerberos.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="acknowledgements">
+               <param name="Name" value="Acknowledgements">
+               <param name="Local" value="html/leash_acknowledgements.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="aklog">
+               <param name="See Also" value="aklog">
+               </OBJECT>
+       <UL>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="exe">
+                       <param name="Local" value="html/leash_external_aklog.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="man">
+                       <param name="Local" value="html/leash_manpage_aklog.htm">
+                       </OBJECT>
+       </UL>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="bugs">
+               <param name="Name" value="Reporting Problems With Leash">
+               <param name="Local" value="html/leash_bug_reports.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="change">
+               <param name="Name" value="Change Password Command">
+               <param name="Local" value="html/leash_command_change_password.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="choose">
+               <param name="Name" value="How to Choose a Password">
+               <param name="Local" value="html/leash_topic_password_choice.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="commands">
+               <param name="Name" value="Leash Commands">
+               <param name="Local" value="html/leash_menu_commands.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="copyright">
+               <param name="See Also" value="copyright">
+               </OBJECT>
+       <UL>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="kerberos">
+                       <param name="Local" value="html/leash_kerberos_copyright.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="Leash32">
+                       <param name="Local" value="html/leash_copyright.htm">
+                       </OBJECT>
+       </UL>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="debug">
+               <param name="Name" value="Debug Window Option">
+               <param name="Local" value="html/leash_view_debug_window.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="destroy">
+               <param name="Name" value="Destroy Tickets/Tokens on Exit Option">
+               <param name="Local" value="html/leash_option_tickets_on_exit.htm">
+               <param name="Name" value="Destroy Tickets Command">
+               <param name="Local" value="html/leash_command_destroy_tickets.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="display">
+               <param name="Name" value="Leash Display (Kerberometer and Dash Notification)">
+               <param name="Local" value="html/leash_topic_leash_window.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="DOS commands">
+               <param name="Name" value="Using Kerberos in a Command Prompt Environment">
+               <param name="Local" value="html/leash_topic_kerberos_command_prompt.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="error">
+               <param name="See Also" value="error">
+               </OBJECT>
+       <UL>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="57">
+                       <param name="Local" value="html/leash_topic_error_57.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="62">
+                       <param name="Local" value="html/leash_topic_error_62.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="8">
+                       <param name="Local" value="html/leash_topic_error_8.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="invalid principal">
+                       <param name="Local" value="html/leash_topic_invalid_principal.htm">
+                       </OBJECT>
+       </UL>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="exit">
+               <param name="Name" value="Exit/End Leash Program">
+               <param name="Local" value="html/leash_file_exit.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="expiration">
+               <param name="Name" value="Low Ticket/Token Time Alarm Option">
+               <param name="Local" value="html/leash_option_expiration_alarm.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="export">
+               <param name="Name" value="Kerberos Export Restrictions and Source Code Access">
+               <param name="Local" value="html/leash_export.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="get">
+               <param name="Name" value="InitializeTickets Command">
+               <param name="Local" value="html/leash_command_get_tickets.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="guide">
+               <param name="Name" value="Kerberos:  How does the other guy know who I am?">
+               <param name="Local" value="html/leash_topic_kerberos_principals.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="help">
+               <param name="See Also" value="help">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="import">
+               <param name="Name" value="ImportTickets Command">
+               <param name="Local" value="html/leash_command_import_tickets.htm">
+               </OBJECT>
+       <UL>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="About Kerberos">
+                       <param name="Local" value="html/leash_topic_about_kerberos.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="About Leash32">
+                       <param name="Local" value="html/leash_help_about_leash32.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="online">
+                       <param name="Local" value="html/leash_topic_online_help.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="Why use Leash32">
+                       <param name="Local" value="html/leash_topic_why_use.htm">
+                       </OBJECT>
+       </UL>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="kdestroy">
+               <param name="See Also" value="kdestroy">
+               </OBJECT>
+       <UL>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="exe">
+                       <param name="Local" value="html/leash_external_kdestroy.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="man">
+                       <param name="Local" value="html/leash_manpage_kdestroy.htm">
+                       </OBJECT>
+       </UL>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="Kerberos">
+               <param name="Name" value="An Authentication Service for Open Network Systems">
+               <param name="Local" value="html/leash_topic_kerberos_auth_service.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="key">
+               <param name="See Also" value="key">
+               </OBJECT>
+       <UL>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="Ctrl+4">
+                       <param name="Local" value="html/leash_option_krb4_properties.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="Ctrl+5">
+                       <param name="Local" value="html/leash_option_krb5_properties.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="Ctrl+A">
+                       <param name="Local" value="html/leash_option_afs_properties.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="Ctrl+D">
+                       <param name="Local" value="html/leash_command_destroy_tickets.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="Ctrl+I">
+                       <param name="Local" value="html/leash_command_import_tickets.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="Ctrl+K">
+                       <param name="Local" value="html/leash_option_kerberos_properties.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="Ctrl+L">
+                       <param name="Local" value="html/leash_option_leash_properties.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="Ctrl+R">
+                       <param name="Local" value="html/leash_command_renew_tickets.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="Ctrl+T">
+                       <param name="Local" value="html/leash_command_get_tickets.htm">
+                       </OBJECT>
+       </UL>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="Key">
+               <param name="See Also" value="Key">
+               </OBJECT>
+       <UL>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="F5">
+                       <param name="Local" value="html/leash_command_update_display.htm">
+                       </OBJECT>
+       </UL>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="kinit">
+               <param name="See Also" value="kinit">
+               </OBJECT>
+       <UL>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="exe">
+                       <param name="Local" value="html/leash_external_kinit.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="man">
+                       <param name="Local" value="html/leash_manpage_kinit.htm">
+                       </OBJECT>
+       </UL>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="klist">
+               <param name="See Also" value="klist">
+               </OBJECT>
+       <UL>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="exe">
+                       <param name="Local" value="html/leash_external_klist.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="man">
+                       <param name="Local" value="html/leash_manpage_klist.htm">
+                       </OBJECT>
+       </UL>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="large icons">
+               <param name="Name" value="Large Icons Option">
+               <param name="Local" value="html/leash_view_large_icons.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="Leash program">
+               <param name="Name" value="Leash Program">
+               <param name="Local" value="html/leash_topic_leash_help_topics.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="ms2mit">
+               <param name="See Also" value="ms2mit">
+               </OBJECT>
+       <UL>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="exe">
+                       <param name="Local" value="html/leash_external_ms2mit.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="man">
+                       <param name="Local" value="html/leash_manpage_ms2mit.htm">
+                       </OBJECT>
+       </UL>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="names">
+               <param name="Name" value="Kerberos Names">
+               <param name="Local" value="html/leash_topic_kerberos_names.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="properties">
+               <param name="See Also" value="properties">
+               </OBJECT>
+       <UL>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="AFS">
+                       <param name="Local" value="html/leash_option_afs_properties.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="Kerberos">
+                       <param name="Local" value="html/leash_option_kerberos_properties.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="Kerberos4">
+                       <param name="Local" value="html/leash_option_krb4_properties.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="Kerberos5">
+                       <param name="Local" value="html/leash_option_krb5_properties.htm">
+                       </OBJECT>
+               <LI> <OBJECT type="text/sitemap">
+                       <param name="Keyword" value="Leash">
+                       <param name="Local" value="html/leash_option_leash_properties.htm">
+                       </OBJECT>
+       </UL>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="renew">
+               <param name="Name" value="RenewTickets Command">
+               <param name="Local" value="html/leash_command_renew_tickets.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="reset">
+               <param name="Name" value="Reset Window Size/Pos Command">
+               <param name="Local" value="html/leash_command_reset_window.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="status bar">
+               <param name="Name" value="Status Bar Option">
+               <param name="Local" value="html/leash_view_status_bar.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="synchronize">
+               <param name="Name" value="Synchronize Time Command">
+               <param name="Local" value="html/leash_command_sync_time.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="tickets">
+               <param name="Name" value="How Kerberos Shares Tickets">
+               <param name="Local" value="html/leash_topic_sharing_tickets.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="time">
+               <param name="Name" value="Kerberos Timing Issues">
+               <param name="Local" value="html/leash_topic_timing_issues.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="toolbar">
+               <param name="Name" value="Toolbar Option">
+               <param name="Local" value="html/leash_view_toolbar.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="update">
+               <param name="Name" value="Update Display Command">
+               <param name="Local" value="html/leash_command_update_display.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="uppercase">
+               <param name="Name" value="Upper Case Realm Name Option">
+               <param name="Local" value="html/leash_option_upper_case_realm.htm">
+               </OBJECT>
+       <LI> <OBJECT type="text/sitemap">
+               <param name="Keyword" value="why">
+               <param name="Name" value="Why use Leash?">
+               <param name="Local" value="html/leash_topic_why_use.htm">
+               </OBJECT>
+</UL></HTML>
diff --git a/src/windows/leash/htmlhelp/leash32.hhp b/src/windows/leash/htmlhelp/leash32.hhp
new file mode 100644 (file)
index 0000000..d966979
--- /dev/null
@@ -0,0 +1,228 @@
+[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/out2con.cpp b/src/windows/leash/out2con.cpp
new file mode 100644 (file)
index 0000000..f7a1d35
--- /dev/null
@@ -0,0 +1,126 @@
+#include "out2con.h"
+
+#include <windows.h>
+#include <stdio.h>
+#include <io.h>
+
+class ConsoleEcho
+{
+public:
+    ConsoleEcho();
+    ~ConsoleEcho();
+
+private:
+    DWORD ThreadLoop();
+
+    static DWORD WINAPI ThreadFunc(void* param);
+
+    FILE m_originalStdout;
+    int m_stdoutfd;
+    int m_pipefd;
+    HANDLE m_hReadPipe, m_hWritePipe;
+    HANDLE m_hThread;
+
+    static const int BUFSIZE=512;
+};
+
+
+ConsoleEcho *
+CreateConsoleEcho()
+{
+    return new ConsoleEcho;
+}
+
+void
+DestroyConsoleEcho(ConsoleEcho *echo)
+{
+    delete echo;
+}
+
+
+DWORD WINAPI ConsoleEcho::ThreadFunc(void* param)
+{
+    return ((ConsoleEcho*)(param))->ThreadLoop();
+}
+
+
+DWORD ConsoleEcho::ThreadLoop()
+{
+    DWORD dwRead, dwWritten;
+    CHAR chBuf[BUFSIZE];
+    BOOL bSuccess = FALSE;
+    // Note that the following does not work when running in the msvc2010
+    // debugger with redirected output; you still get the redirected file
+    // handle, not the console:
+    //HANDLE hConsoleStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
+    // This seems to be more reliable:
+    HANDLE hConsoleStdOut = CreateFile("CONOUT$",
+                                       GENERIC_WRITE,
+                                       FILE_SHARE_WRITE,
+                                       NULL, OPEN_EXISTING, 0, 0);
+    for (;;) {
+        // read from redirected stdout
+        bSuccess = ReadFile(m_hReadPipe, chBuf, BUFSIZE, &dwRead, NULL);
+        if (!bSuccess || (dwRead == 0))
+            break;
+
+        // write to console
+        WriteFile(hConsoleStdOut, chBuf, dwRead, &dwWritten, NULL);
+        // also write to original stdout
+        if (m_stdoutfd>=0) {
+            _write(m_stdoutfd, chBuf, dwRead);
+            // _commit() causes assert if m_stdoutfd is a device (e.g., console or NUL).
+            if (!_isatty(m_stdoutfd))
+                _commit(m_stdoutfd);
+        }
+    }
+    CloseHandle(hConsoleStdOut);
+    return 0;
+}
+
+ConsoleEcho::ConsoleEcho()
+{
+    // setup console
+    AllocConsole();
+    // create pipe
+    CreatePipe(&m_hReadPipe, &m_hWritePipe, NULL, 0);
+    // save original stdout to preserve commandline-specified redirection
+    m_stdoutfd = _fileno(stdout);
+    // and copy the whole damn FILE structure so we can restore it
+    // when we're done.  I don't know any other way to restore the
+    // crazy windows gui default '-2' filedesc stdout.
+    m_originalStdout = *stdout;
+    // hook up the write end of our pipe to stdout
+    m_pipefd = _open_osfhandle((intptr_t)m_hWritePipe, 0);
+    // take our os file handle and allocate a crt FILE for it
+    FILE* fp = _fdopen(m_pipefd, "w");
+    // copy to stdout
+    *stdout = *fp;
+    // now slam the allocated FILE's _flag to zero to mark it as free without
+    // actually closing the os file handle and pipe
+    fp->_flag = 0;
+
+    // disable buffering
+    setvbuf(stdout, NULL, _IONBF, 0);
+
+    // Create a thread to process our pipe, forwarding output
+    // to both the console and the original stdout
+    m_hThread = CreateThread(NULL, 0, &ThreadFunc, this, 0, NULL);
+}
+
+ConsoleEcho::~ConsoleEcho()
+{
+    // fclose() unfortunately immediately invalidates the read pipe before the
+    // pipe thread has a chance to flush it, so don't do that.
+    //fclose(stdout);
+
+    // instead, just slam the original stdout
+    *stdout = m_originalStdout;
+    //printf("Safe to printf now and no longer echoed to console.\n");
+    // Close write pipe
+    _close(m_pipefd);
+    // and wait here for pipe thread to exit
+    WaitForSingleObject(m_hThread, 1000);
+    // now close read pipe as well
+    CloseHandle(m_hReadPipe);
+}
diff --git a/src/windows/leash/out2con.h b/src/windows/leash/out2con.h
new file mode 100644 (file)
index 0000000..ebd3859
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef OUT2CON_H
+#define OUT2CON_H
+
+/* Call CreateConsoleEcho() to create a console and begin echoing stdout to it.
+ * The original stream (if any) will still receive output from stdout.
+ * Call DestroyConsoleEcho() to stop echoing stdout to the console.
+ * The original stream continues to receive stdout.
+ *
+ * WARNING: it is not safe to use stdout from another thread during
+ *          CreateConsoleEcho() or DestroyConsoleEcho()
+ */
+
+class ConsoleEcho;
+
+ConsoleEcho *
+CreateConsoleEcho();
+
+void
+DestroyConsoleEcho(ConsoleEcho *consoleEcho);
+
+// Convenience class to automatically echo to console within a scope
+class AutoConsoleEcho
+{
+public:
+    AutoConsoleEcho() : m_echo(CreateConsoleEcho())
+    {
+    }
+
+    ~AutoConsoleEcho()
+    {
+        DestroyConsoleEcho(m_echo);
+    }
+private:
+    ConsoleEcho* m_echo;
+};
+
+
+#endif
index 69d773a37b53a7ce80c2db2821b28c8ea119aa5d..8a7eaa44688f6c8d583856464283dde2ad71ab23 100644 (file)
@@ -55,7 +55,7 @@ WINLIBS = kernel32.lib advapi32.lib user32.lib gdi32.lib Version.lib \
 WINDLLFLAGS = /nologo /dll /incremental:no /release $(LOPTS)
 
 
-DEFINES = -DWINSOCK -DWIN32 -DWINDOWS -DNO_KRB4
+DEFINES = -DWINSOCK -DWIN32 -DWINDOWS -DNO_KRB4 -DUSE_MESSAGE_BOX
 !ifdef NODEBUG
 DEFINES = $(DEFINES)
 !else
index 521602c6fac9302c97ebca2cc6f2a6108f57d7e2..48240bfc97ba76277f28da342a0884ededdb3ec4 100644 (file)
@@ -450,6 +450,11 @@ not_an_API_LeashKRB5GetTickets(
 
     while (!(code = pkrb5_cc_next_cred(ctx, cache, &KRBv5Cursor, &KRBv5Credentials)))
     {
+        if ((*pkrb5_is_config_principal)(ctx, KRBv5Credentials.server))
+        { /* skip configuration credentials */
+            (*pkrb5_free_cred_contents)(ctx, &KRBv5Credentials);
+            continue;
+        }
         if (!list)
         {
             list = (TicketList*) calloc(1, sizeof(TicketList));
@@ -830,14 +835,13 @@ DWORD                       publicIP
     krb5_principal                     me = 0;
     char*                       name = 0;
     krb5_creds                         my_creds;
-    krb5_get_init_creds_opt     options;
+    krb5_get_init_creds_opt *   options = NULL;
     krb5_address **             addrs = NULL;
     int                         i = 0, addr_count = 0;
 
     if (!pkrb5_init_context)
         return 0;
 
-    pkrb5_get_init_creds_opt_init(&options);
     memset(&my_creds, 0, sizeof(my_creds));
 
     if (alt_ctx)
@@ -850,6 +854,9 @@ DWORD                       publicIP
         if (code) goto cleanup;
     }
 
+    code = pkrb5_get_init_creds_opt_alloc(ctx, &options);
+    if (code) goto cleanup;
+
     code = pkrb5_cc_default(ctx, &cc);
     if (code) goto cleanup;
 
@@ -868,15 +875,15 @@ DWORD                       publicIP
                renew_life *= 5*60;
 
     if (lifetime)
-        pkrb5_get_init_creds_opt_set_tkt_life(&options, lifetime);
-       pkrb5_get_init_creds_opt_set_forwardable(&options,
-                                                 forwardable ? 1 : 0);
-       pkrb5_get_init_creds_opt_set_proxiable(&options,
-                                               proxiable ? 1 : 0);
-       pkrb5_get_init_creds_opt_set_renew_life(&options,
-                                               renew_life);
+        pkrb5_get_init_creds_opt_set_tkt_life(options, lifetime);
+       pkrb5_get_init_creds_opt_set_forwardable(options,
+                                             forwardable ? 1 : 0);
+       pkrb5_get_init_creds_opt_set_proxiable(options,
+                                           proxiable ? 1 : 0);
+       pkrb5_get_init_creds_opt_set_renew_life(options,
+                                            renew_life);
     if (addressless)
-        pkrb5_get_init_creds_opt_set_address_list(&options,NULL);
+        pkrb5_get_init_creds_opt_set_address_list(options,NULL);
     else {
                if (publicIP)
         {
@@ -932,11 +939,15 @@ DWORD                       publicIP
             netIPAddr = htonl(publicIP);
             memcpy(addrs[i]->contents,&netIPAddr,4);
 
-            pkrb5_get_init_creds_opt_set_address_list(&options,addrs);
+            pkrb5_get_init_creds_opt_set_address_list(options,addrs);
 
         }
     }
 
+    code = pkrb5_get_init_creds_opt_set_out_ccache(ctx, options, cc);
+    if (code)
+        goto cleanup;
+
     code = pkrb5_get_init_creds_password(ctx,
                                        &my_creds,
                                        me,
@@ -945,15 +956,7 @@ DWORD                       publicIP
                                        hParent, // prompter data
                                        0, // start time
                                        0, // service name
-                                       &options);
-    if (code) goto cleanup;
-
-    code = pkrb5_cc_initialize(ctx, cc, me);
-    if (code) goto cleanup;
-
-    code = pkrb5_cc_store_cred(ctx, cc, &my_creds);
-    if (code) goto cleanup;
-
+                                       options);
  cleanup:
     if ( addrs ) {
         for ( i=0;i<addr_count;i++ ) {
@@ -973,6 +976,8 @@ DWORD                       publicIP
        pkrb5_free_principal(ctx, me);
     if (cc)
        pkrb5_cc_close(ctx, cc);
+    if (options)
+        pkrb5_get_init_creds_opt_free(ctx, options);
     if (ctx && (ctx != alt_ctx))
        pkrb5_free_context(ctx);
     return(code);
@@ -1463,7 +1468,7 @@ multi_field_dialog(HWND hParent, char * preface, int n, struct textField tb[])
        extern HINSTANCE hLeashInst;
     size_t maxwidth = 0;
     int numlines = 0;
-    int len;
+    size_t len;
     char * plines[16], *p = preface ? preface : "";
     int i;
 
index 712a8e68ba1a3f1977b5da99a414067f4600dcc6..4c736c0ead29d0a353d4c375f9229c99adc07d8f 100644 (file)
@@ -22,12 +22,15 @@ DWORD     AfsAvailable = 0;
 
 // krb5 functions
 DECL_FUNC_PTR(krb5_change_password);
+DECL_FUNC_PTR(krb5_get_init_creds_opt_alloc);
+DECL_FUNC_PTR(krb5_get_init_creds_opt_free);
 DECL_FUNC_PTR(krb5_get_init_creds_opt_init);
 DECL_FUNC_PTR(krb5_get_init_creds_opt_set_tkt_life);
 DECL_FUNC_PTR(krb5_get_init_creds_opt_set_renew_life);
 DECL_FUNC_PTR(krb5_get_init_creds_opt_set_forwardable);
 DECL_FUNC_PTR(krb5_get_init_creds_opt_set_proxiable);
 DECL_FUNC_PTR(krb5_get_init_creds_opt_set_address_list);
+DECL_FUNC_PTR(krb5_get_init_creds_opt_set_out_ccache);
 DECL_FUNC_PTR(krb5_get_init_creds_password);
 DECL_FUNC_PTR(krb5_build_principal_ext);
 DECL_FUNC_PTR(krb5_cc_resolve);
@@ -82,6 +85,7 @@ DECL_FUNC_PTR(krb5_free_addresses);
 DECL_FUNC_PTR(krb5_free_default_realm);
 DECL_FUNC_PTR(krb5_principal_compare);
 DECL_FUNC_PTR(krb5_string_to_deltat);
+DECL_FUNC_PTR(krb5_is_config_principal);
 
 // ComErr functions
 DECL_FUNC_PTR(com_err);
@@ -118,12 +122,15 @@ DECL_FUNC_PTR(cc_free_NC_info);
 
 FUNC_INFO k5_fi[] = {
     MAKE_FUNC_INFO(krb5_change_password),
+    MAKE_FUNC_INFO(krb5_get_init_creds_opt_alloc),
+    MAKE_FUNC_INFO(krb5_get_init_creds_opt_free),
     MAKE_FUNC_INFO(krb5_get_init_creds_opt_init),
     MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_tkt_life),
     MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_renew_life),
     MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_forwardable),
     MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_proxiable),
     MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_address_list),
+    MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_out_ccache),
     MAKE_FUNC_INFO(krb5_get_init_creds_password),
     MAKE_FUNC_INFO(krb5_build_principal_ext),
     MAKE_FUNC_INFO(krb5_cc_resolve),
@@ -178,6 +185,7 @@ FUNC_INFO k5_fi[] = {
     MAKE_FUNC_INFO(krb5_free_default_realm),
     MAKE_FUNC_INFO(krb5_principal_compare),
     MAKE_FUNC_INFO(krb5_string_to_deltat),
+    MAKE_FUNC_INFO(krb5_is_config_principal),
     END_FUNC_INFO
 };
 
index 74cceab82322d622ba8dd78477891f476863ba92..6f34b9d47ed04ecbfa8ad228cdc6aa30668a0726 100644 (file)
@@ -160,6 +160,8 @@ extern DECL_FUNC_PTR(krb_life_to_time);
 
 // krb5 functions
 extern DECL_FUNC_PTR(krb5_change_password);
+extern DECL_FUNC_PTR(krb5_get_init_creds_opt_alloc);
+extern DECL_FUNC_PTR(krb5_get_init_creds_opt_free);
 extern DECL_FUNC_PTR(krb5_get_init_creds_opt_init);
 extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_tkt_life);
 extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_renew_life);
@@ -167,6 +169,7 @@ extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_forwardable);
 extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_proxiable);
 extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_renew_life);
 extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_address_list);
+extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_out_ccache);
 extern DECL_FUNC_PTR(krb5_get_init_creds_password);
 extern DECL_FUNC_PTR(krb5_build_principal_ext);
 extern DECL_FUNC_PTR(krb5_cc_resolve);
@@ -221,6 +224,7 @@ extern DECL_FUNC_PTR(krb5_c_random_make_octets);
 extern DECL_FUNC_PTR(krb5_free_default_realm);
 extern DECL_FUNC_PTR(krb5_principal_compare);
 extern DECL_FUNC_PTR(krb5_string_to_deltat);
+extern DECL_FUNC_PTR(krb5_is_config_principal);
 
 #ifndef NO_KRB4
 // Krb524 functions
index 0618fafec4d6616123418728aad44ed6664a5114..1a0bf143059b170db2e60fde7a79126600883714 100644 (file)
@@ -68,7 +68,7 @@ leash_error_message(
 {
     char message[2048];
     char *p = message;
-    int size = sizeof(message);
+    int size = sizeof(message) - 1; /* -1 to leave room for NULL terminator */
     int n;
 
     // XXX: ignore AFS for now.
@@ -85,7 +85,7 @@ leash_error_message(
         n = _snprintf(p, size,
                       "Kerberos 5: %s (error %ld)\n",
                       perror_message(rc5),
-                      rc5 & 255 // XXX: & 255??!!!
+                      rc5
             );
         p += n;
         size -= n;
@@ -109,6 +109,7 @@ leash_error_message(
         size -= n;
     }
 #ifdef USE_MESSAGE_BOX
+    *p = 0; /* ensure NULL termination of message */
     if ( displayMB )
         MessageBox(NULL, message, "Leash", MB_OK | MB_ICONERROR | MB_TASKMODAL |
                     MB_SETFOREGROUND);
@@ -498,6 +499,7 @@ Leash_int_kinit_ex(
     char    first_part[256];
     char    second_part[256];
     char    temp[1024];
+    char*   custom_msg;
     int     count;
     int     i;
     int rc5 = 0;
@@ -598,10 +600,9 @@ Leash_int_kinit_ex(
             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, 0,
+                               rcL, rc5, rcA, custom_msg,
                                displayErrors);
 }
 
@@ -847,6 +848,9 @@ Leash_import(void)
 long
 Leash_kdestroy(void)
 {
+    Leash_afs_unlog();
+    Leash_krb5_kdestroy();
+
     return 0;
 }
 
@@ -2829,7 +2833,8 @@ acquire_tkt_send_msg(krb5_context ctx, const char * title,
                strs++;
 
                GlobalUnlock( hData );
-               SendMessage(hLeash, 32810, 0, (LPARAM) hData);
+               /* 32809 = ID_OBTAIN_TGT_WITH_LPARAM in src/windows/leash/resource.h */
+               SendMessage(hLeash, 32809, 0, (LPARAM) hData);
            }
        }
        GlobalFree( hData );
index a027f5ec84e98be3865b5100e2b5224ebc8f7f06..c4f151448535063eb284ce49b77f07cdff33f890 100644 (file)
@@ -57,8 +57,8 @@
 #define K5_DESCRIPTION "Kerberos v5 support - internal support code for " KRB5_PRODUCTNAME_STR
 #define K5_INTERNAL_NAME "krb5support\0"
 #define K5_FILETYPE    VFT_DLL
-#if !defined(_WIN32)
-#error not win32??
+#if defined(_WIN64)
+#define K5_ORIGINAL_NAME "k5sprt64.dll\0"
 #else
 #define K5_ORIGINAL_NAME "k5sprt32.dll\0"
 #endif
@@ -68,8 +68,8 @@
 #define K5_DESCRIPTION "COM_ERR - Common Error Handler for " KRB5_PRODUCTNAME_STR "\0"
 #define K5_INTERNAL_NAME "comerr\0"
 #define K5_FILETYPE    VFT_DLL
-#if !defined(_WIN32)
-#define K5_ORIGINAL_NAME "comerr16.dll\0"
+#if defined(_WIN64)
+#define K5_ORIGINAL_NAME "comerr64.dll\0"
 #else
 #define K5_ORIGINAL_NAME "comerr32.dll\0"
 #endif
@@ -79,8 +79,8 @@
 #define K5_DESCRIPTION "PROFILE - Profile Library " KRB5_PRODUCTNAME_STR "\0"
 #define K5_INTERNAL_NAME "profile\0"
 #define K5_FILETYPE    VFT_DLL
-#if !defined(_WIN32)
-#define K5_ORIGINAL_NAME "xpprof16.dll\0"
+#if defined(_WIN64)
+#define K5_ORIGINAL_NAME "xpprof64.dll\0"
 #else
 #define K5_ORIGINAL_NAME "xpprof32.dll\0"
 #endif
@@ -90,8 +90,8 @@
 #define K5_DESCRIPTION "Kerberos v5 - " KRB5_PRODUCTNAME_STR "\0"
 #define K5_INTERNAL_NAME "krb5\0"
 #define K5_FILETYPE    VFT_DLL
-#if !defined(_WIN32)
-#define K5_ORIGINAL_NAME "krb5_16.dll\0"
+#if defined(_WIN64)
+#define K5_ORIGINAL_NAME "krb5_64.dll\0"
 #else
 #define K5_ORIGINAL_NAME "krb5_32.dll\0"
 #endif
 #define K5_DESCRIPTION "GSSAPI - GSS API implementation for Kerberos 5 mechanism\0"
 #define K5_INTERNAL_NAME "gssapi\0"
 #define K5_FILETYPE    VFT_DLL
-#if !defined(_WIN32)
-#define K5_ORIGINAL_NAME "gssapi.dll\0"
+#if defined(_WIN64)
+#define K5_ORIGINAL_NAME "gssapi64.dll\0"
 #else
 #define K5_ORIGINAL_NAME "gssapi32.dll\0"
 #endif
 #define K5_DESCRIPTION "Leash32 Kerberos Ticket Manager - " KRB5_PRODUCTNAME_STR "\0"
 #define K5_FILETYPE    VFT_APP
 #define K5_INTERNAL_NAME "LEASH\0"
-#define K5_ORIGINAL_NAME "leash32.exe\0"
+#define K5_ORIGINAL_NAME "leash.exe\0"
 #endif
 
 #ifdef LEASHDLL_LIB
 #define K5_DESCRIPTION "Leash Helper API - " KRB5_PRODUCTNAME_STR "\0"
 #define K5_INTERNAL_NAME "leashw\0"
 #define K5_FILETYPE    VFT_DLL
-#if !defined(_WIN32)
-#define K5_ORIGINAL_NAME "leashw.dll\0"
+#if defined(_WIN64)
+#define K5_ORIGINAL_NAME "leashw64.dll\0"
 #else
 #define K5_ORIGINAL_NAME "leashw32.dll\0"
 #endif
 #define K5_DESCRIPTION "Winsock Helper (wshelper) API - " KRB5_PRODUCTNAME_STR "\0"
 #define K5_INTERNAL_NAME "wshelper\0"
 #define K5_FILETYPE    VFT_DLL
-#if !defined(_WIN32)
-#define K5_ORIGINAL_NAME "wshelper.dll\0"
+#if defined(_WIN64)
+#define K5_ORIGINAL_NAME "wshelper64.dll\0"
 #else
 #define K5_ORIGINAL_NAME "wshelper32.dll\0"
 #endif