added a chunk_printable() function (replaces sanitize_chunk)
authorMartin Willi <martin@strongswan.org>
Mon, 6 Jul 2009 10:37:26 +0000 (12:37 +0200)
committerMartin Willi <martin@strongswan.org>
Mon, 6 Jul 2009 11:15:29 +0000 (13:15 +0200)
src/libstrongswan/chunk.c
src/libstrongswan/chunk.h

index c9c181f..40a93e2 100644 (file)
@@ -19,6 +19,7 @@
 #include <sys/stat.h>
 #include <unistd.h>
 #include <errno.h>
+#include <ctype.h>
 
 #include "chunk.h"
 
@@ -442,6 +443,32 @@ int chunk_compare(chunk_t a, chunk_t b)
 };
 
 /**
+ * Remove non-printable characters from a chunk.
+ */
+bool chunk_printable(chunk_t chunk, chunk_t *sane, char replace)
+{
+       bool printable = TRUE;
+       int i;
+       
+       if (sane)
+       {
+               *sane = chunk_clone(chunk);
+       }
+       for (i = 0; i < chunk.len; i++)
+       {
+               if (!isprint(chunk.ptr[i]))
+               {
+                       if (sane)
+                       {
+                               sane->ptr[i] = replace;
+                       }
+                       printable = FALSE;
+               }
+       }
+       return printable;
+}
+
+/**
  * Described in header.
  * 
  * The implementation is based on Paul Hsieh's SuperFastHash:
index 3d8c360..bc5c357 100644 (file)
@@ -232,6 +232,19 @@ static inline bool chunk_equals(chunk_t a, chunk_t b)
 }
 
 /**
+ * Check if a chunk has printable characters only.
+ *
+ * If sane is given, chunk is cloned into sane and all non printable characters
+ * get replaced by "replace".
+ *
+ * @param chunk                        chunk to check for printability
+ * @param sane                 pointer where sane version is allocated, or NULL
+ * @param replace              character to use for replaceing unprintable characters
+ * @return                             TRUE if all characters in chunk are printable
+ */
+bool chunk_printable(chunk_t chunk, chunk_t *sane, char replace);
+
+/**
  * Computes a 32 bit hash of the given chunk.
  * Note: This hash is only intended for hash tables not for cryptographic purposes.
  */