⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parse.c

📁 snmp up 2
💻 C
📖 第 1 页 / 共 5 页
字号:
/* * parse.c * * Update: 1998-09-22 <mslifcak@iss.net> * Clear nbuckets in init_node_hash. * New method xcalloc returns zeroed data structures. * New method alloc_node encapsulates common node creation. * New method to configure terminate comment at end of line. * New method to configure accept underscore in labels. * * Update: 1998-10-10 <daves@csc.liv.ac.uk> * fully qualified OID parsing patch * * Update: 1998-10-20 <daves@csc.liv.ac.uk> * merge_anon_children patch * * Update: 1998-10-21 <mslifcak@iss.net> * Merge_parse_objectid associates information with last node in chain. *//******************************************************************        Copyright 1989, 1991, 1992 by Carnegie Mellon University                      All Rights ReservedPermission to use, copy, modify, and distribute this software and itsdocumentation 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 insupporting 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 <net-snmp/net-snmp-config.h>#include <stdio.h>#if HAVE_STDLIB_H#include <stdlib.h>#endif#if HAVE_STRING_H#include <string.h>#else#include <strings.h>#endif#include <ctype.h>#include <sys/types.h>#include <sys/stat.h>/* * Wow.  This is ugly.  -- Wes  */#if HAVE_DIRENT_H# include <dirent.h># define NAMLEN(dirent) strlen((dirent)->d_name)#else# define dirent direct# define NAMLEN(dirent) (dirent)->d_namlen# if HAVE_SYS_NDIR_H#  include <sys/ndir.h># endif# if HAVE_SYS_DIR_H#  include <sys/dir.h># endif# if HAVE_NDIR_H#  include <ndir.h># endif#endif#if TIME_WITH_SYS_TIME# ifdef WIN32#  include <sys/timeb.h># else#  include <sys/time.h># endif# include <time.h>#else# if HAVE_SYS_TIME_H#  include <sys/time.h># else#  include <time.h># endif#endif#if HAVE_WINSOCK_H#include <winsock.h>#endif#if HAVE_NETINET_IN_H#include <netinet/in.h>#endif#if defined(HAVE_REGEX_H) && defined(HAVE_REGCOMP)#include <regex.h>#endif#if HAVE_DMALLOC_H#include <dmalloc.h>#endif#include <net-snmp/types.h>#include <net-snmp/output_api.h>#include <net-snmp/config_api.h>#include <net-snmp/utilities.h>#include <net-snmp/library/parse.h>#include <net-snmp/library/mib.h>#include <net-snmp/library/snmp_api.h>/* * This is one element of an object identifier with either an integer * subidentifier, or a textual string label, or both. * The subid is -1 if not present, and label is NULL if not present. */struct subid_s {    int             subid;    int             modid;    char           *label;};#define MAXTC   1024struct tc {                     /* textual conventions */    int             type;    int             modid;    char           *descriptor;    char           *hint;    struct enum_list *enums;    struct range_list *ranges;} tclist[MAXTC];int             mibLine = 0;const char     *File = "(none)";static int      anonymous = 0;struct objgroup {    char           *name;    int             line;    struct objgroup *next;}              *objgroups = NULL, *objects = NULL, *notifs = NULL;#define SYNTAX_MASK     0x80/* * types of tokens * Tokens wiht the SYNTAX_MASK bit set are syntax tokens  */#define CONTINUE    -1#define ENDOFFILE   0#define LABEL       1#define SUBTREE     2#define SYNTAX      3#define OBJID       (4 | SYNTAX_MASK)#define OCTETSTR    (5 | SYNTAX_MASK)#define INTEGER     (6 | SYNTAX_MASK)#define NETADDR     (7 | SYNTAX_MASK)#define IPADDR      (8 | SYNTAX_MASK)#define COUNTER     (9 | SYNTAX_MASK)#define GAUGE       (10 | SYNTAX_MASK)#define TIMETICKS   (11 | SYNTAX_MASK)#define KW_OPAQUE   (12 | SYNTAX_MASK)#define NUL         (13 | SYNTAX_MASK)#define SEQUENCE    14#define OF          15          /* SEQUENCE OF */#define OBJTYPE     16#define ACCESS      17#define READONLY    18#define READWRITE   19#define WRITEONLY   20#ifdef NOACCESS#undef NOACCESS                 /* agent 'NOACCESS' token */#endif#define NOACCESS    21#define STATUS      22#define MANDATORY   23#define KW_OPTIONAL    24#define OBSOLETE    25/* * #define RECOMMENDED 26  */#define PUNCT       27#define EQUALS      28#define NUMBER      29#define LEFTBRACKET 30#define RIGHTBRACKET 31#define LEFTPAREN   32#define RIGHTPAREN  33#define COMMA       34#define DESCRIPTION 35#define QUOTESTRING 36#define INDEX       37#define DEFVAL      38#define DEPRECATED  39#define SIZE        40#define BITSTRING   (41 | SYNTAX_MASK)#define NSAPADDRESS (42 | SYNTAX_MASK)#define COUNTER64   (43 | SYNTAX_MASK)#define OBJGROUP    44#define NOTIFTYPE   45#define AUGMENTS    46#define COMPLIANCE  47#define READCREATE  48#define UNITS       49#define REFERENCE   50#define NUM_ENTRIES 51#define MODULEIDENTITY 52#define LASTUPDATED 53#define ORGANIZATION 54#define CONTACTINFO 55#define UINTEGER32 (56 | SYNTAX_MASK)#define CURRENT     57#define DEFINITIONS 58#define END         59#define SEMI        60#define TRAPTYPE    61#define ENTERPRISE  62/* * #define DISPLAYSTR (63 | SYNTAX_MASK)  */#define BEGIN       64#define IMPORTS     65#define EXPORTS     66#define ACCNOTIFY   67#define BAR         68#define RANGE       69#define CONVENTION  70#define DISPLAYHINT 71#define FROM        72#define AGENTCAP    73#define MACRO       74#define IMPLIED     75#define SUPPORTS    76#define INCLUDES    77#define VARIATION   78#define REVISION    79#define NOTIMPL	    80#define OBJECTS	    81#define NOTIFICATIONS	82#define MODULE	    83#define MINACCESS   84#define PRODREL	    85#define WRSYNTAX    86#define CREATEREQ   87#define NOTIFGROUP  88#define MANDATORYGROUPS	89#define GROUP	    90#define OBJECT	    91#define IDENTIFIER  92#define CHOICE	    93#define LEFTSQBRACK	95#define RIGHTSQBRACK	96#define IMPLICIT    97#define APPSYNTAX	(98 | SYNTAX_MASK)#define OBJSYNTAX	(99 | SYNTAX_MASK)#define SIMPLESYNTAX	(100 | SYNTAX_MASK)#define OBJNAME		(101 | SYNTAX_MASK)#define NOTIFNAME	(102 | SYNTAX_MASK)#define VARIABLES	103#define UNSIGNED32	(104 | SYNTAX_MASK)#define INTEGER32	(105 | SYNTAX_MASK)/* * Beware of reaching SYNTAX_MASK (0x80)  */struct tok {    const char     *name;       /* token name */    int             len;        /* length not counting nul */    int             token;      /* value */    int             hash;       /* hash of name */    struct tok     *next;       /* pointer to next in hash table */};static struct tok tokens[] = {    {"obsolete", sizeof("obsolete") - 1, OBSOLETE}    ,    {"Opaque", sizeof("Opaque") - 1, KW_OPAQUE}    ,    {"optional", sizeof("optional") - 1, KW_OPTIONAL}    ,    {"LAST-UPDATED", sizeof("LAST-UPDATED") - 1, LASTUPDATED}    ,    {"ORGANIZATION", sizeof("ORGANIZATION") - 1, ORGANIZATION}    ,    {"CONTACT-INFO", sizeof("CONTACT-INFO") - 1, CONTACTINFO}    ,    {"MODULE-IDENTITY", sizeof("MODULE-IDENTITY") - 1, MODULEIDENTITY}    ,    {"MODULE-COMPLIANCE", sizeof("MODULE-COMPLIANCE") - 1, COMPLIANCE}    ,    {"DEFINITIONS", sizeof("DEFINITIONS") - 1, DEFINITIONS}    ,    {"END", sizeof("END") - 1, END}    ,    {"AUGMENTS", sizeof("AUGMENTS") - 1, AUGMENTS}    ,    {"not-accessible", sizeof("not-accessible") - 1, NOACCESS}    ,    {"write-only", sizeof("write-only") - 1, WRITEONLY}    ,    {"NsapAddress", sizeof("NsapAddress") - 1, NSAPADDRESS}    ,    {"UNITS", sizeof("Units") - 1, UNITS}    ,    {"REFERENCE", sizeof("REFERENCE") - 1, REFERENCE}    ,    {"NUM-ENTRIES", sizeof("NUM-ENTRIES") - 1, NUM_ENTRIES}    ,    {"BITSTRING", sizeof("BITSTRING") - 1, BITSTRING}    ,    {"BIT", sizeof("BIT") - 1, CONTINUE}    ,    {"BITS", sizeof("BITS") - 1, BITSTRING}    ,    {"Counter64", sizeof("Counter64") - 1, COUNTER64}    ,    {"TimeTicks", sizeof("TimeTicks") - 1, TIMETICKS}    ,    {"NOTIFICATION-TYPE", sizeof("NOTIFICATION-TYPE") - 1, NOTIFTYPE}    ,    {"OBJECT-GROUP", sizeof("OBJECT-GROUP") - 1, OBJGROUP}    ,    {"OBJECT-IDENTITY", sizeof("OBJECT-IDENTITY") - 1, OBJGROUP}    ,    {"IDENTIFIER", sizeof("IDENTIFIER") - 1, IDENTIFIER}    ,    {"OBJECT", sizeof("OBJECT") - 1, OBJECT}    ,    {"NetworkAddress", sizeof("NetworkAddress") - 1, NETADDR}    ,    {"Gauge", sizeof("Gauge") - 1, GAUGE}    ,    {"Gauge32", sizeof("Gauge32") - 1, GAUGE}    ,    {"Unsigned32", sizeof("Unsigned32") - 1, UNSIGNED32}    ,    {"read-write", sizeof("read-write") - 1, READWRITE}    ,    {"read-create", sizeof("read-create") - 1, READCREATE}    ,    {"OCTETSTRING", sizeof("OCTETSTRING") - 1, OCTETSTR}    ,    {"OCTET", sizeof("OCTET") - 1, CONTINUE}    ,    {"OF", sizeof("OF") - 1, OF}    ,    {"SEQUENCE", sizeof("SEQUENCE") - 1, SEQUENCE}    ,    {"NULL", sizeof("NULL") - 1, NUL}    ,    {"IpAddress", sizeof("IpAddress") - 1, IPADDR}    ,    {"UInteger32", sizeof("UInteger32") - 1, UINTEGER32}    ,    {"INTEGER", sizeof("INTEGER") - 1, INTEGER}    ,    {"Integer32", sizeof("Integer32") - 1, INTEGER32}    ,    {"Counter", sizeof("Counter") - 1, COUNTER}    ,    {"Counter32", sizeof("Counter32") - 1, COUNTER}    ,    {"read-only", sizeof("read-only") - 1, READONLY}    ,    {"DESCRIPTION", sizeof("DESCRIPTION") - 1, DESCRIPTION}    ,    {"INDEX", sizeof("INDEX") - 1, INDEX}    ,    {"DEFVAL", sizeof("DEFVAL") - 1, DEFVAL}    ,    {"deprecated", sizeof("deprecated") - 1, DEPRECATED}    ,    {"SIZE", sizeof("SIZE") - 1, SIZE}    ,    {"MAX-ACCESS", sizeof("MAX-ACCESS") - 1, ACCESS}    ,    {"ACCESS", sizeof("ACCESS") - 1, ACCESS}    ,    {"mandatory", sizeof("mandatory") - 1, MANDATORY}    ,    {"current", sizeof("current") - 1, CURRENT}    ,    {"STATUS", sizeof("STATUS") - 1, STATUS}    ,    {"SYNTAX", sizeof("SYNTAX") - 1, SYNTAX}    ,    {"OBJECT-TYPE", sizeof("OBJECT-TYPE") - 1, OBJTYPE}    ,    {"TRAP-TYPE", sizeof("TRAP-TYPE") - 1, TRAPTYPE}    ,    {"ENTERPRISE", sizeof("ENTERPRISE") - 1, ENTERPRISE}    ,    {"BEGIN", sizeof("BEGIN") - 1, BEGIN}    ,    {"IMPORTS", sizeof("IMPORTS") - 1, IMPORTS}    ,    {"EXPORTS", sizeof("EXPORTS") - 1, EXPORTS}    ,    {"accessible-for-notify", sizeof("accessible-for-notify") - 1,     ACCNOTIFY}    ,    {"TEXTUAL-CONVENTION", sizeof("TEXTUAL-CONVENTION") - 1, CONVENTION}    ,    {"NOTIFICATION-GROUP", sizeof("NOTIFICATION-GROUP") - 1, NOTIFGROUP}    ,    {"DISPLAY-HINT", sizeof("DISPLAY-HINT") - 1, DISPLAYHINT}    ,    {"FROM", sizeof("FROM") - 1, FROM}    ,    {"AGENT-CAPABILITIES", sizeof("AGENT-CAPABILITIES") - 1, AGENTCAP}    ,    {"MACRO", sizeof("MACRO") - 1, MACRO}    ,    {"IMPLIED", sizeof("IMPLIED") - 1, IMPLIED}    ,    {"SUPPORTS", sizeof("SUPPORTS") - 1, SUPPORTS}    ,    {"INCLUDES", sizeof("INCLUDES") - 1, INCLUDES}    ,    {"VARIATION", sizeof("VARIATION") - 1, VARIATION}    ,    {"REVISION", sizeof("REVISION") - 1, REVISION}    ,    {"not-implemented", sizeof("not-implemented") - 1, NOTIMPL}    ,    {"OBJECTS", sizeof("OBJECTS") - 1, OBJECTS}    ,    {"NOTIFICATIONS", sizeof("NOTIFICATIONS") - 1, NOTIFICATIONS}    ,    {"MODULE", sizeof("MODULE") - 1, MODULE}    ,    {"MIN-ACCESS", sizeof("MIN-ACCESS") - 1, MINACCESS}    ,    {"PRODUCT-RELEASE", sizeof("PRODUCT-RELEASE") - 1, PRODREL}    ,    {"WRITE-SYNTAX", sizeof("WRITE-SYNTAX") - 1, WRSYNTAX}    ,    {"CREATION-REQUIRES", sizeof("CREATION-REQUIRES") - 1, CREATEREQ}    ,    {"MANDATORY-GROUPS", sizeof("MANDATORY-GROUPS") - 1, MANDATORYGROUPS}    ,    {"GROUP", sizeof("GROUP") - 1, GROUP}    ,    {"CHOICE", sizeof("CHOICE") - 1, CHOICE}    ,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -