xref: /dflybsd-src/contrib/tcp_wrappers/try-from.c (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
1*86d7f5d3SJohn Marino  /*
2*86d7f5d3SJohn Marino   * This program can be called via a remote shell command to find out if the
3*86d7f5d3SJohn Marino   * hostname and address are properly recognized, if username lookup works,
4*86d7f5d3SJohn Marino   * and (SysV only) if the TLI on top of IP heuristics work.
5*86d7f5d3SJohn Marino   *
6*86d7f5d3SJohn Marino   * Example: "rsh host /some/where/try-from".
7*86d7f5d3SJohn Marino   *
8*86d7f5d3SJohn Marino   * Diagnostics are reported through syslog(3) and redirected to stderr.
9*86d7f5d3SJohn Marino   *
10*86d7f5d3SJohn Marino   * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands.
11*86d7f5d3SJohn Marino   */
12*86d7f5d3SJohn Marino 
13*86d7f5d3SJohn Marino #ifndef lint
14*86d7f5d3SJohn Marino static char sccsid[] = "@(#) try-from.c 1.2 94/12/28 17:42:55";
15*86d7f5d3SJohn Marino #endif
16*86d7f5d3SJohn Marino 
17*86d7f5d3SJohn Marino /* System libraries. */
18*86d7f5d3SJohn Marino 
19*86d7f5d3SJohn Marino #include <sys/types.h>
20*86d7f5d3SJohn Marino #include <stdio.h>
21*86d7f5d3SJohn Marino #include <syslog.h>
22*86d7f5d3SJohn Marino #include <string.h>
23*86d7f5d3SJohn Marino 
24*86d7f5d3SJohn Marino #ifdef TLI
25*86d7f5d3SJohn Marino #include <sys/tiuser.h>
26*86d7f5d3SJohn Marino #include <stropts.h>
27*86d7f5d3SJohn Marino #endif
28*86d7f5d3SJohn Marino 
29*86d7f5d3SJohn Marino #ifndef STDIN_FILENO
30*86d7f5d3SJohn Marino #define	STDIN_FILENO	0
31*86d7f5d3SJohn Marino #endif
32*86d7f5d3SJohn Marino 
33*86d7f5d3SJohn Marino /* Local stuff. */
34*86d7f5d3SJohn Marino 
35*86d7f5d3SJohn Marino #include "tcpd.h"
36*86d7f5d3SJohn Marino 
37*86d7f5d3SJohn Marino int     allow_severity = SEVERITY;	/* run-time adjustable */
38*86d7f5d3SJohn Marino int     deny_severity = LOG_WARNING;	/* ditto */
39*86d7f5d3SJohn Marino 
main(argc,argv)40*86d7f5d3SJohn Marino main(argc, argv)
41*86d7f5d3SJohn Marino int     argc;
42*86d7f5d3SJohn Marino char  **argv;
43*86d7f5d3SJohn Marino {
44*86d7f5d3SJohn Marino     struct request_info request;
45*86d7f5d3SJohn Marino     char    buf[BUFSIZ];
46*86d7f5d3SJohn Marino     char   *cp;
47*86d7f5d3SJohn Marino 
48*86d7f5d3SJohn Marino     /*
49*86d7f5d3SJohn Marino      * Simplify the process name, just like tcpd would.
50*86d7f5d3SJohn Marino      */
51*86d7f5d3SJohn Marino     if ((cp = strrchr(argv[0], '/')) != 0)
52*86d7f5d3SJohn Marino 	argv[0] = cp + 1;
53*86d7f5d3SJohn Marino 
54*86d7f5d3SJohn Marino     /*
55*86d7f5d3SJohn Marino      * Turn on the "IP-underneath-TLI" detection heuristics.
56*86d7f5d3SJohn Marino      */
57*86d7f5d3SJohn Marino #ifdef TLI
58*86d7f5d3SJohn Marino     if (ioctl(0, I_FIND, "timod") == 0)
59*86d7f5d3SJohn Marino 	ioctl(0, I_PUSH, "timod");
60*86d7f5d3SJohn Marino #endif /* TLI */
61*86d7f5d3SJohn Marino 
62*86d7f5d3SJohn Marino     /*
63*86d7f5d3SJohn Marino      * Look up the endpoint information.
64*86d7f5d3SJohn Marino      */
65*86d7f5d3SJohn Marino     request_init(&request, RQ_DAEMON, argv[0], RQ_FILE, STDIN_FILENO, 0);
66*86d7f5d3SJohn Marino     (void) fromhost(&request);
67*86d7f5d3SJohn Marino 
68*86d7f5d3SJohn Marino     /*
69*86d7f5d3SJohn Marino      * Show some results. Name and address information is looked up when we
70*86d7f5d3SJohn Marino      * ask for it.
71*86d7f5d3SJohn Marino      */
72*86d7f5d3SJohn Marino 
73*86d7f5d3SJohn Marino #define EXPAND(str) percent_x(buf, sizeof(buf), str, &request)
74*86d7f5d3SJohn Marino 
75*86d7f5d3SJohn Marino     puts(EXPAND("client address  (%%a): %a"));
76*86d7f5d3SJohn Marino     puts(EXPAND("client hostname (%%n): %n"));
77*86d7f5d3SJohn Marino     puts(EXPAND("client username (%%u): %u"));
78*86d7f5d3SJohn Marino     puts(EXPAND("client info     (%%c): %c"));
79*86d7f5d3SJohn Marino     puts(EXPAND("server address  (%%A): %A"));
80*86d7f5d3SJohn Marino     puts(EXPAND("server hostname (%%N): %N"));
81*86d7f5d3SJohn Marino     puts(EXPAND("server process  (%%d): %d"));
82*86d7f5d3SJohn Marino     puts(EXPAND("server info     (%%s): %s"));
83*86d7f5d3SJohn Marino 
84*86d7f5d3SJohn Marino     return (0);
85*86d7f5d3SJohn Marino }
86