group sensitive per user return attributes with rlm_sql
Hugh Messenger
hugh at alaweb.com
Wed Jul 4 21:43:31 CEST 2007
Dumb question time.
Short version:
Can someone pretty please remind me how to do in C what would amount to this
in perl ...
my($checked_groups);
while (...)) {
...
$checked_groups .= $group_list_tmp->groupname . ",";
}
chop $checked_groups;
&pairmake("control:Matched-Groups", $checked_groups, T_OP_EQ);
My apologies for such a basic C question. I've been deeply corrupted by
Perl and PHP, to the point that 'malloc' is a dim and distant memory.
Long version:
> I'm trying to work out (in 2.0.0) how to achieve "matching group specific
> per user reply attributes" using rlm_sql, based on which group(s) matched
> the authentication request.
As per my post just now on the -users list, I found a really simple approach
that works for Huntgroup.
However, I'm still ditzing around with a patch to rlm_sql.c that does what I
originally fantasized about, whereby 'radreply' attributes optionally only
match if associated with a (new) matching CheckGroup column in 'radreply'.
This would do what I'm currently achieving with my Huntgroup hack, but in a
more generic fashion, and without having to maintain a Huntgroup config.
As per my original description:
> As far as I can tell, this would require some surgery to rlm_sql, and an
> additional (optional) CheckGroup column in the 'radreply' table:
>
> UserName,Attribute,op,Value,CheckGroup
> radiustest,Mikrotik-Rate-Limit,=,512k/512k,WIRELESS
> radiustest,Some-Dialup-Attribute,=,foo,DIALUP
> radiustest,Some-Common-Attribute,=,bar,
I've almost got this working, by simply adding a
'rlm_sql_pre_process_groups' function, optionally called before the
radcheck/radreply processing in rlm_sql_authorize. The 'pre_process'
function goes thru the groups, finds the ones with matching checks, and
builds a comma separated string of the matching Groupnames, which gets
assigned to %{control:Matched-Groups}. I then use that in the
authorize_reply_query as:
> AND (CheckGroup = '' OR CheckGroup IN(%{control:Matched-Groups}))
So far so good. And it's all working ... except that I haven't used C in
about 15 years, basically since the day I discovered Perl. And I've totally
forgotten all about C's dynamic memory allocation. And no matter what
combination of char *, char[x], malloc, strcpy and strcat I use, I'm ending
up with garbage at the start of the string I'm trying to build.
> -- hugh
-- hugh
More information about the Freeradius-Devel
mailing list