summaryrefslogtreecommitdiff
path: root/try-from.c
diff options
context:
space:
mode:
Diffstat (limited to 'try-from.c')
-rw-r--r--try-from.c85
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);
+}