--- 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.: + + + ... + Include mod_nvram + ... + + + +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 ); + } + } +} +