summaryrefslogtreecommitdiff
path: root/include/net-snmp/library/vacm.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net-snmp/library/vacm.h')
-rw-r--r--include/net-snmp/library/vacm.h266
1 files changed, 266 insertions, 0 deletions
diff --git a/include/net-snmp/library/vacm.h b/include/net-snmp/library/vacm.h
new file mode 100644
index 0000000..a5be6ac
--- /dev/null
+++ b/include/net-snmp/library/vacm.h
@@ -0,0 +1,266 @@
+/*
+ * vacm.h
+ *
+ * SNMPv3 View-based Access Control Model
+ */
+
+#ifndef VACM_H
+#define VACM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define VACM_SUCCESS 0
+#define VACM_NOSECNAME 1
+#define VACM_NOGROUP 2
+#define VACM_NOACCESS 3
+#define VACM_NOVIEW 4
+#define VACM_NOTINVIEW 5
+#define VACM_NOSUCHCONTEXT 6
+#define VACM_SUBTREE_UNKNOWN 7
+
+#define SECURITYMODEL 1
+#define SECURITYNAME 2
+#define SECURITYGROUP 3
+#define SECURITYSTORAGE 4
+#define SECURITYSTATUS 5
+
+#define ACCESSPREFIX 1
+#define ACCESSMODEL 2
+#define ACCESSLEVEL 3
+#define ACCESSMATCH 4
+#define ACCESSREAD 5
+#define ACCESSWRITE 6
+#define ACCESSNOTIFY 7
+#define ACCESSSTORAGE 8
+#define ACCESSSTATUS 9
+
+#define VACMVIEWSPINLOCK 1
+#define VIEWNAME 2
+#define VIEWSUBTREE 3
+#define VIEWMASK 4
+#define VIEWTYPE 5
+#define VIEWSTORAGE 6
+#define VIEWSTATUS 7
+
+#define VACM_MAX_STRING 32
+#define VACMSTRINGLEN 34 /* VACM_MAX_STRING + 2 */
+
+ struct vacm_groupEntry {
+ int securityModel;
+ char securityName[VACMSTRINGLEN];
+ char groupName[VACMSTRINGLEN];
+ int storageType;
+ int status;
+
+ u_long bitMask;
+ struct vacm_groupEntry *reserved;
+ struct vacm_groupEntry *next;
+ };
+
+#define CONTEXT_MATCH_EXACT 1
+#define CONTEXT_MATCH_PREFIX 2
+
+/* VIEW ENUMS ---------------------------------------- */
+
+/* SNMPD usage: get/set/send-notification views */
+#define VACM_VIEW_READ 0
+#define VACM_VIEW_WRITE 1
+#define VACM_VIEW_NOTIFY 2
+
+/* SNMPTRAPD usage: log execute and net-access (forward) usage */
+#define VACM_VIEW_LOG 3
+#define VACM_VIEW_EXECUTE 4
+#define VACM_VIEW_NET 5
+
+/* VIEW BIT MASK VALUES-------------------------------- */
+
+/* SNMPD usage: get/set/send-notification views */
+#define VACM_VIEW_READ_BIT (1 << VACM_VIEW_READ)
+#define VACM_VIEW_WRITE_BIT (1 << VACM_VIEW_WRITE)
+#define VACM_VIEW_NOTIFY_BIT (1 << VACM_VIEW_NOTIFY)
+
+/* SNMPTRAPD usage: log execute and net-access (forward) usage */
+#define VACM_VIEW_LOG_BIT (1 << VACM_VIEW_LOG)
+#define VACM_VIEW_EXECUTE_BIT (1 << VACM_VIEW_EXECUTE)
+#define VACM_VIEW_NET_BIT (1 << VACM_VIEW_NET)
+
+#define VACM_VIEW_NO_BITS 0
+
+/* Maximum number of views in the view array */
+#define VACM_MAX_VIEWS 8
+
+#define VACM_VIEW_ENUM_NAME "vacmviews"
+
+ void init_vacm(void);
+
+ struct vacm_accessEntry {
+ char groupName[VACMSTRINGLEN];
+ char contextPrefix[VACMSTRINGLEN];
+ int securityModel;
+ int securityLevel;
+ int contextMatch;
+ char views[VACM_MAX_VIEWS][VACMSTRINGLEN];
+ int storageType;
+ int status;
+
+ u_long bitMask;
+ struct vacm_accessEntry *reserved;
+ struct vacm_accessEntry *next;
+ };
+
+ struct vacm_viewEntry {
+ char viewName[VACMSTRINGLEN];
+ oid viewSubtree[MAX_OID_LEN];
+ size_t viewSubtreeLen;
+ u_char viewMask[VACMSTRINGLEN];
+ size_t viewMaskLen;
+ int viewType;
+ int viewStorageType;
+ int viewStatus;
+
+ u_long bitMask;
+
+ struct vacm_viewEntry *reserved;
+ struct vacm_viewEntry *next;
+ };
+
+ NETSNMP_IMPORT
+ void vacm_destroyViewEntry(const char *, oid *, size_t);
+ NETSNMP_IMPORT
+ void vacm_destroyAllViewEntries(void);
+
+#define VACM_MODE_FIND 0
+#define VACM_MODE_IGNORE_MASK 1
+#define VACM_MODE_CHECK_SUBTREE 2
+ NETSNMP_IMPORT
+ struct vacm_viewEntry *vacm_getViewEntry(const char *, oid *, size_t,
+ int);
+ /*
+ * Returns a pointer to the viewEntry with the
+ * same viewName and viewSubtree
+ * Returns NULL if that entry does not exist.
+ */
+
+ NETSNMP_IMPORT
+ int vacm_checkSubtree(const char *, oid *, size_t);
+
+ /*
+ * Check to see if everything within a subtree is in view, not in view,
+ * or possibly both.
+ *
+ * Returns:
+ * VACM_SUCCESS The OID is included in the view.
+ * VACM_NOTINVIEW If no entry in the view list includes the
+ * provided OID, or the OID is explicitly excluded
+ * from the view.
+ * VACM_SUBTREE_UNKNOWN The entire subtree has both allowed and
+ * disallowed portions.
+ */
+
+ NETSNMP_IMPORT
+ void
+ vacm_scanViewInit(void);
+ /*
+ * Initialized the scan routines so that they will begin at the
+ * beginning of the list of viewEntries.
+ *
+ */
+
+
+ NETSNMP_IMPORT
+ struct vacm_viewEntry *vacm_scanViewNext(void);
+ /*
+ * Returns a pointer to the next viewEntry.
+ * These entries are returned in no particular order,
+ * but if N entries exist, N calls to view_scanNext() will
+ * return all N entries once.
+ * Returns NULL if all entries have been returned.
+ * view_scanInit() starts the scan over.
+ */
+
+ NETSNMP_IMPORT
+ struct vacm_viewEntry *vacm_createViewEntry(const char *, oid *,
+ size_t);
+ /*
+ * Creates a viewEntry with the given index
+ * and returns a pointer to it.
+ * The status of this entry is created as invalid.
+ */
+
+ NETSNMP_IMPORT
+ void vacm_destroyGroupEntry(int, const char *);
+ NETSNMP_IMPORT
+ void vacm_destroyAllGroupEntries(void);
+ NETSNMP_IMPORT
+ struct vacm_groupEntry *vacm_createGroupEntry(int, const char *);
+ NETSNMP_IMPORT
+ struct vacm_groupEntry *vacm_getGroupEntry(int, const char *);
+ NETSNMP_IMPORT
+ void vacm_scanGroupInit(void);
+ NETSNMP_IMPORT
+ struct vacm_groupEntry *vacm_scanGroupNext(void);
+
+ NETSNMP_IMPORT
+ void vacm_destroyAccessEntry(const char *, const char *,
+ int, int);
+ NETSNMP_IMPORT
+ void vacm_destroyAllAccessEntries(void);
+ NETSNMP_IMPORT
+ struct vacm_accessEntry *vacm_createAccessEntry(const char *,
+ const char *, int,
+ int);
+ NETSNMP_IMPORT
+ struct vacm_accessEntry *vacm_getAccessEntry(const char *,
+ const char *, int, int);
+ NETSNMP_IMPORT
+ void vacm_scanAccessInit(void);
+ NETSNMP_IMPORT
+ struct vacm_accessEntry *vacm_scanAccessNext(void);
+
+ void vacm_destroySecurityEntry(const char *);
+ struct vacm_securityEntry *vacm_createSecurityEntry(const char *);
+ struct vacm_securityEntry *vacm_getSecurityEntry(const char *);
+ void vacm_scanSecurityInit(void);
+ struct vacm_securityEntry *vacm_scanSecurityEntry(void);
+ NETSNMP_IMPORT
+ int vacm_is_configured(void);
+
+ void vacm_save(const char *token, const char *type);
+ void vacm_save_view(struct vacm_viewEntry *view,
+ const char *token, const char *type);
+ void vacm_save_access(struct vacm_accessEntry *access_entry,
+ const char *token, const char *type);
+ void vacm_save_auth_access(struct vacm_accessEntry *access_entry,
+ const char *token, const char *type, int authtype);
+ void vacm_save_group(struct vacm_groupEntry *group_entry,
+ const char *token, const char *type);
+
+ NETSNMP_IMPORT
+ void vacm_parse_config_view(const char *token, const char *line);
+ NETSNMP_IMPORT
+ void vacm_parse_config_group(const char *token,
+ const char *line);
+ NETSNMP_IMPORT
+ void vacm_parse_config_access(const char *token,
+ const char *line);
+ NETSNMP_IMPORT
+ void vacm_parse_config_auth_access(const char *token,
+ const char *line);
+
+ NETSNMP_IMPORT
+ int store_vacm(int majorID, int minorID, void *serverarg,
+ void *clientarg);
+
+ NETSNMP_IMPORT
+ struct vacm_viewEntry *netsnmp_view_get(struct vacm_viewEntry *head,
+ const char *viewName,
+ oid * viewSubtree,
+ size_t viewSubtreeLen, int mode);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* VACM_H */