diff -u ../zmailer-2.99.43/router/functions.c router/functions.c --- ../zmailer-2.99.43/router/functions.c Mon Nov 11 18:33:19 1996 +++ router/functions.c Sat Dec 28 05:12:45 1996 @@ -91,7 +91,7 @@ extern void setfreefd(); extern void v_purge(); -extern char *newattribute_2 __((struct conscell *, char *, char*)); +extern char *newattribute_2 __((char *, char *, char*)); #ifndef strchr extern char *strchr(), *strrchr(); @@ -1256,9 +1256,8 @@ struct address *ap; struct token **pt, *t; struct addr *pp; - struct conscell *attributes, *tmp; - struct conscell *al, *alp = NULL; - char *localpart, *origaddr; + struct conscell *al, *alp = NULL, *tmp; + char *localpart, *origaddr, *attributenam; int c, n, len, errflag, stuff; volatile int cnt; char *comment, *erroraddress; @@ -1327,7 +1326,8 @@ tmp = il; for (; tmp != NULL; tmp = cdr(tmp)) ++cnt; /* Count arguments.. */ - if (errflag || cnt != 3) { + if (errflag || cnt != 3 || + !STRING(il) || !STRING(cdr(il)) || !STRING(cddr(il)) ) { fprintf(stderr, "Usage: %s [ -e error-address ] [ -E errors-to-address ] [-p privilege] [ -c comment ] [ -N notarystring ] $attribute $localpart $origaddr < /file/path \n", car(avl)->string); @@ -1337,11 +1337,9 @@ return NULL; } - attributes = copycell(il); - car(attributes) = s_copy_tree(car(attributes)); - cdr(attributes) = NULL; - localpart = (char*) cdr(il)->string; - origaddr = (char*) cddr(il)->string; + attributenam = (char*) (il)->string; + localpart = (char*) cdr(il)->string; + origaddr = (char*) cddr(il)->string; /* We (memory-)leak this stuff for a moment.. */ e = (struct envelope *)tmalloc(sizeof (struct envelope)); @@ -1485,6 +1483,7 @@ for (ap = hs.h_contents.a; ap != NULL; ap = ap->a_next) { char *av[5]; int rc; + int omem; struct conscell *l, *d, *lrc; char *s, *s2, *se; @@ -1522,20 +1521,29 @@ ++s; } *s2 = 0; - s = newattribute_2(attributes,"DSN",DSNbuf); + s = newattribute_2(attributenam,"DSN",DSNbuf); + + omem = stickymem; + /* stickymem = MEM_MALLOC; */ l = newstring((u_char*)strsave(buf)); - cdr(l) = conststring((u_char*)origaddr); + cdr(l) = newstring((u_char*)strsave(origaddr)); cddr(l) = newstring((u_char*)strsave(s)); l = ncons(l); + stickymem = omem; + deferit = 0; v_set(DEFER, ""); rc = l_apply("rrouter", l); lrc = s_value; s_value = NULL; - s_free_tree(l); /* We can clean up the input list */ + + omem = stickymem; + /* stickymem = MEM_MALLOC; + s_free_tree(l); */ /* We can clean up the input list */ + stickymem = omem; #else lrc = router(ap, privilege, "recipient"); rc = (lrc == NULL); diff -u ../zmailer-2.99.43/router/shliaise.c router/shliaise.c --- ../zmailer-2.99.43/router/shliaise.c Thu Oct 31 19:03:47 1996 +++ router/shliaise.c Sat Dec 28 04:13:13 1996 @@ -357,16 +357,13 @@ /* * newattribute_2() */ -char *newattribute_2(oattr,nam,val) -struct conscell *oattr; -char *nam, *val; +char *newattribute_2(onam,nam,val) +char *onam, *nam, *val; { struct conscell *l, *lc, *tmp, **pl; struct conscell *l1; - if (!(LIST(oattr) && STRING(car(oattr)))) - return NULL; - l1 = v_find(car(oattr)->string); + l1 = v_find(onam); if (!l1) return NULL; l = copycell(cdr(l1));