|
|
1.1 ! root 1: /* @(#)mailst.c 1.3 */ ! 2: ! 3: #include "uucp.h" ! 4: VERSION(@(#)mailst.c 1.3); ! 5: ! 6: /* ! 7: * fork and execute a mail command sending ! 8: * string (str) to user (user). ! 9: * If file is non-null, the file is also sent. ! 10: * (this is used for mail returned to sender.) ! 11: * user -> user to send mail to ! 12: * str -> string mailed to user ! 13: * infile -> optional stdin mailed to user ! 14: * errfile -> optional stderr mailed to user ! 15: * ! 16: * a upas-ism -- call rmail and make up our own From line, ! 17: * so mail comes from uucp, not some arbitrary user ! 18: */ ! 19: char *ctime(); ! 20: long time(); ! 21: ! 22: mailst(user, str, infile, errfile) ! 23: char *user, *str, *infile, *errfile; ! 24: { ! 25: register FILE *fp, *fi; ! 26: char cmd[BUFSIZ]; ! 27: char *c; ! 28: long now; ! 29: ! 30: /* get rid of some stuff that could hurt */ ! 31: if ( (c = strpbrk(user, ";&|<>^`\\('\"")) != NULL) ! 32: *c = NULLCHAR; ! 33: (void) sprintf(cmd, "%s rmail %s", PATH, user); ! 34: if ((fp = popen(cmd, "w")) == NULL) ! 35: return; ! 36: now = time((long *)0); ! 37: fprintf(fp, "From uucp %.24s remote from %s\n", ctime(&now), Myname); ! 38: fprintf(fp, "From: %s!uucp\n", Myname); ! 39: (void) fprintf(fp, "%s\n", str); ! 40: ! 41: /* copy back stderr */ ! 42: if (*errfile != '\0' && NOTEMPTY(errfile) && (fi = fopen(errfile, "r")) != NULL) { ! 43: fputs("\n\t===== stderr was =====\n", fp); ! 44: if (xfappend(fi, fp) != SUCCESS) ! 45: fputs("\n\t===== well, i tried =====\n", fp); ! 46: (void) fclose(fi); ! 47: fputc('\n', fp); ! 48: } ! 49: ! 50: /* copy back stdin */ ! 51: if (*infile != '\0' && NOTEMPTY(infile) && (fi = fopen(infile, "r")) != NULL) { ! 52: fputs("\n\t===== stdin was =====\n", fp); ! 53: if (xfappend(fi, fp) != SUCCESS) ! 54: fputs("\n\t===== well, i tried =====\n", fp); ! 55: (void) fclose(fi); ! 56: fputc('\n', fp); ! 57: } ! 58: ! 59: (void) pclose(fp); ! 60: } ! 61: #ifndef V7 ! 62: static char un[2*NAMESIZE]; ! 63: setuucp(p) ! 64: char *p; ! 65: { ! 66: char **envp; ! 67: ! 68: envp = Env; ! 69: for ( ; *envp; envp++) { ! 70: if(PREFIX("LOGNAME", *envp)) { ! 71: (void) sprintf(un, "LOGNAME=%s",p); ! 72: envp[0] = &un[0]; ! 73: } ! 74: } ! 75: } ! 76: #else ! 77: /*ARGSUSED*/ ! 78: setuucp(p) char *p; {} ! 79: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.