maybe this may help spark some ideas:
- check normal auth.
- if pass, done and accept.
- if fail, continue to a second auth that checks only a password.
- if fail, done and reject.
- but if password only passes, send to another handler which does something.


<Handler ...>
         # auth policy set to continue only if the auth fails.
         AuthByPolicy    ContinueWhileReject

         AuthLog NORMAL_ATUH_LOG

         # a normal username/password test
         <AuthBy SQL>
         ...
         </AuthBy>

         # due to policy, this is only done if previous failed.
         <AuthBy GROUP>
                 # policy changed
                 AuthByPolicy    ContinueWhileAccept

                 # authby to check a DEFAULT account and check password only.
                 <AuthBy SQL>
                 ...

                        AuthSelect      SELECT username, crypt, ... FROM table 
WHERE BINARY username='DEFAULT'

                         AuthColumnDef   1, Encrypted-Password, check
                         AuthColumnDef   2, ...
                 ...
                 </AuthBy>

                 # due to AuthByPolicy only pass to another handler if previous 
auth passes.
                 <AuthBy HANDLER>
                         HandlerId "call another handler"
                 </AuthBy>
         </AuthBy>
</Handler>







On 12-02-16 02:38 PM, Michael wrote:
> sounds like you may be trying to do something that is pretty complex.  maybe 
> you should be thinking about creating your own custom Auth Clause. section 
> 17.0 in the Radiator manual. For example, i've created my own Auth Clause 
> (AuthUNIX_UID) to support the UID value from unix password files as it was 
> required for my purpose.  The normal AuthUNIX doesn't do anything with UIDs.
>
>
>
> On 12-02-16 09:55 AM, Alby wrote:
>> Hi Michael,
>> thank you for your answer!
>> I agree with you, if you can do what you need with Radiator's configuration, 
>> of course it is a better way to operate. But I need to implement a sort of 
>> Self-Provisioning  procedure. When a new user tries to authenticate, I first 
>> let Radiator rejects the request (because the user does not have an account 
>> on the system). But then I check if the user satisfies with some 
>> prerequisites (e.g. a special password used and some more). If so, I create 
>> an account for the new user (and write the SQL database from my 
>> PostAuthHook) and then notify it of the account creation, for example by 
>> mail. Up to now, I use a PostAuthHook script to do that. It works very well, 
>> the only matter is about the performance when writing to the database 
>> because I connect and disconnect each time. I've tried to do it in other 
>> ways, but without any success, since up to now this seems to be the best 
>> solution.
>> Cheers,
>> Alberto
>>
>> Il giorno 16 febbraio 2012 15:32, 
>> Michael<ri...@vianet.ca<mailto:ri...@vianet.ca>>  ha scritto:
>>
>>      I hate to answer a question with another question, but what, why and/or 
>> when are you writing data to the sql?  I write data to sql but I do it 
>> through any combination of<AuthBy SQL>  <AuthLog SQL>, and sometimes an 
>> AuthBy SessionDB.  Works much better for me.  I try to avoid custom hooks if 
>> at all possible.  The ability for hooks is great to have, but if Radiator 
>> can already do a task just through config, i try to do it that way instead 
>> of a hook.
>>
>>      So, if you want to write something to a table for example ever time a 
>> user authenticates, use an<AuthBy AuthLog>, a SuccessQuery, and "LogSuccess  
>>     1".
>>      if you want to write something when stop packets come in, use<AuthBy 
>> SQL>, with "HandleAcctStatusTypes   Stop", and a AcctSQLStatement.
>>
>>      depends on what you need to do.
>>
>>
>>
>>      On 12-02-16 09:17 AM, Alby wrote:
>>
>>          Hi all,
>>          I'm using radiator with a SQL database that stores the users' data. 
>> I've also a PostAuthHook that writes some data on the SQL database. Up to 
>> now my Hook connects to the database, writes the data and then disconnects. 
>> I suspect that connecting and disconnecting each time I write to the 
>> database is not a really good idea (expecially for the performance). I've 
>> noticed that Radiator opens the connection to the database only the first 
>> time, then reuses it (this is of course a better way than mine). Since the 
>> database that I write is the same that I use on Radiator (same name, same 
>> user and same password), is there a way to reuse the Radiator's DB handle 
>> instead of creating a new one and destroying it each time?
>>          At at first glance, my idea was to open the database connection 
>> with a StartUpHook and then close with a ShutdownHook, but there is the 
>> problem on how to share the DB handle between the three Hooks. This should 
>> be made securely, because if an attacker is able to obtain the handler, it 
>> will be able to read and write the database without performing 
>> authentication first, I think. In my opinion reusing the Radiator DB handle 
>> is the best solution if it can be implemented.
>>          Thank you very much in advance for your help and for your attention
>>          Alberto
>>
>>
>>          _________________________________________________
>>          radiator mailing list
>>          radiator@open.com.au<mailto:radiator@open.com.au>
>>          
>> http://www.open.com.au/__mailman/listinfo/radiator<http://www.open.com.au/mailman/listinfo/radiator>
>>
>>
> _______________________________________________
> radiator mailing list
> radiator@open.com.au
> http://www.open.com.au/mailman/listinfo/radiator
>
>
_______________________________________________
radiator mailing list
radiator@open.com.au
http://www.open.com.au/mailman/listinfo/radiator

Reply via email to