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