dheller@cory.Berkeley.EDU (Dan Heller) (05/25/88)
I couldn't find a program to do this stuff for me, so I wrote it myself.
/*
* xhosts -- list, add or remove hosts that your xserver will talk to.
* Written by Dan Heller <island!argv@sun.com> May 24, 1988.
*
* cc -O -s xhosts.c -lX11 -o xhosts
* Options:
* -a hostname --adds "hostname" to the list of hosts.
* -r hostname --removes "hostname" from the list of hosts.
*
* With no options, xhosts will list the names and IP addresses of
* the hosts that your xserver will talk to. See /etc/X?.hosts for
* a list of hosts that were initialized when your xserver first
* started up (? is the screen #). This program can be used to
* enable hosts that your server will accept connections from without
* restarting the x server. There is probably a program already in
* existence that will do this, but I couldn't find one in the normal
* distribution. It was compiled and run on a sun3 running SunOS-3.5.
*/
#include <stdio.h>
#include <X11/Xlib.h>
#include <netdb.h>
#include <sys/socket.h>
#include <arpa/inet.h>
main(c, argv)
char **argv;
{
Display *dpy;
char buf[64], *prog = *argv;
XHostAddress *hosts, host;
extern int XAddHost(), XRemoveHost();
int nhosts, (*func)() = NULL;
Bool enabled;
struct hostent *h;
/* We can talk to this display ONLY */
if (!(dpy = XOpenDisplay("unix:0")))
puts("can't talk to server"), exit(1);
if (*++argv)
if (!strcmp(*argv, "-a"))
func = XAddHost;
else if (!strcmp(*argv, "-r"))
func = XRemoveHost;
else if (**argv == '-' || !argv[1])
printf("usage: %s [-a | -r host [hosts ... ] ]\n", prog), exit(1);
if (func)
while (*++argv)
if (!(h = gethostbyname(*argv)))
printf("%s: unknown host.\n", *argv);
else {
printf("address: %s\n", inet_ntoa(*(u_long *)h->h_addr));
host.address = h->h_addr;
host.family = FamilyInternet;
host.length = h->h_length;
(*func)(dpy, &host);
}
if (!(hosts = XListHosts(dpy, &nhosts, &enabled)))
printf("Can't get host list from server.\n"), exit(1);
printf("X server host access: %d hosts (%sabled)\n",
nhosts, enabled? "en" : "dis");
while (nhosts--) {
(void) strcpy(buf, inet_ntoa(*(u_long *)hosts->address));
if (!(h = gethostbyaddr(hosts->address, hosts->length, AF_INET)))
printf("can't find host from address: %s\n", buf);
else
printf("%s (%s)\n", h->h_name, buf);
hosts++;
}
exit(0);
}
Dan Heller <island!argv@sun.com>