X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fnetconfig.c;h=e59337f2740cb4b96f0d99ce2834fa88a384b1c6;hb=83f6f54ff172d43c9ab0fab87b10280d0c99ccec;hp=239796981111497f49a17efc57b359b698a6585e;hpb=321595f551d9e009f54b564b8459a293fe431fc4;p=citadel.git diff --git a/citadel/netconfig.c b/citadel/netconfig.c index 239796981..e59337f27 100644 --- a/citadel/netconfig.c +++ b/citadel/netconfig.c @@ -1,8 +1,7 @@ /* - * This module handles shared rooms, inter-Citadel mail, and outbound - * mailing list processing. + * This module handles loading, saving, and parsing of room network configurations. * - * Copyright (c) 2000-2016 by the citadel.org team + * Copyright (c) 2000-2017 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. @@ -79,6 +78,7 @@ const CfgLineType *GetCfgTypeByStr(const char *Key, long len) } } + const CfgLineType *GetCfgTypeByEnum(RoomNetCfg eCfg, HashPos *It) { const char *Key; @@ -96,6 +96,7 @@ const CfgLineType *GetCfgTypeByEnum(RoomNetCfg eCfg, HashPos *It) return NULL; } + void ParseGeneric(const CfgLineType *ThisOne, StrBuf *Line, const char *LinePos, OneRoomNetCfg *OneRNCfg) { RoomNetCfgLine *nptr; @@ -122,6 +123,7 @@ void ParseGeneric(const CfgLineType *ThisOne, StrBuf *Line, const char *LinePos, OneRNCfg->NetConfigs[ThisOne->C] = nptr; } + void SerializeGeneric(const CfgLineType *ThisOne, StrBuf *OutputBuffer, OneRoomNetCfg *OneRNCfg, RoomNetCfgLine *data) { int i; @@ -137,6 +139,7 @@ void SerializeGeneric(const CfgLineType *ThisOne, StrBuf *OutputBuffer, OneRoomN StrBufAppendBufPlain(OutputBuffer, HKEY("\n"), 0); } + void DeleteGenericCfgLine(const CfgLineType *ThisOne, RoomNetCfgLine **data) { int i; @@ -153,6 +156,7 @@ void DeleteGenericCfgLine(const CfgLineType *ThisOne, RoomNetCfgLine **data) *data = NULL; } + RoomNetCfgLine *DuplicateOneGenericCfgLine(const RoomNetCfgLine *data) { int i; @@ -182,7 +186,6 @@ void netcfg_keyname(char *keybuf, long roomnum) } - /* * Given a room number and a textual netconfig, convert to base64 and write to the configdb */ @@ -202,14 +205,13 @@ void write_netconfig_to_configdb(long roomnum, const char *raw_netconfig) if ((enc_len > 1) && (enc[enc_len-2] == 13)) enc[enc_len-2] = 0; if ((enc_len > 0) && (enc[enc_len-1] == 10)) enc[enc_len-1] = 0; enc[enc_len] = 0; - syslog(LOG_DEBUG, "Writing key '%s' (length=%d)", keyname, enc_len); + syslog(LOG_DEBUG, "netconfig: writing key '%s' (length=%d)", keyname, enc_len); CtdlSetConfigStr(keyname, enc); free(enc); } } - /* * Given a room number, attempt to load the netconfig configdb entry for that room. * If it returns NULL, there is no netconfig. @@ -332,7 +334,6 @@ void SaveRoomNetConfigFile(OneRoomNetCfg *OneRNCfg, long roomnum) } - void AddRoomCfgLine(OneRoomNetCfg *OneRNCfg, struct ctdlroom *qrbuf, RoomNetCfg LineType, RoomNetCfgLine *Line) { RoomNetCfgLine **pLine; @@ -434,7 +435,11 @@ void cmd_gnet(char *argbuf) char *c = LoadRoomNetConfigFile(CC->room.QRnumber); if (c) { - cprintf("%s\n", c); + int len = strlen(c); + client_write(c, len); // Can't use cprintf() here, it has a limit of 1024 bytes + if (c[len] != '\n') { + client_write(HKEY("\n")); + } free(c); } cprintf("000\n"); @@ -481,6 +486,7 @@ void DeleteCtdlNodeConf(void *vNode) free(Node); } + CtdlNodeConf *NewNode(StrBuf *SerializedNode) { const char *Pos = NULL; @@ -581,11 +587,7 @@ int is_recipient(OneRoomNetCfg *RNCfg, const char *Name) } - -int CtdlNetconfigCheckRoomaccess( - char *errmsgbuf, - size_t n, - const char* RemoteIdentifier) +int CtdlNetconfigCheckRoomaccess(char *errmsgbuf, size_t n, const char* RemoteIdentifier) { OneRoomNetCfg *RNCfg; int found; @@ -620,7 +622,6 @@ int CtdlNetconfigCheckRoomaccess( } - /* * cmd_netp() - authenticate to the server as another Citadel node polling * for network traffic @@ -650,7 +651,7 @@ void cmd_netp(char *cmdbuf) "An unknown Citadel server called \"%s\" attempted to connect from %s [%s].\n", node, CCC->cs_host, CCC->cs_addr ); - syslog(LOG_WARNING, "%s", err_buf); + syslog(LOG_WARNING, "netconfig: %s", err_buf); cprintf("%d authentication failed\n", ERROR + PASSWORD_REQUIRED); CtdlAideMessage(err_buf, "IGNet Networking"); DeleteHash(&working_ignetcfg); @@ -664,7 +665,7 @@ void cmd_netp(char *cmdbuf) "A Citadel server at %s [%s] failed to authenticate as network node \"%s\".\n", CCC->cs_host, CCC->cs_addr, node ); - syslog(LOG_WARNING, "%s", err_buf); + syslog(LOG_WARNING, "netconfig: %s", err_buf); cprintf("%d authentication failed\n", ERROR + PASSWORD_REQUIRED); CtdlAideMessage(err_buf, "IGNet Networking"); @@ -674,7 +675,7 @@ void cmd_netp(char *cmdbuf) } if (CtdlNetworkTalkingTo(node, nodelen, NTT_CHECK)) { - syslog(LOG_WARNING, "Duplicate session for network node <%s>", node); + syslog(LOG_WARNING, "netconfig: duplicate session for network node <%s>", node); cprintf("%d Already talking to %s right now\n", ERROR + RESOURCE_BUSY, node); DeleteHash(&working_ignetcfg); FreeStrBuf(&NodeStr); @@ -682,7 +683,7 @@ void cmd_netp(char *cmdbuf) } nodelen = safestrncpy(CCC->net_node, node, sizeof CCC->net_node); CtdlNetworkTalkingTo(CCC->net_node, nodelen, NTT_ADD); - syslog(LOG_NOTICE, "Network node <%s> logged in from %s [%s]", + syslog(LOG_INFO, "netconfig: network node <%s> logged in from %s [%s]", CCC->net_node, CCC->cs_host, CCC->cs_addr ); cprintf("%d authenticated as network node '%s'\n", CIT_OK, CCC->net_node); @@ -703,6 +704,7 @@ void DeleteNetMap(void *vNetMap) free(TheNetMap); } + CtdlNetMap *NewNetMap(StrBuf *SerializedNetMap) { const char *Pos = NULL; @@ -724,6 +726,7 @@ CtdlNetMap *NewNetMap(StrBuf *SerializedNetMap) return NM; } + HashList* CtdlReadNetworkMap(void) { const char *LinePos; @@ -757,6 +760,7 @@ HashList* CtdlReadNetworkMap(void) return Hash; } + StrBuf *CtdlSerializeNetworkMap(HashList *Map) { void *vMap; @@ -841,7 +845,7 @@ int CtdlIsValidNode(const StrBuf **nexthop, * First try the neighbor nodes */ if (GetCount(IgnetCfg) == 0) { - syslog(LOG_INFO, "IgnetCfg is empty!"); + syslog(LOG_INFO, "netconfig: IgnetCfg is empty!"); if (nexthop != NULL) { *nexthop = NULL; } @@ -873,7 +877,7 @@ int CtdlIsValidNode(const StrBuf **nexthop, /* * If we get to this point, the supplied node name is bogus. */ - syslog(LOG_ERR, "Invalid node name <%s>", ChrPtr(node)); + syslog(LOG_ERR, "netconfig: invalid node name <%s>", ChrPtr(node)); return(-1); } @@ -894,7 +898,7 @@ void convert_legacy_netcfg_files(void) dh = opendir(ctdl_netcfg_dir); if (!dh) return; - syslog(LOG_INFO, "Legacy netconfig files exist - converting them!"); + syslog(LOG_INFO, "netconfig: legacy netconfig files exist - converting them!"); while (dit = readdir(dh), dit != NULL) { // yes, we use the non-reentrant version; we're not in threaded mode yet roomnum = atol(dit->d_name); @@ -928,7 +932,6 @@ void convert_legacy_netcfg_files(void) } - /* * Module entry point */