1 # 2 3 /* 4 * Mail -- a mail program 5 * 6 * Computer Center Unix 7 * 8 * Local routines that are installation dependent. 9 */ 10 11 #include "rcv.h" 12 13 static char *SccsId = "@(#)cc.local.c 2.1 07/01/81"; 14 15 /* 16 * Locate the user's mailbox file (ie, the place where new, unread 17 * mail is queued). At Computer Center, it is in /usr/mail/name. 18 */ 19 20 findmail() 21 { 22 register char *cp; 23 24 cp = copy("/usr/mail/", mailname); 25 copy(myname, cp); 26 } 27 28 /* 29 * Get rid of the queued mail. 30 * This is essentially "mail -n > /dev/null &" 31 */ 32 33 demail() 34 { 35 register int p; 36 37 if (uid == 0) { 38 remove(mailname); 39 return; 40 } 41 if ((p = fork()) != 0) 42 return; 43 for (p = 0; p < 15; p++) 44 close(p); 45 open("/dev/null", 2); 46 dup(0); 47 dup(0); 48 for (p = SIGHUP; p <= SIGQUIT; p++) 49 signal(p, SIG_IGN); 50 execl(MAIL, "mail", "-n", 0); 51 perror(MAIL); 52 exit(1); 53 } 54 55 /* 56 * Get the value of an environment variable. 57 */ 58 59 char * 60 getenv(name) 61 char name[]; 62 { 63 register int t; 64 static char val[30]; 65 66 t = ttyn(2); 67 hget(t); 68 if (equal(name, "SHELL")) 69 return("/bin/csh"); 70 if (!equal(name, "HOME")) 71 return(NOSTR); 72 copy(hgethome(), val); 73 return(val); 74 } 75 76 /* 77 * Mail file lock / unlock. 78 * Not implemented in this version. 79 */ 80 81 lock(name) 82 char name[]; 83 { 84 85 return(0); 86 } 87 88 unlock() 89 { 90 return(0); 91 } 92 93 /* 94 * Discover user login name. 95 */ 96 97 username(uid, namebuf) 98 char namebuf[]; 99 { 100 101 return(getname(uid, namebuf)); 102 } 103 104 /* 105 * Unix routine to do an "fopen" on file descriptor 106 * The mode has to be repeated because you can't query its 107 * status 108 */ 109 110 FILE * 111 fdopen(fd, mode) 112 register char *mode; 113 { 114 extern int errno; 115 register FILE *iop; 116 extern FILE *_lastbuf; 117 118 for (iop = _iob; iop->_flag&(_IOREAD|_IOWRT); iop++) 119 if (iop >= _lastbuf) 120 return(NULL); 121 iop->_cnt = 0; 122 iop->_file = fd; 123 if (*mode != 'r') { 124 iop->_flag |= _IOWRT; 125 if (*mode == 'a') 126 lseek(fd, 0L, 2); 127 } else 128 iop->_flag |= _IOREAD; 129 return(iop); 130 } 131