[sork] Forwards and customSQL

horde at corwyn.net horde at corwyn.net
Tue Oct 7 16:34:40 UTC 2008




I'm having several problems with forwards running customsql. I'm 
running the current version, 3.0.1, and trying to get it to work in 
conjunction with postfixadmin, which I think is imminently doable

The first problem is that when building the SQL query, customsql.php 
is adding extra single quotes to the SQL. that happens because of the 
code at ./forwards/Driver/customsql.php:

# RGS changed to stop double quotes
#$query = str_replace("\U", $this->_db->quote(Auth::getAuth()), $query);
#$query = str_replace("\T", $this->_db->quote($target), $query);
#$query = str_replace("\L", $this->_db->quote($keeplocal), $query);
#$query = str_replace("\P", $this->_db->quote($password), $query);
$query = str_replace("\U", Auth::getAuth(), $query);
$query = str_replace("\T", $target, $query);
$query = str_replace("\L", $keeplocal, $query);
$query = str_replace("\P", $password, $query);

Example result in /var/log/mysql:
60172 Query       INSERT INTO alias (address,goto) VALUES 
(''test222 at example.com'','''')

Note that there's an extra set of single quotes.


I've already made that code change, to get to the next thing that's 
causing me issues:


forwards does not appear to honor customsql as an option. When I 
configure forwards to use customSQL, the mysql queries that show up 
in /var/log/mysql do not appear to use the values from 
./horde/forwards/config/conf.php.

forwards/conf.php:
<?php
/* CONFIG START. DO NOT CHANGE ANYTHING IN OR AFTER THIS LINE. */
// $Horde: forwards/config/conf.xml,v 1.7 2005/04/13 18:06:16 chuck Exp $
$conf['server']['params']['username'] = 'removed';
$conf['server']['params']['password'] = 'removed';
$conf['server']['params']['protocol'] = 'unix';
$conf['server']['params']['database'] = 'postfix';
$conf['server']['params']['charset'] = 'utf-8';
$conf['server']['params']['splitread'] = false;
$conf['server']['params']['phptype'] = 'mysqli';
$conf['server']['params']['driverconfig'] = 'custom';
$conf['server']['params']['query_select'] = 'select * from alias 
where address =
$conf['server']['params']['query_set'] = 'UPDATE alias SET goto = \T 
WHERE addre
$conf['server']['params']['query_disable'] = 'UPDATE alias SET goto = 
\U WHERE a
$conf['server']['params']['column_target'] = 'goto';
$conf['server']['params']['column_keeplocal'] = 'active';
$conf['server']['driver'] = 'customsql';
$conf['enabled']['keeplocal'] = false;
$conf['enabled']['authenticate'] = false;
$conf['user']['refused'] = array('root', 'bin', 'daemon', 'adm', 
'lp', 'shutdown
$conf['menu']['apps'] = array();
/* CONFIG END. DO NOT CHANGE ANYTHING IN OR BEFORE THIS LINE. */


If I try to make a change to the user's forwards info, I get the 
following data from /var/log/mysql (with the fix to prevent double, 
single-quotes):
  60471 Query       INSERT INTO alias (address,goto) VALUES 
('test222 at example.com','test222 at example.com,test222#example.com at autoreply.example.com')

Note that this is an INSERT query, where in conf.php it's set up as 
an update query.

The same happens for the remove choice, you get a DELETE query:
  60421 Query       DELETE FROM alias WHERE goto = '\T'

Additionally, note that it's failing to parse out the '\T' to the 
correct result. Don't care much about that, as I don't want to use 
this part of the code, but it's still not correct.

As you can see I've figured out how to resolve my problem with too 
many single-quotes, but I don't quite grok how horde passes around 
the conf.php values. I know that the problem is in 
./forwards/lib/Driver/customsql.php:
         $query = $this->_params['query_set'];
and
         $query = $this->_params['query_disable'];


but I don't understand why it's failing to pull the correct value 
from the conf.php file.

Rick





Rick Steeves
http://www.sinister.net

"The journey is the destination"



More information about the sork mailing list