|
|
1.1 ! root 1: static char sccsid[] = "@(#)netmail.c 4.1 (Berkeley) 9/12/82"; ! 2: ! 3: /* sccs id variable */ ! 4: static 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 */ ! 34: struct userinfo status; ! 35: ! 36: main(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 */ ! 137: appss(sto,sfrom) ! 138: register char *sto, *sfrom; ! 139: { ! 140: strcat(sto," "); ! 141: strcat(sto,sfrom); ! 142: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.