pki: Add a helper function parse traffic selectors from CIDR subnets or ranges
authorMartin Willi <martin@strongswan.org>
Tue, 21 Feb 2017 14:06:15 +0000 (15:06 +0100)
committerMartin Willi <martin@strongswan.org>
Mon, 27 Feb 2017 08:36:48 +0000 (09:36 +0100)
src/pki/pki.c
src/pki/pki.h

index 4727049..00fffef 100644 (file)
@@ -258,6 +258,28 @@ hash_algorithm_t get_default_digest(private_key_t *private)
        return alg == HASH_UNKNOWN ? HASH_SHA256 : alg;
 }
 
+/*
+ * Described in header
+ */
+traffic_selector_t* parse_ts(char *str)
+{
+       ts_type_t type = TS_IPV4_ADDR_RANGE;
+       char *to, from[64];
+
+       if (strchr(str, ':'))
+       {
+               type = TS_IPV6_ADDR_RANGE;
+       }
+       to = strchr(str, '-');
+       if (to)
+       {
+               snprintf(from, sizeof(from), "%.*s", to - str, str);
+               to++;
+               return traffic_selector_create_from_string(0, type, from, 0, to, 65535);
+       }
+       return traffic_selector_create_from_cidr(str, 0, 0, 65535);
+}
+
 /**
  * Callback credential set pki uses
  */
index 017e61d..54be59f 100644 (file)
@@ -26,6 +26,7 @@
 #include "command.h"
 
 #include <library.h>
+#include <selectors/traffic_selector.h>
 #include <credentials/keys/private_key.h>
 
 /**
@@ -63,4 +64,12 @@ void set_file_mode(FILE *stream, cred_encoding_type_t enc);
  */
 hash_algorithm_t get_default_digest(private_key_t *private);
 
+/**
+ * Create a traffic selector from a CIDR or range string.
+ *
+ * @param str          input string, either a.b.c.d/e or a.b.c.d-e.f.g.h
+ * @return                     traffic selector, NULL on error
+ */
+traffic_selector_t* parse_ts(char *str);
+
 #endif /** PKI_H_ @}*/