summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/registry/reg_eventlog.c201
-rw-r--r--source3/registry/reg_eventlog.h2
-rw-r--r--source3/utils/eventlogadm.c199
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/<eventlog>/Sources string (Creating if necessary)
- need to add KEY of source to KEY_EVENTLOG/<eventlog>/<source> */
-
- 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/<eventlog>/<sourcename> 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<None specified>\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/<eventlog>/Sources string (Creating if necessary)
+ need to add KEY of source to KEY_EVENTLOG/<eventlog>/<source> */
+
+ 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/<eventlog>/<sourcename> 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 )
{