I find the easist way to do it is to use a custom "users" file to allow / prevent access based on exact matches of LDAP attributes.<br><br>then you can say if STAFF = Accept, if STAFF OFFSITE Accept, otherwise reject.<br>
<br>This is how we do it here:<br><br><a href="http://lists.freeradius.org/pipermail/freeradius-users/2010-September/msg00393.html">http://lists.freeradius.org/pipermail/freeradius-users/2010-September/msg00393.html</a><br>
<br><br><div class="gmail_quote">On Thu, Jun 16, 2011 at 9:23 AM, Jason Antman <span dir="ltr"><<a href="mailto:jantman@oit.rutgers.edu">jantman@oit.rutgers.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Greetings,<br>
<br>
I have to control authorization based on a (possibly) multi-valued LDAP reply attribute called employeeType. I have all of the LDAP code working fine, but seem to have hit a snag. Each user has 1 to ??? (usually a max of 5 or so) employeeType values. The pertinent ones include "STAFF", "STAFF TEMPORARY", "STAFF OFFSITE", and "STAFF RETIRED". I need to allow all "STAFF" types access, unless their one and only "STAFF*" is "STAFF RETIRED" (yes, don't get me started, but it's considered "perfectly valid" for someone to have employeeTypes of staff, staff retired, and staff offsite).<br>

<br>
So essentially, I need to allow in anyone with "STAFF", not followed by " RETIRED". At the moment, I'm using %{reply:employeeType[*]} which works fine for reged matching all of the other funky attributes that should grant access. But I can't seem to figure out how to say, either with unlang comparisons or regexes (I'm on CentOS/RedHat, so I assume it would be POSIX, either BRE or ERE) or both, how to exclude that one condition.<br>

<br>
Examples:<br>
STAFF, STAFF RETIRED, SALARIED -> Accept<br>
STAFF -> Accept<br>
STAFF RETIRED -> Reject<br>
STAFF, STAFF TEMPORARY -> Accept<br>
FOO, STAFF RETIRED, BAR -> Reject<br>
FOO, STAFF, BAR -> Accept<br>
<br>
Any hints or guidance would be greatly appreciated. I've searched through all of the regex material I could find, and asked on #regex IRC and as many regex gurus as I could find, and the best answer I got was to combine regexes with some sort of unlang construct... but I can't seem to think of anything which will match my logical need... "the string STAFF not followed immediately by the string RETIRED".<br>

<br>
Thanks,<br><font color="#888888">
Jason Antman<br>
</font><br>
PS - I know the Right answer here is "fix your LDAP schema". Unfortunately, I don't have any control over that. Or even the power to make suggestions. All I have is a directive of who gets in and who doesn't.<br>

-<br>
List info/subscribe/unsubscribe? See <a href="http://www.freeradius.org/list/users.html" target="_blank">http://www.freeradius.org/list/users.html</a><br>
</blockquote></div><br>