FingerD - A Finger Service for Windows NT
=========================================

Dean Troyer (troyer@indirect.com)
Version 0.5 - 15Oct1995

This finger service will implement RFC 1194 when released as version 1.0.
Currently, it provides only the most basic finger protocol functionalty.

A couple of changes have been made to accomodate the Windows NT environment:
you can specify a domain or machine name as part of the user name to query
a particular user database.  Use the standard NT syntax: domain\username.
For example, I could do a 

    finger cas\dt@bugs

and get the FingerD on my workstation (bugs) to query my main domain account 
from the Primary Domain Controller for domain CAS.

The .plan and .project files are supported, with some conditions:
- FingerD only looks in the home directory listed in your user profile for
  .plan and .project files
- It currently only looks for the files with a leading period.  Obviously,
  this only works with NTFS.  It should also look without the leading periods
  to support FAT filesystems.
- The account that FingerD is running under (see the installation info below)
  must have read access to the home directory and files themselves.

Version 0.5 adds preliminary support for displaying process information for
the local machine.  Use the psuedo-userid of 'proc'.

Likewise, the psuedo-userid of 'finger-conf' will display the configuration 
of FingerD itself.  This can not be disabled, to allow for debugging 
configurations.


Change History
--------------
Version 0.5     15Oct95
- include patches from Anthon V. Lobastoff (tony@sun.nstu.nsk.su) that
  makes the @host output more unix-like; and finger @host now displays now 
  local user as well as domain users.
- add support for 'special' usernames that report system status; proc@host
  will display a list of the process running.  This is still incomplete.
- Implement EnableProcInfo and EnableUSerInfo registry values.  These allow
  the display of process information and/or user information to be disabled.
  Note that if both are disabled, FingerD will only answer to it's own
  configuration query, finger-conf.
- Pause/Continue is now supported.  Currently, the server continues to run 
  in the paused state; continue causes the registry to be re-read, updating 
  the configuration of the running server.
  
Version 0.4     03Feb95
- Initial public release


Installation
------------

Copy fingerd.exe to a convenient location, such as %SystemRoot%\system32.

Type: fingerd -install

Look in the registry with the Registry Editor and edit the values under 
HKEY_LOCAL_MACHINE\SOFTWARE\Local\FingerD to suit your location and
situation.  If you don't know how to edit the registry, ask Microsoft.

Open the Services applet in Control Panel and select the 'Finger Server'.
Select 'StartUp' and set it to run as any account other than LocalSystem.
It is an NT security 'feature' that prevents a service running as 
LocalSystem from having network access.  In UNIX, fingerd runs as root 
so it has access to the information in user's home directories.  You may 
not want to do this.  You will want to create a userid just for this, and
you can use it for the anonymous account for the FTP service, too.

After all that, start the service, open a command window, and try it out!


Removal
-------

Type: fingerd -remove

This doesn't remove the registry entries.  You can do that with the 
Registry Editor, too.  Maybe someone will add a -removeall that deletes
EVERYTHING: registry entries, auxilary files, even fingerd.exe itself.


Registry
--------
FingerD is configured via the Windows NT registry.  When installed, it 
creates a key under HKEY_LOCAL_MACHINE\SOFTWARE\Local\FingerD.  The
possible values are listed below.  The server will re-read the registry
values after a Pause/Continue cycle.

LanManDomain (REG_SZ): The NT or Lan Manager Domain to be queried for user
    information.  This can also be a machine name.  If missing or blank, 
    the local machine's database is used.  If the local machine is an NT 
    Workstation, the local user accounts are referenced; if the local 
    machine is an NT Server, the copy of the domain database on that 
    machine is used.

EnableUserInfo (REG_DWORD): Allows the administrator to disable FingerD from 
    transmitting detailed user information.  This is seen as a security
    issue for some installations.  Traditionally, this would be enough
    reason to simply not run a finger server; however, FingerD also
    implements some system reporting capabilities.

EnableProcInfo (REG_DWORD): Allows the administrator to disable FingerD from 
    transmitting process information.  This may be a security issue for some 
    installations.  This should be disabled on production servers until the
    process support has been completed and tested.


Misc Other Important Factoids
-----------------------------

I used MS Visual C++ 2.0 to build FingerD on Intel/Alpha/MIPS platforms.
If you build a PowerPC version, I'd like to get it for the collection.
Build FingerD from the command line by typing 'nmake'.  You will want
to define a CPU environment variable if you don't have one, because
I shove the platform-specific object code into a unique directory for
each platform.

FingerD has also been built using Borland C++ (I don't know what version).
I can't test this, so it may get broken without my knowledge.

I also have a LOCAL variable that points to a directory tree on the 
local workstation (as opposed to a shared network area).  I've found 
it not pleasant to run services from a network drive.

Upcomming features include:
- clean up Event Logging (it's hideous!)
- reporting system processing statistics for the local machine
- remaining RFC 1194 functionality: request forwarding, 


Legal Stuff
-----------
// Copyright 1995 Dean Troyer (troyer@indirect.com)
// All rights reserved.
//
// This software has been developed by Dean Troyer and other contributors
// ('The Authors') with the intention that it's source code be available 
// to the user/developer community, not only to maintain it's correct 
// operation, but to allow for enhancements by others to contribute to the 
// overall improvement of the software.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in the
//    documentation and/or other materials provided with the distribution.
// 3. All advertising materials mentioning features or use of this software
//    must display the following acknowledgement:
//      This product includes software developed by Dean Troyer and
//      other contributors.
// 4. The names of the Authors may not be used to endorse or promote 
//    products derived from this software without specific prior written 
//    permission.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Basically, if you fix or enhance FingerD, be kind enough to forward at
least the bug fixes back to me for inclusion into the ongoing project.

I make no money from this; my motivation is to fill the enormous void
of freely available source code for Windows NT.  And to demonstrate
and practice useful techniques that might not be commonly known.

