]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Fix evaluating IP type check items in the users file
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Thu, 6 Nov 2014 20:12:37 +0000 (15:12 -0500)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Thu, 6 Nov 2014 20:12:37 +0000 (15:12 -0500)
src/main/pair.c

index 4a7e7c325846fb8ad3b6c989bd495345df6c6f07..18ba6ad6967e1ecdc8b56d83f9d3be9f54ab37da 100644 (file)
@@ -605,29 +605,38 @@ int paircompare(REQUEST *request, VALUE_PAIR *req_list, VALUE_PAIR *check,
  */
 int radius_xlat_do(REQUEST *request, VALUE_PAIR *vp)
 {
-       ssize_t len;
-
-       char buffer[1024];
+       ssize_t slen;
 
+       char *expanded = NULL;
        if (vp->type != VT_XLAT) return 0;
 
        vp->type = VT_DATA;
 
-       len = radius_xlat(buffer, sizeof(buffer), request, vp->value.xlat, NULL, NULL);
-
+       slen = radius_axlat(&expanded, request, vp->value.xlat, NULL, NULL);
        rad_const_free(vp->value.xlat);
        vp->value.xlat = NULL;
-       if (len < 0) {
+       if (slen < 0) {
                return -1;
        }
 
        /*
         *      Parse the string into a new value.
+        *
+        *      If the VALUE_PAIR is being used in a regular expression
+        *      then we just want to copy the new value in unmolested.
         */
-       if (pairparsevalue(vp, buffer, -1) < 0){
+       if ((vp->op == T_OP_REG_EQ) || (vp->op == T_OP_REG_NE)) {
+               pairstrsteal(vp, expanded);
+               return 0;
+       }
+
+       if (pairparsevalue(vp, expanded, -1) < 0){
+               talloc_free(expanded);
                return -2;
        }
 
+       talloc_free(expanded);
+
        return 0;
 }