Re: problems getting rewrite hook right
Charles Sprickman <[email protected]> Wed, 8 Nov 2006 16:15:41 -0500 (EST)
| Newsgroups | gmane.comp.gnu.radius.general |
|---|---|
| Message-ID | <[email protected]> |
On Thu, 2 Nov 2006, Sergey Poznyakoff wrote: > Charles Sprickman <[email protected]> wrote: > >> This gets me what I want in the domain part of the query, but the >> username still comes up as "foo%foo.com". > > I didn't know it should:) Than, the domain_split can be rewritten to > modify User-Name, as a side effect, like this: This is perfect! I tried something similar myself, but I screwed something up. Can you help me understand how this works? > string > domain_split(string name) so we're working on a string, the function we're creating is "domain_split" and the variable holding the username that's passed to the rewrite rule is "name", right? > { > integer a; What's "a"? > string localpart; > string domainpart; Again, just declaring two variables that will be used later, right? > domainpart = "bway.net"; /* provide the default value */ > if (name =~ "\(.*\)@\(.*\)") { > localpart = \1; > domainpart = \2; Look for an "@" in the "name" variable. If it exists, the part to the left of "@" goes in the variable "localpart" and the part on the right goes into the "domainpart" variable. In the bigger picture, I assume whenever we do a match in this rewrite language that each match is available as "\1", "\2", "\3", etc., right? > } else { > localpart = name; > } No "@" in the "name" string, so "domainpart" remains bway.net as it was assigned above and the localpart takes the value of "name" as passed to this function. > if (localpart =~ "\(.*\)%\(.*\)") { > localpart = \1; > domainpart = \2; > } Now we're looking to see if there's a "%" in "localpart" after the above processing. If there is, split at the "%" and assign "localpart" and "domainpart" to the results of the split. > %[User-Name] = localpart; I get this, but can you verify that in a rewrite rule I can basically alter any dictionary value I want to using this method? And all the possible values to alter are found in the dictionary file, correct? Even ones I've added to the stock dictionary? > return domainpart; > } Very basic question that indicates I dont' understand the language very well... Why do I need the "return" statement? Why don't I need it for "%[User-Name]"? This is some really powerful stuff. I haven't seen a radius server this flexible since I used Radiator (http://www.digitalpoint.com/products/radiator/). > The test run gives: Again, the test shell is really cool. Thanks so much! Charles > ** TEST SHELL ** > (radiusd) source /home/gray/1.rw > 0 > (radiusd) r domain_split("username%domain.com") > domain.com > (radiusd) rp > User-Name = (STRING) username > (radiusd) r domain_split("[email protected]") > domain.com > (radiusd) rp > User-Name = (STRING) user > (radiusd) r domain_split("username%[email protected]") > domain.com > (radiusd) rp > User-Name = (STRING) username > (radiusd) r domain_split("username") > bway.net > (radiusd) rp > User-Name = (STRING) username > > > Regards, > Sergey > >