|
|
1.1 root 1: /*
2:
3: netmail [-c] [-l ...] [-p ...] [-f] [-n] [-q] ([mach] | [mach:username])
4:
5: Read mail on remote machine "mach"
6: Sends a command to the remote machine to "mail" the mail
7: to this machine.
8:
9: If the -c option is specified, this command is a mail check command,
10: and in this mode it logs into the remote machine as "network"
11: and determines if mach:username has mail.
12: It writes/mails a message to that effect.
13: This variant is intended to be used in .login files, silently
14: checking if you have mail on another machine.
15:
16: Must duplicate effort that will be redone by the net command-
17: the calls to commandfile and promptlogin are necessary
18: to get a value for the login name to send to the prmail
19: command on the other machine.
20: May read the passwd file:
21: 1. Commandfile calls getenv(HOME) to get the home directory.
22: If not easily reached,....
23: 2. SnCurrent() calls getlogin(). If no entry in utmp file,
24: will read passwd file.
25: */
26: # include "defs.h"
27:
28: /* global variables */
29: struct userinfo status;
30:
31: main(argc,argv)
32: char **argv; {
33: char *s;
34: char machparm[BUFSIZ], fromaddress[BUFSIZ], fMailCheck = 0;
35: char rcmd[BUFSIZ], fquiet = 0;
36: debugflg = DBV;
37: strcpy(rcmd,"netmail");
38: argc--; argv++;
39: while(argc > 0 && argv[0][0] == '-'){
40: switch(argv[0][1]){
41: case 'b': status.nonotify++; appss(rcmd,argv[0]); break;
42: case 'c': fMailCheck++; appss(rcmd,argv[0]); break;
43: case 'f': status.force++; appss(rcmd,argv[0]); break;
44: case 'l': harg(status.login,&argc,&argv); break;
45: case 'n': status.nowrite++; appss(rcmd,argv[0]); break;
46: case 'p': harg(status.mpasswd,&argc,&argv); break;
47: case 'q': fquiet = 1; appss(rcmd,argv[0]); break;
48: default:
49: fprintf(stderr,
50: "Usage: netmail [-l login] [-p password] [-c] [-f] [-n] [-q] [mach]\n");
51: exit(EX_USAGE);
52: }
53: argc--, argv++;
54: }
55: if(argc > 0){
56: if(FMemberSCh(argv[0],':'))
57: remote = MchSFromAddr(status.login,argv[0]);
58: else
59: remote = lookup(argv[0]);
60: if(remote == 0){
61: fprintf(stderr,"Unknown machine %s\n",argv[0]);
62: exit(EX_NOHOST);
63: }
64: appss(rcmd,argv[0]);
65: }
66:
67: /* read the .netrc file to get a value for remote */
68: /* will get status.login, passwd, and force for fetch variant */
69: commandfile();
70: if(remote == 0)remote = getremote(local);
71: sprintf(machparm,"-m%c",remote);
72:
73:
74: if(remote == local){
75: fprintf(stderr,
76: "Use the mail command to read your mail on this machine.\n");
77: exit(EX_USAGE);
78: }
79:
80: /* read pw file, get local addr to send to prmail, store in status.localname */
81: s = SnFromUid(getuid());
82: if(s == NULL){
83: fprintf(stderr,"Unknown local user\n");
84: exit(EX_OSFILE);
85: }
86: strcpy(status.localname,s);
87: sprintf(fromaddress,"%s:%s",longname(local),s);
88:
89: /* mail check variant */
90: if(fMailCheck){
91: if(status.login[0] == 0){
92: fprintf(stderr,
93: "Must supply a remote user name for mail check.\n");
94: exit(EX_USAGE);
95: }
96: /* send mail check over, no passwd needed */
97: if(fquiet)
98: mexecl(netcmd,"net","-q",machparm,"-l","network",
99: "-c",rcmd,
100: PRMAIL,"-c","-l",status.login,"-f",fromaddress,0);
101: else
102: mexecl(netcmd,"net","-q",machparm,"-l","network",
103: "-c",rcmd,
104: PRMAIL,"-c","-l",status.login,"-f",fromaddress,"-k",0);
105: perror(netcmd);
106: fprintf(stderr,"Network is down\n");
107: exit(EX_UNAVAILABLE);
108: }
109:
110: /* mail forward variant */
111:
112: /*
113: get name to send as parameter to prmail.
114: required for multiple login names with the same uid's
115: stored in status.login
116: */
117: envloginpasswd(remote,status.login,status.mpasswd); /* look in env */
118: promptlogin(remote); /* prompt for name, passwd explicitely */
119:
120: if(fquiet)
121: kexecl(netcmd,"net","-q",machparm,"-c",rcmd,PRMAIL,"-l",
122: status.login,"-f",fromaddress,"-r",0);
123: else
124: kexecl(netcmd,"net","-q",machparm,"-c",rcmd,PRMAIL,"-l",
125: status.login,"-f",fromaddress,"-r","-k",0);
126: perror(netcmd);
127: fprintf(stderr,"Network is down\n");
128: exit(EX_UNAVAILABLE);
129: }
130: /*
131: append string sfrom to end of string sto, preceded by blank */
132: appss(sto,sfrom)
133: register char *sto, *sfrom;
134: {
135: strcat(sto," ");
136: strcat(sto,sfrom);
137: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.