How to extract A/V pairs from an Access-Request packet

Joe Maimon jmaimon at ttec.com
Thu Jan 5 15:32:26 CET 2006



Maria Ripolles wrote:

> 
> Hy all,
>  
> I am developing a custom module 

Perhaps what you are doing can be done via a shell script called with 
the exec module?

> and I am a bit lost with the code. I am 
> not a C programmer so sorry if my question is very stupid.

Well its not going to be peaches and cream for you then.

>  
> I want to extract the differents A/V pairs contained in the 
> Access-Request packets and check if any of them is the attribute 
> "Connect-Info". In that case I would like to pass the value of the 
> "Connect-Info" attribute to a function called auxiliar.
> Here is my code:
>  
> static int auxiliar (char * value) { ..... }
>  
> static int mymodule_authorize (void *instance, REQUEST *request) {
>      ....
>  
>      VALUE_PAIR *request_pairs;
>      request_pairs=request->packet->vps;
>  
>      VALUE_PAIR *aux = NULL;
>  
>      char * Attribute_Name = NULL;
>      char *Attribute_Value = NULL;
>      int type = 0;
>  
>      for ( aux=request_pairs; aux; aux=aux->next)
>      {
>           Attribute_Name = aux->name;
>           Attribute_Value = aux->strvalue;
>  
>           if (aux->attribute == PW_CONNECT_INFO)
>           {
>                type=auxiliar(aux->strvalue); /* is this correct? I mean, 
> is aux->strvalue a char * type? */
>           }
>  
>           .....
>      }
>  
>  
>  

strvalue is a char * in older versions. In CVS head its a union and you 
can access it (due to a compatibility macro) by vp->vp_strvalue the last 
time I looked.

you can use the pairfind() function to find the attribute you are 
looking for.

Consider that Connect-info may appear zero or more times in a request.

> Am I on the right track?

Eyeball review suggests that your code might work.

>  
> Thank you a lot for your help and best regards
> 
> 
> LLama Gratis a cualquier PC del Mundo.
> Llamadas a fijos y moviles desde 1 centimo por minuto.
> http://es.voice.yahoo.com 
> <http://us.rd.yahoo.com/mail/es/tagline/messenger/*http://es.voice.yahoo.com/> 
> 
> 
> 
> ------------------------------------------------------------------------
> 
> - 
> List info/subscribe/unsubscribe? See http://www.freeradius.org/list/devel.html



More information about the Freeradius-Devel mailing list