/* xlocal.c it reads a message from stdin, adds X-Envelope-To: header into the message header and pass it to with arguments [args] */ #include #include char line[1024]; int p[2], status, i; char *args[30]; int main(int argc, char **argv) { if(argc<2) { fputs("Usage : xlocal [args]\n", stderr); return 1; } if(pipe(p) != 0) { fputs("pipe() failed", stderr); return 1; } switch(fork()) { case -1: fputs("fork() failed", stderr); return 1; break; case 0: close(0); dup(p[0]); close(p[1]); args[0] = argv[0]; for(i=3; i < argc; i++) args[i-2] = argv[i]; args[i] = NULL; execvp(argv[2], args); break; default: close(1); dup(p[1]); close(p[0]); } while(gets(line) != NULL) { if(line[0] == 0) break; puts(line); } printf("X-Envelope-To: %s\n\n", argv[1]); while(gets(line) != NULL) puts(line); sleep(1); return 0; }