From: Art Cancro Date: Sun, 11 Jul 1999 23:59:15 +0000 (+0000) Subject: * room_ops.c: eliminate room name parameter in putroom() and its ilk; X-Git-Tag: v7.86~7650 X-Git-Url: https://code.citadel.org/?a=commitdiff_plain;h=545935351fabab8026384991f3dd12716d8dcae5;p=citadel.git * room_ops.c: eliminate room name parameter in putroom() and its ilk; get data from quickroom.QRname instead; prevents incorrect indexes * Tentative implementation of "personal rooms" (user-private namespace) --- diff --git a/citadel/ChangeLog b/citadel/ChangeLog index 9b417e883..5a3142cb8 100644 --- a/citadel/ChangeLog +++ b/citadel/ChangeLog @@ -1,6 +1,9 @@ Sun Jul 11 18:46:48 EDT 1999 Art Cancro * netproc.c: msgfind() no longer uses the timestamp as a message-ID when no other message-ID is available (it screws up the loopzapper) + * room_ops.c: eliminate room name parameter in putroom() and its ilk; + get data from quickroom.QRname instead; prevents incorrect indexes + * Tentative implementation of "personal rooms" (user-private namespace) Wed Jul 7 23:25:09 EDT 1999 Art Cancro * control.c: create citadel.control if it doesn't exist (yikes!) diff --git a/citadel/messages.c b/citadel/messages.c index 0b5bee04c..0b2204e66 100644 --- a/citadel/messages.c +++ b/citadel/messages.c @@ -1039,7 +1039,6 @@ RMSGREAD: fflush(stdout); if ((e=='d')||(e=='m')) e=0; } /* print only if available */ if ((e=='p')&&(strlen(printcmd)==0)) e=0; -/* can't move from Mail> */ if ((e=='m')&&(is_mail==1)) e=0; /* can't reply in public rms */ if ((e=='r')&&(is_mail!=1)) e=0; /* can't file if not allowed */ if ((e=='f')&&(rc_allow_attachments==0)) e=0; } while((e!='a')&&(e!='n')&&(e!='s') diff --git a/citadel/msgbase.c b/citadel/msgbase.c index aca331a54..c1c290308 100644 --- a/citadel/msgbase.c +++ b/citadel/msgbase.c @@ -954,7 +954,7 @@ void save_message(char *mtmp, /* file containing proper message */ CC->quickroom.QRhighest = AddMessageToRoom(&CC->quickroom, newmsgid); /* update quickroom */ - lputroom(&CC->quickroom, actual_rm); + lputroom(&CC->quickroom); /* Network mail - send a copy to the network program. */ if ( (strlen(recipient)>0) && (mailtype != MES_LOCAL) ) { @@ -1335,7 +1335,7 @@ void cmd_dele(char *delstr) CC->quickroom.QRhighest = MessageFromList(CC->num_msgs - 1); put_msglist(&CC->quickroom); - lputroom(&CC->quickroom,CC->quickroom.QRname); + lputroom(&CC->quickroom); if (ok==1) { cdb_delete(CDB_MSGMAIN, &delnum, sizeof(long)); cprintf("%d Message deleted.\n",OK); @@ -1387,7 +1387,7 @@ void cmd_move(char *args) put_msglist(&CC->quickroom); CC->quickroom.QRhighest = MessageFromList((CC->num_msgs)-1); } - lputroom(&CC->quickroom,CC->quickroom.QRname); + lputroom(&CC->quickroom); if (!foundit) { cprintf("%d msg %ld does not exist.\n",ERROR,num); return; @@ -1396,7 +1396,7 @@ void cmd_move(char *args) /* put the message into the target room */ lgetroom(&qtemp, targ); qtemp.QRhighest = AddMessageToRoom(&qtemp, num); - lputroom(&qtemp, targ); + lputroom(&qtemp); cprintf("%d Message moved.\n", OK); } diff --git a/citadel/policy.c b/citadel/policy.c index ad4aaf7d3..fa6ec318c 100644 --- a/citadel/policy.c +++ b/citadel/policy.c @@ -102,7 +102,7 @@ void cmd_spex(char *argbuf) { } lgetroom(&CC->quickroom, CC->quickroom.QRname); memcpy(&CC->quickroom.QRep, &exp, sizeof(struct ExpirePolicy)); - lputroom(&CC->quickroom, CC->quickroom.QRname); + lputroom(&CC->quickroom); cprintf("%d ok\n", OK); return; } diff --git a/citadel/room_ops.c b/citadel/room_ops.c index 3bca3a7c2..e81a1e415 100644 --- a/citadel/room_ops.c +++ b/citadel/room_ops.c @@ -28,22 +28,21 @@ /* * Generic routine for determining user access to rooms */ -int CtdlRoomAccess(struct quickroom *roombuf, struct usersupp *userbuf) { +int CtdlRoomAccess(struct quickroom *roombuf, struct usersupp *userbuf) +{ int retval = 0; struct visit vbuf; /* for internal programs, always do everything */ - if (((CC->internal_pgm))&&(roombuf->QRflags & QR_INUSE)) { - return(UA_KNOWN | UA_GOTOALLOWED); - } - + if (((CC->internal_pgm)) && (roombuf->QRflags & QR_INUSE)) { + return (UA_KNOWN | UA_GOTOALLOWED); + } /* For mailbox rooms, only allow access to the owner */ if (roombuf->QRflags & QR_MAILBOX) { if (userbuf->usernum != atol(roombuf->QRname)) { - return(retval); - } + return (retval); } - + } /* Locate any applicable user/room relationships */ CtdlGetRelationship(&vbuf, userbuf, roombuf); @@ -51,13 +50,11 @@ int CtdlRoomAccess(struct quickroom *roombuf, struct usersupp *userbuf) { if (!strcasecmp(roombuf->QRname, AIDEROOM)) { if (userbuf->axlevel >= 6) { retval = UA_KNOWN | UA_GOTOALLOWED; - } - else { - retval=0; - } - goto NEWMSG; + } else { + retval = 0; } - + goto NEWMSG; + } /* For mailboxes, we skip all the access stuff (and we've * already checked by this point that the mailbox belongs * to the user) @@ -65,76 +62,68 @@ int CtdlRoomAccess(struct quickroom *roombuf, struct usersupp *userbuf) { if (roombuf->QRflags & QR_MAILBOX) { retval = UA_KNOWN | UA_GOTOALLOWED; goto NEWMSG; - } - + } /* If this is a public room, it's accessible... */ if ((roombuf->QRflags & QR_PRIVATE) == 0) { retval = retval | UA_KNOWN | UA_GOTOALLOWED; - } - + } /* If this is a preferred users only room, check access level */ if (roombuf->QRflags & QR_PREFONLY) { if (userbuf->axlevel < 5) { retval = retval & ~UA_KNOWN & ~UA_GOTOALLOWED; - } } - + } /* For private rooms, check the generation number matchups */ if (roombuf->QRflags & QR_PRIVATE) { /* An explicit match means the user belongs in this room */ if (vbuf.v_flags & V_ACCESS) { retval = retval | UA_KNOWN | UA_GOTOALLOWED; - } + } /* Otherwise, check if this is a guess-name or passworded * room. If it is, a goto may at least be attempted */ else if ((roombuf->QRflags & QR_PRIVATE) - ||(roombuf->QRflags & QR_PASSWORDED)) { + || (roombuf->QRflags & QR_PASSWORDED)) { retval = retval & ~UA_KNOWN; retval = retval | UA_GOTOALLOWED; - } } - + } /* Check to see if the user has forgotten this room */ if (vbuf.v_flags & V_FORGET) { retval = retval & ~UA_KNOWN; retval = retval | UA_ZAPPED; - } - + } /* If user is explicitly locked out of this room, deny everything */ if (vbuf.v_flags & V_LOCKOUT) { retval = retval & ~UA_KNOWN & ~UA_GOTOALLOWED; - } - + } /* Aides get access to everything */ if (userbuf->axlevel >= 6) { retval = retval | UA_KNOWN | UA_GOTOALLOWED; retval = retval & ~UA_ZAPPED; - } - -NEWMSG: /* By the way, we also check for the presence of new messages */ - if ( (roombuf->QRhighest) > (vbuf.v_lastseen) ) { + } + NEWMSG: /* By the way, we also check for the presence of new messages */ + if ((roombuf->QRhighest) > (vbuf.v_lastseen)) { retval = retval | UA_HASNEWMSGS; - } - - return(retval); } + return (retval); +} /* * Self-checking stuff for a room record read into memory */ -void room_sanity_check(struct quickroom *qrbuf) { +void room_sanity_check(struct quickroom *qrbuf) +{ /* Mailbox rooms are always on the lowest floor */ if (qrbuf->QRflags & QR_MAILBOX) { qrbuf->QRfloor = 0; - } - + } /* Listing order of 0 is illegal except for base rooms */ if (qrbuf->QRorder == 0) if (!is_noneditable(qrbuf)) qrbuf->QRorder = 64; - } +} /* @@ -144,30 +133,41 @@ int getroom(struct quickroom *qrbuf, char *room_name) { struct cdbdata *cdbqr; char lowercase_name[ROOMNAMELEN]; + char personal_lowercase_name[ROOMNAMELEN]; int a; - for (a=0; room_name[a] && a < sizeof lowercase_name - 1; ++a) { + for (a = 0; room_name[a] && a < sizeof lowercase_name - 1; ++a) { lowercase_name[a] = tolower(room_name[a]); - } + } lowercase_name[a] = 0; memset(qrbuf, 0, sizeof(struct quickroom)); + + /* First, try the public namespace */ cdbqr = cdb_fetch(CDB_QUICKROOM, - lowercase_name, strlen(lowercase_name)); + lowercase_name, strlen(lowercase_name)); + + /* If that didn't work, try the user's personal namespace */ + if (cdbqr == NULL) { + sprintf(personal_lowercase_name, "%010ld.%s", + CC->usersupp.usernum, lowercase_name); + cdbqr = cdb_fetch(CDB_QUICKROOM, + personal_lowercase_name, + strlen(personal_lowercase_name)); + } if (cdbqr != NULL) { memcpy(qrbuf, cdbqr->ptr, - ( (cdbqr->len > sizeof(struct quickroom)) ? - sizeof(struct quickroom) : cdbqr->len) ); + ((cdbqr->len > sizeof(struct quickroom)) ? + sizeof(struct quickroom) : cdbqr->len)); cdb_free(cdbqr); room_sanity_check(qrbuf); - return(0); - } - else { - return(1); - } + return (0); + } else { + return (1); } +} /* * lgetroom() - same as getroom() but locks the record (if supported) @@ -175,46 +175,62 @@ int getroom(struct quickroom *qrbuf, char *room_name) int lgetroom(struct quickroom *qrbuf, char *room_name) { begin_critical_section(S_QUICKROOM); - return(getroom(qrbuf, room_name)); - } + return (getroom(qrbuf, room_name)); +} /* - * putroom() - store room data on disk - * (if the supplied buffer is NULL, delete the room record) + * b_putroom() - back end to putroom() and b_deleteroom() + * (if the supplied buffer is NULL, delete the room record) */ -void putroom(struct quickroom *qrbuf, char *room_name) +void b_putroom(struct quickroom *qrbuf, char *room_name) { char lowercase_name[ROOMNAMELEN]; int a; - for (a=0; a<=strlen(room_name); ++a) { + for (a = 0; a <= strlen(room_name); ++a) { lowercase_name[a] = tolower(room_name[a]); - } + } if (qrbuf == NULL) { cdb_delete(CDB_QUICKROOM, - lowercase_name, strlen(lowercase_name)); - } - else { + lowercase_name, strlen(lowercase_name)); + } else { time(&qrbuf->QRmtime); cdb_store(CDB_QUICKROOM, - lowercase_name, strlen(lowercase_name), - qrbuf, sizeof(struct quickroom)); - } + lowercase_name, strlen(lowercase_name), + qrbuf, sizeof(struct quickroom)); } +} + + +/* + * putroom() - store room data to disk + */ +void putroom(struct quickroom *qrbuf) { + b_putroom(qrbuf, qrbuf->QRname); +} + + +/* + * b_deleteroom() - delete a room record from disk + */ +void b_deleteroom(char *room_name) { + b_putroom(NULL, room_name); +} + /* * lputroom() - same as putroom() but unlocks the record (if supported) */ -void lputroom(struct quickroom *qrbuf, char *room_name) +void lputroom(struct quickroom *qrbuf) { - putroom(qrbuf, room_name); + putroom(qrbuf); end_critical_section(S_QUICKROOM); - } +} /****************************************************************************/ @@ -229,20 +245,19 @@ void getfloor(struct floor *flbuf, int floor_num) cdbfl = cdb_fetch(CDB_FLOORTAB, &floor_num, sizeof(int)); if (cdbfl != NULL) { memcpy(flbuf, cdbfl->ptr, - ( (cdbfl->len > sizeof(struct floor)) ? - sizeof(struct floor) : cdbfl->len) ); + ((cdbfl->len > sizeof(struct floor)) ? + sizeof(struct floor) : cdbfl->len)); cdb_free(cdbfl); - } - else { + } else { if (floor_num == 0) { strcpy(flbuf->f_name, "Main Floor"); flbuf->f_flags = F_INUSE; flbuf->f_ref_count = 3; - } } - } +} + /* * lgetfloor() - same as getfloor() but locks the record (if supported) */ @@ -250,8 +265,8 @@ void lgetfloor(struct floor *flbuf, int floor_num) { begin_critical_section(S_FLOORTAB); - getfloor(flbuf,floor_num); - } + getfloor(flbuf, floor_num); +} /* @@ -260,8 +275,8 @@ void lgetfloor(struct floor *flbuf, int floor_num) void putfloor(struct floor *flbuf, int floor_num) { cdb_store(CDB_FLOORTAB, &floor_num, sizeof(int), - flbuf, sizeof(struct floor)); - } + flbuf, sizeof(struct floor)); +} /* @@ -270,67 +285,70 @@ void putfloor(struct floor *flbuf, int floor_num) void lputfloor(struct floor *flbuf, int floor_num) { - putfloor(flbuf,floor_num); + putfloor(flbuf, floor_num); end_critical_section(S_FLOORTAB); - } +} /* * Traverse the room file... */ -void ForEachRoom(void (*CallBack)(struct quickroom *EachRoom)) { +void ForEachRoom(void (*CallBack) (struct quickroom * EachRoom)) +{ struct quickroom qrbuf; struct cdbdata *cdbqr; cdb_rewind(CDB_QUICKROOM); - while(cdbqr = cdb_next_item(CDB_QUICKROOM), cdbqr != NULL) { + while (cdbqr = cdb_next_item(CDB_QUICKROOM), cdbqr != NULL) { memset(&qrbuf, 0, sizeof(struct quickroom)); memcpy(&qrbuf, cdbqr->ptr, - ( (cdbqr->len > sizeof(struct quickroom)) ? - sizeof(struct quickroom) : cdbqr->len) ); + ((cdbqr->len > sizeof(struct quickroom)) ? + sizeof(struct quickroom) : cdbqr->len)); cdb_free(cdbqr); room_sanity_check(&qrbuf); - if (qrbuf.QRflags & QR_INUSE) (*CallBack)(&qrbuf); - } + if (qrbuf.QRflags & QR_INUSE) + (*CallBack) (&qrbuf); } +} /* * get_msglist() - retrieve room message pointers */ -void get_msglist(struct quickroom *whichroom) { +void get_msglist(struct quickroom *whichroom) +{ struct cdbdata *cdbfr; if (CC->msglist != NULL) { phree(CC->msglist); - } + } CC->msglist = NULL; CC->num_msgs = 0; cdbfr = cdb_fetch(CDB_MSGLISTS, &whichroom->QRnumber, sizeof(long)); if (cdbfr == NULL) { return; - } - + } CC->msglist = mallok(cdbfr->len); memcpy(CC->msglist, cdbfr->ptr, cdbfr->len); CC->num_msgs = cdbfr->len / sizeof(long); cdb_free(cdbfr); - } +} /* * put_msglist() - retrieve room message pointers */ -void put_msglist(struct quickroom *whichroom) { +void put_msglist(struct quickroom *whichroom) +{ if (CC->msglist != NULL) cdb_store(CDB_MSGLISTS, &whichroom->QRnumber, sizeof(long), - CC->msglist, CC->num_msgs * sizeof(long)); - } + CC->msglist, CC->num_msgs * sizeof(long)); +} /* @@ -340,10 +358,11 @@ void put_msglist(struct quickroom *whichroom) { * a room which has never been posted in will result in a message * like "gdbm: illegal data" (no big deal, but could use fixing). */ -void delete_msglist(struct quickroom *whichroom) { +void delete_msglist(struct quickroom *whichroom) +{ cdb_delete(CDB_MSGLISTS, &whichroom->QRnumber, sizeof(long)); - } +} /* @@ -356,35 +375,35 @@ void delete_msglist(struct quickroom *whichroom) { * the add operation is performed - which is not necessarily the message * being added. */ -long AddMessageToRoom(struct quickroom *whichroom, long newmsgid) { +long AddMessageToRoom(struct quickroom *whichroom, long newmsgid) +{ struct cdbdata *cdbfr; int num_msgs; long *msglist; long highest_msg = 0L; - lprintf(9, "AddMessageToRoom(%s, %ld)\n", whichroom->QRname, newmsgid); + lprintf(9, "AddMessageToRoom(%s, %ld)\n", whichroom->QRname, newmsgid); cdbfr = cdb_fetch(CDB_MSGLISTS, &whichroom->QRnumber, sizeof(long)); if (cdbfr == NULL) { msglist = NULL; num_msgs = 0; - } - else { + } else { msglist = mallok(cdbfr->len); - if (msglist==NULL) lprintf(3, "ERROR malloc msglist!\n"); + if (msglist == NULL) + lprintf(3, "ERROR malloc msglist!\n"); num_msgs = cdbfr->len / sizeof(long); memcpy(msglist, cdbfr->ptr, cdbfr->len); cdb_free(cdbfr); - } - + } + /* Now add the new message */ ++num_msgs; msglist = reallok(msglist, - (num_msgs * sizeof(long)) ); + (num_msgs * sizeof(long))); if (msglist == NULL) { lprintf(3, "ERROR: can't realloc message list!\n"); - } - + } msglist[num_msgs - 1] = newmsgid; /* Sort the message list, so all the msgid's are in order */ @@ -395,35 +414,39 @@ long AddMessageToRoom(struct quickroom *whichroom, long newmsgid) { /* Write it back to disk. */ cdb_store(CDB_MSGLISTS, &whichroom->QRnumber, sizeof(long), - msglist, num_msgs * sizeof(long)); + msglist, num_msgs * sizeof(long)); /* And finally, free up the memory we used. */ phree(msglist); - return(highest_msg); - } + return (highest_msg); +} /* * MessageFromList() - get a message number from the list currently in memory */ -long MessageFromList(int whichpos) { +long MessageFromList(int whichpos) +{ /* Return zero if the position is invalid */ - if (whichpos >= CC->num_msgs) return 0L; + if (whichpos >= CC->num_msgs) + return 0L; - return(CC->msglist[whichpos]); - } + return (CC->msglist[whichpos]); +} /* * SetMessageInList() - set a message number in the list currently in memory */ -void SetMessageInList(int whichpos, long newmsgnum) { +void SetMessageInList(int whichpos, long newmsgnum) +{ /* Return zero if the position is invalid */ - if (whichpos >= CC->num_msgs) return; + if (whichpos >= CC->num_msgs) + return; CC->msglist[whichpos] = newmsgnum; - } +} @@ -433,58 +456,66 @@ void SetMessageInList(int whichpos, long newmsgnum) { */ int sort_msglist(long listptrs[], int oldcount) { - int a,b; + int a, b; long hold1, hold2; int numitems; numitems = oldcount; - if (numitems < 2) return(oldcount); + if (numitems < 2) + return (oldcount); /* do the sort */ - for (a=numitems-2; a>=0; --a) { - for (b=0; b<=a; ++b) { - if (listptrs[b] > (listptrs[b+1])) { + for (a = numitems - 2; a >= 0; --a) { + for (b = 0; b <= a; ++b) { + if (listptrs[b] > (listptrs[b + 1])) { hold1 = listptrs[b]; - hold2 = listptrs[b+1]; + hold2 = listptrs[b + 1]; listptrs[b] = hold2; - listptrs[b+1] = hold1; - } + listptrs[b + 1] = hold1; } } + } /* and yank any nulls */ - while ( (numitems > 0) && (listptrs[0] == 0L) ) { + while ((numitems > 0) && (listptrs[0] == 0L)) { memcpy(&listptrs[0], &listptrs[1], - (sizeof(long) * (CC->num_msgs - 1)) ); + (sizeof(long) * (CC->num_msgs - 1))); --numitems; - } - - return(numitems); } + return (numitems); +} + /* * Determine whether a given room is non-editable. */ -int is_noneditable(struct quickroom *qrbuf) { +int is_noneditable(struct quickroom *qrbuf) +{ /* Lobby> and Aide> are non-editable */ - if (!strcasecmp(qrbuf->QRname, BASEROOM)) return(1); - else if (!strcasecmp(qrbuf->QRname, AIDEROOM)) return(1); + if (!strcasecmp(qrbuf->QRname, BASEROOM)) + return (1); + else if (!strcasecmp(qrbuf->QRname, AIDEROOM)) + return (1); - /* Mailbox rooms are also non-editable */ - else if (qrbuf->QRflags & QR_MAILBOX) return(1); + /* Mail> rooms are also non-editable */ + else if ( (qrbuf->QRflags & QR_MAILBOX) + && (!strcasecmp(&qrbuf->QRname[11], MAILROOM)) ) + return (1); /* Everything else is editable */ - else return(0); - } + else + return (0); +} /* * Back-back-end for all room listing commands */ -void list_roomname(struct quickroom *qrbuf) { +void list_roomname(struct quickroom *qrbuf) +{ char truncated_roomname[ROOMNAMELEN]; /* For mailbox rooms, chop off the owner prefix */ @@ -492,196 +523,196 @@ void list_roomname(struct quickroom *qrbuf) { strcpy(truncated_roomname, qrbuf->QRname); strcpy(truncated_roomname, &truncated_roomname[11]); cprintf("%s", truncated_roomname); - } + } /* For all other rooms, just display the name in its entirety */ else { cprintf("%s", qrbuf->QRname); - } + } /* ...and now the other parameters */ cprintf("|%u|%d|%d\n", qrbuf->QRflags, - (int)qrbuf->QRfloor, - (int)qrbuf->QRorder); - } + (int) qrbuf->QRfloor, + (int) qrbuf->QRorder); +} /* * cmd_lrms() - List all accessible rooms, known or forgotten */ -void cmd_lrms_backend(struct quickroom *qrbuf) { - if ( ((CtdlRoomAccess(qrbuf, &CC->usersupp) - & (UA_KNOWN | UA_ZAPPED))) - && ((qrbuf->QRfloor == (CC->FloorBeingSearched)) - ||((CC->FloorBeingSearched)<0)) ) +void cmd_lrms_backend(struct quickroom *qrbuf) +{ + if (((CtdlRoomAccess(qrbuf, &CC->usersupp) + & (UA_KNOWN | UA_ZAPPED))) + && ((qrbuf->QRfloor == (CC->FloorBeingSearched)) + || ((CC->FloorBeingSearched) < 0))) list_roomname(qrbuf); - } +} void cmd_lrms(char *argbuf) { CC->FloorBeingSearched = (-1); - if (strlen(argbuf)>0) CC->FloorBeingSearched = extract_int(argbuf,0); + if (strlen(argbuf) > 0) + CC->FloorBeingSearched = extract_int(argbuf, 0); if (!(CC->logged_in)) { - cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN); + cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); return; - } - - if (getuser(&CC->usersupp,CC->curr_user)) { - cprintf("%d Can't locate user!\n",ERROR+INTERNAL_ERROR); + } + if (getuser(&CC->usersupp, CC->curr_user)) { + cprintf("%d Can't locate user!\n", ERROR + INTERNAL_ERROR); return; - } - - cprintf("%d Accessible rooms:\n",LISTING_FOLLOWS); + } + cprintf("%d Accessible rooms:\n", LISTING_FOLLOWS); - ForEachRoom(cmd_lrms_backend); + ForEachRoom(cmd_lrms_backend); cprintf("000\n"); - } +} /* * cmd_lkra() - List all known rooms */ -void cmd_lkra_backend(struct quickroom *qrbuf) { - if ( ((CtdlRoomAccess(qrbuf, &CC->usersupp) - & (UA_KNOWN))) - && ((qrbuf->QRfloor == (CC->FloorBeingSearched)) - ||((CC->FloorBeingSearched)<0)) ) +void cmd_lkra_backend(struct quickroom *qrbuf) +{ + if (((CtdlRoomAccess(qrbuf, &CC->usersupp) + & (UA_KNOWN))) + && ((qrbuf->QRfloor == (CC->FloorBeingSearched)) + || ((CC->FloorBeingSearched) < 0))) list_roomname(qrbuf); - } +} void cmd_lkra(char *argbuf) { CC->FloorBeingSearched = (-1); - if (strlen(argbuf)>0) CC->FloorBeingSearched = extract_int(argbuf,0); + if (strlen(argbuf) > 0) + CC->FloorBeingSearched = extract_int(argbuf, 0); if (!(CC->logged_in)) { - cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN); + cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); return; - } - - if (getuser(&CC->usersupp,CC->curr_user)) { - cprintf("%d Can't locate user!\n",ERROR+INTERNAL_ERROR); + } + if (getuser(&CC->usersupp, CC->curr_user)) { + cprintf("%d Can't locate user!\n", ERROR + INTERNAL_ERROR); return; - } - - cprintf("%d Known rooms:\n",LISTING_FOLLOWS); + } + cprintf("%d Known rooms:\n", LISTING_FOLLOWS); - ForEachRoom(cmd_lkra_backend); + ForEachRoom(cmd_lkra_backend); cprintf("000\n"); - } +} /* * cmd_lkrn() - List all known rooms with new messages */ -void cmd_lkrn_backend(struct quickroom *qrbuf) { +void cmd_lkrn_backend(struct quickroom *qrbuf) +{ int ra; ra = CtdlRoomAccess(qrbuf, &CC->usersupp); - if ( (ra & UA_KNOWN) - && (ra & UA_HASNEWMSGS) - && ((qrbuf->QRfloor == (CC->FloorBeingSearched)) - ||((CC->FloorBeingSearched)<0)) ) + if ((ra & UA_KNOWN) + && (ra & UA_HASNEWMSGS) + && ((qrbuf->QRfloor == (CC->FloorBeingSearched)) + || ((CC->FloorBeingSearched) < 0))) list_roomname(qrbuf); - } +} void cmd_lkrn(char *argbuf) { CC->FloorBeingSearched = (-1); - if (strlen(argbuf)>0) CC->FloorBeingSearched = extract_int(argbuf,0); + if (strlen(argbuf) > 0) + CC->FloorBeingSearched = extract_int(argbuf, 0); if (!(CC->logged_in)) { - cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN); + cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); return; - } - - if (getuser(&CC->usersupp,CC->curr_user)) { - cprintf("%d Can't locate user!\n",ERROR+INTERNAL_ERROR); + } + if (getuser(&CC->usersupp, CC->curr_user)) { + cprintf("%d Can't locate user!\n", ERROR + INTERNAL_ERROR); return; - } - - cprintf("%d Rooms w/ new msgs:\n",LISTING_FOLLOWS); + } + cprintf("%d Rooms w/ new msgs:\n", LISTING_FOLLOWS); - ForEachRoom(cmd_lkrn_backend); + ForEachRoom(cmd_lkrn_backend); cprintf("000\n"); - } +} /* * cmd_lkro() - List all known rooms */ -void cmd_lkro_backend(struct quickroom *qrbuf) { +void cmd_lkro_backend(struct quickroom *qrbuf) +{ int ra; ra = CtdlRoomAccess(qrbuf, &CC->usersupp); - if ( (ra & UA_KNOWN) - && ((ra & UA_HASNEWMSGS)==0) - && ((qrbuf->QRfloor == (CC->FloorBeingSearched)) - ||((CC->FloorBeingSearched)<0)) ) + if ((ra & UA_KNOWN) + && ((ra & UA_HASNEWMSGS) == 0) + && ((qrbuf->QRfloor == (CC->FloorBeingSearched)) + || ((CC->FloorBeingSearched) < 0))) list_roomname(qrbuf); - } +} void cmd_lkro(char *argbuf) { CC->FloorBeingSearched = (-1); - if (strlen(argbuf)>0) CC->FloorBeingSearched = extract_int(argbuf,0); + if (strlen(argbuf) > 0) + CC->FloorBeingSearched = extract_int(argbuf, 0); if (!(CC->logged_in)) { - cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN); + cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); return; - } - - if (getuser(&CC->usersupp,CC->curr_user)) { - cprintf("%d Can't locate user!\n",ERROR+INTERNAL_ERROR); + } + if (getuser(&CC->usersupp, CC->curr_user)) { + cprintf("%d Can't locate user!\n", ERROR + INTERNAL_ERROR); return; - } - - cprintf("%d Rooms w/o new msgs:\n",LISTING_FOLLOWS); + } + cprintf("%d Rooms w/o new msgs:\n", LISTING_FOLLOWS); - ForEachRoom(cmd_lkro_backend); + ForEachRoom(cmd_lkro_backend); cprintf("000\n"); - } +} /* * cmd_lzrm() - List all forgotten rooms */ -void cmd_lzrm_backend(struct quickroom *qrbuf) { +void cmd_lzrm_backend(struct quickroom *qrbuf) +{ int ra; ra = CtdlRoomAccess(qrbuf, &CC->usersupp); - if ( (ra & UA_GOTOALLOWED) - && (ra & UA_ZAPPED) - && ((qrbuf->QRfloor == (CC->FloorBeingSearched)) - ||((CC->FloorBeingSearched)<0)) ) + if ((ra & UA_GOTOALLOWED) + && (ra & UA_ZAPPED) + && ((qrbuf->QRfloor == (CC->FloorBeingSearched)) + || ((CC->FloorBeingSearched) < 0))) list_roomname(qrbuf); - } +} void cmd_lzrm(char *argbuf) { CC->FloorBeingSearched = (-1); - if (strlen(argbuf)>0) CC->FloorBeingSearched = extract_int(argbuf,0); + if (strlen(argbuf) > 0) + CC->FloorBeingSearched = extract_int(argbuf, 0); if (!(CC->logged_in)) { - cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN); + cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); return; - } - - if (getuser(&CC->usersupp,CC->curr_user)) { - cprintf("%d Can't locate user!\n",ERROR+INTERNAL_ERROR); + } + if (getuser(&CC->usersupp, CC->curr_user)) { + cprintf("%d Can't locate user!\n", ERROR + INTERNAL_ERROR); return; - } - - cprintf("%d Zapped rooms:\n",LISTING_FOLLOWS); + } + cprintf("%d Zapped rooms:\n", LISTING_FOLLOWS); - ForEachRoom(cmd_lzrm_backend); + ForEachRoom(cmd_lzrm_backend); cprintf("000\n"); - } +} @@ -700,58 +731,62 @@ void usergoto(char *where, int display_result) strcpy(CC->quickroom.QRname, where); getroom(&CC->quickroom, where); - lgetuser(&CC->usersupp,CC->curr_user); + lgetuser(&CC->usersupp, CC->curr_user); CtdlGetRelationship(&vbuf, &CC->usersupp, &CC->quickroom); /* Know the room ... but not if it's the page log room */ if (strcasecmp(where, config.c_logpages)) { vbuf.v_flags = vbuf.v_flags & ~V_FORGET & ~V_LOCKOUT; vbuf.v_flags = vbuf.v_flags | V_ACCESS; - } - + } CtdlSetRelationship(&vbuf, &CC->usersupp, &CC->quickroom); - lputuser(&CC->usersupp,CC->curr_user); + lputuser(&CC->usersupp, CC->curr_user); /* check for new mail */ newmailcount = NewMailCount(); /* set info to 1 if the user needs to read the room's info file */ - if (CC->quickroom.QRinfo > vbuf.v_lastseen) info = 1; + if (CC->quickroom.QRinfo > vbuf.v_lastseen) + info = 1; get_mm(); get_msglist(&CC->quickroom); - for (a=0; anum_msgs; ++a) { - if (MessageFromList(a)>0L) { + for (a = 0; a < CC->num_msgs; ++a) { + if (MessageFromList(a) > 0L) { ++total_messages; if (MessageFromList(a) > vbuf.v_lastseen) { ++new_messages; - } } } + } - if (CC->quickroom.QRflags & QR_MAILBOX) rmailflag = 1; - else rmailflag = 0; + if (CC->quickroom.QRflags & QR_MAILBOX) + rmailflag = 1; + else + rmailflag = 0; - if ( (CC->quickroom.QRroomaide == CC->usersupp.usernum) - || (CC->usersupp.axlevel>=6) ) raideflag = 1; - else raideflag = 0; + if ((CC->quickroom.QRroomaide == CC->usersupp.usernum) + || (CC->usersupp.axlevel >= 6)) + raideflag = 1; + else + raideflag = 0; strcpy(truncated_roomname, CC->quickroom.QRname); if (CC->quickroom.QRflags & QR_MAILBOX) { strcpy(truncated_roomname, &truncated_roomname[11]); - } - - if (display_result) cprintf("%d%c%s|%d|%d|%d|%d|%ld|%ld|%d|%d|%d|%d\n", - OK,check_express(), - truncated_roomname, - new_messages, total_messages, - info,CC->quickroom.QRflags, - CC->quickroom.QRhighest, - vbuf.v_lastseen, - rmailflag,raideflag,newmailcount,CC->quickroom.QRfloor); + } + if (display_result) + cprintf("%d%c%s|%d|%d|%d|%d|%ld|%ld|%d|%d|%d|%d\n", + OK, check_express(), + truncated_roomname, + new_messages, total_messages, + info, CC->quickroom.QRflags, + CC->quickroom.QRhighest, + vbuf.v_lastseen, + rmailflag, raideflag, newmailcount, CC->quickroom.QRfloor); set_wtmpsupp_to_current_room(); - } +} /* @@ -768,12 +803,11 @@ void cmd_goto(char *gargs) char password[256]; if ((!(CC->logged_in)) && (!(CC->internal_pgm))) { - cprintf("%d not logged in\n",ERROR+NOT_LOGGED_IN); + cprintf("%d not logged in\n", ERROR + NOT_LOGGED_IN); return; - } - - extract(towhere,gargs,0); - extract(password,gargs,1); + } + extract(towhere, gargs, 0); + extract(password, gargs, 1); getuser(&CC->usersupp, CC->curr_user); @@ -794,9 +828,9 @@ void cmd_goto(char *gargs) if (c != 0) { MailboxName(augmented_roomname, &CC->usersupp, towhere); c = getroom(&QRscratch, augmented_roomname); - if (c == 0) strcpy(towhere, augmented_roomname); - } - + if (c == 0) + strcpy(towhere, augmented_roomname); + } /* And if the room was found... */ if (c == 0) { @@ -804,175 +838,171 @@ void cmd_goto(char *gargs) if (CC->internal_pgm) { usergoto(towhere, 1); return; - } - + } /* See if there is an existing user/room relationship */ ra = CtdlRoomAccess(&QRscratch, &CC->usersupp); /* normal clients have to pass through security */ - if (ra & UA_GOTOALLOWED) ok = 1; - - if (ok==1) { - if ( (QRscratch.QRflags&QR_PASSWORDED) && - ((ra & UA_KNOWN) == 0) && - (strcasecmp(QRscratch.QRpasswd,password)) - ) { - cprintf("%d wrong or missing passwd\n", - ERROR+PASSWORD_REQUIRED); - return; - } - else if ( (QRscratch.QRflags&QR_PRIVATE) && - ((QRscratch.QRflags&QR_PASSWORDED)==0) && - ((QRscratch.QRflags&QR_GUESSNAME)==0) && - ((ra & UA_KNOWN) == 0) ) { - goto NOPE; - } - else { + if (ra & UA_GOTOALLOWED) + ok = 1; + + if (ok == 1) { + if ((QRscratch.QRflags & QR_PASSWORDED) && + ((ra & UA_KNOWN) == 0) && + (strcasecmp(QRscratch.QRpasswd, password)) + ) { + cprintf("%d wrong or missing passwd\n", + ERROR + PASSWORD_REQUIRED); + return; + } else if ((QRscratch.QRflags & QR_PRIVATE) && + ((QRscratch.QRflags & QR_PASSWORDED) == 0) && + ((QRscratch.QRflags & QR_GUESSNAME) == 0) && + ((ra & UA_KNOWN) == 0)) { + goto NOPE; + } else { usergoto(towhere, 1); return; - } } } - -NOPE: cprintf("%d room '%s' not found\n",ERROR+ROOM_NOT_FOUND,towhere); } + NOPE:cprintf("%d room '%s' not found\n", ERROR + ROOM_NOT_FOUND, towhere); +} -void cmd_whok(void) { +void cmd_whok(void) +{ struct usersupp temp; struct cdbdata *cdbus; - if ((!(CC->logged_in))&&(!(CC->internal_pgm))) { - cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN); + if ((!(CC->logged_in)) && (!(CC->internal_pgm))) { + cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); return; - } - getuser(&CC->usersupp,CC->curr_user); + } + getuser(&CC->usersupp, CC->curr_user); - if ((!is_room_aide()) && (!(CC->internal_pgm)) ) { + if ((!is_room_aide()) && (!(CC->internal_pgm))) { cprintf("%d Higher access required.\n", - ERROR+HIGHER_ACCESS_REQUIRED); + ERROR + HIGHER_ACCESS_REQUIRED); return; - } - - cprintf("%d Who knows room:\n",LISTING_FOLLOWS); + } + cprintf("%d Who knows room:\n", LISTING_FOLLOWS); cdb_rewind(CDB_USERSUPP); - while(cdbus = cdb_next_item(CDB_USERSUPP), cdbus != NULL) { + while (cdbus = cdb_next_item(CDB_USERSUPP), cdbus != NULL) { memset(&temp, 0, sizeof(struct usersupp)); memcpy(&temp, cdbus->ptr, cdbus->len); cdb_free(cdbus); - if ( (CC->quickroom.QRflags & QR_INUSE) - && (CtdlRoomAccess(&CC->quickroom, &temp) & UA_KNOWN) - ) cprintf("%s\n",temp.fullname); - } - cprintf("000\n"); + if ((CC->quickroom.QRflags & QR_INUSE) + && (CtdlRoomAccess(&CC->quickroom, &temp) & UA_KNOWN) + ) + cprintf("%s\n", temp.fullname); } + cprintf("000\n"); +} /* * RDIR command for room directory */ -void cmd_rdir(void) { +void cmd_rdir(void) +{ char buf[256]; char flnm[256]; char comment[256]; - FILE *ls,*fd; + FILE *ls, *fd; struct stat statbuf; if (!(CC->logged_in)) { - cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN); + cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); return; - } - + } getroom(&CC->quickroom, CC->quickroom.QRname); getuser(&CC->usersupp, CC->curr_user); if ((CC->quickroom.QRflags & QR_DIRECTORY) == 0) { - cprintf("%d not here.\n",ERROR+NOT_HERE); + cprintf("%d not here.\n", ERROR + NOT_HERE); return; - } - + } if (((CC->quickroom.QRflags & QR_VISDIR) == 0) - && (CC->usersupp.axlevel<6) - && (CC->usersupp.usernum != CC->quickroom.QRroomaide)) { - cprintf("%d not here.\n",ERROR+HIGHER_ACCESS_REQUIRED); + && (CC->usersupp.axlevel < 6) + && (CC->usersupp.usernum != CC->quickroom.QRroomaide)) { + cprintf("%d not here.\n", ERROR + HIGHER_ACCESS_REQUIRED); return; - } - + } cprintf("%d %s|%s/files/%s\n", - LISTING_FOLLOWS,config.c_fqdn,BBSDIR,CC->quickroom.QRdirname); + LISTING_FOLLOWS, config.c_fqdn, BBSDIR, CC->quickroom.QRdirname); - sprintf(buf,"cd %s/files/%s; ls >%s 2>/dev/null", - BBSDIR,CC->quickroom.QRdirname,CC->temp); + sprintf(buf, "cd %s/files/%s; ls >%s 2>/dev/null", + BBSDIR, CC->quickroom.QRdirname, CC->temp); system(buf); - sprintf(buf,"%s/files/%s/filedir",BBSDIR,CC->quickroom.QRdirname); - fd = fopen(buf,"r"); - if (fd==NULL) fd=fopen("/dev/null","r"); - - ls = fopen(CC->temp,"r"); - while (fgets(flnm,256,ls)!=NULL) { - flnm[strlen(flnm)-1]=0; - if (strcasecmp(flnm,"filedir")) { - sprintf(buf,"%s/files/%s/%s", - BBSDIR,CC->quickroom.QRdirname,flnm); - stat(buf,&statbuf); - strcpy(comment,""); - fseek(fd,0L,0); - while ((fgets(buf,256,fd)!=NULL) - &&(strlen(comment)==0)) { - buf[strlen(buf)-1] = 0; - if ((!strncasecmp(buf,flnm,strlen(flnm))) - && (buf[strlen(flnm)]==' ')) + sprintf(buf, "%s/files/%s/filedir", BBSDIR, CC->quickroom.QRdirname); + fd = fopen(buf, "r"); + if (fd == NULL) + fd = fopen("/dev/null", "r"); + + ls = fopen(CC->temp, "r"); + while (fgets(flnm, 256, ls) != NULL) { + flnm[strlen(flnm) - 1] = 0; + if (strcasecmp(flnm, "filedir")) { + sprintf(buf, "%s/files/%s/%s", + BBSDIR, CC->quickroom.QRdirname, flnm); + stat(buf, &statbuf); + strcpy(comment, ""); + fseek(fd, 0L, 0); + while ((fgets(buf, 256, fd) != NULL) + && (strlen(comment) == 0)) { + buf[strlen(buf) - 1] = 0; + if ((!strncasecmp(buf, flnm, strlen(flnm))) + && (buf[strlen(flnm)] == ' ')) strncpy(comment, - &buf[strlen(flnm)+1],255); - } - cprintf("%s|%ld|%s\n",flnm,statbuf.st_size,comment); + &buf[strlen(flnm) + 1], 255); } + cprintf("%s|%ld|%s\n", flnm, statbuf.st_size, comment); } + } fclose(ls); fclose(fd); unlink(CC->temp); cprintf("000\n"); - } +} /* * get room parameters (aide or room aide command) */ -void cmd_getr(void) { - if ((!(CC->logged_in))&&(!(CC->internal_pgm))) { - cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN); +void cmd_getr(void) +{ + if ((!(CC->logged_in)) && (!(CC->internal_pgm))) { + cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); return; - } - - if ( (!is_room_aide()) && (!(CC->internal_pgm)) ) { + } + if ((!is_room_aide()) && (!(CC->internal_pgm))) { cprintf("%d Higher access required.\n", - ERROR+HIGHER_ACCESS_REQUIRED); + ERROR + HIGHER_ACCESS_REQUIRED); return; - } - + } if (is_noneditable(&CC->quickroom)) { - cprintf("%d Can't edit this room.\n",ERROR+NOT_HERE); + cprintf("%d Can't edit this room.\n", ERROR + NOT_HERE); return; - } - + } getroom(&CC->quickroom, CC->quickroom.QRname); cprintf("%d%c%s|%s|%s|%d|%d|%d\n", - OK,check_express(), + OK, check_express(), CC->quickroom.QRname, ((CC->quickroom.QRflags & QR_PASSWORDED) ? CC->quickroom.QRpasswd : ""), ((CC->quickroom.QRflags & QR_DIRECTORY) ? CC->quickroom.QRdirname : ""), CC->quickroom.QRflags, - (int)CC->quickroom.QRfloor, - (int)CC->quickroom.QRorder); - } + (int) CC->quickroom.QRfloor, + (int) CC->quickroom.QRorder); +} /* * set room parameters (aide or room aide command) */ -void cmd_setr(char *args) { +void cmd_setr(char *args) +{ char buf[256]; struct floor flbuf; char old_name[ROOMNAMELEN]; @@ -980,124 +1010,118 @@ void cmd_setr(char *args) { int new_order = 0; if (!(CC->logged_in)) { - cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN); + cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); return; - } - + } if (!is_room_aide()) { cprintf("%d Higher access required.\n", - ERROR+HIGHER_ACCESS_REQUIRED); + ERROR + HIGHER_ACCESS_REQUIRED); return; - } - + } if (is_noneditable(&CC->quickroom)) { - cprintf("%d Can't edit this room.\n",ERROR+NOT_HERE); + cprintf("%d Can't edit this room.\n", ERROR + NOT_HERE); return; - } - - if (num_parms(args)>=6) { - getfloor(&flbuf,extract_int(args,5)); + } + if (num_parms(args) >= 6) { + getfloor(&flbuf, extract_int(args, 5)); if ((flbuf.f_flags & F_INUSE) == 0) { cprintf("%d Invalid floor number.\n", - ERROR+INVALID_FLOOR_OPERATION); + ERROR + INVALID_FLOOR_OPERATION); return; - } } - - if (num_parms(args)>=7) { + } + if (num_parms(args) >= 7) { new_order = extract_int(args, 6); - if (new_order < 1) new_order = 1; - if (new_order > 127) new_order = 127; - } - + if (new_order < 1) + new_order = 1; + if (new_order > 127) + new_order = 127; + } lgetroom(&CC->quickroom, CC->quickroom.QRname); strcpy(old_name, CC->quickroom.QRname); - extract(buf,args,0); buf[ROOMNAMELEN]=0; - strncpy(CC->quickroom.QRname,buf,ROOMNAMELEN-1); - extract(buf,args,1); buf[10]=0; - strncpy(CC->quickroom.QRpasswd,buf,9); - extract(buf,args,2); buf[15]=0; - strncpy(CC->quickroom.QRdirname,buf,19); - CC->quickroom.QRflags = ( extract_int(args,3) | QR_INUSE); - if (num_parms(args)>=7) - CC->quickroom.QRorder = (char)new_order; + extract(buf, args, 0); + buf[ROOMNAMELEN] = 0; + strncpy(CC->quickroom.QRname, buf, ROOMNAMELEN - 1); + extract(buf, args, 1); + buf[10] = 0; + strncpy(CC->quickroom.QRpasswd, buf, 9); + extract(buf, args, 2); + buf[15] = 0; + strncpy(CC->quickroom.QRdirname, buf, 19); + CC->quickroom.QRflags = (extract_int(args, 3) | QR_INUSE); + if (num_parms(args) >= 7) + CC->quickroom.QRorder = (char) new_order; /* Clean up a client boo-boo: if the client set the room to * guess-name or passworded, ensure that the private flag is * also set. */ if ((CC->quickroom.QRflags & QR_GUESSNAME) - ||(CC->quickroom.QRflags & QR_PASSWORDED)) + || (CC->quickroom.QRflags & QR_PASSWORDED)) CC->quickroom.QRflags |= QR_PRIVATE; /* Kick everyone out if the client requested it (by changing the * room's generation number) */ - if (extract_int(args,4)) { + if (extract_int(args, 4)) { time(&CC->quickroom.QRgen); - } - + } old_floor = CC->quickroom.QRfloor; - if (num_parms(args)>=6) { - CC->quickroom.QRfloor = extract_int(args,5); - } - + if (num_parms(args) >= 6) { + CC->quickroom.QRfloor = extract_int(args, 5); + } /* Write the room record back to disk */ - lputroom(&CC->quickroom, CC->quickroom.QRname); + lputroom(&CC->quickroom); /* If the room name changed, then there are now two room records, * so we have to delete the old one. */ if (strcasecmp(CC->quickroom.QRname, old_name)) { - putroom(NULL, old_name); - } - + b_deleteroom(old_name); + } /* adjust the floor reference counts */ - lgetfloor(&flbuf,old_floor); + lgetfloor(&flbuf, old_floor); --flbuf.f_ref_count; - lputfloor(&flbuf,old_floor); - lgetfloor(&flbuf,CC->quickroom.QRfloor); + lputfloor(&flbuf, old_floor); + lgetfloor(&flbuf, CC->quickroom.QRfloor); ++flbuf.f_ref_count; - lputfloor(&flbuf,CC->quickroom.QRfloor); + lputfloor(&flbuf, CC->quickroom.QRfloor); /* create a room directory if necessary */ if (CC->quickroom.QRflags & QR_DIRECTORY) { sprintf(buf, - "mkdir ./files/%s /dev/null 2>/dev/null", - CC->quickroom.QRdirname); + "mkdir ./files/%s /dev/null 2>/dev/null", + CC->quickroom.QRdirname); system(buf); - } - - sprintf(buf,"%s> edited by %s",CC->quickroom.QRname,CC->curr_user); - aide_message(buf); - cprintf("%d Ok\n",OK); } + sprintf(buf, "%s> edited by %s", CC->quickroom.QRname, CC->curr_user); + aide_message(buf); + cprintf("%d Ok\n", OK); +} /* * get the name of the room aide for this room */ -void cmd_geta(void) { +void cmd_geta(void) +{ struct usersupp usbuf; - if ((!(CC->logged_in))&&(!(CC->internal_pgm))) { - cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN); + if ((!(CC->logged_in)) && (!(CC->internal_pgm))) { + cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); return; - } - + } if (is_noneditable(&CC->quickroom)) { - cprintf("%d Can't edit this room.\n",ERROR+NOT_HERE); + cprintf("%d Can't edit this room.\n", ERROR + NOT_HERE); return; - } - - if (getuserbynumber(&usbuf,CC->quickroom.QRroomaide)==0) { - cprintf("%d %s\n",OK,usbuf.fullname); - } - else { - cprintf("%d \n",OK); - } } + if (getuserbynumber(&usbuf, CC->quickroom.QRroomaide) == 0) { + cprintf("%d %s\n", OK, usbuf.fullname); + } else { + cprintf("%d \n", OK); + } +} /* @@ -1109,81 +1133,81 @@ void cmd_seta(char *new_ra) long newu; char buf[256]; int post_notice; - + if (!(CC->logged_in)) { - cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN); + cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); return; - } - + } if (!is_room_aide()) { cprintf("%d Higher access required.\n", - ERROR+HIGHER_ACCESS_REQUIRED); + ERROR + HIGHER_ACCESS_REQUIRED); return; - } - - if (getuser(&usbuf,new_ra)!=0) { + } + if (getuser(&usbuf, new_ra) != 0) { newu = (-1L); - } - else { + } else { newu = usbuf.usernum; - } + } lgetroom(&CC->quickroom, CC->quickroom.QRname); post_notice = 0; if (CC->quickroom.QRroomaide != newu) { post_notice = 1; - } + } CC->quickroom.QRroomaide = newu; - lputroom(&CC->quickroom, CC->quickroom.QRname); + lputroom(&CC->quickroom); /* * We have to post the change notice _after_ writing changes to * the room table, otherwise it would deadlock! */ if (post_notice == 1) { - sprintf(buf,"%s is now room aide for %s>", - usbuf.fullname,CC->quickroom.QRname); + sprintf(buf, "%s is now room aide for %s>", + usbuf.fullname, CC->quickroom.QRname); aide_message(buf); - } - cprintf("%d Ok\n",OK); } + cprintf("%d Ok\n", OK); +} /* * Generate an associated file name for a room */ -void assoc_file_name(char *buf, struct quickroom *qrbuf, char *prefix) { +void assoc_file_name(char *buf, struct quickroom *qrbuf, char *prefix) +{ sprintf(buf, "./%s/%ld", prefix, qrbuf->QRnumber); - } +} /* * retrieve info file for this room */ -void cmd_rinf(void) { +void cmd_rinf(void) +{ char filename[128]; char buf[256]; FILE *info_fp; - + assoc_file_name(filename, &CC->quickroom, "info"); - info_fp = fopen(filename,"r"); + info_fp = fopen(filename, "r"); - if (info_fp==NULL) { - cprintf("%d No info file.\n",ERROR); + if (info_fp == NULL) { + cprintf("%d No info file.\n", ERROR); return; - } - - cprintf("%d Info:\n",LISTING_FOLLOWS); + } + cprintf("%d Info:\n", LISTING_FOLLOWS); while (fgets(buf, 256, info_fp) != NULL) { - if (strlen(buf) > 0) buf[strlen(buf)-1] = 0; + if (strlen(buf) > 0) + buf[strlen(buf) - 1] = 0; cprintf("%s\n", buf); - } + } cprintf("000\n"); fclose(info_fp); - } +} /* * Back end processing to delete a room and everything associated with it */ -void delete_room(struct quickroom *qrbuf) { +void delete_room(struct quickroom *qrbuf) +{ struct floor flbuf; long MsgToDelete; char aaa[100]; @@ -1201,134 +1225,137 @@ void delete_room(struct quickroom *qrbuf) { /* first flag the room record as not in use */ lgetroom(qrbuf, qrbuf->QRname); - qrbuf->QRflags=0; + qrbuf->QRflags = 0; /* then delete the messages in the room */ get_msglist(qrbuf); - if (CC->num_msgs > 0) for (a=0; a < CC->num_msgs; ++a) { - MsgToDelete = MessageFromList(a); - cdb_delete(CDB_MSGMAIN, &MsgToDelete, sizeof(long)); + if (CC->num_msgs > 0) + for (a = 0; a < CC->num_msgs; ++a) { + MsgToDelete = MessageFromList(a); + cdb_delete(CDB_MSGMAIN, &MsgToDelete, sizeof(long)); } put_msglist(qrbuf); phree(CC->msglist); CC->msglist = NULL; CC->num_msgs = 0; delete_msglist(qrbuf); - lputroom(qrbuf, qrbuf->QRname); + lputroom(qrbuf); /* then decrement the reference count for the floor */ - lgetfloor(&flbuf,(int)(qrbuf->QRfloor)); + lgetfloor(&flbuf, (int) (qrbuf->QRfloor)); flbuf.f_ref_count = flbuf.f_ref_count - 1; - lputfloor(&flbuf,(int)(qrbuf->QRfloor)); + lputfloor(&flbuf, (int) (qrbuf->QRfloor)); /* Delete the room record from the database! */ - putroom(NULL, qrbuf->QRname); - } + b_deleteroom(qrbuf->QRname); +} /* * aide command: kill the current room */ -void cmd_kill(char *argbuf) { +void cmd_kill(char *argbuf) +{ char aaa[100]; char deleted_room_name[ROOMNAMELEN]; int kill_ok; - - kill_ok = extract_int(argbuf,0); + + kill_ok = extract_int(argbuf, 0); if (!(CC->logged_in)) { - cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN); + cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); return; - } - + } if (!is_room_aide()) { cprintf("%d Higher access required.\n", - ERROR+HIGHER_ACCESS_REQUIRED); + ERROR + HIGHER_ACCESS_REQUIRED); return; - } - + } if (is_noneditable(&CC->quickroom)) { - cprintf("%d Can't edit this room.\n",ERROR+NOT_HERE); + cprintf("%d Can't edit this room.\n", ERROR + NOT_HERE); return; - } - + } if (kill_ok) { strcpy(deleted_room_name, CC->quickroom.QRname); delete_room(&CC->quickroom); /* Do the dirty work */ - usergoto(BASEROOM, 0); /* Return to the Lobby */ + usergoto(BASEROOM, 0); /* Return to the Lobby */ /* tell the world what we did */ - sprintf(aaa,"%s> killed by %s", + sprintf(aaa, "%s> killed by %s", deleted_room_name, CC->curr_user); aide_message(aaa); cprintf("%d '%s' deleted.\n", OK, deleted_room_name); - } - else { - cprintf("%d ok to delete.\n",OK); - } + } else { + cprintf("%d ok to delete.\n", OK); } +} /* * Internal code to create a new room (returns room flags) * - * Room types: 0=public, 1=guessname, 2=passworded, 3=inv-only, 4=mailbox + * Room types: 0=public, 1=guessname, 2=passworded, 3=inv-only, 4=mailbox */ unsigned create_room(char *new_room_name, - int new_room_type, - char *new_room_pass, - int new_room_floor) { + int new_room_type, + char *new_room_pass, + int new_room_floor) +{ struct quickroom qrbuf; struct floor flbuf; struct visit vbuf; - if (getroom(&qrbuf, new_room_name)==0) return(0); /* already exists */ + if (getroom(&qrbuf, new_room_name) == 0) + return (0); /* already exists */ memset(&qrbuf, 0, sizeof(struct quickroom)); - strncpy(qrbuf.QRname,new_room_name,ROOMNAMELEN); - strncpy(qrbuf.QRpasswd,new_room_pass,9); + strncpy(qrbuf.QRname, new_room_name, ROOMNAMELEN); + strncpy(qrbuf.QRpasswd, new_room_pass, 9); qrbuf.QRflags = QR_INUSE; qrbuf.QRnumber = get_new_room_number(); - if (new_room_type > 0) qrbuf.QRflags=(qrbuf.QRflags|QR_PRIVATE); - if (new_room_type == 1) qrbuf.QRflags=(qrbuf.QRflags|QR_GUESSNAME); - if (new_room_type == 2) qrbuf.QRflags=(qrbuf.QRflags|QR_PASSWORDED); - if (new_room_type == 4) qrbuf.QRflags=(qrbuf.QRflags|QR_MAILBOX); + if (new_room_type > 0) + qrbuf.QRflags = (qrbuf.QRflags | QR_PRIVATE); + if (new_room_type == 1) + qrbuf.QRflags = (qrbuf.QRflags | QR_GUESSNAME); + if (new_room_type == 2) + qrbuf.QRflags = (qrbuf.QRflags | QR_PASSWORDED); + if (new_room_type == 4) + qrbuf.QRflags = (qrbuf.QRflags | QR_MAILBOX); /* If the room is private, and the system administrator has elected * to automatically grant room aide privileges, do so now; otherwise, * set the room aide to undefined. */ - if ( (qrbuf.QRflags & QR_PRIVATE) && (CREATAIDE==1) ) { - qrbuf.QRroomaide=CC->usersupp.usernum; - } - else { + if ((qrbuf.QRflags & QR_PRIVATE) && (CREATAIDE == 1)) { + qrbuf.QRroomaide = CC->usersupp.usernum; + } else { qrbuf.QRroomaide = (-1L); - } + } qrbuf.QRhighest = 0L; /* No messages in this room yet */ time(&qrbuf.QRgen); /* Use a timestamp as the generation number */ qrbuf.QRfloor = new_room_floor; /* save what we just did... */ - putroom(&qrbuf, qrbuf.QRname); + putroom(&qrbuf); /* bump the reference count on whatever floor the room is on */ - lgetfloor(&flbuf,(int)qrbuf.QRfloor); + lgetfloor(&flbuf, (int) qrbuf.QRfloor); flbuf.f_ref_count = flbuf.f_ref_count + 1; - lputfloor(&flbuf,(int)qrbuf.QRfloor); + lputfloor(&flbuf, (int) qrbuf.QRfloor); /* be sure not to kick the creator out of the room! */ - lgetuser(&CC->usersupp,CC->curr_user); + lgetuser(&CC->usersupp, CC->curr_user); CtdlGetRelationship(&vbuf, &CC->usersupp, &qrbuf); vbuf.v_flags = vbuf.v_flags & ~V_FORGET & ~V_LOCKOUT; vbuf.v_flags = vbuf.v_flags | V_ACCESS; CtdlSetRelationship(&vbuf, &CC->usersupp, &qrbuf); - lputuser(&CC->usersupp,CC->curr_user); + lputuser(&CC->usersupp, CC->curr_user); /* resume our happy day */ - return(qrbuf.QRflags); - } + return (qrbuf.QRflags); +} /* @@ -1346,168 +1373,177 @@ void cmd_cre8(char *args) struct quickroom qrbuf; struct floor flbuf; - cre8_ok = extract_int(args,0); - extract(new_room_name,args,1); - new_room_name[ROOMNAMELEN-1] = 0; - new_room_type = extract_int(args,2); - extract(new_room_pass,args,3); + cre8_ok = extract_int(args, 0); + extract(new_room_name, args, 1); + new_room_name[ROOMNAMELEN - 1] = 0; + new_room_type = extract_int(args, 2); + extract(new_room_pass, args, 3); new_room_pass[9] = 0; new_room_floor = 0; - if ((strlen(new_room_name)==0) && (cre8_ok==1)) { - cprintf("%d Invalid room name.\n",ERROR); + if ((strlen(new_room_name) == 0) && (cre8_ok == 1)) { + cprintf("%d Invalid room name.\n", ERROR); return; - } + } if (!strcasecmp(new_room_name, MAILROOM)) { cprintf("%d '%s' already exists.\n", - ERROR+ALREADY_EXISTS, new_room_name); + ERROR + ALREADY_EXISTS, new_room_name); return; - } + } - if (num_parms(args)>=5) { - getfloor(&flbuf,extract_int(args,4)); + if (num_parms(args) >= 5) { + getfloor(&flbuf, extract_int(args, 4)); if ((flbuf.f_flags & F_INUSE) == 0) { cprintf("%d Invalid floor number.\n", - ERROR+INVALID_FLOOR_OPERATION); + ERROR + INVALID_FLOOR_OPERATION); return; - } - else { - new_room_floor = extract_int(args,4); - } + } else { + new_room_floor = extract_int(args, 4); } + } if (!(CC->logged_in)) { - cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN); + cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); return; - } + } if (CC->usersupp.axlevel < config.c_createax) { cprintf("%d You need higher access to create rooms.\n", - ERROR+HIGHER_ACCESS_REQUIRED); + ERROR + HIGHER_ACCESS_REQUIRED); return; - } + } - if ((strlen(new_room_name)==0) && (cre8_ok==0)) { + if ((strlen(new_room_name) == 0) && (cre8_ok == 0)) { cprintf("%d Ok to create rooms.\n", OK); return; - } + } - /* Check to make sure the requested room name doesn't already exist */ - if (getroom(&qrbuf, new_room_name)==0) { - cprintf("%d '%s' already exists.\n", - ERROR+ALREADY_EXISTS, qrbuf.QRname); + if ((new_room_type < 0) || (new_room_type > 4)) { + cprintf("%d Invalid room type.\n", ERROR); return; - } + } + + /* If the user is requesting a personal room, set up the room + * name accordingly (prepend the user number) + */ + if (new_room_type == 4) { + sprintf(aaa, "%010ld.%s", + CC->usersupp.usernum, new_room_name); + strcpy(new_room_name, aaa); + } - if ((new_room_type < 0) || (new_room_type > 3)) { - cprintf("%d Invalid room type.\n",ERROR); + /* Check to make sure the requested room name doesn't already exist */ + if (getroom(&qrbuf, new_room_name) == 0) { + cprintf("%d '%s' already exists.\n", + ERROR + ALREADY_EXISTS, qrbuf.QRname); return; - } + } if (cre8_ok == 0) { cprintf("%d OK to create '%s'\n", OK, new_room_name); return; - } + } newflags = create_room(new_room_name, - new_room_type,new_room_pass,new_room_floor); + new_room_type, new_room_pass, new_room_floor); /* post a message in Aide> describing the new room */ - strncpy(aaa,new_room_name,255); - strcat(aaa,"> created by "); - strcat(aaa,CC->usersupp.fullname); - if (newflags&QR_PRIVATE) strcat(aaa," [private]"); - if (newflags&QR_GUESSNAME) strcat(aaa,"[guessname] "); - if (newflags&QR_PASSWORDED) { - strcat(aaa,"\n Password: "); - strcat(aaa,new_room_pass); - } - aide_message(aaa); - - cprintf("%d '%s' has been created.\n",OK,qrbuf.QRname); + strncpy(aaa, new_room_name, 255); + strcat(aaa, "> created by "); + strcat(aaa, CC->usersupp.fullname); + if (newflags & QR_MAILBOX) + strcat(aaa, " [personal]"); + else if (newflags & QR_PRIVATE) + strcat(aaa, " [private]"); + if (newflags & QR_GUESSNAME) + strcat(aaa, "[guessname] "); + if (newflags & QR_PASSWORDED) { + strcat(aaa, "\n Password: "); + strcat(aaa, new_room_pass); } + aide_message(aaa); + + cprintf("%d '%s' has been created.\n", OK, qrbuf.QRname); +} void cmd_einf(char *ok) -{ /* enter info file for current room */ +{ /* enter info file for current room */ FILE *fp; char infofilename[256]; char buf[256]; if (!(CC->logged_in)) { - cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN); + cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); return; - } - + } if (!is_room_aide()) { cprintf("%d Higher access required.\n", - ERROR+HIGHER_ACCESS_REQUIRED); + ERROR + HIGHER_ACCESS_REQUIRED); return; - } - - if (atoi(ok)==0) { - cprintf("%d Ok.\n",OK); + } + if (atoi(ok) == 0) { + cprintf("%d Ok.\n", OK); return; - } - + } assoc_file_name(infofilename, &CC->quickroom, "info"); lprintf(9, "opening\n"); fp = fopen(infofilename, "w"); lprintf(9, "checking\n"); if (fp == NULL) { cprintf("%d Cannot open %s: %s\n", - ERROR+INTERNAL_ERROR, infofilename, strerror(errno)); + ERROR + INTERNAL_ERROR, infofilename, strerror(errno)); return; - } - + } cprintf("%d Send info...\n", SEND_LISTING); do { client_gets(buf); - if (strcmp(buf,"000")) fprintf(fp,"%s\n",buf); - } while(strcmp(buf,"000")); + if (strcmp(buf, "000")) + fprintf(fp, "%s\n", buf); + } while (strcmp(buf, "000")); fclose(fp); /* now update the room index so people will see our new info */ - lgetroom(&CC->quickroom,CC->quickroom.QRname); /* lock so no one steps on us */ + lgetroom(&CC->quickroom, CC->quickroom.QRname); /* lock so no one steps on us */ CC->quickroom.QRinfo = CC->quickroom.QRhighest + 1L; - lputroom(&CC->quickroom,CC->quickroom.QRname); - } + lputroom(&CC->quickroom); +} /* * cmd_lflr() - List all known floors */ -void cmd_lflr(void) { +void cmd_lflr(void) +{ int a; struct floor flbuf; if (!(CC->logged_in)) { - cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN); + cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); return; - } - + } /* if (getuser(&CC->usersupp,CC->curr_user)) { - cprintf("%d Can't locate user!\n",ERROR+INTERNAL_ERROR); - return; - } - */ + cprintf("%d Can't locate user!\n",ERROR+INTERNAL_ERROR); + return; + } + */ + + cprintf("%d Known floors:\n", LISTING_FOLLOWS); - cprintf("%d Known floors:\n",LISTING_FOLLOWS); - - for (a=0; alogged_in)) { - cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN); + cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); return; - } - - if (CC->usersupp.axlevel<6) { + } + if (CC->usersupp.axlevel < 6) { cprintf("%d You need higher access to create rooms.\n", - ERROR+HIGHER_ACCESS_REQUIRED); + ERROR + HIGHER_ACCESS_REQUIRED); return; - } - - for (a=0; alogged_in)) { - cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN); + cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); return; - } - - if (CC->usersupp.axlevel<6) { + } + if (CC->usersupp.axlevel < 6) { cprintf("%d You need higher access to delete floors.\n", - ERROR+HIGHER_ACCESS_REQUIRED); + ERROR + HIGHER_ACCESS_REQUIRED); return; - } - - lgetfloor(&flbuf,floor_to_delete); + } + lgetfloor(&flbuf, floor_to_delete); - delete_ok = 1; + delete_ok = 1; if ((flbuf.f_flags & F_INUSE) == 0) { cprintf("%d Floor %d not in use.\n", - ERROR+INVALID_FLOOR_OPERATION,floor_to_delete); + ERROR + INVALID_FLOOR_OPERATION, floor_to_delete); delete_ok = 0; - } - - else { + } else { if (flbuf.f_ref_count != 0) { cprintf("%d Cannot delete; floor contains %d rooms.\n", - ERROR+INVALID_FLOOR_OPERATION, + ERROR + INVALID_FLOOR_OPERATION, flbuf.f_ref_count); delete_ok = 0; - } - - else { + } else { if (kflr_ok == 1) { - cprintf("%d Ok\n",OK); - } - else { - cprintf("%d Ok to delete...\n",OK); - } - + cprintf("%d Ok\n", OK); + } else { + cprintf("%d Ok to delete...\n", OK); } } - if ( (delete_ok == 1) && (kflr_ok == 1) ) flbuf.f_flags = 0; - lputfloor(&flbuf,floor_to_delete); } + if ((delete_ok == 1) && (kflr_ok == 1)) + flbuf.f_flags = 0; + lputfloor(&flbuf, floor_to_delete); +} + /* * edit a floor */ @@ -1645,31 +1671,29 @@ void cmd_eflr(char *argbuf) np = num_parms(argbuf); if (np < 1) { - cprintf("%d Usage error.\n",ERROR); + cprintf("%d Usage error.\n", ERROR); return; - } - + } if (!(CC->logged_in)) { - cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN); + cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); return; - } - - if (CC->usersupp.axlevel<6) { + } + if (CC->usersupp.axlevel < 6) { cprintf("%d You need higher access to edit floors.\n", - ERROR+HIGHER_ACCESS_REQUIRED); + ERROR + HIGHER_ACCESS_REQUIRED); return; - } - - floor_num = extract_int(argbuf,0); - lgetfloor(&flbuf,floor_num); - if ( (flbuf.f_flags & F_INUSE) == 0) { - lputfloor(&flbuf,floor_num); + } + floor_num = extract_int(argbuf, 0); + lgetfloor(&flbuf, floor_num); + if ((flbuf.f_flags & F_INUSE) == 0) { + lputfloor(&flbuf, floor_num); cprintf("%d Floor %d is not in use.\n", - ERROR+INVALID_FLOOR_OPERATION,floor_num); + ERROR + INVALID_FLOOR_OPERATION, floor_num); return; - } - if (np >= 2) extract(flbuf.f_name,argbuf,1); - lputfloor(&flbuf,floor_num); - - cprintf("%d Ok\n",OK); } + if (np >= 2) + extract(flbuf.f_name, argbuf, 1); + lputfloor(&flbuf, floor_num); + + cprintf("%d Ok\n", OK); +} diff --git a/citadel/room_ops.h b/citadel/room_ops.h index 22788e728..12431fbd9 100644 --- a/citadel/room_ops.h +++ b/citadel/room_ops.h @@ -6,9 +6,11 @@ int has_newmsgs (struct quickroom *roombuf, int roomnum, int is_zapped (struct quickroom *roombuf, int roomnum, struct usersupp *userbuf); int getroom(struct quickroom *qrbuf, char *room_name); -void putroom(struct quickroom *qrbuf, char *room_name); +void b_putroom(struct quickroom *qrbuf, char *room_name); +void putroom(struct quickroom *); +void b_deleteroom(char *); int lgetroom(struct quickroom *qrbuf, char *room_name); -void lputroom(struct quickroom *qrbuf, char *room_name); +void lputroom(struct quickroom *qrbuf); void getfloor (struct floor *flbuf, int floor_num); void lgetfloor (struct floor *flbuf, int floor_num); void putfloor (struct floor *flbuf, int floor_num); diff --git a/citadel/rooms.c b/citadel/rooms.c index 214d2de04..93dbce84f 100644 --- a/citadel/rooms.c +++ b/citadel/rooms.c @@ -863,17 +863,18 @@ void entroom(void) { IFNEXPERT formout("roomaccess"); do { - printf("Help\n<1>Public room\n<2>Guess-name room\n"); - printf("<3>Passworded room\n<4>Invitation-only room\n"); + printf( "Help\n<1>Public room\n<2>Guess-name room\n" + "<3>Passworded room\n<4>Invitation-only room\n" + "<5>Personal room\n"); printf("Enter room type: "); do { b=inkey(); - } while (((b<'1')||(b>'4')) && (b!='?')); + } while (((b<'1')||(b>'5')) && (b!='?')); if (b=='?') { printf("?\n"); formout("roomaccess"); } - } while ((b<'1')||(b>'4')); + } while ((b<'1')||(b>'5')); b=b-48; printf("%d\n",b); new_room_type = b - 1; @@ -889,6 +890,7 @@ void entroom(void) { if (b==2) printf(" guess-name room."); if (b==3) printf(" passworded room, password: %s",new_room_pass); if (b==4) printf("n invitation-only room."); + if (b==5) printf(" personal room."); printf("\nInstall it? (y/n) : "); a=yesno(); if (a==0) return; diff --git a/citadel/serv_upgrade.c b/citadel/serv_upgrade.c index 536dca5e8..155f213b1 100644 --- a/citadel/serv_upgrade.c +++ b/citadel/serv_upgrade.c @@ -200,7 +200,7 @@ void imp_rooms(void) { lprintf(9, "(%d messages)\n", num_msgs); if (qr.QRflags&QR_INUSE) { - putroom(&qr, qr.QRname); + putroom(&qr); } if (num_msgs > 0) {