Encrypt INFORMATIONAL exchange if needed

This commit is contained in:
Clavister OpenSource
2012-03-20 17:31:14 +01:00
parent fbbd439bf9
commit b8383f1f2d
+22 -11
View File
@@ -1459,24 +1459,35 @@ METHOD(message_t, generate, status_t,
hash_payload->set_hash(hash_payload, hash); hash_payload->set_hash(hash_payload, hash);
this->payloads->insert_first(this->payloads, this->payloads->insert_first(this->payloads,
(payload_t*)hash_payload); (payload_t*)hash_payload);
if (this->exchange_type == INFORMATIONAL_V1)
{
DBG3(DBG_ENC, "encrypting IKEv1 INFORMATIONAL exchange message");
this->is_encrypted = TRUE;
encrypted = TRUE;
}
chunk_free(&hash); chunk_free(&hash);
} }
/* if at least one payload requires encryption, encrypt the message. if (!encrypted)
* if we have no key material available, the flag will be reset below */
enumerator = this->payloads->create_enumerator(this->payloads);
while (enumerator->enumerate(enumerator, (void**)&payload))
{ {
payload_rule_t *rule; /* if at least one payload requires encryption, encrypt the message.
rule = get_payload_rule(this, payload->get_type(payload)); * if we have no key material available, the flag will be reset below */
if (rule && rule->encrypted) enumerator = this->payloads->create_enumerator(this->payloads);
while (enumerator->enumerate(enumerator, (void**)&payload))
{ {
this->is_encrypted = TRUE; payload_rule_t *rule;
encrypted = TRUE; rule = get_payload_rule(this, payload->get_type(payload));
break; if (rule && rule->encrypted)
{
this->is_encrypted = TRUE;
encrypted = TRUE;
break;
}
} }
enumerator->destroy(enumerator);
} }
enumerator->destroy(enumerator);
} }
DBG1(DBG_ENC, "generating %s", get_string(this, str, sizeof(str))); DBG1(DBG_ENC, "generating %s", get_string(this, str, sizeof(str)));