Hello Robert,

Thanks again for another contribution. We have rolled it in for the next
release. I agree with Hughs comments. If all you want to do is remove pseudo
attributes from the reply, it might be better to use the request as a
scratchpad area instead.

Cheers.

On Apr 10,  8:10am, Hugh Irvine wrote:
> Subject: Re: (RADIATOR) New PostProcessingHook
>
> Hello Robert -
>
> Thanks for the contribution.
>
> BTW - if you just want to use temporary storage that you wont have to
> do housekeeping on, you should just put things into the request
> packet ($p) instead of the reply packet ($rp). The request packet is
> simply discarded so you don't have to worry about it.
>
> regards
>
> Hugh
>
>
> At 20:47 +0200 01/4/9, Robert Kiessling wrote:
> >Content-Type: text/plain; charset=us-ascii
> >Content-Description: message body text
> >Content-Transfer-Encoding: 7bit
> >
> >In order to remove some faked attributes, I would have found a
> >PostProcessingHook useful, and added it since it wasn't there
> >already. The patch against Radiator-2.18 is appended so that it might
> >be considered for inclusion in the next release.
> >
> >The documentation for this:
> >
> >         6.15.x PostProcessingHook</H4>
> ><P CLASS="BodyAfterHead">
> ><A NAME="pgfId=398636">
> >  </A>
> >This optional parameter allows you to define a Perl function that
> >will be called during packet processing. PostProcessingHook is
> >called for each reply immediately before it is sent to the client,
> >after all PostAuthHooks and after log files are written. A reference
> >to the current request is passed as the first arg
> >ument, and a reference to the reply packet is passed as the second
> >argument.</P>
> >
> >[... code is compiled ...]
> >
> >PostProcessingHook can be an arbitrarily complicated Perl function,
> >that might run external processes, consult databases, change the
> >contents of the current reply or many other things.</P>
> ><PRE CLASS="Code"><A NAME="pgfId=398639"> </A>
> ># Remove a faked attribute from the reply
> >PostProcessingHook sub { ${$_[1]}-&gt;delete_attr(`My-Realm');}</PRE>
> >
> >
> >diff -r -c Radiator-2.18/Radius/Handler.pm
> >Radiator-2.18.postprocessinghook/Radius/Handler.pm
> >*** Radiator-2.18/Radius/Handler.pm  Fri Mar  9 00:13:12 2001
> >--- Radiator-2.18.postprocessinghook/Radius/Handler.pm       Mon Apr  9
> >20:26:51 2001
> >***************
> >*** 116,121 ****
> >--- 116,122 ----
> >      'SessionDatabase'                => 'string',
> >      'HandleAscendAccessEventRequest' => 'flag',
> >      'PreProcessingHook'              => 'hook',
> >+          'PostProcessingHook'             => 'hook',
> >      'PreAuthHook'                    => 'hook',
> >      'PostAuthHook'                   => 'hook',
> >      'RewriteFunction'                => 'hook') && return 1;
> >***************
> >*** 506,511 ****
> >--- 507,513 ----
> >   {
> >       my ($self, $p, $rp, $handled, $reason) = @_;
> >
> >+     my $do_reply = 0;
> >       if ($p->code eq 'Access-Request')
> >       {
> >     my $name = $p->getUserName;
> >***************
> >*** 514,520 ****
> >         &main::log($main::LOG_DEBUG, "Access accepted for $name");
> >         $self->authlog($main::ACCEPT, '', $p, $rp);
> >         $rp->set_code('Access-Accept');
> >!        $p->{Client}->replyTo($rp, $p);
> >     }
> >     elsif ($handled == $main::REJECT
> >            || $handled == $main::REJECT_IMMEDIATE)
> >--- 516,522 ----
> >         &main::log($main::LOG_DEBUG, "Access accepted for $name");
> >         $self->authlog($main::ACCEPT, '', $p, $rp);
> >         $rp->set_code('Access-Accept');
> >!        $do_reply = 1;
> >     }
> >     elsif ($handled == $main::REJECT
> >            || $handled == $main::REJECT_IMMEDIATE)
> >***************
> >*** 525,538 ****
> >         $rp->addAttrByNum($Radius::Radius::REPLY_MESSAGE,
> >                           $self->{RejectHasReason} ?
> >                           $reason : 'Request Denied');
> >!
> >!        $p->{Client}->replyTo($rp, $p);
> >     }
> >     elsif ($handled == $main::CHALLENGE)
> >     {
> >         &main::log($main::LOG_DEBUG, "Access challenged for
> >$name: $reason");
> >         $rp->set_code('Access-Challenge');
> >!        $p->{Client}->replyTo($rp, $p);
> >     }
> >     else
> >     {
> >--- 527,539 ----
> >         $rp->addAttrByNum($Radius::Radius::REPLY_MESSAGE,
> >                           $self->{RejectHasReason} ?
> >                           $reason : 'Request Denied');
> >!        $do_reply = 1;
> >     }
> >     elsif ($handled == $main::CHALLENGE)
> >     {
> >         &main::log($main::LOG_DEBUG, "Access challenged for
> >$name: $reason");
> >         $rp->set_code('Access-Challenge');
> >!        $do_reply = 1;
> >     }
> >     else
> >     {
> >***************
> >*** 559,565 ****
> >     {
> >         &main::log($main::LOG_DEBUG, "Accounting accepted");
> >         $rp->set_code('Accounting-Response');
> >!        $p->{Client}->replyTo($rp, $p);
> >     }
> >     elsif ($handled == $main::IGNORE)
> >     {
> >--- 560,566 ----
> >     {
> >         &main::log($main::LOG_DEBUG, "Accounting accepted");
> >         $rp->set_code('Accounting-Response');
> >!        $do_reply = 1;
> >     }
> >     elsif ($handled == $main::IGNORE)
> >     {
> >***************
> >*** 574,590 ****
> >     {
> >         &main::log($main::LOG_DEBUG, "Disconnect-Request accepted");
> >         $rp->set_code('Disconnect-Request-ACKed');
> >!        $p->{Client}->replyTo($rp, $p);
> >     }
> >     elsif ($handled == $main::REJECT
> >            || $handled == $main::REJECT_IMMEDIATE)
> >     {
> >         &main::log($main::LOG_INFO, "Disconnect-Request rejected:
> >$reason");
> >         $rp->set_code('Disconnect-Request-NAKed');
> >!        $p->{Client}->replyTo($rp, $p);
> >     }
> >       }
> >       # Ignore anything else
> >   }
> >
> >   #####################################################################
> >--- 575,605 ----
> >     {
> >         &main::log($main::LOG_DEBUG, "Disconnect-Request accepted");
> >         $rp->set_code('Disconnect-Request-ACKed');
> >!        $do_reply = 1;
> >     }
> >     elsif ($handled == $main::REJECT
> >            || $handled == $main::REJECT_IMMEDIATE)
> >     {
> >         &main::log($main::LOG_INFO, "Disconnect-Request rejected:
> >$reason");
> >         $rp->set_code('Disconnect-Request-NAKed');
> >!        $do_reply = 1;
> >     }
> >       }
> >       # Ignore anything else
> >+     # send reply if requested
> >+     if ($do_reply) {
> >+    # Call the PostProcessingHook, if there is one
> >+    if (defined $self->{PostProcessingHook})
> >+    {
> >+        # We use an eval so an error in the hook wont
> >+        # kill us.
> >+        eval{ &{$self->{PostProcessingHook}}(\$p, \$rp); };
> >+        &main::log($main::LOG_ERR,
> >+                   "Error in PostProcessingHook(): $@")
> >+            if $@;
> >+    }
> >+    $p->{Client}->replyTo($rp, $p);
> >+     }
> >   }
> >
> >   #####################################################################
>
> --
>
> NB: I am travelling this week, so there may be delays in our correspondence.
>
> Radiator: the most portable, flexible and configurable RADIUS server
> anywhere. SQL, proxy, DBM, files, LDAP, NIS+, password, NT, Emerald,
> Platypus, Freeside, Interbiller, TACACS+, PAM, external, etc, etc.
> Available on Unix, Linux, FreeBSD, Windows 95/98/2000, NT, MacOS X.
>
>-- End of excerpt from Hugh Irvine



-- 
Mike McCauley                               [EMAIL PROTECTED]
Open System Consultants Pty. Ltd            Unix, Perl, Motif, C++, WWW
24 Bateman St Hampton, VIC 3188 Australia   http://www.open.com.au
Phone +61 3 9598-0985                       Fax   +61 3 9598-0955

Radiator: the most portable, flexible and configurable RADIUS server 
anywhere. SQL, proxy, DBM, files, LDAP, NIS+, password, NT, Emerald, 
Platypus, Freeside, TACACS+, PAM, external, Active Directory etc etc 
on Unix, Win95/8, 2000, NT, MacOS 9, MacOS X
===
Archive at http://www.starport.net/~radiator/
Announcements on [EMAIL PROTECTED]
To unsubscribe, email '[EMAIL PROTECTED]' with
'unsubscribe radiator' in the body of the message.

Reply via email to