diff options
Diffstat (limited to 'Source/charon')
-rw-r--r-- | Source/charon/config/configuration_manager.c | 10 | ||||
-rw-r--r-- | Source/charon/daemon.c | 2 | ||||
-rw-r--r-- | Source/charon/encoding/message.c | 2 | ||||
-rw-r--r-- | Source/charon/encoding/payloads/encryption_payload.c | 2 | ||||
-rw-r--r-- | Source/charon/network/host.c | 50 | ||||
-rw-r--r-- | Source/charon/sa/states/ike_auth_requested.c | 25 | ||||
-rw-r--r-- | Source/charon/utils/logger_manager.c | 3 |
7 files changed, 57 insertions, 37 deletions
diff --git a/Source/charon/config/configuration_manager.c b/Source/charon/config/configuration_manager.c index 58a831c10..3669facb2 100644 --- a/Source/charon/config/configuration_manager.c +++ b/Source/charon/config/configuration_manager.c @@ -166,8 +166,8 @@ static void load_default_config (private_configuration_manager_t *this) sa_config_t *sa_config1, *sa_config2, *sa_config3; traffic_selector_t *ts; - init_config1 = init_config_create("152.96.193.130","152.96.193.131",IKEV2_UDP_PORT,IKEV2_UDP_PORT); - init_config2 = init_config_create("152.96.193.131","152.96.193.130",IKEV2_UDP_PORT,IKEV2_UDP_PORT); + init_config1 = init_config_create("0.0.0.0","152.96.193.131",IKEV2_UDP_PORT,IKEV2_UDP_PORT); + init_config2 = init_config_create("0.0.0.0","152.96.193.130",IKEV2_UDP_PORT,IKEV2_UDP_PORT); init_config3 = init_config_create("0.0.0.0","127.0.0.1",IKEV2_UDP_PORT,IKEV2_UDP_PORT); ts = traffic_selector_create_from_string(1, TS_IPV4_ADDR_RANGE, "0.0.0.0", 0, "255.255.255.255", 65535); @@ -254,6 +254,9 @@ static status_t get_init_config_for_host (private_configuration_manager_t *this, iterator = this->configurations->create_iterator(this->configurations,TRUE); + this->logger->log(this->logger, CONTROL|MORE, "getting config for hosts %s - %s", + my_host->get_address(my_host), other_host->get_address(other_host)); + while (iterator->has_next(iterator)) { configuration_entry_t *entry; @@ -268,9 +271,12 @@ static status_t get_init_config_for_host (private_configuration_manager_t *this, /* first check if ip is equal */ if(config_other_host->ip_is_equal(config_other_host,other_host)) { + this->logger->log(this->logger, CONTROL|MOST, "config entry with remote host %s", + config_other_host->get_address(config_other_host)); /* could be right one, check my_host for default route*/ if (config_my_host->is_default_route(config_my_host)) { + printf("is default route\n"); *init_config = entry->init_config; status = SUCCESS; break; diff --git a/Source/charon/daemon.c b/Source/charon/daemon.c index 08b759f8a..649f0b452 100644 --- a/Source/charon/daemon.c +++ b/Source/charon/daemon.c @@ -156,7 +156,7 @@ static void kill_daemon(private_daemon_t *this, char *reason) static void build_test_jobs(private_daemon_t *this) { int i; - for(i = 0; i<1; i++) + for(i = 0; i<0; i++) { initiate_ike_sa_job_t *initiate_job; initiate_job = initiate_ike_sa_job_create("pinflb30"); diff --git a/Source/charon/encoding/message.c b/Source/charon/encoding/message.c index a6d237550..7fea8aea3 100644 --- a/Source/charon/encoding/message.c +++ b/Source/charon/encoding/message.c @@ -147,7 +147,7 @@ static supported_payload_entry_t supported_ike_auth_r_payloads[] = { {NOTIFY,0,1,TRUE,TRUE}, {CERTIFICATE,0,1,TRUE,FALSE}, - {ID_RESPONDER,0,1,TRUE,FALSE}, + {ID_RESPONDER,1,1,TRUE,FALSE}, {AUTHENTICATION,1,1,TRUE,FALSE}, {SECURITY_ASSOCIATION,1,1,TRUE,FALSE}, {TRAFFIC_SELECTOR_INITIATOR,1,1,TRUE,FALSE}, diff --git a/Source/charon/encoding/payloads/encryption_payload.c b/Source/charon/encoding/payloads/encryption_payload.c index 7ea290404..9f16a66d0 100644 --- a/Source/charon/encoding/payloads/encryption_payload.c +++ b/Source/charon/encoding/payloads/encryption_payload.c @@ -353,6 +353,7 @@ static status_t decrypt(private_encryption_payload_t *this) /* get IV */ iv.len = this->crypter->get_block_size(this->crypter); + iv.ptr = this->encrypted.ptr; /* point concatenated to data + padding + padding_length*/ @@ -394,7 +395,6 @@ static status_t decrypt(private_encryption_payload_t *this) /* free padding */ this->decrypted.ptr = allocator_realloc(this->decrypted.ptr, this->decrypted.len); - this->logger->log(this->logger, CONTROL|MOST, "decryption successful, trying to parse content"); return (this->parse(this)); } diff --git a/Source/charon/network/host.c b/Source/charon/network/host.c index 95a4537c6..8208586ec 100644 --- a/Source/charon/network/host.c +++ b/Source/charon/network/host.c @@ -42,6 +42,11 @@ struct private_host_t { int family; /** + * string representation of host + */ + char *string; + + /** * low-lewel structure, wich stores the address */ sockaddr_t address; @@ -78,16 +83,15 @@ static bool is_default_route (private_host_t *this) { case AF_INET: { - int i; - for (i = 0; i < 4;i++) + static u_int8_t default_route[4] = {0x00,0x00,0x00,0x00}; + struct sockaddr_in *sin = (struct sockaddr_in*)&(this->address); + printf("host address: %ul\n", sin->sin_addr.s_addr); + + if (memcmp(default_route,&(sin->sin_addr.s_addr),4) == 0) { - struct sockaddr_in *sin = (struct sockaddr_in*)&(this->address); - if (*((&sin->sin_addr.s_addr) + i) != 0) - { - return FALSE; - } + return TRUE; } - return TRUE; + return FALSE; } default: { @@ -106,8 +110,13 @@ static char *get_address(private_host_t *this) { case AF_INET: { + char *string; struct sockaddr_in *sin = (struct sockaddr_in*)&(this->address); - return inet_ntoa(sin->sin_addr); + allocator_free(this->string); + string = inet_ntoa(sin->sin_addr); + this->string = allocator_alloc(strlen(string)+1); + strcpy(this->string, string); + return this->string; } default: { @@ -161,13 +170,6 @@ static u_int16_t get_port(private_host_t *this) } } -/** - * Implements host_t.destroy - */ -static void destroy(private_host_t *this) -{ - allocator_free(this); -} /** * Implements host_t.clone. @@ -175,8 +177,14 @@ static void destroy(private_host_t *this) static private_host_t *clone(private_host_t *this) { private_host_t *new = allocator_alloc_thing(private_host_t); + memcpy(new, this, sizeof(private_host_t)); + if (this->string) + { + new->string = allocator_alloc(strlen(this->string)+1); + strcpy(new->string, this->string); + } return new; } @@ -203,6 +211,14 @@ static bool ip_is_equal(private_host_t *this, private_host_t *other) return FALSE; } +/** + * Implements host_t.destroy + */ +static void destroy(private_host_t *this) +{ + allocator_free(this->string); + allocator_free(this); +} /** * Creates an empty host_t object @@ -221,6 +237,8 @@ static private_host_t *host_create_empty() this->public.is_default_route = (bool (*) (host_t *)) is_default_route; this->public.destroy = (void (*) (host_t*))destroy; + this->string = NULL; + return this; } diff --git a/Source/charon/sa/states/ike_auth_requested.c b/Source/charon/sa/states/ike_auth_requested.c index 723550d8d..e43242180 100644 --- a/Source/charon/sa/states/ike_auth_requested.c +++ b/Source/charon/sa/states/ike_auth_requested.c @@ -259,24 +259,21 @@ static status_t process_idr_payload(private_ike_auth_requested_t *this, id_paylo { identification_t *other_id, *configured_other_id; - /* idr is optional */ - if (idr_payload) + other_id = idr_payload->get_identification(idr_payload); + + configured_other_id = this->sa_config->get_other_id(this->sa_config); + if (configured_other_id) { - other_id = idr_payload->get_identification(idr_payload); - - configured_other_id = this->sa_config->get_other_id(this->sa_config); - if (configured_other_id) + if (!other_id->equals(other_id, configured_other_id)) { - if (!other_id->equals(other_id, configured_other_id)) - { - this->logger->log(this->logger, ERROR, "IKE_AUTH reply didn't contain requested id"); - return FAILED; - } + other_id->destroy(other_id); + this->logger->log(this->logger, ERROR, "IKE_AUTH reply didn't contain requested id"); + return FAILED; } - - other_id->destroy(other_id); - /* TODO do we have to store other_id somewhere ? */ } + + other_id->destroy(other_id); + /* TODO do we have to store other_id somewhere ? */ return SUCCESS; } diff --git a/Source/charon/utils/logger_manager.c b/Source/charon/utils/logger_manager.c index 8c19e9dae..631f8f112 100644 --- a/Source/charon/utils/logger_manager.c +++ b/Source/charon/utils/logger_manager.c @@ -151,6 +151,7 @@ static logger_t *create_logger(private_logger_manager_t *this, logger_context_t case MESSAGE: case ENCRYPTION_PAYLOAD: case WORKER: + case CONFIGURATION_MANAGER: logger_level |= ALL; case PARSER: case GENERATOR: @@ -160,13 +161,11 @@ static logger_t *create_logger(private_logger_manager_t *this, logger_context_t case RECEIVER: case SOCKET: case DAEMON: - case CONFIGURATION_MANAGER: log_thread_ids = FALSE; logger_level |= ERROR|CONTROL; break; } - /* reduce to global definiton of loglevel */ logger_level &= this->public.get_logger_level(&(this->public),context); |