]>
Commit | Line | Data |
---|---|---|
85269fdf | 1 | /* |
2 | * RFC 1908: Coexistence between SNMPv1 and SNMPv2 | |
3 | */ | |
4 | /********************************************************************** | |
5 | * | |
6 | * Copyright 1997 by Carnegie Mellon University | |
7 | * | |
8 | * All Rights Reserved | |
9 | * | |
10 | * Permission to use, copy, modify, and distribute this software and its | |
11 | * documentation for any purpose and without fee is hereby granted, | |
12 | * provided that the above copyright notice appear in all copies and that | |
13 | * both that copyright notice and this permission notice appear in | |
14 | * supporting documentation, and that the name of CMU not be | |
15 | * used in advertising or publicity pertaining to distribution of the | |
16 | * software without specific, written prior permission. | |
17 | * | |
18 | * CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING | |
19 | * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL | |
20 | * CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR | |
21 | * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, | |
22 | * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, | |
23 | * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS | |
24 | * SOFTWARE. | |
25 | * | |
26 | * Author: Ryan Troll <ryan+@andrew.cmu.edu> | |
27 | * | |
28 | **********************************************************************/ | |
29 | ||
30 | #include "config.h" | |
31 | ||
32 | #include "config.h" | |
33 | ||
34 | #include <stdio.h> | |
35 | ||
36 | #if HAVE_UNISTD_H | |
37 | #include <unistd.h> | |
38 | #endif | |
39 | #if HAVE_STDLIB_H | |
40 | #include <stdlib.h> | |
41 | #endif | |
42 | #if HAVE_SYS_TYPES_H | |
43 | #include <sys/types.h> | |
44 | #endif | |
45 | #if HAVE_CTYPE_H | |
46 | #include <ctype.h> | |
47 | #endif | |
48 | #if HAVE_GNUMALLOC_H | |
49 | #include <gnumalloc.h> | |
50 | #elif HAVE_MALLOC_H && !defined(_SQUID_FREEBSD_) && !defined(_SQUID_NEXT_) | |
51 | #include <malloc.h> | |
52 | #endif | |
53 | #if HAVE_MEMORY_H | |
54 | #include <memory.h> | |
55 | #endif | |
56 | #ifdef HAVE_STRING_H | |
57 | #include <string.h> | |
58 | #endif | |
59 | #ifdef HAVE_STRINGS_H | |
60 | #include <strings.h> | |
61 | #endif | |
62 | #if HAVE_BSTRING_H | |
63 | #include <bstring.h> | |
64 | #endif | |
65 | #if HAVE_SYS_SOCKET_H | |
66 | #include <sys/socket.h> | |
67 | #endif | |
68 | #if HAVE_NETINET_IN_H | |
69 | #include <netinet/in.h> | |
70 | #endif | |
71 | #if HAVE_ARPA_INET_H | |
72 | #include <arpa/inet.h> | |
73 | #endif | |
74 | #if HAVE_SYS_TIME_H | |
75 | #include <sys/time.h> | |
76 | #endif | |
77 | #if HAVE_NETDB_H | |
78 | #include <netdb.h> | |
79 | #endif | |
80 | ||
81 | #include "snmp.h" | |
82 | #include "asn1.h" | |
83 | #include "snmp_vars.h" | |
84 | #include "snmp_pdu.h" | |
85 | #include "snmp_error.h" | |
86 | #include "snmp_api_error.h" | |
87 | ||
88 | #include "util.h" | |
89 | ||
90 | /* | |
91 | * RFC 1908: Coexistence between SNMPv1 and SNMPv2 | |
92 | * | |
93 | * These convert: | |
94 | * | |
95 | * V1 PDUs from an ** AGENT ** to V2 PDUs for an ** MANAGER ** | |
96 | * V2 PDUs from an ** MANAGER ** to V1 PDUs for an ** AGENT ** | |
97 | * | |
98 | * We will never convert V1 information from a manager into V2 PDUs. V1 | |
99 | * requests are always honored by V2 agents, and the responses will be | |
100 | * valid V1 responses. (I think. XXXXX) | |
101 | * | |
102 | */ | |
103 | int snmp_coexist_V2toV1(struct snmp_pdu *PDU) | |
104 | { | |
105 | /* Per 3.1.1: | |
106 | */ | |
107 | switch (PDU->command) { | |
108 | ||
109 | case SNMP_PDU_GET: | |
110 | case SNMP_PDU_GETNEXT: | |
111 | case SNMP_PDU_SET: | |
112 | return(1); | |
113 | break; | |
114 | ||
115 | case SNMP_PDU_GETBULK: | |
116 | PDU->non_repeaters = 0; | |
117 | PDU->max_repetitions = 0; | |
118 | PDU->command = SNMP_PDU_GETNEXT; | |
119 | return(1); | |
120 | break; | |
121 | ||
122 | default: | |
123 | snmplib_debug(2, "Unable to translate PDU %d to SNMPv1!\n", PDU->command); | |
124 | snmp_set_api_error(SNMPERR_PDU_TRANSLATION); | |
125 | return(0); | |
126 | } | |
127 | } | |
128 |