Index: search404.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/search404/search404.module,v
retrieving revision 1.15.2.12
diff -u -p -r1.15.2.12 search404.module
--- search404.module	26 Jun 2009 10:47:06 -0000	1.15.2.12
+++ search404.module	17 Aug 2009 10:05:02 -0000
@@ -100,7 +100,7 @@ function search404_search_engine_query()
  */
 function search404_page() {
   drupal_set_title(t('Page not found'));
-  if (module_exists('search') && user_access('search content')) {
+  if (module_exists('search') && (user_access('search content') || user_access('search by page'))) {
     $keys = "";
     // if apachesolr_search is installed use apachesolr_search instead default node search
     $type_search = (module_exists('apachesolr_search')) ? 'apachesolr_search' : 'node';
@@ -112,7 +112,20 @@ function search404_page() {
     }
     if ($keys) {
       // TODO: watchdog?
-      if (module_exists('google') && user_access('search Google CSE') && variable_get('search404_do_google_cse', false)) {
+      if (module_exists('search_by_page')) {
+        drupal_set_message(t('The page you requested does not exist. For your convenience, a search was performed using the query %keys.', array('%keys' => check_plain($keys))), 'error');
+        drupal_goto('search_pages/'. $keys);
+        // EVIL HAXX!
+          $oldgetq = $_GET['q'];
+          $olddestination = $_REQUEST['destination'];
+          unset($_REQUEST['destination']);
+          $_GET['q'] = "search/$type_search/$keys";
+          $results = theme('search_results', $results, 'node');
+          $_GET['q'] = $oldgetq;
+          $_REQUEST['destination'] = $olddestination;
+        // END OF EVIL HAXX!
+      }
+      elseif (module_exists('google') && user_access('search Google CSE') && variable_get('search404_do_google_cse', false)) {
         drupal_set_message(t('The page you requested does not exist. For your convenience, a google search was performed using the query %keys.', array('%keys' => check_plain($keys))), 'error');
         drupal_goto ('search/google/'. $keys);
       } else {
