/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ #ident "%Z%%M% %I% %E% SMI" /* SVr4.0 1.6 */ #include "mail.h" /* Routine creates dead.letter */ void mkdead() { static char pn[] = "mkdead"; int aret; char *dotdead = &dead[1]; gid_t egid = getegid(); struct stat st; malf = (FILE *)NULL; /* Make certain that there's something to copy. */ if (!tmpf) return; /* Try to create dead letter in current directory or in home directory */ umask(umsave); setgid(getgid()); if ((aret = legal(dotdead)) && stat(dotdead, &st) == 0) malf = fopen(dotdead, "a"); if ((malf == NULL) || (aret == 0)) { /* try to create in $HOME */ if((hmdead = malloc(strlen(home) + strlen(dead) + 1)) == NULL) { fprintf(stderr, "%s: Can't malloc\n",program); Dout(pn, 0, "Cannot malloc.\n"); goto out; } cat(hmdead, home, dead); if ((aret=legal(hmdead)) && !(stat(hmdead, &st) < 0 && errno == EOVERFLOW)) malf = fopen(hmdead, "a"); if ((malf == NULL) || (aret == 0)) { fprintf(stderr, "%s: Cannot create %s\n", program,dotdead); Dout(pn, 0, "Cannot create %s\n", dotdead); out: fclose(tmpf); error = E_FILE; Dout(pn, 0, "error set to %d\n", error); umask(7); setegid(egid); return; } else { chmod(hmdead, DEADPERM); fprintf(stderr,"%s: Mail saved in %s\n",program,hmdead); } } else { chmod(dotdead, DEADPERM); fprintf(stderr,"%s: Mail saved in %s\n",program,dotdead); } /* Copy letter into dead letter box */ umask(7); aret = fseek(tmpf,0L,0); if (aret) errmsg(E_DEAD,""); if (!copystream(tmpf, malf)) errmsg(E_DEAD,""); fclose(malf); setegid(egid); } void savdead() { static char pn[] = "savdead"; setsig(SIGINT, saveint); dflag = 2; /* do not send back letter on interrupt */ Dout(pn, 0, "dflag set to 2\n"); if (!error) { error = E_REMOTE; Dout(pn, 0, "error set to %d\n", error); } maxerr = error; Dout(pn, 0, "maxerr set to %d\n", maxerr); }