* [Edbrowse-dev] [PATCH] Remove zapmail feature, which is dangerous, silly, and undocumented.
@ 2011-04-04 13:58 Karl Dahlke
2011-04-05 13:18 ` Chris Brannon
0 siblings, 1 reply; 2+ messages in thread
From: Karl Dahlke @ 2011-04-04 13:58 UTC (permalink / raw)
To: edbrowse-dev
This is a big patch only because I reindented afterwords,
and a big chunk of code is no longer inside if not zapmail { }
so all that shifted to the left.
In reality I only changed a few lines of code.
Sometimes I hate indenting.
---
src/eb.h | 1 -
src/fetchmail.c | 565 +++++++++++++++++++++++++++----------------------------
src/main.c | 4 +-
3 files changed, 276 insertions(+), 294 deletions(-)
diff --git a/src/eb.h b/src/eb.h
index 5b28cd5..2497d02 100644
--- a/src/eb.h
+++ b/src/eb.h
@@ -195,7 +195,6 @@ extern bool ismc; /* Is the program running as a mail client? */
extern bool cons_utf8; /* does the console expect utf8? */
extern bool iuConvert; /* perform iso utf8 conversions automatically */
extern char type8859; /* 1 through 15 */
-extern bool zapMail; /* just get rid of the mail */
extern bool js_redirects; /* window.location = new_url */
extern uchar browseLocal; /* browsing a local file */
extern bool parsePage; /* parsing the html page, and any java therein */
diff --git a/src/fetchmail.c b/src/fetchmail.c
index b0f6561..fe3ef0d 100644
--- a/src/fetchmail.c
+++ b/src/fetchmail.c
@@ -280,10 +280,8 @@ fetchMail(int account)
const char *host = a->inurl;
int nmsgs, m, j, k;
- if(!isInteractive) {
- if(!zapMail)
- i_printfExit(MSG_FetchNotBackgnd);
- }
+ if(!isInteractive)
+ i_printfExit(MSG_FetchNotBackgnd);
if(!mailDir)
i_printfExit(MSG_NoMailDir);
@@ -319,15 +317,13 @@ fetchMail(int account)
exit(0);
}
- if(!(zapMail | passMail)) {
+ if(!passMail) {
/* We look up a lot of hosts; make a tcp connect */
sethostent(1);
/* the conect will drop when the program exits */
}
i_printf(MSG_MessagesX, nmsgs);
- if(zapMail && nmsgs > 300)
- nmsgs = 300;
for(m = 1; m <= nmsgs; ++m) {
const char *redirect = 0; /* send mail elsewhere */
@@ -340,262 +336,255 @@ fetchMail(int account)
char *exactf = 0; /* utf8 formatted */
int displine;
int stashNumber = -1;
-
- if(zapMail)
- delflag = true;
- else { /* read the next message */
- char retrbuf[5000];
- bool retr1;
+ char retrbuf[5000];
+ bool retr1;
/* We need to clear out the editor, from the last message,
* then read in this one, in its entirety.
* This is probably a waste, since the user might delete a megabyte message
* after seeing only the first paragraph, or even the subject,
* but as for programming, it's easier to read the whole thing in right now. */
- if(lastMailInfo)
- freeMailInfo(lastMailInfo);
- lastMailInfo = 0;
- nzFree(lastMailText);
- lastMailText = 0;
- if(sessionList[1].lw)
- cxQuit(1, 2);
- cs = 0;
- linesReset();
- cxSwitch(1, false);
+ if(lastMailInfo)
+ freeMailInfo(lastMailInfo);
+ lastMailInfo = 0;
+ nzFree(lastMailText);
+ lastMailText = 0;
+ if(sessionList[1].lw)
+ cxQuit(1, 2);
+ cs = 0;
+ linesReset();
+ cxSwitch(1, false);
/* Now grab the entire message */
- sprintf(serverLine, "retr %d%s", m, eol);
- if(!mailPutLine(serverLine, false))
- showErrorAbort();
- retr1 = true;
- while(true) {
- int nr;
- if(a->inssl)
- nr = ssl_read(retrbuf, sizeof (retrbuf));
- else
- nr = tcp_read(mssock, retrbuf, sizeof (retrbuf));
- if(nr <= 0)
- i_printfExit(MSG_ErrorReadMess, errno);
- if(retr1) {
+ sprintf(serverLine, "retr %d%s", m, eol);
+ if(!mailPutLine(serverLine, false))
+ showErrorAbort();
+ retr1 = true;
+ while(true) {
+ int nr;
+ if(a->inssl)
+ nr = ssl_read(retrbuf, sizeof (retrbuf));
+ else
+ nr = tcp_read(mssock, retrbuf, sizeof (retrbuf));
+ if(nr <= 0)
+ i_printfExit(MSG_ErrorReadMess, errno);
+ if(retr1) {
/* add null, to make it easy to print the error message, if necessary */
- if(nr < sizeof (retrbuf))
- retrbuf[nr] = 0;
- if(memcmp(retrbuf, "+OK", 3))
- i_printfExit(MSG_ErrorFetchMess, m, retrbuf);
- j = 3;
- while(retrbuf[j] != '\n')
- ++j;
+ if(nr < sizeof (retrbuf))
+ retrbuf[nr] = 0;
+ if(memcmp(retrbuf, "+OK", 3))
+ i_printfExit(MSG_ErrorFetchMess, m, retrbuf);
+ j = 3;
+ while(retrbuf[j] != '\n')
++j;
- nr -= j;
- memmove(retrbuf, retrbuf + j, nr);
- retr1 = false;
- }
- if(nr)
- stringAndBytes(&exact, &exact_l, retrbuf, nr);
+ ++j;
+ nr -= j;
+ memmove(retrbuf, retrbuf + j, nr);
+ retr1 = false;
+ }
+ if(nr)
+ stringAndBytes(&exact, &exact_l, retrbuf, nr);
/* . by itself on a line ends the transmission */
- j = exact_l - 1;
- if(j < 0)
- continue;
- if(exact[j] != '\n')
- continue;
+ j = exact_l - 1;
+ if(j < 0)
+ continue;
+ if(exact[j] != '\n')
+ continue;
+ --j;
+ if(j >= 0 && exact[j] == '\r')
--j;
- if(j >= 0 && exact[j] == '\r')
- --j;
- if(j < 0)
- continue;
- if(exact[j] != '.')
- continue;
- if(!j)
- break;
- if(exact[j - 1] == '\n')
- break;
- }
- exact_l = j;
+ if(j < 0)
+ continue;
+ if(exact[j] != '.')
+ continue;
+ if(!j)
+ break;
+ if(exact[j - 1] == '\n')
+ break;
+ }
+ exact_l = j;
/* get rid of the dos returns, and dot strip */
- for(j = k = 0; j < exact_l; ++j) {
- if(!j && exact[j] == '.')
- continue;
- if(j && exact[j] == '.' && exact[j - 1] == '\n')
- continue;
- if(exact[j] == '\r' && j < exact_l - 1 && exact[j + 1] == '\n')
- continue;
- exact[k++] = exact[j];
- }
- exact_l = k;
- exact[k] = 0;
+ for(j = k = 0; j < exact_l; ++j) {
+ if(!j && exact[j] == '.')
+ continue;
+ if(j && exact[j] == '.' && exact[j - 1] == '\n')
+ continue;
+ if(exact[j] == '\r' && j < exact_l - 1 && exact[j + 1] == '\n')
+ continue;
+ exact[k++] = exact[j];
+ }
+ exact_l = k;
+ exact[k] = 0;
- iuReformat(exact, exact_l, &exactf, &exactf_l);
+ iuReformat(exact, exact_l, &exactf, &exactf_l);
- if(exactf) {
- if(!addTextToBuffer((pst) exactf, exactf_l, 0, false))
- showErrorAbort();
- } else {
- if(!addTextToBuffer((pst) exact, exact_l, 0, false))
- showErrorAbort();
- }
+ if(exactf) {
+ if(!addTextToBuffer((pst) exactf, exactf_l, 0, false))
+ showErrorAbort();
+ } else {
+ if(!addTextToBuffer((pst) exact, exact_l, 0, false))
+ showErrorAbort();
+ }
- if(!unformatMail) {
- browseCurrentBuffer();
- if(!passMail) {
- mailIsBlack = onBlacklist();
- redirect = mailRedirect(lastMailInfo->to,
- lastMailInfo->from, lastMailInfo->reply,
- lastMailInfo->subject);
- }
- if(redirect) {
- key = 'w';
- if(*redirect == '-')
- ++redirect, key = 'u';
- if(stringEqual(redirect, "x"))
- i_puts(MSG_Junk);
- else
- printf("> %s\n", redirect);
- } else if((mailIsSpam | mailIsBlack) && spamCan) {
- redirect = spamCan;
- key = 'u';
- i_printf(MSG_Spam);
- if(lastMailInfo->from[0]) {
- i_printf(MSG_From);
- printf("%s", lastMailInfo->from);
- } else if(lastMailInfo->reply[0]) {
- i_printf(MSG_From);
- printf("%s", lastMailInfo->reply);
- }
- nl();
- } else if(!nattach && /* drop empty mail message */
- cw->dol -
- (strlen(lastMailInfo->subject) != 0) -
- (strlen(lastMailInfo->from) != 0) -
- (strlen(lastMailInfo->reply) != 0) <= 1) {
- redirect = "x";
- i_puts(MSG_Empty);
+ if(!unformatMail) {
+ browseCurrentBuffer();
+ if(!passMail) {
+ mailIsBlack = onBlacklist();
+ redirect = mailRedirect(lastMailInfo->to,
+ lastMailInfo->from, lastMailInfo->reply,
+ lastMailInfo->subject);
+ }
+ if(redirect) {
+ key = 'w';
+ if(*redirect == '-')
+ ++redirect, key = 'u';
+ if(stringEqual(redirect, "x"))
+ i_puts(MSG_Junk);
+ else
+ printf("> %s\n", redirect);
+ } else if((mailIsSpam | mailIsBlack) && spamCan) {
+ redirect = spamCan;
+ key = 'u';
+ i_printf(MSG_Spam);
+ if(lastMailInfo->from[0]) {
+ i_printf(MSG_From);
+ printf("%s", lastMailInfo->from);
+ } else if(lastMailInfo->reply[0]) {
+ i_printf(MSG_From);
+ printf("%s", lastMailInfo->reply);
}
+ nl();
+ } else if(!nattach && /* drop empty mail message */
+ cw->dol -
+ (strlen(lastMailInfo->subject) != 0) -
+ (strlen(lastMailInfo->from) != 0) -
+ (strlen(lastMailInfo->reply) != 0) <= 1) {
+ redirect = "x";
+ i_puts(MSG_Empty);
}
- if(redirect)
- delflag = true;
+ }
+ if(redirect)
+ delflag = true;
/* display the next page of mail and get a command from the keyboard */
- displine = 1;
- while(true) {
- if(!delflag) { /* show next page */
- nextpage:
- if(displine <= cw->dol) {
- for(j = 0; j < 20 && displine <= cw->dol;
- ++j, ++displine) {
- char *showline = (char *)fetchLine(displine, 1);
- k = pstLength((pst) showline);
- showline[--k] = 0;
- printf("%s\n", showline);
- nzFree(showline);
- }
+ displine = 1;
+ while(true) {
+ if(!delflag) { /* show next page */
+ nextpage:
+ if(displine <= cw->dol) {
+ for(j = 0; j < 20 && displine <= cw->dol; ++j, ++displine) {
+ char *showline = (char *)fetchLine(displine, 1);
+ k = pstLength((pst) showline);
+ showline[--k] = 0;
+ printf("%s\n", showline);
+ nzFree(showline);
}
}
+ }
/* get key command */
- while(true) {
- if(!delflag) {
+ while(true) {
+ if(!delflag) {
/* interactive prompt depends on whether there is more text or not */
- printf("%c ", displine > cw->dol ? '?' : '*');
- fflush(stdout);
- key = getLetter("qx? nwkudijJ");
- printf("\b\b\b");
- fflush(stdout);
-
- switch (key) {
- case 'q':
- i_puts(MSG_Quit);
- mailClose();
- case 'x':
- exit(0);
- case 'n':
- i_puts(MSG_Next);
- goto afterinput;
- case 'd':
- i_puts(MSG_Delete);
- delflag = true;
- goto afterinput;
- case 'i':
- i_puts(MSG_IPDelete);
- if(!cw->iplist || cw->iplist[0] == -1) {
- if(passMail)
- i_puts(MSG_POption);
- else
- i_puts(ipbFile ? MSG_None :
- MSG_NoBlackList);
- } else {
- IP32bit addr;
- for(k = 0; (addr = cw->iplist[k]) != NULL_IP;
- ++k) {
- puts(tcp_ip_dots(addr));
- if(nipblack == MAXIPBLACK)
- continue;
- ipblacklist[nipblack] = addr;
- ipblackmask[nipblack] = 0xffffffff;
- ipblackcomp[nipblack] = false;
- ++nipblack;
- }
+ printf("%c ", displine > cw->dol ? '?' : '*');
+ fflush(stdout);
+ key = getLetter("qx? nwkudijJ");
+ printf("\b\b\b");
+ fflush(stdout);
+
+ switch (key) {
+ case 'q':
+ i_puts(MSG_Quit);
+ mailClose();
+ case 'x':
+ exit(0);
+ case 'n':
+ i_puts(MSG_Next);
+ goto afterinput;
+ case 'd':
+ i_puts(MSG_Delete);
+ delflag = true;
+ goto afterinput;
+ case 'i':
+ i_puts(MSG_IPDelete);
+ if(!cw->iplist || cw->iplist[0] == -1) {
+ if(passMail)
+ i_puts(MSG_POption);
+ else
+ i_puts(ipbFile ? MSG_None : MSG_NoBlackList);
+ } else {
+ IP32bit addr;
+ for(k = 0; (addr = cw->iplist[k]) != NULL_IP; ++k) {
+ puts(tcp_ip_dots(addr));
+ if(nipblack == MAXIPBLACK)
+ continue;
+ ipblacklist[nipblack] = addr;
+ ipblackmask[nipblack] = 0xffffffff;
+ ipblackcomp[nipblack] = false;
+ ++nipblack;
}
- delflag = true;
- goto afterinput;
- case 'j':
- case 'J':
- i_puts(MSG_Junk);
- if(!junkSubject(lastMailInfo->subject, key))
- continue;
- delflag = true;
- goto afterinput;
- case ' ':
- if(displine > cw->dol)
- i_puts(MSG_EndMessage);
- goto nextpage;
- case '?':
- i_puts(MSG_MailHelp);
- continue;
- case 'k':
- case 'w':
- case 'u':
- break;
- default:
- i_puts(MSG_NYI);
+ }
+ delflag = true;
+ goto afterinput;
+ case 'j':
+ case 'J':
+ i_puts(MSG_Junk);
+ if(!junkSubject(lastMailInfo->subject, key))
continue;
- } /* switch */
- }
-
- /* delflag or not */
- /* At this point we're saving the mail somewhere. */
- if(key != 'k')
delflag = true;
- atname = redirect;
- savemail:
- if(!atname)
- atname = getFileName(0, false);
- if(!stringEqual(atname, "x")) {
- char exists = fileTypeByName(atname, false);
- int fsize; /* file size */
- int fh =
- open(atname, O_WRONLY | O_TEXT | O_CREAT | O_APPEND,
- 0666);
- if(fh < 0) {
- i_printf(MSG_NoCreate, atname);
+ goto afterinput;
+ case ' ':
+ if(displine > cw->dol)
+ i_puts(MSG_EndMessage);
+ goto nextpage;
+ case '?':
+ i_puts(MSG_MailHelp);
+ continue;
+ case 'k':
+ case 'w':
+ case 'u':
+ break;
+ default:
+ i_puts(MSG_NYI);
+ continue;
+ } /* switch */
+ }
+
+ /* delflag or not */
+ /* At this point we're saving the mail somewhere. */
+ if(key != 'k')
+ delflag = true;
+ atname = redirect;
+ savemail:
+ if(!atname)
+ atname = getFileName(0, false);
+ if(!stringEqual(atname, "x")) {
+ char exists = fileTypeByName(atname, false);
+ int fsize; /* file size */
+ int fh =
+ open(atname, O_WRONLY | O_TEXT | O_CREAT | O_APPEND,
+ 0666);
+ if(fh < 0) {
+ i_printf(MSG_NoCreate, atname);
+ goto savemail;
+ }
+ if(exists)
+ write(fh,
+ "======================================================================\n",
+ 71);
+ if(key == 'u' || unformatMail) {
+ if(write(fh, exact, exact_l) < exact_l) {
+ badsave:
+ i_printf(MSG_NoWrite, atname);
+ close(fh);
goto savemail;
}
- if(exists)
- write(fh,
- "======================================================================\n",
- 71);
- if(key == 'u' || unformatMail) {
- if(write(fh, exact, exact_l) < exact_l) {
- badsave:
- i_printf(MSG_NoWrite, atname);
- close(fh);
- goto savemail;
- }
- close(fh);
- fsize = exact_l;
- } else {
+ close(fh);
+ fsize = exact_l;
+ } else {
- if(mailStash) {
- char *rmf; /* raw mail file */
- int rmfh; /* file handle to same */
+ if(mailStash) {
+ char *rmf; /* raw mail file */
+ int rmfh; /* file handle to same */
/* I want a fairly easy filename, in case I want to go look at the original.
* Not a 30 character message ID that I am forced to cut&paste.
* 4 or 5 digits would be nice.
@@ -606,69 +595,67 @@ fetchMail(int account)
* It's good to have a cron job empty the trash early Sunday morning.
*/
- k = strlen(mailStash);
- rmf = allocMem(k + 12);
+ k = strlen(mailStash);
+ rmf = allocMem(k + 12);
/* Try 20 times, then give up. */
- for(j = 0; j < 20; ++j) {
- int rn = rand() % 100000; /* random number */
- sprintf(rmf, "%s/%05d.eml", mailStash, rn);
- if(fileTypeByName(rmf, false))
- continue;
+ for(j = 0; j < 20; ++j) {
+ int rn = rand() % 100000; /* random number */
+ sprintf(rmf, "%s/%05d.eml", mailStash, rn);
+ if(fileTypeByName(rmf, false))
+ continue;
/* dump the original mail into the file */
- rmfh =
- open(rmf,
- O_WRONLY | O_TEXT | O_CREAT | O_APPEND,
- 0666);
- if(rmfh < 0)
- break;
- if(write(rmfh, exact, exact_l) < exact_l) {
- close(rmfh);
- unlink(rmf);
- break;
- }
+ rmfh =
+ open(rmf,
+ O_WRONLY | O_TEXT | O_CREAT | O_APPEND,
+ 0666);
+ if(rmfh < 0)
+ break;
+ if(write(rmfh, exact, exact_l) < exact_l) {
close(rmfh);
-/* written successfully, remember the stash number */
- stashNumber = rn;
+ unlink(rmf);
break;
}
+ close(rmfh);
+/* written successfully, remember the stash number */
+ stashNumber = rn;
+ break;
}
- /* stashing the original */
- fsize = 0;
- for(j = 1; j <= cw->dol; ++j) {
- char *showline = (char *)fetchLine(j, 1);
- int len = pstLength((pst) showline);
- if(write(fh, showline, len) < len)
- goto badsave;
- nzFree(showline);
- fsize += len;
- } /* loop over lines */
-
- if(stashNumber >= 0) {
- char addstash[60];
- sprintf(addstash, "\nOriginal %05d\n",
- stashNumber);
- k = strlen(addstash);
- if(write(fh, addstash, k) < k)
- goto badsave;
- fsize += k;
- }
-
- close(fh);
- if(nattach)
- writeAttachments(lastMailInfo);
- } /* unformat or format */
- if(atname != spamCan) {
- i_printf(MSG_MailSaved, fsize);
- if(exists)
- i_printf(MSG_Appended);
- nl();
}
- } /* saving to a real file */
- goto afterinput;
+ /* stashing the original */
+ fsize = 0;
+ for(j = 1; j <= cw->dol; ++j) {
+ char *showline = (char *)fetchLine(j, 1);
+ int len = pstLength((pst) showline);
+ if(write(fh, showline, len) < len)
+ goto badsave;
+ nzFree(showline);
+ fsize += len;
+ } /* loop over lines */
+
+ if(stashNumber >= 0) {
+ char addstash[60];
+ sprintf(addstash, "\nOriginal %05d\n", stashNumber);
+ k = strlen(addstash);
+ if(write(fh, addstash, k) < k)
+ goto badsave;
+ fsize += k;
+ }
+
+ close(fh);
+ if(nattach)
+ writeAttachments(lastMailInfo);
+ } /* unformat or format */
+ if(atname != spamCan) {
+ i_printf(MSG_MailSaved, fsize);
+ if(exists)
+ i_printf(MSG_Appended);
+ nl();
+ }
+ } /* saving to a real file */
+ goto afterinput;
- } /* key commands */
- } /* paging through the message */
- } /* interactive or zap */
+ } /* key commands */
+ } /* paging through the message */
afterinput:
if(delflag) {
@@ -688,8 +675,6 @@ fetchMail(int account)
nzFree(exactf);
} /* loop over mail messages */
- if(zapMail)
- printf("%d\n", nmsgs);
mailClose();
exit(0);
} /* fetchMail */
diff --git a/src/main.c b/src/main.c
index 40215ee..43d46b5 100644
--- a/src/main.c
+++ b/src/main.c
@@ -19,7 +19,7 @@ const char eol[] = "\r\n";
char EMPTYSTRING[] = "";
int debugLevel = 1;
int webTimeout = 20, mailTimeout = 0;
-bool ismc, browseLocal, zapMail, unformatMail, passMail, errorExit;
+bool ismc, browseLocal, unformatMail, passMail, errorExit;
bool isInteractive, inInput, listNA;
volatile bool intFlag;
int fileSize, maxFileSize = 50000000;
@@ -1109,8 +1109,6 @@ main(int argc, char **argv)
ismc = true; /* running as a mail client */
allowJS = false; /* no javascript in mail client */
++argv, --argc; /* we're going to break out */
- if(argc && stringEqual(argv[0], "-Zap"))
- ++argv, --argc, zapMail = true;
break;
}
}
--
1.7.4
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [Edbrowse-dev] [PATCH] Remove zapmail feature, which is dangerous, silly, and undocumented.
2011-04-04 13:58 [Edbrowse-dev] [PATCH] Remove zapmail feature, which is dangerous, silly, and undocumented Karl Dahlke
@ 2011-04-05 13:18 ` Chris Brannon
0 siblings, 0 replies; 2+ messages in thread
From: Chris Brannon @ 2011-04-05 13:18 UTC (permalink / raw)
To: edbrowse-dev
Your latest batch of mail patches is applied.
(get rid of zapMail, create directories, and stash original mail).
Thanks for the patches!
-- Chris
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-04-05 13:33 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-04-04 13:58 [Edbrowse-dev] [PATCH] Remove zapmail feature, which is dangerous, silly, and undocumented Karl Dahlke
2011-04-05 13:18 ` Chris Brannon
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).