Mercurial > ecos-v3_0-branch
diff packages/net/snmp/lib/current/include/snmpusm.h @ 103:95f3e12a6327 ecos-sw-2000-06-23
Merge from eCos master repository on 2000-06-23-16:41:10-BST
| author | jlarmour |
|---|---|
| date | Fri, 23 Jun 2000 17:06:31 +0000 |
| parents | |
| children | 0d0f03f76f6a |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/packages/net/snmp/lib/current/include/snmpusm.h @@ -0,0 +1,284 @@ +//========================================================================== +// +// ./lib/current/include/snmpusm.h +// +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//####UCDSNMPCOPYRIGHTBEGIN#### +// +// ------------------------------------------- +// +// Portions of this software may have been derived from the UCD-SNMP +// project, <http://ucd-snmp.ucdavis.edu/> from the University of +// California at Davis, which was originally based on the Carnegie Mellon +// University SNMP implementation. Portions of this software are therefore +// covered by the appropriate copyright disclaimers included herein. +// +// The release used was version 4.1.2 of May 2000. "ucd-snmp-4.1.2" +// ------------------------------------------- +// +//####UCDSNMPCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): hmt +// Contributors: hmt +// Date: 2000-05-30 +// Purpose: Port of UCD-SNMP distribution to eCos. +// Description: +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== +/******************************************************************** + Copyright 1989, 1991, 1992 by Carnegie Mellon University + + Derivative Work - +Copyright 1996, 1998, 1999, 2000 The Regents of the University of California + + All Rights Reserved + +Permission to use, copy, modify and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appears in all copies and +that both that copyright notice and this permission notice appear in +supporting documentation, and that the name of CMU and The Regents of +the University of California not be used in advertising or publicity +pertaining to distribution of the software without specific written +permission. + +CMU AND THE REGENTS OF THE UNIVERSITY OF CALIFORNIA DISCLAIM ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL CMU OR +THE REGENTS OF THE UNIVERSITY OF CALIFORNIA BE LIABLE FOR ANY SPECIAL, +INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING +FROM THE LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*********************************************************************/ +/* + * snmpusm.h + * + * Header file for USM support. + */ + +#ifndef SNMPUSM_H +#define SNMPUSM_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define WILDCARDSTRING "*" + +/* + * General. + */ +#define USM_MAX_ID_LENGTH 1024 /* In bytes. */ +#define USM_MAX_SALT_LENGTH 64 /* In BITS. */ +#define USM_MAX_KEYEDHASH_LENGTH 128 /* In BITS. */ + +#define USM_TIME_WINDOW 150 + + +/* + * 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; + int userStatus; + int userStorageType; + struct usmUser *next; + struct usmUser *prev; +}; + + + +/* + * Prototypes. + */ +void usm_set_reportErrorOnUnknownID (int value); + +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); + +#ifdef SNMP_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); + +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_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 **); + +int usm_check_secLevel(int level, struct usmUser *user); +struct usmUser *usm_get_userList(void); +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); +struct usmUser *usm_add_user(struct usmUser *user); +struct usmUser *usm_add_user_to_list(struct usmUser *user, + struct usmUser *userList); +struct usmUser *usm_free_user(struct usmUser *user); +struct usmUser *usm_create_user(void); +struct usmUser *usm_create_initial_user(const char *name, + oid *authProtocol, size_t authProtocolLen, + oid *privProtocol, size_t privProtocolLen); +struct usmUser *usm_cloneFrom_user(struct usmUser *from, struct usmUser *to); +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); +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); +SNMPCallback usm_store_users; +struct usmUser *usm_read_user(char *line); +void usm_parse_config_usmUser(const char *token, char *line); + +void usm_set_password(const char *token, char *line); +void usm_set_user_password(struct usmUser *user, const char *token, + char *line); +void init_usm(void); +int init_usm_post_config(int majorid, int minorid, void *serverarg, + void *clientarg); + +#ifdef __cplusplus +} +#endif + +#endif /* SNMPUSM_H */
