/*
- * $Id$
- *
* Server functions which perform operations on room objects.
*
*/
#include "room_ops.h"
#include "sysdep_decls.h"
#include "support.h"
-#include "user_ops.h"
#include "msgbase.h"
#include "citserver.h"
#include "control.h"
#include "threads.h"
#include "ctdl_module.h"
+#include "user_ops.h"
struct floor *floorcache[MAXFLOORS];
int *result, int *view)
{
int retval = 0;
- struct visit vbuf;
+ visit vbuf;
/* for internal programs, always do everything */
if (((CC->internal_pgm)) && (roombuf->QRflags & QR_INUSE)) {
/* Force the properties of the Aide room */
if (!strcasecmp(roombuf->QRname, config.c_aideroom)) {
- if (userbuf->axlevel >= 6) {
+ if (userbuf->axlevel >= AxAideU) {
retval = UA_KNOWN | UA_GOTOALLOWED | UA_POSTALLOWED | UA_DELETEALLOWED;
} else {
retval = 0;
/* If this is a preferred users only room, check access level */
if (roombuf->QRflags & QR_PREFONLY) {
- if (userbuf->axlevel < 5) {
+ if (userbuf->axlevel < AxPrefU) {
retval = retval & ~UA_KNOWN & ~UA_GOTOALLOWED;
}
}
* - It is a read-only room
*/
int post_allowed = 1;
- if (CC->user.axlevel < 2) post_allowed = 0;
- if ((CC->user.axlevel < 4) && (CC->room.QRflags & QR_NETWORK)) post_allowed = 0;
+ if (CC->user.axlevel < AxProbU) post_allowed = 0;
+ if ((CC->user.axlevel < AxNetU) && (CC->room.QRflags & QR_NETWORK)) post_allowed = 0;
if (roombuf->QRflags & QR_READONLY) post_allowed = 0;
if (post_allowed) {
retval = retval | UA_POSTALLOWED;
}
/* Aides get access to all private rooms */
- if ( (userbuf->axlevel >= 6)
+ if ( (userbuf->axlevel >= AxAideU)
&& ((roombuf->QRflags & QR_MAILBOX) == 0) ) {
if (vbuf.v_flags & V_FORGET) {
retval = retval | UA_GOTOALLOWED | UA_POSTALLOWED;
/* Aides can gain access to mailboxes as well, but they don't show
* by default.
*/
- if ( (userbuf->axlevel >= 6)
+ if ( (userbuf->axlevel >= AxAideU)
&& (roombuf->QRflags & QR_MAILBOX) ) {
retval = retval | UA_GOTOALLOWED | UA_POSTALLOWED;
}
/* Aides and Room Aides have admin privileges */
- if ( (userbuf->axlevel >= 6)
+ if ( (userbuf->axlevel >= AxAideU)
|| (userbuf->usernum == roombuf->QRroomaide)
) {
retval = retval | UA_ADMINALLOWED | UA_DELETEALLOWED | UA_POSTALLOWED;
/****************************************************************************/
+
+/*
+ * CtdlGetFloorByName() - retrieve the number of the named floor
+ * return < 0 if not found else return floor number
+ */
+int CtdlGetFloorByName(const char *floor_name)
+{
+ int a;
+ struct floor *flbuf = NULL;
+
+ for (a = 0; a < MAXFLOORS; ++a) {
+ flbuf = CtdlGetCachedFloor(a);
+
+ /* check to see if it already exists */
+ if ((!strcasecmp(flbuf->f_name, floor_name))
+ && (flbuf->f_flags & F_INUSE)) {
+ return a;
+ }
+ }
+ return -1;
+}
+
+
+
+/*
+ * CtdlGetFloorByNameLock() - retrieve floor number for given floor and lock the floor list.
+ */
+int CtdlGetFloorByNameLock(const char *floor_name)
+{
+ begin_critical_section(S_FLOORTAB);
+ return CtdlGetFloorByName(floor_name);
+}
+
+
+
+/*
+ * CtdlGetAvailableFloor() - Return number of first unused floor
+ * return < 0 if none available
+ */
+int CtdlGetAvailableFloor(void)
+{
+ int a;
+ struct floor *flbuf = NULL;
+
+ for (a = 0; a < MAXFLOORS; a++) {
+ flbuf = CtdlGetCachedFloor(a);
+
+ /* check to see if it already exists */
+ if ((flbuf->f_flags & F_INUSE) == 0) {
+ return a;
+ }
+ }
+ return -1;
+}
+
+
/*
* CtdlGetFloor() - retrieve floor data from disk
*/
}
+
/*
- * lputfloor() - same as CtdlPutFloor() but unlocks the record (if supported)
+ * CtdlPutFloorLock() - same as CtdlPutFloor() but unlocks the record (if supported)
*/
-void lputfloor(struct floor *flbuf, int floor_num)
+void CtdlPutFloorLock(struct floor *flbuf, int floor_num)
{
CtdlPutFloor(flbuf, floor_num);
}
+
+/*
+ * lputfloor() - same as CtdlPutFloor() but unlocks the record (if supported)
+ */
+void lputfloor(struct floor *flbuf, int floor_num)
+{
+ CtdlPutFloorLock(flbuf, floor_num);
+}
+
+
/*
* Traverse the room file...
*/
int rmailflag;
int raideflag;
int newmailcount = 0;
- struct visit vbuf;
+ visit vbuf;
char truncated_roomname[ROOMNAMELEN];
struct cdbdata *cdbfr;
long *msglist = NULL;
rmailflag = 0;
if ((CC->room.QRroomaide == CC->user.usernum)
- || (CC->user.axlevel >= 6))
+ || (CC->user.axlevel >= AxAideU))
raideflag = 1;
else
raideflag = 0;
/* Then try a mailbox name match */
if (c != 0) {
- MailboxName(augmented_roomname, sizeof augmented_roomname,
+ CtdlMailboxName(augmented_roomname, sizeof augmented_roomname,
&CC->user, towhere);
c = CtdlGetRoom(&QRscratch, augmented_roomname);
if (c == 0)
} else if ((QRscratch.QRflags & QR_PASSWORDED) &&
((ra & UA_KNOWN) == 0) &&
(strcasecmp(QRscratch.QRpasswd, password)) &&
- (CC->user.axlevel < 6)
+ (CC->user.axlevel < AxAideU)
) {
cprintf("%d wrong or missing passwd\n",
ERROR + PASSWORD_REQUIRED);
((QRscratch.QRflags & QR_PASSWORDED) == 0) &&
((QRscratch.QRflags & QR_GUESSNAME) == 0) &&
((ra & UA_KNOWN) == 0) &&
- (CC->user.axlevel < 6)
+ (CC->user.axlevel < AxAideU)
) {
CtdlLogPrintf(CTDL_DEBUG, "Failed to acquire private room\n");
} else {
return;
}
if (((CC->room.QRflags & QR_VISDIR) == 0)
- && (CC->user.axlevel < 6)
+ && (CC->user.axlevel < AxAideU)
&& (CC->user.usernum != CC->room.QRroomaide)) {
cprintf("%d not here.\n", ERROR + HIGHER_ACCESS_REQUIRED);
return;
ret = crr_room_not_found;
}
- else if ( (CC->user.axlevel < 6) && (!CC->internal_pgm)
+ else if ( (CC->user.axlevel < AxAideU) && (!CC->internal_pgm)
&& (CC->user.usernum != qrbuf.QRroomaide)
&& ( (((qrbuf.QRflags & QR_MAILBOX) == 0) || (atol(qrbuf.QRname) != CC->user.usernum))) ) {
ret = crr_access_denied;
if (CtdlAccessCheck(ac_logged_in)) return;
- if (getuserbynumber(&usbuf, CC->room.QRroomaide) == 0) {
+ if (CtdlGetUserByNumber(&usbuf, CC->room.QRroomaide) == 0) {
cprintf("%d %s\n", CIT_OK, usbuf.fullname);
} else {
cprintf("%d \n", CIT_OK);
/*
* Internal code to create a new room (returns room flags)
*
- * Room types: 0=public, 1=guessname, 2=passworded, 3=inv-only,
+ * Room types: 0=public, 1=hidden, 2=passworded, 3=invitation-only,
* 4=mailbox, 5=mailbox, but caller supplies namespace
*/
unsigned CtdlCreateRoom(char *new_room_name,
struct ctdlroom qrbuf;
struct floor flbuf;
- struct visit vbuf;
+ visit vbuf;
CtdlLogPrintf(CTDL_DEBUG, "CtdlCreateRoom(name=%s, type=%d, view=%d)\n",
new_room_name, new_room_type, new_room_view);
* name accordingly (prepend the user number)
*/
if (new_room_type == 4) {
- MailboxName(qrbuf.QRname, sizeof qrbuf.QRname, &CC->user, new_room_name);
+ CtdlMailboxName(qrbuf.QRname, sizeof qrbuf.QRname, &CC->user, new_room_name);
}
else {
safestrncpy(qrbuf.QRname, new_room_name, sizeof qrbuf.QRname);
}
if (new_room_type == 5) {
- if (CC->user.axlevel < 6) {
+ if (CC->user.axlevel < AxAideU) {
cprintf("%d Higher access required\n",
ERROR + HIGHER_ACCESS_REQUIRED);
return;
CTDL_MODULE_INIT(room_ops)
{
- CtdlRegisterProtoHook(cmd_lrms, "LRMS", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_lkra, "LKRA", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_lkrn, "LKRN", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_lkro, "LKRO", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_lzrm, "LZRM", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_lprm, "LPRM", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_goto, "GOTO", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_whok, "WHOK", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_rdir, "RDIR", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_getr, "GETR", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_setr, "SETR", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_geta, "GETA", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_seta, "SETA", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_rinf, "RINF", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_kill, "KILL", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_cre8, "CRE8", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_einf, "EINF", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_lflr, "LFLR", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_cflr, "CFLR", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_kflr, "KFLR", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_eflr, "EFLR", "Autoconverted. TODO: document me.");
+ if (!threading) {
+ CtdlRegisterProtoHook(cmd_lrms, "LRMS", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_lkra, "LKRA", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_lkrn, "LKRN", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_lkro, "LKRO", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_lzrm, "LZRM", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_lprm, "LPRM", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_goto, "GOTO", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_whok, "WHOK", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_rdir, "RDIR", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_getr, "GETR", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_setr, "SETR", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_geta, "GETA", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_seta, "SETA", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_rinf, "RINF", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_kill, "KILL", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_cre8, "CRE8", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_einf, "EINF", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_lflr, "LFLR", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_cflr, "CFLR", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_kflr, "KFLR", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_eflr, "EFLR", "Autoconverted. TODO: document me.");
+ }
/* return our Subversion id for the Log */
- return "$Id$";
+ return "room_ops";
}