2 * Copyright (C) 2008 Martin Willi
3 * HSR Hochschule fuer Technik Rapperswil
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or (at your
8 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 #include "medsrv_config.h"
22 typedef struct private_medsrv_config_t private_medsrv_config_t
;
25 * Private data of an medsrv_config_t object
27 struct private_medsrv_config_t
{
32 medsrv_config_t
public;
55 METHOD(backend_t
, get_peer_cfg_by_name
, peer_cfg_t
*,
56 private_medsrv_config_t
*this, char *name
)
61 METHOD(backend_t
, create_ike_cfg_enumerator
, enumerator_t
*,
62 private_medsrv_config_t
*this, host_t
*me
, host_t
*other
)
64 return enumerator_create_single(this->ike
, NULL
);
67 METHOD(backend_t
, create_peer_cfg_enumerator
, enumerator_t
*,
68 private_medsrv_config_t
*this, identification_t
*me
,
69 identification_t
*other
)
73 if (!me
|| !other
|| other
->get_type(other
) != ID_KEY_ID
)
77 e
= this->db
->query(this->db
,
78 "SELECT CONCAT(peer.alias, CONCAT('@', user.login)) FROM "
79 "peer JOIN user ON peer.user = user.id "
80 "WHERE peer.keyid = ?", DB_BLOB
, other
->get_encoding(other
),
88 if (e
->enumerate(e
, &name
))
90 peer_cfg_create_t peer
= {
91 .cert_policy
= CERT_NEVER_SEND
,
92 .unique
= UNIQUE_REPLACE
,
94 .rekey_time
= this->rekey
* 60,
95 .jitter_time
= this->rekey
* 5,
96 .over_time
= this->rekey
* 3,
100 peer_cfg
= peer_cfg_create(name
, this->ike
->get_ref(this->ike
),
104 auth
= auth_cfg_create();
105 auth
->add(auth
, AUTH_RULE_AUTH_CLASS
, AUTH_CLASS_PUBKEY
);
106 auth
->add(auth
, AUTH_RULE_IDENTITY
, me
->clone(me
));
107 peer_cfg
->add_auth_cfg(peer_cfg
, auth
, TRUE
);
108 auth
= auth_cfg_create();
109 auth
->add(auth
, AUTH_RULE_AUTH_CLASS
, AUTH_CLASS_PUBKEY
);
110 auth
->add(auth
, AUTH_RULE_IDENTITY
, other
->clone(other
));
111 peer_cfg
->add_auth_cfg(peer_cfg
, auth
, FALSE
);
113 return enumerator_create_single(peer_cfg
, (void*)peer_cfg
->destroy
);
120 METHOD(medsrv_config_t
, destroy
, void,
121 private_medsrv_config_t
*this)
123 this->ike
->destroy(this->ike
);
128 * Described in header.
130 medsrv_config_t
*medsrv_config_create(database_t
*db
)
132 private_medsrv_config_t
*this;
133 ike_cfg_create_t ike
= {
136 .local_port
= charon
->socket
->get_port(charon
->socket
, FALSE
),
138 .remote_port
= IKEV2_UDP_PORT
,
145 .create_peer_cfg_enumerator
= _create_peer_cfg_enumerator
,
146 .create_ike_cfg_enumerator
= _create_ike_cfg_enumerator
,
147 .get_peer_cfg_by_name
= _get_peer_cfg_by_name
,
152 .rekey
= lib
->settings
->get_time(lib
->settings
, "medsrv.rekey", 1200),
153 .dpd
= lib
->settings
->get_time(lib
->settings
, "medsrv.dpd", 300),
154 .ike
= ike_cfg_create(&ike
),
156 this->ike
->add_proposal(this->ike
, proposal_create_default(PROTO_IKE
));
157 this->ike
->add_proposal(this->ike
, proposal_create_default_aead(PROTO_IKE
));
159 return &this->public;