/*
* 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 open source 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.
+ * 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"
#include "user_ops.h"
#include "database.h"
#include "threads.h"
-
-#ifndef HAVE_SNPRINTF
-#include "snprintf.h"
-#endif
-
#include "ctdl_module.h"
struct CitControl CitControl;
* 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)
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");
}
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))
}
}
+typedef struct __ConfType {
+ ConstStr Name;
+ long Type;
+}ConfType;
+
+ConfType CfgNames[] = {
+ { {HKEY("localhost") }, 0},
+ { {HKEY("directory") }, 0},
+ { {HKEY("smarthost") }, 2},
+ { {HKEY("fallbackhost") }, 2},
+ { {HKEY("rbl") }, 3},
+ { {HKEY("spamassassin") }, 3},
+ { {HKEY("masqdomain") }, 1},
+ { {HKEY("clamav") }, 3},
+ { {HKEY("notify") }, 3},
+ { {NULL, 0}, 0}
+};
+
+HashList *CfgNameHash = NULL;
+void cmd_gvdn(char *argbuf)
+{
+ const ConfType *pCfg;
+ char *confptr;
+ long min = atol(argbuf);
+ const char *Pos = NULL;
+ const char *PPos = NULL;
+ const char *HKey;
+ long HKLen;
+ StrBuf *Line;
+ StrBuf *Config;
+ StrBuf *Cfg;
+ StrBuf *CfgToken;
+ HashList *List;
+ HashPos *It;
+ void *vptr;
+
+ List = NewHash(1, NULL);
+ Cfg = NewStrBufPlain(config.c_fqdn, -1);
+ Put(List, SKEY(Cfg), Cfg, HFreeStrBuf);
+ Cfg = NULL;
+
+ confptr = CtdlGetSysConfig(INTERNETCFG);
+ Config = NewStrBufPlain(confptr, -1);
+ free(confptr);
+
+ Line = NewStrBufPlain(NULL, StrLength(Config));
+ CfgToken = NewStrBufPlain(NULL, StrLength(Config));
+ while (StrBufSipLine(Line, Config, &Pos))
+ {
+ if (Cfg == NULL)
+ Cfg = NewStrBufPlain(NULL, StrLength(Line));
+ PPos = NULL;
+ StrBufExtract_NextToken(Cfg, Line, &PPos, '|');
+ StrBufExtract_NextToken(CfgToken, Line, &PPos, '|');
+ if (GetHash(CfgNameHash, SKEY(CfgToken), &vptr) &&
+ (vptr != NULL))
+ {
+ pCfg = (ConfType *) vptr;
+ if (pCfg->Type <= min)
+ {
+ Put(List, SKEY(Cfg), Cfg, HFreeStrBuf);
+ Cfg = NULL;
+ }
+ }
+ }
+
+ cprintf("%d Valid Domains\n", LISTING_FOLLOWS);
+ It = GetNewHashPos(List, 1);
+ while (GetNextHashPos(List, It, &HKLen, &HKey, &vptr))
+ {
+ cputbuf(vptr);
+ cprintf("\n");
+ }
+ cprintf("000\n");
+
+ DeleteHashPos(&It);
+ DeleteHash(&List);
+ FreeStrBuf(&Cfg);
+ FreeStrBuf(&Line);
+ FreeStrBuf(&CfgToken);
+ FreeStrBuf(&Config);
+}
/*****************************************************************************/
/* MODULE INITIALIZATION STUFF */
/*****************************************************************************/
-
+void control_cleanup(void)
+{
+ DeleteHash(&CfgNameHash);
+}
CTDL_MODULE_INIT(control)
{
if (!threading) {
+ int i;
+
+ CfgNameHash = NewHash(1, NULL);
+ for (i = 0; CfgNames[i].Name.Key != NULL; i++)
+ Put(CfgNameHash, CKEY(CfgNames[i].Name), &CfgNames[i], reference_free_handler);
+
+ CtdlRegisterProtoHook(cmd_gvdn, "GVDN", "get valid domain names");
CtdlRegisterProtoHook(cmd_conf, "CONF", "get/set system configuration");
+ CtdlRegisterCleanupHook(control_cleanup);
+
}
/* return our id for the Log */
return "control";