Add osiris package
authorNicolas Thill <nico@openwrt.org>
Sat, 14 May 2005 22:01:37 +0000 (22:01 +0000)
committerNicolas Thill <nico@openwrt.org>
Sat, 14 May 2005 22:01:37 +0000 (22:01 +0000)
SVN-Revision: 900

openwrt/package/Config.in
openwrt/package/Makefile
openwrt/package/osiris/Config.in [new file with mode: 0644]
openwrt/package/osiris/Makefile [new file with mode: 0644]
openwrt/package/osiris/files/osirisd.init [new file with mode: 0644]
openwrt/package/osiris/ipkg/osirisd.control [new file with mode: 0644]
openwrt/package/osiris/patches/configure-cross.patch [new file with mode: 0644]
openwrt/package/osiris/patches/install-non-interactive.patch [new file with mode: 0644]
openwrt/package/osiris/patches/mod_nvram.patch [new file with mode: 0644]
openwrt/package/osiris/patches/mod_uptime.patch [new file with mode: 0644]
openwrt/package/osiris/patches/osirisd-pidfile.patch [new file with mode: 0644]

index a221e5b03a450cad8ad398d5fa2cdf24502f5a8d..3ab661f7939e7fcba8e6783775afa9f6acb880cb 100644 (file)
@@ -17,6 +17,7 @@ source "package/strace/Config.in"
 source "package/lcd4linux/Config.in"
 source "package/setserial/Config.in"
 source "package/screen/Config.in"
+source "package/osiris/Config.in"
 
 comment "Networking"
 source "package/tcpdump/Config.in"
index 1ff67060efb040ce84833d78ed2360e93a2061c9..5f9a3f366b672e89c4dcc4a25a055944de2f98d5 100644 (file)
@@ -87,6 +87,7 @@ package-$(BR2_PACKAGE_LIBOSIP2) += libosip2
 package-$(BR2_PACKAGE_SIPROXD) += siproxd
 package-$(BR2_PACKAGE_SIPSAK) += sipsak
 package-$(BR2_PACKAGE_HTPDATE) += htpdate
+package-$(BR2_PACKAGE_OSIRISD) += osiris
 
 DEV_LIBS:=tcp_wrappers glib ncurses openssl pcre popt zlib libnet libpcap mysql postgresql iptables matrixssl lzo gmp fuse portmap libelf uclibc++ speex libpng libgd
 DEV_LIBS_COMPILE:=$(patsubst %,%-compile,$(DEV_LIBS))
@@ -134,6 +135,7 @@ cyrus-sasl-compile: openssl-compile
 openldap-compile: cyrus-sasl-compile openssl-compile
 siproxd-compile: libosip2-compile
 sipsak-compile: openssl-compile
+osiris-compile: openssl-compile
 
 snort-compile: libnet-compile libpcap-compile pcre-compile
 ifeq ($(BR2_PACKAGE_SNORT_MYSQL),y)
