tag rc6
[openwrt/svn-archive/openwrt.git] / package / osiris / patches / mod_nvram.patch
diff --git a/package/osiris/patches/mod_nvram.patch b/package/osiris/patches/mod_nvram.patch
new file mode 100644 (file)
index 0000000..69b6cd6
--- /dev/null
@@ -0,0 +1,213 @@
+Description:   The mod_nvram module was developed specifically to monitor 
+               configuration settings stored in nvram on Linksys devices. 
+               In the future, this module could be used to monitor other 
+               attributes of similar devices.
+Version:       0.1
+
+--- 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 );
++            }
++    }
++}
++