ref: 9b848903e64bc5af8b7d9671f299ba5b8d9ffbf9
parent: 04c7d5d8f6bde4daa4c582b0053924115b33aca6
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Wed Mar 22 20:36:57 EDT 2017
upas/smtp: generate 128-bit random message id (was 32 bit), use dBprint(), cleanup unused variables
--- a/sys/src/cmd/upas/smtp/smtp.c
+++ b/sys/src/cmd/upas/smtp/smtp.c
@@ -136,6 +136,7 @@
mailfmtinstall(); /* 2047 encoding */
fmtinstall('D', Dfmt);
fmtinstall('[', encodefmt);
+ fmtinstall('H', encodefmt);
errs = malloc(argc*sizeof(char*));
reply = s_new();
host = 0;
@@ -496,7 +497,6 @@
static char buf[1024];
char *s, *se, *err;
UserPasswd *p;
- int n;
DS ds;
dialstringparse(farend, &ds);
@@ -677,8 +677,6 @@
return 0;
}
-static char hex[] = "0123456789abcdef";
-
/*
* send the damn thing
*/
@@ -685,8 +683,8 @@
char *
data(String *from, Biobuf *b, Mx *mx)
{
- char *buf, *cp, errmsg[ERRMAX], id[40];
- int i, n, nbytes, bufsize, eof, r;
+ char *buf, *cp, errmsg[ERRMAX];
+ int n, nbytes, bufsize, eof;
String *fromline;
/*
@@ -751,36 +749,24 @@
fromline = convertheader(from);
uneaten = buf;
- srand(truerand());
if(messageid == 0){
- for(i = 0; i < 16; i++){
- r = rand() & 0xff;
- id[2*i] = hex[r & 0xf];
- id[2*i + 1] = hex[(r>>4) & 0xf];
- }
- id[2*i] = '\0';
- nbytes += Bprint(&bout, "Message-ID: <%s@%s>\r\n", id, hostdomain);
- if(debug)
- Bprint(&berr, "Message-ID: <%s@%s>\r\n", id, hostdomain);
- }
+ uchar id[16];
- if(originator == 0){
- nbytes += Bprint(&bout, "From: %s\r\n", s_to_c(fromline));
- if(debug)
- Bprint(&berr, "From: %s\r\n", s_to_c(fromline));
+ genrandom(id, sizeof(id));
+ nbytes += dBprint("Message-ID: <%.*H@%s>\r\n",
+ sizeof(id), id, hostdomain);
}
+
+ if(originator == 0)
+ nbytes += dBprint("From: %s\r\n", s_to_c(fromline));
s_free(fromline);
- if(destination == 0 && toline)
- if(*s_to_c(toline) == '@'){ /* route addr */
- nbytes += Bprint(&bout, "To: <%s>\r\n", s_to_c(toline));
- if(debug)
- Bprint(&berr, "To: <%s>\r\n", s_to_c(toline));
- } else {
- nbytes += Bprint(&bout, "To: %s\r\n", s_to_c(toline));
- if(debug)
- Bprint(&berr, "To: %s\r\n", s_to_c(toline));
- }
+ if(destination == 0 && toline){
+ if(*s_to_c(toline) == '@') /* route addr */
+ nbytes += dBprint("To: <%s>\r\n", s_to_c(toline));
+ else
+ nbytes += dBprint("To: %s\r\n", s_to_c(toline));
+ }
if(date == 0 && udate)
nbytes += printdate(udate);