X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fctdlproto%2Fserv_session.c;h=b1b6d42350f87d7590614a04f91f747c84caec81;hb=cb5275786332fa50897200781d3100449b5f71dd;hp=6c3914654475069572c3a981e96931c3ddd3ed6a;hpb=4db4fc48793f3680c5defd28ea32c97044a2b569;p=citadel.git diff --git a/citadel/modules/ctdlproto/serv_session.c b/citadel/modules/ctdlproto/serv_session.c index 6c3914654..b1b6d4235 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. @@ -14,10 +14,11 @@ #include #include - #include "citserver.h" #include "svn_revision.h" #include "ctdl_module.h" +#include "config.h" + void cmd_noop(char *argbuf) { @@ -30,6 +31,7 @@ void cmd_qnop(char *argbuf) /* do nothing, this command returns no response */ } + /* * Set or unset asynchronous protocol mode */ @@ -45,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 */ @@ -72,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 */ @@ -112,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")); } @@ -125,7 +125,6 @@ void cmd_more(char *argbuf) { */ void cmd_iden(char *argbuf) { - CitContext *CCC = MyContext(); int dev_code; int cli_code; int rev_level; @@ -142,45 +141,42 @@ 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); - CCC->cs_clientdev = dev_code; - CCC->cs_clienttyp = cli_code; - CCC->cs_clientver = rev_level; - safestrncpy(CCC->cs_clientname, desc, sizeof CCC->cs_clientname); - CCC->cs_clientname[31] = 0; - - /* For local sockets and public clients, trust the hostname supplied by the client */ - if ( (CCC->is_local_socket) || (CtdlIsPublicClient()) ) { - safestrncpy(CCC->cs_host, from_host, sizeof CCC->cs_host); - CCC->cs_host[sizeof CCC->cs_host - 1] = 0; - CCC->cs_addr[0] = 0; + CC->cs_clientdev = dev_code; + CC->cs_clienttyp = cli_code; + CC->cs_clientver = rev_level; + safestrncpy(CC->cs_clientname, desc, sizeof CC->cs_clientname); + CC->cs_clientname[31] = 0; + + /* For local sockets, allow the client to supply the user's origin address */ + if ((CC->is_local_client) || (!IsEmptyStr(CC->cs_addr) && (!strcmp(CC->cs_addr, "127.0.0.1")) || (!strcmp(CC->cs_addr, "::1")))) { + 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), (rev_level % 100), desc, - CCC->cs_host + CC->cs_host ); 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); @@ -192,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 { @@ -204,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 */ /*****************************************************************************/ @@ -230,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 */