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 #include "mail.h" 27 /* 28 * isheader(lp, ctf) - check if lp is header line and return type 29 * lp -> pointer to line 30 * ctfp -> continuation flag (should be FALSE the first time 31 * isheader() is called on a message. isheader() sets 32 * it for the remaining calls to that message) 33 * returns 34 * FALSE -> not header line 35 * H_* -> type of header line found. 36 */ 37 int 38 isheader(char *lp, int *ctfp) 39 { 40 char *p, *q; 41 int i; 42 43 p = lp; 44 while ((*p) && (*p != '\n') && (isspace(*p))) { 45 p++; 46 } 47 if ((*p == '\0') || (*p == '\n')) { 48 /* blank line */ 49 return (FALSE); 50 } 51 52 if ((*ctfp) && ((*lp == ' ') || (*lp == '\t'))) { 53 return (H_CONT); 54 } 55 56 *ctfp = FALSE; 57 for (i = 1; i < H_CONT; i++) { 58 if (!isit(lp, i)) { 59 continue; 60 } 61 if ((i == H_FROM) || (i == H_FROM1)) { 62 /* 63 * Should NEVER get 'From ' or '>From ' line on stdin 64 * if invoked as mail (rather than rmail) since 65 * 'From ' and/or '>From ' lines are generated by 66 * program itself. Therefore, if it DOES match and 67 * ismail == TRUE, it must be part of the content. 68 */ 69 if (sending && ismail && !deliverflag) { 70 return (FALSE); 71 } 72 } 73 *ctfp = TRUE; 74 return (i); 75 } 76 /* 77 * Check if name: value pair 78 */ 79 if ((p = strpbrk(lp, ":")) != NULL) { 80 for (q = lp; q < p; q++) { 81 if ((*q == ' ') || (!isprint(*q))) { 82 return (FALSE); 83 } 84 } 85 *ctfp = TRUE; 86 return (H_NAMEVALUE); 87 } 88 return (FALSE); 89 } 90