Re: SQL help from someone who groks c, please?
On Mon, 5 Feb 2007, Phil Mayers wrote:
Dan Mahoney, System Admin wrote:
That said, I figured out two possible ways to handle my previous question
regarding advanced SQL auth (including multiple occurances of the same
Minor point of terminology - SQL doesn't authenticate. It acts as a
store for config and reply items.
Of course. I myself am in the habit of stating things I already know to
be true, just for the advantage of some poor soul trying to get something
from mailing list archives.
Not in the current server.
Neither of your examples will work, because cCurrently* in the release
version of FreeRadius, rlm_sql works as follows:
* select per-user check items from radcheck
* select all group check items for that user from radgroupcheck
* merge them
* compare them - if match:
* select per-user reply items from radreply
* select all group reply items for that user from radgroupreply
* merge them
* add them to the reply
Because of the merging of the check/reply items, with the currently
release version of FreeRadius it will be difficult to achieve what you
want. There are probably ways to use clever tricks with the schema, but
the algorithm that iterates over the SQL results is coded into the C
portion of the module, and is not really flexible enough.
I assume you mean the core SQL module, and nothing driver specific, yes?
My suggestion is that you use a custom schema and queries for your
database - probably a stored procedure. Pass the NAS-IP-Address into
these queries, and return different values based on the nas. Effectively
you move the code that walks over the request and chooses the right
values into the SQL server.
This I'm already doing. I just wanted to be sure I wasn't going about it
wrong.
However, in the CVS version of FreeRadius, the SQL code works much more
like you'd expect:
Also, for the edification of anyone who might stumble on this, the CVS
code relevant to which version? I.e. would this be a 2.x branch thing?
Note that I'm not asking the luserish "when will it be out I need it
now!!!1" question, as I've already got workarounds in place to do what I
need, but I've come across threads dating back five years in some software
and was never sure which version was relevant.
* select per-user check items from radcheck
* compare them
* if match, add per-user reply items from radreply
* if Fall-Through:
* for each group
* select per-group check items
* compare them
* if match, add the per-group reply items
* stop unless Fall-Through
With that schema, it would be relatively trivial to (ab)use groups as
users.
Or I'd join against my "devices" table and return one entry for jeremy
based on each network device in the grid with a simple left join (the
distinction being that it's multiple answers based on a less-specific
question, as opposed to a single check-item based on a more-specific
query.) Again, my SQL know-how is good, so I can contrib some more
advanced examples if need be. The concept of group ownership is still
good, but with SQL working the way you describe, and fall-through working
right, it's not strictly as necessary as it was: in theory it's possible
with the new code to select ALL rows, and read the whole table just like
an old-style users-file, no (waste of processor and resources aside).
For example, right now I have a few tables that match user-type and device
type, so that for any user type, and any device (say, cisco core routers,
or extreme distribution switches), that lists the appropriate reply-items.
The annoyance and minor difference here is the requirement to specialize
the query -- with the current code, I need to include anything I want to
specialize on (which means if there's five different check-items, I have
to include them (and not all devices will include such check-items).
No groups necessary (I am not using them now, in fact, my queries
encompass that logic).
...with appropriate check/reply items (e.g. check item might be
huntgroup or nas-ip-address). The groups would contain one user - in the
previous example, jeremy.
Okay -- do you know anything about if the semicolon is intentionally
ignored? I tried doing multiple queries in a single statement but got an
error (thank god for UNION).
-Dan
--
--------Dan Mahoney--------
Techie, Sysadmin, WebGeek
Gushi on efnet/undernet IRC
ICQ: 13735144 AIM: LarpGM
Site: http://www.gushi.org
---------------------------
This archive was generated by a fusion of
Pipermail (Mailman edition) and
MHonArc.