There are three integrated systems needed for authentication in ReactOS:
1. Winlogin
2. MSGINA (ROSGINA would work better, no?)
3. Some sort of Identity Management system with support for local and
remote authentication (remote can come with SMB support later)
Tiers 2 & 3 can be developed and tested on a non ReactOS system (aka a
real Windows system) initially (tho with the code staying in the ROS
Subversion tree), while Tier 1 is ReactOS specific.
I thus see three stages (aligned with the systems mentioned above):
1. Identity Management System with basic tools (get Setup to use it, at
least some basic command line tools to add and remove users and change
passwords, no need for a UI yet)
2. A ROSGINA that uses the Identity Management System
3. Get Winlogin back up and running and using the ROSGINA for
authentication.
Since its stage 1:
The identity management system's sole purpose is to create a
cross-subsystem, ReactOS-wide way to authenticate users. How each
subsystem uses the information provided is up to the individual
subsystem. As such, I see a database (Berkerly DB or Sqlite) of users
(and possibly a separate one with groups) with some basic metadata
describing the user:
1. Username
1. Real Name / Nickname
2. Encrypted Password (encrypted with a choice of algorithms, AES,
Blowfish, etc..)
4. Groups user belongs in (by name)
Any other metadata that should be stored in the authentication database?
The identity management system's API can be quite simple:
BOOL AuthenticateUserA( LPCSTR username, LPCSTR password );
BOOL AuthenticateUserW( LPCWSTR username, LPCWSTR password );
Basically, returning a TRUE if the particular user is valid and FALSE
otherwise. Other APIs to get other metadata can come later?
Any other ideas?
--Justin Haygood
justin.haygood(a)gmail.com