Sun 07 Jun 2009 04:44:31 AM UTC, original submission:
I propose that the current auth code and all
future database interfacing code be written
in lua scripts.
This would have the following advantages:
- No need to recompile to change the way the
database is used (e.g. table field names,
sql statment format, etc.).
- Support for databases other than mysql.
- Easily extended beyond just auth.
For example longturn currently uses postgresql
instead of mysql, and warclient servers use
password salt.
The lua database bindings are provided by LuaSQL
(http://www.keplerproject.org/luasql/). It would
be added to the 'dependencies' directory, with
specific driver libraries only being compiled
and linked to the main server executable if the
corresponding database is detected by configure.
As a first step the lua integration would
proceed by combining much of the functionality
of the functions
authenticate_user
process_authentication_status
handle_authentication_reply
into a single script entry point (i.e. a function
that is expected to exist in the database script).
A stand-alone lua state is created for this script
in auth_init().
The lua function will need to return a status
value indicating how the connection should be
handled (e.g. 'accept', 'wait', 'reject').
The script would need to be able to manipulate
'user' objects, which correspond to 'struct
connection'. Methods should be provided which
allow access to at least 'id', 'name' and
'password' information. An alternative would
be to pass the required information to the
script function each time it is invoked.
Possibly all "auth" string occurences in the code
and in filenames should be changed to "database",
in preparation for future generalization.
I'll clarify and revise the details as I test out
a tentative implementation (though this will not
be very high priority for a while).
----------------------------------------------------------------
誰かが月を一口食いちぎたようだ。
|