1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 23 /* All Rights Reserved */ 24 25 26 #pragma ident "%Z%%M% %I% %E% SMI" /* SVr4.0 1. */ 27 #include "mail.h" 28 /* 29 * isheader(lp, ctf) - check if lp is header line and return type 30 * lp -> pointer to line 31 * ctfp -> continuation flag (should be FALSE the first time 32 * isheader() is called on a message. isheader() sets 33 * it for the remaining calls to that message) 34 * returns 35 * FALSE -> not header line 36 * H_* -> type of header line found. 37 */ 38 int 39 isheader(lp, ctfp) 40 char *lp; 41 int *ctfp; 42 { 43 register char *p, *q; 44 register int i; 45 46 p = lp; 47 while((*p) && (*p != '\n') && (isspace(*p))) { 48 p++; 49 } 50 if((*p == NULL) || (*p == '\n')) { 51 /* blank line */ 52 return (FALSE); 53 } 54 55 if ((*ctfp) && ((*lp == ' ') || (*lp == '\t'))) { 56 return(H_CONT); 57 } 58 59 *ctfp = FALSE; 60 for (i = 1; i < H_CONT; i++) { 61 if (!isit(lp, i)) { 62 continue; 63 } 64 if ((i == H_FROM) || (i == H_FROM1)) { 65 /* 66 * Should NEVER get 'From ' or '>From ' line on stdin 67 * if invoked as mail (rather than rmail) since 68 * 'From ' and/or '>From ' lines are generated by 69 * program itself. Therefore, if it DOES match and 70 * ismail == TRUE, it must be part of the content. 71 */ 72 if (sending && ismail && !deliverflag) { 73 return (FALSE); 74 } 75 } 76 *ctfp = TRUE; 77 return (i); 78 } 79 /* 80 * Check if name: value pair 81 */ 82 if ((p = strpbrk(lp, ":")) != NULL ) { 83 for(q = lp; q < p; q++) { 84 if ((*q == ' ') || (!isprint(*q))) { 85 return(FALSE); 86 } 87 } 88 *ctfp = TRUE; 89 return(H_NAMEVALUE); 90 } 91 return(FALSE); 92 } 93