Re: Postfix y MySQL
On Tue, Jan 21, 2003 at 04:17:02AM +0100, Julen Landa Alustiza wrote:
> No estoy muy puesto en el tema pero no t faltara alguno d los siguientes paquetes?
>
>
> genars@vignemale:~$ apt-cache search postfix mysql
> postfix-mysql - MYSQL map support for Postfix
> postfix-snap-mysql - MYSQL map support for Postfix-snap
Gracias pero:
espai1:~# dpkg -s postfix-mysql
Package: postfix-mysql
Status: install ok installed
[...]
No me puse la versión "snapshot" porque para empezar quería un poco de
estabilidad y no encontrarme con más problemas aparte de los que ya
provoco yo mismo :)
>
> --
> Julen Landa Alustiza
> mundurat.net eko administraria
> julen@mundurat.net
>
Por cierto. Antes, cuando he dicho que tenía el usuario "postfix" dado
de alta me refería a la base de datos. "postfix" (postfix@localhost)
existe en mysql.user y tiene permisos sobre mail.*, como he indicado
antes. Y es curioso, pero le di los permisos con
grant all on mail.* to postfix@localhost identified by '<passwd en \
claro>';
y no me aparece nada en mysql.tables_priv:
mysql> select * from tables_priv;
Empty set (0.07 sec)
mysql> grant all on mail.* to postfix@localhost identified by \
'<password en claro>';
Query OK, 0 rows affected (0.26 sec)
mysql> select * from tables_priv;
Empty set (0.00 sec)
mysql> select database();
+------------+
| database() |
+------------+
| mysql |
+------------+
1 row in set (0.01 sec)
mysql>
Compruebo que efectivamente tiene permisos:
espai1:~# mysql -S /var/run/mysqld/mysqld.sock -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 153 to server version: 3.23.49-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use mail
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------+
| Tables_in_mail |
+----------------+
| alias |
| relocated |
| transport |
| users |
| virtual |
+----------------+
5 rows in set (0.03 sec)
mysql> quit
Bye
espai1:~# mysql -S /var/run/mysqld/mysqld.sock -u postfix -p mail.alias
Enter password:
ERROR 1102: Incorrect database name 'mail.alias'
espai1:~#
Vaya... Parece que se identificó bien pero que finalmente no se le
concedió permiso para acceder a mail.alias. Pero ¿cómo puede ser eso, si
la instrucción GRANT no dio error? [Cuando se usa GRANT no es necesario
ejecutar "flush priovileges;".]
Bueno. Resignación (pero no me gusta nada que me ocurra esto; ¡no me lo
explico!):
[Entro como root]
mysql> grant all on mail.alias to postfix@localhost identified by \
'<password en claro>';
Query OK, 0 rows affected (0.00 sec)
[Lo mismo para mail.relocated, mail.transport, mail.users y
mail.virtual]
* En el GRANT, ¿verdad que con "select" en lugar de "all" tendría
suficiente? El usuario postfix consultará el contenido de las tablas;
no lo modificará de ningún modo.
Ahora ya sale en mysql.tables_priv:
mysql> select * from mysql.tables_priv;
[...]
| localhost | mail | postfix | transport | root@localhost | \
20030121045534 | Select,Insert,... <- Todos los permisos que comprende
"ALL"
[...]
mysql> quit
* Salgo si ejecutar "flush privileges;", porque en teoría no hace falta.
Volvemos a comprobar:
espai1:~# mysql -S /var/run/mysqld/mysqld.sock -u postfix -p mail.alias
Enter password:
ERROR 1102: Incorrect database name 'mail.alias'
Empiezo a pensar que soy el resultado de un experimento genético
fallido, así que:
espai1:~# man mysql
Dando formato a mysql(1), aguarde por favor...
Vaya hombre. No se pone el nombre de la base de datos al final. Un 10
para mí.
espai1:~# mysql -S /var/run/mysqld/mysqld.sock -u postfix -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 157 to server version: 3.23.49-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use mysql
ERROR 1044: Access denied for user: 'postfix@localhost' to database
'mysql'
mysql> use mail
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from alias
-> ;
Empty set (0.05 sec)
En realidad mail.alias está vacía. Todo bien hasta ahora.
A ver cómo se porta cuando recibe un correo:
Jan 21 05:05:48 espai1 postfix/smtpd[5041]: connect from
123.Red-80-39-5.pooles.rima-tde.net[80.39.5.123]
Jan 21 05:05:50 espai1 postfix/smtpd[5041]: 54A89D591:
client=123.Red-80-39-5.pooles.rima-tde.net[80.39.5.123]
Jan 21 05:05:51 espai1 postfix/smtpd[5041]: warning: connect to mysql
server unix:/var/run/mysqld/mysqld.sock: Can't connect to local MySQL
server through socket '/var/run/mysqld/mysqld.sock' (2)
Jan 21 05:05:51 espai1 postfix/smtpd[5041]: fatal:
mysql:/etc/postfix/mysql-transport.cf: table lookup problem
Jan 21 05:05:52 espai1 postfix/master[317]: warning: process
/usr/lib/postfix/smtpd pid 5041 exit status 1
Jan 21 05:05:52 espai1 postfix/master[317]: warning:
/usr/lib/postfix/smtpd: bad command startup -- throttling
Jan 21 05:05:52 espai1 postfix/cleanup[5042]: warning: premature
end-of-input from cleanup socket while reading input attribute name
Pues sigue sin funcionar. Para que no haya dudas:
# /etc/postfix/mysql-transport.cf
user = postfix
password = <password en claro>
dbname = mail
table = transport
select_field = destination
where_field = domain
#hosts = 127.0.0.1
#hosts = localhost
hosts = unix:/var/run/mysqld/mysqld.sock
mysql> describe transport;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | | PRI | NULL | auto_increment |
| domain | varchar(128) | | UNI | | |
| destination | varchar(128) | | | | |
+-------------+--------------+------+-----+---------+----------------+
3 rows in set (0.03 sec)
Supongo que los errores posteriores son consecuencia de la no conexión a
la base de datos.
Pongo ahora como anexo el fichero /etc/mysql/my.cnf, aunque me parece
que es un poco inútil porque sólo he tocado la línea "skip-networking"
(y sin resultado, por cierto, como he cometado en un mensaje anterior).
Venga, gracias a tod@s.
Pepe.
--
José Marcos Chalmés García - Public key ID: 0x6FDE933B
www.polinux.upv.es - www.debian.org - www.gnu.org - www.bsd.org - ...
I use free software | Utilitze programari lliure | Uso software libre
---------------------------------------------------------------------
# You can copy this to one of:
# /etc/mysql/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is /var/lib/mysql) or
# ~/.my.cnf to set user-specific options.
#
# One can use all long options that the program supports.
# Run the program with --help to get a list of available options
# This will be passed to all mysql clients
[client]
#password = my_password
port = 3306
socket = /var/run/mysqld/mysqld.sock
# Here is entries for some specific programs
# The following values assume you have at least 32M ram
[safe_mysqld]
err-log = /var/log/mysql/mysql.err
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
#
# You can also put it into /var/log/mysql/mysql.log but I leave it in /var/log
# for backward compatibility. Both location gets rotated by the cronjob.
#log = /var/log/mysql/mysql.log
log = /var/log/mysql.log
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
#20030121
#language = /usr/share/mysql/english
language = /usr/share/mysql/spanish
skip-locking
#
# The skip-networkin option will no longer be set via debconf menu.
# You have to manually change it if you want networking i.e. the server
# listening on port 3306. The default is "disable" - for security reasons.
#20030120
skip-networking
#/20030120
set-variable = key_buffer=16M
set-variable = max_allowed_packet=1M
set-variable = thread_stack=128K
#
# Here you can see queries with especially long duration
#log-slow-queries = /var/log/mysql/mysql-slow.log
#
# The following can be used as easy to replay backup logs or for replication
#server-id = 1
#log-bin = /var/log/mysql/mysql-bin.log
#binlog-do-db = include_database_name
#binlog-ignore-db = include_database_name
#
# Read the manual if you want to enable InnoDB!
skip-innodb
[mysqldump]
quick
set-variable = max_allowed_packet=1M
[mysql]
#no-auto-rehash # faster start of mysql but no tab completition
[isamchk]
set-variable = key_buffer=16M
Reply to: