|
|
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: mailst(user, str, infile, errfile)
17: char *user, *str, *infile, *errfile;
18: {
19: register FILE *fp, *fi;
20: char cmd[BUFSIZ];
21: char *c;
22:
23: /* get rid of some stuff that could hurt */
24: if ( (c = strpbrk(user, ";&|<>^`\\('\"")) != NULL) {
25: *c = NULLCHAR;
26: }
27:
28: (void) sprintf(cmd, "%s mail %s", PATH, user);
29: if ((fp = popen(cmd, "w")) == NULL)
30: return;
31: (void) fprintf(fp, "%s\n", str);
32:
33: /* copy back stderr */
34: if (*errfile != '\0' && NOTEMPTY(errfile) && (fi = fopen(errfile, "r")) != NULL) {
35: fputs("\n\t===== stderr was =====\n", fp);
36: if (xfappend(fi, fp) != SUCCESS)
37: fputs("\n\t===== well, i tried =====\n", fp);
38: (void) fclose(fi);
39: fputc('\n', fp);
40: }
41:
42: /* copy back stdin */
43: if (*infile != '\0' && NOTEMPTY(infile) && (fi = fopen(infile, "r")) != NULL) {
44: fputs("\n\t===== stdin was =====\n", fp);
45: if (xfappend(fi, fp) != SUCCESS)
46: fputs("\n\t===== well, i tried =====\n", fp);
47: (void) fclose(fi);
48: fputc('\n', fp);
49: }
50:
51: (void) pclose(fp);
52: }
53: #ifndef V7
54: static char un[2*NAMESIZE];
55: setuucp(p)
56: char *p;
57: {
58: char **envp;
59:
60: envp = Env;
61: for ( ; *envp; envp++) {
62: if(PREFIX("LOGNAME", *envp)) {
63: (void) sprintf(un, "LOGNAME=%s",p);
64: envp[0] = &un[0];
65: }
66: }
67: }
68: #else
69: /*ARGSUSED*/
70: setuucp(p) char *p; {}
71: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.