<div dir="ltr">Hello Hugh.<div><br></div><div>I found your script in mailing list.<br></div><div><a href="http://www.open.com.au/pipermail/radiator/2010-March/016160.html">http://www.open.com.au/pipermail/radiator/2010-March/016160.html</a><br></div><div><br></div><div>It work for me.</div><div><br></div><div>Thank for help!<br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2016-01-18 16:33 GMT+03:00 SinTeZ Wh1te <span dir="ltr">&lt;<a href="mailto:sintezwh1te@gmail.com" target="_blank">sintezwh1te@gmail.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello Hugh.<div><br></div><div>Second AuthBy clause not send reply to NAS.</div><div><br></div><div>radius.cfg</div><div>-------</div><span class=""><div><div>&lt;AuthBy RADIUS&gt;</div><div><span style="white-space:pre-wrap">        </span>Identifier Primary</div><div><span style="white-space:pre-wrap">        </span>Host 10.0.6.151</div><div><span style="white-space:pre-wrap">        </span>Secret 123456</div><div><span style="white-space:pre-wrap">        </span>AuthPort 1812</div><div><span style="white-space:pre-wrap">        </span>AcctPort 1813</div><div><span style="white-space:pre-wrap">        </span>ReplyHook file:&quot;/etc/radiator/AccessReject&quot;</div><div>&lt;/AuthBy&gt;</div><div><br></div><div>&lt;AuthBy RADIUS&gt;</div><div><span style="white-space:pre-wrap">        </span>Identifier Secondary</div><div><span style="white-space:pre-wrap">        </span>Host 10.0.6.152</div><div><span style="white-space:pre-wrap">        </span>Secret 123456</div><div><span style="white-space:pre-wrap">        </span>AuthPort 1812</div><div><span style="white-space:pre-wrap">        </span>AcctPort 1813</div><div>&lt;/AuthBy&gt;</div><div><br></div><div>&lt;Handler&gt;</div><div><span style="white-space:pre-wrap">        </span>AuthBy Primary</div><div>&lt;/Handler&gt;</div></div></span><div>-------</div><div><br></div><div>/etc/radiator/AccessReject</div><div>--------</div><div><span class=""><div>sub </div><div>{</div><div>    my $p = ${$_[0]};<span style="white-space:pre-wrap">        </span># proxy reply packet</div><div>    my $rp = ${$_[1]};<span style="white-space:pre-wrap">        </span># reply packet to NAS</div><div>    my $op = ${$_[2]};<span style="white-space:pre-wrap">        </span># original request packet</div><div>    my $sp = ${$_[3]};<span style="white-space:pre-wrap">        </span># packet sent to proxy </div><div><span style="white-space:pre-wrap">        </span></div><div><span style="white-space:pre-wrap">        </span>my $code = $p-&gt;code;</div></span><span class=""><div><span style="white-space:pre-wrap">        </span>return unless $code eq &#39;Access-Reject&#39;;</div><div><span style="white-space:pre-wrap">        </span></div><div><span style="white-space:pre-wrap">        </span>if($code eq &#39;Access-Reject&#39;){</div><div><span style="white-space:pre-wrap">                </span>my $authby = Radius::AuthGeneric::find(&#39;Secondary&#39;);</div><div><span style="white-space:pre-wrap">                </span>if (defined $authby)</div><div><span style="white-space:pre-wrap">                </span>{</div></span><span class=""><div><span style="white-space:pre-wrap">                        </span>my ($rc, $reason) = $authby-&gt;handle_request($op, $rp);</div></span><div><span style="white-space:pre-wrap">                        </span>if ($rc == 2)</div><div><span style="white-space:pre-wrap">                        </span>{</div><span class=""><div><span style="white-space:pre-wrap">                                </span>$op-&gt;{RadiusResult} = $main::IGNORE;</div><div><span style="white-space:pre-wrap">                        </span>}</div><div><span style="white-space:pre-wrap">                </span>}</div></span><div><span style="white-space:pre-wrap">                </span>return;</div><div><span style="white-space:pre-wrap">        </span>}</div><div>}</div></div><div>---------</div><div><br></div><div><br></div><div>#tshark -i eth0 port 1812 -w /opt/radius.pcap</div><div><br></div><div>Screenshot Wireshark<br></div><div><br></div><div><a href="http://i.imgur.com/StKAJ18.png" target="_blank">http://i.imgur.com/StKAJ18.png</a><br></div><div><br></div><div>10.0.6.13 - NAS</div><div>10.0.6.150 - Radiator</div><div>10.0.6.151 - Primary RADIUS</div><div>10.0.6.152 - Secondary RADIUS</div><div><br></div><div>After 10.0.6.152 send Access-Accept - Radiator does nothing.</div><div><br></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">2016-01-18 13:29 GMT+03:00 Hugh Irvine <span dir="ltr">&lt;<a href="mailto:hugh@open.com.au" target="_blank">hugh@open.com.au</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Hello -<br>
<br>
You don’t have to do anything - the second AuthBy RADIUS clause will send the reply to the NAS.<br>
<br>
If you want to do more than that you will also need a ReplyHook in the second AuthBy RADIUS clause.<br>
<br>
regards<br>
<span><font color="#888888"><br>
Hugh<br>
</font></span><div><div><br>
<br>
&gt; On 18 Jan 2016, at 18:15, SinTeZ Wh1te &lt;<a href="mailto:sintezwh1te@gmail.com" target="_blank">sintezwh1te@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt; Hello Hugh!<br>
&gt;<br>
&gt; &gt; Again note that your hook code will not see the result of the second AuthBy RADIUS clause.<br>
&gt;<br>
&gt; If hook code not see result how can I check that I received in reply from second RADIUS server?<br>
&gt;<br>
&gt; What is necessary my boss.<br>
&gt; 1) NAS send Access-Request to Radiator<br>
&gt; 2) Radiator re-send Access-Request to primary RADIUS server<br>
&gt; 3) If primary server reply Access-Reject with attribute Reply-Message = 1, Radiator re-send Access-Request to secondary RADIUS server. If Reply-Message &gt; 1 - send Access-Reject to NAS.<br>
&gt; 4) After secondary server reply - Radiator send reply to NAS<br>
&gt;<br>
&gt; Reply hook does it?<br>
&gt;<br>
&gt; 2016-01-15 1:42 GMT+03:00 Hugh Irvine &lt;<a href="mailto:hugh@open.com.au" target="_blank">hugh@open.com.au</a>&gt;:<br>
&gt;<br>
&gt; Hello -<br>
&gt;<br>
&gt; The first thing to understand is that the AuthBy RADIUS clause(s) operate asynchronously.<br>
&gt;<br>
&gt; The hook code in your first AuthBy RADIUS clause will only execute when the response is received for that clause.<br>
&gt;<br>
&gt; When the hook code calls the second AuthBy RADIUS clause it will exit without waiting.<br>
&gt;<br>
&gt; As shown in the example, your hook code needs to alter the response.<br>
&gt;<br>
&gt; In this case you would change the response to IGNORE which will allow the second AuthBy RADIUS clause to execute and return its result.<br>
&gt;<br>
&gt;<br>
&gt;                 …..<br>
&gt;<br>
&gt;                 $op-&gt;{RadiusResult} = $main::IGNORE;<br>
&gt;<br>
&gt;                 …..<br>
&gt;<br>
&gt; Again note that your hook code will not see the result of the second AuthBy RADIUS clause.<br>
&gt;<br>
&gt; hope that helps<br>
&gt;<br>
&gt; regards<br>
&gt;<br>
&gt; Hugh<br>
&gt;<br>
&gt;<br>
&gt; &gt; On 14 Jan 2016, at 23:34, SinTeZ Wh1te &lt;<a href="mailto:sintezwh1te@gmail.com" target="_blank">sintezwh1te@gmail.com</a>&gt; wrote:<br>
&gt; &gt;<br>
&gt; &gt; Thank Hugh and Heikki!!!<br>
&gt; &gt;<br>
&gt; &gt; How can I get RADIUS reply packet from secondary server in hook script???<br>
&gt; &gt; Radiator send Access-Reject before secondary server reply.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; radius.cfg<br>
&gt; &gt; ...................<br>
&gt; &gt; &lt;AuthBy RADIUS&gt;<br>
&gt; &gt;       Identifier Primary<br>
&gt; &gt;       Host 10.0.6.151<br>
&gt; &gt;       Secret 123456<br>
&gt; &gt;       AuthPort 1812<br>
&gt; &gt;       AcctPort 1813<br>
&gt; &gt;       ReplyHook file:&quot;/etc/radiator/AccessReject&quot;<br>
&gt; &gt; &lt;/AuthBy&gt;<br>
&gt; &gt;<br>
&gt; &gt; &lt;AuthBy RADIUS&gt;<br>
&gt; &gt;       Identifier Secondary<br>
&gt; &gt;       Host 10.0.6.152<br>
&gt; &gt;       Secret 123456<br>
&gt; &gt;       AuthPort 1812<br>
&gt; &gt;       AcctPort 1813<br>
&gt; &gt; &lt;/AuthBy&gt;<br>
&gt; &gt;<br>
&gt; &gt; &lt;Handler&gt;<br>
&gt; &gt;       AuthBy Primary<br>
&gt; &gt; &lt;/Handler&gt;<br>
&gt; &gt; ...................<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; /etc/radiator/AccessReject<br>
&gt; &gt; ...................<br>
&gt; &gt; sub<br>
&gt; &gt; {<br>
&gt; &gt;     my $p = ${$_[0]}; # proxy reply packet<br>
&gt; &gt;     my $rp = ${$_[1]};        # reply packet to NAS<br>
&gt; &gt;     my $op = ${$_[2]};        # original request packet<br>
&gt; &gt;     my $sp = ${$_[3]};        # packet sent to proxy<br>
&gt; &gt;<br>
&gt; &gt;       my $code = $p-&gt;code;<br>
&gt; &gt;       &amp;main::log($main::LOG_DEBUG, &quot;Code = $code&quot;);<br>
&gt; &gt;       return unless $code eq &#39;Access-Reject&#39;;<br>
&gt; &gt;<br>
&gt; &gt;       if($code eq &#39;Access-Reject&#39;){<br>
&gt; &gt;               my $authby = Radius::AuthGeneric::find(&#39;Secondary&#39;);<br>
&gt; &gt;               if (defined $authby)<br>
&gt; &gt;               {<br>
&gt; &gt;                       &amp;main::log($main::LOG_DEBUG, &quot;========= HANDLE_REQUEST===========&quot;);<br>
&gt; &gt;                       my ($rc, $reason) = $authby-&gt;handle_request($op, $rp);<br>
&gt; &gt;                       &amp;main::log($main::LOG_DEBUG, &quot;========= RC =========== $rc&quot;);<br>
&gt; &gt;                       &amp;main::log($main::LOG_DEBUG, &quot;========= REASON =========== $reason&quot;);<br>
&gt; &gt;                       if ($rc == 2)<br>
&gt; &gt;                       {<br>
&gt; &gt;                               &amp;main::log($main::LOG_DEBUG, &quot;========= ACCEPT ===========&quot;);<br>
&gt; &gt;                       }<br>
&gt; &gt;                       else<br>
&gt; &gt;                       {<br>
&gt; &gt;                               &amp;main::log($main::LOG_DEBUG, &quot;========= REJECT ===========&quot;);<br>
&gt; &gt;                       }<br>
&gt; &gt;               }<br>
&gt; &gt;               return;<br>
&gt; &gt;       }<br>
&gt; &gt; }<br>
&gt; &gt; ...................<br>
&gt; &gt;<br>
&gt; &gt; radiator log<br>
&gt; &gt; -------------------<br>
&gt; &gt; Thu Jan 14 15:22:08 2016: DEBUG: Packet dump:<br>
&gt; &gt; *** Received from 10.0.6.13 port 57565 ....<br>
&gt; &gt; Code:       Access-Request<br>
&gt; &gt; Identifier: 0<br>
&gt; &gt; Authentic:        1452774130<br>
&gt; &gt; Attributes:<br>
&gt; &gt;       User-Name = &quot;testcoa10&quot;<br>
&gt; &gt;       User-Password = C&lt;143&gt;a&lt;151&gt;S&lt;184&gt;6g&lt;9&gt;&lt;5&gt;:&lt;191&gt;i&lt;244&gt;O3<br>
&gt; &gt;       NAS-IP-Address = 10.0.6.13<br>
&gt; &gt;       NAS-Port = 1<br>
&gt; &gt;       NAS-Port-Id = &quot;123&quot;<br>
&gt; &gt;       Service-Type = Framed-User<br>
&gt; &gt;       Framed-Protocol = PPP<br>
&gt; &gt;       Acct-Session-Id = &quot;1&quot;<br>
&gt; &gt;       Calling-Station-Id = &quot;0800.2727.0575&quot;<br>
&gt; &gt;<br>
&gt; &gt; Thu Jan 14 15:22:08 2016: DEBUG: Handling request with Handler &#39;&#39;, Identifier &#39;&#39;<br>
&gt; &gt; Thu Jan 14 15:22:08 2016: DEBUG:  Deleting session for testcoa10, 10.0.6.13, 1<br>
&gt; &gt; Thu Jan 14 15:22:08 2016: DEBUG: Handling with Radius::AuthRADIUS<br>
&gt; &gt; Thu Jan 14 15:22:08 2016: DEBUG: AuthBy RADIUS creates new local socket &#39;<a href="http://0.0.0.0:0" rel="noreferrer" target="_blank">0.0.0.0:0</a>&#39; for sending requests<br>
&gt; &gt; Thu Jan 14 15:22:08 2016: DEBUG: Packet dump:<br>
&gt; &gt; *** Sending to 10.0.6.151 port 1812 ....<br>
&gt; &gt; Code:       Access-Request<br>
&gt; &gt; Identifier: 1<br>
&gt; &gt; Authentic:        1452774130<br>
&gt; &gt; Attributes:<br>
&gt; &gt;       User-Name = &quot;testcoa10&quot;<br>
&gt; &gt;       User-Password = C&lt;143&gt;a&lt;151&gt;S&lt;184&gt;6g&lt;9&gt;&lt;5&gt;:&lt;191&gt;i&lt;244&gt;O3<br>
&gt; &gt;       NAS-IP-Address = 10.0.6.13<br>
&gt; &gt;       NAS-Port = 1<br>
&gt; &gt;       NAS-Port-Id = &quot;123&quot;<br>
&gt; &gt;       Service-Type = Framed-User<br>
&gt; &gt;       Framed-Protocol = PPP<br>
&gt; &gt;       Acct-Session-Id = &quot;1&quot;<br>
&gt; &gt;       Calling-Station-Id = &quot;0800.2727.0575&quot;<br>
&gt; &gt;<br>
&gt; &gt; Thu Jan 14 15:22:08 2016: DEBUG: AuthBy RADIUS result: IGNORE,<br>
&gt; &gt; Thu Jan 14 15:22:09 2016: DEBUG: Received reply in AuthRADIUS for req 1 from <a href="http://10.0.6.151:1812" rel="noreferrer" target="_blank">10.0.6.151:1812</a><br>
&gt; &gt; Thu Jan 14 15:22:09 2016: DEBUG: Packet dump:<br>
&gt; &gt; *** Received from 10.0.6.151 port 1812 ....<br>
&gt; &gt; Code:       Access-Reject<br>
&gt; &gt; Identifier: 1<br>
&gt; &gt; Authentic:  &lt;155&gt;&lt;2&gt;&lt;181&gt;&lt;187&gt;&lt;19&gt;&#39;&lt;218&gt;&lt;220&gt;tK[\&lt;224&gt;&lt;137&gt;,&lt;194&gt;<br>
&gt; &gt; Attributes:<br>
&gt; &gt;       Reply-Message = &quot;1&quot;<br>
&gt; &gt;<br>
&gt; &gt; Thu Jan 14 15:22:09 2016: DEBUG: Code = Access-Reject<br>
&gt; &gt; Thu Jan 14 15:22:09 2016: DEBUG: ========= HANDLE_REQUEST===========<br>
&gt; &gt; Thu Jan 14 15:22:09 2016: DEBUG: Handling with Radius::AuthRADIUS<br>
&gt; &gt; Thu Jan 14 15:22:09 2016: DEBUG: Packet dump:<br>
&gt; &gt; *** Sending to 10.0.6.152 port 1812 ....<br>
&gt; &gt; Code:       Access-Request<br>
&gt; &gt; Identifier: 1<br>
&gt; &gt; Authentic:        1452774130<br>
&gt; &gt; Attributes:<br>
&gt; &gt;       User-Name = &quot;testcoa10&quot;<br>
&gt; &gt;       User-Password = C&lt;143&gt;a&lt;151&gt;S&lt;184&gt;6g&lt;9&gt;&lt;5&gt;:&lt;191&gt;i&lt;244&gt;O3<br>
&gt; &gt;       NAS-IP-Address = 10.0.6.13<br>
&gt; &gt;       NAS-Port = 1<br>
&gt; &gt;       NAS-Port-Id = &quot;123&quot;<br>
&gt; &gt;       Service-Type = Framed-User<br>
&gt; &gt;       Framed-Protocol = PPP<br>
&gt; &gt;       Acct-Session-Id = &quot;1&quot;<br>
&gt; &gt;       Calling-Station-Id = &quot;0800.2727.0575&quot;<br>
&gt; &gt;<br>
&gt; &gt; Thu Jan 14 15:22:09 2016: DEBUG: ========= RC =========== 2<br>
&gt; &gt; Thu Jan 14 15:22:09 2016: DEBUG: ========= REASON ===========<br>
&gt; &gt; Thu Jan 14 15:22:09 2016: DEBUG: ========= ACCEPT ===========<br>
&gt; &gt; Thu Jan 14 15:22:09 2016: INFO: Access rejected for testcoa10: 1<br>
&gt; &gt; Thu Jan 14 15:22:09 2016: DEBUG: Packet dump:<br>
&gt; &gt; *** Sending to 10.0.6.13 port 57565 ....<br>
&gt; &gt; Code:       Access-Reject<br>
&gt; &gt; Identifier: 0<br>
&gt; &gt; Authentic:  &lt;175&gt;&lt;159&gt;4&lt;197&gt;i&lt;159&gt;&lt;11&gt;&lt;252&gt;}&lt;247&gt;&lt;174&gt;[Cn&lt;138&gt;&lt;3&gt;<br>
&gt; &gt; Attributes:<br>
&gt; &gt;       Reply-Message = &quot;Request Denied&quot;<br>
&gt; &gt;<br>
&gt; &gt; Thu Jan 14 15:22:09 2016: DEBUG: Received reply in AuthRADIUS for req 1 from <a href="http://10.0.6.152:1812" rel="noreferrer" target="_blank">10.0.6.152:1812</a><br>
&gt; &gt; Thu Jan 14 15:22:09 2016: DEBUG: Packet dump:<br>
&gt; &gt; *** Received from 10.0.6.152 port 1812 ....<br>
&gt; &gt; Code:       Access-Accept<br>
&gt; &gt; Identifier: 1<br>
&gt; &gt; Authentic:  T&lt;10&gt;&lt;218&gt;9&lt;16&gt;F&lt;167&gt;A&lt;168&gt;&lt;127&gt;&lt;187&gt;&lt;20&gt;&lt;9&gt;!Q&lt;127&gt;<br>
&gt; &gt; Attributes:<br>
&gt; &gt;       Acct-Interim-Interval = 300<br>
&gt; &gt;       Framed-IP-Address = 192.168.0.203<br>
&gt; &gt;<br>
&gt; &gt; Thu Jan 14 15:22:09 2016: INFO: Access rejected for testcoa10: Proxied<br>
&gt; &gt; Thu Jan 14 15:22:09 2016: DEBUG: Packet dump:<br>
&gt; &gt; *** Sending to 10.0.6.13 port 57565 ....<br>
&gt; &gt; Code:       Access-Reject<br>
&gt; &gt; Identifier: 0<br>
&gt; &gt; Authentic:  &lt;149&gt;&lt;142&gt;&lt;227&gt;Y&lt;252&gt;N&lt;137&gt;w&lt;167&gt;&lt;194&gt;a&lt;1&gt;e&lt;253&gt;Kl<br>
&gt; &gt; Attributes:<br>
&gt; &gt;       Reply-Message = &quot;Request Denied&quot;<br>
&gt; &gt;       Acct-Interim-Interval = 300<br>
&gt; &gt;       Framed-IP-Address = 192.168.0.203<br>
&gt; &gt; -------------------------------------<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; 2016-01-13 1:18 GMT+03:00 Hugh Irvine &lt;<a href="mailto:hugh@open.com.au" target="_blank">hugh@open.com.au</a>&gt;:<br>
&gt; &gt;<br>
&gt; &gt; Hello -<br>
&gt; &gt;<br>
&gt; &gt; See the example in “goodies/hooks.txt” in the Radiator 4.15 distribution.<br>
&gt; &gt;<br>
&gt; &gt; regards<br>
&gt; &gt;<br>
&gt; &gt; Hugh<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; &gt; On 12 Jan 2016, at 18:52, SinTeZ Wh1te &lt;<a href="mailto:sintezwh1te@gmail.com" target="_blank">sintezwh1te@gmail.com</a>&gt; wrote:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Hello!<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; I want to do if it&#39;s possible to proxy auth request in a<br>
&gt; &gt; &gt; redundant fashion.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; On each requests, I want to proxy it to a primary server, if it&#39;s<br>
&gt; &gt; &gt; success then move on.<br>
&gt; &gt; &gt; If the auth fails (Access-Reject), I need to proxy Access-Request to a secondary server<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Is it possible?<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Thanks!<br>
&gt; &gt; &gt; _______________________________________________<br>
&gt; &gt; &gt; radiator mailing list<br>
&gt; &gt; &gt; <a href="mailto:radiator@open.com.au" target="_blank">radiator@open.com.au</a><br>
&gt; &gt; &gt; <a href="http://www.open.com.au/mailman/listinfo/radiator" rel="noreferrer" target="_blank">http://www.open.com.au/mailman/listinfo/radiator</a><br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; --<br>
&gt; &gt;<br>
&gt; &gt; Hugh Irvine<br>
&gt; &gt; <a href="mailto:hugh@open.com.au" target="_blank">hugh@open.com.au</a><br>
&gt; &gt;<br>
&gt; &gt; Radiator: the most portable, flexible and configurable RADIUS server<br>
&gt; &gt; anywhere. SQL, proxy, DBM, files, LDAP, NIS+, password, NT, Emerald,<br>
&gt; &gt; Platypus, Freeside, TACACS+, PAM, external, Active Directory, EAP, TLS,<br>
&gt; &gt; TTLS, PEAP, TNC, WiMAX, RSA, Vasco, Yubikey, MOTP, HOTP, TOTP,<br>
&gt; &gt; DIAMETER, SIM, etc.<br>
&gt; &gt; Full source on Unix, Linux, Windows, MacOSX, Solaris, VMS, NetWare etc.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; --<br>
&gt; &gt; С уважением,<br>
&gt; &gt; Александр Якунин<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; radiator mailing list<br>
&gt; &gt; <a href="mailto:radiator@open.com.au" target="_blank">radiator@open.com.au</a><br>
&gt; &gt; <a href="http://www.open.com.au/mailman/listinfo/radiator" rel="noreferrer" target="_blank">http://www.open.com.au/mailman/listinfo/radiator</a><br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt;<br>
&gt; Hugh Irvine<br>
&gt; <a href="mailto:hugh@open.com.au" target="_blank">hugh@open.com.au</a><br>
&gt;<br>
&gt; Radiator: the most portable, flexible and configurable RADIUS server<br>
&gt; anywhere. SQL, proxy, DBM, files, LDAP, NIS+, password, NT, Emerald,<br>
&gt; Platypus, Freeside, TACACS+, PAM, external, Active Directory, EAP, TLS,<br>
&gt; TTLS, PEAP, TNC, WiMAX, RSA, Vasco, Yubikey, MOTP, HOTP, TOTP,<br>
&gt; DIAMETER, SIM, etc.<br>
&gt; Full source on Unix, Linux, Windows, MacOSX, Solaris, VMS, NetWare etc.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; С уважением,<br>
&gt; Александр Якунин<br>
<br>
<br>
--<br>
<br>
Hugh Irvine<br>
<a href="mailto:hugh@open.com.au" target="_blank">hugh@open.com.au</a><br>
<br>
Radiator: the most portable, flexible and configurable RADIUS server<br>
anywhere. SQL, proxy, DBM, files, LDAP, NIS+, password, NT, Emerald,<br>
Platypus, Freeside, TACACS+, PAM, external, Active Directory, EAP, TLS,<br>
TTLS, PEAP, TNC, WiMAX, RSA, Vasco, Yubikey, MOTP, HOTP, TOTP,<br>
DIAMETER, SIM, etc.<br>
Full source on Unix, Linux, Windows, MacOSX, Solaris, VMS, NetWare etc.<br>
<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div><div dir="ltr"><div>С уважением,<br>Александр Якунин<br></div></div></div>
</div>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div class="gmail_signature"><div dir="ltr"><div>With regards,</div><div>Alexander Yakunin</div></div></div></div></div>
</div>