1/* 2 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * "Portions Copyright (c) 1999 Apple Computer, Inc. All Rights 7 * Reserved. This file contains Original Code and/or Modifications of 8 * Original Code as defined in and that are subject to the Apple Public 9 * Source License Version 1.0 (the 'License'). You may not use this file 10 * except in compliance with the License. Please obtain a copy of the 11 * License at http://www.apple.com/publicsource and read it before using 12 * this file. 13 * 14 * The Original Code and all software distributed under the License are 15 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 16 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 17 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the 19 * License for the specific language governing rights and limitations 20 * under the License." 21 * 22 * @APPLE_LICENSE_HEADER_END@ 23 */ 24/* $OpenBSD: stdhosts.c,v 1.4 1997/09/11 19:47:35 deraadt Exp $ */ 25 26/* 27 * Copyright (c) 1994 Mats O Jansson <moj@stacken.kth.se> 28 * All rights reserved. 29 * 30 * Redistribution and use in source and binary forms, with or without 31 * modification, are permitted provided that the following conditions 32 * are met: 33 * 1. Redistributions of source code must retain the above copyright 34 * notice, this list of conditions and the following disclaimer. 35 * 2. Redistributions in binary form must reproduce the above copyright 36 * notice, this list of conditions and the following disclaimer in the 37 * documentation and/or other materials provided with the distribution. 38 * 3. All advertising materials mentioning features or use of this software 39 * must display the following acknowledgement: 40 * This product includes software developed by Mats O Jansson 41 * 4. The name of the author may not be used to endorse or promote products 42 * derived from this software without specific prior written permission. 43 * 44 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 45 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 46 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 47 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 48 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 49 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 50 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 51 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 52 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 53 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 54 * SUCH DAMAGE. 55 */ 56 57#include <sys/cdefs.h> 58#ifndef LINT 59__unused static char rcsid[] = "$OpenBSD: stdhosts.c,v 1.4 1997/09/11 19:47:35 deraadt Exp $"; 60#endif 61 62#include <sys/types.h> 63#include <sys/socket.h> 64#include <netinet/in.h> 65#include <arpa/inet.h> 66#include <stdio.h> 67#include <stdlib.h> 68#include <string.h> 69#include <ctype.h> 70 71static int read_line(fp, buf, size) 72FILE *fp; 73char *buf; 74int size; 75{ 76 int done = 0; 77 78 do { 79 while (fgets(buf, size, fp)) { 80 int len = strlen(buf); 81 done += len; 82 if (len > 1 && buf[len-2] == '\\' && 83 buf[len-1] == '\n') { 84 int ch; 85 buf += len - 2; 86 size -= len - 2; 87 *buf = '\n'; buf[1] = '\0'; 88 /* 89 * Skip leading white space on next line 90 */ 91 while ((ch = getc(fp)) != EOF && 92 isascii(ch) && isspace(ch)) 93 ; 94 (void) ungetc(ch, fp); 95 } else { 96 return done; 97 } 98 } 99 } while (size > 0 && !feof(fp)); 100 101 return done; 102} 103 104int 105main (argc,argv) 106int argc; 107char *argv[]; 108{ 109 FILE *data_file; 110 char data_line[1024]; 111 int usage = 0; 112 int line_no = 0; 113 int len; 114 char *p,*k,*v; 115 struct in_addr host_addr; 116 117 if (argc > 2) { 118 usage++; 119 } 120 121 if (usage) { 122 fprintf(stderr, 123 "%s", 124 "usage: stdhosts [file]\n"); 125 exit(1); 126 } 127 128 if (argc == 2) { 129 data_file = fopen(argv[argc-1], "r"); 130 } else { 131 data_file = stdin; 132 } 133 134 while (read_line(data_file,data_line,sizeof(data_line))) { 135 136 line_no++; 137 len = strlen(data_line); 138 139 if (len > 0) { 140 if (data_line[0] == '#') 141 continue; 142 } 143 144 /* 145 * Check if we have the whole line 146 */ 147 148 if (data_line[len-1] != '\n') { 149 if (argc == 2) { 150 fprintf(stderr, "line %d in \"%s\" is too long", line_no, argv[1]); 151 } else { 152 fprintf(stderr, "line %d in \"stdin\" is too long", line_no); 153 } 154 } else { 155 data_line[len-1] = '\0'; 156 } 157 158 p = (char *) &data_line; 159 160 k = p; /* save start of key */ 161 while (!isspace(*p)) { p++; }; /* find first "space" */ 162 while (isspace(*p)) { *p = '\0'; p++; }; /* replace space with <NUL> */ 163 164 v = p; /* save start of value */ 165 while(*p != '\0') { p++; }; /* find end of string */ 166 167 (void)inet_aton(k,&host_addr); 168 printf("%s %s\n",inet_ntoa(host_addr),v); 169 170 } 171 172 return(0); 173 174} 175