X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fcontrol.c;h=b81526cf1dc855078349afb8ed70a4803bb0388d;hb=a9d212c452ddc4c041c6b1ca30670dde9a321a07;hp=1779633faff7bd13976d23803509977498ecdc58;hpb=56d69e5d8434e98835a2582c59b771ba69475431;p=citadel.git diff --git a/citadel/control.c b/citadel/control.c index 1779633fa..b81526cf1 100644 --- a/citadel/control.c +++ b/citadel/control.c @@ -1,21 +1,15 @@ /* * This module handles states which are global to the entire server. * - * Copyright (c) 1987-2010 by the citadel.org team + * Copyright (c) 1987-2012 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. - * - * 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" @@ -77,8 +71,8 @@ void lock_control(void) { #if defined(LOCK_EX) && defined(LOCK_NB) if (flock(fileno(control_fp), (LOCK_EX | LOCK_NB))) { - CtdlLogPrintf(CTDL_EMERG, "citserver: unable to lock %s.\n", file_citadel_control); - CtdlLogPrintf(CTDL_EMERG, "Is another citserver already running?\n"); + syslog(LOG_EMERG, "citserver: unable to lock %s.\n", file_citadel_control); + syslog(LOG_EMERG, "Is another citserver already running?\n"); exit(CTDLEXIT_CONTROL); } #endif @@ -127,9 +121,9 @@ void control_find_highest(struct ctdlroom *qrbuf, void *data) } cdb_free(cdbfr); if (room_fixed) - CtdlLogPrintf(CTDL_INFO, "Control record checking....Fixed room counter\n"); + syslog(LOG_INFO, "Control record checking....Fixed room counter\n"); if (message_fixed) - CtdlLogPrintf(CTDL_INFO, "Control record checking....Fixed message count\n"); + syslog(LOG_INFO, "Control record checking....Fixed message count\n"); return; } @@ -148,7 +142,7 @@ void control_find_user (struct ctdluser *EachUser, void *out_data) user_fixed = 1; } if(user_fixed) - CtdlLogPrintf(CTDL_INFO, "Control record checking....Fixed user count\n"); + syslog(LOG_INFO, "Control record checking....Fixed user count\n"); } @@ -176,30 +170,52 @@ void get_control(void) if (control_fp != NULL) { lock_control(); rv = fchown(fileno(control_fp), config.c_ctdluid, -1); + if (rv == -1) + syslog(LOG_EMERG, "Failed to adjust ownership of: %s [%s]\n", + file_citadel_control, strerror(errno)); rv = fchmod(fileno(control_fp), S_IRUSR|S_IWUSR); + if (rv == -1) + syslog(LOG_EMERG, "Failed to adjust accessrights of: %s [%s]\n", + file_citadel_control, strerror(errno)); } } if (control_fp == NULL) { control_fp = fopen(file_citadel_control, "wb+"); if (control_fp != NULL) { lock_control(); + memset(&CitControl, 0, sizeof(struct CitControl)); + rv = fchown(fileno(control_fp), config.c_ctdluid, -1); + if (rv == -1) + syslog(LOG_EMERG, "Failed to adjust ownership of: %s [%s]\n", + file_citadel_control, strerror(errno)); + rv = fchmod(fileno(control_fp), S_IRUSR|S_IWUSR); - memset(&CitControl, 0, sizeof(struct CitControl)); + if (rv == -1) + syslog(LOG_EMERG, "Failed to adjust accessrights of: %s [%s]\n", + file_citadel_control, strerror(errno)); rv = fwrite(&CitControl, sizeof(struct CitControl), 1, control_fp); + if (rv == -1) + syslog(LOG_EMERG, "Failed to write: %s [%s]\n", + file_citadel_control, strerror(errno)); rewind(control_fp); } } if (control_fp == NULL) { - CtdlLogPrintf(CTDL_ALERT, "ERROR opening %s: %s\n", file_citadel_control, strerror(errno)); + syslog(LOG_ALERT, "ERROR opening %s: %s\n", file_citadel_control, strerror(errno)); return; } rewind(control_fp); rv = fread(&CitControl, sizeof(struct CitControl), 1, control_fp); + if (rv == -1) + syslog(LOG_EMERG, "Failed to read Controlfile: %s [%s]\n", + file_citadel_control, strerror(errno)); already_have_control = 1; rv = chown(file_citadel_control, config.c_ctdluid, (-1)); - + if (rv == -1) + syslog(LOG_EMERG, "Failed to adjust ownership of: %s [%s]\n", + file_citadel_control, strerror(errno)); } /* @@ -212,6 +228,9 @@ void put_control(void) if (control_fp != NULL) { rewind(control_fp); rv = fwrite(&CitControl, sizeof(struct CitControl), 1, control_fp); + if (rv == -1) + syslog(LOG_EMERG, "Failed to write: %s [%s]\n", + file_citadel_control, strerror(errno)); fflush(control_fp); } } @@ -222,7 +241,7 @@ void put_control(void) */ void check_control(void) { - CtdlLogPrintf(CTDL_INFO, "Checking/re-building control record\n"); + syslog(LOG_INFO, "Checking/re-building control record\n"); get_control(); // Find highest room number and message number. CtdlForEachRoom(control_find_highest, NULL); @@ -310,7 +329,7 @@ long get_new_room_number(void) * Get or set global configuration options * * IF YOU ADD OR CHANGE FIELDS HERE, YOU *MUST* DOCUMENT YOUR CHANGES AT: - * http://www.citadel.org/doku.php/documentation:appproto:system_config + * http://www.citadel.org/doku.php?id=documentation:applicationprotocol * */ void cmd_conf(char *argbuf) @@ -402,6 +421,8 @@ void cmd_conf(char *argbuf) cprintf("%ld\n", config.c_pop3_fastest); cprintf("%d\n", config.c_spam_flag_only); cprintf("%d\n", config.c_guest_logins); + cprintf("%d\n", config.c_port_number); + cprintf("%d\n", config.c_ctdluid); cprintf("000\n"); } @@ -661,13 +682,20 @@ void cmd_conf(char *argbuf) case 67: config.c_guest_logins = atoi(buf); break; + case 68: + config.c_port_number = atoi(buf); + break; + case 69: + config.c_ctdluid = atoi(buf); + break; } ++a; } put_config(); snprintf(buf, sizeof buf, - "The global system configuration has been edited by %s.\n", - CC->curr_user); + "The global system configuration has been edited by %s.\n", + (CC->logged_in ? CC->curr_user : "an administrator") + ); CtdlAideMessage(buf,"Citadel Configuration Manager Message"); if (!IsEmptyStr(config.c_logpages)) @@ -686,9 +714,12 @@ void cmd_conf(char *argbuf) extract_token(confname, argbuf, 1, '|', sizeof confname); confptr = CtdlGetSysConfig(confname); if (confptr != NULL) { + long len; + + len = strlen(confptr); cprintf("%d %s\n", LISTING_FOLLOWS, confname); - client_write(confptr, strlen(confptr)); - if (confptr[strlen(confptr) - 1] != 10) + client_write(confptr, len); + if ((len > 0) && (confptr[len - 1] != 10)) client_write("\n", 1); cprintf("000\n"); free(confptr);