net-snmp
5.4.1
|
00001 /* 00002 * snmpusm.h 00003 * 00004 * Header file for USM support. 00005 */ 00006 00007 #ifndef SNMPUSM_H 00008 #define SNMPUSM_H 00009 00010 #ifdef __cplusplus 00011 extern "C" { 00012 #endif 00013 00014 #define WILDCARDSTRING "*" 00015 00016 /* 00017 * General. 00018 */ 00019 #define USM_MAX_ID_LENGTH 1024 /* In bytes. */ 00020 #define USM_MAX_SALT_LENGTH 128 /* In BITS. */ 00021 #define USM_DES_SALT_LENGTH 64 /* In BITS. */ 00022 #define USM_AES_SALT_LENGTH 128 /* In BITS. */ 00023 #define USM_MAX_KEYEDHASH_LENGTH 128 /* In BITS. */ 00024 00025 #define USM_TIME_WINDOW 150 00026 #define USM_MD5_AND_SHA_AUTH_LEN 12 /* bytes */ 00027 #define USM_MAX_AUTHSIZE USM_MD5_AND_SHA_AUTH_LEN 00028 00029 #define USM_SEC_MODEL_NUMBER 3 00030 00031 /* 00032 * Structures. 00033 */ 00034 struct usmStateReference { 00035 char *usr_name; 00036 size_t usr_name_length; 00037 u_char *usr_engine_id; 00038 size_t usr_engine_id_length; 00039 oid *usr_auth_protocol; 00040 size_t usr_auth_protocol_length; 00041 u_char *usr_auth_key; 00042 size_t usr_auth_key_length; 00043 oid *usr_priv_protocol; 00044 size_t usr_priv_protocol_length; 00045 u_char *usr_priv_key; 00046 size_t usr_priv_key_length; 00047 u_int usr_sec_level; 00048 }; 00049 00050 00051 /* 00052 * struct usmUser: a structure to represent a given user in a list 00053 */ 00054 /* 00055 * Note: Any changes made to this structure need to be reflected in 00056 * the following functions: 00057 */ 00058 00059 struct usmUser; 00060 struct usmUser { 00061 u_char *engineID; 00062 size_t engineIDLen; 00063 char *name; 00064 char *secName; 00065 oid *cloneFrom; 00066 size_t cloneFromLen; 00067 oid *authProtocol; 00068 size_t authProtocolLen; 00069 u_char *authKey; 00070 size_t authKeyLen; 00071 oid *privProtocol; 00072 size_t privProtocolLen; 00073 u_char *privKey; 00074 size_t privKeyLen; 00075 u_char *userPublicString; 00076 int userStatus; 00077 int userStorageType; 00078 /* these are actually DH * pointers but only if openssl is avail. */ 00079 void *usmDHUserAuthKeyChange; 00080 void *usmDHUserPrivKeyChange; 00081 struct usmUser *next; 00082 struct usmUser *prev; 00083 }; 00084 00085 00086 00087 /* 00088 * Prototypes. 00089 */ 00090 struct usmStateReference *usm_malloc_usmStateReference(void); 00091 00092 void usm_free_usmStateReference(void *old); 00093 00094 int usm_set_usmStateReference_name(struct usmStateReference 00095 *ref, char *name, 00096 size_t name_len); 00097 00098 int usm_set_usmStateReference_engine_id(struct 00099 usmStateReference 00100 *ref, 00101 u_char * engine_id, 00102 size_t 00103 engine_id_len); 00104 00105 int usm_set_usmStateReference_auth_protocol(struct 00106 usmStateReference 00107 *ref, 00108 oid * 00109 auth_protocol, 00110 size_t 00111 auth_protocol_len); 00112 00113 int usm_set_usmStateReference_auth_key(struct 00114 usmStateReference 00115 *ref, 00116 u_char * auth_key, 00117 size_t 00118 auth_key_len); 00119 00120 int usm_set_usmStateReference_priv_protocol(struct 00121 usmStateReference 00122 *ref, 00123 oid * 00124 priv_protocol, 00125 size_t 00126 priv_protocol_len); 00127 00128 int usm_set_usmStateReference_priv_key(struct 00129 usmStateReference 00130 *ref, 00131 u_char * priv_key, 00132 size_t 00133 priv_key_len); 00134 00135 int usm_set_usmStateReference_sec_level(struct 00136 usmStateReference 00137 *ref, 00138 int sec_level); 00139 00140 #ifdef NETSNMP_ENABLE_TESTING_CODE 00141 void emergency_print(u_char * field, u_int length); 00142 #endif 00143 00144 int asn_predict_int_length(int type, long number, 00145 size_t len); 00146 00147 int asn_predict_length(int type, u_char * ptr, 00148 size_t u_char_len); 00149 00150 int usm_set_salt(u_char * iv, 00151 size_t * iv_length, 00152 u_char * priv_salt, 00153 size_t priv_salt_length, 00154 u_char * msgSalt); 00155 00156 int usm_parse_security_parameters(u_char * secParams, 00157 size_t remaining, 00158 u_char * secEngineID, 00159 size_t * secEngineIDLen, 00160 u_int * boots_uint, 00161 u_int * time_uint, 00162 char *secName, 00163 size_t * secNameLen, 00164 u_char * signature, 00165 size_t * 00166 signature_length, 00167 u_char * salt, 00168 size_t * salt_length, 00169 u_char ** data_ptr); 00170 00171 int usm_check_and_update_timeliness(u_char * secEngineID, 00172 size_t secEngineIDLen, 00173 u_int boots_uint, 00174 u_int time_uint, 00175 int *error); 00176 00177 SecmodOutMsg usm_secmod_generate_out_msg; 00178 SecmodOutMsg usm_secmod_generate_out_msg; 00179 SecmodInMsg usm_secmod_process_in_msg; 00180 int usm_generate_out_msg(int, u_char *, size_t, int, int, 00181 u_char *, size_t, char *, size_t, 00182 int, u_char *, size_t, void *, 00183 u_char *, size_t *, u_char **, 00184 size_t *); 00185 int usm_rgenerate_out_msg(int, u_char *, size_t, int, int, 00186 u_char *, size_t, char *, size_t, 00187 int, u_char *, size_t, void *, 00188 u_char **, size_t *, size_t *); 00189 00190 int usm_process_in_msg(int, size_t, u_char *, int, int, 00191 u_char *, size_t, u_char *, 00192 size_t *, char *, size_t *, 00193 u_char **, size_t *, size_t *, 00194 void **, netsnmp_session *, u_char); 00195 00196 int usm_check_secLevel(int level, struct usmUser *user); 00197 struct usmUser *usm_get_userList(void); 00198 struct usmUser *usm_get_user(u_char * engineID, size_t engineIDLen, 00199 char *name); 00200 struct usmUser *usm_get_user_from_list(u_char * engineID, 00201 size_t engineIDLen, char *name, 00202 struct usmUser *userList, 00203 int use_default); 00204 struct usmUser *usm_add_user(struct usmUser *user); 00205 struct usmUser *usm_add_user_to_list(struct usmUser *user, 00206 struct usmUser *userList); 00207 struct usmUser *usm_free_user(struct usmUser *user); 00208 struct usmUser *usm_create_user(void); 00209 struct usmUser *usm_create_initial_user(const char *name, 00210 const oid * authProtocol, 00211 size_t authProtocolLen, 00212 const oid * privProtocol, 00213 size_t privProtocolLen); 00214 struct usmUser *usm_cloneFrom_user(struct usmUser *from, 00215 struct usmUser *to); 00216 struct usmUser *usm_remove_user(struct usmUser *user); 00217 struct usmUser *usm_remove_user_from_list(struct usmUser *user, 00218 struct usmUser **userList); 00219 char *get_objid(char *line, oid ** optr, size_t * len); 00220 void usm_save_users(const char *token, const char *type); 00221 void usm_save_users_from_list(struct usmUser *user, 00222 const char *token, 00223 const char *type); 00224 void usm_save_user(struct usmUser *user, const char *token, 00225 const char *type); 00226 SNMPCallback usm_store_users; 00227 struct usmUser *usm_read_user(char *line); 00228 void usm_parse_config_usmUser(const char *token, 00229 char *line); 00230 00231 void usm_set_password(const char *token, char *line); 00232 void usm_set_user_password(struct usmUser *user, 00233 const char *token, char *line); 00234 void init_usm(void); 00235 void init_usm_conf(const char *app); 00236 int init_usm_post_config(int majorid, int minorid, 00237 void *serverarg, void *clientarg); 00238 int deinit_usm_post_config(int majorid, int minorid, void *serverarg, 00239 void *clientarg); 00240 void clear_user_list(void); 00241 00242 #ifdef __cplusplus 00243 } 00244 #endif 00245 #endif /* SNMPUSM_H */