~ubuntu-branches/ubuntu/gutsy/net-snmp/gutsy-security

« back to all changes in this revision

Viewing changes to include/net-snmp/library/snmpusm.h

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2004-09-13 12:06:21 UTC
  • Revision ID: james.westby@ubuntu.com-20040913120621-g952ntonlleihcvm
Tags: upstream-5.1.1
ImportĀ upstreamĀ versionĀ 5.1.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * snmpusm.h
 
3
 *
 
4
 * Header file for USM support.
 
5
 */
 
6
 
 
7
#ifndef SNMPUSM_H
 
8
#define SNMPUSM_H
 
9
 
 
10
#ifdef __cplusplus
 
11
extern          "C" {
 
12
#endif
 
13
 
 
14
#define WILDCARDSTRING "*"
 
15
 
 
16
    /*
 
17
     * General.
 
18
     */
 
19
#define USM_MAX_ID_LENGTH               1024    /* In bytes. */
 
20
#define USM_MAX_SALT_LENGTH             128     /* In BITS. */
 
21
#define USM_DES_SALT_LENGTH             64      /* In BITS. */
 
22
#define USM_AES_SALT_LENGTH             128     /* In BITS. */
 
23
#define USM_MAX_KEYEDHASH_LENGTH        128     /* In BITS. */
 
24
 
 
25
#define USM_TIME_WINDOW                 150
 
26
#define USM_MD5_AND_SHA_AUTH_LEN        12      /* bytes */
 
27
#define USM_MAX_AUTHSIZE                USM_MD5_AND_SHA_AUTH_LEN
 
28
 
 
29
#define USM_SEC_MODEL_NUMBER            3
 
30
 
 
31
    /*
 
32
     * Structures.
 
33
     */
 
34
    struct usmStateReference {
 
35
        char           *usr_name;
 
36
        size_t          usr_name_length;
 
37
        u_char         *usr_engine_id;
 
38
        size_t          usr_engine_id_length;
 
39
        oid            *usr_auth_protocol;
 
40
        size_t          usr_auth_protocol_length;
 
41
        u_char         *usr_auth_key;
 
42
        size_t          usr_auth_key_length;
 
43
        oid            *usr_priv_protocol;
 
44
        size_t          usr_priv_protocol_length;
 
45
        u_char         *usr_priv_key;
 
46
        size_t          usr_priv_key_length;
 
47
        u_int           usr_sec_level;
 
48
    };
 
49
 
 
50
 
 
51
    /*
 
52
     * struct usmUser: a structure to represent a given user in a list 
 
53
     */
 
54
    /*
 
55
     * Note: Any changes made to this structure need to be reflected in
 
56
     * the following functions: 
 
57
     */
 
58
 
 
59
    struct usmUser;
 
60
    struct usmUser {
 
61
        u_char         *engineID;
 
62
        size_t          engineIDLen;
 
63
        char           *name;
 
64
        char           *secName;
 
65
        oid            *cloneFrom;
 
66
        size_t          cloneFromLen;
 
67
        oid            *authProtocol;
 
68
        size_t          authProtocolLen;
 
69
        u_char         *authKey;
 
70
        size_t          authKeyLen;
 
71
        oid            *privProtocol;
 
72
        size_t          privProtocolLen;
 
73
        u_char         *privKey;
 
74
        size_t          privKeyLen;
 
75
        u_char         *userPublicString;
 
76
        int             userStatus;
 
77
        int             userStorageType;
 
78
        struct usmUser *next;
 
79
        struct usmUser *prev;
 
80
    };
 
81
 
 
82
 
 
83
 
 
84
    /*
 
85
     * Prototypes.
 
86
     */
 
87
    struct usmStateReference *usm_malloc_usmStateReference(void);
 
88
 
 
89
    void            usm_free_usmStateReference(void *old);
 
90
 
 
91
    int             usm_set_usmStateReference_name(struct usmStateReference
 
92
                                                   *ref, char *name,
 
93
                                                   size_t name_len);
 
94
 
 
95
    int             usm_set_usmStateReference_engine_id(struct
 
96
                                                        usmStateReference
 
97
                                                        *ref,
 
98
                                                        u_char * engine_id,
 
99
                                                        size_t
 
100
                                                        engine_id_len);
 
101
 
 
102
    int             usm_set_usmStateReference_auth_protocol(struct
 
103
                                                            usmStateReference
 
104
                                                            *ref,
 
105
                                                            oid *
 
106
                                                            auth_protocol,
 
107
                                                            size_t
 
108
                                                            auth_protocol_len);
 
109
 
 
110
    int             usm_set_usmStateReference_auth_key(struct
 
111
                                                       usmStateReference
 
112
                                                       *ref,
 
113
                                                       u_char * auth_key,
 
114
                                                       size_t
 
115
                                                       auth_key_len);
 
116
 
 
117
    int             usm_set_usmStateReference_priv_protocol(struct
 
118
                                                            usmStateReference
 
119
                                                            *ref,
 
120
                                                            oid *
 
121
                                                            priv_protocol,
 
122
                                                            size_t
 
123
                                                            priv_protocol_len);
 
124
 
 
125
    int             usm_set_usmStateReference_priv_key(struct
 
126
                                                       usmStateReference
 
127
                                                       *ref,
 
128
                                                       u_char * priv_key,
 
129
                                                       size_t
 
130
                                                       priv_key_len);
 
131
 
 
132
    int             usm_set_usmStateReference_sec_level(struct
 
133
                                                        usmStateReference
 
134
                                                        *ref,
 
135
                                                        int sec_level);
 
136
 
 
137
#ifdef SNMP_TESTING_CODE
 
138
    void            emergency_print(u_char * field, u_int length);
 
139
#endif
 
140
 
 
141
    int             asn_predict_int_length(int type, long number,
 
142
                                           size_t len);
 
143
 
 
144
    int             asn_predict_length(int type, u_char * ptr,
 
145
                                       size_t u_char_len);
 
146
 
 
147
    int             usm_set_salt(u_char * iv,
 
148
                                 size_t * iv_length,
 
149
                                 u_char * priv_salt,
 
150
                                 size_t priv_salt_length,
 
151
                                 u_char * msgSalt);
 
152
 
 
153
    int             usm_parse_security_parameters(u_char * secParams,
 
154
                                                  size_t remaining,
 
155
                                                  u_char * secEngineID,
 
156
                                                  size_t * secEngineIDLen,
 
157
                                                  u_int * boots_uint,
 
158
                                                  u_int * time_uint,
 
159
                                                  char *secName,
 
160
                                                  size_t * secNameLen,
 
161
                                                  u_char * signature,
 
162
                                                  size_t *
 
163
                                                  signature_length,
 
164
                                                  u_char * salt,
 
165
                                                  size_t * salt_length,
 
166
                                                  u_char ** data_ptr);
 
167
 
 
168
    int             usm_check_and_update_timeliness(u_char * secEngineID,
 
169
                                                    size_t secEngineIDLen,
 
170
                                                    u_int boots_uint,
 
171
                                                    u_int time_uint,
 
172
                                                    int *error);
 
173
 
 
174
    SecmodOutMsg    usm_secmod_generate_out_msg;
 
175
    SecmodOutMsg    usm_secmod_generate_out_msg;
 
176
    SecmodInMsg     usm_secmod_process_in_msg;
 
177
    int             usm_generate_out_msg(int, u_char *, size_t, int, int,
 
178
                                         u_char *, size_t, char *, size_t,
 
179
                                         int, u_char *, size_t, void *,
 
180
                                         u_char *, size_t *, u_char **,
 
181
                                         size_t *);
 
182
    int             usm_rgenerate_out_msg(int, u_char *, size_t, int, int,
 
183
                                          u_char *, size_t, char *, size_t,
 
184
                                          int, u_char *, size_t, void *,
 
185
                                          u_char **, size_t *, size_t *);
 
186
 
 
187
    int             usm_process_in_msg(int, size_t, u_char *, int, int,
 
188
                                       u_char *, size_t, u_char *,
 
189
                                       size_t *, char *, size_t *,
 
190
                                       u_char **, size_t *, size_t *,
 
191
                                       void **, netsnmp_session *, u_char);
 
192
 
 
193
    int             usm_check_secLevel(int level, struct usmUser *user);
 
194
    struct usmUser *usm_get_userList(void);
 
195
    struct usmUser *usm_get_user(u_char * engineID, size_t engineIDLen,
 
196
                                 char *name);
 
197
    struct usmUser *usm_get_user_from_list(u_char * engineID,
 
198
                                           size_t engineIDLen, char *name,
 
199
                                           struct usmUser *userList,
 
200
                                           int use_default);
 
201
    struct usmUser *usm_add_user(struct usmUser *user);
 
202
    struct usmUser *usm_add_user_to_list(struct usmUser *user,
 
203
                                         struct usmUser *userList);
 
204
    struct usmUser *usm_free_user(struct usmUser *user);
 
205
    struct usmUser *usm_create_user(void);
 
206
    struct usmUser *usm_create_initial_user(const char *name,
 
207
                                            const oid * authProtocol,
 
208
                                            size_t authProtocolLen,
 
209
                                            const oid * privProtocol,
 
210
                                            size_t privProtocolLen);
 
211
    struct usmUser *usm_cloneFrom_user(struct usmUser *from,
 
212
                                       struct usmUser *to);
 
213
    struct usmUser *usm_remove_user(struct usmUser *user);
 
214
    struct usmUser *usm_remove_user_from_list(struct usmUser *user,
 
215
                                              struct usmUser **userList);
 
216
    char           *get_objid(char *line, oid ** optr, size_t * len);
 
217
    void            usm_save_users(const char *token, const char *type);
 
218
    void            usm_save_users_from_list(struct usmUser *user,
 
219
                                             const char *token,
 
220
                                             const char *type);
 
221
    void            usm_save_user(struct usmUser *user, const char *token,
 
222
                                  const char *type);
 
223
    SNMPCallback    usm_store_users;
 
224
    struct usmUser *usm_read_user(char *line);
 
225
    void            usm_parse_config_usmUser(const char *token,
 
226
                                             char *line);
 
227
 
 
228
    void            usm_set_password(const char *token, char *line);
 
229
    void            usm_set_user_password(struct usmUser *user,
 
230
                                          const char *token, char *line);
 
231
    void            init_usm(void);
 
232
    int             init_usm_post_config(int majorid, int minorid,
 
233
                                         void *serverarg, void *clientarg);
 
234
    int             deinit_usm_post_config(int majorid, int minorid, void *serverarg,
 
235
                                           void *clientarg);
 
236
    void            clear_user_list(void);
 
237
 
 
238
#ifdef __cplusplus
 
239
}
 
240
#endif
 
241
#endif                          /* SNMPUSM_H */