default_store.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. /* Portions of this file are subject to the following copyright(s). See
  2. * the Net-SNMP's COPYING file for more details and other copyrights
  3. * that may apply:
  4. */
  5. /*
  6. * Portions of this file are copyrighted by:
  7. * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
  8. * Use is subject to license terms specified in the COPYING file
  9. * distributed with the Net-SNMP package.
  10. *
  11. * Portions of this file are copyrighted by:
  12. * Copyright (c) 2016 VMware, Inc. All rights reserved.
  13. * Use is subject to license terms specified in the COPYING file
  14. * distributed with the Net-SNMP package.
  15. */
  16. /*
  17. * Note:
  18. * If new default_store entries are added to this header file,
  19. * then remember to run 'perl/default_store/gen' to update the
  20. * corresponding perl interface.
  21. */
  22. /**
  23. * @file default_store.h: storage space for defaults
  24. *
  25. * @addtogroup default_store
  26. *
  27. * @{
  28. */
  29. #ifndef DEFAULT_STORE_H
  30. #define DEFAULT_STORE_H
  31. #include <net-snmp/net-snmp-config.h>
  32. #ifdef __cplusplus
  33. extern "C" {
  34. #endif
  35. #define NETSNMP_DS_MAX_IDS 3
  36. #define NETSNMP_DS_MAX_SUBIDS 48 /* needs to be a multiple of 8 */
  37. /*
  38. * begin storage definitions
  39. */
  40. /**
  41. * @def NETSNMP_DS_LIBRARY_ID
  42. * These definitions correspond with the "storid" argument to the API.
  43. */
  44. #define NETSNMP_DS_LIBRARY_ID 0
  45. #define NETSNMP_DS_APPLICATION_ID 1
  46. #define NETSNMP_DS_TOKEN_ID 2
  47. /*
  48. * These definitions correspond with the "which" argument to the API,
  49. * when the storeid argument is NETSNMP_DS_LIBRARY_ID
  50. */
  51. /*
  52. * library booleans
  53. */
  54. #define NETSNMP_DS_LIB_MIB_ERRORS 0
  55. #define NETSNMP_DS_LIB_SAVE_MIB_DESCRS 1
  56. #define NETSNMP_DS_LIB_MIB_COMMENT_TERM 2
  57. #define NETSNMP_DS_LIB_MIB_PARSE_LABEL 3
  58. #define NETSNMP_DS_LIB_DUMP_PACKET 4
  59. #define NETSNMP_DS_LIB_LOG_TIMESTAMP 5
  60. #define NETSNMP_DS_LIB_DONT_READ_CONFIGS 6 /* don't read normal config files */
  61. #define NETSNMP_DS_LIB_DISABLE_CONFIG_LOAD NETSNMP_DS_LIB_DONT_READ_CONFIGS
  62. #define NETSNMP_DS_LIB_MIB_REPLACE 7 /* replace objects from latest module */
  63. #define NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM 8 /* print only numeric enum values */
  64. #define NETSNMP_DS_LIB_PRINT_NUMERIC_OIDS 9 /* print only numeric enum values */
  65. #define NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS 10 /* dont print oid indexes specially */
  66. #define NETSNMP_DS_LIB_ALARM_DONT_USE_SIG 11 /* don't use the alarm() signal */
  67. #define NETSNMP_DS_LIB_PRINT_FULL_OID 12 /* print fully qualified oids */
  68. #define NETSNMP_DS_LIB_QUICK_PRINT 13 /* print very brief output for parsing */
  69. #define NETSNMP_DS_LIB_RANDOM_ACCESS 14 /* random access to oid labels */
  70. #define NETSNMP_DS_LIB_REGEX_ACCESS 15 /* regex matching to oid labels */
  71. #define NETSNMP_DS_LIB_DONT_CHECK_RANGE 16 /* don't check values for ranges on send */
  72. #define NETSNMP_DS_LIB_NO_TOKEN_WARNINGS 17 /* no warn about unknown config tokens */
  73. #define NETSNMP_DS_LIB_NUMERIC_TIMETICKS 18 /* print timeticks as a number */
  74. #define NETSNMP_DS_LIB_ESCAPE_QUOTES 19 /* shell escape quote marks in oids */
  75. #define NETSNMP_DS_LIB_REVERSE_ENCODE 20 /* encode packets from back to front */
  76. #define NETSNMP_DS_LIB_PRINT_BARE_VALUE 21 /* just print value (not OID = value) */
  77. #define NETSNMP_DS_LIB_EXTENDED_INDEX 22 /* print extended index format [x1][x2] */
  78. #define NETSNMP_DS_LIB_PRINT_HEX_TEXT 23 /* print ASCII text along with hex strings */
  79. #define NETSNMP_DS_LIB_PRINT_UCD_STYLE_OID 24 /* print OID's using the UCD-style prefix suppression */
  80. #define NETSNMP_DS_LIB_READ_UCD_STYLE_OID 25 /* require top-level OIDs to be prefixed with a dot */
  81. #define NETSNMP_DS_LIB_HAVE_READ_PREMIB_CONFIG 26 /* have the pre-mib parsing config tokens been processed */
  82. #define NETSNMP_DS_LIB_HAVE_READ_CONFIG 27 /* have the config tokens been processed */
  83. #define NETSNMP_DS_LIB_QUICKE_PRINT 28
  84. #define NETSNMP_DS_LIB_DONT_PRINT_UNITS 29 /* don't print UNITS suffix */
  85. #define NETSNMP_DS_LIB_NO_DISPLAY_HINT 30 /* don't apply DISPLAY-HINTs */
  86. #define NETSNMP_DS_LIB_16BIT_IDS 31 /* restrict requestIDs, etc to 16-bit values */
  87. #define NETSNMP_DS_LIB_DONT_PERSIST_STATE 32 /* don't load config and don't load/save persistent file */
  88. #define NETSNMP_DS_LIB_2DIGIT_HEX_OUTPUT 33 /* print a leading 0 on hex values <= 'f' */
  89. #define NETSNMP_DS_LIB_IGNORE_NO_COMMUNITY 34 /* don't complain if no community is specified in the command arguments */
  90. #define NETSNMP_DS_LIB_DISABLE_PERSISTENT_LOAD 35 /* don't load persistent file */
  91. #define NETSNMP_DS_LIB_DISABLE_PERSISTENT_SAVE 36 /* don't save persistent file */
  92. #define NETSNMP_DS_LIB_APPEND_LOGFILES 37 /* append, don't overwrite, log files */
  93. #define NETSNMP_DS_LIB_NO_DISCOVERY 38 /* don't support RFC5343 contextEngineID discovery */
  94. #define NETSNMP_DS_LIB_TSM_USE_PREFIX 39 /* TSM's simple security name mapping */
  95. #define NETSNMP_DS_LIB_DONT_LOAD_HOST_FILES 40 /* don't read host.conf files */
  96. #define NETSNMP_DS_LIB_DNSSEC_WARN_ONLY 41 /* tread DNSSEC errors as warnings */
  97. #define NETSNMP_DS_LIB_CLIENT_ADDR_USES_PORT 42 /* NETSNMP_DS_LIB_CLIENT_ADDR includes address and also port */
  98. #define NETSNMP_DS_LIB_DISABLE_V1 43 /* disable SNMPv1 */
  99. #define NETSNMP_DS_LIB_DISABLE_V2c 44 /* disable SNMPv2c */
  100. #define NETSNMP_DS_LIB_DISABLE_V3 45 /* disable SNMPv3 */
  101. #define NETSNMP_DS_LIB_FILTER_SOURCE 46 /* filter pkt by source IP */
  102. #define NETSNMP_DS_LIB_ADD_FORWARDER_INFO 47 /* add info about forwarder to SNMP packets */
  103. #define NETSNMP_DS_LIB_MAX_BOOL_ID 48 /* match NETSNMP_DS_MAX_SUBIDS */
  104. /*
  105. * library integers
  106. */
  107. #define NETSNMP_DS_LIB_MIB_WARNINGS 0
  108. #define NETSNMP_DS_LIB_SECLEVEL 1
  109. #define NETSNMP_DS_LIB_SNMPVERSION 2
  110. #define NETSNMP_DS_LIB_DEFAULT_PORT 3
  111. #define NETSNMP_DS_LIB_OID_OUTPUT_FORMAT 4
  112. #define NETSNMP_DS_LIB_PRINT_SUFFIX_ONLY NETSNMP_DS_LIB_OID_OUTPUT_FORMAT
  113. #define NETSNMP_DS_LIB_STRING_OUTPUT_FORMAT 5
  114. #define NETSNMP_DS_LIB_HEX_OUTPUT_LENGTH 6
  115. #define NETSNMP_DS_LIB_SERVERSENDBUF 7 /* send buffer (server) */
  116. #define NETSNMP_DS_LIB_SERVERRECVBUF 8 /* receive buffer (server) */
  117. #define NETSNMP_DS_LIB_CLIENTSENDBUF 9 /* send buffer (client) */
  118. #define NETSNMP_DS_LIB_CLIENTRECVBUF 10 /* receive buffer (client) */
  119. #define NETSNMP_DS_SSHDOMAIN_SOCK_PERM 11
  120. #define NETSNMP_DS_SSHDOMAIN_DIR_PERM 12
  121. #define NETSNMP_DS_SSHDOMAIN_SOCK_USER 12
  122. #define NETSNMP_DS_SSHDOMAIN_SOCK_GROUP 13
  123. #define NETSNMP_DS_LIB_TIMEOUT 14
  124. #define NETSNMP_DS_LIB_RETRIES 15
  125. #define NETSNMP_DS_LIB_MSG_SEND_MAX 16 /* global max response size */
  126. #define NETSNMP_DS_LIB_FILTER_TYPE 17 /* 0=NONE, 1=acceptlist, -1=blocklist */
  127. #define NETSNMP_DS_LIB_MAX_INT_ID 48 /* match NETSNMP_DS_MAX_SUBIDS */
  128. /*
  129. * special meanings for the default SNMP version slot (NETSNMP_DS_LIB_SNMPVERSION)
  130. */
  131. #ifndef NETSNMP_DISABLE_SNMPV1
  132. #define NETSNMP_DS_SNMP_VERSION_1 128 /* bogus */
  133. #endif
  134. #ifndef NETSNMP_DISABLE_SNMPV2C
  135. #define NETSNMP_DS_SNMP_VERSION_2c 1 /* real */
  136. #endif
  137. #define NETSNMP_DS_SNMP_VERSION_3 3 /* real */
  138. /*
  139. * library strings
  140. */
  141. #define NETSNMP_DS_LIB_SECNAME 0
  142. #define NETSNMP_DS_LIB_CONTEXT 1
  143. #define NETSNMP_DS_LIB_PASSPHRASE 2
  144. #define NETSNMP_DS_LIB_AUTHPASSPHRASE 3
  145. #define NETSNMP_DS_LIB_PRIVPASSPHRASE 4
  146. #define NETSNMP_DS_LIB_OPTIONALCONFIG 5
  147. #define NETSNMP_DS_LIB_APPTYPE 6
  148. #define NETSNMP_DS_LIB_COMMUNITY 7
  149. #define NETSNMP_DS_LIB_PERSISTENT_DIR 8
  150. #define NETSNMP_DS_LIB_CONFIGURATION_DIR 9
  151. #define NETSNMP_DS_LIB_SECMODEL 10
  152. #define NETSNMP_DS_LIB_MIBDIRS 11
  153. #define NETSNMP_DS_LIB_OIDSUFFIX 12
  154. #define NETSNMP_DS_LIB_OIDPREFIX 13
  155. #define NETSNMP_DS_LIB_CLIENT_ADDR 14
  156. #define NETSNMP_DS_LIB_TEMP_FILE_PATTERN 15
  157. #define NETSNMP_DS_LIB_AUTHMASTERKEY 16
  158. #define NETSNMP_DS_LIB_PRIVMASTERKEY 17
  159. #define NETSNMP_DS_LIB_AUTHLOCALIZEDKEY 18
  160. #define NETSNMP_DS_LIB_PRIVLOCALIZEDKEY 19
  161. #define NETSNMP_DS_LIB_APPTYPES 20
  162. #define NETSNMP_DS_LIB_KSM_KEYTAB 21
  163. #define NETSNMP_DS_LIB_KSM_SERVICE_NAME 22
  164. #define NETSNMP_DS_LIB_X509_CLIENT_PUB 23
  165. #define NETSNMP_DS_LIB_X509_SERVER_PUB 24
  166. #define NETSNMP_DS_LIB_SSHTOSNMP_SOCKET 25
  167. #define NETSNMP_DS_LIB_CERT_EXTRA_SUBDIR 26
  168. #define NETSNMP_DS_LIB_HOSTNAME 27
  169. #define NETSNMP_DS_LIB_X509_CRL_FILE 28
  170. #define NETSNMP_DS_LIB_TLS_ALGORITMS 29
  171. #define NETSNMP_DS_LIB_TLS_LOCAL_CERT 30
  172. #define NETSNMP_DS_LIB_TLS_PEER_CERT 31
  173. #define NETSNMP_DS_LIB_SSH_USERNAME 32
  174. #define NETSNMP_DS_LIB_SSH_PUBKEY 33
  175. #define NETSNMP_DS_LIB_SSH_PRIVKEY 34
  176. #define NETSNMP_DS_LIB_OUTPUT_PRECISION 35
  177. #define NETSNMP_DS_LIB_MAX_STR_ID 48 /* match NETSNMP_DS_MAX_SUBIDS */
  178. /*
  179. * end storage definitions
  180. */
  181. /*
  182. * macros for dynamic protocol switches
  183. */
  184. #ifndef NETSNMP_FEATURE_REMOVE_RUNTIME_DISABLE_VERSION
  185. #if defined(NETSNMP_DISABLE_SNMPV1)
  186. #define NETSNMP_RUNTIME_PROTOCOL_SKIP_V1(pc_ver) \
  187. ((pc_ver) == 0/*SNMP_VERSION_1*/)
  188. #else
  189. #define NETSNMP_RUNTIME_PROTOCOL_SKIP_V1(pc_ver) \
  190. ((pc_ver) == SNMP_VERSION_1 && \
  191. netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, \
  192. NETSNMP_DS_LIB_DISABLE_V1))
  193. #endif
  194. #if defined(NETSNMP_DISABLE_SNMPV2C)
  195. #define NETSNMP_RUNTIME_PROTOCOL_SKIP_V2(pc_ver) \
  196. ((pc_ver) == 1/*SNMP_VERSION_2c*/)
  197. #else
  198. #define NETSNMP_RUNTIME_PROTOCOL_SKIP_V2(pc_ver) \
  199. ((pc_ver) == SNMP_VERSION_2c && \
  200. netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, \
  201. NETSNMP_DS_LIB_DISABLE_V2c))
  202. #endif
  203. #define NETSNMP_RUNTIME_PROTOCOL_CHECK_V1V2(pc_ver, pc_target) do { \
  204. if (NETSNMP_RUNTIME_PROTOCOL_SKIP_V1(pc_ver) || \
  205. NETSNMP_RUNTIME_PROTOCOL_SKIP_V2(pc_ver)) { \
  206. DEBUGMSGTL(("snmp:protocol:disabled", "enforced\n")); \
  207. goto pc_target; \
  208. } \
  209. } while(0)
  210. #define NETSNMP_RUNTIME_PROTOCOL_SKIP_V3(pc_ver) \
  211. ((pc_ver == SNMP_VERSION_3) && \
  212. netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, \
  213. NETSNMP_DS_LIB_DISABLE_V3))
  214. #define NETSNMP_RUNTIME_PROTOCOL_CHECK_V3(pc_ver, pc_target) do { \
  215. if (NETSNMP_RUNTIME_PROTOCOL_SKIP_V3(pc_ver)) { \
  216. DEBUGMSGTL(("snmp:protocol:disabled", "enforced\n")); \
  217. goto pc_target; \
  218. } \
  219. } while(0)
  220. #define NETSNMP_RUNTIME_PROTOCOL_CHECK(pc_ver, pc_target) do { \
  221. NETSNMP_RUNTIME_PROTOCOL_CHECK_V1V2(pc_ver, pc_target); \
  222. NETSNMP_RUNTIME_PROTOCOL_CHECK_V3(pc_ver, pc_target); \
  223. } while(0)
  224. #define NETSNMP_RUNTIME_PROTOCOL_SKIP(pc_ver) \
  225. (NETSNMP_RUNTIME_PROTOCOL_SKIP_V1(pc_ver) || \
  226. NETSNMP_RUNTIME_PROTOCOL_SKIP_V2(pc_ver) || \
  227. NETSNMP_RUNTIME_PROTOCOL_SKIP_V3(pc_ver))
  228. #else /* NETSNMP_FEATURE_REMOVE_RUNTIME_DISABLE_VERSION */
  229. #define NETSNMP_RUNTIME_PROTOCOL_SKIP(pc_ver) (0)
  230. #define NETSNMP_RUNTIME_PROTOCOL_SKIP_V1(pc_ver) (0)
  231. #define NETSNMP_RUNTIME_PROTOCOL_SKIP_V2(pc_ver) (0)
  232. #define NETSNMP_RUNTIME_PROTOCOL_SKIP_V3(pc_ver) (0)
  233. #define NETSNMP_RUNTIME_PROTOCOL_CHECK(ver, gt) do { ; } while(0)
  234. #define NETSNMP_RUNTIME_PROTOCOL_CHECK_V1V2(ver, gt) do { ; } while(0)
  235. #define NETSNMP_RUNTIME_PROTOCOL_CHECK_V3(ver, gt) do { ; } while(0)
  236. #endif /* NETSNMP_FEATURE_REMOVE_RUNTIME_DISABLE_VERSION */
  237. NETSNMP_IMPORT
  238. int netsnmp_ds_set_boolean(int storeid, int which, int value);
  239. NETSNMP_IMPORT
  240. int netsnmp_ds_get_boolean(int storeid, int which);
  241. NETSNMP_IMPORT
  242. int netsnmp_ds_toggle_boolean(int storeid, int which);
  243. NETSNMP_IMPORT
  244. int netsnmp_ds_set_int(int storeid, int which, int value);
  245. NETSNMP_IMPORT
  246. int netsnmp_ds_get_int(int storeid, int which);
  247. NETSNMP_IMPORT
  248. int netsnmp_ds_set_string(int storeid, int which,
  249. const char *value);
  250. NETSNMP_IMPORT
  251. char *netsnmp_ds_get_string(int storeid, int which);
  252. NETSNMP_IMPORT
  253. int netsnmp_ds_set_void(int storeid, int which, void *value);
  254. NETSNMP_IMPORT
  255. void *netsnmp_ds_get_void(int storeid, int which);
  256. NETSNMP_IMPORT
  257. int netsnmp_ds_register_config(u_char type, const char *ftype,
  258. const char *token, int storeid,
  259. int which);
  260. NETSNMP_IMPORT
  261. int netsnmp_ds_register_premib(u_char type, const char *ftype,
  262. const char *token, int storeid,
  263. int which);
  264. NETSNMP_IMPORT
  265. int netsnmp_ds_parse_boolean(char *line);
  266. NETSNMP_IMPORT
  267. void netsnmp_ds_shutdown(void);
  268. #ifdef __cplusplus
  269. }
  270. #endif
  271. #endif /* DEFAULT_STORE_H */
  272. /** @} */