/* * snmpusm.h * * Header file for USM support. */ #ifndef SNMPUSM_H #define SNMPUSM_H #include #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 */