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 /* 23 * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 28 /* All Rights Reserved */ 29 30 31 #pragma ident "%Z%%M% %I% %E% SMI" 32 33 #include "mail.h" 34 /* 35 Parse the command line. 36 Return index of first non-option field (i.e. user) 37 */ 38 int 39 parse(int argc, char **argv) 40 { 41 int c; 42 char *tmailsurr; 43 static char pn[] = "parse"; 44 45 /* 46 "mail +" means to print in reverse order and is 47 equivalent to "mail -r" 48 */ 49 if ((argc > 1) && (argv[1][0] == '+')) { 50 if (ismail) { 51 argv[1] = "-r"; 52 } else { 53 goerr++; 54 } 55 } 56 57 while ((c = getopt(argc, argv, "m:f:x:shrpPqeEdtT:w")) != EOF) { 58 switch(c) { 59 /* 60 Set debugging level... 61 */ 62 case 'x': 63 debug = atoi(optarg); 64 orig_dbglvl = debug; 65 if (debug < 0) { 66 /* Keep trace file even if successful */ 67 keepdbgfile = -1; 68 debug = -debug; 69 } 70 break; 71 72 /* 73 for backwards compatability with mailx... 74 */ 75 case 's': 76 /* ignore this option */ 77 break; 78 /* 79 * Deliver directly to a mailbox. Do Not go to sendmail 80 */ 81 case 'd': 82 deliverflag = TRUE; 83 break; 84 85 /* 86 do not print mail 87 */ 88 case 'e': 89 if (ismail) { 90 flge = 1; 91 } else { 92 goerr++; 93 } 94 optcnt++; 95 break; 96 /* 97 do not print mail 98 */ 99 case 'E': 100 if (ismail) { 101 flgE = 1; 102 } else { 103 goerr++; 104 } 105 optcnt++; 106 break; 107 /* 108 * use alternate file as mailfile, when reading mail 109 * use this from user when sending mail. 110 */ 111 case 'f': 112 flgf = 1; 113 fromflag = TRUE; 114 mailfile = optarg; 115 strncpy(from_user, optarg, sizeof (from_user)); 116 from_user[sizeof (from_user) - 1] = '\0'; 117 optcnt++; 118 break; 119 120 /* 121 Print headers first 122 */ 123 case 'h': 124 if (ismail) { 125 flgh = 1; 126 } else { 127 goerr++; 128 } 129 optcnt++; 130 break; 131 132 /* 133 print without prompting 134 */ 135 case 'p': 136 if (ismail) { 137 flgp++; 138 } else { 139 goerr++; 140 } 141 optcnt++; 142 break; 143 144 /* 145 override selective display default setting 146 when reading mail... 147 */ 148 case 'P': 149 if (ismail) { 150 flgP++; 151 } 152 optcnt++; 153 break; 154 155 /* 156 terminate on deletes 157 */ 158 case 'q': 159 if (ismail) { 160 delflg = 0; 161 } else { 162 goerr++; 163 } 164 optcnt++; 165 break; 166 167 /* 168 print by first in, first out order 169 */ 170 case 'r': 171 if (ismail) { 172 flgr = 1; 173 } else { 174 goerr++; 175 } 176 optcnt++; 177 break; 178 179 /* 180 add To: line to letters 181 */ 182 case 't': 183 flgt = 1; 184 optcnt++; 185 break; 186 187 /* 188 don't wait on sends 189 */ 190 case 'w': 191 flgw = 1; 192 break; 193 194 /* 195 set message-type: 196 */ 197 case 'm': 198 msgtype = optarg; 199 if (msgtype[0] == '\0' || msgtype[0] == '-') { 200 goerr++; 201 } else { 202 flgm = 1; 203 } 204 break; 205 206 /* 207 bad option 208 */ 209 case '?': 210 goerr++; 211 break; 212 } 213 } 214 215 216 217 if (argc == optind) { 218 219 if (flgm) { 220 errmsg(E_SYNTAX, 221 "-m option used but no recipient(s) specified."); 222 goerr++; 223 } 224 if (flgt) { 225 errmsg(E_SYNTAX, 226 "-t option used but no recipient(s) specified."); 227 goerr++; 228 } 229 if (flgw) { 230 errmsg(E_SYNTAX, 231 "-w option used but no recipient(s) specified."); 232 goerr++; 233 } 234 if (flgf) { 235 if (mailfile[0] == '-') { 236 errmsg(E_SYNTAX, 237 "Files names must not begin with '-'"); 238 done(0); 239 } 240 if (!ismail) 241 goerr++; 242 } 243 } 244 245 if (ismail && (goerr > 0)) { 246 errmsg(E_SYNTAX,"Usage: [-ehpPqr] [-f file] [-x debuglevel]"); 247 (void) fprintf (stderr, "or\t[-tw] [-m message_type] [-T file] [-x debuglevel] persons\n"); 248 (void) fprintf (stderr, "or\t[-x debuglevel]\n"); 249 done(0); 250 } 251 252 return (optind); 253 } 254