diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 1997-04-08 00:29:19 +0000 |
---|---|---|
committer | <> | 2013-02-25 15:20:59 +0000 |
commit | f8d9d05cfb1ea783457a14d3cf7fdf4d8fa450f2 (patch) | |
tree | 058251f5aa8af2365812daa56d936e91720a6027 /try-from.c | |
download | tcp-wrappers-master.tar.gz |
Imported from /home/lorry/working-area/delta_tcp-wrappers/tcp_wrappers_7.6.tar.gz.HEADtcp_wrappers_7.6master
Diffstat (limited to 'try-from.c')
-rw-r--r-- | try-from.c | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/try-from.c b/try-from.c new file mode 100644 index 0000000..925e144 --- /dev/null +++ b/try-from.c @@ -0,0 +1,85 @@ + /* + * This program can be called via a remote shell command to find out if the + * hostname and address are properly recognized, if username lookup works, + * and (SysV only) if the TLI on top of IP heuristics work. + * + * Example: "rsh host /some/where/try-from". + * + * Diagnostics are reported through syslog(3) and redirected to stderr. + * + * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands. + */ + +#ifndef lint +static char sccsid[] = "@(#) try-from.c 1.2 94/12/28 17:42:55"; +#endif + +/* System libraries. */ + +#include <sys/types.h> +#include <stdio.h> +#include <syslog.h> +#include <string.h> + +#ifdef TLI +#include <sys/tiuser.h> +#include <stropts.h> +#endif + +#ifndef STDIN_FILENO +#define STDIN_FILENO 0 +#endif + +/* Local stuff. */ + +#include "tcpd.h" + +int allow_severity = SEVERITY; /* run-time adjustable */ +int deny_severity = LOG_WARNING; /* ditto */ + +main(argc, argv) +int argc; +char **argv; +{ + struct request_info request; + char buf[BUFSIZ]; + char *cp; + + /* + * Simplify the process name, just like tcpd would. + */ + if ((cp = strrchr(argv[0], '/')) != 0) + argv[0] = cp + 1; + + /* + * Turn on the "IP-underneath-TLI" detection heuristics. + */ +#ifdef TLI + if (ioctl(0, I_FIND, "timod") == 0) + ioctl(0, I_PUSH, "timod"); +#endif /* TLI */ + + /* + * Look up the endpoint information. + */ + request_init(&request, RQ_DAEMON, argv[0], RQ_FILE, STDIN_FILENO, 0); + (void) fromhost(&request); + + /* + * Show some results. Name and address information is looked up when we + * ask for it. + */ + +#define EXPAND(str) percent_x(buf, sizeof(buf), str, &request) + + puts(EXPAND("client address (%%a): %a")); + puts(EXPAND("client hostname (%%n): %n")); + puts(EXPAND("client username (%%u): %u")); + puts(EXPAND("client info (%%c): %c")); + puts(EXPAND("server address (%%A): %A")); + puts(EXPAND("server hostname (%%N): %N")); + puts(EXPAND("server process (%%d): %d")); + puts(EXPAND("server info (%%s): %s")); + + return (0); +} |