users file rejex
Phil Mayers
p.mayers at imperial.ac.uk
Tue Apr 17 14:41:15 CEST 2012
On 17/04/12 12:48, DaveA wrote:
> Hello,
>
> I would like to default reject users who have a "/" or "\" in their
> username. Often users will misconfigure their machines and Windows will send
> the host\username, which will never be a valid login here.
Do you mean thing like:
MY-PC\otherwisevalidusername
...or things like:
host/name.domain.com
i.e. the first 4 characters are actually "h", "o", "s", "t"?
>
> Where is the best place to do this? I have tried to put this in the users
> file, but I may not have the correct regex:
>
> DEFAULT User-Name =~ /[0-9a-zA-Z\/\\]+/, Auth-Type := Reject
Do you really want to reject any user whose User-Name contains a letter
or number? Because that's what this regexp says.
>
> My match cases are:
>
> host\username
> host\\username
> host/username
> host //username
>
> I do not want to sanitize these for the users.
Why? It makes your life hard, and your users lives hard, to reject names
with a clearly valid intent.
Still, your decision, feel free to use time as you see fit ;o)
Anyway, your regex is indeed wrong. In the "users" file, you need:
DEFAULT User-Name =~ "THEREGEX"
THEREGEX must have double-escaped \ - first, escape the \ for the regex
parser, next, escape the \ for the "users" file parser.
i.e. if you want to match "a\b" you need a regexp:
a\\b
...therefore you need to write:
DEFAULT User-Name =~ "a\\\\b"
"/" is not a special character in "users"-file regexps, so can just be
left as-is.
So:
DEFAULT User-Name =~ "^.+\\\\\\\\", Auth-Type := Reject
DEFAULT User-Name =~ "^.+\\\\", Auth-Type := Reject
DEFAULT User-Name =~ "^.+//", Auth-Type := Reject
DEFAULT User-Name =~ "^.+/", Auth-Type := Reject
Note for the archives - if you want to do this in "unlang", the syntax
is different. You do NOT need to double-escape the "\", but DO need to
escape the "/". Figuring this out is left as an exercise for the reader.
One final note - it would be REALLY handy if FR regexp engine let you
choose an alternate delimiter like some programs e.g.
if (User-Name =~ #theregex#) {
...
}
...to avoid leaning toothpick syndrome. Maybe I will work up a patch.
More information about the Freeradius-Users
mailing list