+++ /dev/null
-/*
- * snmp_auth.c
- *
- * Community name parse/build routines.
- */
-/**********************************************************************
- Copyright 1988, 1989, 1991, 1992 by Carnegie Mellon University
-
- All Rights Reserved
-
-Permission 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 that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of CMU not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY 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 THIS
-SOFTWARE.
-******************************************************************/
-
-#include <net-snmp/net-snmp-config.h>
-
-#ifdef KINETICS
-#include "gw.h"
-#include "fp4/cmdmacro.h"
-#endif
-
-#include <stdio.h>
-#if HAVE_STRING_H
-#include <string.h>
-#else
-#include <strings.h>
-#endif
-#include <sys/types.h>
-#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_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-#if HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#if HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-#if HAVE_DMALLOC_H
-#include <dmalloc.h>
-#endif
-
-#if HAVE_WINSOCK_H
-#include <winsock.h>
-#endif
-
-#ifdef vms
-#include <in.h>
-#endif
-
-#include <net-snmp/types.h>
-#include <net-snmp/output_api.h>
-#include <net-snmp/utilities.h>
-
-#include <net-snmp/library/asn1.h>
-#include <net-snmp/library/snmp_api.h>
-#include <net-snmp/library/mib.h>
-#include <net-snmp/library/md5.h>
-#include <net-snmp/library/scapi.h>
-
-/*
- * Globals.
- */
-
-/*******************************************************************-o-******
- * snmp_comstr_parse
- *
- * Parameters:
- * *data (I) Message.
- * *length (I/O) Bytes left in message.
- * *psid (O) Community string.
- * *slen (O) Length of community string.
- * *version (O) Message version.
- *
- * Returns:
- * Pointer to the remainder of data.
- *
- *
- * Parse the header of a community string-based message such as that found
- * in SNMPv1 and SNMPv2c.
- */
-u_char *
-snmp_comstr_parse(u_char * data,
- size_t * length,
- u_char * psid, size_t * slen, long *version)
-{
- u_char type;
- long ver;
- size_t origlen = *slen;
-
- /*
- * Message is an ASN.1 SEQUENCE.
- */
- data = asn_parse_sequence(data, length, &type,
- (ASN_SEQUENCE | ASN_CONSTRUCTOR),
- "auth message");
- if (data == NULL) {
- return NULL;
- }
-
- /*
- * First field is the version.
- */
- DEBUGDUMPHEADER("recv", "SNMP version");
- data = asn_parse_int(data, length, &type, &ver, sizeof(ver));
- DEBUGINDENTLESS();
- *version = ver;
- if (data == NULL) {
- ERROR_MSG("bad parse of version");
- return NULL;
- }
-
- /*
- * second field is the community string for SNMPv1 & SNMPv2c
- */
- DEBUGDUMPHEADER("recv", "community string");
- data = asn_parse_string(data, length, &type, psid, slen);
- DEBUGINDENTLESS();
- if (data == NULL) {
- ERROR_MSG("bad parse of community");
- return NULL;
- }
- psid[SNMP_MIN(*slen, origlen - 1)] = '\0';
- return (u_char *) data;
-
-} /* end snmp_comstr_parse() */
-
-
-
-
-/*******************************************************************-o-******
- * snmp_comstr_build
- *
- * Parameters:
- * *data
- * *length
- * *psid
- * *slen
- * *version
- * messagelen
- *
- * Returns:
- * Pointer into 'data' after built section.
- *
- *
- * Build the header of a community string-based message such as that found
- * in SNMPv1 and SNMPv2c.
- *
- * NOTE: The length of the message will have to be inserted later,
- * if not known.
- *
- * NOTE: Version is an 'int'. (CMU had it as a long, but was passing
- * in a *int. Grrr.) Assign version to verfix and pass in
- * that to asn_build_int instead which expects a long. -- WH
- */
-u_char *
-snmp_comstr_build(u_char * data,
- size_t * length,
- u_char * psid,
- size_t * slen, long *version, size_t messagelen)
-{
- long verfix = *version;
- u_char *h1 = data;
- u_char *h1e;
- size_t hlength = *length;
-
-
- /*
- * Build the the message wrapper (note length will be inserted later).
- */
- data =
- asn_build_sequence(data, length,
- (u_char) (ASN_SEQUENCE | ASN_CONSTRUCTOR), 0);
- if (data == NULL) {
- return NULL;
- }
- h1e = data;
-
-
- /*
- * Store the version field.
- */
- data = asn_build_int(data, length,
- (u_char) (ASN_UNIVERSAL | ASN_PRIMITIVE |
- ASN_INTEGER), &verfix, sizeof(verfix));
- if (data == NULL) {
- return NULL;
- }
-
-
- /*
- * Store the community string.
- */
- data = asn_build_string(data, length,
- (u_char) (ASN_UNIVERSAL | ASN_PRIMITIVE |
- ASN_OCTET_STR), psid,
- *(u_char *) slen);
- if (data == NULL) {
- return NULL;
- }
-
-
- /*
- * Insert length.
- */
- asn_build_sequence(h1, &hlength,
- (u_char) (ASN_SEQUENCE | ASN_CONSTRUCTOR),
- data - h1e + messagelen);
-
-
- return data;
-
-} /* end snmp_comstr_build() */