X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Frwho%2Fserv_rwho.c;h=3dca6c4365de8c0f55f98eab2ff4cea81d97b74a;hb=d22b477ff51efd7f8c74672f6c115ebd9f411c45;hp=06f439081aa4c69fb9b631233bc5ca2f3b995d35;hpb=ed4640564bf29690308619d12a11e7ad47d30bde;p=citadel.git diff --git a/citadel/modules/rwho/serv_rwho.c b/citadel/modules/rwho/serv_rwho.c index 06f439081..3dca6c436 100644 --- a/citadel/modules/rwho/serv_rwho.c +++ b/citadel/modules/rwho/serv_rwho.c @@ -1,9 +1,17 @@ /* - * $Id$ - * * This module implements server commands related to the display and * manipulation of the "Who's online" list. * + * Copyright (c) 1987-2019 by the citadel.org team + * + * This program is open source software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * */ #include "sysdep.h" @@ -37,39 +45,59 @@ #include "support.h" #include "config.h" #include "control.h" -#include "room_ops.h" #include "user_ops.h" -#include "policy.h" #include "database.h" #include "msgbase.h" #include "ctdl_module.h" +/* Don't show the names of private rooms unless the viewing + * user also knows the rooms. + */ +void GenerateRoomDisplay(char *real_room, + CitContext *viewed, + CitContext *viewer) { + + int ra; + + strcpy(real_room, viewed->room.QRname); + if (viewed->room.QRflags & QR_MAILBOX) { + strcpy(real_room, &real_room[11]); + } + if (viewed->room.QRflags & QR_PRIVATE) { + CtdlRoomAccess(&viewed->room, &viewer->user, &ra, NULL); + if ( (ra & UA_KNOWN) == 0) { + strcpy(real_room, " "); + } + } + + if (viewed->cs_flags & CS_CHAT) { + while (strlen(real_room) < 14) { + strcat(real_room, " "); + } + strcpy(&real_room[14], ""); + } + +} + + /* * display who's online */ void cmd_rwho(char *argbuf) { - struct CitContext *cptr; struct CitContext *nptr; int nContexts, i; int spoofed = 0; - int user_spoofed = 0; - int room_spoofed = 0; - int host_spoofed = 0; int aide; - char un[40]; - char real_room[ROOMNAMELEN], room[ROOMNAMELEN]; - char host[64], flags[5]; + char room[ROOMNAMELEN]; + char flags[5]; /* So that we don't keep the context list locked for a long time * we create a copy of it first */ - - - nContexts = num_sessions; - nptr = malloc(sizeof(struct CitContext) * nContexts); + nptr = CtdlGetContextArray(&nContexts) ; if (!nptr) { /* Couldn't malloc so we have to bail but stick to the protocol */ @@ -77,58 +105,29 @@ void cmd_rwho(char *argbuf) { cprintf("000\n"); return; } - begin_critical_section(S_SESSION_TABLE); - for (cptr = ContextList, i=0; cptr != NULL && i < nContexts; cptr = cptr->next, i++) - { - memcpy(&nptr[i], cptr, sizeof (struct CitContext)); - } - end_critical_section (S_SESSION_TABLE); - aide = CC->user.axlevel >= 6; + aide = ( (CC->user.axlevel >= AxAideU) || (CC->internal_pgm) ) ; cprintf("%d%c \n", LISTING_FOLLOWS, CtdlCheckExpress() ); - for (i=0; ifake_roomname, newroomname, - sizeof(CC->fake_roomname) ); - } - else { - safestrncpy(CC->fake_roomname, "", sizeof CC->fake_roomname); - } - cprintf("%d OK\n", CIT_OK); -} - -/* - * Masquerade hostname - */ -void cmd_hchg(char *argbuf) -{ - char newhostname[64]; - - extract_token(newhostname, argbuf, 0, '|', sizeof newhostname); - if (!IsEmptyStr(newhostname)) { - safestrncpy(CC->fake_hostname, newhostname, - sizeof(CC->fake_hostname) ); - } - else { - safestrncpy(CC->fake_hostname, "", sizeof CC->fake_hostname); - } - cprintf("%d OK\n", CIT_OK); -} - - -/* - * Masquerade username (aides only) - */ -void cmd_uchg(char *argbuf) -{ - - char newusername[USERNAME_SIZE]; - - extract_token(newusername, argbuf, 0, '|', sizeof newusername); - - if (CtdlAccessCheck(ac_aide)) return; - - if (!IsEmptyStr(newusername)) { - CC->cs_flags &= ~CS_STEALTH; - memset(CC->fake_username, 0, 32); - if (strncasecmp(newusername, CC->curr_user, - strlen(CC->curr_user))) - safestrncpy(CC->fake_username, newusername, - sizeof(CC->fake_username)); - } - else { - CC->fake_username[0] = '\0'; - CC->cs_flags |= CS_STEALTH; - } - cprintf("%d\n",CIT_OK); -} - - - - /* * enter or exit "stealth mode" */ @@ -281,12 +195,11 @@ CTDL_MODULE_INIT(rwho) if(!threading) { CtdlRegisterProtoHook(cmd_rwho, "RWHO", "Display who is online"); - CtdlRegisterProtoHook(cmd_hchg, "HCHG", "Masquerade hostname"); - CtdlRegisterProtoHook(cmd_rchg, "RCHG", "Masquerade roomname"); - CtdlRegisterProtoHook(cmd_uchg, "UCHG", "Masquerade username"); CtdlRegisterProtoHook(cmd_stel, "STEL", "Enter/exit stealth mode"); + //CtdlRegisterSessionHook(dead_io_check, EVT_TIMER, PRIO_QUEUE + 50); + } - /* return our Subversion id for the Log */ - return "$Id$"; + /* return our module name for the log */ + return "rwho"; }