From 34e8a50e5a71ab0d31bd0c5375a84d3b3ecf61e9 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Thu, 27 Jan 2011 18:06:16 +0100 Subject: s3-util: Moved eventlog_add_source to admin util. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This function is only used in the admin util. Signed-off-by: Günther Deschner --- source3/registry/reg_eventlog.c | 201 ---------------------------------------- source3/registry/reg_eventlog.h | 2 - source3/utils/eventlogadm.c | 199 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 194 insertions(+), 208 deletions(-) diff --git a/source3/registry/reg_eventlog.c b/source3/registry/reg_eventlog.c index 6bedf4635e..74b3ed43b7 100644 --- a/source3/registry/reg_eventlog.c +++ b/source3/registry/reg_eventlog.c @@ -184,204 +184,3 @@ bool eventlog_init_keys(void) return true; } - -/********************************************************************* - for an eventlog, add in a source name. If the eventlog doesn't - exist (not in the list) do nothing. If a source for the log - already exists, change the information (remove, replace) -*********************************************************************/ - -bool eventlog_add_source( const char *eventlog, const char *sourcename, - const char *messagefile ) -{ - /* Find all of the eventlogs, add keys for each of them */ - /* need to add to the value KEY_EVENTLOG//Sources string (Creating if necessary) - need to add KEY of source to KEY_EVENTLOG// */ - - const char **elogs = lp_eventlog_list( ); - const char **wrklist, **wp; - char *evtlogpath = NULL; - struct regsubkey_ctr *subkeys; - struct regval_ctr *values; - struct regval_blob *rval; - int ii = 0; - bool already_in; - int i; - int numsources = 0; - TALLOC_CTX *ctx = talloc_tos(); - WERROR werr; - DATA_BLOB blob; - - if (!elogs) { - return False; - } - - for ( i = 0; elogs[i]; i++ ) { - if ( strequal( elogs[i], eventlog ) ) - break; - } - - if ( !elogs[i] ) { - DEBUG( 0, - ( "Eventlog [%s] not found in list of valid event logs\n", - eventlog ) ); - return false; /* invalid named passed in */ - } - - /* have to assume that the evenlog key itself exists at this point */ - /* add in a key of [sourcename] under the eventlog key */ - - /* todo add to Sources */ - - werr = regval_ctr_init(ctx, &values); - if(!W_ERROR_IS_OK(werr)) { - DEBUG( 0, ( "talloc() failure!\n" )); - return false; - } - - evtlogpath = talloc_asprintf(ctx, "%s\\%s", KEY_EVENTLOG, eventlog); - if (!evtlogpath) { - TALLOC_FREE(values); - return false; - } - - regdb_fetch_values( evtlogpath, values ); - - - if ( !( rval = regval_ctr_getvalue( values, "Sources" ) ) ) { - DEBUG( 0, ( "No Sources value for [%s]!\n", eventlog ) ); - return False; - } - /* perhaps this adding a new string to a multi_sz should be a fn? */ - /* check to see if it's there already */ - - if ( regval_type(rval) != REG_MULTI_SZ ) { - DEBUG( 0, - ( "Wrong type for Sources, should be REG_MULTI_SZ\n" ) ); - return False; - } - /* convert to a 'regulah' chars to do some comparisons */ - - already_in = False; - wrklist = NULL; - dump_data(1, regval_data_p(rval), regval_size(rval)); - - blob = data_blob_const(regval_data_p(rval), regval_size(rval)); - if (!pull_reg_multi_sz(talloc_tos(), &blob, &wrklist)) { - return false; - } - - for (ii=0; wrklist[ii]; ii++) { - numsources++; - } - - if (numsources > 0) { - /* see if it's in there already */ - wp = wrklist; - - while (wp && *wp ) { - if ( strequal( *wp, sourcename ) ) { - DEBUG( 5, - ( "Source name [%s] already in list for [%s] \n", - sourcename, eventlog ) ); - already_in = True; - break; - } - wp++; - } - } else { - DEBUG( 3, - ( "Nothing in the sources list, this might be a problem\n" ) ); - } - - wp = wrklist; - - if ( !already_in ) { - /* make a new list with an additional entry; copy values, add another */ - wp = TALLOC_ARRAY(ctx, const char *, numsources + 2 ); - - if ( !wp ) { - DEBUG( 0, ( "talloc() failed \n" ) ); - return False; - } - memcpy( wp, wrklist, sizeof( char * ) * numsources ); - *( wp + numsources ) = ( char * ) sourcename; - *( wp + numsources + 1 ) = NULL; - if (!push_reg_multi_sz(ctx, &blob, wp)) { - return false; - } - dump_data( 1, blob.data, blob.length); - regval_ctr_addvalue( values, "Sources", REG_MULTI_SZ, - blob.data, blob.length); - regdb_store_values( evtlogpath, values ); - data_blob_free(&blob); - } else { - DEBUG( 3, - ( "Source name [%s] found in existing list of sources\n", - sourcename ) ); - } - TALLOC_FREE(values); - TALLOC_FREE(wrklist); /* */ - - werr = regsubkey_ctr_init(ctx, &subkeys); - if (!W_ERROR_IS_OK(werr)) { - DEBUG( 0, ( "talloc() failure!\n" ) ); - return False; - } - TALLOC_FREE(evtlogpath); - evtlogpath = talloc_asprintf(ctx, "%s\\%s", KEY_EVENTLOG, eventlog ); - if (!evtlogpath) { - TALLOC_FREE(subkeys); - return false; - } - - regdb_fetch_keys( evtlogpath, subkeys ); - - if ( !regsubkey_ctr_key_exists( subkeys, sourcename ) ) { - DEBUG( 5, - ( " Source name [%s] for eventlog [%s] didn't exist, adding \n", - sourcename, eventlog ) ); - regsubkey_ctr_addkey( subkeys, sourcename ); - if ( !regdb_store_keys( evtlogpath, subkeys ) ) - return False; - } - TALLOC_FREE(subkeys); - - /* at this point KEY_EVENTLOG// key is in there. Now need to add EventMessageFile */ - - /* now allocate room for the source's subkeys */ - - werr = regsubkey_ctr_init(ctx, &subkeys); - if (!W_ERROR_IS_OK(werr)) { - DEBUG( 0, ( "talloc() failure!\n" ) ); - return False; - } - TALLOC_FREE(evtlogpath); - evtlogpath = talloc_asprintf(ctx, "%s\\%s\\%s", - KEY_EVENTLOG, eventlog, sourcename); - if (!evtlogpath) { - TALLOC_FREE(subkeys); - return false; - } - - regdb_fetch_keys( evtlogpath, subkeys ); - - /* now add the values to the KEY_EVENTLOG/Application form key */ - werr = regval_ctr_init(ctx, &values); - if (!W_ERROR_IS_OK(werr)) { - DEBUG( 0, ( "talloc() failure!\n" ) ); - return False; - } - DEBUG( 5, - ( "Storing EventMessageFile [%s] to eventlog path of [%s]\n", - messagefile, evtlogpath ) ); - - regdb_fetch_values( evtlogpath, values ); - - regval_ctr_addvalue_sz(values, "EventMessageFile", messagefile); - regdb_store_values( evtlogpath, values ); - - TALLOC_FREE(values); - - return True; -} diff --git a/source3/registry/reg_eventlog.h b/source3/registry/reg_eventlog.h index 69f2f99aad..d4e13c73ee 100644 --- a/source3/registry/reg_eventlog.h +++ b/source3/registry/reg_eventlog.h @@ -23,7 +23,5 @@ #define _REG_EVENTLOG_H bool eventlog_init_keys(void); -bool eventlog_add_source( const char *eventlog, const char *sourcename, - const char *messagefile ); #endif /* _REG_EVENTLOG_H */ diff --git a/source3/utils/eventlogadm.c b/source3/utils/eventlogadm.c index 15b8d207a2..fc69332d31 100644 --- a/source3/utils/eventlogadm.c +++ b/source3/utils/eventlogadm.c @@ -26,11 +26,7 @@ #include "lib/eventlog/eventlog.h" #include "registry.h" #include "registry/reg_backend_db.h" -#include "registry/reg_eventlog.h" - -#undef DBGC_CLASS -#define DBGC_CLASS DBGC_UTIL_EVENTLOG - +#include "registry/reg_objects.h" extern int optind; extern char *optarg; @@ -66,6 +62,199 @@ static void display_eventlog_names( void ) printf( "\t\n"); } +/********************************************************************* + for an eventlog, add in a source name. If the eventlog doesn't + exist (not in the list) do nothing. If a source for the log + already exists, change the information (remove, replace) +*********************************************************************/ +static bool eventlog_add_source( const char *eventlog, const char *sourcename, + const char *messagefile ) +{ + /* Find all of the eventlogs, add keys for each of them */ + /* need to add to the value KEY_EVENTLOG//Sources string (Creating if necessary) + need to add KEY of source to KEY_EVENTLOG// */ + + const char **elogs = lp_eventlog_list( ); + const char **wrklist, **wp; + char *evtlogpath = NULL; + struct regsubkey_ctr *subkeys; + struct regval_ctr *values; + struct regval_blob *rval; + int ii = 0; + bool already_in; + int i; + int numsources = 0; + TALLOC_CTX *ctx = talloc_tos(); + WERROR werr; + DATA_BLOB blob; + + if (!elogs) { + return False; + } + + for ( i = 0; elogs[i]; i++ ) { + if ( strequal( elogs[i], eventlog ) ) + break; + } + + if ( !elogs[i] ) { + d_printf("Eventlog [%s] not found in list of valid event logs\n", + eventlog); + return false; /* invalid named passed in */ + } + + /* have to assume that the evenlog key itself exists at this point */ + /* add in a key of [sourcename] under the eventlog key */ + + /* todo add to Sources */ + + werr = regval_ctr_init(ctx, &values); + if(!W_ERROR_IS_OK(werr)) { + d_printf("talloc() failure!\n"); + return false; + } + + evtlogpath = talloc_asprintf(ctx, "%s\\%s", KEY_EVENTLOG, eventlog); + if (!evtlogpath) { + TALLOC_FREE(values); + return false; + } + + regdb_fetch_values( evtlogpath, values ); + + + if ( !( rval = regval_ctr_getvalue( values, "Sources" ) ) ) { + d_printf("No Sources value for [%s]!\n", eventlog); + return False; + } + /* perhaps this adding a new string to a multi_sz should be a fn? */ + /* check to see if it's there already */ + + if ( regval_type(rval) != REG_MULTI_SZ ) { + d_printf("Wrong type for Sources, should be REG_MULTI_SZ\n"); + return False; + } + /* convert to a 'regulah' chars to do some comparisons */ + + already_in = False; + wrklist = NULL; + dump_data(1, regval_data_p(rval), regval_size(rval)); + + blob = data_blob_const(regval_data_p(rval), regval_size(rval)); + if (!pull_reg_multi_sz(talloc_tos(), &blob, &wrklist)) { + return false; + } + + for (ii=0; wrklist[ii]; ii++) { + numsources++; + } + + if (numsources > 0) { + /* see if it's in there already */ + wp = wrklist; + + while (wp && *wp ) { + if ( strequal( *wp, sourcename ) ) { + d_printf("Source name [%s] already in list for [%s] \n", + sourcename, eventlog); + already_in = True; + break; + } + wp++; + } + } else { + d_printf("Nothing in the sources list, this might be a problem\n"); + } + + wp = wrklist; + + if ( !already_in ) { + /* make a new list with an additional entry; copy values, add another */ + wp = TALLOC_ARRAY(ctx, const char *, numsources + 2 ); + + if ( !wp ) { + d_printf("talloc() failed \n"); + return False; + } + memcpy( wp, wrklist, sizeof( char * ) * numsources ); + *( wp + numsources ) = ( char * ) sourcename; + *( wp + numsources + 1 ) = NULL; + if (!push_reg_multi_sz(ctx, &blob, wp)) { + return false; + } + dump_data( 1, blob.data, blob.length); + regval_ctr_addvalue( values, "Sources", REG_MULTI_SZ, + blob.data, blob.length); + regdb_store_values( evtlogpath, values ); + data_blob_free(&blob); + } else { + d_printf("Source name [%s] found in existing list of sources\n", + sourcename); + } + TALLOC_FREE(values); + TALLOC_FREE(wrklist); /* */ + + werr = regsubkey_ctr_init(ctx, &subkeys); + if (!W_ERROR_IS_OK(werr)) { + d_printf("talloc() failure!\n"); + return False; + } + TALLOC_FREE(evtlogpath); + evtlogpath = talloc_asprintf(ctx, "%s\\%s", KEY_EVENTLOG, eventlog ); + if (!evtlogpath) { + TALLOC_FREE(subkeys); + return false; + } + + regdb_fetch_keys( evtlogpath, subkeys ); + + if ( !regsubkey_ctr_key_exists( subkeys, sourcename ) ) { + d_printf(" Source name [%s] for eventlog [%s] didn't exist, adding \n", + sourcename, eventlog); + regsubkey_ctr_addkey( subkeys, sourcename ); + if ( !regdb_store_keys( evtlogpath, subkeys ) ) + return False; + } + TALLOC_FREE(subkeys); + + /* at this point KEY_EVENTLOG// key is in there. Now need to add EventMessageFile */ + + /* now allocate room for the source's subkeys */ + + werr = regsubkey_ctr_init(ctx, &subkeys); + if (!W_ERROR_IS_OK(werr)) { + d_printf("talloc() failure!\n"); + return False; + } + TALLOC_FREE(evtlogpath); + evtlogpath = talloc_asprintf(ctx, "%s\\%s\\%s", + KEY_EVENTLOG, eventlog, sourcename); + if (!evtlogpath) { + TALLOC_FREE(subkeys); + return false; + } + + regdb_fetch_keys( evtlogpath, subkeys ); + + /* now add the values to the KEY_EVENTLOG/Application form key */ + werr = regval_ctr_init(ctx, &values); + if (!W_ERROR_IS_OK(werr)) { + d_printf("talloc() failure!\n"); + return False; + } + d_printf("Storing EventMessageFile [%s] to eventlog path of [%s]\n", + messagefile, evtlogpath); + + regdb_fetch_values( evtlogpath, values ); + + regval_ctr_addvalue_sz(values, "EventMessageFile", messagefile); + regdb_store_values( evtlogpath, values ); + + TALLOC_FREE(values); + + return True; +} + static int DoAddSourceCommand( int argc, char **argv, bool debugflag, char *exename ) { -- cgit