/* * 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 #include #include #include #ifdef TLI #include #include #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); }