/*******************************************************************-o-****** * test_hashindex * * Returns: * Number of failures. * * * Test hash_engineID(). */ int test_hashindex(void) { int /* rval = SNMPERR_SUCCESS, */ failcount = 0; char *s; OUTPUT("Visual spot check of hash index outputs. " "(Success or failure not noted.)"); s = "A"; fprintf(stdout, "%s = %d\n", s, hash_engineID(s, strlen(s))); s = "BB"; fprintf(stdout, "%s = %d\n", s, hash_engineID(s, strlen(s))); s = "CCC"; fprintf(stdout, "%s = %d\n", s, hash_engineID(s, strlen(s))); s = "DDDD"; fprintf(stdout, "%s = %d\n", s, hash_engineID(s, strlen(s))); s = "EEEEE"; fprintf(stdout, "%s = %d\n", s, hash_engineID(s, strlen(s))); s = BLAT; fprintf(stdout, "%s = %d\n", s, hash_engineID(s, strlen(s))); OUTPUT("Visual spot check -- DONE."); return failcount; } /* end test_hashindex() */
void free_enginetime(unsigned char *engineID, size_t engineID_len) { Enginetime e = NULL; int rval = 0; rval = hash_engineID(engineID, engineID_len); if (rval < 0) return; e = etimelist[rval]; while (e != NULL) { etimelist[rval] = e->next; SNMP_FREE(e->engineID); SNMP_FREE(e); e = etimelist[rval]; } }
/*******************************************************************-o-****** * set_enginetime * * Parameters: * *engineID * engineID_len * engineboot * engine_time * * Returns: * SNMPERR_SUCCESS Success. * SNMPERR_GENERR Otherwise. * * * Lookup engineID and store the given <engine_time, engineboot> tuple * and then stamp the record with a consistent source of local time. * If the engineID record does not exist, create one. * * Special case: engineID is NULL or engineID_len is 0 defines an engineID * that is "always set." * * XXX "Current time within the local engine" == time(NULL)... */ int set_enginetime(u_char * engineID, u_int engineID_len, u_int engineboot, u_int engine_time, u_int authenticated) { int rval = SNMPERR_SUCCESS, iindex; Enginetime e = NULL; /* * Sanity check. */ if (!engineID || (engineID_len <= 0)) { return rval; } /* * Store the given <engine_time, engineboot> tuple in the record * for engineID. Create a new record if necessary. */ if (!(e = search_enginetime_list(engineID, engineID_len))) { if ((iindex = hash_engineID(engineID, engineID_len)) < 0) { QUITFUN(SNMPERR_GENERR, set_enginetime_quit); } e = (Enginetime) calloc(1, sizeof(*e)); e->next = etimelist[iindex]; etimelist[iindex] = e; e->engineID = (u_char *) calloc(1, engineID_len); memcpy(e->engineID, engineID, engineID_len); e->engineID_len = engineID_len; } #ifdef LCD_TIME_SYNC_OPT if (authenticated || !e->authenticatedFlag) { e->authenticatedFlag = authenticated; #else if (authenticated) { #endif e->engineTime = engine_time; e->engineBoot = engineboot; e->lastReceivedEngineTime = snmpv3_local_snmpEngineTime(); } e = NULL; /* Indicates a successful update. */ DEBUGMSGTL(("lcd_set_enginetime", "engineID ")); DEBUGMSGHEX(("lcd_set_enginetime", engineID, engineID_len)); DEBUGMSG(("lcd_set_enginetime", ": boots=%d, time=%d\n", engineboot, engine_time)); set_enginetime_quit: SNMP_FREE(e); return rval; } /* end set_enginetime() */ /*******************************************************************-o-****** * search_enginetime_list * * Parameters: * *engineID * engineID_len * * Returns: * Pointer to a etimelist record with engineID <engineID> -OR- * NULL if no record exists. * * * Search etimelist for an entry with engineID. * * ASSUMES that no engineID will have more than one record in the list. */ Enginetime search_enginetime_list(u_char * engineID, u_int engineID_len) { int rval = SNMPERR_SUCCESS; Enginetime e = NULL; /* * Sanity check. */ if (!engineID || (engineID_len <= 0)) { QUITFUN(SNMPERR_GENERR, search_enginetime_list_quit); } /* * Find the entry for engineID if there be one. */ rval = hash_engineID(engineID, engineID_len); if (rval < 0) { QUITFUN(SNMPERR_GENERR, search_enginetime_list_quit); } e = etimelist[rval]; for ( /*EMPTY*/; e; e = e->next) { if ((engineID_len == e->engineID_len) && !memcmp(e->engineID, engineID, engineID_len)) { break; } } search_enginetime_list_quit: return e; } /* end search_enginetime_list() */