]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Use temporary value buffer in fr_pton4/6
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 20 Jul 2015 15:39:05 +0000 (11:39 -0400)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 20 Jul 2015 15:39:24 +0000 (11:39 -0400)
src/lib/misc.c

index 69b3807012f86aff0d52c0970c474f1ad1c9a54d..9ee3b8013585f61d7635314508d0ecaa6a7dfa7d 100644 (file)
@@ -226,6 +226,7 @@ int fr_pton4(fr_ipaddr_t *out, char const *value, ssize_t inlen, bool resolve, b
                }
                memcpy(buffer, value, inlen);
                buffer[inlen] = '\0';
+               value = buffer;
        }
 
        p = strchr(value, '/');
@@ -329,6 +330,7 @@ int fr_pton6(fr_ipaddr_t *out, char const *value, ssize_t inlen, bool resolve, b
                }
                memcpy(buffer, value, inlen);
                buffer[inlen] = '\0';
+               value = buffer;
        }
 
        p = strchr(value, '/');
@@ -429,7 +431,10 @@ int fr_pton(fr_ipaddr_t *out, char const *value, ssize_t inlen, bool resolve)
                 *      Use A record in preference to AAAA record.
                 */
                if ((value[i] < '0') || (value[i] > '9')) {
-                       if (!resolve) return -1;
+                       if (!resolve) {
+                               fr_strerror_printf("Not IPv4/6 address, and asked not to resolve");
+                               return -1;
+                       }
                        return fr_pton4(out, value, inlen, true, true);
                }
                break;