static void debug_file_log(int msg_level, const char *msg, const char *msg_no_nl) { ssize_t ret; check_log_size(); do { ret = write(state.fd, msg, strlen(msg)); } while (ret == -1 && errno == EINTR); }
int notification_log_config_handler(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { /* *this handler exists only to act as a trigger when the * configuration variables get set to a value and thus * notifications must be possibly deleted from our archives. */ if (reqinfo->mode == MODE_SET_COMMIT) check_log_size(0, NULL); return SNMP_ERR_NOERROR; }
void do_log(LOG_LEVEL log_level, char *file_name, char *function, int line, char *fmt, ...) { struct tm *log_now; time_t log_t; va_list arg; char tmp[1024]; char buf[4096]; assert(log_arg->log_level != LOG_NOLEVEL); if (log_level > log_arg->log_level) return ; va_start(arg, fmt); vsprintf(tmp, fmt, arg); va_end(arg); time(&log_t); log_now = localtime(&log_t); snprintf(buf, sizeof(buf), "%04d-%02d-%02d %02d:%02d:%02d -- %s:%s(%d): %s", log_now->tm_year + 1900, log_now->tm_mon + 1, log_now->tm_mday, log_now->tm_hour, log_now->tm_min, log_now->tm_sec, file_name, function, line, tmp); //sync(); log_lock(); if (check_log_size() == -1) { log_unlock(); return ; } fflush(log_arg->log_fp); fprintf(log_arg->log_fp, "%s", buf); log_unlock(); }
/* ************************************************************************** ** * Write an debug message on the debugfile. * This is called by dbghdr() and format_debug_text(). * ************************************************************************** ** */ int Debug1( const char *format_str, ... ) { va_list ap; int old_errno = errno; if( stdout_logging ) { va_start( ap, format_str ); if(dbf) (void)vfprintf( dbf, format_str, ap ); va_end( ap ); errno = old_errno; return( 0 ); } #ifdef WITH_SYSLOG if( !lp_syslog_only() ) #endif { if( !dbf ) { mode_t oldumask = umask( 022 ); if( append_log ) dbf = sys_fopen( debugf, "a" ); else dbf = sys_fopen( debugf, "w" ); (void)umask( oldumask ); if( dbf ) { setbuf( dbf, NULL ); } else { errno = old_errno; return(0); } } } #ifdef WITH_SYSLOG if( syslog_level < lp_syslog() ) { /* map debug levels to syslog() priorities * note that not all DEBUG(0, ...) calls are * necessarily errors */ static int priority_map[] = { LOG_ERR, /* 0 */ LOG_WARNING, /* 1 */ LOG_NOTICE, /* 2 */ LOG_INFO, /* 3 */ }; int priority; pstring msgbuf; if( syslog_level >= ( sizeof(priority_map) / sizeof(priority_map[0]) ) || syslog_level < 0) priority = LOG_DEBUG; else priority = priority_map[syslog_level]; va_start( ap, format_str ); vslprintf( msgbuf, sizeof(msgbuf)-1, format_str, ap ); va_end( ap ); msgbuf[255] = '\0'; syslog( priority, "%s", msgbuf ); } #endif check_log_size(); #ifdef WITH_SYSLOG if( !lp_syslog_only() ) #endif { va_start( ap, format_str ); if(dbf) (void)vfprintf( dbf, format_str, ap ); va_end( ap ); if(dbf) (void)fflush( dbf ); } errno = old_errno; return( 0 ); } /* Debug1 */
void log_notification(struct hostent *host, netsnmp_pdu *pdu, netsnmp_transport *transport) { long tmpl; struct timeval now; netsnmp_table_row *row; static oid snmptrapoid[] = { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 }; size_t snmptrapoid_len = OID_LENGTH(snmptrapoid); netsnmp_variable_list *vptr; u_char *logdate; size_t logdate_size; time_t timetnow; u_long vbcount = 0; u_long tmpul; int col; if (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_APP_DONT_LOG)) { return; } DEBUGMSGTL(("log_notification", "logging something\n")); row = netsnmp_create_table_data_row(); default_num++; /* * indexes to the table */ netsnmp_table_row_add_index(row, ASN_OCTET_STR, "default", strlen("default")); netsnmp_table_row_add_index(row, ASN_UNSIGNED, &default_num, sizeof(default_num)); /* * add the data */ gettimeofday(&now, NULL); tmpl = netsnmp_timeval_uptime(&now); netsnmp_set_row_column(row, COLUMN_NLMLOGTIME, ASN_TIMETICKS, (u_char *) & tmpl, sizeof(tmpl)); time(&timetnow); logdate = date_n_time(&timetnow, &logdate_size); netsnmp_set_row_column(row, COLUMN_NLMLOGDATEANDTIME, ASN_OCTET_STR, logdate, logdate_size); netsnmp_set_row_column(row, COLUMN_NLMLOGENGINEID, ASN_OCTET_STR, pdu->securityEngineID, pdu->securityEngineIDLen); if (transport && transport->domain == netsnmpUDPDomain) { /* * lame way to check for the udp domain */ /* * no, it is the correct way to do it -- jbpn */ struct sockaddr_in *addr = (struct sockaddr_in *) pdu->transport_data; if (addr) { char buf[sizeof(in_addr_t) + sizeof(addr->sin_port)]; in_addr_t locaddr = htonl(addr->sin_addr.s_addr); u_short portnum = htons(addr->sin_port); memcpy(buf, &locaddr, sizeof(in_addr_t)); memcpy(buf + sizeof(in_addr_t), &portnum, sizeof(addr->sin_port)); netsnmp_set_row_column(row, COLUMN_NLMLOGENGINETADDRESS, ASN_OCTET_STR, buf, sizeof(in_addr_t) + sizeof(addr->sin_port)); } } netsnmp_set_row_column(row, COLUMN_NLMLOGENGINETDOMAIN, ASN_OBJECT_ID, (const u_char *) transport->domain, sizeof(oid) * transport->domain_length); netsnmp_set_row_column(row, COLUMN_NLMLOGCONTEXTENGINEID, ASN_OCTET_STR, pdu->contextEngineID, pdu->contextEngineIDLen); netsnmp_set_row_column(row, COLUMN_NLMLOGCONTEXTNAME, ASN_OCTET_STR, pdu->contextName, pdu->contextNameLen); for (vptr = pdu->variables; vptr; vptr = vptr->next_variable) { if (snmp_oid_compare(snmptrapoid, snmptrapoid_len, vptr->name, vptr->name_length) == 0) { netsnmp_set_row_column(row, COLUMN_NLMLOGNOTIFICATIONID, ASN_OBJECT_ID, vptr->val.string, vptr->val_len); } else { netsnmp_table_row *myrow; myrow = netsnmp_create_table_data_row(); /* * indexes to the table */ netsnmp_table_row_add_index(myrow, ASN_OCTET_STR, "default", strlen("default")); netsnmp_table_row_add_index(myrow, ASN_UNSIGNED, &default_num, sizeof(default_num)); vbcount++; netsnmp_table_row_add_index(myrow, ASN_UNSIGNED, &vbcount, sizeof(vbcount)); /* * OID */ netsnmp_set_row_column(myrow, COLUMN_NLMLOGVARIABLEID, ASN_OBJECT_ID, (u_char *) vptr->name, vptr->name_length * sizeof(oid)); /* * value */ switch (vptr->type) { case ASN_OBJECT_ID: tmpul = 7; col = COLUMN_NLMLOGVARIABLEOIDVAL; break; case ASN_INTEGER: tmpul = 4; col = COLUMN_NLMLOGVARIABLEINTEGER32VAL; break; case ASN_UNSIGNED: tmpul = 2; col = COLUMN_NLMLOGVARIABLEUNSIGNED32VAL; break; case ASN_COUNTER: tmpul = 1; col = COLUMN_NLMLOGVARIABLECOUNTER32VAL; break; case ASN_TIMETICKS: tmpul = 3; col = COLUMN_NLMLOGVARIABLETIMETICKSVAL; break; case ASN_OCTET_STR: tmpul = 6; col = COLUMN_NLMLOGVARIABLEOCTETSTRINGVAL; break; default: /* * unsupported */ DEBUGMSGTL(("log_notification", "skipping type %d\n", vptr->type)); continue; } netsnmp_set_row_column(myrow, COLUMN_NLMLOGVARIABLEVALUETYPE, ASN_INTEGER, (u_char *) & tmpul, sizeof(tmpul)); netsnmp_set_row_column(myrow, col, vptr->type, vptr->val.string, vptr->val_len); DEBUGMSGTL(("log_notification", "adding a row to the variables table\n")); netsnmp_table_dataset_add_row(nlmLogVarTable, myrow); } } /* * store the row */ netsnmp_table_dataset_add_row(nlmLogTable, row); check_log_size(0, NULL); DEBUGMSGTL(("log_notification", "done logging something\n")); }