This commit has been accessed 6 times via Git panel.
commit 364d89de7aa08d3f5b0da251711f9453c15de721
tree 83beb578829b29a1c9cbee9e711e44faf0384f64
parent 6c33e2c5f5577f554079bf22ec9f057849a409d9
author Engels Antonio <engels@kalasag.org> 1782533175 +0800
committer Engels Antonio <engels@kalasag.org> 1782533175 +0800
Complete CleanAndResolve: sanitize output to legal DNS characters
Function was marked XXX as incomplete. Add a character filter
loop after gethostbyaddr/snprintf that strips anything that isn't
alphanumeric, a hyphen, or a period. Update the comment to match.
diff --git a/kalasag_util.c b/kalasag_util.c
index 42cb133..9d8d841 100644
--- a/kalasag_util.c
+++ b/kalasag_util.c
@@ -74,17 +74,14 @@ char *CleanIpAddr(char *cleanAddr, const char *dirtyAddr)
/************************************************************************/
/* Generic safety function to process an unresolved address and remove */
/* anything that is: */
-/* 1) Not a number. */
-/* 2) Not a period. */
-/* 3) Greater than DNSMAXBUF (255) */
-/* 4) Not a legal DNS character (a-z, A-Z, 0-9, - ) */
-/* */
-/* XXX THIS FUNCTION IS NOT COMPLETE */
+/* 1) Not a legal DNS character (a-z, A-Z, 0-9, -, .) */
+/* 2) Greater than DNSMAXBUF (255) */
/************************************************************************/
int CleanAndResolve(char *resolvedHost, const char *unresolvedHost)
{
struct hostent *hostPtr = NULL;
struct in_addr addr;
+ size_t pos, clean;
#ifdef DEBUG
Log("debug: CleanAndResolv: Resolving address: %s", unresolvedHost);
@@ -106,6 +103,16 @@ int CleanAndResolve(char *resolvedHost, const char *unresolvedHost)
else
snprintf(resolvedHost, DNSMAXBUF, "%s", unresolvedHost);
+ /* Sanitize: only legal DNS chars (alphanumeric, hyphen, period) */
+ for (pos = 0, clean = 0; resolvedHost[pos] != '\0'; pos++) {
+ if (isalnum((unsigned char)resolvedHost[pos])
+ || resolvedHost[pos] == '-'
+ || resolvedHost[pos] == '.') {
+ resolvedHost[clean++] = resolvedHost[pos];
+ }
+ }
+ resolvedHost[clean] = '\0';
+
#ifdef DEBUG
Log("debug: CleanAndResolve: Cleaned Resolved: %s Dirty Unresolved: %s", resolvedHost, unresolvedHost);
#endif
tree 83beb578829b29a1c9cbee9e711e44faf0384f64
parent 6c33e2c5f5577f554079bf22ec9f057849a409d9
author Engels Antonio <engels@kalasag.org> 1782533175 +0800
committer Engels Antonio <engels@kalasag.org> 1782533175 +0800
Complete CleanAndResolve: sanitize output to legal DNS characters
Function was marked XXX as incomplete. Add a character filter
loop after gethostbyaddr/snprintf that strips anything that isn't
alphanumeric, a hyphen, or a period. Update the comment to match.
diff --git a/kalasag_util.c b/kalasag_util.c
index 42cb133..9d8d841 100644
--- a/kalasag_util.c
+++ b/kalasag_util.c
@@ -74,17 +74,14 @@ char *CleanIpAddr(char *cleanAddr, const char *dirtyAddr)
/************************************************************************/
/* Generic safety function to process an unresolved address and remove */
/* anything that is: */
-/* 1) Not a number. */
-/* 2) Not a period. */
-/* 3) Greater than DNSMAXBUF (255) */
-/* 4) Not a legal DNS character (a-z, A-Z, 0-9, - ) */
-/* */
-/* XXX THIS FUNCTION IS NOT COMPLETE */
+/* 1) Not a legal DNS character (a-z, A-Z, 0-9, -, .) */
+/* 2) Greater than DNSMAXBUF (255) */
/************************************************************************/
int CleanAndResolve(char *resolvedHost, const char *unresolvedHost)
{
struct hostent *hostPtr = NULL;
struct in_addr addr;
+ size_t pos, clean;
#ifdef DEBUG
Log("debug: CleanAndResolv: Resolving address: %s", unresolvedHost);
@@ -106,6 +103,16 @@ int CleanAndResolve(char *resolvedHost, const char *unresolvedHost)
else
snprintf(resolvedHost, DNSMAXBUF, "%s", unresolvedHost);
+ /* Sanitize: only legal DNS chars (alphanumeric, hyphen, period) */
+ for (pos = 0, clean = 0; resolvedHost[pos] != '\0'; pos++) {
+ if (isalnum((unsigned char)resolvedHost[pos])
+ || resolvedHost[pos] == '-'
+ || resolvedHost[pos] == '.') {
+ resolvedHost[clean++] = resolvedHost[pos];
+ }
+ }
+ resolvedHost[clean] = '\0';
+
#ifdef DEBUG
Log("debug: CleanAndResolve: Cleaned Resolved: %s Dirty Unresolved: %s", resolvedHost, unresolvedHost);
#endif