diff --git a/openwrt/package/osiris/Config.in b/openwrt/package/osiris/Config.in
new file mode 100644 (file)
index 0000000..dbb2d93
--- /dev/null
@@ -0,0 +1,11 @@
+config BR2_PACKAGE_OSIRISD
+       tristate "osirisd - an Host Integrity Monitoring System (scanning agent)
+       default m if CONFIG_DEVEL
+       select BR2_PACKAGE_OPENSSL
+       help
+         An Host Integrity Monitoring System (scanning agent)
+         
+         http://www.hostintegrity.com/osiris/
+         
+         Depends: openssl
+         
diff --git a/openwrt/package/osiris/Makefile b/openwrt/package/osiris/Makefile
new file mode 100644 (file)
index 0000000..ca7056d
--- /dev/null
@@ -0,0 +1,70 @@
+# $Id$
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=osiris
+PKG_VERSION:=4.1.8
+PKG_RELEASE:=1
+PKG_MD5SUM:=27a362ba5ad3025d5bca6d9c92196875
+
+PKG_SOURCE_URL:=http://www.hostintegrity.com/osiris/data/
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_CAT:=zcat
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
+PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install
+
+include $(TOPDIR)/package/rules.mk
+
+$(eval $(call PKG_template,OSIRISD,osirisd,$(PKG_VERSION)-$(PKG_RELEASE),$(ARCH)))
+
+$(PKG_BUILD_DIR)/.configured:
+       (cd $(PKG_BUILD_DIR); rm -rf config.{cache,status} ; \
+               $(TARGET_CONFIGURE_OPTS) \
+               CFLAGS="$(TARGET_CFLAGS)" \
+               CPPFLAGS="-I$(STAGING_DIR)/usr/include" \
+               LDFLAGS="-L$(STAGING_DIR)/usr/lib" \
+               ac_cv_openssldir="$(STAGING_DIR)/usr" \
+               ac_cv_have_accrights_in_msghdr=no \
+               ac_cv_have_control_in_msghdr=yes \
+               ./configure \
+                 --target=$(GNU_TARGET_NAME) \
+                 --host=$(GNU_TARGET_NAME) \
+                 --build=$(GNU_HOST_NAME) \
+                 --program-prefix="" \
+                 --program-suffix="" \
+                 --prefix=/usr \
+                 --exec-prefix=/usr \
+                 --bindir=/usr/bin \
+                 --datadir=/usr/share \
+                 --includedir=/usr/include \
+                 --infodir=/usr/share/info \
+                 --libdir=/usr/lib \
+                 --libexecdir=/usr/lib \
+                 --localstatedir=/var \
+                 --mandir=/usr/share/man \
+                 --sbindir=/usr/sbin \
+                 --sysconfdir=/etc \
+                 $(DISABLE_LARGEFILE) \
+                 $(DISABLE_NLS) \
+                 --with-osiris-user=root \
+                 --with-root-dir=/var/lib/osiris \
+       );
+       touch $(PKG_BUILD_DIR)/.configured
+
+$(PKG_BUILD_DIR)/.built:
+       $(MAKE) -C $(PKG_BUILD_DIR)
+       mkdir -p $(PKG_INSTALL_DIR)
+       $(MAKE) -C $(PKG_BUILD_DIR) \
+               DESTDIR="$(PKG_INSTALL_DIR)" \
+               INTERACTIVE=0 \
+               install
+       touch $(PKG_BUILD_DIR)/.built
+
+$(IPKG_OSIRISD):
+       install -d -m0755 $(IDIR_OSIRISD)/etc/init.d
+       install -m0755 ./files/osirisd.init $(IDIR_OSIRISD)/etc/init.d/osirisd
+       install -d -m0755 $(IDIR_OSIRISD)/usr/sbin
+       cp -fpR $(PKG_INSTALL_DIR)/usr/sbin/osirisd $(IDIR_OSIRISD)/usr/sbin/
+       $(RSTRIP) $(IDIR_OSIRISD)
+       $(IPKG_BUILD) $(IDIR_OSIRISD) $(PACKAGE_DIR)
diff --git a/openwrt/package/osiris/files/osirisd.init b/openwrt/package/osiris/files/osirisd.init
new file mode 100644 (file)
index 0000000..75904e3
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+BIN=osirisd
+DEFAULT=/etc/default/$BIN
+LIB_D=/var/lib/osiris
+RUN_D=/var/run
+PID_F=$RUN_D/$BIN.pid
+[ -f $DEFAULT ] && . $DEFAULT
+
+case $1 in
+ start)
+  mkdir -p $LIB_D
+  mkdir -p $RUN_D
+  $BIN $OPTIONS
+  ;;
+ stop)
+  [ -f $PID_F ] && kill $(cat $PID_F)
+  ;;
+ *)
+  echo "usage: $0 (start|stop)"
+  exit 1
+esac
+exit $?
diff --git a/openwrt/package/osiris/ipkg/osirisd.control b/openwrt/package/osiris/ipkg/osirisd.control
new file mode 100644 (file)
index 0000000..6daa27a
--- /dev/null
@@ -0,0 +1,9 @@
+Package: osirisd
+Priority: optional
+Section: admin
+Version: [TBDL]
+Architecture: [TBDL]
+Maintainer: Nico <nthill@free.fr>
+Source: http://nthill.free.fr/openwrt/sources/osiris/
+Description: an Host Integrity Monitoring System (scanning agent)
+Depends: libopenssl, libpthread
diff --git a/openwrt/package/osiris/patches/configure-cross.patch b/openwrt/package/osiris/patches/configure-cross.patch
new file mode 100644 (file)
index 0000000..9ef79d0
--- /dev/null
@@ -0,0 +1,22 @@
+--- osiris-4.1.8-orig/configure        2005-04-13 15:22:13.000000000 +0200
++++ osiris-4.1.8-1/configure   2005-04-22 23:11:32.000000000 +0200
+@@ -3606,7 +3606,7 @@
+ esac
+-DB_CONFIG_ARGS="--enable-shared=no --enable-static=yes"
++DB_CONFIG_ARGS="--target=${target} --host=${host} --build=${build} --enable-shared=no --enable-static=yes"
+ case "${OS_NAME}" in
+     MINGW32*)
+--- osiris-4.1.8-orig/configure.ac     2005-04-13 15:22:13.000000000 +0200
++++ osiris-4.1.8-1/configure.ac        2005-04-22 23:11:32.000000000 +0200
+@@ -270,7 +270,7 @@
+ dnl configure local copy of Berkely DB:
+-DB_CONFIG_ARGS="--enable-shared=no --enable-static=yes"
++DB_CONFIG_ARGS="--target=${target} --host=${host} --build=${build} --enable-shared=no --enable-static=yes"
+ case "${OS_NAME}" in
+     MINGW32*)
diff --git a/openwrt/package/osiris/patches/install-non-interactive.patch b/openwrt/package/osiris/patches/install-non-interactive.patch
new file mode 100644 (file)
index 0000000..ac5a177
--- /dev/null
@@ -0,0 +1,70 @@
+diff -ruN osiris-4.1.8-orig/Makefile.am osiris-4.1.8-1/Makefile.am
+--- osiris-4.1.8-orig/Makefile.am      2005-01-13 06:49:15.000000000 +0100
++++ osiris-4.1.8-1/Makefile.am 2005-04-22 23:11:32.000000000 +0200
+@@ -72,5 +72,5 @@
+ # everything.
+ install-data-local:
+-      @cd ./src/install;./install.sh
++      @cd ./src/install;./install.sh non-interactive
+       @rm ./src/osirisd/modules/libmodules.a
+diff -ruN osiris-4.1.8-orig/Makefile.in osiris-4.1.8-1/Makefile.in
+--- osiris-4.1.8-orig/Makefile.in      2005-04-04 14:51:19.000000000 +0200
++++ osiris-4.1.8-1/Makefile.in 2005-04-22 23:11:32.000000000 +0200
+@@ -505,7 +505,7 @@
+ # everything.
+ install-data-local:
+-      @cd ./src/install;./install.sh
++      @cd ./src/install;./install.sh non-interactive
+       @rm ./src/osirisd/modules/libmodules.a
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+diff -ruN osiris-4.1.8-orig/configure osiris-4.1.8-1/configure
+diff -ruN osiris-4.1.8-orig/configure.ac osiris-4.1.8-1/configure.ac
+diff -ruN osiris-4.1.8-orig/ipkg/osirisd/CONTROL/control osiris-4.1.8-1/ipkg/osirisd/CONTROL/control
+diff -ruN osiris-4.1.8-orig/ipkg/osirisd/etc/init.d/osirisd osiris-4.1.8-1/ipkg/osirisd/etc/init.d/osirisd
+diff -ruN osiris-4.1.8-orig/ipkg/osirisd-static/CONTROL/control osiris-4.1.8-1/ipkg/osirisd-static/CONTROL/control
+diff -ruN osiris-4.1.8-orig/ipkg/rules osiris-4.1.8-1/ipkg/rules
+diff -ruN osiris-4.1.8-orig/ipkg/version osiris-4.1.8-1/ipkg/version
+diff -ruN osiris-4.1.8-orig/src/install/install.sh.in osiris-4.1.8-1/src/install/install.sh.in
+--- osiris-4.1.8-orig/src/install/install.sh.in        2005-04-15 22:38:31.000000000 +0200
++++ osiris-4.1.8-1/src/install/install.sh.in   2005-04-22 23:41:21.000000000 +0200
+@@ -14,7 +14,9 @@
+ SERVICE_DESC="Osiris Host Integrity Monitor"
+-INTERACTIVE=1
++if [ -z "${INTERACTIVE}" ]; then
++    INTERACTIVE=1
++fi
+ PACKAGE_MODE=0
+ NO_USER_ADDED=0
+@@ -1117,18 +1119,6 @@
+  # look for interactive mode argument.
+-if [ -z "${1}" ] ; then
+-    INTERACTIVE=1
+-else
+-    INTERACTIVE=0
+-fi
+-
+-# Change behaviour if we are creating packages.
+-if [ -n "$DESTDIR" ]; then
+-    PACKAGE_MODE=1
+-    INTERACTIVE=0
+-fi
+-
+ pre_install
+ create_users_and_groups
+ prompts
+diff -ruN osiris-4.1.8-orig/src/osirisd/modules/mod_nvram/Makefile osiris-4.1.8-1/src/osirisd/modules/mod_nvram/Makefile
+diff -ruN osiris-4.1.8-orig/src/osirisd/modules/mod_nvram/README osiris-4.1.8-1/src/osirisd/modules/mod_nvram/README
+diff -ruN osiris-4.1.8-orig/src/osirisd/modules/mod_nvram/mod_nvram.c osiris-4.1.8-1/src/osirisd/modules/mod_nvram/mod_nvram.c
+diff -ruN osiris-4.1.8-orig/src/osirisd/modules/mod_uptime/Makefile osiris-4.1.8-1/src/osirisd/modules/mod_uptime/Makefile
+diff -ruN osiris-4.1.8-orig/src/osirisd/modules/mod_uptime/README osiris-4.1.8-1/src/osirisd/modules/mod_uptime/README
+diff -ruN osiris-4.1.8-orig/src/osirisd/modules/mod_uptime/mod_uptime.c osiris-4.1.8-1/src/osirisd/modules/mod_uptime/mod_uptime.c
+diff -ruN osiris-4.1.8-orig/src/osirisd/osirisd.c osiris-4.1.8-1/src/osirisd/osirisd.c
+diff -ruN osiris-4.1.8-orig/src/osirisd/rootpriv.c osiris-4.1.8-1/src/osirisd/rootpriv.c
diff --git a/openwrt/package/osiris/patches/mod_nvram.patch b/openwrt/package/osiris/patches/mod_nvram.patch
new file mode 100644 (file)
index 0000000..91ad1ec
--- /dev/null
@@ -0,0 +1,207 @@
+--- osiris-4.1.8-orig/src/osirisd/modules/mod_nvram/Makefile   1970-01-01 01:00:00.000000000 +0100
++++ osiris-4.1.8-1/src/osirisd/modules/mod_nvram/Makefile      2005-04-22 23:11:32.000000000 +0200
+@@ -0,0 +1,16 @@
++
++include ../Makefile
++
++SRCS=mod_nvram.c
++OBJS=$(SRCS:.c=.o)
++
++module: ${SRCS} ${OBJS}
++
++INCS=-I../.. -I../../../libosiris -I../../../libfileapi -I../../../..
++
++# meta-rule for compiling any "C" source file.
++$(OBJS): $(SRCS)
++      $(CC) $(DEFS) $(DEFAULT_INCLUDES) ${INCLUDES} ${INCS} $(AM_CPPFLAGS) \
++      $(CPPFLAGS) $(AM_CFLAGS)  $(CFLAGS) -c $(SRCS)
++      cp $@ ..
++
+--- osiris-4.1.8-orig/src/osirisd/modules/mod_nvram/README     1970-01-01 01:00:00.000000000 +0100
++++ osiris-4.1.8-1/src/osirisd/modules/mod_nvram/README        2005-04-22 23:11:32.000000000 +0200
+@@ -0,0 +1,40 @@
++
++Module: mod_nvram
++Author: Brian Wotring (brian@shmoo.com)
++
++
++
++DESCRIPTION:
++
++The mod_nvram module reads the key=value pairs stored in nvram.  This
++is primarily for Linksys routers, but could be modified to run on
++other systems if necessary.  On the routers like the WRT54G, the 
++nvram settings hold sensitive information that needs to be monitored.
++The format for the record structure is as follows:
++
++    name:value
++
++USE:
++
++To use this module, all  that is needed is to include it in the System
++block of a scan configuration, e.g.:
++
++    <System>
++    ...
++    Include mod_nvram
++    ...
++    </System>
++
++
++PARAMETERS:
++
++There are no parameters for this module.
++
++PLATFORMS:
++
++Currently, only for the Linksys WRT54G and WRT54GS devices.    
++
++NOTES:
++
++
++
+--- osiris-4.1.8-orig/src/osirisd/modules/mod_nvram/mod_nvram.c        1970-01-01 01:00:00.000000000 +0100
++++ osiris-4.1.8-1/src/osirisd/modules/mod_nvram/mod_nvram.c   2005-04-22 23:11:32.000000000 +0200
+@@ -0,0 +1,142 @@
++
++/******************************************************************************
++**
++**  This program is free software; you can redistribute it and/or
++**  modify it, however, you cannot sell it.
++**
++**  This program 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.
++**
++**  You should have received a copy of the license attached to the
++**  use of this software.  If not, visit www.shmoo.com/osiris for
++**  details.
++**
++******************************************************************************/
++
++/*****************************************************************************
++**
++**  File:    mod_users.c
++**  Date:    January 1, 2004
++**
++**  Author:  Brian Wotring
++**  Purpose: platform specific methods for reading user file information.
++**
++******************************************************************************/
++
++#include "libosiris.h"
++#include "libfileapi.h"
++#include "rootpriv.h"
++#include "common.h"
++#include "version.h"
++
++#include "scanner.h"
++#include "logging.h"
++
++
++#define NVRAM_PATH "/usr/sbin/nvram"
++#define NVRAM_ARG "show"
++
++static const char *MODULE_NAME = "mod_nvram";
++
++
++void mod_nvram( SCANNER *scanner )
++{
++    int pid;
++    int pc[2];
++    int cp[2];
++    char temp_line[4096];
++    FILE *file;
++    SCAN_RECORD_TEXT_1 record;
++
++    if( pipe(pc) < 0)
++    {
++        log_error( "mod_nvram: error creating pipe!" );
++        return;
++    }
++
++    if( pipe(cp) < 0)
++    {
++        log_error( "mod_nvram: error creating pipe!" );
++        return;
++    }
++
++    /* Create a child to run nvram command. */
++
++    switch( pid = fork() )
++    {
++        case -1:
++            log_error( "nvram: fork error!" );
++            return;
++
++        case 0:
++
++            /* child */
++
++            close(1);    
++            dup( cp[1]); 
++            close(0); 
++            close( pc[1]);
++            close( cp[0]);
++            execl( NVRAM_PATH, NVRAM_PATH, NVRAM_ARG, NULL );
++            exit(0);
++
++        default:
++
++            /* parent */
++
++            close(pc[1]);
++            close(cp[1]);
++
++            file = fdopen( cp[0], "r" );
++
++            for(;;)
++            {
++                char *line;
++                char *key_end;
++
++                line = fgets( temp_line, sizeof( temp_line ), file );
++
++                if( line == NULL)
++                {
++                    break;
++                }
++
++                line = trim_white_space( line );
++
++                /* skip commented and empty lines. */
++
++                if( ( line == NULL ) || ( line[0] == '#' ) )
++                {
++                    continue;
++                }
++
++                /* locate the username, this is the first item in the colon list. */
++
++                if( ( key_end = strchr( line, '=' ) ) == NULL )
++                {
++                    continue;
++                }
++
++                initialize_scan_record( (SCAN_RECORD *)&record,
++                                         SCAN_RECORD_TYPE_TEXT_1 );
++
++                osi_strlcpy( record.module_name, MODULE_NAME,
++                             sizeof( record.module_name ) );
++
++                /* user the key as a key/path for this record. */
++
++                (*key_end) = '\0';
++                key_end++;
++                osi_strlcpy( record.name, "nvram:", sizeof( record.name ) );
++                osi_strlcat( record.name, line, sizeof( record.name ) );
++
++                /* now copy in the value into the data portion. */
++                /* and send this record on its way.             */
++
++                osi_strlcpy( record.data, key_end, sizeof( record.data ) );
++                send_scan_data( scanner, (SCAN_RECORD *)&record );
++            }
++    }
++}
++
diff --git a/openwrt/package/osiris/patches/mod_uptime.patch b/openwrt/package/osiris/patches/mod_uptime.patch
new file mode 100644 (file)
index 0000000..138075f
--- /dev/null
@@ -0,0 +1,239 @@
+--- osiris-4.1.8-orig/src/osirisd/modules/mod_uptime/Makefile  1970-01-01 01:00:00.000000000 +0100
++++ osiris-4.1.8-1/src/osirisd/modules/mod_uptime/Makefile     2005-04-22 23:11:32.000000000 +0200
+@@ -0,0 +1,16 @@
++
++include ../Makefile
++
++SRCS=mod_uptime.c
++OBJS=$(SRCS:.c=.o)
++
++module: ${SRCS} ${OBJS}
++
++INCS=-I../.. -I../../../libosiris -I../../../libfileapi -I../../../..
++
++# meta-rule for compiling any "C" source file.
++$(OBJS): $(SRCS)
++      $(CC) $(DEFS) $(DEFAULT_INCLUDES) ${INCLUDES} ${INCS} $(AM_CPPFLAGS) \
++      $(CPPFLAGS) $(AM_CFLAGS)  $(CFLAGS) -c $(SRCS)
++      cp $@ ..
++
+--- osiris-4.1.8-orig/src/osirisd/modules/mod_uptime/README    1970-01-01 01:00:00.000000000 +0100
++++ osiris-4.1.8-1/src/osirisd/modules/mod_uptime/README       2005-04-22 23:11:32.000000000 +0200
+@@ -0,0 +1,36 @@
++
++Module: mod_uptime
++Author: Brian Wotring (brian@shmoo.com)
++
++
++
++DESCRIPTION:
++
++The mod_uptime module obtains the system boot time value for comparison
++with scans.
++
++USE:
++
++To use this module, all  that is needed is to include it in the System
++block of a scan configuration, e.g.:
++
++    <System>
++    ...
++    Include mod_uptime
++    ...
++    </System>
++
++
++PARAMETERS:
++
++There are no parameters for this module.
++
++PLATFORMS:
++    
++Currently, this module is implemented for FreeBSD, OpenBSD,
++Linux, Solaris, and Mac OS X.
++
++NOTES:
++
++
++
+--- osiris-4.1.8-orig/src/osirisd/modules/mod_uptime/mod_uptime.c      1970-01-01 01:00:00.000000000 +0100
++++ osiris-4.1.8-1/src/osirisd/modules/mod_uptime/mod_uptime.c 2005-04-22 23:11:32.000000000 +0200
+@@ -0,0 +1,178 @@
++
++/******************************************************************************
++**
++**  This program is free software; you can redistribute it and/or
++**  modify it, however, you cannot sell it.
++**
++**  This program 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.
++**
++**  You should have received a copy of the license attached to the
++**  use of this software.  If not, visit www.shmoo.com/osiris for
++**  details.
++**
++******************************************************************************/
++
++/*****************************************************************************
++**
++**  File:    mod_uptime.c
++**  Date:    March 22, 2004
++**
++**  Author:  Brian Wotring
++**  Purpose: platform specific methods for obtaining the system boot time.
++**
++******************************************************************************/
++
++#include "libosiris.h"
++#include "libfileapi.h"
++#include "rootpriv.h"
++#include "common.h"
++#include "version.h"
++
++#include "scanner.h"
++#include "logging.h"
++#include "config.h"
++
++#ifdef HAVE_SYS_SYSCTL_H
++#include <sys/sysctl.h>
++#endif
++
++#ifdef SYSTEM_SUNOS
++#include <utmpx.h>
++#endif
++
++#ifdef SYSTEM_LINUX
++#include <utmp.h>
++#endif
++
++#define PROC_FILE "/proc/uptime"
++#define OSI_WTMP_FILE "/var/log/wtmp"
++
++static const char *MODULE_NAME = "mod_uptime";
++
++
++void mod_uptime( SCANNER *scanner )
++{
++    SCAN_RECORD_TEXT_1 record;
++    char *time = NULL;
++    char *temp;
++
++    initialize_scan_record( (SCAN_RECORD *)&record,
++                             SCAN_RECORD_TYPE_TEXT_1 );
++
++    osi_strlcpy( record.module_name, MODULE_NAME,
++                 sizeof( record.module_name ) );
++
++#if defined(SYSTEM_FREEBSD) || defined(SYSTEM_OPENBSD) || defined(SYSTEM_DARWIN)
++    {
++        time_t t;
++        struct timeval result;
++
++        int request[2] = { CTL_KERN, KERN_BOOTTIME };
++        size_t result_len = sizeof(result);
++
++        if( sysctl( request, 2, &result, &result_len, NULL, 0 ) < 0)
++        {
++            log_error( "unable to obtain uptime value." );
++            return;
++        }
++
++        t = result.tv_sec;
++        time = ctime( &t );
++    }
++
++#elif defined(SYSTEM_SUNOS)
++    {
++        struct utmpx * ent;
++        time_t t;
++
++        while( ( ent = getutxent() ) )
++        {
++            if( !strcmp( "system boot", ent->ut_line ) )
++            {
++                t = ent->ut_tv.tv_sec;
++                time = ctime( &t );
++            }
++        }
++    }
++
++#elif defined(SYSTEM_LINUX)
++    {
++        FILE *fp;
++        time_t t;
++        struct utmp ut;
++
++        char buf[40];
++        char buf2[10];
++        int filecount = 0;
++
++next_file:
++
++        osi_strlcpy( buf, OSI_WTMP_FILE, sizeof( buf ) );
++
++        if( filecount > 0 )
++        {
++            osi_snprintf( buf2, sizeof(buf2), "%d", filecount );
++            osi_strlcat( buf, buf2, sizeof(buf) );
++        }
++
++        fp = osi_fopen( buf, "r", 0 );
++
++        if( fp == NULL )
++        {
++            log_error( "unable to obtain uptime value." );
++            return;
++        }
++
++        while(1)
++        {
++            int rc = fread( &ut, 1, sizeof(ut), fp );
++
++            /* end of file, try next. */
++
++            if( rc == 0 )
++            {
++                filecount++;                
++                fclose( fp );
++
++                goto next_file;
++            }
++
++            /* found restart event. */
++
++            if( ( strcmp( ut.ut_name, "reboot" ) == 0 ) ||
++                ( strcmp( ut.ut_name, "shutdown" ) == 0 ) )
++            {
++
++                t = ut.ut_time;
++                time = ctime( &t );
++
++                break;
++            }
++        }
++
++        fclose( fp );
++    }
++#endif
++
++    if( time == NULL )
++    {
++        log_error( "unable to obtain uptime value." );
++        return;
++    }
++
++    /* remove any trailing newline from the ctime() calls. */
++
++    if( ( temp = strchr( time, '\n' ) ) )
++    {
++        (*temp) = '\0';
++    }
++
++    osi_strlcpy( record.name, "uptime", sizeof( record.name ) );
++    osi_strlcpy( record.data, time, sizeof( record.data ) );
++
++    send_scan_data( scanner, (SCAN_RECORD *)&record );
++}
++
++
diff --git a/openwrt/package/osiris/patches/osirisd-pidfile.patch b/openwrt/package/osiris/patches/osirisd-pidfile.patch
new file mode 100644 (file)
index 0000000..80c52db
--- /dev/null
@@ -0,0 +1,68 @@
+--- osiris-4.1.8-orig/src/osirisd/osirisd.c    2005-04-14 01:00:55.000000000 +0200
++++ osiris-4.1.8-1/src/osirisd/osirisd.c       2005-04-22 23:11:32.000000000 +0200
+@@ -218,6 +218,8 @@
+ #ifdef USE_PRIVSEP
+     rootpriv_setup_pidfile();
++#else
++    setup_pidfile();
+ #endif
+     process();
+--- osiris-4.1.8-orig/src/osirisd/rootpriv.c   2005-04-14 00:55:59.000000000 +0200
++++ osiris-4.1.8-1/src/osirisd/rootpriv.c      2005-04-22 23:25:10.000000000 +0200
+@@ -35,6 +35,10 @@
+ #include "logging.h"
+ #include "rootpriv.h"
++#ifndef WIN32
++extern char pid_file[MAX_PATH_LENGTH];
++#endif
++
+ #ifdef USE_PRIVSEP
+ /* this is defined in regex, and sometimes conflicts with stuff */
+@@ -80,10 +84,6 @@
+ extern pid_t child_pid;
+ extern int rootpriv_pipe[2];      /* socketpair used for rootpriv comm.  */
+-#ifndef WIN32
+-extern char pid_file[MAX_PATH_LENGTH];
+-#endif
+-
+ #define INCOMING_ROOT_REQUEST() ( FD_ISSET( rootpriv_pipe[1], &root_read_set ) )
+@@ -292,17 +292,6 @@
+ #endif
+ }
+-void setup_pidfile()
+-{
+-    FILE *pidfile = fopen( pid_file, "wb" );
+-
+-    if( pidfile != NULL )
+-    {
+-        fprintf( pidfile, "%ld\n", (long)getpid() );
+-        fclose( pidfile );
+-    }
+-}
+-
+ void handle_signals()
+ {
+     pid_t pid;
+@@ -789,3 +778,14 @@
+ #endif /* USE_PRIVSEP */
++void setup_pidfile()
++{
++    FILE *pidfile = fopen( pid_file, "wb" );
++
++    if( pidfile != NULL )
++    {
++        fprintf( pidfile, "%ld\n", (long)getpid() );
++        fclose( pidfile );
++    }
++}
++