diff options
-rw-r--r-- | networking/whois.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/networking/whois.c b/networking/whois.c new file mode 100644 index 000000000..4eab9e5fe --- /dev/null +++ b/networking/whois.c | |||
@@ -0,0 +1,66 @@ | |||
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 | } | ||