Victor Valencia wrote:

I was not able to find any ideas from the archive although one other user had experienced
this issue but did not get a response. Any suggestions on what I should look at??


victor and i have been having a sidebar discussion since i was the user that didn't get a response [1] about this same issue. at the time, i resorted to the fairly blunt force method of just compiling new releases with the valuepairs.c code from the 0.71 release. this afternoon i did a little more fiddling and found that if i only replace the 0.9x case PW_TYPE_OCTETS code [2] with the 0.71 case PW_TYPE_OCTETS code [3] from valuepairs.c and recompile, then the users file will parse without the errors.

i know this isn't a proper diff and i don't know if anyone wants to put it into the CVS, but it's what i had to do to get things working.

[1] http://lists.cistron.nl/pipermail/freeradius-users/2003-September/024087.html


[2] 0.91 "non-working" code:


             case PW_TYPE_OCTETS:
                     if (strncasecmp(value, "0x", 2) == 0) {
                             u_char *us;
                             cp = value + 2;
                             us = vp->strvalue;
                             vp->length = 0;

                             while (*cp && vp->length < MAX_STRING_LEN) {
                                     unsigned int tmp;

if (sscanf(cp, "%02x", &tmp) != 1) {
librad_log("Non-hex characters at %c%c", cp[0], cp[1]);
return NULL;
}


                                     cp += 2;
                                     *(us++) = tmp;
                                     vp->length++;
                             }
                             *us = '\0';
                     }
                     break;

[3] 0.71 working code:

             case PW_TYPE_OCTETS:
                     vp->length = 0;
                     if (strncasecmp(value, "0x", 2) == 0) {
                             u_char *us;
                             cp = value + 2;
                             us = vp->strvalue;
                             while (*cp && vp->length < MAX_STRING_LEN) {
                                     unsigned int tmp;

                                     if (sscanf(cp, "%02x", &tmp) != 1)
                                             break;

                                     cp += 2;
                                     *(us++) = tmp;
                                     vp->length++;
                             }
                             *us = '\0';
                     }
                     break;



- List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html

Reply via email to