User-Name attribute being evaluated as regular expression???

bmccorkle network.administrator at gahanna.gov
Wed Apr 30 17:21:09 CEST 2008



Alan DeKok-4 wrote:
> 
> bmccorkle wrote:
>>   I have an issue and haven't been able to find any online help.  I
>> thought
>> I had freeradius working correctly but discovered yesterday that if a
>> user's
>> name starts with 'r' then they can't login.  I setup an unlang if
>> statement
>> (in the default sites available) to handle whether the login is a
>> computer,
>> user, or pda request (I'm assuming this is the best way to do it).  The
>> statement copies the User-Name attribute over to a Stripped-User-Name
>> attribute and manipulates the Stripped-User-Name as necessary. Normally
>> when
>> a user logs in it's in the format:   DOMAIN\first.lastname.  I created
>> some
>> attr_rewrite modules to strip the domain and period out of the username.
> 
>   You don't need to do that.  You can just use regular expressions.
> 
>> It was working fine, but I discovered if Randy Hall logs in (User-Name =
>> DOMAIN\randy.hall); Stripped-User-Name becomes:  
>> DOMAIN andy halll   (domain is not removed, the r in his name disappears
>> and
>> the last letter seems to be doubled (I tried this with another user and
>> it
>> removed the r from his name and doubled the 's' at the end of his name as
>> well).
> 
>   I think there's an issue with the attr_rewrite module.  Grab the
> latest one in CVS.... it may be better.
> 
>> So what is going on exactly?  I'm not an expert but it seems like the
>> attribute is being evaluated as a regular expression???
> 
>   No... I think your configuration is too complex.
> 
>>         attr_rewrite copy.user-name {
>>         attribute = Stripped-User-Name
>>         new_attribute = yes
>>         searchfor = ""
>>         searchin = packet
>>         replacewith = "%{User-Name}"
>>         }
> 
>   You don't need this.  The regular expression code && unlang can do all
> of this.
> 
>   It's not clear to me what you're trying to do, because your
> configuration is so complex.  Just write a bunch of regular expressions
> to match what you want, and use %{1}, etc.
> 
>   Try writing a few *simple* examples of what you want to do.  Odds are
> you can write a simple regex expression that does everything.  You don't
> need attr_rewrite.
> 
> 	e.g. for : DOMAIN\randy.hall
> 
> 	if (User-Name =~ /^DOMAIN\\(.*)/) {
> 		update request {
> 			Stripped-User-Name := "%{1}"
> 		}
> 	}
>   I don't see why it has to be more complex than that.
> 
> 
>   Alan DeKok.
> -
> List info/subscribe/unsubscribe? See
> http://www.freeradius.org/list/users.html
> 
> 

You were right about using the regular expressions instead of the
attr_rewrite statements.  It took me a day to figure out regular expressions
(hadn't touched them in a couple of years) but it greatly simplified things
and it's running smoother.  We had started with version 1 of Freeradius for
our testing and then I built another box with version 2.  When I configured
the new box I had simply moved over the attr_rewrite statements because the
old box was working with them (or seemed to at least).  One last question
though.  I'm using 'if' statements to evaluate the User-Name variable for
the different various formats the username might be in.  Is it possible with
unlang to evaluate the regular expression with a switch statement?  For
example, my 'if' statement...


        #USER LOGIN (DOMAIN\\FIRST.LAST)
        if (User-Name =~ /DOMAIN[\\]{1,2}(.*)/i) {
                update request {
                        Stripped-User-Name := "%{1}"
                }
        }
        #HOST LOGIN (HOST/COMPUTERNAME.DOMAIN.EDU)
        elsif (User-Name =~ /host\/([a-z0-9\-]*)[\.]{1}DOMAIN[\.]{1}EDU/i) {
                update request {
                        Stripped-User-Name := "%{1}$"
                }
        }
        #PDA LOGIN (USERNAME at DOMAIN)
        elsif (User-Name =~ /([A-Z0-9\-\.]*)@/i) {
                update request {
                        Stripped-User-Name := "%{1}"
                }
        }
        #GIVE ONE LAST TRY
        elsif (User-Name =~ /(.*)/i) {
                update request {
                        Stripped-User-Name := "%{1}"
                }
        }

Can this be rewritten in a Switch statement like so..

Switch "User-Name" {

     Case (/REGULAR EXPRESSION/i) {
     }

     Case (/REGULAR EXPRESSION2/i {
     }
}

I didn't see anything in the unlang manual (or wasn't understanding it
correctly) so I didn't try it.  But if it's not, I think it would be nice to
have.

-- 
View this message in context: http://www.nabble.com/User-Name-attribute-being-evaluated-as-regular-expression----tp16850734p16985248.html
Sent from the FreeRadius - User mailing list archive at Nabble.com.




More information about the Freeradius-Users mailing list