📄 mib.c
字号:
/*********************************************************** Copyright 1988, 1989 by Carnegie Mellon University All Rights ReservedPermission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and thatboth that copyright notice and this permission notice appear in supporting documentation, and that the name of CMU not beused in advertising or publicity pertaining to distribution of thesoftware without specific, written prior permission. CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDINGALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALLCMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES ORANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THISSOFTWARE.******************************************************************/#include "config.h"#include <stdio.h>#if HAVE_UNISTD_H#include <unistd.h>#endif#if HAVE_STDLIB_H#include <stdlib.h>#endif#if HAVE_SYS_TYPES_H#include <sys/types.h>#endif#if HAVE_CTYPE_H#include <ctype.h>#endif#if HAVE_GNUMALLOC_H#include <gnumalloc.h>#elif HAVE_MALLOC_H && !defined(_SQUID_FREEBSD_) && !defined(_SQUID_NEXT_)#include <malloc.h>#endif#if HAVE_MEMORY_H#include <memory.h>#endif#ifdef HAVE_STRING_H#include <string.h>#endif#ifdef HAVE_STRINGS_H#include <strings.h>#endif#if HAVE_BSTRING_H#include <bstring.h>#endif#if HAVE_SYS_SOCKET_H#include <sys/socket.h>#endif#if HAVE_NETINET_IN_H#include <netinet/in.h>#endif#if HAVE_ARPA_INET_H#include <arpa/inet.h>#endif#if HAVE_SYS_TIME_H#include <sys/time.h>#endif#if HAVE_NETDB_H#include <netdb.h>#endif#include "asn1.h"#include "snmp.h"#include "snmp_pdu.h"#include "snmp_vars.h"#include "snmp_session.h"#include "snmp_impl.h"#include "snmp_api.h"#include "parse.h"#include "util.h"#include "snprintf.h"#if 0static void sprint_by_type();#endif#if 0static char *uptimeString(timeticks, buf) int timeticks; char *buf;{ int seconds, minutes, hours, days; timeticks /= 100; days = timeticks / (60 * 60 * 24); timeticks %= (60 * 60 * 24); hours = timeticks / (60 * 60); timeticks %= (60 * 60); minutes = timeticks / 60; seconds = timeticks % 60; if (days == 0) { snprintf(buf, 32, "%d:%02d:%02d", hours, minutes, seconds); } else if (days == 1) { snprintf(buf, 32, "%d day, %d:%02d:%02d", days, hours, minutes, seconds); } else { snprintf(buf, 32, "%d days, %d:%02d:%02d", days, hours, minutes, seconds); } return buf;}static void sprint_hexstring(buf, cp, len) char *buf; u_char *cp; int len;{ for (; len >= 16; len -= 16) { snprintf(buf, 26, "%02X %02X %02X %02X %02X %02X %02X %02X ", cp[0], cp[1], cp[2], cp[3], cp[4], cp[5], cp[6], cp[7]); buf += strlen(buf); cp += 8; snprintf(buf, 26, "%02X %02X %02X %02X %02X %02X %02X %02X\n", cp[0], cp[1], cp[2], cp[3], cp[4], cp[5], cp[6], cp[7]); buf += strlen(buf); cp += 8; } for (; len > 0; len--) { snprintf(buf, 4, "%02X ", *cp++); buf += strlen(buf); } *buf = '\0';}static void sprint_asciistring(buf, cp, len) char *buf; u_char *cp; int len;{ int x; for (x = 0; x < len; x++) { if (isprint(*cp)) { *buf++ = *cp++; } else { *buf++ = '.'; cp++; } if ((x % 48) == 47) *buf++ = '\n'; } *buf = '\0';}static voidsprint_octet_string(buf, var, foo, quiet) char *buf; variable_list *var; void *foo; int quiet;{ int hex, x; u_char *cp; if (var->type != ASN_OCTET_STR) { sprintf(buf, "Wrong Type (should be OCTET STRING): "); buf += strlen(buf); sprint_by_type(buf, var, (struct enum_list *) NULL, quiet); return; } hex = 0; for (cp = var->val.string, x = 0; x < var->val_len; x++, cp++) { if (!(isprint(*cp) || isspace(*cp))) hex = 1; } if (var->val_len <= 4) hex = 1; /* not likely to be ascii */ if (hex) { if (!quiet) { sprintf(buf, "OCTET STRING- (hex):\t"); buf += strlen(buf); } sprint_hexstring(buf, var->val.string, var->val_len); } else { if (!quiet) { sprintf(buf, "OCTET STRING- (ascii):\t"); buf += strlen(buf); } sprint_asciistring(buf, var->val.string, var->val_len); }}static voidsprint_opaque(buf, var, foo, quiet) char *buf; variable_list *var; void *foo; int quiet;{ if (var->type != SMI_OPAQUE) { sprintf(buf, "Wrong Type (should be Opaque): "); buf += strlen(buf); sprint_by_type(buf, var, (struct enum_list *) NULL, quiet); return; } if (!quiet) { sprintf(buf, "OPAQUE - (hex):\t"); buf += strlen(buf); } sprint_hexstring(buf, var->val.string, var->val_len);}static voidsprint_object_identifier(buf, var, foo, quiet) char *buf; variable_list *var; void *foo; int quiet;{ if (var->type != SMI_OBJID) { sprintf(buf, "Wrong Type (should be OBJECT IDENTIFIER): "); buf += strlen(buf); sprint_by_type(buf, var, (struct enum_list *) NULL, quiet); return; } if (!quiet) { sprintf(buf, "OBJECT IDENTIFIER:\t"); buf += strlen(buf); } sprint_objid(buf, (oid *) (var->val.objid), var->val_len / sizeof(oid));}static voidsprint_timeticks(buf, var, foo, quiet) char *buf; variable_list *var; void *foo; int quiet;{ char timebuf[32]; if (var->type != SMI_TIMETICKS) { sprintf(buf, "Wrong Type (should be Timeticks): "); buf += strlen(buf); sprint_by_type(buf, var, (struct enum_list *) NULL, quiet); return; } if (!quiet) { sprintf(buf, "Timeticks: "); buf += strlen(buf); } sprintf(buf, "(%u) %s", *(var->val.integer), uptimeString(*(var->val.integer), timebuf));}static voidsprint_integer(buf, var, enums, quiet) char *buf; variable_list *var; struct enum_list *enums; int quiet;{ char *enum_string = NULL; if (var->type != SMI_INTEGER) { sprintf(buf, "Wrong Type (should be INTEGER): "); buf += strlen(buf); sprint_by_type(buf, var, (struct enum_list *) NULL, quiet); return; } for (; enums; enums = enums->next) if (enums->value == *var->val.integer) { enum_string = enums->label; break; } if (!quiet) { sprintf(buf, "INTEGER: "); buf += strlen(buf); } if (enum_string == NULL) sprintf(buf, "%u", *var->val.integer); else sprintf(buf, "%s(%u)", enum_string, *var->val.integer);}static voidsprint_gauge(buf, var, foo, quiet) char *buf; variable_list *var; void *foo; int quiet;{ if (var->type != SMI_GAUGE32) { sprintf(buf, "Wrong Type (should be Gauge): "); buf += strlen(buf); sprint_by_type(buf, var, (struct enum_list *) NULL, quiet); return; } if (!quiet) { sprintf(buf, "Gauge: "); buf += strlen(buf); } sprintf(buf, "%u", *var->val.integer);}static voidsprint_counter(buf, var, foo, quiet) char *buf; variable_list *var; void *foo; int quiet;{ if (var->type != SMI_COUNTER32) { sprintf(buf, "Wrong Type (should be Counter): "); buf += strlen(buf); sprint_by_type(buf, var, (struct enum_list *) NULL, quiet); return; } if (!quiet) { sprintf(buf, "Counter: "); buf += strlen(buf); } sprintf(buf, "%u", *var->val.integer);}static voidsprint_networkaddress(buf, var, foo, quiet) char *buf; variable_list *var; void *foo; int quiet;{ int x, len; u_char *cp; if (!quiet) { sprintf(buf, "Network Address:\t"); buf += strlen(buf); } cp = var->val.string; len = var->val_len; for (x = 0; x < len; x++) { sprintf(buf, "%02X", *cp++); buf += strlen(buf); if (x < (len - 1)) *buf++ = ':'; }}static voidsprint_ipaddress(buf, var, foo, quiet) char *buf; variable_list *var; void *foo; int quiet;{ u_char *ip; if (var->type != SMI_IPADDRESS) { sprintf(buf, "Wrong Type (should be Ipaddress): "); buf += strlen(buf); sprint_by_type(buf, var, (struct enum_list *) NULL, quiet); return; } ip = var->val.string; if (!quiet) { sprintf(buf, "IPAddress:\t"); buf += strlen(buf); } sprintf(buf, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);}#endif#if 0static voidsprint_unsigned_short(buf, var, foo, quiet) char *buf; variable_list *var; void *foo; int quiet;{ if (var->type != SMI_INTEGER) { sprintf(buf, "Wrong Type (should be INTEGER): "); buf += strlen(buf); sprint_by_type(buf, var, (struct enum_list *) NULL, quiet); return; } if (!quiet) { sprintf(buf, "INTEGER (0..65535): "); buf += strlen(buf); } sprintf(buf, "%u", *var->val.integer);}#endif#if 0static voidsprint_null(buf, var, foo, quiet) char *buf; variable_list *var; void *foo; int quiet;{ if (var->type != SMI_NULLOBJ) { sprintf(buf, "Wrong Type (should be NULL): "); buf += strlen(buf); sprint_by_type(buf, var, (struct enum_list *) NULL, quiet); return; } sprintf(buf, "NULL");}static voidsprint_unknowntype(buf, var, foo, quiet) char *buf; variable_list *var; void *foo; int quiet;{/* sprintf(buf, "Variable has bad type"); */ sprint_by_type(buf, var, foo, quiet);}static voidsprint_badtype(buf) char *buf;{ sprintf(buf, "Variable has bad type");}static voidsprint_by_type(buf, var, enums, quiet) char *buf; variable_list *var; struct enum_list *enums; int quiet;{ switch (var->type) { case SMI_INTEGER: sprint_integer(buf, var, enums, quiet); break; case SMI_STRING: sprint_octet_string(buf, var, enums, quiet); break; case SMI_OPAQUE: sprint_opaque(buf, var, enums, quiet); break; case SMI_OBJID: sprint_object_identifier(buf, var, enums, quiet); break; case SMI_TIMETICKS: sprint_timeticks(buf, var, enums, quiet); break; case SMI_GAUGE32: sprint_gauge(buf, var, enums, quiet); break; case SMI_COUNTER32: sprint_counter(buf, var, enums, quiet); break; case SMI_IPADDRESS: sprint_ipaddress(buf, var, enums, quiet); break; case SMI_NULLOBJ: sprint_null(buf, var, enums, quiet); break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -