diff options
Diffstat (limited to 'src/cmd/upas/send')
-rw-r--r-- | src/cmd/upas/send/message.c | 4 | ||||
-rw-r--r-- | src/cmd/upas/send/mkfile | 20 | ||||
-rw-r--r-- | src/cmd/upas/send/rewrite.c | 46 |
3 files changed, 46 insertions, 24 deletions
diff --git a/src/cmd/upas/send/message.c b/src/cmd/upas/send/message.c index eab6160c..8cee34a0 100644 --- a/src/cmd/upas/send/message.c +++ b/src/cmd/upas/send/message.c @@ -143,7 +143,7 @@ getstring(Node *p) return s; } -#if 0 /* jpc */ +#if 0 static char *fieldname[] = { [WORD-WORD] "WORD", @@ -172,7 +172,7 @@ static char *fieldname[] = [MAILER-WORD] "MAILER", [BADTOKEN-WORD] "BADTOKEN", }; -#endif /* jpc */ +#endif /* fix 822 addresses */ static void diff --git a/src/cmd/upas/send/mkfile b/src/cmd/upas/send/mkfile index a49fde17..937b318d 100644 --- a/src/cmd/upas/send/mkfile +++ b/src/cmd/upas/send/mkfile @@ -21,22 +21,13 @@ SMOBJ=main.$O\ gateway.$O\ cat_mail.$O\ -LIB=../common/libcommon.av\ - HFILES=send.h\ ../common/common.h\ ../common/sys.h\ -LIB=../common/libcommon.a\ - -BIN=$PLAN9/bin/upas -UPDATE=\ - mkfile\ - $HFILES\ - ${UOFILES:%.$O=%.c}\ - ${SMOBJ:%.$O=%.c}\ - ${TARG:%=%.c}\ +LIB=../common/libcommon.a +BIN=$BIN/upas <$PLAN9/src/mkmany CFLAGS=$CFLAGS -I../common @@ -46,7 +37,6 @@ $O.send: $SMOBJ $OFILES message.$O: ../smtp/y.tab.h ../smtp/y.tab.h ../smtp/rfc822.tab.$O: ../smtp/rfc822.y -# @{ - cd ../smtp - mk rfc822.tab.$O -# } + cd ../smtp + mk rfc822.tab.$O + diff --git a/src/cmd/upas/send/rewrite.c b/src/cmd/upas/send/rewrite.c index 4f40b293..2feacbf2 100644 --- a/src/cmd/upas/send/rewrite.c +++ b/src/cmd/upas/send/rewrite.c @@ -131,7 +131,7 @@ getrules(void) String *type; String *file; - file = abspath("rewrite", unsharp(UPASLIB), (String *)0); + file = abspath("rewrite", UPASLIB, (String *)0); rfp = sysopen(s_to_c(file), "r", 0); if(rfp == 0) { rulep = 0; @@ -168,7 +168,7 @@ findrule(String *addrp, int authorized) continue; memset(rp->subexp, 0, sizeof(rp->subexp)); if(debug) - print("matching %s aginst %s\n", s_to_c(addrp), rp->matchre->base); + fprint(2, "matching %s aginst %s\n", s_to_c(addrp), rp->matchre->base); if(regexec(rp->program, s_to_c(addrp), rp->subexp, NSUBEXP)) if(s_to_c(addrp) == rp->subexp[0].s.sp) if((s_to_c(addrp) + strlen(s_to_c(addrp))) == rp->subexp[0].e.ep) @@ -203,17 +203,45 @@ rewrite(dest *dp, message *mp) dp->repl2 = substitute(rp->repl2, rp->subexp, mp); dp->status = rp->type; if(debug){ - print("\t->"); + fprint(2, "\t->"); if(dp->repl1) - print("%s", s_to_c(dp->repl1)); + fprint(2, "%s", s_to_c(dp->repl1)); if(dp->repl2) - print("%s", s_to_c(dp->repl2)); - print("\n"); + fprint(2, "%s", s_to_c(dp->repl2)); + fprint(2, "\n"); } s_free(lower); return 0; } +/* stolen from rc/lex.c */ +static int +idchr(int c) +{ + return c>' ' && !strchr("!\"#$%&'()+,-./:;<=>?@[\\]^`{|}~", c); +} + +static char* +getrcvar(char* p, char** rv) +{ + char* p0; + char buf[128]; + char* bufe; + + *rv = 0; + p0=p; + bufe=buf+sizeof buf-1; + while(p<bufe && idchr(*p)) + p++; + + memcpy(buf, p0, p-p0); + buf[p-p0]=0; + *rv = getenv(buf); + if (debug) + fprint(2, "varsubst: %s → %s\n", buf, *rv); + return p; +} + static String * substitute(String *source, Resub *subexp, message *mp) { @@ -264,11 +292,15 @@ substitute(String *source, Resub *subexp, message *mp) s_putc(stp, *sp); break; } - } else if(*sp == '&') { + } else if(*sp == '&') { if(subexp[0].s.sp != 0) for (s = subexp[0].s.sp; s < subexp[0].e.ep; s++) s_putc(stp, *s); + } else if(*sp == '$') { + sp = getrcvar(sp+1, &s); + s_append(stp, s); + free(s); } else s_putc(stp, *sp); sp++; |