00001
00002
00003
00004
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
00018
00019 #define USM_MAX_ID_LENGTH 1024
00020 #define USM_MAX_SALT_LENGTH 128
00021 #define USM_DES_SALT_LENGTH 64
00022 #define USM_AES_SALT_LENGTH 128
00023 #define USM_MAX_KEYEDHASH_LENGTH 128
00024
00025 #define USM_TIME_WINDOW 150
00026 #define USM_MD5_AND_SHA_AUTH_LEN 12
00027 #define USM_MAX_AUTHSIZE USM_MD5_AND_SHA_AUTH_LEN
00028
00029 #define USM_SEC_MODEL_NUMBER 3
00030
00031
00032
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
00053
00054
00055
00056
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
00079 void *usmDHUserAuthKeyChange;
00080 void *usmDHUserPrivKeyChange;
00081 struct usmUser *next;
00082 struct usmUser *prev;
00083 };
00084
00085
00086
00087
00088
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 SNMP_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