X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fctdlproto%2Fserv_session.c;h=fa8186635381a62e51bccfd064165f57d6c4ee66;hb=50ff39d933b7178377b3a67f8edc31ffa42ffd28;hp=8fbda5ca78a6135a70027d2a3e3471924242e573;hpb=a725962fd73b9d0049d7012d812e3cf7a02d927a;p=citadel.git diff --git a/citadel/modules/ctdlproto/serv_session.c b/citadel/modules/ctdlproto/serv_session.c index 8fbda5ca7..fa8186635 100644 --- a/citadel/modules/ctdlproto/serv_session.c +++ b/citadel/modules/ctdlproto/serv_session.c @@ -1,7 +1,7 @@ /* * Server functions which perform operations on user objects. * - * Copyright (c) 1987-2011 by the citadel.org team + * 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. @@ -12,54 +12,13 @@ * GNU General Public License for more details. */ -#include "sysdep.h" -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#ifdef HAVE_SYS_STAT_H -#include -#endif - -#if TIME_WITH_SYS_TIME -# include -# include -#else -# if HAVE_SYS_TIME_H -# include -# else -# include -# endif -#endif - -#include -#include #include -#include "auth.h" -#include "citadel.h" -#include "server.h" -#include "database.h" -#include "sysdep_decls.h" -#include "support.h" -#include "room_ops.h" -#include "file_ops.h" -#include "control.h" -#include "msgbase.h" -#include "config.h" #include "citserver.h" -#include "citadel_dirs.h" -#include "genstamp.h" -#include "threads.h" -#include "citadel_ldap.h" -#include "context.h" +#include "svn_revision.h" #include "ctdl_module.h" +#include "config.h" + void cmd_noop(char *argbuf) { @@ -72,6 +31,7 @@ void cmd_qnop(char *argbuf) /* do nothing, this command returns no response */ } + /* * Set or unset asynchronous protocol mode */ @@ -87,22 +47,21 @@ void cmd_asyn(char *argbuf) } - /* - * cmd_info() - tell the client about this server + * cmd_info() - Identify this server and its capabilities to the client */ void cmd_info(char *cmdbuf) { cprintf("%d Server info:\n", LISTING_FOLLOWS); cprintf("%d\n", CC->cs_pid); - cprintf("%s\n", config.c_nodename); - cprintf("%s\n", config.c_humannode); - cprintf("%s\n", config.c_fqdn); + cprintf("%s\n", CtdlGetConfigStr("c_nodename")); + cprintf("%s\n", CtdlGetConfigStr("c_humannode")); + cprintf("%s\n", CtdlGetConfigStr("c_fqdn")); cprintf("%s\n", CITADEL); cprintf("%d\n", REV_LEVEL); - cprintf("%s\n", config.c_site_location); - cprintf("%s\n", config.c_sysadm); + cprintf("%s\n", CtdlGetConfigStr("c_site_location")); + cprintf("%s\n", CtdlGetConfigStr("c_sysadm")); cprintf("%d\n", SERVER_TYPE); - cprintf("%s\n", config.c_moreprompt); + cprintf("%s\n", CtdlGetConfigStr("c_moreprompt")); cprintf("1\n"); /* 1 = yes, this system supports floors */ cprintf("1\n"); /* 1 = we support the extended paging options */ cprintf("\n"); /* nonce no longer supported */ @@ -114,38 +73,36 @@ void cmd_info(char *cmdbuf) { cprintf("0\n"); /* 1 = no, this server is not LDAP-enabled */ #endif - if ((config.c_auth_mode == AUTHMODE_NATIVE) && - (config.c_disable_newu == 0)) + if ((CtdlGetConfigInt("c_auth_mode") == AUTHMODE_NATIVE) && (CtdlGetConfigInt("c_disable_newu") == 0)) { - cprintf("%d\n", config.c_disable_newu); + cprintf("%d\n", CtdlGetConfigInt("c_disable_newu")); } else { cprintf("1\n"); /* "create new user" does not work with non-native auth modes */ } - cprintf("%s\n", config.c_default_cal_zone); - - /* thread load averages -- temporarily disabled during refactoring of this code */ - cprintf("0\n"); /* load average */ - cprintf("0\n"); /* worker average */ - cprintf("0\n"); /* thread count */ + cprintf("%s\n", CtdlGetConfigStr("c_default_cal_zone")); + cprintf("0\n"); /* load average (no longer used) */ + cprintf("0\n"); /* worker average (no longer used) */ + cprintf("0\n"); /* thread count (no longer used) */ cprintf("1\n"); /* yes, Sieve mail filtering is supported */ - cprintf("%d\n", config.c_enable_fulltext); + + cprintf("%d\n", CtdlGetConfigInt("c_enable_fulltext")); cprintf("%s\n", svn_revision()); - if (config.c_auth_mode == AUTHMODE_NATIVE) { + if (CtdlGetConfigInt("c_auth_mode") == AUTHMODE_NATIVE) { cprintf("%d\n", openid_level_supported); /* OpenID is enabled when using native auth */ } else { cprintf("0\n"); /* OpenID is disabled when using non-native auth */ } - cprintf("%d\n", config.c_guest_logins); - + cprintf("%d\n", CtdlGetConfigInt("c_guest_logins")); cprintf("000\n"); } + /* * echo */ @@ -154,11 +111,12 @@ void cmd_echo(char *etext) cprintf("%d %s\n", CIT_OK, etext); } + /* * get the paginator prompt */ void cmd_more(char *argbuf) { - cprintf("%d %s\n", CIT_OK, config.c_moreprompt); + cprintf("%d %s\n", CIT_OK, CtdlGetConfigStr("c_moreprompt")); } @@ -183,7 +141,7 @@ void cmd_iden(char *argbuf) rev_level = extract_int(argbuf,2); extract_token(desc, argbuf, 3, '|', sizeof desc); - safestrncpy(from_host, config.c_fqdn, sizeof from_host); + safestrncpy(from_host, CtdlGetConfigStr("c_fqdn"), sizeof from_host); from_host[sizeof from_host - 1] = 0; if (num_parms(argbuf)>=5) extract_token(from_host, argbuf, 4, '|', sizeof from_host); @@ -193,14 +151,14 @@ void cmd_iden(char *argbuf) safestrncpy(CC->cs_clientname, desc, sizeof CC->cs_clientname); CC->cs_clientname[31] = 0; - /* For local sockets and public clients, trust the hostname supplied by the client */ - if ( (CC->is_local_socket) || (is_public_client()) ) { + /* For local sockets, allow the client to supply the user's origin address */ + if (CC->is_local_socket) { safestrncpy(CC->cs_host, from_host, sizeof CC->cs_host); CC->cs_host[sizeof CC->cs_host - 1] = 0; CC->cs_addr[0] = 0; } - syslog(LOG_NOTICE, "Client %d/%d/%01d.%02d (%s) from %s\n", + syslog(LOG_NOTICE, "session: client %d/%d/%01d.%02d (%s) from %s", dev_code, cli_code, (rev_level / 100), @@ -211,17 +169,14 @@ void cmd_iden(char *argbuf) cprintf("%d Ok\n",CIT_OK); } + /* * Terminate another running session */ void cmd_term(char *cmdbuf) { - int session_num; - int terminated = 0; - - session_num = extract_int(cmdbuf, 0); - - terminated = CtdlTerminateOtherSession(session_num); + int session_num = extract_int(cmdbuf, 0); + int terminated = CtdlTerminateOtherSession(session_num); if (terminated < 0) { cprintf("%d You can't kill your own session.\n", ERROR + ILLEGAL_VALUE); @@ -233,8 +188,7 @@ void cmd_term(char *cmdbuf) cprintf("%d Session terminated.\n", CIT_OK); } else { - cprintf("%d You are not allowed to do that.\n", - ERROR + HIGHER_ACCESS_REQUIRED); + cprintf("%d You are not allowed to do that.\n", ERROR + HIGHER_ACCESS_REQUIRED); } } else { @@ -245,23 +199,21 @@ void cmd_term(char *cmdbuf) void cmd_time(char *argbuf) { - time_t tv; - struct tm tmp; - - tv = time(NULL); - localtime_r(&tv, &tmp); - - /* timezone and daylight global variables are not portable. */ + time_t tv; + struct tm tmp; + + tv = time(NULL); + localtime_r(&tv, &tmp); + + /* timezone and daylight global variables are not portable. */ #ifdef HAVE_STRUCT_TM_TM_GMTOFF - cprintf("%d %ld|%ld|%d|%ld\n", CIT_OK, (long)tv, tmp.tm_gmtoff, tmp.tm_isdst, server_startup_time); + cprintf("%d %ld|%ld|%d|%ld\n", CIT_OK, (long)tv, tmp.tm_gmtoff, tmp.tm_isdst, server_startup_time); #else - cprintf("%d %ld|%ld|%d|%ld\n", CIT_OK, (long)tv, timezone, tmp.tm_isdst, server_startup_time); + cprintf("%d %ld|%ld|%d|%ld\n", CIT_OK, (long)tv, timezone, tmp.tm_isdst, server_startup_time); #endif } - - /*****************************************************************************/ /* MODULE INITIALIZATION STUFF */ /*****************************************************************************/ @@ -271,14 +223,12 @@ CTDL_MODULE_INIT(serv_session) if (!threading) { CtdlRegisterProtoHook(cmd_noop, "NOOP", "no operation"); CtdlRegisterProtoHook(cmd_qnop, "QNOP", "no operation with no response"); -; CtdlRegisterProtoHook(cmd_asyn, "ASYN", "enable asynchronous server responses"); CtdlRegisterProtoHook(cmd_info, "INFO", "fetch server capabilities and configuration"); CtdlRegisterProtoHook(cmd_echo, "ECHO", "echo text back to the client"); CtdlRegisterProtoHook(cmd_more, "MORE", "fetch the paginator prompt"); CtdlRegisterProtoHook(cmd_iden, "IDEN", "identify the client software and location"); CtdlRegisterProtoHook(cmd_term, "TERM", "terminate another running session"); - CtdlRegisterProtoHook(cmd_time, "TIME", "fetch the date and time from the server"); } /* return our id for the Log */