Changeset 740 for vendor/current/source3/utils/eventlogadm.c
- Timestamp:
- Nov 14, 2012, 12:59:34 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
vendor/current/source3/utils/eventlogadm.c
r414 r740 24 24 25 25 #include "includes.h" 26 27 #undef DBGC_CLASS 28 #define DBGC_CLASS DBGC_UTIL_EVENTLOG 29 26 #include "lib/eventlog/eventlog.h" 27 #include "registry.h" 28 #include "registry/reg_backend_db.h" 29 #include "registry/reg_objects.h" 30 #include "../libcli/registry/util_reg.h" 30 31 31 32 extern int optind; … … 41 42 printf( " -o dump <Eventlog Name> <starting_record>\t\t\t\t\tDump stored eventlog entries on STDOUT\n" ); 42 43 printf( "\nMiscellaneous options:\n" ); 44 printf( " -s <filename>\t\t\t\t\t\t\tUse configuration file <filename>.\n"); 43 45 printf( " -d\t\t\t\t\t\t\t\tturn debug on\n" ); 44 46 printf( " -h\t\t\t\t\t\t\t\tdisplay help\n\n" ); … … 51 53 52 54 elogs = lp_eventlog_list( ); 53 printf( "Active eventlog names (from smb.conf):\n" );55 printf( "Active eventlog names:\n" ); 54 56 printf( "--------------------------------------\n" ); 55 57 if ( elogs ) { … … 60 62 else 61 63 printf( "\t<None specified>\n"); 64 } 65 66 /********************************************************************* 67 for an eventlog, add in a source name. If the eventlog doesn't 68 exist (not in the list) do nothing. If a source for the log 69 already exists, change the information (remove, replace) 70 *********************************************************************/ 71 static bool eventlog_add_source( const char *eventlog, const char *sourcename, 72 const char *messagefile ) 73 { 74 /* Find all of the eventlogs, add keys for each of them */ 75 /* need to add to the value KEY_EVENTLOG/<eventlog>/Sources string (Creating if necessary) 76 need to add KEY of source to KEY_EVENTLOG/<eventlog>/<source> */ 77 78 const char **elogs = lp_eventlog_list( ); 79 const char **wrklist, **wp; 80 char *evtlogpath = NULL; 81 struct regsubkey_ctr *subkeys; 82 struct regval_ctr *values; 83 struct regval_blob *rval; 84 int ii = 0; 85 bool already_in; 86 int i; 87 int numsources = 0; 88 TALLOC_CTX *ctx = talloc_tos(); 89 WERROR werr; 90 DATA_BLOB blob; 91 92 if (!elogs) { 93 return False; 94 } 95 96 for ( i = 0; elogs[i]; i++ ) { 97 if ( strequal( elogs[i], eventlog ) ) 98 break; 99 } 100 101 if ( !elogs[i] ) { 102 d_printf("Eventlog [%s] not found in list of valid event logs\n", 103 eventlog); 104 return false; /* invalid named passed in */ 105 } 106 107 /* have to assume that the evenlog key itself exists at this point */ 108 /* add in a key of [sourcename] under the eventlog key */ 109 110 /* todo add to Sources */ 111 112 werr = regval_ctr_init(ctx, &values); 113 if(!W_ERROR_IS_OK(werr)) { 114 d_printf("talloc() failure!\n"); 115 return false; 116 } 117 118 evtlogpath = talloc_asprintf(ctx, "%s\\%s", KEY_EVENTLOG, eventlog); 119 if (!evtlogpath) { 120 TALLOC_FREE(values); 121 return false; 122 } 123 124 regdb_fetch_values( evtlogpath, values ); 125 126 127 if ( !( rval = regval_ctr_getvalue( values, "Sources" ) ) ) { 128 d_printf("No Sources value for [%s]!\n", eventlog); 129 return False; 130 } 131 /* perhaps this adding a new string to a multi_sz should be a fn? */ 132 /* check to see if it's there already */ 133 134 if ( regval_type(rval) != REG_MULTI_SZ ) { 135 d_printf("Wrong type for Sources, should be REG_MULTI_SZ\n"); 136 return False; 137 } 138 /* convert to a 'regulah' chars to do some comparisons */ 139 140 already_in = False; 141 wrklist = NULL; 142 dump_data(1, regval_data_p(rval), regval_size(rval)); 143 144 blob = data_blob_const(regval_data_p(rval), regval_size(rval)); 145 if (!pull_reg_multi_sz(talloc_tos(), &blob, &wrklist)) { 146 return false; 147 } 148 149 for (ii=0; wrklist[ii]; ii++) { 150 numsources++; 151 } 152 153 if (numsources > 0) { 154 /* see if it's in there already */ 155 wp = wrklist; 156 157 while (wp && *wp ) { 158 if ( strequal( *wp, sourcename ) ) { 159 d_printf("Source name [%s] already in list for [%s] \n", 160 sourcename, eventlog); 161 already_in = True; 162 break; 163 } 164 wp++; 165 } 166 } else { 167 d_printf("Nothing in the sources list, this might be a problem\n"); 168 } 169 170 wp = wrklist; 171 172 if ( !already_in ) { 173 /* make a new list with an additional entry; copy values, add another */ 174 wp = TALLOC_ARRAY(ctx, const char *, numsources + 2 ); 175 176 if ( !wp ) { 177 d_printf("talloc() failed \n"); 178 return False; 179 } 180 memcpy( wp, wrklist, sizeof( char * ) * numsources ); 181 *( wp + numsources ) = ( char * ) sourcename; 182 *( wp + numsources + 1 ) = NULL; 183 if (!push_reg_multi_sz(ctx, &blob, wp)) { 184 return false; 185 } 186 dump_data( 1, blob.data, blob.length); 187 regval_ctr_addvalue( values, "Sources", REG_MULTI_SZ, 188 blob.data, blob.length); 189 regdb_store_values( evtlogpath, values ); 190 data_blob_free(&blob); 191 } else { 192 d_printf("Source name [%s] found in existing list of sources\n", 193 sourcename); 194 } 195 TALLOC_FREE(values); 196 TALLOC_FREE(wrklist); /* */ 197 198 werr = regsubkey_ctr_init(ctx, &subkeys); 199 if (!W_ERROR_IS_OK(werr)) { 200 d_printf("talloc() failure!\n"); 201 return False; 202 } 203 TALLOC_FREE(evtlogpath); 204 evtlogpath = talloc_asprintf(ctx, "%s\\%s", KEY_EVENTLOG, eventlog ); 205 if (!evtlogpath) { 206 TALLOC_FREE(subkeys); 207 return false; 208 } 209 210 regdb_fetch_keys( evtlogpath, subkeys ); 211 212 if ( !regsubkey_ctr_key_exists( subkeys, sourcename ) ) { 213 d_printf(" Source name [%s] for eventlog [%s] didn't exist, adding \n", 214 sourcename, eventlog); 215 regsubkey_ctr_addkey( subkeys, sourcename ); 216 if ( !regdb_store_keys( evtlogpath, subkeys ) ) 217 return False; 218 } 219 TALLOC_FREE(subkeys); 220 221 /* at this point KEY_EVENTLOG/<eventlog>/<sourcename> key is in there. Now need to add EventMessageFile */ 222 223 /* now allocate room for the source's subkeys */ 224 225 werr = regsubkey_ctr_init(ctx, &subkeys); 226 if (!W_ERROR_IS_OK(werr)) { 227 d_printf("talloc() failure!\n"); 228 return False; 229 } 230 TALLOC_FREE(evtlogpath); 231 evtlogpath = talloc_asprintf(ctx, "%s\\%s\\%s", 232 KEY_EVENTLOG, eventlog, sourcename); 233 if (!evtlogpath) { 234 TALLOC_FREE(subkeys); 235 return false; 236 } 237 238 regdb_fetch_keys( evtlogpath, subkeys ); 239 240 /* now add the values to the KEY_EVENTLOG/Application form key */ 241 werr = regval_ctr_init(ctx, &values); 242 if (!W_ERROR_IS_OK(werr)) { 243 d_printf("talloc() failure!\n"); 244 return False; 245 } 246 d_printf("Storing EventMessageFile [%s] to eventlog path of [%s]\n", 247 messagefile, evtlogpath); 248 249 regdb_fetch_values( evtlogpath, values ); 250 251 regval_ctr_addvalue_sz(values, "EventMessageFile", messagefile); 252 regdb_store_values( evtlogpath, values ); 253 254 TALLOC_FREE(values); 255 256 return True; 62 257 } 63 258 … … 221 416 int opt, rc; 222 417 char *exename; 418 char *configfile = NULL; 223 419 TALLOC_CTX *frame = talloc_stackframe(); 224 420 … … 229 425 230 426 opt_debug = 0; /* todo set this from getopts */ 231 232 lp_load(get_dyn_CONFIGFILE(), True, False, False, True);233 427 234 428 exename = argv[0]; … … 241 435 eventlog_add_source( "System", "TestSourceX", "SomeTestPathX" ); 242 436 #endif 243 while ( ( opt = getopt( argc, argv, "dho: " ) ) != EOF ) {437 while ( ( opt = getopt( argc, argv, "dho:s:" ) ) != EOF ) { 244 438 switch ( opt ) { 245 439 … … 257 451 opt_debug = 1; 258 452 break; 453 case 's': 454 configfile = talloc_strdup(frame, optarg); 455 break; 456 259 457 } 260 458 } … … 266 464 printf( "\nNot enough arguments!\n" ); 267 465 usage( exename ); 466 exit( 1 ); 467 } 468 469 if ( configfile == NULL ) { 470 lp_load(get_dyn_CONFIGFILE(), True, False, False, True); 471 } else if (!lp_load(configfile, True, False, False, True)) { 472 printf("Unable to parse configfile '%s'\n",configfile); 268 473 exit( 1 ); 269 474 }
Note:
See TracChangeset
for help on using the changeset viewer.