xref: /illumos-gate/usr/src/cmd/mail/isheader.c (revision 9e364aca)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
57c478bd9Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
67c478bd9Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
77c478bd9Sstevel@tonic-gate  * with the License.
87c478bd9Sstevel@tonic-gate  *
97c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
107c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
117c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
127c478bd9Sstevel@tonic-gate  * and limitations under the License.
137c478bd9Sstevel@tonic-gate  *
147c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
157c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
167c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
177c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
187c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
197c478bd9Sstevel@tonic-gate  *
207c478bd9Sstevel@tonic-gate  * CDDL HEADER END
217c478bd9Sstevel@tonic-gate  */
227c478bd9Sstevel@tonic-gate /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
23*9e364acaSToomas Soome /*	  All Rights Reserved	*/
247c478bd9Sstevel@tonic-gate 
257c478bd9Sstevel@tonic-gate 
267c478bd9Sstevel@tonic-gate #include "mail.h"
277c478bd9Sstevel@tonic-gate /*
287c478bd9Sstevel@tonic-gate  * isheader(lp, ctf) - check if lp is header line and return type
29*9e364acaSToomas Soome  *	lp	->	pointer to line
307c478bd9Sstevel@tonic-gate  *	ctfp	->	continuation flag (should be FALSE the first time
317c478bd9Sstevel@tonic-gate  *			isheader() is called on a message.  isheader() sets
327c478bd9Sstevel@tonic-gate  *			it for the remaining calls to that message)
337c478bd9Sstevel@tonic-gate  * returns
347c478bd9Sstevel@tonic-gate  *	FALSE	->	not header line
357c478bd9Sstevel@tonic-gate  *	H_*     ->	type of header line found.
367c478bd9Sstevel@tonic-gate  */
377c478bd9Sstevel@tonic-gate int
isheader(char * lp,int * ctfp)38*9e364acaSToomas Soome isheader(char *lp, int *ctfp)
397c478bd9Sstevel@tonic-gate {
40*9e364acaSToomas Soome 	char	*p, *q;
41*9e364acaSToomas Soome 	int	i;
427c478bd9Sstevel@tonic-gate 
437c478bd9Sstevel@tonic-gate 	p = lp;
44*9e364acaSToomas Soome 	while ((*p) && (*p != '\n') && (isspace(*p))) {
457c478bd9Sstevel@tonic-gate 		p++;
467c478bd9Sstevel@tonic-gate 	}
47*9e364acaSToomas Soome 	if ((*p == '\0') || (*p == '\n')) {
487c478bd9Sstevel@tonic-gate 		/* blank line */
497c478bd9Sstevel@tonic-gate 		return (FALSE);
507c478bd9Sstevel@tonic-gate 	}
517c478bd9Sstevel@tonic-gate 
527c478bd9Sstevel@tonic-gate 	if ((*ctfp) && ((*lp == ' ') || (*lp == '\t'))) {
53*9e364acaSToomas Soome 		return (H_CONT);
547c478bd9Sstevel@tonic-gate 	}
557c478bd9Sstevel@tonic-gate 
567c478bd9Sstevel@tonic-gate 	*ctfp = FALSE;
577c478bd9Sstevel@tonic-gate 	for (i = 1; i < H_CONT; i++) {
587c478bd9Sstevel@tonic-gate 		if (!isit(lp, i)) {
597c478bd9Sstevel@tonic-gate 			continue;
607c478bd9Sstevel@tonic-gate 		}
617c478bd9Sstevel@tonic-gate 		if ((i == H_FROM) || (i == H_FROM1)) {
627c478bd9Sstevel@tonic-gate 			/*
637c478bd9Sstevel@tonic-gate 			 * Should NEVER get 'From ' or '>From ' line on stdin
647c478bd9Sstevel@tonic-gate 			 * if invoked as mail (rather than rmail) since
657c478bd9Sstevel@tonic-gate 			 * 'From ' and/or '>From ' lines are generated by
667c478bd9Sstevel@tonic-gate 			 * program itself. Therefore, if it DOES match and
677c478bd9Sstevel@tonic-gate 			 * ismail == TRUE, it must be part of the content.
687c478bd9Sstevel@tonic-gate 			 */
697c478bd9Sstevel@tonic-gate 			if (sending && ismail && !deliverflag) {
707c478bd9Sstevel@tonic-gate 				return (FALSE);
717c478bd9Sstevel@tonic-gate 			}
727c478bd9Sstevel@tonic-gate 		}
737c478bd9Sstevel@tonic-gate 		*ctfp = TRUE;
747c478bd9Sstevel@tonic-gate 		return (i);
757c478bd9Sstevel@tonic-gate 	}
767c478bd9Sstevel@tonic-gate 	/*
777c478bd9Sstevel@tonic-gate 	 * Check if name: value pair
78*9e364acaSToomas Soome 	 */
79*9e364acaSToomas Soome 	if ((p = strpbrk(lp, ":")) != NULL) {
80*9e364acaSToomas Soome 		for (q = lp; q < p; q++)  {
817c478bd9Sstevel@tonic-gate 			if ((*q == ' ') || (!isprint(*q)))  {
82*9e364acaSToomas Soome 				return (FALSE);
837c478bd9Sstevel@tonic-gate 			}
847c478bd9Sstevel@tonic-gate 		}
857c478bd9Sstevel@tonic-gate 		*ctfp = TRUE;
86*9e364acaSToomas Soome 		return (H_NAMEVALUE);
877c478bd9Sstevel@tonic-gate 	}
88*9e364acaSToomas Soome 	return (FALSE);
897c478bd9Sstevel@tonic-gate }
90