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