File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ipsec-tools / src / racoon / remoteconf.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 22:39:10 2012 UTC (12 years, 4 months ago) by misho
Branches: ipsec-tools, MAIN
CVS tags: v0_8_2p2, v0_8_1p0, v0_8_1, v0_8_0p0, v0_8_0, HEAD
ipsec-tools

    1: /*	$NetBSD: remoteconf.h,v 1.16 2011/03/14 15:50:36 vanhu Exp $	*/
    2: 
    3: /* Id: remoteconf.h,v 1.26 2006/05/06 15:52:44 manubsd Exp */
    4: 
    5: /*
    6:  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
    7:  * All rights reserved.
    8:  * 
    9:  * Redistribution and use in source and binary forms, with or without
   10:  * modification, are permitted provided that the following conditions
   11:  * are met:
   12:  * 1. Redistributions of source code must retain the above copyright
   13:  *    notice, this list of conditions and the following disclaimer.
   14:  * 2. Redistributions in binary form must reproduce the above copyright
   15:  *    notice, this list of conditions and the following disclaimer in the
   16:  *    documentation and/or other materials provided with the distribution.
   17:  * 3. Neither the name of the project nor the names of its contributors
   18:  *    may be used to endorse or promote products derived from this software
   19:  *    without specific prior written permission.
   20:  * 
   21:  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
   22:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   23:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   24:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
   25:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   26:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   27:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   28:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   29:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   30:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   31:  * SUCH DAMAGE.
   32:  */
   33: 
   34: #ifndef _REMOTECONF_H
   35: #define _REMOTECONF_H
   36: 
   37: /* remote configuration */
   38: 
   39: #include <sys/queue.h>
   40: #include "genlist.h"
   41: #ifdef ENABLE_HYBRID
   42: #include "isakmp_var.h"
   43: #include "isakmp_xauth.h"
   44: #endif
   45: 
   46: struct ph1handle;
   47: struct secprotospec;
   48: 
   49: struct etypes {
   50: 	int type;
   51: 	struct etypes *next;
   52: };
   53: 
   54: /* ISAKMP SA specification */
   55: struct isakmpsa {
   56: 	int prop_no;
   57: 	int trns_no;
   58: 	time_t lifetime;
   59: 	size_t lifebyte;
   60: 	int enctype;
   61: 	int encklen;
   62: 	int authmethod;
   63: 	int hashtype;
   64: 	int vendorid;
   65: #ifdef HAVE_GSSAPI
   66: 	vchar_t *gssid;
   67: #endif
   68: 	int dh_group;			/* don't use it if aggressive mode */
   69: 	struct dhgroup *dhgrp;		/* don't use it if aggressive mode */
   70: 
   71: 	struct isakmpsa *next;		/* next transform */
   72: };
   73: 
   74: /* Certificate information */
   75: struct rmconf_cert {
   76: 	vchar_t *data;			/* certificate payload */
   77: 	char *filename;			/* name of local file */
   78: };
   79: 
   80: /* Script hooks */
   81: #define SCRIPT_PHASE1_UP	0
   82: #define SCRIPT_PHASE1_DOWN	1
   83: #define SCRIPT_PHASE1_DEAD	2
   84: #define SCRIPT_MAX		2
   85: extern char *script_names[SCRIPT_MAX + 1];
   86: 
   87: struct remoteconf {
   88: 	char *name;			/* remote configuration name */
   89: 	struct sockaddr *remote;	/* remote IP address */
   90: 					/* if family is AF_UNSPEC, that is
   91: 					 * for anonymous configuration. */
   92: 
   93: 	struct etypes *etypes;		/* exchange type list. the head
   94: 					 * is a type to be sent first. */
   95: 	int doitype;			/* doi type */
   96: 	int sittype;			/* situation type */
   97: 
   98: 	int idvtype;			/* my identifier type */
   99: 	vchar_t *idv;			/* my identifier */
  100: 	vchar_t *key;			/* my pre-shared key */
  101: 	struct genlist *idvl_p;         /* peer's identifiers list */
  102: 
  103: 	char *myprivfile;		/* file name of my private key file */
  104: 	char *mycertfile;		/* file name of my certificate */
  105: 	vchar_t *mycert;		/* my certificate */
  106: 	char *peerscertfile;		/* file name of peer's certifcate */
  107: 	vchar_t *peerscert;		/* peer's certificate */
  108: 	char *cacertfile;		/* file name of CA */
  109: 	vchar_t *cacert;		/* CA certificate */
  110: 
  111: 	int send_cert;			/* send to CERT or not */
  112: 	int send_cr;			/* send to CR or not */
  113: 	int match_empty_cr;		/* does this match if CR is empty */
  114: 	int verify_cert;		/* verify a CERT strictly */
  115: 	int verify_identifier;		/* vefify the peer's identifier */
  116: 	int nonce_size;			/* the number of bytes of nonce */
  117: 	int passive;			/* never initiate */
  118: 	int ike_frag;			/* IKE fragmentation */
  119: 	int esp_frag;			/* ESP fragmentation */
  120: 	int mode_cfg;			/* Gets config through mode config */
  121: 	int support_proxy;		/* support mip6/proxy */
  122: #define GENERATE_POLICY_NONE	0
  123: #define GENERATE_POLICY_REQUIRE	1
  124: #define GENERATE_POLICY_UNIQUE	2
  125: 	int gen_policy;			/* generate policy if no policy found */
  126: 	int ini_contact;		/* initial contact */
  127: 	int pcheck_level;		/* level of propocl checking */
  128: 	int nat_traversal;		/* NAT-Traversal */
  129: 	vchar_t *script[SCRIPT_MAX + 1];/* script hooks paths */
  130: 	int dh_group;			/* use it when only aggressive mode */
  131: 	struct dhgroup *dhgrp;		/* use it when only aggressive mode */
  132: 					/* above two can't be defined by user*/
  133: 
  134: 	int dpd;				/* Negociate DPD support ? */
  135: 	int dpd_retry;			/* in seconds */
  136: 	int dpd_interval;		/* in seconds */
  137: 	int dpd_maxfails;
  138: 
  139: 	int rekey;			/* rekey ph1 when active ph2s? */
  140: #define REKEY_OFF		FALSE
  141: #define REKEY_ON		TRUE
  142: #define REKEY_FORCE		2
  143: 
  144: 	uint32_t ph1id; /* ph1id to be matched with sainfo sections */
  145: 
  146: 	int weak_phase1_check;		/* act on unencrypted deletions ? */
  147: 
  148: 	struct isakmpsa *proposal;	/* proposal list */
  149: 	struct remoteconf *inherited_from;	/* the original rmconf 
  150: 						   from which this one 
  151: 						   was inherited */
  152: 
  153: 	time_t lifetime;		/* for isakmp/ipsec */
  154: 	int lifebyte;			/* for isakmp/ipsec */
  155: 	struct secprotospec *spspec;	/* the head is always current spec. */
  156: 
  157: 	struct genlist	*rsa_private,	/* lists of PlainRSA keys to use */
  158: 			*rsa_public;
  159: 
  160: #ifdef ENABLE_HYBRID
  161: 	struct xauth_rmconf *xauth;
  162: #endif
  163: 
  164: 	TAILQ_ENTRY(remoteconf) chain;	/* next remote conf */
  165: };
  166: 
  167: #define RMCONF_NONCE_SIZE(rmconf) \
  168: 	(rmconf != NULL ? rmconf->nonce_size : DEFAULT_NONCE_SIZE)
  169: 
  170: struct dhgroup;
  171: 
  172: struct idspec {
  173: 	int idtype;                     /* identifier type */
  174: 	vchar_t *id;                    /* identifier */
  175: };
  176: 
  177: struct rmconfselector {
  178: 	int flags;
  179: 	struct sockaddr *remote;
  180: 	int etype;
  181: 	struct isakmpsa *approval;
  182: 	vchar_t *identity;
  183: 	vchar_t *certificate_request;
  184: };
  185: 
  186: extern void rmconf_selector_from_ph1 __P((struct rmconfselector *rmsel,
  187: 					  struct ph1handle *iph1));
  188: extern int enumrmconf __P((struct rmconfselector *rmsel,
  189: 			   int (* enum_func)(struct remoteconf *rmconf, void *arg),
  190: 			   void *enum_arg));
  191: 
  192: #define GETRMCONF_F_NO_ANONYMOUS	0x0001
  193: #define GETRMCONF_F_NO_PASSIVE		0x0002
  194: 
  195: #define RMCONF_ERR_MULTIPLE		((struct remoteconf *) -1)
  196: 
  197: extern int rmconf_match_identity __P((struct remoteconf *rmconf,
  198: 				      vchar_t *id_p));
  199: extern struct remoteconf *getrmconf __P((struct sockaddr *remote, int flags));
  200: extern struct remoteconf *getrmconf_by_ph1 __P((struct ph1handle *iph1));
  201: extern struct remoteconf *getrmconf_by_name __P((const char *name));
  202: 
  203: extern struct remoteconf *newrmconf __P((void));
  204: extern struct remoteconf *duprmconf_shallow __P((struct remoteconf *));
  205: extern int duprmconf_finish __P((struct remoteconf *));
  206: extern void delrmconf __P((struct remoteconf *));
  207: extern void deletypes __P((struct etypes *));
  208: extern struct etypes * dupetypes __P((struct etypes *));
  209: extern void insrmconf __P((struct remoteconf *));
  210: extern void remrmconf __P((struct remoteconf *));
  211: extern void flushrmconf __P((void));
  212: extern void dupspspec_list __P((struct remoteconf *, struct remoteconf *));
  213: extern void flushspspec __P((struct remoteconf *));
  214: extern void initrmconf __P((void));
  215: extern void rmconf_start_reload __P((void));
  216: extern void rmconf_finish_reload __P((void));
  217: 
  218: extern int check_etypeok __P((struct remoteconf *, void *));
  219: 
  220: extern struct isakmpsa *newisakmpsa __P((void));
  221: extern struct isakmpsa *dupisakmpsa __P((struct isakmpsa *));
  222: extern void delisakmpsa __P((struct isakmpsa *));
  223: extern void insisakmpsa __P((struct isakmpsa *, struct remoteconf *));
  224: #ifdef ENABLE_HYBRID
  225: extern int isakmpsa_switch_authmethod __P((int authmethod));
  226: #else
  227: static inline int isakmpsa_switch_authmethod(int authmethod)
  228: {
  229: 	return authmethod;
  230: }
  231: #endif
  232: extern struct isakmpsa * checkisakmpsa __P((int pcheck,
  233: 					    struct isakmpsa *proposal,
  234: 					    struct isakmpsa *acceptable));
  235: 
  236: 
  237: extern void dumprmconf __P((void));
  238: 
  239: extern struct idspec *newidspec __P((void));
  240: 
  241: extern vchar_t *script_path_add __P((vchar_t *));
  242: 
  243: #endif /* _REMOTECONF_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>