snmpusm.h

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 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                          /* SNMPUSM_H */

net-snmpに対してSat Sep 5 13:14:27 2009に生成されました。  doxygen 1.4.7