CONCEPT
news
DESCRIPTION
This document describes the news system used in Nightfall.
News is intended to provide a general system for bulletin
boards and similar objects. It is similar to the Usenet
news system. Articles are stored in a central area, /news.
Articles (Messages) are stored as files within this
directory. Only the news demon object is allowed to write
and read in the /news directory. Interfaceing to the
news demon is done via interface functions in the news
demon.
Typically news are read and written by a bulletin
board object or by a newsreader. Player buletin boards
should of course be limited to specific news groups.
A newsreader might be intelligent in that it autmatically
shows new messages. Groups may be moderated, then only the
moderator can write there. There are also flags whether a
board is a wiz_only board and who may remove messages.
Security is in several levels. It may be 0, then every
effective userid might read and write and delete articles,
although the news demon will still look for the match of
the sender field with certain group requirements. This level
of security is to make it possible to create groups
accessible by bulletin boards which have no euid.
Security level 1 means that euid check is done, for reading
and writing. This still allows for bulltin boards, but those
must have root euid and thus the ability to seteuid to the
euid of the object using the bulletin board (normally the
player). This feature requires native gamedriver mode.
Saved news file format (formal notation):
int security; /* wheter euid check is done, 0 or 1 */
mixed *accesslist = ({
mixed *readaccess; /* who can read messages */
mixed *writeaccess; /* who can write messages */
mixed *deleteaccess; /* who can delete messages */
mixed *controlaccess; /* who can control the accesslist */
})
mixed *messages = ({
mixed *msg1; mixed *msg2; ... mixed *msgN;
})
An access entry can be be one of the following:
- an effective userid (string)
- one of the keywords "wizard", "all", "author"
- a wizard level (integer) which is required minimal
- an array of one of the plain types above (Alternative).
A message looks as follows:
mixed *message = ({
string author; /* who wrote the message */
string subject; /* the subject */
string *groups; /* news groups where this was posted */
int date; /* date of message written */
string messageid; /* a unique string */
string *referenceid; /* list of references */
int expire; /* when message expires */
string body; /* the contents of the message */
})
The news demon (/secure/news, or /obj/news) provides the
following functions:
int success = PostMessage(mixed *message)
Tells the demon to insert the message in the news database.
Depending on security level, euid or message.author is
checked if this is allowed.
int success = DeleteMessage(string *groups, string messageid)
Remove a message from the database.
mixed *messagelist = ReadMessageHeaders(string group)
Get all message headers (complete info, but without
body) of newsgroup <group>.
mixed *message = ReadMessage(string *groups, string messageid)
Retrieve a message from the database.
SEE ALSO
|