Skip to content
Snippets Groups Projects
Commit 24831379 authored by rswindell's avatar rswindell
Browse files

Address many (but not all) Coverity reported "issues".

parent 1e5bbbdf
No related branches found
No related tags found
No related merge requests found
......@@ -302,20 +302,20 @@ echostat_msg_t parse_echostat_msg(str_list_t ini, const char* section, const cha
return msg;
}
echostat_msg_t fidomsg_to_echostat_msg(fmsghdr_t fmsghdr, fidoaddr_t* pkt_orig, const char* fmsgbuf)
echostat_msg_t fidomsg_to_echostat_msg(fmsghdr_t* hdr, fidoaddr_t* pkt_orig, const char* fmsgbuf)
{
char* p;
echostat_msg_t msg = {{0}};
SAFECOPY(msg.to , fmsghdr.to);
SAFECOPY(msg.from , fmsghdr.from);
SAFECOPY(msg.subj , fmsghdr.subj);
msg.msg_time = fmsgtime(fmsghdr.time);
SAFECOPY(msg.to , hdr->to);
SAFECOPY(msg.from , hdr->from);
SAFECOPY(msg.subj , hdr->subj);
msg.msg_time = fmsgtime(hdr->time);
msg.localtime = time(NULL);
msg.origaddr.zone = fmsghdr.origzone;
msg.origaddr.net = fmsghdr.orignet;
msg.origaddr.node = fmsghdr.orignode;
msg.origaddr.point = fmsghdr.origpoint;
msg.origaddr.zone = hdr->origzone;
msg.origaddr.net = hdr->orignet;
msg.origaddr.node = hdr->orignode;
msg.origaddr.point = hdr->origpoint;
if(pkt_orig != NULL)
msg.pkt_orig = *pkt_orig;
if((p = parse_control_line(fmsgbuf, "MSGID:")) != NULL) {
......@@ -575,89 +575,89 @@ char *mycmdstr(scfg_t* cfg, const char *instr, const char *fpath, const char *fs
cmd[j]=0;
switch(toupper(instr[i])) {
case 'F': /* File path */
strcat(cmd,fpath);
SAFECAT(cmd,fpath);
break;
case 'G': /* Temp directory */
if(cfg->temp_dir[0]!='\\'
&& cfg->temp_dir[0]!='/'
&& cfg->temp_dir[1]!=':') {
strcpy(str,cfg->node_dir);
strcat(str,cfg->temp_dir);
SAFECOPY(str,cfg->node_dir);
SAFECAT(str,cfg->temp_dir);
if(FULLPATH(str2,str,40))
strcpy(str,str2);
backslash(str);
strcat(cmd,str);}
SAFECAT(cmd,str);}
else
strcat(cmd,cfg->temp_dir);
SAFECAT(cmd,cfg->temp_dir);
break;
case 'J':
if(cfg->data_dir[0]!='\\'
&& cfg->data_dir[0]!='/'
&& cfg->data_dir[1]!=':') {
strcpy(str,cfg->node_dir);
strcat(str,cfg->data_dir);
SAFECOPY(str,cfg->node_dir);
SAFECAT(str,cfg->data_dir);
if(FULLPATH(str2,str,40))
strcpy(str,str2);
SAFECOPY(str,str2);
backslash(str);
strcat(cmd,str);
SAFECAT(cmd,str);
}
else
strcat(cmd,cfg->data_dir);
SAFECAT(cmd,cfg->data_dir);
break;
case 'K':
if(cfg->ctrl_dir[0]!='\\'
&& cfg->ctrl_dir[0]!='/'
&& cfg->ctrl_dir[1]!=':') {
strcpy(str,cfg->node_dir);
strcat(str,cfg->ctrl_dir);
SAFECOPY(str,cfg->node_dir);
SAFECAT(str,cfg->ctrl_dir);
if(FULLPATH(str2,str,40))
strcpy(str,str2);
SAFECOPY(str,str2);
backslash(str);
strcat(cmd,str);
SAFECAT(cmd,str);
}
else
strcat(cmd,cfg->ctrl_dir);
SAFECAT(cmd,cfg->ctrl_dir);
break;
case 'N': /* Node Directory (same as SBBSNODE environment var) */
strcat(cmd,cfg->node_dir);
SAFECAT(cmd,cfg->node_dir);
break;
case 'O': /* SysOp */
strcat(cmd,cfg->sys_op);
SAFECAT(cmd,cfg->sys_op);
break;
case 'Q': /* QWK ID */
strcat(cmd,cfg->sys_id);
SAFECAT(cmd,cfg->sys_id);
break;
case 'S': /* File Spec */
strcat(cmd,fspec);
SAFECAT(cmd,fspec);
break;
case '!': /* EXEC Directory */
strcat(cmd,cfg->exec_dir);
SAFECAT(cmd,cfg->exec_dir);
break;
case '@': /* EXEC Directory for DOS/OS2/Win32, blank for Unix */
#ifndef __unix__
strcat(cmd,cfg->exec_dir);
SAFECAT(cmd,cfg->exec_dir);
#endif
break;
case '#': /* Node number (same as SBBSNNUM environment var) */
sprintf(str,"%d",cfg->node_num);
strcat(cmd,str);
SAFECAT(cmd,str);
break;
case '*':
sprintf(str,"%03d",cfg->node_num);
strcat(cmd,str);
SAFECAT(cmd,str);
break;
case '%': /* %% for percent sign */
strcat(cmd,"%");
SAFECAT(cmd,"%");
break;
case '.': /* .exe for DOS/OS2/Win32, blank for Unix */
#ifndef __unix__
strcat(cmd,".exe");
SAFECAT(cmd,".exe");
#endif
break;
case '?': /* Platform */
strcpy(str,PLATFORM_DESC);
SAFECOPY(str,PLATFORM_DESC);
strlwr(str);
strcat(cmd,str);
SAFECAT(cmd,str);
break;
default: /* unknown specification */
lprintf(LOG_ERR,"ERROR Checking Command Line '%s'",instr);
......@@ -733,7 +733,10 @@ int get_outbound(fidoaddr_t dest, char* outbound, size_t maxlen, bool fileboxes)
const char* get_current_outbound(fidoaddr_t dest, bool fileboxes)
{
static char outbound[MAX_PATH+1];
get_outbound(dest, outbound, sizeof(outbound)-1, fileboxes);
if(get_outbound(dest, outbound, sizeof(outbound)-1, fileboxes) != 0) {
lprintf(LOG_ERR, "Error creating outbound directory");
return NULL;
}
return outbound;
}
......@@ -746,6 +749,8 @@ bool bso_lock_node(fidoaddr_t dest)
return true;
outbound = get_current_outbound(dest, /* fileboxes: */false);
if(outbound == NULL)
return false;
if(dest.point)
SAFEPRINTF2(fname,"%s%08x.bsy",outbound,dest.point);
......@@ -793,6 +798,8 @@ const char* bso_flo_filename(fidoaddr_t dest, uint16_t attr)
}
}
outbound = get_current_outbound(dest, /* fileboxes: */false);
if(outbound == NULL)
return NULL;
if(dest.point)
SAFEPRINTF3(filename,"%s%08x.%clo",outbound,dest.point,ch);
......@@ -823,6 +830,9 @@ int write_flofile(const char *infile, fidoaddr_t dest, bool bundle, bool use_out
return 1;
flo_filename = bso_flo_filename(dest, attr);
if(flo_filename == NULL)
return -2;
SAFECOPY(attachment, infile);
if(!fexistcase(attachment)) { /* just in-case it's the wrong case for a Unix file system */
lprintf(LOG_ERR, "ERROR line %u, attachment file not found: %s", __LINE__, attachment);
......@@ -1101,7 +1111,10 @@ int create_netmail(const char *to, const smbmsg_t* msg, const char *subject, con
nodecfg=findnodecfg(&cfg, dest, /* skip exact match: */2);
}
MKDIR(scfg.netmail_dir);
if(!isdir(scfg.netmail_dir) && MKDIR(scfg.netmail_dir) != 0) {
lprintf(LOG_ERR, "Error %u (%s) line %d creating directory: %s", errno, strerror(errno), __LINE__, scfg.netmail_dir);
return -2;
}
for(i=startmsg;i;i++) {
sprintf(fname,"%s%u.msg",scfg.netmail_dir,i);
if(!fexistcase(fname))
......@@ -1151,7 +1164,7 @@ int create_netmail(const char *to, const smbmsg_t* msg, const char *subject, con
SAFECOPY(hdr.from,from);
SAFECOPY(hdr.subj,subject);
fwrite(&hdr,sizeof(fmsghdr_t),1,fp);
(void)fwrite(&hdr,sizeof(fmsghdr_t),1,fp);
fwrite_intl_control_line(fp, &hdr);
if(!fidoctrl_line_exists(msg, "TZUTC:")) {
......@@ -1221,7 +1234,9 @@ int file_to_netmail(FILE* infile, const char* title, fidoaddr_t dest, const char
long l,m,len;
int netmails_created = 0;
fseek(infile, 0, SEEK_END);
if(fseek(infile, 0, SEEK_END) != 0)
return 0;
l=len=ftell(infile);
if(len>8192L)
len=8192L;
......@@ -1237,10 +1252,10 @@ int file_to_netmail(FILE* infile, const char* title, fidoaddr_t dest, const char
if(*p) {
*p=0;
p++;
fseek(infile,-1L,SEEK_CUR);
(void)fseek(infile,-1L,SEEK_CUR);
while(*p) { /* Seek back to end of last line */
p++;
fseek(infile,-1L,SEEK_CUR);
(void)fseek(infile,-1L,SEEK_CUR);
}
}
}
......@@ -1401,11 +1416,11 @@ void netmail_arealist(enum arealist_type type, fidoaddr_t addr, const char* to)
str_list_t area_list;
if(type == AREALIST_ALL)
strcpy(title,"List of Available Areas");
SAFECOPY(title,"List of Available Areas");
else if(type == AREALIST_CONNECTED)
strcpy(title,"List of Connected Areas");
SAFECOPY(title,"List of Connected Areas");
else
strcpy(title,"List of Unlinked Areas");
SAFECOPY(title,"List of Unlinked Areas");
if((area_list=strListInit()) == NULL) {
lprintf(LOG_ERR,"ERROR line %d couldn't allocate string list",__LINE__);
......@@ -2287,7 +2302,8 @@ int unpack(const char *infile, const char* outdir)
}
for(u=0;u<cfg.arcdefs;u++) {
str[0]=0;
fseek(stream,cfg.arcdef[u].byteloc,SEEK_SET);
if(fseek(stream,cfg.arcdef[u].byteloc,SEEK_SET) != 0)
continue;
for(j=0;j<strlen(cfg.arcdef[u].hexid)/2;j++) {
ch=fgetc(stream);
if(ch==EOF) {
......@@ -2434,7 +2450,7 @@ int attachment(const char *bundlename, fidoaddr_t dest, enum attachment_mode mod
globfree(&g);
while(!feof(stream)) {
if(!fread(&attach,sizeof(attach_t),1,stream))
if(fread(&attach,1,sizeof(attach_t),stream) != sizeof(attach_t))
break;
TERMINATE(attach.filename);
if(!fexistcase(attach.filename))
......@@ -2472,7 +2488,7 @@ int attachment(const char *bundlename, fidoaddr_t dest, enum attachment_mode mod
memcpy(&attach.dest,&dest,sizeof(fidoaddr_t));
SAFECOPY(attach.filename,bundlename);
/* TODO: Write of unpacked struct */
fwrite(&attach,sizeof(attach_t),1,stream);
(void)fwrite(&attach,sizeof(attach_t),1,stream);
fclose(stream);
#endif
return(0);
......@@ -2528,6 +2544,8 @@ bool pack_bundle(const char *tmp_pkt, fidoaddr_t orig, fidoaddr_t dest)
}
}
outbound = get_current_outbound(dest, /* fileboxes: */true);
if(outbound == NULL)
return false;
/* Try to use the same filename as the temp packet, if we can */
SAFEPRINTF2(new_pkt, "%s%s", outbound, getfname(tmp_pkt));
......@@ -2761,18 +2779,22 @@ int mv(const char *insrc, const char *indest, bool copy)
setvbuf(outp,NULL,_IOFBF,8*1024);
length=filelength(ind);
l=0L;
int result = 0;
while(l<length) {
if(l+chunk>length)
chunk=length-l;
fread(buf,chunk,1,inp);
fwrite(buf,chunk,1,outp);
l+=chunk;
if(fread(buf,1,chunk,inp) != chunk) {
result = -2;
break;
}
(void)fwrite(buf,chunk,1,outp);
l+=chunk;
}
fclose(inp);
fclose(outp);
if(!copy)
if(result == 0 && !copy)
delfile(src, __LINE__);
return(0);
return result;
}
/****************************************************************************/
......@@ -2835,7 +2857,11 @@ ulong loadmsgs(smb_t* smb, post_t** post, ulong ptr)
return(0);
}
fseek(smb->sid_fp,0L,SEEK_SET);
if(fseek(smb->sid_fp,0L,SEEK_SET) != 0) {
lprintf(LOG_ERR, "ERROR %u (%s) line %d rewinding index of %s"
,errno, strerror(errno), __LINE__, smb->file);
return 0;
}
for(l=0;l<total && !feof(smb->sid_fp); ) {
if(smb_fread(smb, &idx,sizeof(idx),smb->sid_fp) != sizeof(idx))
break;
......@@ -3018,11 +3044,11 @@ ushort matchname(const char *inname)
lprintf(LOG_ERR,"ERROR locking USER.DAT record #%ld",total_users);
continue;
}
lseek(userdat,(long)((long)(total_users)*U_LEN)+U_ALIAS,SEEK_SET);
read(userdat,alias,LEN_ALIAS);
read(userdat,name,LEN_NAME);
lseek(userdat,(long)(((long)total_users)*U_LEN)+U_MISC,SEEK_SET);
read(userdat,misc,8);
(void)lseek(userdat,(long)((long)(total_users)*U_LEN)+U_ALIAS,SEEK_SET);
(void)read(userdat,alias,LEN_ALIAS);
(void)read(userdat,name,LEN_NAME);
(void)lseek(userdat,(long)(((long)total_users)*U_LEN)+U_MISC,SEEK_SET);
(void)read(userdat,misc,8);
for(i=0;i<8;i++)
if(misc[i]==ETX || misc[i]=='\r') break;
misc[i]=0;
......@@ -3183,7 +3209,8 @@ char* getfmsg(FILE* stream, ulong* outlen)
{
uchar* fbuf;
int ch;
ulong l,length,start;
long start;
ulong l,length;
length=0L;
start=ftell(stream); /* Beginning of Message */
......@@ -3200,11 +3227,11 @@ char* getfmsg(FILE* stream, ulong* outlen)
return(NULL);
}
fseek(stream,start,SEEK_SET);
(void)fseek(stream,start,SEEK_SET);
for(l=0;l<length;l++)
fbuf[l]=fgetc(stream);
fbuf[l]=(uchar)fgetc(stream);
if(ch==0)
fgetc(stream); /* Read NULL */
(void)fgetc(stream); /* Read NULL */
while(length && fbuf[length-1]<=' ') /* truncate white-space */
length--;
......@@ -3231,7 +3258,7 @@ enum {
/* Returns 0 on success, 1 dupe, 2 filtered, 3 empty, 4 too-old */
/* or other SMB error */
/****************************************************************************/
int fmsgtosmsg(char* fbuf, fmsghdr_t fmsghdr, uint user, uint subnum)
int fmsgtosmsg(char* fbuf, fmsghdr_t* hdr, uint user, uint subnum)
{
uchar ch,stail[MAX_TAILLEN+1],*sbody;
char msg_id[256],str[128],*p;
......@@ -3251,53 +3278,53 @@ int fmsgtosmsg(char* fbuf, fmsghdr_t fmsghdr, uint user, uint subnum)
if(twit_list) {
sprintf(fname,"%stwitlist.cfg",scfg.ctrl_dir);
if(findstr(fmsghdr.from,fname) || findstr(fmsghdr.to,fname)) {
lprintf(LOG_INFO,"Filtering message from %s to %s",fmsghdr.from,fmsghdr.to);
if(findstr(hdr->from,fname) || findstr(hdr->to,fname)) {
lprintf(LOG_INFO,"Filtering message from %s to %s",hdr->from,hdr->to);
return IMPORT_FILTERED_TWIT;
}
}
memset(&msg,0,sizeof(smbmsg_t));
if(fmsghdr.attr&FIDO_PRIVATE)
if(hdr->attr&FIDO_PRIVATE)
msg.hdr.attr|=MSG_PRIVATE;
if(scfg.sys_misc&SM_DELREADM)
msg.hdr.attr|=MSG_KILLREAD;
if(fmsghdr.attr&FIDO_FILE)
if(hdr->attr&FIDO_FILE)
msg.hdr.auxattr|=MSG_FILEATTACH;
msg.hdr.when_imported.time=now;
msg.hdr.when_imported.zone=sys_timezone(&scfg);
if(fmsghdr.time[0]) {
msg.hdr.when_written.time=fmsgtime(fmsghdr.time);
if(hdr->time[0]) {
msg.hdr.when_written.time=fmsgtime(hdr->time);
if(max_msg_age && (time32_t)msg.hdr.when_written.time < now
&& (now - msg.hdr.when_written.time) > max_msg_age) {
lprintf(LOG_INFO, "Filtering message from %s due to age: %1.1f days"
,fmsghdr.from
,hdr->from
,(now - msg.hdr.when_written.time) / (24.0*60.0*60.0));
return IMPORT_FILTERED_AGE;
}
} else
msg.hdr.when_written = msg.hdr.when_imported;
origaddr.zone=fmsghdr.origzone; /* only valid if NetMail */
origaddr.net=fmsghdr.orignet;
origaddr.node=fmsghdr.orignode;
origaddr.point=fmsghdr.origpoint;
origaddr.zone=hdr->origzone; /* only valid if NetMail */
origaddr.net=hdr->orignet;
origaddr.node=hdr->orignode;
origaddr.point=hdr->origpoint;
destaddr.zone=fmsghdr.destzone; /* only valid if NetMail */
destaddr.net=fmsghdr.destnet;
destaddr.node=fmsghdr.destnode;
destaddr.point=fmsghdr.destpoint;
destaddr.zone=hdr->destzone; /* only valid if NetMail */
destaddr.net=hdr->destnet;
destaddr.node=hdr->destnode;
destaddr.point=hdr->destpoint;
smb_hfield_str(&msg,SENDER,fmsghdr.from);
smb_hfield_str(&msg,RECIPIENT,fmsghdr.to);
smb_hfield_str(&msg,SENDER,hdr->from);
smb_hfield_str(&msg,RECIPIENT,hdr->to);
if(user) {
sprintf(str,"%u",user);
smb_hfield_str(&msg,RECIPIENTEXT,str);
}
smb_hfield_str(&msg,SUBJECT,fmsghdr.subj);
smb_hfield_str(&msg,SUBJECT,hdr->subj);
if(fbuf==NULL) {
lprintf(LOG_ERR,"ERROR line %d allocating fbuf",__LINE__);
......@@ -3562,6 +3589,7 @@ int fmsgtosmsg(char* fbuf, fmsghdr_t fmsghdr, uint user, uint subnum)
}
smb_freemsgmem(&msg);
free(sbody);
return(i);
}
......@@ -3606,7 +3634,7 @@ void getzpt(FILE* stream, fmsghdr_t* hdr)
else
cr=0;
}
fseek(stream,pos,SEEK_SET);
(void)fseek(stream,pos,SEEK_SET);
}
bool foreign_zone(uint16_t zone1, uint16_t zone2)
......@@ -3620,7 +3648,7 @@ bool foreign_zone(uint16_t zone1, uint16_t zone2)
This function puts a message into a Fido packet, writing both the header
information and the message body
******************************************************************************/
void putfmsg(FILE* stream, const char* fbuf, fmsghdr_t fmsghdr, area_t area
void putfmsg(FILE* stream, const char* fbuf, fmsghdr_t* hdr, area_t area
,addrlist_t seenbys, addrlist_t paths)
{
char str[256],seenby[256];
......@@ -3630,27 +3658,27 @@ void putfmsg(FILE* stream, const char* fbuf, fmsghdr_t fmsghdr, area_t area
fpkdmsg_t pkdmsg;
size_t len;
addr=getsysfaddr(fmsghdr.destzone);
addr=getsysfaddr(hdr->destzone);
/* Write fixed-length header fields */
memset(&pkdmsg,0,sizeof(pkdmsg));
pkdmsg.type = 2;
pkdmsg.orignet = addr.net;
pkdmsg.orignode = addr.node;
pkdmsg.destnet = fmsghdr.destnet;
pkdmsg.destnode = fmsghdr.destnode;
pkdmsg.attr = fmsghdr.attr;
pkdmsg.cost = fmsghdr.cost;
SAFECOPY(pkdmsg.time,fmsghdr.time);
fwrite(&pkdmsg ,sizeof(pkdmsg) ,1,stream);
pkdmsg.destnet = hdr->destnet;
pkdmsg.destnode = hdr->destnode;
pkdmsg.attr = hdr->attr;
pkdmsg.cost = hdr->cost;
SAFECOPY(pkdmsg.time,hdr->time);
(void)fwrite(&pkdmsg ,sizeof(pkdmsg) ,1,stream);
/* Write variable-length (ASCIIZ) header fields */
fwrite(fmsghdr.to ,strlen(fmsghdr.to)+1 ,1,stream);
fwrite(fmsghdr.from ,strlen(fmsghdr.from)+1 ,1,stream);
fwrite(fmsghdr.subj ,strlen(fmsghdr.subj)+1 ,1,stream);
(void)fwrite(hdr->to ,strlen(hdr->to)+1 ,1,stream);
(void)fwrite(hdr->from ,strlen(hdr->from)+1 ,1,stream);
(void)fwrite(hdr->subj ,strlen(hdr->subj)+1 ,1,stream);
if(area.tag == NULL && strstr(fbuf, "\1INTL ") == NULL) /* NetMail, so add FSC-0004 INTL kludge */
fwrite_intl_control_line(stream, &fmsghdr); /* If not already present */
fwrite_intl_control_line(stream, hdr); /* If not already present */
len = strlen((char *)fbuf);
......@@ -3658,7 +3686,7 @@ void putfmsg(FILE* stream, const char* fbuf, fmsghdr_t fmsghdr, area_t area
if(area.tag)
if(strncmp((char *)fbuf,"AREA:",5)) /* No AREA: Line */
fprintf(stream,"AREA:%s\r",area.tag); /* So add one */
fwrite(fbuf,len,1,stream);
(void)fwrite(fbuf,len,1,stream);
lastlen=9;
if(len && fbuf[len-1]!='\r')
fputc('\r',stream);
......@@ -3667,8 +3695,8 @@ void putfmsg(FILE* stream, const char* fbuf, fmsghdr_t fmsghdr, area_t area
fwrite_via_control_line(stream, &addr);
} else { /* EchoMail, Not NetMail */
if(foreign_zone(addr.zone, fmsghdr.destzone)) /* Zone Gate */
fprintf(stream,"SEEN-BY: %d/%d\r",fmsghdr.destnet,fmsghdr.destnode);
if(foreign_zone(addr.zone, hdr->destzone)) /* Zone Gate */
fprintf(stream,"SEEN-BY: %d/%d\r",hdr->destnet,hdr->destnode);
else {
fprintf(stream,"SEEN-BY:");
for(u=0;u<seenbys.addrs;u++) { /* Put back original SEEN-BYs */
......@@ -3684,7 +3712,7 @@ void putfmsg(FILE* stream, const char* fbuf, fmsghdr_t fmsghdr, area_t area
sprintf(str,"%d",seenbys.addr[u].node);
strcat(seenby,str);
if(lastlen+strlen(seenby)<80) {
fwrite(seenby,strlen(seenby),1,stream);
(void)fwrite(seenby,strlen(seenby),1,stream);
lastlen+=strlen(seenby);
}
else {
......@@ -3715,7 +3743,7 @@ void putfmsg(FILE* stream, const char* fbuf, fmsghdr_t fmsghdr, area_t area
sprintf(str,"%d",area.link[u].node);
strcat(seenby,str);
if(lastlen+strlen(seenby)<80) {
fwrite(seenby,strlen(seenby),1,stream);
(void)fwrite(seenby,strlen(seenby),1,stream);
lastlen+=strlen(seenby);
}
else {
......@@ -3744,7 +3772,7 @@ void putfmsg(FILE* stream, const char* fbuf, fmsghdr_t fmsghdr, area_t area
sprintf(str,"%d",scfg.faddr[u].node);
strcat(seenby,str);
if(lastlen+strlen(seenby)<80) {
fwrite(seenby,strlen(seenby),1,stream);
(void)fwrite(seenby,strlen(seenby),1,stream);
lastlen+=strlen(seenby);
}
else {
......@@ -3759,7 +3787,7 @@ void putfmsg(FILE* stream, const char* fbuf, fmsghdr_t fmsghdr, area_t area
lastlen=7;
net_exists=0;
fprintf(stream,"\r\1PATH:");
addr=getsysfaddr(fmsghdr.destzone);
addr=getsysfaddr(hdr->destzone);
for(u=0;u<paths.addrs;u++) { /* Put back the original PATH */
if(paths.addr[u].net == 0)
continue; // Invalid node number/address, don't include "0/0" in PATH
......@@ -3776,7 +3804,7 @@ void putfmsg(FILE* stream, const char* fbuf, fmsghdr_t fmsghdr, area_t area
sprintf(str,"%d",paths.addr[u].node);
strcat(seenby,str);
if(lastlen+strlen(seenby)<80) {
fwrite(seenby,strlen(seenby),1,stream);
(void)fwrite(seenby,strlen(seenby),1,stream);
lastlen+=strlen(seenby);
}
else {
......@@ -3788,7 +3816,7 @@ void putfmsg(FILE* stream, const char* fbuf, fmsghdr_t fmsghdr, area_t area
}
strcpy(seenby," "); /* Add first address with same zone to PATH */
sysaddr=getsysfaddr(fmsghdr.destzone);
sysaddr=getsysfaddr(hdr->destzone);
if(sysaddr.net!=0 && sysaddr.point==0
&& (paths.addrs==0 || lasthop.net!=sysaddr.net || lasthop.node!=sysaddr.node)) {
if(sysaddr.net!=addr.net || !net_exists) {
......@@ -3800,10 +3828,10 @@ void putfmsg(FILE* stream, const char* fbuf, fmsghdr_t fmsghdr, area_t area
sprintf(str,"%d",sysaddr.node);
strcat(seenby,str);
if(lastlen+strlen(seenby)<80)
fwrite(seenby,strlen(seenby),1,stream);
(void)fwrite(seenby,strlen(seenby),1,stream);
else {
fprintf(stream,"\r\1PATH:");
fwrite(seenby,strlen(seenby),1,stream);
(void)fwrite(seenby,strlen(seenby),1,stream);
}
}
fputc('\r',stream);
......@@ -3825,11 +3853,12 @@ long find_packet_terminator(FILE* stream)
uint16_t terminator = ~FIDO_PACKET_TERMINATOR;
long offset;
fseek(stream, 0, SEEK_END);
if(fseek(stream, 0, SEEK_END) != 0)
return 0;
offset = ftell(stream);
if(offset >= sizeof(fpkthdr_t)+sizeof(terminator)) {
fseek(stream, offset-sizeof(terminator), SEEK_SET);
if(fread(&terminator, sizeof(terminator), 1, stream)
(void)fseek(stream, offset-sizeof(terminator), SEEK_SET);
if(fread(&terminator, 1, sizeof(terminator), stream) == sizeof(terminator)
&& terminator==FIDO_PACKET_TERMINATOR)
offset -= sizeof(terminator);
}
......@@ -4086,10 +4115,13 @@ outpkt_t* get_outpkt(fidoaddr_t orig, fidoaddr_t dest, nodecfg_t* nodecfg)
}
if((pkt->filename = strdup(pktname(cfg.temp_dir))) == NULL) {
lprintf(LOG_CRIT, "Memory allocation error, line %u", __LINE__);
free(pkt);
return NULL;
}
if((pkt->fp = fopen(pkt->filename, "wb")) == NULL) {
lprintf(LOG_ERR, "ERROR %u (%s) opening/creating %s", errno, strerror(errno), pkt->filename);
free(pkt->filename);
free(pkt);
return NULL;
}
......@@ -4100,7 +4132,7 @@ outpkt_t* get_outpkt(fidoaddr_t orig, fidoaddr_t dest, nodecfg_t* nodecfg)
,smb_faddrtoa(&orig, str), smb_faddrtoa(&dest, NULL), pkt->filename);
fpkthdr_t pkthdr;
new_pkthdr(&pkthdr, orig, dest, nodecfg);
fwrite(&pkthdr, sizeof(pkthdr), 1, pkt->fp);
(void)fwrite(&pkthdr, sizeof(pkthdr), 1, pkt->fp);
listAddNode(&outpkt_list, pkt, 0, LAST_NODE);
return pkt;
}
......@@ -4109,7 +4141,7 @@ outpkt_t* get_outpkt(fidoaddr_t orig, fidoaddr_t dest, nodecfg_t* nodecfg)
This is where we put outgoing messages into packets.
******************************************************************************/
void pkt_to_pkt(const char *fbuf, area_t area, const fidoaddr_t* faddr
,fmsghdr_t fmsghdr, addrlist_t seenbys, addrlist_t paths)
,fmsghdr_t* hdr, addrlist_t seenbys, addrlist_t paths)
{
unsigned u;
fidoaddr_t sysaddr;
......@@ -4119,10 +4151,10 @@ void pkt_to_pkt(const char *fbuf, area_t area, const fidoaddr_t* faddr
continue;
if(check_psb(&seenbys, area.link[u]))
continue;
if(fmsghdr.origzone == area.link[u].zone
&& fmsghdr.orignet == area.link[u].net
&& fmsghdr.orignode == area.link[u].node
&& fmsghdr.origpoint == area.link[u].point)
if(hdr->origzone == area.link[u].zone
&& hdr->orignet == area.link[u].net
&& hdr->orignode == area.link[u].node
&& hdr->origpoint == area.link[u].point)
continue; /* Don't loop messages back to originator */
nodecfg_t* nodecfg = findnodecfg(&cfg, area.link[u],0);
if(nodecfg != NULL && nodecfg->passive)
......@@ -4134,12 +4166,12 @@ void pkt_to_pkt(const char *fbuf, area_t area, const fidoaddr_t* faddr
lprintf(LOG_ERR, "ERROR Creating/opening outbound packet for %s", smb_faddrtoa(&area.link[u], NULL));
bail(1);
}
fmsghdr.destnode = area.link[u].node;
fmsghdr.destnet = area.link[u].net;
fmsghdr.destzone = area.link[u].zone;
hdr->destnode = area.link[u].node;
hdr->destnet = area.link[u].net;
hdr->destzone = area.link[u].zone;
lprintf(LOG_DEBUG, "Adding %s message from %s (%s) to packet for %s: %s"
,area.tag, fmsghdr.from, fmsghdr_srcaddr_str(&fmsghdr), smb_faddrtoa(&area.link[u], NULL), pkt->filename);
putfmsg(pkt->fp, fbuf, fmsghdr, area, seenbys, paths);
,area.tag, hdr->from, fmsghdr_srcaddr_str(hdr), smb_faddrtoa(&area.link[u], NULL), pkt->filename);
putfmsg(pkt->fp, fbuf, hdr, area, seenbys, paths);
}
}
......@@ -4159,20 +4191,29 @@ int pkt_to_msg(FILE* fidomsg, fmsghdr_t* hdr, const char* info, const char* inbo
printf("Empty NetMail");
else {
printf("Exporting: ");
MKDIR(scfg.netmail_dir);
if(!isdir(scfg.netmail_dir) && MKDIR(scfg.netmail_dir) != 0) {
lprintf(LOG_ERR, "Error %u (%s) line %d creating directory: %s"
,errno, strerror(errno), __LINE__, scfg.netmail_dir);
free(fmsgbuf);
return -2;
}
for(i=1;i;i++) {
SAFEPRINTF2(path, "%s%u.msg", scfg.netmail_dir, i);
if(!fexistcase(path))
break;
if(terminated)
if(terminated) {
free(fmsgbuf);
return 1;
}
}
if(!i) {
lprintf(LOG_WARNING,"Too many netmail messages");
free(fmsgbuf);
return(-1);
}
if((file=nopen(path,O_WRONLY|O_CREAT))==-1) {
lprintf(LOG_ERR,"ERROR %u (%s) line %d creating %s",errno,strerror(errno),__LINE__,path);
free(fmsgbuf);
return(-1);
}
if(hdr->attr&FIDO_FILE) { /* File attachment (only a single file supported) */
......@@ -4180,8 +4221,8 @@ int pkt_to_msg(FILE* fidomsg, fmsghdr_t* hdr, const char* info, const char* inbo
SAFECOPY(fname, getfname(hdr->subj));
SAFEPRINTF2(hdr->subj, "%s%s", inbound, fname); /* Fix the file path in the subject */
}
write(file,hdr,sizeof(fmsghdr_t));
write(file,fmsgbuf,l+1); /* Write the '\0' terminator too */
(void)write(file,hdr,sizeof(fmsghdr_t));
(void)write(file,fmsgbuf,l+1); /* Write the '\0' terminator too */
close(file);
printf("%s", path);
lprintf(LOG_INFO,"%s Exported to %s",info,path);
......@@ -4298,8 +4339,8 @@ int import_netmail(const char* path, fmsghdr_t hdr, FILE* fp, const char* inboun
}
else {
hdr.attr|=FIDO_RECV;
fseek(fp,0L,SEEK_SET);
fwrite(&hdr,sizeof(fmsghdr_t),1,fp);
(void)fseek(fp,0L,SEEK_SET);
(void)fwrite(&hdr,sizeof(fmsghdr_t),1,fp);
fclose(fp); /* Gotta close it here for areafix stuff */
}
}
......@@ -4345,7 +4386,9 @@ int import_netmail(const char* path, fmsghdr_t hdr, FILE* fp, const char* inboun
}
SAFEPRINTF(subj, "Pong: %s", hdr.subj);
create_netmail(/* to: */hdr.from, /* msg: */NULL, subj, body, addr, /* file_attached: */false);
FREE_AND_NULL(body);
if(body != fmsgbuf) {
FREE_AND_NULL(body);
}
} else { /* AreaFix */
p=process_areafix(addr,fmsgbuf,/* Password: */hdr.subj, /* To: */hdr.from);
if(p != NULL && cfg.areamgr[0] != 0) {
......@@ -4356,7 +4399,7 @@ int import_netmail(const char* path, fmsghdr_t hdr, FILE* fp, const char* inboun
SAFECOPY(hdr.from, "SBBSecho");
hdr.origzone=hdr.orignet=hdr.orignode=hdr.origpoint=0;
hdr.time[0] = 0; /* Generate a new timestamp */
if(fmsgtosmsg(p,hdr,notify,INVALID_SUB) == IMPORT_SUCCESS) {
if(fmsgtosmsg(p, &hdr, notify, INVALID_SUB) == IMPORT_SUCCESS) {
sprintf(str,"\7\1n\1hSBBSecho \1n\1msent you mail\r\n");
putsmsg(&scfg,notify,str);
}
......@@ -4392,7 +4435,7 @@ int import_netmail(const char* path, fmsghdr_t hdr, FILE* fp, const char* inboun
fmsgbuf=getfmsg(fp,&length);
switch(i=fmsgtosmsg(fmsgbuf,hdr,usernumber,INVALID_SUB)) {
switch(i=fmsgtosmsg(fmsgbuf, &hdr, usernumber, INVALID_SUB)) {
case IMPORT_SUCCESS: /* success */
break;
case IMPORT_FILTERED_DUPE: /* filtered */
......@@ -4472,11 +4515,9 @@ static uint32_t read_export_ptr(int subnum, const char* tag)
{
char path[MAX_PATH+1];
char key[INI_MAX_VALUE_LEN];
int file;
FILE* fp;
uint32_t ptr=0;
/* New way (July-21-2012): */
safe_snprintf(path,sizeof(path),"%s%s.ini",scfg.sub[subnum]->data_dir,scfg.sub[subnum]->code);
if((fp=iniOpenFile(path, /* create: */false)) != NULL) {
safe_snprintf(key, sizeof(key), "%s.export_ptr", tag);
......@@ -4484,13 +4525,6 @@ static uint32_t read_export_ptr(int subnum, const char* tag)
ptr=iniReadLongInt(fp, "SBBSecho", "export_ptr", 0); /* the previous .ini method (did not support gating) */
iniCloseFile(fp);
}
if(ptr) return ptr;
/* Old way: */
safe_snprintf(path,sizeof(path),"%s%s.sfp",scfg.sub[subnum]->data_dir,scfg.sub[subnum]->code);
if((file=nopen(path,O_RDONLY)) != -1) {
read(file,&ptr,sizeof(ptr));
close(file);
}
return ptr;
}
......@@ -4821,7 +4855,7 @@ void export_echomail(const char* sub_code, const nodecfg_t* nodecfg, bool rescan
if(cfg.area[u].sub == subnum) {
cfg.area[u].exported++;
pkt_to_pkt(fmsgbuf, cfg.area[u]
,nodecfg ? &nodecfg->addr : NULL, hdr, msg_seen, msg_path);
,nodecfg ? &nodecfg->addr : NULL, &hdr, msg_seen, msg_path);
break;
}
}
......@@ -5116,7 +5150,7 @@ int export_netmail(void)
,i, email->last_error, msg.hdr.number);
if(msg.hdr.auxattr&MSG_FILEATTACH)
delfattach(&scfg,&msg);
fseek(email->sid_fp, (msg.offset+1)*sizeof(msg.idx), SEEK_SET);
(void)fseek(email->sid_fp, (msg.offset+1)*sizeof(msg.idx), SEEK_SET);
} else {
/* Just mark as "sent" */
msg.hdr.netattr |= MSG_SENT;
......@@ -5174,7 +5208,7 @@ bool netmail_sent(const char* fname)
}
hdr.attr|=FIDO_SENT;
rewind(fp);
fwrite(&hdr, sizeof(hdr), 1, fp);
(void)fwrite(&hdr, sizeof(hdr), 1, fp);
fclose(fp);
if(!cfg.ignore_netmail_kill_attr && (hdr.attr&FIDO_KILLSENT))
return delfile(fname, __LINE__);
......@@ -5259,6 +5293,8 @@ void pack_netmail(void)
if(!bso_lock_node(addr))
continue;
outbound = get_current_outbound(addr, /* fileboxes: */true);
if(outbound == NULL)
continue;
if(addr.point)
SAFEPRINTF2(req,"%s%08x.req",outbound,addr.point);
else
......@@ -5280,9 +5316,10 @@ void pack_netmail(void)
,hdr.from, fmsghdr_srcaddr_str(&hdr)
,hdr.to, smb_faddrtoa(&addr,NULL)
,hdr.attr, hdr.subj);
FREE_AND_NULL(fmsgbuf);
fmsgbuf=getfmsg(fidomsg,NULL);
fclose(fidomsg);
if(!fmsgbuf) {
if(fmsgbuf == NULL) {
lprintf(LOG_ERR,"ERROR line %d allocating memory for NetMail fmsgbuf"
,__LINE__);
bail(1);
......@@ -5301,6 +5338,8 @@ void pack_netmail(void)
if(cfg.flo_mailer) {
outbound = get_current_outbound(addr, /* fileboxes: */true);
if(outbound == NULL)
continue;
if(nodecfg!=NULL && nodecfg->outbox[0])
SAFECOPY(packet, pktname(outbound));
else {
......@@ -5345,14 +5384,14 @@ void pack_netmail(void)
chsize(file,0);
rewind(stream);
new_pkthdr(&pkthdr, getsysfaddr(addr.zone), addr, nodecfg);
fwrite(&pkthdr,sizeof(pkthdr),1,stream);
(void)fwrite(&pkthdr,sizeof(pkthdr),1,stream);
} else
fseek(stream,find_packet_terminator(stream),SEEK_SET);
(void)fseek(stream,find_packet_terminator(stream),SEEK_SET);
lprintf(LOG_DEBUG, "Adding NetMail (%s) to %spacket for %s: %s"
,getfname(path)
,newpkt, smb_faddrtoa(&addr, NULL), packet);
putfmsg(stream,fmsgbuf,hdr,fakearea,msg_seen,msg_path);
putfmsg(stream, fmsgbuf, &hdr, fakearea, msg_seen, msg_path);
/* Write packet terminator */
terminate_packet(stream);
......@@ -5367,6 +5406,7 @@ void pack_netmail(void)
packed_netmail++;
}
globfree(&g);
FREE_AND_NULL(fmsgbuf);
}
/* Find any packets that have been left behind in the temp directory */
......@@ -5414,8 +5454,8 @@ void find_stray_packets(void)
continue;
}
terminator = ~FIDO_PACKET_TERMINATOR;
fseek(fp, flen-sizeof(terminator), SEEK_SET);
fread(&terminator, sizeof(terminator), 1, fp);
(void)fseek(fp, flen-sizeof(terminator), SEEK_SET);
(void)fread(&terminator, sizeof(terminator), 1, fp);
fclose(fp);
if(!parse_pkthdr(&pkthdr, &pkt_orig, &pkt_dest, &pkt_type)) {
lprintf(LOG_WARNING,"Failure to parse packet (%s) header, type: %u"
......@@ -5457,6 +5497,8 @@ bool rename_bad_packet(const char* packet)
char badpkt[MAX_PATH+1];
SAFECOPY(badpkt, packet);
char* ext = getfext(badpkt);
if(ext == NULL)
return false;
strcpy(ext, ".bad");
if(mv(packet, badpkt, /* copy: */false) == 0)
return true;
......@@ -5517,15 +5559,15 @@ void import_packets(const char* inbound, nodecfg_t* inbox, bool secure)
}
terminator = ~FIDO_PACKET_TERMINATOR;
fseek(fidomsg, -(int)sizeof(terminator), SEEK_END);
fread(&terminator,sizeof(terminator),1,fidomsg);
if(terminator != FIDO_PACKET_TERMINATOR) {
(void)fseek(fidomsg, -(int)sizeof(terminator), SEEK_END);
if(fread(&terminator, 1, sizeof(terminator), fidomsg) != sizeof(terminator)
|| terminator != FIDO_PACKET_TERMINATOR) {
fclose(fidomsg);
lprintf(LOG_WARNING,"WARNING: packet %s not terminated correctly (0x%04hX)", packet, terminator);
rename_bad_packet(packet);
continue;
}
fseek(fidomsg,0L,SEEK_SET);
(void)fseek(fidomsg,0L,SEEK_SET);
if(fread(&pkthdr,sizeof(pkthdr),1,fidomsg)!=1) {
fclose(fidomsg);
lprintf(LOG_ERR,"ERROR line %d reading %u bytes from %s",__LINE__
......@@ -5610,9 +5652,9 @@ void import_packets(const char* inbound, nodecfg_t* inbox, bool secure)
hdr.attr&=~FIDO_LOCAL; /* Strip local bit, obviously not created locally */
if(strncmp(fmsgbuf, "AREA:", 5) != 0) { /* Netmail */
fseek(fidomsg, msg_offset, SEEK_SET);
(void)fseek(fidomsg, msg_offset, SEEK_SET);
import_netmail("", hdr, fidomsg, inbound);
fseek(fidomsg, next_msg, SEEK_SET);
(void)fseek(fidomsg, next_msg, SEEK_SET);
printf("\n");
continue;
}
......@@ -5633,7 +5675,7 @@ void import_packets(const char* inbound, nodecfg_t* inbox, bool secure)
lprintf(LOG_WARNING, "%s: Failed to parse Origin Line in message from %s (%s) in packet from %s: %s"
, areatag, hdr.from, fmsghdr_srcaddr_str(&hdr), smb_faddrtoa(&pkt_orig, NULL), packet);
new_echostat_msg(stat, ECHOSTAT_MSG_RECEIVED, fidomsg_to_echostat_msg(hdr, &pkt_orig, fmsgbuf));
new_echostat_msg(stat, ECHOSTAT_MSG_RECEIVED, fidomsg_to_echostat_msg(&hdr, &pkt_orig, fmsgbuf));
if(!opt_import_echomail) {
printf("EchoMail Ignored");
......@@ -5692,7 +5734,7 @@ void import_packets(const char* inbound, nodecfg_t* inbox, bool secure)
if(cfg.area[i].sub==INVALID_SUB) { /* Passthru */
strip_psb(fmsgbuf);
pkt_to_pkt(fmsgbuf,curarea,NULL,hdr,msg_seen,msg_path);
pkt_to_pkt(fmsgbuf, curarea, NULL, &hdr, msg_seen, msg_path);
printf("\n");
continue;
} /* On to the next message */
......@@ -5709,7 +5751,7 @@ void import_packets(const char* inbound, nodecfg_t* inbox, bool secure)
,areatag,smb_faddrtoa(&scfg.faddr[j],NULL), hdr.from, fmsghdr_srcaddr_str(&hdr));
printf("\n");
new_echostat_msg(stat, ECHOSTAT_MSG_CIRCULAR
,fidomsg_to_echostat_msg(hdr, &pkt_orig, fmsgbuf));
,fidomsg_to_echostat_msg(&hdr, &pkt_orig, fmsgbuf));
continue;
}
}
......@@ -5736,7 +5778,7 @@ void import_packets(const char* inbound, nodecfg_t* inbox, bool secure)
fputs(str,stdout);
lprintf(LOG_ERR, "%s", str);
strip_psb(fmsgbuf);
pkt_to_pkt(fmsgbuf,curarea,NULL,hdr,msg_seen,msg_path);
pkt_to_pkt(fmsgbuf, curarea, NULL, &hdr, msg_seen, msg_path);
printf("\n");
continue;
}
......@@ -5752,7 +5794,7 @@ void import_packets(const char* inbound, nodecfg_t* inbox, bool secure)
lprintf(LOG_ERR, "%s", str);
smb_close(&smb[cur_smb]);
strip_psb(fmsgbuf);
pkt_to_pkt(fmsgbuf,curarea,NULL,hdr,msg_seen,msg_path);
pkt_to_pkt(fmsgbuf, curarea, NULL, &hdr, msg_seen, msg_path);
printf("\n");
continue;
}
......@@ -5765,7 +5807,7 @@ void import_packets(const char* inbound, nodecfg_t* inbox, bool secure)
lprintf(LOG_NOTICE, "%s: Private posts disallowed from %s (%s) to %s, subject: %s"
,areatag, hdr.from, fmsghdr_srcaddr_str(&hdr), hdr.to, hdr.subj);
strip_psb(fmsgbuf);
pkt_to_pkt(fmsgbuf,curarea,NULL,hdr,msg_seen,msg_path);
pkt_to_pkt(fmsgbuf, curarea, NULL,&hdr, msg_seen, msg_path);
printf("\n");
continue;
}
......@@ -5776,18 +5818,18 @@ void import_packets(const char* inbound, nodecfg_t* inbox, bool secure)
/**********************/
/* Importing EchoMail */
/**********************/
result=fmsgtosmsg(fmsgbuf,hdr,0,cfg.area[i].sub);
result=fmsgtosmsg(fmsgbuf, &hdr, 0, cfg.area[i].sub);
if(result==IMPORT_FILTERED_DUPE) {
lprintf(LOG_NOTICE, "%s Duplicate message from %s (%s) to %s, subject: %s"
,areatag, hdr.from, fmsghdr_srcaddr_str(&hdr), hdr.to, hdr.subj);
cfg.area[i].dupes++;
new_echostat_msg(stat, ECHOSTAT_MSG_DUPLICATE
,fidomsg_to_echostat_msg(hdr, &pkt_orig, fmsgbuf));
,fidomsg_to_echostat_msg(&hdr, &pkt_orig, fmsgbuf));
}
else if(result==IMPORT_SUCCESS || (result==IMPORT_FILTERED_AGE && cfg.relay_filtered_msgs)) { /* Not a dupe */
strip_psb(fmsgbuf);
pkt_to_pkt(fmsgbuf,curarea,NULL,hdr,msg_seen,msg_path);
pkt_to_pkt(fmsgbuf, curarea, NULL, &hdr, msg_seen, msg_path);
}
if(result==SMB_SUCCESS) { /* Successful import */
......@@ -5806,7 +5848,7 @@ void import_packets(const char* inbound, nodecfg_t* inbox, bool secure)
echomail++;
cfg.area[i].imported++;
new_echostat_msg(stat, ECHOSTAT_MSG_IMPORTED
,fidomsg_to_echostat_msg(hdr, &pkt_orig, fmsgbuf));
,fidomsg_to_echostat_msg(&hdr, &pkt_orig, fmsgbuf));
}
printf("\n");
}
......@@ -5959,6 +6001,7 @@ int main(int argc, char **argv)
break;
default:
fprintf(stderr, "Unsupported option: %c\n", argv[i][j]);
/* Fall-through */
case '?':
printf("%s", usage);
bail(0);
......@@ -6383,8 +6426,8 @@ int main(int argc, char **argv)
}
else {
hdr.attr|=FIDO_RECV;
fseek(fidomsg,0L,SEEK_SET);
fwrite(&hdr,sizeof(fmsghdr_t),1,fidomsg);
(void)fseek(fidomsg,0L,SEEK_SET);
(void)fwrite(&hdr,sizeof(fmsghdr_t),1,fidomsg);
fclose(fidomsg);
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment