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