summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Baulig <martin@home-of-linux.org>2000-01-09 21:58:34 +0000
committerMartin Baulig <martin@src.gnome.org>2000-01-09 21:58:34 +0000
commitcb96ce0ad2ef24564f37ee75df52068cd728551d (patch)
tree32f70059dcbd215f72876f53a3a00acc70f9feaf /src
parent938a444edf7a5b3b247f644ffd02bd8bba80ffec (diff)
downloadlibgtop-cb96ce0ad2ef24564f37ee75df52068cd728551d.tar.gz
Removed everything in this directory. This has been obsoleted by the new
2000-01-10 Martin Baulig <martin@home-of-linux.org> * src/daemon/: Removed everything in this directory. This has been obsoleted by the new server code in backends/server.
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am2
-rw-r--r--src/daemon/ChangeLog101
-rw-r--r--src/daemon/Makefile.am45
-rw-r--r--src/daemon/daemon.h83
-rw-r--r--src/daemon/gnuserv.c640
-rw-r--r--src/daemon/io.c109
-rw-r--r--src/daemon/main.c274
-rw-r--r--src/daemon/server.c105
-rw-r--r--src/daemon/slave.c296
-rw-r--r--src/daemon/version.c64
10 files changed, 1 insertions, 1718 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 81a20c19..67973c86 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -6,5 +6,5 @@ endif
SUBDIRS = $(inodedb_SUBDIRS)
-DIST_SUBDIRS = daemon inodedb
+DIST_SUBDIRS = inodedb
diff --git a/src/daemon/ChangeLog b/src/daemon/ChangeLog
deleted file mode 100644
index 32900d1f..00000000
--- a/src/daemon/ChangeLog
+++ /dev/null
@@ -1,101 +0,0 @@
-1999-11-28 Martin Baulig <martin@home-of-linux.org>
-
- * gnuserv.c (setup_table): Don't dump core when the table of
- permitted host names contains a NULL pointer.
-
-1999-10-24 Martin Baulig <martin@home-of-linux.org>
-
- * io.c (do_output): Added additional `int' parameter for the
- retval from the sysdeps functions.
-
-1999-07-29 Martin Baulig <martin@home-of-linux.org>
-
- * Makefile.am: Link the `libgtop_daemon' and the `libgtop_server'
- statically if possible.
-
-1999-05-07 Martin Baulig <martin@home-of-linux.org>
-
- * server.c (main): There's some problem with uname () - some systems
- like Solaris or Digital Unix return a nonnegative value on success,
- some others like Linux return 0. Since all known systems seem to return
- a negative value on failure, we simply check whether the return value is
- not negative here.
-
-1999-02-19 Martin Baulig <martin@home-of-linux.org>
-
- * Makefile.am (LIBGTOP_COMPILE_SYSTEM): Hardcoded system name.
- (LIBGTOP_COMPILE_RELEASE): Hardcoded system release.
- (LIBGTOP_COMPILE_MACHINE): Hardcoded machine type.
-
- * src/daemon/Makefile.am (libgtop_server_SOURCES): Don't use
- `@INTLLIBS@' for the server.
-
- * server.c (main): Abort if not running on the system the server
- was compiled on.
-
-1999-02-10 Martin Baulig <martin@home-of-linux.org>
-
- * gnuserv.c (program_invocation_*_name): Declare this as `extern'
- if necessary.
-
-1998-12-17 Martin Baulig <baulig@merkur.uni-trier.de>
-
- * gnuserv.c: Don't include <gnome-argp.h>.
- (program_invocation_name, program_invocation_short_name): Define
- this here.
-
-1998-12-09 Martin Baulig <martin@home-of-linux.org>
-
- Larger changes to the daemon:
-
- - Dropped all the unix domain socket stuff - we don't need it for
- connections on the local host, here we behave just like any normal
- application.
- - Added poptimization: use the --help parameter to get usage info
- - Made it a real daemon, fork into background and write to syslog.
- - It's now possible to invoke the daemon from inetd, you'll get
- GNU_SECURE authentication in this case.
- - Don't make this executable suid/sgid - if invoked as root it
- sets uid/gid to SERVER_UID/SERVER_GID as defined in server_config.h
- - Added missing features, so you can now really use this thing.
-
-1998-11-11 Martin Baulig <martin@home-of-linux.org>
-
- * gnuserv.c (main): Set `server->features' directly rather than
- calling glibtop_set_parameter_l () since this function no longer
- allows to modify the features.
-
- * gnuserv.c, main.c: Use LIBGTOP_ENABLE_DEBUG rather than DEBUG.
-
-1998-11-01 Marc Ewing <marc@tasmanian.redhat.com>
-
- * Makefile.am: Added $(GLIB_LIBS) to libs. Not sure
- how it ever built without it.
-
-1998-10-20 Martin Baulig <martin@home-of-linux.org>
-
- * Makefile.am: Added a notice that this file *requires*
- libtool 1.2. It may work with 1.1 as well, but that's untested.
-
-1998-10-11 Martin Baulig <martin@home-of-linux.org>
-
- * Makefile.am (install-exec-hook): Always run `libgtop_postinstall',
- it's `:' if there's nothing to do since the empty string is no
- valid shell syntax here.
-
-1998-10-01 Martin Baulig <martin@home-of-linux.org>
-
- * Makefile.am (install-exec-hook): Use `libgtop_postinstall'
- here to make the server suid root or sgid kmem if required.
-
-1998-08-25 Martin Baulig <martin@home-of-linux.org>
-
- * daemon.h (handle_parent_connection): Added prototype.
- * write.c, io.c: Added cast to `const void *' in calls to
- `write' and `send' to avoid compiler warnings.
- * gnuserv.c (handle_signal): Declared static.
- (main): Casting return value of `getuid' to `int' in
- debugging statement.
-
- * ChangeLog: New file.
-
diff --git a/src/daemon/Makefile.am b/src/daemon/Makefile.am
deleted file mode 100644
index da581fa0..00000000
--- a/src/daemon/Makefile.am
+++ /dev/null
@@ -1,45 +0,0 @@
-## You need libtool 1.2 or newer for this Makefile.am to work.
-##
-## It _may_ work with an older version of libtool, but it also may fail.
-## So if you get any undefined symbols here, please make sure you really
-## have libtool 1.2 or better before reporting this as bug.
-##
-## You'll require libtool 1.2 for other parts of GNOME anyway.
-##
-## Get ftp://ftp.gnu.org/pub/gnu/libtool-1.2.tar.gz
-## (or a newer version if it is available)
-##
-## Martin <martin@home-of-linux.org>
-##
-
-LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@
-
-INCLUDES = @INCLUDES@ -D_BSD \
- -DLIBGTOP_COMPILE_SYSTEM=\"`uname -s`\" \
- -DLIBGTOP_COMPILE_RELEASE=\"`uname -r`\" \
- -DLIBGTOP_COMPILE_MACHINE=\"`uname -m`\"
-
-if NEED_LIBGTOP
-suid_sysdeps = $(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps_suid.la
-suid_common = $(top_builddir)/sysdeps/common/libgtop_suid_common.la
-else
-suid_sysdeps =
-suid_common =
-endif
-
-bin_PROGRAMS = @server_programs@
-
-EXTRA_PROGRAMS = libgtop_server
-
-libgtop_server_SOURCES = server.c slave.c io.c version.c daemon.h
-libgtop_server_LDADD = $(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps_suid.la \
- $(top_builddir)/sysdeps/common/libgtop_suid_common.la \
- @LIBSUPPORT@
-
-if ENABLE_STATIC
-libgtop_server_LDFLAGS = -static
-endif
-
-install-exec-hook:
- -@libgtop_postinstall@
-
diff --git a/src/daemon/daemon.h b/src/daemon/daemon.h
deleted file mode 100644
index 6c8ffb7c..00000000
--- a/src/daemon/daemon.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-
-/* $Id$ */
-
-/* Copyright (C) 1998-99 Martin Baulig
- This file is part of LibGTop 1.0.
-
- Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
-
- LibGTop is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License,
- or (at your option) any later version.
-
- LibGTop is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- for more details.
-
- You should have received a copy of the GNU General Public License
- along with LibGTop; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-*/
-
-#ifndef __GLIBTOP_DAEMON_H__
-#define __GLIBTOP_DAEMON_H__
-
-#include <glibtop.h>
-#include <glibtop/error.h>
-#include <glibtop/gnuserv.h>
-
-#include <glibtop/open.h>
-#include <glibtop/union.h>
-#include <glibtop/xmalloc.h>
-#include <glibtop/version.h>
-#include <glibtop/command.h>
-#include <glibtop/parameter.h>
-
-#include <fcntl.h>
-#include <sys/wait.h>
-#include <sys/socket.h>
-#include <syslog.h>
-
-BEGIN_LIBGTOP_DECLS
-
-/* Some don't have LOG_PERROR */
-#ifndef LOG_PERROR
-#define LOG_PERROR 0
-#endif
-
-#if defined(HAVE_GETDTABLESIZE)
-#define GET_MAX_FDS() getdtablesize()
-#else
-/* Fallthrough case - please add other #elif cases above
- for different OS's as necessary */
-#define GET_MAX_FDS() 256
-#endif
-
-#define _offset_union(p) ((char *) &resp->u.p - (char *) resp)
-#define _offset_data(p) _offset_union (data.p)
-
-#define MSG_BUFSZ sizeof (struct _glibtop_ipc_message)
-#define MSG_MSGSZ (MSG_BUFSZ - sizeof (long))
-
-void handle_parent_connection (int s);
-void handle_slave_connection (int input, int output);
-int handle_slave_command (glibtop_command *cmnd, glibtop_response *resp,
- const void *parameter);
-
-void do_output (int s, glibtop_response *resp, off_t offset,
- size_t data_size, const void *data, int retval);
-int do_read (int s, void *ptr, size_t total_size);
-
-void syslog_message (int priority, char *format, ...);
-void syslog_io_message (int priority, char *format, ...);
-
-extern int enable_debug;
-extern int verbose_output;
-
-END_LIBGTOP_DECLS
-
-#endif
diff --git a/src/daemon/gnuserv.c b/src/daemon/gnuserv.c
deleted file mode 100644
index 1fc498ea..00000000
--- a/src/daemon/gnuserv.c
+++ /dev/null
@@ -1,640 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-
-/* -*-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.
- */
-
-/* HISTORY
- * 11-Nov-1990 bristor@simba
- * Added EOT stuff.
- */
-
-/*
- * This file incorporates new features added by Bob Weiner <weiner@mot.com>,
- * Darrell Kindred <dkindred@cmu.edu> and Arup Mukherjee <arup@cmu.edu>.
- * Please see the note at the end of the README file for details.
- *
- * (If gnuserv came bundled with your emacs, the README file is probably
- * ../etc/gnuserv.README relative to the directory containing this file)
- */
-
-#include <glibtop.h>
-#include <glibtop/open.h>
-#include <glibtop/close.h>
-#include <glibtop/command.h>
-#include <glibtop/xmalloc.h>
-
-#include <glibtop/parameter.h>
-
-#include "server_config.h"
-
-#include <glibtop/gnuserv.h>
-
-#include <errno.h>
-#include <popt-gnome.h>
-
-#include "daemon.h"
-
-#ifdef AIX
-#include <sys/select.h>
-#endif
-
-#ifdef NEED_DECLARATION_PROGRAM_INVOCATION_NAME
-extern char *program_invocation_name, *program_invocation_short_name;
-#endif
-
-#ifndef HAVE_PROGRAM_INVOCATION_SHORT_NAME
-char *program_invocation_short_name;
-#endif
-
-#ifndef HAVE_PROGRAM_INVOCATION_NAME
-char *program_invocation_name;
-#endif
-
-void handle_parent_connection (int s);
-void handle_slave_connection (int input, int output);
-
-#if !defined(INTERNET_DOMAIN_SOCKETS)
-#error "Internet Domain sockets are required"
-#endif
-
-#ifdef AUTH_MAGIC_COOKIE
-#include <X11/X.h>
-#include <X11/Xauth.h>
-
-static Xauth *server_xauth = NULL;
-
-#endif /* AUTH_MAGIC_COOKIE */
-
-int enable_debug = 0;
-int verbose_output = 0;
-static int no_daemon = 0;
-static int invoked_from_inetd = 0;
-static int changed_uid = 0;
-
-void
-syslog_message (int priority, char *format, ...)
-{
- va_list ap;
- char buffer [BUFSIZ];
-
- va_start (ap, format);
- vsnprintf (buffer, BUFSIZ-1, format, ap);
- va_end (ap);
-
- syslog (priority, buffer);
-}
-
-void
-syslog_io_message (int priority, char *format, ...)
-{
- va_list ap;
- char buffer [BUFSIZ];
- char buffer2 [BUFSIZ];
-
- va_start (ap, format);
- vsnprintf (buffer, BUFSIZ-1, format, ap);
- va_end (ap);
-
- snprintf (buffer2, BUFSIZ-1, "%s: %s", buffer, strerror (errno));
- syslog (priority, buffer2);
-}
-
-/*
- * timed_read - Read with timeout.
- */
-
-static int
-timed_read (int fd, char *buf, int max, int timeout, int one_line)
-{
- fd_set rmask;
- struct timeval tv; /* = {timeout, 0}; */
- char c = 0;
- int nbytes = 0;
- int r;
-
- tv.tv_sec = timeout;
- tv.tv_usec = 0;
-
- FD_ZERO (&rmask);
- FD_SET (fd, &rmask);
-
- do {
- r = select (fd + 1, &rmask, NULL, NULL, &tv);
-
- if (r > 0) {
- if (read (fd, &c, 1) == 1) {
- *buf++ = c;
- ++nbytes;
- } else {
- syslog_io_message (LOG_WARNING, "read error on socket");
- return -1;
- }
- } else if (r == 0) {
- syslog_io_message (LOG_WARNING, "read timed out");
- return -1;
- } else {
- syslog_io_message (LOG_WARNING, "error in select");
- return -1;
- }
- } while ((nbytes < max) && !(one_line && (c == '\n')));
-
- --buf;
- if (one_line && *buf == '\n') {
- *buf = 0;
- }
- return nbytes;
-}
-
-
-/*
- * permitted -- return whether a given host is allowed to connect to the server.
- */
-
-static int
-permitted (u_long host_addr, int fd)
-{
- int i;
-
- char auth_protocol[128];
- char buf[1024];
- int auth_data_len;
-
- /* Read auth protocol name */
-
- if (timed_read (fd, auth_protocol, AUTH_NAMESZ, AUTH_TIMEOUT, 1) <= 0)
- return FALSE;
-
- if (enable_debug)
- syslog_message (LOG_DEBUG,
- "Client sent authenticatin protocol '%s'.",
- auth_protocol);
-
- if (strcmp (auth_protocol, DEFAUTH_NAME) &&
- strcmp (auth_protocol, MCOOKIE_NAME)) {
- syslog_message (LOG_WARNING,
- "Invalid authentication protocol "
- "'%s' from client",
- auth_protocol);
- return FALSE;
- }
-
- if (!strcmp (auth_protocol, MCOOKIE_NAME)) {
- /*
- * doing magic cookie auth
- */
-
- if (timed_read (fd, buf, 10, AUTH_TIMEOUT, 1) <= 0)
- return FALSE;
-
- auth_data_len = atoi (buf);
-
- if (timed_read (fd, buf, auth_data_len, AUTH_TIMEOUT, 0) != auth_data_len)
- return FALSE;
-
-#ifdef AUTH_MAGIC_COOKIE
- if (!invoked_from_inetd && server_xauth && server_xauth->data &&
- !memcmp (buf, server_xauth->data, auth_data_len)) {
- return TRUE;
- }
-#else
- syslog_message (LOG_WARNING,
- "Client tried Xauth, but server is "
- "not compiled with Xauth");
-#endif
-
- /*
- * auth failed, but allow this to fall through to the
- * GNU_SECURE protocol....
- */
-
- if (verbose_output) {
- if (changed_uid || invoked_from_inetd)
- syslog_message (LOG_WARNING,
- "Xauth authentication not allowed, "
- "trying GNU_SECURE ...");
- else
- syslog_message (LOG_WARNING,
- "Xauth authentication failed, "
- "trying GNU_SECURE auth...");
- }
- }
-
- /* Other auth protocols go here, and should execute only if
- * the * auth_protocol name matches. */
-
- /* Now, try the old GNU_SECURE stuff... */
-
- if (enable_debug)
- syslog_message (LOG_DEBUG, "Doing GNU_SECURE auth ...");
-
- /* Now check the chain for that hash key */
- for (i = 0; i < HOST_TABLE_ENTRIES; i++) {
- if (enable_debug)
- syslog_message (LOG_DEBUG, "Trying %lx - %lx",
- host_addr, permitted_hosts [i]);
- if (permitted_hosts [i] == 0L)
- return (FALSE);
- if (host_addr == permitted_hosts [i])
- return (TRUE);
- }
-
- return (FALSE);
-}
-
-
-/*
- * 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)
-{
- char hostname [HOSTNAMSZ], screen [BUFSIZ];
- long host_addr;
- int i, hosts = 0;
-
- /* Make sure every entry is null */
- for (i = 0; i < HOST_TABLE_ENTRIES; i++)
- permitted_hosts [i] = 0;
-
- gethostname (hostname, HOSTNAMSZ);
-
- if ((host_addr = glibtop_internet_addr (hostname)) == -1) {
- syslog_io_message (LOG_ERR, "Can't resolve '%s'", hostname);
- exit (1);
- }
-
-#ifdef AUTH_MAGIC_COOKIE
-
- sprintf (screen, "%d", SERVER_PORT);
-
- server_xauth = XauGetAuthByAddr
- (FamilyInternet,
- sizeof (host_addr), (char *) &host_addr,
- strlen (screen), screen,
- strlen (MCOOKIE_X_NAME), MCOOKIE_X_NAME);
- hosts++;
-
-#endif /* AUTH_MAGIC_COOKIE */
-
- /* Resolv host names from permitted_host_names []. */
-
- for (i = 0; i < HOST_TABLE_ENTRIES; i++) {
- if (!permitted_host_names [i])
- continue;
- if (enable_debug)
- syslog_message (LOG_DEBUG, "Resolving %s ...",
- permitted_host_names [i]);
- permitted_hosts [i] =
- glibtop_internet_addr (permitted_host_names [i]);
- if ((long) permitted_hosts [i] == -1) {
- syslog_io_message (LOG_ERR, "Can't resolve '%s'",
- permitted_host_names [i]);
- exit (1);
- }
- }
-
- if (enable_debug)
- for (i = 0; i < HOST_TABLE_ENTRIES; i++)
- syslog_message (LOG_DEBUG, "Host %s - %lx",
- permitted_host_names [i],
- permitted_hosts [i]);
-
- hosts += HOST_TABLE_ENTRIES;
-
- return hosts;
-} /* setup_table */
-
-/*
- * internet_init -- initialize server, returning an internet socket that can
- * be listened on.
- */
-
-static int
-internet_init (void)
-{
- int ls; /* socket descriptor */
- struct sockaddr_in server; /* for local socket address */
-
- if (setup_table () == 0)
- return -1;
-
- /* clear out address structure */
- memset ((char *) &server, 0, sizeof (struct sockaddr_in));
-
- /* Set up address structure for the listen socket. */
- server.sin_family = AF_INET;
- server.sin_addr.s_addr = INADDR_ANY;
-
- /* We use a fixed port given in the config file. */
- server.sin_port = htons (SERVER_PORT);
-
- if (verbose_output)
- syslog_message (LOG_INFO, "Using port %u.", SERVER_PORT);
-
- /* Create the listen socket. */
- if ((ls = socket (AF_INET, SOCK_STREAM, 0)) == -1) {
- syslog_io_message (LOG_ERR, "unable to create socket");
- exit (1);
- }
-
- /* Bind the listen address to the socket. */
- if (bind (ls, (struct sockaddr *) &server,
- sizeof (struct sockaddr_in)) == -1) {
- syslog_io_message (LOG_ERR, "bind");
- exit (1);
- }
-
- /* Initiate the listen on the socket so remote users * can connect. */
- if (listen (ls, 20) == -1) {
- syslog_io_message (LOG_ERR, "listen");
- exit (1);
- }
-
- return (ls);
-} /* internet_init */
-
-
-/*
- * 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)
-{
- int s;
- size_t addrlen = sizeof (struct sockaddr_in);
- struct sockaddr_in peer; /* for peer socket address */
- pid_t pid;
-
- memset ((char *) &peer, 0, sizeof (struct sockaddr_in));
-
- if ((s = accept (ls, (struct sockaddr *) &peer, (void *) &addrlen)) == -1) {
- syslog_io_message (LOG_ERR, "accept");
- exit (1);
- }
-
- if (verbose_output)
- syslog_message (LOG_INFO, "Connection was made from %s port %u.",
- inet_ntoa (peer.sin_addr), ntohs (peer.sin_port));
-
- /* Check that access is allowed - if not return crud to the client */
- if (!permitted (peer.sin_addr.s_addr, s)) {
- close (s);
- syslog_message (LOG_CRIT, "Refused connection from %s.",
- inet_ntoa (peer.sin_addr));
- return;
- } /* if */
-
- if (verbose_output)
- syslog_message (LOG_INFO, "Accepted connection from %s port %u.",
- inet_ntoa (peer.sin_addr), ntohs (peer.sin_port));
-
- pid = fork ();
-
- if (pid == -1) {
- syslog_io_message (LOG_ERR, "fork failed");
- exit (1);
- }
-
- if (pid) {
- if (verbose_output)
- syslog_message (LOG_INFO, "Child pid is %d.", pid);
- return;
- }
-
- handle_parent_connection (s);
-
- close (s);
-
- if (verbose_output)
- syslog_message (LOG_INFO, "Closed connection to %s port %u.",
- inet_ntoa (peer.sin_addr), ntohs (peer.sin_port));
-
- _exit (0);
-} /* handle_internet_request */
-
-static void
-handle_signal (int sig)
-{
- if (sig == SIGCHLD)
- return;
-
- syslog_message (LOG_ERR, "Catched signal %d.\n", sig);
- exit (1);
-}
-
-const struct poptOption popt_options [] = {
- POPT_AUTOHELP
- { "debug", 'd', POPT_ARG_NONE, &enable_debug, 0,
- N_("Enable debugging"), N_("DEBUG") },
- { "verbose", 'v', POPT_ARG_NONE, &verbose_output, 0,
- N_("Enable verbose output"), N_("VERBOSE") },
- { "no-daemon", 'f', POPT_ARG_NONE, &no_daemon, 0,
- N_("Don't fork into background"), N_("NO-DAEMON") },
- { "inetd", 'i', POPT_ARG_NONE, &invoked_from_inetd, 0,
- N_("Invoked from inetd"), N_("INETD") },
- { NULL, '\0', 0, NULL, 0 }
-};
-
-int
-main (int argc, char *argv [])
-{
- const unsigned method = GLIBTOP_METHOD_PIPE;
- const unsigned long features = GLIBTOP_SYSDEPS_ALL;
- glibtop *server = glibtop_global_server;
- poptContext context;
- int nextopt;
-
- int ils = -1; /* internet domain listen socket */
-
- /* On non-glibc systems, this is not set up for us. */
- if (!program_invocation_name) {
- char *arg;
-
- program_invocation_name = argv[0];
- arg = strrchr (argv[0], '/');
- program_invocation_short_name =
- arg ? (arg + 1) : program_invocation_name;
- }
-
- context = poptGetContext ("libgtop-daemon", argc, argv,
- popt_options, 0);
-
- poptReadDefaultConfig (context, TRUE);
-
- while ((nextopt = poptGetNextOpt (context)) > 0)
- /* do nothing */ ;
-
- if(nextopt != -1) {
- printf (_("Error on option %s: %s.\n"
- "Run '%s --help' to see a full list of "
- "available command line options.\n"),
- poptBadOption (context, 0),
- poptStrerror (nextopt),
- argv[0]);
- exit(1);
- }
-
- if (enable_debug)
- verbose_output = 1;
-
- if (no_daemon) {
- openlog ("libgtop-daemon", LOG_PERROR | LOG_PID, LOG_LOCAL0);
- } else {
- openlog ("libgtop-daemon", LOG_PID, LOG_LOCAL0);
- }
-
- if (!no_daemon && !invoked_from_inetd) {
- pid_t pid = fork ();
-
- if (pid == -1) {
- syslog_io_message (LOG_ERR, "fork failed");
- exit (1);
- } else if (pid)
- exit (0);
-
- close (0);
-
- setsid ();
- }
-
- glibtop_init_r (&glibtop_global_server, 0, GLIBTOP_INIT_NO_INIT);
-
- signal (SIGCHLD, handle_signal);
-
- /* If we are root, completely switch to SERVER_UID and
- * SERVER_GID. Otherwise we completely drop any priviledges.
- */
-
- if (enable_debug)
- syslog_message (LOG_DEBUG, "Parent ID: (%d, %d) - (%d, %d)",
- getuid (), geteuid (), getgid (), getegid ());
-
- if (geteuid () == 0) {
- changed_uid = 1;
- if (setregid (SERVER_GID, SERVER_GID)) {
- syslog_io_message (LOG_ERR, "setregid (SERVER_GID)");
- exit (1);
- }
- if (setreuid (SERVER_UID, SERVER_UID)) {
- syslog_io_message (LOG_ERR, "setreuid (SERVER_UID)");
- exit (1);
- }
- } else {
- if (setreuid (geteuid (), geteuid ())) {
- syslog_io_message (LOG_ERR, "setreuid (euid)");
- exit (1);
- }
- }
-
- if (enable_debug)
- syslog_message (LOG_DEBUG, "Parent ID: (%d, %d) - (%d, %d)",
- getuid (), geteuid (), getgid (), getegid ());
-
- if (invoked_from_inetd) {
- size_t addrlen = sizeof (struct sockaddr_in);
- struct sockaddr_in peer;
-
- memset ((char *) &peer, 0, sizeof (struct sockaddr_in));
-
- if (getpeername (0, (struct sockaddr *) &peer, (void *) &addrlen)) {
- syslog_io_message (LOG_ERR, "getpeername");
- exit (1);
- }
-
- if (verbose_output)
- syslog_message (LOG_INFO, "Connection was made from %s port %u.",
- inet_ntoa (peer.sin_addr), ntohs (peer.sin_port));
-
- /* Check that access is allowed - if not return crud to the client */
- if (!permitted (peer.sin_addr.s_addr, 0)) {
- close (0);
- syslog_message (LOG_CRIT, "Refused connection from %s.",
- inet_ntoa (peer.sin_addr));
- exit (1);
- }
-
- handle_parent_connection (0);
- exit (0);
- }
-
- /* get a internet domain socket to listen on. */
- ils = internet_init ();
-
- if (ils <= 0) {
- syslog_message (LOG_ERR, "Unable to get internet domain socket.");
- exit (1);
- }
-
- glibtop_set_parameter_l (server, GLIBTOP_PARAM_METHOD,
- &method, sizeof (method));
-
- server->features = features;
-
- glibtop_init_r (&server, 0, 0);
-
- while (1) {
- fd_set rmask;
- int status, ret;
-
- while ((ret = wait3 (&status, WNOHANG, NULL)) != 0) {
- if ((ret == -1) && (errno == ECHILD))
- break;
-
- if ((ret == -1) && ((errno == EAGAIN)))
- continue;
- if (ret == 0) {
- syslog_io_message (LOG_WARNING, "wait3");
- continue;
- }
-
- if (verbose_output)
- syslog_message (LOG_INFO, "Child %d exited.", ret);
- }
-
- FD_ZERO (&rmask);
-
- /* Only the child accepts connections from standard
- * input made by its parent. */
-
- FD_SET (ils, &rmask);
-
- if (enable_debug)
- syslog_message (LOG_DEBUG,
- "Server ready and waiting for connections.");
-
- if (select (ils+1, &rmask, (fd_set *) NULL, (fd_set *) NULL,
- (struct timeval *) NULL) < 0) {
- if (errno == EINTR)
- continue;
- syslog_io_message (LOG_ERR, "select");
- exit (1);
- }
-
- if (FD_ISSET (ils, &rmask))
- handle_internet_request (ils);
- }
-
- return 0;
-}
diff --git a/src/daemon/io.c b/src/daemon/io.c
deleted file mode 100644
index 9c51de27..00000000
--- a/src/daemon/io.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-
-/* $Id$ */
-
-/* Copyright (C) 1998-99 Martin Baulig
- This file is part of LibGTop 1.0.
-
- Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
-
- LibGTop is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License,
- or (at your option) any later version.
-
- LibGTop is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- for more details.
-
- You should have received a copy of the GNU General Public License
- along with LibGTop; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-*/
-
-#include "daemon.h"
-
-void
-do_output (int s, glibtop_response *resp, off_t offset,
- size_t data_size, const void *data, int retval)
-{
-#ifdef REAL_DEBUG
- fprintf (stderr, "Really writing %d bytes at offset %lu.\n",
- sizeof (glibtop_response), offset);
-#endif
-
- resp->offset = offset;
- resp->data_size = data_size;
-
- if (s == 0) {
- if (write (1, (const void *) resp, sizeof (glibtop_response)) < 0)
- glibtop_warn_io ("write");
- } else {
- if (send (s, (const void *) resp, sizeof (glibtop_response), 0) < 0)
- glibtop_warn_io ("send");
- }
-
-
- if (s == 0) {
- if (write (1, &retval, sizeof (int)) < 0)
- glibtop_warn_io ("write retval");
- } else {
- if (send (s, &retval, sizeof (int), 0) < 0)
- glibtop_warn_io ("send retval");
- }
-
- if (resp->data_size) {
-#ifdef REAL_DEBUG
- fprintf (stderr, "Writing %d bytes of data.\n", resp->data_size);
-#endif
-
- if (s == 0) {
- if (write (1, data, resp->data_size) < 0)
- glibtop_warn_io ("write");
- } else {
- if (send (s, data, resp->data_size, 0) < 0)
- glibtop_warn_io ("send");
- }
- }
-}
-
-int
-do_read (int s, void *ptr, size_t total_size)
-{
- int nread;
- char *tmp_ptr;
- size_t already_read = 0, remaining = total_size;
-
- while (already_read < total_size) {
- if (s)
- nread = recv (s, ptr, remaining, 0);
- else
- nread = read (0, ptr, remaining);
-
- if ((already_read == 0) && (nread == 0)) {
- glibtop_warn ("pid %d received eof.", getpid ());
- return 0;
- }
-
- if (nread <= 0) {
- glibtop_warn_io ("recv");
- return 0;
- }
-
- already_read += nread;
- remaining -= nread;
- /* (char *) ptr += nread; */
- tmp_ptr = ptr;
- tmp_ptr += nread;
- ptr = tmp_ptr;
-
-#ifdef REAL_DEBUG
- fprintf (stderr, "READ (%d): %d - %d - %d\n",
- nread, already_read, remaining, total_size);
-#endif
- }
-
- return already_read;
-}
diff --git a/src/daemon/main.c b/src/daemon/main.c
deleted file mode 100644
index 6fa2e7c9..00000000
--- a/src/daemon/main.c
+++ /dev/null
@@ -1,274 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-
-/* $Id$ */
-
-/* Copyright (C) 1998-99 Martin Baulig
- This file is part of LibGTop 1.0.
-
- Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
-
- LibGTop is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License,
- or (at your option) any later version.
-
- LibGTop is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- for more details.
-
- You should have received a copy of the GNU General Public License
- along with LibGTop; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-*/
-
-#include "daemon.h"
-
-#ifdef LIBGTOP_ENABLE_DEBUG
-#ifndef PARENT_DEBUG
-#define PARENT_DEBUG 1
-#endif
-#ifndef DEBUG
-#define DEBUG 1
-#endif
-#endif
-
-void
-handle_parent_connection (int s)
-{
- glibtop *server = glibtop_global_server;
- glibtop_response _resp, *resp = &_resp;
- glibtop_command _cmnd, *cmnd = &_cmnd;
- glibtop_mountentry *mount_list;
- char parameter [BUFSIZ];
- unsigned short device;
- int64_t *param_ptr;
- int all_fs, retval;
- pid_t pid;
- void *ptr;
-
- u_int64_t interface G_GNUC_UNUSED;
- u_int64_t number G_GNUC_UNUSED;
- u_int64_t instance G_GNUC_UNUSED;
- u_int64_t strategy G_GNUC_UNUSED;
- u_int64_t transport G_GNUC_UNUSED;
- u_int64_t protocol G_GNUC_UNUSED;
-
- glibtop_send_version (glibtop_global_server, s);
-
- if (verbose_output)
- syslog_message (LOG_INFO, "Parent features = %lu",
- glibtop_server_features);
-
- if (enable_debug)
- syslog_message (LOG_DEBUG, "SIZEOF: %u - %u - %u - %u - %u - %u",
- sizeof (glibtop_command), sizeof (glibtop_response),
- sizeof (glibtop_mountentry), sizeof (glibtop_union),
- sizeof (glibtop_sysdeps),
- sizeof (glibtop_response_union));
-
- while (do_read (s, cmnd, sizeof (glibtop_command))) {
- if (enable_debug)
- syslog_message (LOG_DEBUG,
- "Parent (%d) received command %d from client.",
- getpid (), (int) cmnd->command);
-
- if (cmnd->data_size >= BUFSIZ) {
- syslog_message (LOG_WARNING,
- "Client sent %d bytes, but buffer is %d",
- cmnd->data_size, BUFSIZ);
- return;
- }
-
- memset (resp, 0, sizeof (glibtop_response));
-
- memset (parameter, 0, sizeof (parameter));
-
- if (cmnd->data_size) {
- if (enable_debug)
- syslog_message (LOG_DEBUG, "Client has %d bytes of data.",
- (int) cmnd->data_size);
-
- do_read (s, parameter, cmnd->data_size);
-
- } else if (cmnd->size) {
- memcpy (parameter, cmnd->parameter, cmnd->size);
- }
-
- switch (cmnd->command) {
- case GLIBTOP_CMND_QUIT:
- do_output (s, resp, 0, 0, NULL, 0);
- return;
- case GLIBTOP_CMND_SYSDEPS:
- memcpy (&resp->u.sysdeps, &server->sysdeps,
- sizeof (glibtop_sysdeps));
- resp->u.sysdeps.features = GLIBTOP_SYSDEPS_ALL;
- do_output (s, resp, _offset_union (sysdeps), 0, NULL, retval);
- break;
- case GLIBTOP_CMND_CPU:
- retval = glibtop_get_cpu_l (server, &resp->u.data.cpu);
- do_output (s, resp, _offset_data (cpu), 0, NULL, retval);
- break;
- case GLIBTOP_CMND_MEM:
- retval = glibtop_get_mem_l (server, &resp->u.data.mem);
- do_output (s, resp, _offset_data (mem), 0, NULL, retval);
- break;
- case GLIBTOP_CMND_SWAP:
- retval = glibtop_get_swap_l (server, &resp->u.data.swap);
- do_output (s, resp, _offset_data (swap), 0, NULL, retval);
- break;
- case GLIBTOP_CMND_UPTIME:
- retval = glibtop_get_uptime_l (server, &resp->u.data.uptime);
- do_output (s, resp, _offset_data (uptime), 0, NULL, retval);
- break;
- case GLIBTOP_CMND_LOADAVG:
- retval = glibtop_get_loadavg_l (server, &resp->u.data.loadavg);
- do_output (s, resp, _offset_data (loadavg), 0, NULL, retval);
- break;
- case GLIBTOP_CMND_SHM_LIMITS:
- retval = glibtop_get_shm_limits_l
- (server, &resp->u.data.shm_limits);
- do_output (s, resp, _offset_data (shm_limits), 0, NULL, retval);
- break;
- case GLIBTOP_CMND_MSG_LIMITS:
- retval = glibtop_get_msg_limits_l
- (server, &resp->u.data.msg_limits);
- do_output (s, resp, _offset_data (msg_limits), 0, NULL, retval);
- break;
- case GLIBTOP_CMND_SEM_LIMITS:
- retval = glibtop_get_sem_limits_l
- (server, &resp->u.data.sem_limits);
- do_output (s, resp, _offset_data (sem_limits), 0, NULL, retval);
- break;
- case GLIBTOP_CMND_PROCLIST:
- param_ptr = (int64_t *) parameter;
- ptr = glibtop_get_proclist_l (server,
- &resp->u.data.proclist,
- param_ptr [0],
- param_ptr [1]);
- do_output (s, resp, _offset_data (proclist),
- resp->u.data.proclist.total, ptr,
- (ptr != NULL) ? 0 : -1);
- glibtop_free_r (server, ptr);
- break;
- case GLIBTOP_CMND_PROC_MAP:
- memcpy (&pid, parameter, sizeof (pid_t));
- ptr = glibtop_get_proc_map_l (server,
- &resp->u.data.proc_map,
- pid);
- do_output (s, resp, _offset_data (proc_map),
- resp->u.data.proc_map.total, ptr,
- (ptr != NULL) ? 0 : -1);
- glibtop_free_r (server, ptr);
- break;
- case GLIBTOP_CMND_PROC_ARGS:
- memcpy (&pid, parameter, sizeof (pid_t));
- ptr = glibtop_get_proc_args_l (server,
- &resp->u.data.proc_args,
- pid);
- do_output (s, resp, _offset_data (proc_args),
- ptr ? resp->u.data.proc_args.size+1 : 0, ptr,
- (ptr != NULL) ? 0 : -1);
- glibtop_free_r (server, ptr);
- break;
- case GLIBTOP_CMND_PROC_STATE:
- memcpy (&pid, parameter, sizeof (pid_t));
- retval = glibtop_get_proc_state_l
- (server, &resp->u.data.proc_state, pid);
- do_output (s, resp, _offset_data (proc_state), 0, NULL, retval);
- break;
- case GLIBTOP_CMND_PROC_UID:
- memcpy (&pid, parameter, sizeof (pid_t));
- retval = glibtop_get_proc_uid_l
- (server, &resp->u.data.proc_uid, pid);
- do_output (s, resp, _offset_data (proc_uid), 0, NULL, retval);
- break;
- case GLIBTOP_CMND_PROC_MEM:
- memcpy (&pid, parameter, sizeof (pid_t));
- retval = glibtop_get_proc_mem_l
- (server, &resp->u.data.proc_mem, pid);
- do_output (s, resp, _offset_data (proc_mem), 0, NULL, retval);
- break;
- case GLIBTOP_CMND_PROC_TIME:
- memcpy (&pid, parameter, sizeof (pid_t));
- retval = glibtop_get_proc_time_l
- (server, &resp->u.data.proc_time, pid);
- do_output (s, resp, _offset_data (proc_time), 0, NULL, retval);
- break;
- case GLIBTOP_CMND_PROC_SIGNAL:
- memcpy (&pid, parameter, sizeof (pid_t));
- retval = glibtop_get_proc_signal_l
- (server, &resp->u.data.proc_signal, pid);
- do_output (s, resp, _offset_data (proc_signal), 0, NULL, retval);
- break;
- case GLIBTOP_CMND_PROC_KERNEL:
- memcpy (&pid, parameter, sizeof (pid_t));
- retval = glibtop_get_proc_kernel_l
- (server, &resp->u.data.proc_kernel, pid);
- do_output (s, resp, _offset_data (proc_kernel), 0, NULL, retval);
- break;
- case GLIBTOP_CMND_PROC_SEGMENT:
- memcpy (&pid, parameter, sizeof (pid_t));
- retval = glibtop_get_proc_segment_l
- (server, &resp->u.data.proc_segment, pid);
- do_output (s, resp, _offset_data (proc_segment), 0, NULL, retval);
- break;
- case GLIBTOP_CMND_MOUNTLIST:
- memcpy (&all_fs, parameter, sizeof (all_fs));
- mount_list = glibtop_get_mountlist_l
- (server, &resp->u.data.mountlist, all_fs);
- do_output (s, resp, _offset_data (mountlist),
- resp->u.data.mountlist.total, mount_list,
- (mount_list != NULL) ? 0 : -1);
- glibtop_free_r (server, mount_list);
- break;
- case GLIBTOP_CMND_FSUSAGE:
- retval = glibtop_get_fsusage_l
- (server, &resp->u.data.fsusage, parameter);
- do_output (s, resp, _offset_data (fsusage),
- 0, NULL, retval);
- break;
- case GLIBTOP_CMND_PPP:
- memcpy (&device, parameter, sizeof (device));
- retval = glibtop_get_ppp_l
- (server, &resp->u.data.ppp, device);
- do_output (s, resp, _offset_data (ppp), 0, NULL, retval);
- break;
- case GLIBTOP_CMND_NETINFO:
- retval = glibtop_get_netinfo_l
- (server, &resp->u.data.netinfo, parameter, 0);
- do_output (s, resp, _offset_data (netinfo),
- 0, NULL, retval);
- break;
- case GLIBTOP_CMND_NETLOAD:
- retval = glibtop_get_netload_l
- (server, &resp->u.data.netload, parameter, 0, 0);
- do_output (s, resp, _offset_data (netload),
- 0, NULL, retval);
- break;
- case GLIBTOP_CMND_INTERFACE_NAMES:
- memcpy (&interface, parameter, sizeof (u_int64_t));
- memcpy (&number, parameter + sizeof (u_int64_t),
- sizeof (u_int64_t));
- memcpy (&instance, parameter + 2 * sizeof (u_int64_t),
- sizeof (u_int64_t));
- memcpy (&strategy, parameter + 3 * sizeof (u_int64_t),
- sizeof (u_int64_t));
- ptr = glibtop_get_interface_names_l (server,
- &resp->u.data.interface_names,
- interface, number, instance,
- strategy);
- do_output (s, resp, _offset_data (interface_names),
- ptr ? resp->u.data.interface_names.size+1 : 0, ptr,
- (ptr != NULL) ? 0 : -1);
- glibtop_free_r (server, ptr);
- break;
-
- default:
- syslog_message (LOG_ERR, "Parent received unknown command %u.",
- cmnd->command);
- break;
- }
- }
-}
diff --git a/src/daemon/server.c b/src/daemon/server.c
deleted file mode 100644
index 32bc8eee..00000000
--- a/src/daemon/server.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-
-/* $Id$ */
-
-/* Copyright (C) 1998-99 Martin Baulig
- This file is part of LibGTop 1.0.
-
- Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
-
- LibGTop is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License,
- or (at your option) any later version.
-
- LibGTop is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- for more details.
-
- You should have received a copy of the GNU General Public License
- along with LibGTop; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-*/
-
-#include "daemon.h"
-
-static glibtop _glibtop_global_server;
-glibtop *glibtop_global_server = &_glibtop_global_server;
-
-#include <glibtop.h>
-#include <glibtop/union.h>
-#include <glibtop/sysdeps.h>
-
-#include <sys/utsname.h>
-
-const unsigned long glibtop_server_features =
-GLIBTOP_SUID_CPU +
-GLIBTOP_SUID_MEM +
-GLIBTOP_SUID_SWAP +
-GLIBTOP_SUID_UPTIME +
-GLIBTOP_SUID_LOADAVG +
-GLIBTOP_SUID_SHM_LIMITS +
-GLIBTOP_SUID_MSG_LIMITS +
-GLIBTOP_SUID_SEM_LIMITS +
-GLIBTOP_SUID_PROCLIST +
-GLIBTOP_SUID_PROC_STATE +
-GLIBTOP_SUID_PROC_UID +
-GLIBTOP_SUID_PROC_MEM +
-GLIBTOP_SUID_PROC_TIME +
-GLIBTOP_SUID_PROC_SIGNAL +
-GLIBTOP_SUID_PROC_KERNEL +
-GLIBTOP_SUID_PROC_SEGMENT +
-GLIBTOP_SUID_PROC_ARGS +
-GLIBTOP_SUID_PROC_MAP +
-GLIBTOP_SUID_NETINFO +
-GLIBTOP_SUID_NETLOAD +
-GLIBTOP_SUID_INTERFACE_NAMES +
-GLIBTOP_SUID_PPP;
-
-#include <fcntl.h>
-#include <locale.h>
-
-int
-main(int argc, char *argv[])
-{
- struct utsname uts;
- int uid, euid, gid, egid;
- glibtop *server;
-
- /* !!! WE ARE ROOT HERE - CHANGE WITH CAUTION !!! */
-
- uid = getuid (); euid = geteuid ();
- gid = getgid (); egid = getegid ();
-
- if (uname (&uts) < 0) _exit (1);
-
- if (strcmp (uts.sysname, LIBGTOP_COMPILE_SYSTEM) ||
- strcmp (uts.release, LIBGTOP_COMPILE_RELEASE) ||
- strcmp (uts.machine, LIBGTOP_COMPILE_MACHINE)) {
- fprintf (stderr, "Can only run on %s %s %s\n",
- LIBGTOP_COMPILE_SYSTEM,
- LIBGTOP_COMPILE_RELEASE,
- LIBGTOP_COMPILE_MACHINE);
- _exit (1);
- }
-
- server = glibtop_global_server;
-
- if (!server->_priv)
- server->_priv = glibtop_calloc_r
- (server, 1, sizeof (glibtop_server_private));
-
- glibtop_init_p (server, 0, 0);
-
- if (setreuid (euid, uid)) _exit (1);
-
- if (setregid (egid, gid)) _exit (1);
-
- /* !!! END OF SUID ROOT PART !!! */
-
- handle_slave_connection (0, 0);
-
- _exit (0);
-}
diff --git a/src/daemon/slave.c b/src/daemon/slave.c
deleted file mode 100644
index 3f90f6f5..00000000
--- a/src/daemon/slave.c
+++ /dev/null
@@ -1,296 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-
-/* $Id$ */
-
-/* Copyright (C) 1998-99 Martin Baulig
- This file is part of LibGTop 1.0.
-
- Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
-
- LibGTop is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License,
- or (at your option) any later version.
-
- LibGTop is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- for more details.
-
- You should have received a copy of the GNU General Public License
- along with LibGTop; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-*/
-
-#include "daemon.h"
-
-void
-handle_slave_connection (int input, int output)
-{
- glibtop *server G_GNUC_UNUSED = glibtop_global_server;
- int64_t *param_ptr G_GNUC_UNUSED;
- const void *ptr G_GNUC_UNUSED;
- int ret G_GNUC_UNUSED = -1;
-
- u_int64_t interface G_GNUC_UNUSED;
- u_int64_t number G_GNUC_UNUSED;
- u_int64_t instance G_GNUC_UNUSED;
- u_int64_t strategy G_GNUC_UNUSED;
- u_int64_t transport G_GNUC_UNUSED;
- u_int64_t protocol G_GNUC_UNUSED;
-
- unsigned short max_len G_GNUC_UNUSED;
- pid_t pid G_GNUC_UNUSED;
-
- glibtop_response _resp, *resp = &_resp;
- glibtop_command _cmnd, *cmnd = &_cmnd;
- char parameter [BUFSIZ];
-
- glibtop_send_version (glibtop_global_server, output);
-
- while (do_read (input, cmnd, sizeof (glibtop_command))) {
-#ifdef SLAVE_DEBUG
- fprintf (stderr, "Slave %d received command "
- "%d from client.\n", getpid (), cmnd->command);
-#endif
-
- if (cmnd->data_size >= BUFSIZ)
- glibtop_error ("Client sent %d bytes, "
- "but buffer is %d",
- cmnd->size, BUFSIZ);
-
- memset (resp, 0, sizeof (glibtop_response));
-
- memset (parameter, 0, sizeof (parameter));
-
- if (cmnd->data_size) {
-#ifdef SLAVE_DEBUG
- fprintf (stderr, "Client has %d bytes of data.\n",
- cmnd->data_size);
-#endif
-
- do_read (input, parameter, cmnd->data_size);
-
- } else if (cmnd->size) {
- memcpy (parameter, cmnd->parameter, cmnd->size);
- }
-
- switch (cmnd->command) {
- case GLIBTOP_CMND_QUIT:
- do_output (output, resp, 0, 0, NULL, 0);
- return;
-#if GLIBTOP_SUID_PROCLIST
- case GLIBTOP_CMND_PROCLIST:
- param_ptr = (int64_t *) parameter;
- ptr = glibtop_get_proclist_p
- (server, &resp->u.data.proclist,
- param_ptr [0], param_ptr [1]);
- do_output (output, resp, _offset_data (proclist),
- resp->u.data.proclist.total,
- ptr, (ptr != NULL) ? 0 : -1);
- glibtop_free_r (server, ptr);
- break;
-#endif
-#if GLIBTOP_SUID_PROC_ARGS
- case GLIBTOP_CMND_PROC_ARGS:
- memcpy (&pid, parameter, sizeof (pid_t));
- memcpy (&max_len, parameter + sizeof (pid_t),
- sizeof (max_len));
- ptr = glibtop_get_proc_args_p (server,
- &resp->u.data.proc_args,
- pid);
- do_output (output, resp, _offset_data (proc_args),
- ptr ? resp->u.data.proc_args.size+1 : 0,
- ptr, (ptr != NULL) ? 0 : -1);
- glibtop_free_r (server, ptr);
- break;
-#endif
-#if GLIBTOP_SUID_PROC_MAP
- case GLIBTOP_CMND_PROC_MAP:
- memcpy (&pid, parameter, sizeof (pid_t));
- ptr = glibtop_get_proc_map_p (server,
- &resp->u.data.proc_map,
- pid);
- do_output (output, resp, _offset_data (proc_map),
- resp->u.data.proc_map.total,
- ptr, (ptr != NULL) ? 0 : -1);
- glibtop_free_r (server, ptr);
- break;
-#endif
-#if GLIBTOP_SUID_INTERFACE_NAMES
- case GLIBTOP_CMND_INTERFACE_NAMES:
- memcpy (&interface, parameter, sizeof (u_int64_t));
- memcpy (&number, parameter + sizeof (u_int64_t),
- sizeof (u_int64_t));
- memcpy (&instance, parameter + 2 * sizeof (u_int64_t),
- sizeof (u_int64_t));
- memcpy (&strategy, parameter + 3 * sizeof (u_int64_t),
- sizeof (u_int64_t));
- ptr = glibtop_get_interface_names_p
- (server, &resp->u.data.interface_names,
- interface, number, instance, strategy);
- do_output (output, resp, _offset_data (interface_names),
- ptr ? resp->u.data.interface_names.size+1 : 0,
- ptr, (ptr != NULL) ? 0 : -1);
- glibtop_free_r (server, ptr);
- break;
-#endif
- default:
- ret = handle_slave_command (cmnd, resp, parameter);
- do_output (output, resp, resp->offset, 0, NULL, ret);
- break;
- }
- }
-}
-
-int
-handle_slave_command (glibtop_command *cmnd, glibtop_response *resp,
- const void *parameter)
-{
- glibtop *server = glibtop_global_server;
- unsigned device G_GNUC_UNUSED;
- pid_t pid G_GNUC_UNUSED;
- int retval G_GNUC_UNUSED = -1;
-
- switch (cmnd->command) {
- case GLIBTOP_CMND_SYSDEPS:
- memcpy (&resp->u.sysdeps, &server->sysdeps,
- sizeof (glibtop_sysdeps));
- resp->u.sysdeps.features = glibtop_server_features;
- resp->u.sysdeps.pointer_size = sizeof (void*)*8;
- resp->u.sysdeps.flags = glibtop_server_features;
- resp->offset = _offset_union (sysdeps);
- retval = 0;
- break;
-#if GLIBTOP_SUID_CPU
- case GLIBTOP_CMND_CPU:
- retval = glibtop_get_cpu_p (server, &resp->u.data.cpu);
- resp->offset = _offset_data (cpu);
- break;
-#endif
-#if GLIBTOP_SUID_MEM
- case GLIBTOP_CMND_MEM:
- retval = glibtop_get_mem_p (server, &resp->u.data.mem);
- resp->offset = _offset_data (mem);
- break;
-#endif
-#if GLIBTOP_SUID_SWAP
- case GLIBTOP_CMND_SWAP:
- retval = glibtop_get_swap_p (server, &resp->u.data.swap);
- resp->offset = _offset_data (swap);
- break;
-#endif
-#if GLIBTOP_SUID_UPTIME
- case GLIBTOP_CMND_UPTIME:
- retval = glibtop_get_uptime_p (server, &resp->u.data.uptime);
- resp->offset = _offset_data (uptime);
- break;
-#endif
-#if GLIBTOP_SUID_LOADAVG
- case GLIBTOP_CMND_LOADAVG:
- retval = glibtop_get_loadavg_p (server, &resp->u.data.loadavg);
- resp->offset = _offset_data (loadavg);
- break;
-#endif
-#if GLIBTOP_SUID_SHM_LIMITS
- case GLIBTOP_CMND_SHM_LIMITS:
- retval = glibtop_get_shm_limits_p (server, &resp->u.data.shm_limits);
- resp->offset = _offset_data (shm_limits);
- break;
-#endif
-#if GLIBTOP_SUID_MSG_LIMITS
- case GLIBTOP_CMND_MSG_LIMITS:
- retval = glibtop_get_msg_limits_p (server, &resp->u.data.msg_limits);
- resp->offset = _offset_data (msg_limits);
- break;
-#endif
-#if GLIBTOP_SUID_SEM_LIMITS
- case GLIBTOP_CMND_SEM_LIMITS:
- retval = glibtop_get_sem_limits_p (server, &resp->u.data.sem_limits);
- resp->offset = _offset_data (sem_limits);
- break;
-#endif
-#if GLIBTOP_SUID_PROC_STATE
- case GLIBTOP_CMND_PROC_STATE:
- memcpy (&pid, parameter, sizeof (pid_t));
- retval = glibtop_get_proc_state_p
- (server, &resp->u.data.proc_state, pid);
- resp->offset = _offset_data (proc_state);
- break;
-#endif
-#if GLIBTOP_SUID_PROC_UID
- case GLIBTOP_CMND_PROC_UID:
- memcpy (&pid, parameter, sizeof (pid_t));
- retval = glibtop_get_proc_uid_p
- (server, &resp->u.data.proc_uid, pid);
- resp->offset = _offset_data (proc_uid);
- break;
-#endif
-#if GLIBTOP_SUID_PROC_MEM
- case GLIBTOP_CMND_PROC_MEM:
- memcpy (&pid, parameter, sizeof (pid_t));
- retval = glibtop_get_proc_mem_p
- (server, &resp->u.data.proc_mem, pid);
- resp->offset = _offset_data (proc_mem);
- break;
-#endif
-#if GLIBTOP_SUID_PROC_TIME
- case GLIBTOP_CMND_PROC_TIME:
- memcpy (&pid, parameter, sizeof (pid_t));
- retval = glibtop_get_proc_time_p
- (server, &resp->u.data.proc_time, pid);
- resp->offset = _offset_data (proc_time);
- break;
-#endif
-#if GLIBTOP_SUID_PROC_SIGNAL
- case GLIBTOP_CMND_PROC_SIGNAL:
- memcpy (&pid, parameter, sizeof (pid_t));
- retval = glibtop_get_proc_signal_p
- (server, &resp->u.data.proc_signal, pid);
- resp->offset = _offset_data (proc_signal);
- break;
-#endif
-#if GLIBTOP_SUID_PROC_KERNEL
- case GLIBTOP_CMND_PROC_KERNEL:
- memcpy (&pid, parameter, sizeof (pid_t));
- retval = glibtop_get_proc_kernel_p
- (server, &resp->u.data.proc_kernel, pid);
- resp->offset = _offset_data (proc_kernel);
- break;
-#endif
-#if GLIBTOP_SUID_PROC_SEGMENT
- case GLIBTOP_CMND_PROC_SEGMENT:
- memcpy (&pid, parameter, sizeof (pid_t));
- retval = glibtop_get_proc_segment_p
- (server, &resp->u.data.proc_segment, pid);
- resp->offset = _offset_data (proc_segment);
- break;
-#endif
-#if GLIBTOP_SUID_NETINFO
- case GLIBTOP_CMND_NETINFO:
- retval = glibtop_get_netinfo_p (server, &resp->u.data.netinfo, parameter, 0);
- resp->offset = _offset_data (netload);
- break;
-#endif
-#if GLIBTOP_SUID_NETLOAD
- case GLIBTOP_CMND_NETLOAD:
- retval = glibtop_get_netload_p (server, &resp->u.data.netload, parameter, 0, 0);
- resp->offset = _offset_data (netload);
- break;
-#endif
-#if GLIBTOP_SUID_PPP
- case GLIBTOP_CMND_PPP:
- memcpy (&device, parameter, sizeof (unsigned short));
- retval = glibtop_get_ppp_p (server, &resp->u.data.ppp, device);
- resp->offset = _offset_data (ppp);
- break;
-#endif
- default:
- glibtop_error ("Child received unknown command %u",
- cmnd->command);
- break;
- }
-
- return retval;
-}
diff --git a/src/daemon/version.c b/src/daemon/version.c
deleted file mode 100644
index 73c9714d..00000000
--- a/src/daemon/version.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-
-/* $Id$ */
-
-/* Copyright (C) 1998-99 Martin Baulig
- This file is part of LibGTop 1.0.
-
- Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
-
- LibGTop is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License,
- or (at your option) any later version.
-
- LibGTop is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- for more details.
-
- You should have received a copy of the GNU General Public License
- along with LibGTop; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-*/
-
-#include <glibtop.h>
-#include <glibtop/error.h>
-#include <glibtop/version.h>
-
-void
-glibtop_send_version (glibtop *server, int fd)
-{
- char buffer [BUFSIZ];
- size_t size;
-
- sprintf (buffer, LIBGTOP_VERSION_STRING,
- LIBGTOP_VERSION, LIBGTOP_SERVER_VERSION,
- sizeof (glibtop_command),
- sizeof (glibtop_response),
- sizeof (glibtop_union),
- sizeof (glibtop_sysdeps));
-
- size = strlen (buffer) + 1;
-
-#ifdef DEBUG
- fprintf (stderr, "SERVER ID: |%s|\n", buffer);
-#endif
-
- if (fd == 0) {
- if (write (1, (const void *) &size, sizeof (size)) < 0)
- glibtop_warn_io_r (server, "write");
- } else {
- if (send (fd, (const void *) &size, sizeof (size), 0) < 0)
- glibtop_warn_io_r (server, "send");
- }
-
- if (fd == 0) {
- if (write (1, (const void *) buffer, size) < 0)
- glibtop_warn_io_r (server, "write");
- } else {
- if (send (fd, (const void *) buffer, size, 0) < 0)
- glibtop_warn_io_r (server, "send");
- }
-}