diff options
author | Martin Baulig <martin@home-of-linux.org> | 2000-01-09 21:58:34 +0000 |
---|---|---|
committer | Martin Baulig <martin@src.gnome.org> | 2000-01-09 21:58:34 +0000 |
commit | cb96ce0ad2ef24564f37ee75df52068cd728551d (patch) | |
tree | 32f70059dcbd215f72876f53a3a00acc70f9feaf /src | |
parent | 938a444edf7a5b3b247f644ffd02bd8bba80ffec (diff) | |
download | libgtop-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.am | 2 | ||||
-rw-r--r-- | src/daemon/ChangeLog | 101 | ||||
-rw-r--r-- | src/daemon/Makefile.am | 45 | ||||
-rw-r--r-- | src/daemon/daemon.h | 83 | ||||
-rw-r--r-- | src/daemon/gnuserv.c | 640 | ||||
-rw-r--r-- | src/daemon/io.c | 109 | ||||
-rw-r--r-- | src/daemon/main.c | 274 | ||||
-rw-r--r-- | src/daemon/server.c | 105 | ||||
-rw-r--r-- | src/daemon/slave.c | 296 | ||||
-rw-r--r-- | src/daemon/version.c | 64 |
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"); - } -} |