void cmd_gnet(char *argbuf) {
- char filename[SIZ];
+ char filename[PATH_MAX];
char buf[SIZ];
FILE *fp;
void cmd_snet(char *argbuf) {
- char tempfilename[SIZ];
- char filename[SIZ];
+ char tempfilename[PATH_MAX];
+ char filename[PATH_MAX];
char buf[SIZ];
FILE *fp, *newfp;
msg->cm_fields['F'] = strdup(buf);
msg->cm_fields['R'] = strdup(buf);
+ /* Set the 'List-ID' header */
+ msg->cm_fields['L'] = malloc(1024);
+ snprintf(msg->cm_fields['L'], 1024,
+ "%s <%ld.list-id.%s>",
+ CC->room.QRname,
+ CC->room.QRnumber,
+ config.c_fqdn
+ );
+
/*
* Go fetch the contents of the digest
*/
/* Now submit the message */
valid = validate_recipients(recps, NULL, 0);
free(recps);
- CtdlSubmitMsg(msg, valid, NULL);
+ CtdlSubmitMsg(msg, valid, NULL, 0);
CtdlFreeMessage(msg);
free_recipients(valid);
}
/* Now submit the message */
valid = validate_recipients(recps, NULL, 0);
free(recps);
- CtdlSubmitMsg(msg, valid, NULL);
+ CtdlSubmitMsg(msg, valid, NULL, 0);
free_recipients(valid);
/* Do not call CtdlFreeMessage(msg) here; the caller will free it. */
}
maplist *mptr;
struct ser_ret sermsg;
FILE *fp;
- char filename[SIZ];
+ char filename[PATH_MAX];
char buf[SIZ];
int bang = 0;
int send = 1;
msg = CtdlFetchMessage(msgnum, 1);
if (msg != NULL) {
+ /* Set the 'List-ID' header */
+ if (msg->cm_fields['L'] != NULL) {
+ free(msg->cm_fields['L']);
+ }
+ msg->cm_fields['L'] = malloc(1024);
+ snprintf(msg->cm_fields['L'], 1024,
+ "%s <%ld.list-id.%s>",
+ CC->room.QRname,
+ CC->room.QRnumber,
+ config.c_fqdn
+ );
+
/* Prepend "[List name]" to the subject */
if (msg->cm_fields['U'] == NULL) {
msg->cm_fields['U'] = strdup("(no subject)");
CC->redirect_alloc = SIZ;
safestrncpy(CC->preferred_formats, "text/plain", sizeof CC->preferred_formats);
- CtdlOutputPreLoadedMsg(msg, MT_CITADEL, HEADERS_NONE, 0, 0);
+ CtdlOutputPreLoadedMsg(msg, MT_CITADEL, HEADERS_NONE, 0, 0, 0);
striplt(CC->redirect_buffer);
fprintf(sc->digestfp, "\n%s\n", CC->redirect_buffer);
msg->cm_fields['R'] = strdup(nptr->name);
valid = validate_recipients(nptr->name, NULL, 0);
- CtdlSubmitMsg(msg, valid, "");
+ CtdlSubmitMsg(msg, valid, "", 0);
free_recipients(valid);
}
*/
void network_spoolout_room(char *room_to_spool) {
char buf[SIZ];
- char filename[SIZ];
+ char filename[PATH_MAX];
SpoolControl *sc;
int i;
}
assoc_file_name(filename, sizeof filename, &CC->room, ctdl_netcfg_dir);
-
- CtdlLogPrintf(CTDL_INFO, "Networking started for <%s>\n", CC->room.QRname);
begin_critical_section(S_NETCONFIGS);
/* Only do net processing for rooms that have netconfigs */
-
if (!read_spoolcontrol_file(&sc, filename))
{
end_critical_section(S_NETCONFIGS);
return;
}
+ CtdlLogPrintf(CTDL_INFO, "Networking started for <%s>\n", CC->room.QRname);
/* If there are digest recipients, we have to build a digest */
if (sc->digestrecps != NULL) {
char sc_type[256];
char sc_node[256];
char sc_room[256];
- char filename[256];
+ char filename[PATH_MAX];
FILE *fp;
/* Grab the configuration line we're looking for */
if ( (valid == NULL) && IsEmptyStr(force_room) ) {
strcpy(force_room, config.c_aideroom);
}
- CtdlSubmitMsg(msg, valid, force_room);
+ CtdlSubmitMsg(msg, valid, force_room, 0);
/* Clean up */
if (valid != NULL) free_recipients(valid);
char target_room[ROOMNAMELEN];
struct ser_ret sermsg;
char *oldpath = NULL;
- char filename[SIZ];
+ char filename[PATH_MAX];
FILE *fp;
char nexthop[SIZ];
unsigned char firstbyte;
/* save the message into a room */
if (PerformNetprocHooks(msg, target_room) == 0) {
msg->cm_flags = CM_SKIP_HOOKS;
- CtdlSubmitMsg(msg, recp, target_room);
+ CtdlSubmitMsg(msg, recp, target_room, 0);
}
CtdlFreeMessage(msg);
free_recipients(recp);
DIR *dp;
struct dirent *d;
struct stat statbuf;
- char filename[256];
+ char filename[PATH_MAX];
static time_t last_spoolin_mtime = 0L;
/*
void network_purge_spoolout(void) {
DIR *dp;
struct dirent *d;
- char filename[256];
+ char filename[PATH_MAX];
char nexthop[256];
int i;
void network_poll_node(char *node, char *secret, char *host, char *port) {
int sock;
char buf[SIZ];
+ char err_buf[SIZ];
+ char connected_to[SIZ];
if (network_talking_to(node, NTT_CHECK)) return;
network_talking_to(node, NTT_ADD);
if (sock_getln(sock, buf, sizeof buf) < 0) goto bail;
CtdlLogPrintf(CTDL_DEBUG, ">%s\n", buf);
+ /* Check that the remote is who we think it is and warn the Aide if not */
+ extract_token (connected_to, buf, 1, ' ', sizeof connected_to);
+ if (strcmp(connected_to, node))
+ {
+ snprintf (err_buf, sizeof(err_buf), "Connected to node \"%s\" but I was expecting to connect to node \"%s\".", connected_to, node);
+ aide_message(err_buf, "IGNet Networking error.");
+ }
+
/* Identify ourselves */
snprintf(buf, sizeof buf, "NETP %s|%s", config.c_nodename, secret);
CtdlLogPrintf(CTDL_DEBUG, "<%s\n", buf);
struct CitContext networkerCC;
/* Give the networker its own private CitContext */
- memset(&networkerCC, 0, sizeof(struct CitContext));
- networkerCC.internal_pgm = 1;
- networkerCC.cs_pid = 0;
- pthread_setspecific(MyConKey, (void *)&networkerCC );
+ CtdlFillSystemContext(&networkerCC, "network");
+ citthread_setspecific(MyConKey, (void *)&networkerCC );
/*
* Run the full set of processing tasks no more frequently
char secret[256];
char nexthop[256];
+ char err_buf[SIZ];
/* Authenticate */
extract_token(node, cmdbuf, 0, '|', sizeof node);
v = is_valid_node(nexthop, secret, node);
if (v != 0) {
- CtdlLogPrintf(CTDL_WARNING, "Unknown node <%s>\n", node);
+ snprintf (err_buf, sizeof(err_buf), "Unknown node <%s>\n", node);
+ CtdlLogPrintf(CTDL_WARNING, err_buf);
cprintf("%d authentication failed\n",
ERROR + PASSWORD_REQUIRED);
+ aide_message(err_buf, "IGNet Networking.");
return;
}
if (strcasecmp(pass, secret)) {
- CtdlLogPrintf(CTDL_WARNING, "Bad password for network node <%s>", node);
+ snprintf (err_buf, sizeof(err_buf), "Bad password for network node <%s>", node);
+ CtdlLogPrintf(CTDL_WARNING, err_buf);
cprintf("%d authentication failed\n", ERROR + PASSWORD_REQUIRED);
+ aide_message(err_buf, "IGNet Networking.");
return;
}