1: static char sccsid[] = "@(#)sendberkmail.c	4.1	(Berkeley)	9/12/82";
   2: 
   3: # include "defs.h"
   4: 
   5: /*
   6: Usage:
   7: 	sendberkmail [-m mach ] [-f addrfrom] [-h hopcnt] -t addrto
   8: 
   9: Archaic Usage:
  10: 	sendberkmail mach:user
  11: 
  12: 	Send remote mail to user on mach.
  13: 	Only one addrto allowed.
  14: 
  15: 	Sendberkmail uses the network to send an mmail command
  16: 	to the remote machine.  It specifies the source, destination,
  17: 	and a hop count only.
  18: 
  19: 	Sendberkmail uses the -q option of net, so only error msgs
  20: 	and non-zero return codes will be sent back.
  21: 
  22: 	It is best to think of sendberkmail as a transport mechanism:
  23: 	It takes mail from one machine to another machine (specified
  24: 	using the -m option) and executes the local mail program
  25: 	there with a to-address of "addrto", and a from-address
  26: 	of "addrfrom".  If the -m option is not given, it parses the
  27: 	"addrto" field to get a berkeley network address.
  28: 	This extreme generality is necessary when destinations are on
  29: 	different networks, consider a command from the Ing70:
  30: 
  31: 		sendberkmail -m csvax -f schmidt@parc -t research!chuck
  32: 
  33: 	This is clearly a forwarding function- send mail from the Arpanet
  34: 	to the Bell Net, which calls our CSVAX.
  35: 	Alternatively, executed on the CSVAX,
  36: 		sendberkmail -m ing70 -f research!chuck -t schmidt@parc
  37: 	sends mail the other way.
  38: 
  39: 	There is duplication in the arguments because of
  40: 	a need to convert to labelled parameters.
  41: 	See the note in mmail.c to that effect.
  42: 
  43: 
  44: 	Options:
  45: 		-t addrto	mail command on remote machine will be
  46: 				fed "addrto" as address
  47: 		-f addrfrom	mail will be "From" addrfrom
  48: 		-m mach		send this mail to the "mach" machine
  49: 		-h hopcnt	if this hopcnt hits a threshold, there
  50: 				is presumed to be an infinite loop.
  51: 
  52: */
  53: main(argc,argv)
  54:   char **argv; {
  55:     char addrto[BUFSIZ], addrfrom[BUFSIZ], *sn;
  56:     char mchto = 0, snto[BUFSIZ], snfrom[BUFSIZ], smchto[20], mchfrom;
  57:     int cmdstr[BUFSIZ], hopcntstr[20];
  58:     char rcmd[BUFSIZ];
  59:     int hopcnt = 0;
  60: 
  61:     argc[argv] = 0;
  62:     debugflg = DBV;
  63:     addrfrom[0] = 0;
  64:     addrto[0] = 0;
  65: 
  66:     while(argc > 1 && argv[1][0] == '-'){
  67:         argc--; argv++;
  68:         switch(argv[0][1]){
  69:         case 'f':
  70:             harg(addrfrom);
  71:             break;
  72:         case 'h':
  73:             harg(hopcntstr);
  74:             hopcnt = atoi(hopcntstr);
  75:             break;
  76:         case 'm':
  77:             harg(smchto);
  78:             mchto = lookup(smchto);
  79:             break;
  80:         case 't':
  81:             harg(addrto);
  82:             break;
  83:         /* it is important to ignore unknown flags
  84: 		   for compatibility reasons */
  85:         }
  86:     }
  87: 
  88:     /* handle to address */
  89:     if(argc > 1)strcpy(addrto,argv[1]);
  90:     if(addrto[0] == 0){
  91:         fprintf(stderr,"Usage: sendberkmail mach:user\n");
  92:         exit(EX_USAGE);
  93:     }
  94:     if(mchto == 0)
  95:         mchto = MchSFromAddr(snto,addrto);
  96:     else
  97:         strcpy(snto,addrto);
  98:     if(mchto == 0){
  99:         fprintf(stderr,"Unknown host %s\n",addrto);
 100:         exit(EX_NOHOST);
 101:     };
 102:     if(mchto == local){
 103:         fprintf(stderr,
 104:         "Use mail to send to %s on this machine. Mail not delivered.\n",
 105:             addrto);
 106:         exit(EX_NOUSER);
 107:     }
 108:     sprintf(rcmd,"mail %s",addrto);
 109: 
 110:     /* handle from address */
 111:     if(addrfrom[0] == 0){
 112:         char name[100];
 113:         SnCurrent(name);
 114:         sprintf(addrfrom,"%s:%s",longname(local),name);
 115:     }
 116:     mchfrom = MchSFromAddr(snfrom,addrfrom);
 117: 
 118:     /* uses new options of mmail */
 119:     /* X's are for compatibility with mmail */
 120:     sprintf(cmdstr,"%s XXX XXX XXX -f '%s' -t '%s' -h %d", MMAILCMD,
 121:         addrfrom,addrto,hopcnt);
 122:     /* old code:
 123: 	sprintf(cmdstr,"%s '%s' %s '%s'", MMAILCMD,snfrom,
 124: 		longname(mchfrom),snto);
 125: 	*/
 126: 
 127: 
 128:     mexecl(netcmd,"net","-m",longname(mchto),"-q","-l","network",
 129:         "-","-c",rcmd,cmdstr,0);
 130:     perror(netcmd);
 131:     fprintf(stderr,"Network is down\n");
 132:     exit(EX_UNAVAILABLE);
 133: }
 134: 
 135: SnCurrent(name)
 136:   char *name;
 137:     {
 138:     char *sn;
 139:     sn = getlogin();
 140:     if(sn == NULL || *sn == 0 || *sn == ' '){
 141:         struct passwd *pwd;
 142:         pwd = getpwuid(getuid());   /* will read passwd file */
 143:         if(pwd != NULL) sn = pwd->pw_name;
 144:         if(sn == NULL){
 145:             fprintf(stderr,"Who are you?\n");
 146:             exit(EX_OSERR);
 147:         }
 148:     }
 149:     strcpy(name, sn);
 150: }

Defined functions

SnCurrent defined in line 135; used 1 times
main defined in line 53; never used

Defined variables

sccsid defined in line 1; never used
Last modified: 1982-09-13
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1050
Valid CSS Valid XHTML 1.0 Strict