aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndreas Steffen <andreas.steffen@strongswan.org>2010-12-26 17:11:02 +0100
committerAndreas Steffen <andreas.steffen@strongswan.org>2010-12-26 17:11:02 +0100
commit27a66f939329033669174923fd625876015c6389 (patch)
treec9a489cc53ce8e5312ec3b4c62a490721df53442 /src
parent690d5aed59afcd582642829230424f80ae2be9aa (diff)
downloadstrongswan-27a66f939329033669174923fd625876015c6389.tar.bz2
strongswan-27a66f939329033669174923fd625876015c6389.tar.xz
implemented wrap around of registered IKEv1 algorithm names
Diffstat (limited to 'src')
-rw-r--r--src/libcharon/plugins/stroke/stroke_list.c4
-rw-r--r--src/libstrongswan/crypto/crypto_factory.h2
-rw-r--r--src/pluto/ike_alg.c86
-rw-r--r--src/pluto/kernel_alg.c50
4 files changed, 63 insertions, 79 deletions
diff --git a/src/libcharon/plugins/stroke/stroke_list.c b/src/libcharon/plugins/stroke/stroke_list.c
index cdc2a7b9f..b4b513073 100644
--- a/src/libcharon/plugins/stroke/stroke_list.c
+++ b/src/libcharon/plugins/stroke/stroke_list.c
@@ -36,8 +36,6 @@
#define CRL_WARNING_INTERVAL 7 /* days */
#define AC_WARNING_INTERVAL 1 /* day */
-#define MAX_ALG_LINE 120 /* characters */
-
typedef struct private_stroke_list_t private_stroke_list_t;
/**
@@ -1069,7 +1067,7 @@ static void print_alg(FILE *out, int *len, enum_name_t *alg_names, int alg_type,
int alg_name_len;
alg_name_len = sprintf(alg_name, " %N[%s]", alg_names, alg_type, plugin_name);
- if (*len + alg_name_len > MAX_ALG_LINE)
+ if (*len + alg_name_len > CRYPTO_MAX_ALG_LINE)
{
fprintf(out, "\n ");
*len = 13;
diff --git a/src/libstrongswan/crypto/crypto_factory.h b/src/libstrongswan/crypto/crypto_factory.h
index b45ffeedb..8e5db6355 100644
--- a/src/libstrongswan/crypto/crypto_factory.h
+++ b/src/libstrongswan/crypto/crypto_factory.h
@@ -33,6 +33,8 @@ typedef struct crypto_factory_t crypto_factory_t;
#include <crypto/diffie_hellman.h>
#include <crypto/transform.h>
+#define CRYPTO_MAX_ALG_LINE 120 /* characters */
+
/**
* Constructor function for crypters
*/
diff --git a/src/pluto/ike_alg.c b/src/pluto/ike_alg.c
index 52976407e..a36b5ce4e 100644
--- a/src/pluto/ike_alg.c
+++ b/src/pluto/ike_alg.c
@@ -305,6 +305,26 @@ fail:
}
/**
+ * Print the name of an algorithm plus the name of the plugin that registered it
+ */
+static void print_alg(char *buf, int *len, enum_names *alg_names, int alg_type,
+ const char *plugin_name)
+{
+ char alg_name[BUF_LEN];
+ int alg_name_len;
+
+ alg_name_len = sprintf(alg_name, " %s[%s]", enum_name(alg_names, alg_type),
+ plugin_name);
+ if (*len + alg_name_len > CRYPTO_MAX_ALG_LINE)
+ {
+ whack_log(RC_COMMENT, "%s", buf);
+ *len = sprintf(buf, " ");
+ }
+ sprintf(buf + *len, "%s", alg_name);
+ *len += alg_name_len;
+}
+
+/**
* Show registered IKE algorithms
*/
void ike_alg_list(void)
@@ -312,80 +332,44 @@ void ike_alg_list(void)
rng_quality_t quality;
enumerator_t *enumerator;
const char *plugin_name;
- char buf[1024];
- char *pos;
- int n, len;
+ char buf[BUF_LEN];
+ int len;
struct ike_alg *a;
whack_log(RC_COMMENT, " ");
whack_log(RC_COMMENT, "List of registered IKEv1 Algorithms:");
whack_log(RC_COMMENT, " ");
- pos = buf;
- *pos = '\0';
- len = BUF_LEN;
+ len = sprintf(buf, " encryption:");
for (a = ike_alg_base[IKE_ALG_ENCRYPT]; a != NULL; a = a->algo_next)
{
- n = snprintf(pos, len, " %s[%s]", enum_name(&oakley_enc_names,
- a->algo_id), a->plugin_name);
- pos += n;
- len -= n;
- if (len <= 0)
- {
- break;
- }
+ print_alg(buf, &len, &oakley_enc_names, a->algo_id, a->plugin_name);
}
- whack_log(RC_COMMENT, " encryption:%s", buf);
+ whack_log(RC_COMMENT, "%s", buf);
- pos = buf;
- *pos = '\0';
- len = BUF_LEN;
+ len = sprintf(buf, " integrity: ");
for (a = ike_alg_base[IKE_ALG_HASH]; a != NULL; a = a->algo_next)
{
- n = snprintf(pos, len, " %s[%s]", enum_name(&oakley_hash_names,
- a->algo_id), a->plugin_name);
- pos += n;
- len -= n;
- if (len <= 0)
- {
- break;
- }
+ print_alg(buf, &len, &oakley_hash_names, a->algo_id, a->plugin_name);
}
- whack_log(RC_COMMENT, " integrity: %s", buf);
+ whack_log(RC_COMMENT, "%s", buf);
- pos = buf;
- *pos = '\0';
- len = BUF_LEN;
+ len = sprintf(buf, " dh-group: ");
for (a = ike_alg_base[IKE_ALG_DH_GROUP]; a != NULL; a = a->algo_next)
{
- n = snprintf(pos, len, " %s[%s]", enum_name(&oakley_group_names,
- a->algo_id), a->plugin_name);
- pos += n;
- len -= n;
- if (len <= 0)
- {
- break;
- }
+ print_alg(buf, &len, &oakley_group_names, a->algo_id, a->plugin_name);
}
- whack_log(RC_COMMENT, " dh-group: %s", buf);
+ whack_log(RC_COMMENT, "%s", buf);
- pos = buf;
- *pos = '\0';
- len = BUF_LEN;
+ len = sprintf(buf, " random-gen:");
enumerator = lib->crypto->create_rng_enumerator(lib->crypto);
while (enumerator->enumerate(enumerator, &quality, &plugin_name))
{
- n = snprintf(pos, len, " %N[%s]", rng_quality_names, quality,
- plugin_name);
- pos += n;
- len -= n;
- if (len <= 0)
- {
- break;
- }
+ len += sprintf(buf + len, " %N[%s]", rng_quality_names, quality,
+ plugin_name);
}
enumerator->destroy(enumerator);
- whack_log(RC_COMMENT, " random-gen:%s", buf);
+ whack_log(RC_COMMENT, "%s", buf);
}
/**
diff --git a/src/pluto/kernel_alg.c b/src/pluto/kernel_alg.c
index 2a195cffc..c82c376f8 100644
--- a/src/pluto/kernel_alg.c
+++ b/src/pluto/kernel_alg.c
@@ -397,55 +397,55 @@ struct sadb_alg* kernel_alg_esp_sadb_alg(u_int alg_id)
return sadb_alg;
}
+/**
+ * Print the name of a kernel algorithm
+ */
+static void print_alg(char *buf, int *len, enum_names *alg_names, int alg_type)
+{
+ char alg_name[BUF_LEN];
+ int alg_name_len;
+
+ alg_name_len = sprintf(alg_name, " %s", enum_name(alg_names, alg_type));
+ if (*len + alg_name_len > CRYPTO_MAX_ALG_LINE)
+ {
+ whack_log(RC_COMMENT, "%s", buf);
+ *len = sprintf(buf, " ");
+ }
+ sprintf(buf + *len, "%s", alg_name);
+ *len += alg_name_len;
+}
+
void kernel_alg_list(void)
{
char buf[BUF_LEN];
- char *pos;
- int n, len;
+ int len;
u_int sadb_id;
whack_log(RC_COMMENT, " ");
whack_log(RC_COMMENT, "List of registered ESP Algorithms:");
whack_log(RC_COMMENT, " ");
- pos = buf;
- *pos = '\0';
- len = BUF_LEN;
+ len = sprintf(buf, " encryption:");
for (sadb_id = 1; sadb_id <= SADB_EALG_MAX; sadb_id++)
{
if (ESP_EALG_PRESENT(sadb_id))
{
- n = snprintf(pos, len, " %s",
- enum_name(&esp_transform_names, sadb_id));
- pos += n;
- len -= n;
- if (len <= 0)
- {
- break;
- }
+ print_alg(buf, &len, &esp_transform_names, sadb_id);
}
}
- whack_log(RC_COMMENT, " encryption:%s", buf);
+ whack_log(RC_COMMENT, "%s", buf);
- pos = buf;
- *pos = '\0';
- len = BUF_LEN;
+ len = sprintf(buf, " integrity: ");
for (sadb_id = 1; sadb_id <= SADB_AALG_MAX; sadb_id++)
{
if (ESP_AALG_PRESENT(sadb_id))
{
u_int aaid = alg_info_esp_sadb2aa(sadb_id);
- n = snprintf(pos, len, " %s", enum_name(&auth_alg_names, aaid));
- pos += n;
- len -= n;
- if (len <= 0)
- {
- break;
- }
+ print_alg(buf, &len, &auth_alg_names, aaid);
}
}
- whack_log(RC_COMMENT, " integrity: %s", buf);
+ whack_log(RC_COMMENT, "%s", buf);
}
void kernel_alg_show_connection(connection_t *c, const char *instance)