httpd: don't send error messages with gzip encoding
[oweals/busybox.git] / networking / whois.c
1 /* vi: set sw=4 ts=4: */
2 /*
3  * whois - tiny client for the whois directory service
4  *
5  * Copyright (c) 2011 Pere Orga <gotrunks@gmail.com>
6  * Licensed under GPLv2 or later, see file LICENSE in this source tree.
7  */
8 /* TODO
9  * Add ipv6 support
10  * Add proxy support
11  */
12
13 //config:config WHOIS
14 //config:       bool "whois"
15 //config:       default y
16 //config:       help
17 //config:         whois is a client for the whois directory service
18
19 //applet:IF_WHOIS(APPLET(whois, BB_DIR_USR_BIN, BB_SUID_DROP))
20
21 //kbuild:lib-$(CONFIG_WHOIS) += whois.o
22
23 //usage:#define whois_trivial_usage
24 //usage:       "[-h SERVER] [-p PORT] NAME..."
25 //usage:#define whois_full_usage "\n\n"
26 //usage:       "Query WHOIS info about NAME\n"
27 //usage:     "\nOptions:"
28 //usage:     "\n        -h,-p   Server to query"
29
30 #include "libbb.h"
31
32 static void pipe_out(int fd)
33 {
34         FILE *fp;
35         char buf[1024];
36
37         fp = xfdopen_for_read(fd);
38         while (fgets(buf, sizeof(buf), fp)) {
39                 char *p = strpbrk(buf, "\r\n");
40                 if (p)
41                         *p = '\0';
42                 puts(buf);
43         }
44
45         fclose(fp); /* closes fd too */
46 }
47
48 int whois_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
49 int whois_main(int argc UNUSED_PARAM, char **argv)
50 {
51         int port = 43;
52         const char *host = "whois-servers.net";
53
54         opt_complementary = "-1:p+";
55         getopt32(argv, "h:p:", &host, &port);
56
57         argv += optind;
58         do {
59                 int fd = create_and_connect_stream_or_die(host, port);
60                 fdprintf(fd, "%s\r\n", *argv);
61                 pipe_out(fd);
62         }
63         while (*++argv);
64
65         return EXIT_SUCCESS;
66 }