Must use 'Attr-26 = ...' instead of 'Vendor-Specific = ...' even when setting explicitly Attr-26 (or vendor data type)

Francesco Di Nucci francesco.dinucci at na.infn.it
Wed Apr 29 12:18:04 UTC 2026


Thanks

> Not sure what you are trying to save by not defining a dictionary.
Tbh I'm just approaching to RADIUS, so not trying to save anything, 
apparently didn't know the proper way for this use case :D

> and I guess that was what you wanted?
More or less, the server starts and answers include the custom attribute:

(0) # Executing section post-auth from file /etc/raddb/sites-enabled/default
(0)   post-auth {
(0)     update {
(0)       reply::Foo := 0x483d342c20493d34
(0)     } # update = noop
(0)     if (session-state:User-Name && reply:User-Name && 
request:User-Name && (reply:User-Name == request:User-Name)) {
(0)     if (session-state:User-Name && reply:User-Name && 
request:User-Name && (reply:User-Name == request:User-Name))  -> FALSE
(0)     update {
(0)       No attributes updated for RHS &session-state:
(0)     } # update = noop
(0)   } # post-auth = noop
(0) Sent Access-Accept Id 0 from XXX:1812 to XXX:59903 length 53
(0)   Foo := 0x483d342c20493d34

But the BMC on the other side does not consider it as valid, so it 
authenticates the user but without privileges (for reference 
https://www.supermicro.com/en/support/faqs/faq.php?faq=22374).

If I manually define the user in the users file:

testing Cleartext-Password := "password"
             Attr-26 = 0x483D342C20493D34

the answer is different

(0) # Executing section post-auth from file /etc/raddb/sites-enabled/default
(0)   post-auth {
(0)     if (session-state:User-Name && reply:User-Name && 
request:User-Name && (reply:User-Name == request:User-Name)) {
(0)     if (session-state:User-Name && reply:User-Name && 
request:User-Name && (reply:User-Name == request:User-Name))  -> FALSE
(0)     update {
(0)       No attributes updated for RHS &session-state:
(0)     } # update = noop
(0)     [exec] = noop
(0)     policy remove_reply_message_if_eap {
(0)       if (&reply:EAP-Message && &reply:Reply-Message) {
(0)       if (&reply:EAP-Message && &reply:Reply-Message)  -> FALSE
(0)       else {
(0)         [noop] = noop
(0)       } # else = noop
(0)     } # policy remove_reply_message_if_eap = noop
(0)     if (EAP-Key-Name && &reply:EAP-Session-Id) {
(0)     if (EAP-Key-Name && &reply:EAP-Session-Id) -> FALSE
(0)   } # post-auth = noop
(0) Sent Access-Accept Id 0 from XXX:1812 to XXX:58921 length 48
(0)   Attr-26 = 0x483d342c20493d34

And the BMC authenticates the user with the correct privileges

So I guess it's not exactly the same

Francesco

-- 
Francesco Di Nucci
System Administrator
Compute & Networking Service, INFN Naples

Email: francesco.dinucci at na.infn.it

On 29/04/26 10:02, Bjørn Mork wrote:
> Bjørn Mork via Freeradius-Users <freeradius-users at lists.freeradius.org>
> writes:
>
>> Francesco Di Nucci <francesco.dinucci at na.infn.it> writes:
>>> Additional info - I also tried the same configuration on a more recent
>>> FreeRADIUS version (3.2.7 on Debian 13 instead of 3.0.27 on EL9), the
>>> error is the same
>>>
>>> Francesco Di Nucci
>>>
>>> On 28/04/26 18:18, Alan DeKok via Freeradius-Users wrote:
>>>> On Apr 24, 2026, at 8:17 AM, Francesco Di Nucci <francesco.dinucci at na.infn.it> wrote:
>>>>> tried and reply:Attr-26 := 0x483D342C20493D34 /without quotes/ still returns Cannot parse RHS hex as the data type of the attribute Vendor-Specific.
>>>>>
>>>>> Same for reply:Attr-26 := 0x1A1200002A7C483D342C20493D34 without quotes... Cannot parse RHS hex as the data type of the attribute Vendor-Specific
>>>>>
>> Not sure what you are trying to save by not defining a dictionary.
>> Looks like FR insists on matching Attr-26 against the known dictionaries
>> anyway.
>>
>> I did a quick test with the Debian 13 package, adding to
>> /etc/freeradius/3.0/dictionary (you will of course add this to a
>> spearate file when done testing):
>>
>> VENDOR  SUPERMICRO      10876   format=1,0
>>   
>> BEGIN-VENDOR    SUPERMICRO
>> ATTRIBUTE       Foo     72      octets
>> END-VENDOR      SUPERMICRO
>>
>>
>> Only then would FR accept something like this:
>>
>> Attr-26 := 0x00002A7C483D342C20493D34
>>
>> But it will only accept 0x48 (72) as the first byte of the value. Seems
>> you have to define every possible first byte this way. There is no
>> "format=0".  But worst case, just create 256 dummy VSAs...
> Forget it.  FR accepts the config, but it doesn't actually work.  Trying
> to return that attribute results in
>
> (1) ERROR: Failed sending reply: ERROR: Unknown attribute type 21
>
>
> And type 21 is PW_TYPE_VSA if I'm not mistaken.
>
> Rewriting to
>
> Attr-26.10876.72 := 0x3D342C20493D34
>
> makes it "work".  But that's ugly.  Anyway, with that I see these bytes
> returned from FR:
>
>   1a 0e 00 00 2a 7c 48 3d 34 2c 20 49 3d 34
>
> and I guess that was what you wanted?
>
>
> Bjørn
>



More information about the Freeradius-Users mailing list