Package: sympa Version: sympa-5.2.1-0.1 Followup-For: Bug #336157 * Don't "exit 1" when install-${DBTYPE}-db ends successfully. * Use the same tools we will use to create database to know if we can connect mysql without password.
If the root mysql password is in section [mysql] in .my.cnf, mysql mysql succeds but perl DBI will fail. diff -ur sympa-5.2.1.deb/debian/db/install-mysql-db.pl sympa-5.2.1/debian/db/install-mysql-db.pl --- sympa-5.2.1.deb/debian/db/install-mysql-db.pl 2006-12-13 23:18:16.000000000 +0100 +++ sympa-5.2.1/debian/db/install-mysql-db.pl 2006-12-14 01:25:11.000000000 +0100 @@ -81,9 +81,17 @@ if ($userpass ne "") { $command .= " IDENTIFIED BY '$userpass'"; } -$dbh->do($command); +eval {$dbh->do($command)}; + +if ($@) { + die "$0: failed to create $database user: [EMAIL PROTECTED]"; + exit 1; +} + $dbh->disconnect(); +exit 0; + sub usage { die "Usage: install-mysql-db.pl -d <database> [-a <adminpass>] [-u <userpass>] [-h <hostname>] [-p <port>] [-w <user>]\n"; } diff -ur sympa-5.2.1.deb/debian/postinst sympa-5.2.1/debian/postinst --- sympa-5.2.1.deb/debian/postinst 2006-12-13 23:18:16.000000000 +0100 +++ sympa-5.2.1/debian/postinst 2006-12-14 01:25:11.000000000 +0100 @@ -284,7 +284,7 @@ db_type="mysql" if [ "$RET" = "false" ]; then # Check if we can gain access to MySQL without password - if mysql mysql </dev/null; then + if perl -e 'use DBI; $dsn = "DBI:mysql:mysql;mysql_read_default_file=/root/.my.cnf"; $dbh = DBI->connect($dsn);'</dev/null; then pass_required=0 fi fi diff -ur sympa-5.2.1.deb/debian/prepare_db sympa-5.2.1/debian/prepare_db --- sympa-5.2.1.deb/debian/prepare_db 2006-12-13 23:18:16.000000000 +0100 +++ sympa-5.2.1/debian/prepare_db 2006-12-14 01:25:11.000000000 +0100 @@ -89,14 +89,10 @@ if [ "$RET" = "Ident-based" ]; then OPTS="-i $OPTS" fi - if /usr/share/sympa/db/install-pg-db $OPTS -d "$db_name" -h "$db_hostname" -u "$userpassfile"; then - exit 1 - fi + /usr/share/sympa/db/install-pg-db $OPTS -d "$db_name" -h "$db_hostname" -u "$userpassfile" ;; "MySQL") - if /usr/share/sympa/db/install-mysql-db $OPTS -d "$db_name" -h "$db_hostname" -u "$userpassfile"; then - exit 1 - fi + /usr/share/sympa/db/install-mysql-db $OPTS -d "$db_name" -h "$db_hostname" -u "$userpassfile" ;; esac fi
diff -ur sympa-5.2.1.deb/debian/db/install-mysql-db.pl sympa-5.2.1/debian/db/install-mysql-db.pl --- sympa-5.2.1.deb/debian/db/install-mysql-db.pl 2006-12-13 23:18:16.000000000 +0100 +++ sympa-5.2.1/debian/db/install-mysql-db.pl 2006-12-14 01:25:11.000000000 +0100 @@ -81,9 +81,17 @@ if ($userpass ne "") { $command .= " IDENTIFIED BY '$userpass'"; } -$dbh->do($command); +eval {$dbh->do($command)}; + +if ($@) { + die "$0: failed to create $database user: [EMAIL PROTECTED]"; + exit 1; +} + $dbh->disconnect(); +exit 0; + sub usage { die "Usage: install-mysql-db.pl -d <database> [-a <adminpass>] [-u <userpass>] [-h <hostname>] [-p <port>] [-w <user>]\n"; } diff -ur sympa-5.2.1.deb/debian/postinst sympa-5.2.1/debian/postinst --- sympa-5.2.1.deb/debian/postinst 2006-12-13 23:18:16.000000000 +0100 +++ sympa-5.2.1/debian/postinst 2006-12-14 01:25:11.000000000 +0100 @@ -284,7 +284,7 @@ db_type="mysql" if [ "$RET" = "false" ]; then # Check if we can gain access to MySQL without password - if mysql mysql </dev/null; then + if perl -e 'use DBI; $dsn = "DBI:mysql:mysql;mysql_read_default_file=/root/.my.cnf"; $dbh = DBI->connect($dsn);'</dev/null; then pass_required=0 fi fi diff -ur sympa-5.2.1.deb/debian/prepare_db sympa-5.2.1/debian/prepare_db --- sympa-5.2.1.deb/debian/prepare_db 2006-12-13 23:18:16.000000000 +0100 +++ sympa-5.2.1/debian/prepare_db 2006-12-14 01:25:11.000000000 +0100 @@ -89,14 +89,10 @@ if [ "$RET" = "Ident-based" ]; then OPTS="-i $OPTS" fi - if /usr/share/sympa/db/install-pg-db $OPTS -d "$db_name" -h "$db_hostname" -u "$userpassfile"; then - exit 1 - fi + /usr/share/sympa/db/install-pg-db $OPTS -d "$db_name" -h "$db_hostname" -u "$userpassfile" ;; "MySQL") - if /usr/share/sympa/db/install-mysql-db $OPTS -d "$db_name" -h "$db_hostname" -u "$userpassfile"; then - exit 1 - fi + /usr/share/sympa/db/install-mysql-db $OPTS -d "$db_name" -h "$db_hostname" -u "$userpassfile" ;; esac fi