xref: /illumos-gate/usr/src/cmd/mail/isheader.c (revision 7c478bd95313f5f23a4c958a745db2134aa03244)
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