diff options
Diffstat (limited to 'include/net-snmp/library/snmpusm.h')
-rw-r--r-- | include/net-snmp/library/snmpusm.h | 281 |
1 files changed, 281 insertions, 0 deletions
diff --git a/include/net-snmp/library/snmpusm.h b/include/net-snmp/library/snmpusm.h new file mode 100644 index 0000000..9d673cc --- /dev/null +++ b/include/net-snmp/library/snmpusm.h @@ -0,0 +1,281 @@ +/* + * snmpusm.h + * + * Header file for USM support. + */ + +#ifndef SNMPUSM_H +#define SNMPUSM_H + +#include <net-snmp/library/callback.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#define WILDCARDSTRING "*" + + /* + * General. + */ +#define USM_MAX_ID_LENGTH 1024 /* In bytes. */ +#define USM_MAX_SALT_LENGTH 128 /* In BITS. */ +#define USM_DES_SALT_LENGTH 64 /* In BITS. */ +#define USM_AES_SALT_LENGTH 128 /* In BITS. */ +#define USM_MAX_KEYEDHASH_LENGTH 128 /* In BITS. */ + +#define USM_TIME_WINDOW 150 +#define USM_MD5_AND_SHA_AUTH_LEN 12 /* bytes */ +#define USM_MAX_AUTHSIZE USM_MD5_AND_SHA_AUTH_LEN + +#define USM_SEC_MODEL_NUMBER SNMP_SEC_MODEL_USM + + /* + * Structures. + */ + struct usmStateReference { + char *usr_name; + size_t usr_name_length; + u_char *usr_engine_id; + size_t usr_engine_id_length; + oid *usr_auth_protocol; + size_t usr_auth_protocol_length; + u_char *usr_auth_key; + size_t usr_auth_key_length; + oid *usr_priv_protocol; + size_t usr_priv_protocol_length; + u_char *usr_priv_key; + size_t usr_priv_key_length; + u_int usr_sec_level; + }; + + + /* + * struct usmUser: a structure to represent a given user in a list + */ + /* + * Note: Any changes made to this structure need to be reflected in + * the following functions: + */ + + struct usmUser; + struct usmUser { + u_char *engineID; + size_t engineIDLen; + char *name; + char *secName; + oid *cloneFrom; + size_t cloneFromLen; + oid *authProtocol; + size_t authProtocolLen; + u_char *authKey; + size_t authKeyLen; + oid *privProtocol; + size_t privProtocolLen; + u_char *privKey; + size_t privKeyLen; + u_char *userPublicString; + size_t userPublicStringLen; + int userStatus; + int userStorageType; + /* these are actually DH * pointers but only if openssl is avail. */ + void *usmDHUserAuthKeyChange; + void *usmDHUserPrivKeyChange; + struct usmUser *next; + struct usmUser *prev; + }; + + + + /* + * Prototypes. + */ + struct usmStateReference *usm_malloc_usmStateReference(void); + + void usm_free_usmStateReference(void *old); + + int usm_set_usmStateReference_name(struct usmStateReference + *ref, char *name, + size_t name_len); + + int usm_set_usmStateReference_engine_id(struct + usmStateReference + *ref, + u_char * engine_id, + size_t + engine_id_len); + + int usm_set_usmStateReference_auth_protocol(struct + usmStateReference + *ref, + oid * + auth_protocol, + size_t + auth_protocol_len); + + int usm_set_usmStateReference_auth_key(struct + usmStateReference + *ref, + u_char * auth_key, + size_t + auth_key_len); + + int usm_set_usmStateReference_priv_protocol(struct + usmStateReference + *ref, + oid * + priv_protocol, + size_t + priv_protocol_len); + + int usm_set_usmStateReference_priv_key(struct + usmStateReference + *ref, + u_char * priv_key, + size_t + priv_key_len); + + int usm_set_usmStateReference_sec_level(struct + usmStateReference + *ref, + int sec_level); + int usm_clone_usmStateReference(struct usmStateReference *from, + struct usmStateReference **to); + + +#ifdef NETSNMP_ENABLE_TESTING_CODE + void emergency_print(u_char * field, u_int length); +#endif + + int asn_predict_int_length(int type, long number, + size_t len); + + int asn_predict_length(int type, u_char * ptr, + size_t u_char_len); + + int usm_set_salt(u_char * iv, + size_t * iv_length, + u_char * priv_salt, + size_t priv_salt_length, + u_char * msgSalt); + + int usm_parse_security_parameters(u_char * secParams, + size_t remaining, + u_char * secEngineID, + size_t * secEngineIDLen, + u_int * boots_uint, + u_int * time_uint, + char *secName, + size_t * secNameLen, + u_char * signature, + size_t * + signature_length, + u_char * salt, + size_t * salt_length, + u_char ** data_ptr); + + int usm_check_and_update_timeliness(u_char * secEngineID, + size_t secEngineIDLen, + u_int boots_uint, + u_int time_uint, + int *error); + + SecmodSessionCallback usm_open_session; + SecmodOutMsg usm_secmod_generate_out_msg; + SecmodOutMsg usm_secmod_generate_out_msg; + SecmodInMsg usm_secmod_process_in_msg; + int usm_generate_out_msg(int, u_char *, size_t, int, int, + u_char *, size_t, char *, size_t, + int, u_char *, size_t, void *, + u_char *, size_t *, u_char **, + size_t *); + int usm_rgenerate_out_msg(int, u_char *, size_t, int, int, + u_char *, size_t, char *, size_t, + int, u_char *, size_t, void *, + u_char **, size_t *, size_t *); + + int usm_process_in_msg(int, size_t, u_char *, int, int, + u_char *, size_t, u_char *, + size_t *, char *, size_t *, + u_char **, size_t *, size_t *, + void **, netsnmp_session *, u_char); + + int usm_check_secLevel(int level, struct usmUser *user); + NETSNMP_IMPORT + struct usmUser *usm_get_userList(void); + NETSNMP_IMPORT + struct usmUser *usm_get_user(u_char * engineID, size_t engineIDLen, + char *name); + struct usmUser *usm_get_user_from_list(u_char * engineID, + size_t engineIDLen, char *name, + struct usmUser *userList, + int use_default); + NETSNMP_IMPORT + struct usmUser *usm_add_user(struct usmUser *user); + struct usmUser *usm_add_user_to_list(struct usmUser *user, + struct usmUser *userList); + NETSNMP_IMPORT + struct usmUser *usm_free_user(struct usmUser *user); + NETSNMP_IMPORT + struct usmUser *usm_create_user(void); + NETSNMP_IMPORT + struct usmUser *usm_create_initial_user(const char *name, + const oid * authProtocol, + size_t authProtocolLen, + const oid * privProtocol, + size_t privProtocolLen); + NETSNMP_IMPORT + struct usmUser *usm_cloneFrom_user(struct usmUser *from, + struct usmUser *to); + NETSNMP_IMPORT + struct usmUser *usm_remove_user(struct usmUser *user); + struct usmUser *usm_remove_user_from_list(struct usmUser *user, + struct usmUser **userList); + char *get_objid(char *line, oid ** optr, size_t * len); + NETSNMP_IMPORT + void usm_save_users(const char *token, const char *type); + void usm_save_users_from_list(struct usmUser *user, + const char *token, + const char *type); + void usm_save_user(struct usmUser *user, const char *token, + const char *type); + NETSNMP_IMPORT + SNMPCallback usm_store_users; + struct usmUser *usm_read_user(const char *line); + NETSNMP_IMPORT + void usm_parse_config_usmUser(const char *token, + char *line); + + void usm_set_password(const char *token, char *line); + NETSNMP_IMPORT + void usm_set_user_password(struct usmUser *user, + const char *token, char *line); + void init_usm(void); + NETSNMP_IMPORT + void init_usm_conf(const char *app); + int init_usm_post_config(int majorid, int minorid, + void *serverarg, void *clientarg); + int deinit_usm_post_config(int majorid, int minorid, void *serverarg, + void *clientarg); + NETSNMP_IMPORT + void clear_user_list(void); + NETSNMP_IMPORT + void shutdown_usm(void); + + NETSNMP_IMPORT + int usm_create_user_from_session(netsnmp_session * session); + SecmodPostDiscovery usm_create_user_from_session_hook; + NETSNMP_IMPORT + void usm_parse_create_usmUser(const char *token, + char *line); + NETSNMP_IMPORT + const oid *get_default_authtype(size_t *); + NETSNMP_IMPORT + const oid *get_default_privtype(size_t *); + void snmpv3_authtype_conf(const char *word, char *cptr); + void snmpv3_privtype_conf(const char *word, char *cptr); + +#ifdef __cplusplus +} +#endif +#endif /* SNMPUSM_H */ |