[pLog-svn] r6088 - plog/branches/lifetype-1.2/class/security

Oscar Renalias oscar at renalias.net
Thu Nov 29 02:48:51 EST 2007


Can you check if the second run of the pipeline has been there since
the very beginning of its implementation? I seem to remember that it
was added later on by Paul (but I could be wrong)

And another unrelated comment: are you doing some sort of reformatting
to the code or is your editor reformatting the code? I find it
difficult to follow your checkins sometimes because 95% of the changes
are due to reformatting...

On Nov 29, 2007 7:52 AM,  <mark at devel.lifetype.net> wrote:
> Author: mark
> Date: 2007-11-29 00:52:47 -0500 (Thu, 29 Nov 2007)
> New Revision: 6088
>
> Modified:
>    plog/branches/lifetype-1.2/class/security/pipeline.class.php
> Log:
> Fixed a the famous "pipeline run twice" bug http://bugs.lifetype.net/view.php?id=616 .
>
> I change the strategy of filters process. I only run the un-executed filters in 2nd for-loop.
>
> Modified: plog/branches/lifetype-1.2/class/security/pipeline.class.php
> ===================================================================
> --- plog/branches/lifetype-1.2/class/security/pipeline.class.php        2007-11-28 20:30:55 UTC (rev 6087)
> +++ plog/branches/lifetype-1.2/class/security/pipeline.class.php        2007-11-29 05:52:47 UTC (rev 6088)
> @@ -3,19 +3,19 @@
>      /**
>       * \defgroup Security
>       *
> -     * The Security module provides a basic implementation of a generic Pipeline to which we can
> +     * The Security module provides a basic implementation of a generic Pipeline to which we can
>       * register "filters", which wil carry out specific actions. Any of the filters can interrupt the
>       * processing, depending on the logic of the filter. Please see the Pipeline class for more information.
>       */
>
>
> -
> +
>      lt_include( PLOG_CLASS_PATH."class/config/config.class.php" );
> -
> +
>      /**
>       * global array used to hold the list of filters that we're going to use in the pipeline.
>       * Now again, more than ever, wish that PHP4 had support for static attributes at the class
> -     * level...
> +     * level...
>       */
>      $_pLogPipelineRegisteredFilters = array();
>
> @@ -35,7 +35,7 @@
>       * The out of the box implementation of the Pipeline comes with a null filter (a filter that does nothing -- go figure :))
>       * and a filter that implements a Bayesian filter for advanced spam protection. See the BayesianFilter class for more information.
>       */
> -    class Pipeline
> +    class Pipeline
>      {
>
>          /**
> @@ -49,7 +49,7 @@
>           * that is currently processing the incoming request
>           */
>          var $_blogInfo;
> -
> +
>          /**
>           * variable to hold the final result of executing the pipeline
>           */
> @@ -64,14 +64,14 @@
>           */
>          function Pipeline( $httpRequest, $blogInfo = null )
>          {
> -
>
> +
>              $this->_httpRequest = $httpRequest;
>              $this->_blogInfo    = $blogInfo;
> -
> +
>              $this->_registerDefaultFilters();;
>          }
> -
> +
>          /**
>           * Method that takes care of registering the default filters used in the pipeline.
>           *
> @@ -88,10 +88,10 @@
>              $this->registerFilter( "NullPipelineFilter" );
>              $this->registerFilter( "CommentFilter" );
>              $this->registerFilter( "BayesianFilter" );
> -
> +
>              return true;
>          }
> -
> +
>          /**
>           * Static method that registers a filter externally
>           *
> @@ -102,11 +102,11 @@
>          function registerFilter( $filterClass )
>          {
>              global $_pLogPipelineRegisteredFilters;
> -
> +
>              if( !is_array($_pLogPipelineRegisteredFilters))     // make sure that we have an array...
>                  $_pLogPipelineRegisteredFilters = Array();
> -
> -            $_pLogPipelineRegisteredFilters["$filterClass"] =  $filterClass;
> +
> +            $_pLogPipelineRegisteredFilters["$filterClass"] = false;
>          }
>
>          /**
> @@ -117,8 +117,8 @@
>          {
>              lt_include( PLOG_CLASS_PATH . 'class/security/pipelinerequest.class.php' );
>              lt_include( PLOG_CLASS_PATH . 'class/security/pipelineresult.class.php' );
> -            global $_pLogPipelineRegisteredFilters;
> -
> +            global $_pLogPipelineRegisteredFilters;
> +
>              // check if the pipeline is enabled
>              $config =& Config::getConfig();
>              if( $config->getValue( "security_pipeline_enabled" ) == false ) {
> @@ -130,41 +130,48 @@
>              $this->_result = new PipelineResult( true );
>
>              // if enabled, then check all the filters
> -            foreach( $_pLogPipelineRegisteredFilters as $filterClass ) {
> +            foreach( $_pLogPipelineRegisteredFilters as $filterClass => $executed ) {
>                  // create an instance of the filter
>                  $pipelineRequest = new PipelineRequest( $this->_httpRequest, $this->_blogInfo );
>                  $filter = new $filterClass( $pipelineRequest );
> -                // and execute it...
> +                // and execute it...
>                  $result = $filter->filter();
> +                               // and cahge the executed flag to ture
> +                               $_pLogPipelineRegisteredFilters["$filterClass"] = true;
>                  // if there was an error, we better say so now
>                  // and quite, making sure that we're keeping the
>                  // error code
> -
> +
>                  // Save off the result
>                                 $this->_result = $result;
> -
> -                if( !$result->isValid()) {
> +
> +                if( !$result->isValid()) {
>                      // break out of this loop
>                      break;
>                  }
>              }
> -
> +
>              // If one of the filters returns that this was not a valid result
>              if ( !$this->_result->isValid() ) {
> -                // Now rerun through all of the filters so they can clean up
> +                // Now rerun through all of the filters so they can clean up
>                  // if they have saved anything persistantly
> -                // This also gives filters a chance to do anything else they
> +                // This also gives filters a chance to do anything else they
>                  // want to do (i.e. report ip address to dns blacklist)
> -
> -                foreach( $_pLogPipelineRegisteredFilters as $filterClass ) {
> -                    // create an instance of the filter
> -                    $pipelineRequest = new PipelineRequest( $this->_httpRequest,
> -                                                            $this->_blogInfo,
> -                                                            true );
> -                    $filter = new $filterClass( $pipelineRequest );
> -                    // and execute it...
> -                    $result = $filter->filter();
> -                    // if there was an error, we want to keep going
> +
> +                foreach( $_pLogPipelineRegisteredFilters as $filterClass => $executed ) {
> +                    // We just need to run the unexecuted filters
> +                    if( !$executed ) {
> +                        // create an instance of the filter
> +                        $pipelineRequest = new PipelineRequest( $this->_httpRequest,
> +                                                                $this->_blogInfo,
> +                                                                true );
> +                        $filter = new $filterClass( $pipelineRequest );
> +                        // and execute it...
> +                        $result = $filter->filter();
> +                                       // and cahge the executed flag to ture
> +                                       $_pLogPipelineRegisteredFilters["$filterClass"] = true;
> +                        // if there was an error, we want to keep going
> +                    }
>                  }
>              }
>
>
> _______________________________________________
> pLog-svn mailing list
> pLog-svn at devel.lifetype.net
> http://limedaley.com/mailman/listinfo/plog-svn
>


More information about the pLog-svn mailing list