Changed indentation using

'indent -br -ce -sc -pcs -cs -bs -i8 -bad -bap -fca'
This commit is contained in:
Martin Baulig
1998-07-12 14:22:45 +00:00
parent eb8d28b694
commit b177c3930d

View File

@@ -1,18 +1,18 @@
/* -*-C-*-
Server code for handling requests from clients and forwarding them
on to the GNU Emacs process.
This file is part of GNU Emacs.
Copying is permitted under those conditions described by the GNU
General Public License.
Copyright (C) 1989 Free Software Foundation, Inc.
Author: Andy Norman (ange@hplb.hpl.hp.com), based on 'etc/server.c'
from the 18.52 GNU Emacs distribution.
Please mail bugs and suggestions to the author at the above address.
* Server code for handling requests from clients and forwarding them
* on to the GNU Emacs process.
*
* This file is part of GNU Emacs.
*
* Copying is permitted under those conditions described by the GNU
* General Public License.
*
* Copyright (C) 1989 Free Software Foundation, Inc.
*
* Author: Andy Norman (ange@hplb.hpl.hp.com), based on 'etc/server.c'
* from the 18.52 GNU Emacs distribution.
*
* Please mail bugs and suggestions to the author at the above address.
*/
/* HISTORY
@@ -31,6 +31,7 @@
#if 0
static char rcsid[] = "!Header: gnuserv.c,v 2.1 95/02/16 11:58:27 arup alpha !";
#endif
#define DEBUG
@@ -51,6 +52,7 @@ main ()
fprintf (stderr, "Unix Domain sockets, Internet Domain sockets or System V IPC\n");
exit (1);
} /* main */
#else /* SYSV_IPC || UNIX_DOMAIN_SOCKETS || INTERNET_DOMAIN_SOCKETS */
#ifdef SYSV_IPC
@@ -60,8 +62,8 @@ int ipc_wpid = 0; /* watchdog task pid */
/*
ipc_exit -- clean up the queue id and queue, then kill the watchdog task
if it exists. exit with the given status.
* ipc_exit -- clean up the queue id and queue, then kill the watchdog task
* if it exists. exit with the given status.
*/
void
ipc_exit (int stat)
@@ -76,7 +78,7 @@ ipc_exit (int stat)
/*
ipc_handle_signal -- catch the signal given and clean up.
* ipc_handle_signal -- catch the signal given and clean up.
*/
void
ipc_handle_signal (int sig)
@@ -86,35 +88,31 @@ ipc_handle_signal(int sig)
/*
ipc_spawn_watchdog -- spawn a watchdog task to clean up the message queue should the
server process die.
* ipc_spawn_watchdog -- spawn a watchdog task to clean up the message queue should the
* server process die.
*/
void
ipc_spawn_watchdog (void)
{
if ((ipc_wpid = fork ()) == 0)
{ /* child process */
if ((ipc_wpid = fork ()) == 0) { /* child process */
int ppid = getppid (); /* parent's process id */
setpgrp (); /* gnu kills process group on exit */
while (1)
{
if (kill (ppid, 0) < 0) /* ppid is no longer valid, parent
may have died */
{
while (1) {
if (kill (ppid, 0) < 0) { /* ppid is no longer
* valid, parent may
* have died */
ipc_exit (0);
} /* if */
sleep (10); /* have another go later */
} /* while */
} /* if */
} /* ipc_spawn_watchdog */
/*
ipc_init -- initialize server, setting the global msqid that can be listened on.
* ipc_init -- initialize server, setting the global msqid that can be listened on.
*/
void
ipc_init (struct msgbuf **msgpp)
@@ -135,8 +133,7 @@ ipc_init (struct msgbuf **msgpp)
signal (SIGINT, ipc_handle_signal);
if ((*msgpp = (struct msgbuf *)
malloc (sizeof **msgpp + GSERV_BUFSZ)) == NULL)
{
malloc (sizeof **msgpp + GSERV_BUFSZ)) == NULL) {
glibtop_warn_io ("unable to allocate space for message buffer");
ipc_exit (1);
} /* if */
@@ -144,9 +141,9 @@ ipc_init (struct msgbuf **msgpp)
/*
handle_ipc_request -- accept a request from a client, pass the request on
to the GNU Emacs process, then wait for its reply and
pass that on to the client.
* handle_ipc_request -- accept a request from a client, pass the request on
* to the GNU Emacs process, then wait for its reply and
* pass that on to the client.
*/
void
handle_ipc_request (struct msgbuf *msgp)
@@ -158,12 +155,10 @@ handle_ipc_request (struct msgbuf *msgp)
int offset = 0;
int total = 1; /* # bytes that will actually be sent off */
if ((len = msgrcv (ipc_qid, msgp, GSERV_BUFSZ - 1, 1, 0)) < 0)
{
if ((len = msgrcv (ipc_qid, msgp, GSERV_BUFSZ - 1, 1, 0)) < 0) {
glibtop_warn_io ("msgrcv");
ipc_exit (1);
} /* if */
msgctl (ipc_qid, IPC_STAT, &msg_st);
strncpy (buf, msgp->mtext, len);
buf[len] = '\0'; /* terminate */
@@ -175,12 +170,10 @@ handle_ipc_request (struct msgbuf *msgp)
msgp->mtext[0] = '\0';
#if 0
if ((len = read(0,buf,GSERV_BUFSZ-1)) < 0)
{
if ((len = read (0, buf, GSERV_BUFSZ - 1)) < 0) {
glibtop_warn_io ("read");
ipc_exit (1);
} /* if */
sscanf (buf, "%d:%[^\n]\n", &junk, msgp->mtext);
#else
@@ -188,8 +181,7 @@ handle_ipc_request (struct msgbuf *msgp)
while (offset < (GSERV_BUFSZ - 1) &&
((len = read (0, buf + offset, 1)) > 0) &&
buf[offset] != ':')
{
buf[offset] != ':') {
offset += len;
}
@@ -200,15 +192,13 @@ handle_ipc_request (struct msgbuf *msgp)
buf[offset] = '\0';
sscanf (buf, "%d/%d", &s, &result_len);
while (result_len > 0)
{
while (result_len > 0) {
if ((len = read (0, buf, min2 (result_len, GSERV_BUFSZ - 1))) < 0)
glibtop_error_io ("read");
/* Send this string off, but only if we have enough space */
if (GSERV_BUFSZ > total)
{
if (GSERV_BUFSZ > total) {
if (total + len <= GSERV_BUFSZ)
buf[len] = 0;
else
@@ -217,13 +207,11 @@ handle_ipc_request (struct msgbuf *msgp)
send_string (s, buf);
total += strlen (buf);
}
result_len -= len;
}
/* eat the newline */
while ((len = read (0,buf,1)) == 0)
;
while ((len = read (0, buf, 1)) == 0);
if (len < 0)
glibtop_error_io ("read");
@@ -243,8 +231,8 @@ handle_ipc_request (struct msgbuf *msgp)
#if defined(INTERNET_DOMAIN_SOCKETS) || defined(UNIX_DOMAIN_SOCKETS)
/*
echo_request -- read request from a given socket descriptor, and send the information
to stdout (the gnu process).
* echo_request -- read request from a given socket descriptor, and send the information
* to stdout (the gnu process).
*/
static void
echo_request (int s)
@@ -263,7 +251,6 @@ echo_request (int s)
fflush (stdout);
break; /* end of message */
}
} /* while */
if (len < 0)
@@ -273,8 +260,8 @@ echo_request (int s)
/*
handle_response -- accept a response from stdin (the gnu process) and pass the
information on to the relevant client.
* handle_response -- accept a response from stdin (the gnu process) and pass the
* information on to the relevant client.
*/
static void
handle_response (void)
@@ -310,8 +297,7 @@ handle_response (void)
}
/* eat the newline */
while ((len = read(0,buf,1)) == 0)
;
while ((len = read (0, buf, 1)) == 0);
if (len < 0)
glibtop_error_io ("read");
@@ -327,6 +313,7 @@ handle_response (void)
#endif
} /* handle_response */
#endif /* INTERNET_DOMAIN_SOCKETS || UNIX_DOMAIN_SOCKETS */
@@ -343,6 +330,7 @@ struct entry *permitted_hosts[TABLE_SIZE];
#include <X11/Xauth.h>
static Xauth *server_xauth = NULL;
#endif
static int
@@ -360,48 +348,37 @@ timed_read (int fd, char *buf, int max, int timeout, int one_line)
FD_ZERO (&rmask);
FD_SET (fd, &rmask);
do
{
do {
r = select (fd + 1, &rmask, NULL, NULL, &tv);
if (r > 0)
{
if (read (fd, &c, 1) == 1 )
{
if (r > 0) {
if (read (fd, &c, 1) == 1) {
*buf++ = c;
++nbytes;
}
else
{
} else {
glibtop_warn_io ("read error on socket");
return -1;
}
}
else if (r == 0)
{
} else if (r == 0) {
glibtop_warn ("read timed out");
return -1;
}
else
{
} else {
glibtop_warn_io ("error in select");
return -1;
}
} while ((nbytes < max) && !(one_line && (c == '\n')));
--buf;
if (one_line && *buf == '\n')
{
if (one_line && *buf == '\n') {
*buf = 0;
}
return nbytes;
}
/*
permitted -- return whether a given host is allowed to connect to the server.
* permitted -- return whether a given host is allowed to connect to the server.
*/
static int
permitted (u_long host_addr, int fd)
@@ -413,8 +390,7 @@ permitted (u_long host_addr, int fd)
char buf[1024];
int auth_data_len;
if (fd > 0)
{
if (fd > 0) {
/* we are checking permission on a real connection */
/* Read auth protocol name */
@@ -427,15 +403,12 @@ permitted (u_long host_addr, int fd)
#endif
if (strcmp (auth_protocol, DEFAUTH_NAME) &&
strcmp (auth_protocol, MCOOKIE_NAME))
{
strcmp (auth_protocol, MCOOKIE_NAME)) {
glibtop_warn ("Authentication protocol from client is invalid", auth_protocol);
return FALSE;
}
if (!strcmp (auth_protocol, MCOOKIE_NAME))
{
if (!strcmp (auth_protocol, MCOOKIE_NAME)) {
/*
* doing magic cookie auth
@@ -451,8 +424,7 @@ permitted (u_long host_addr, int fd)
#ifdef AUTH_MAGIC_COOKIE
if (server_xauth && server_xauth->data &&
!memcmp (buf, server_xauth->data, auth_data_len))
{
!memcmp (buf, server_xauth->data, auth_data_len)) {
return TRUE;
}
#else
@@ -467,14 +439,10 @@ permitted (u_long host_addr, int fd)
glibtop_warn ("Xauth authentication failed, trying GNU_SECURE auth...");
}
/* Other auth protocols go here, and should execute only if the
* auth_protocol name matches.
*/
/* Other auth protocols go here, and should execute only if
* the * auth_protocol name matches. */
}
/* Now, try the old GNU_SECURE stuff... */
/* First find the hash key */
@@ -499,8 +467,8 @@ permitted (u_long host_addr, int fd)
/*
add_host -- add the given host to the list of permitted hosts, provided it isn't
already there.
* add_host -- add the given host to the list of permitted hosts, provided it isn't
* already there.
*/
static void
add_host (u_long host_addr)
@@ -508,8 +476,7 @@ add_host (u_long host_addr)
int key;
struct entry *new_entry;
if (!permitted (host_addr, -1))
{
if (!permitted (host_addr, -1)) {
if ((new_entry = (struct entry *) malloc (sizeof (struct entry))) == NULL)
glibtop_error_io ("unable to malloc space for permitted host entry");
@@ -518,17 +485,16 @@ add_host (u_long host_addr)
new_entry->next = permitted_hosts[key];
permitted_hosts[key] = new_entry;
} /* if */
} /* add_host */
/*
setup_table -- initialise the table of hosts allowed to contact the server,
by reading from the file specified by the GNU_SECURE
environment variable
Put in the local machine, and, if a security file is specifed,
add each host that is named in the file.
Return the number of hosts added.
* setup_table -- initialise the table of hosts allowed to contact the server,
* by reading from the file specified by the GNU_SECURE
* environment variable
* Put in the local machine, and, if a security file is specifed,
* add each host that is named in the file.
* Return the number of hosts added.
*/
static int
setup_table (void)
@@ -559,30 +525,35 @@ setup_table (void)
#endif /* AUTH_MAGIC_COOKIE */
#if 0 /* Don't even want to allow access from the local host by default */
#if 0 /* Don't even want to allow access from the
* local host by default */
add_host (host_addr); /* add local host */
hosts++;
#endif
if (((file_name = getenv ("GNU_SECURE")) != NULL && /* security file */
(host_file = fopen (file_name, "r")) != NULL)) /* opened ok */
{
while ((fscanf (host_file, "%s", hostname) != EOF)) /* find a host */
if (((long) host_addr = glibtop_internet_addr (hostname)) != -1)/* get its addr */
{
if (((file_name = getenv ("GNU_SECURE")) != NULL && /* security
* file */
(host_file = fopen (file_name, "r")) != NULL)) { /* opened ok */
while ((fscanf (host_file, "%s", hostname) != EOF)) /* find
* a
* host
*/
if (((long) host_addr = glibtop_internet_addr (hostname)) != -1) { /* get
* its
* addr
*/
add_host (host_addr); /* add the addr */
hosts++;
}
fclose (host_file);
} /* if */
return hosts;
} /* setup_table */
/*
internet_init -- initialize server, returning an internet socket that can
be listened on.
* internet_init -- initialize server, returning an internet socket that can
* be listened on.
*/
static int
internet_init (void)
@@ -602,9 +573,8 @@ internet_init (void)
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
/* Find the information for the gnu server
* in order to get the needed port number.
*/
/* Find the information for the gnu server * in order to get the
* needed port number. */
if ((ptr = getenv ("GNU_PORT")) != NULL)
server.sin_port = htons (atoi (ptr));
else if ((sp = getservbyname ("gnuserv", "tcp")) == NULL)
@@ -620,9 +590,7 @@ internet_init (void)
if (bind (ls, (struct sockaddr *) &server, sizeof (struct sockaddr_in)) == -1)
glibtop_error_io ("bind");
/* Initiate the listen on the socket so remote users
* can connect.
*/
/* Initiate the listen on the socket so remote users * can connect. */
if (listen (ls, 20) == -1)
glibtop_error_io ("listen");
@@ -632,8 +600,8 @@ internet_init (void)
/*
handle_internet_request -- accept a request from a client and send the information
to stdout (the gnu process).
* handle_internet_request -- accept a request from a client and send the information
* to stdout (the gnu process).
*/
static void
handle_internet_request (int ls)
@@ -652,14 +620,12 @@ handle_internet_request (int ls)
#endif
/* Check that access is allowed - if not return crud to the client */
if (!permitted (peer.sin_addr.s_addr, s))
{
if (!permitted (peer.sin_addr.s_addr, s)) {
close (s);
glibtop_warn ("Refused connection from %s.", inet_ntoa (peer.sin_addr));
return;
} /* if */
#ifdef DEBUG
#tifdef DEBUG
fprintf (stderr, "Accepted connection from %s.\n", inet_ntoa (peer.sin_addr));
#endif
@@ -677,8 +643,8 @@ handle_internet_request (int ls)
#ifdef UNIX_DOMAIN_SOCKETS
/*
unix_init -- initialize server, returning an unix-domain socket that can
be listened on.
* unix_init -- initialize server, returning an unix-domain socket that can
* be listened on.
*/
static int
unix_init (void)
@@ -693,8 +659,7 @@ unix_init (void)
/* Set up address structure for the listen socket. */
#ifdef HIDE_UNIX_SOCKET
sprintf (server.sun_path, "/tmp/lgtddir%d", (int) geteuid ());
if (mkdir (server.sun_path, 0700) < 0)
{
if (mkdir (server.sun_path, 0700) < 0) {
/* assume it already exists, and try to set perms */
if (chmod (server.sun_path, 0700) < 0)
glibtop_error_io ("Can't set permissions on %s", server.sun_path);
@@ -709,7 +674,7 @@ unix_init (void)
server.sun_family = AF_UNIX;
#ifdef HAVE_SOCKADDR_SUN_LEN
/* See W. R. Stevens "Advanced Programming in the Unix Environment"
p. 502 */
* p. 502 */
bindlen = (sizeof (server.sun_len) + sizeof (server.sun_family)
+ strlen (server.sun_path) + 1);
server.sun_len = bindlen;
@@ -725,11 +690,12 @@ unix_init (void)
if (listen (ls, 20) < 0)
glibtop_error_io ("listen");
/* #### there are also better ways of dealing with this when
sigvec() is present. */
/* #### there are also better ways of dealing with this when sigvec()
* is present. */
#if defined (HAVE_SIGPROCMASK)
{
sigset_t _mask;
sigemptyset (&_mask);
sigaddset (&_mask, SIGPIPE);
sigprocmask (SIG_BLOCK, &_mask, NULL);
@@ -744,8 +710,8 @@ unix_init (void)
/*
handle_unix_request -- accept a request from a client and send the information
to stdout (the gnu process).
* handle_unix_request -- accept a request from a client and send the information
* to stdout (the gnu process).
*/
static void
handle_unix_request (int ls)
@@ -762,6 +728,7 @@ handle_unix_request (int ls)
echo_request (s);
} /* handle_unix_request */
#endif /* UNIX_DOMAIN_SOCKETS */
@@ -773,17 +740,21 @@ main(argc,argv)
int chan; /* temporary channel number */
int ils = -1; /* internet domain listen socket */
int uls = -1; /* unix domain listen socket */
#ifdef SYSV_IPC
struct msgbuf *msgp; /* message buffer */
#endif /* SYSV_IPC */
glibtop_init_r (&glibtop_global_server, 0, GLIBTOP_OPEN_NO_OVERRIDE);
for(chan=3; chan < _NFILE; close(chan++)) /* close unwanted channels */
for (chan = 3; chan < _NFILE; close (chan++)) /* close unwanted
* channels */
;
#ifdef SYSV_IPC
ipc_init(&msgp); /* get a msqid to listen on, and a message buffer */
ipc_init (&msgp); /* get a msqid to listen on, and a message
* buffer */
#endif /* SYSV_IPC */
#ifdef INTERNET_DOMAIN_SOCKETS
@@ -799,6 +770,7 @@ main(argc,argv)
handle_ipc_request (msgp);
#else /* NOT SYSV_IPC */
fd_set rmask;
FD_ZERO (&rmask);
FD_SET (fileno (stdin), &rmask);
if (uls >= 0)
@@ -824,7 +796,8 @@ main(argc,argv)
handle_internet_request (ils);
#endif /* INTERNET_DOMAIN_SOCKETS */
if (FD_ISSET(fileno(stdin), &rmask)) /* from stdin (gnu process) */
if (FD_ISSET (fileno (stdin), &rmask)) /* from stdin (gnu
* process) */
handle_response ();
#endif /* NOT SYSV_IPC */
} /* while */