X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Frwho%2Fserv_rwho.c;h=3dca6c4365de8c0f55f98eab2ff4cea81d97b74a;hb=d22b477ff51efd7f8c74672f6c115ebd9f411c45;hp=3d60b1a5a4be4e341961eb587cd5f05b1dc174a9;hpb=8c47559cb5ae97ec0fa35660ee16fd61a9451c72;p=citadel.git diff --git a/citadel/modules/rwho/serv_rwho.c b/citadel/modules/rwho/serv_rwho.c index 3d60b1a5a..3dca6c436 100644 --- a/citadel/modules/rwho/serv_rwho.c +++ b/citadel/modules/rwho/serv_rwho.c @@ -1,24 +1,17 @@ /* - * $Id$ - * * This module implements server commands related to the display and * manipulation of the "Who's online" list. * - * Copyright (c) 1987-2009 by the citadel.org team + * Copyright (c) 1987-2019 by the citadel.org team * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. + * 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. + * 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. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "sysdep.h" @@ -52,15 +45,43 @@ #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 @@ -69,19 +90,13 @@ void cmd_rwho(char *argbuf) { 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 */ - - nptr = CtdlGetContextArray(&nContexts) ; if (!nptr) { @@ -91,51 +106,28 @@ void cmd_rwho(char *argbuf) { return; } - 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" */ @@ -288,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"; }