Description:
The shared compatibility libraries available for download on this page:
http://dev.mysql.com/downloads/mysql/4.1.html
Appear to be incomplete. I tested this using the RPMs from the "Red Hat Enterprise Linux
3 RPM (x86) downloads" section, but judging from the file sizes reported for other
platforms it appears that in all cases the "shared compatibility libraries" are identical
to the standard "shared libraries".
This is a serious problem because anything that depends on the older shared libraries
will cease to function, resulting in a denial of service. In my case I noticed the
problem when Apache refused to restart:
"Cannot load /etc/httpd/modules/mod_auth_mysql.so into server: libmysqlclient.so.10:
cannot open shared object file: No such file or directory"
To see the cause of the problem, compare the file sizes of the following RPMs (for the
previous version, 4.1.20):
1663373 MySQL-shared-compat-4.1.20-0.rhel3.i386.rpm
1183446 MySQL-shared-standard-4.1.20-0.rhel3.i386.rpm
Note that the shared compatibility variant is significantly larger, because it contains
the older compatibility versions of the shared libraries. But look at the file sizes for
version 4.1.21 below, and note that the compatibility variant is actually a few bytes
smaller!
1173276 MySQL-shared-compat-4.1.21-0.rhel3.i386.rpm
1184092 MySQL-shared-standard-4.1.21-0.rhel3.i386.rpm
Here is a listing of the contents of the 4.1.21 compatibility RPM, produced using "rpm -q
--dump --package":
/usr/lib/libmysqlclient.so 24 1153391670 00000000000000000000000000000000 0120777 root
root 0 0 1793 libmysqlclient.so.14.0.0
/usr/lib/libmysqlclient.so.14 24 1153391670 00000000000000000000000000000000 0120777 root
root 0 0 2560 libmysqlclient.so.14.0.0
/usr/lib/libmysqlclient.so.14.0.0 1174404 1153391671 042ee1c839ea36cbdb8c322319b2880b
0100755 root root 0 0 1792 X
/usr/lib/libmysqlclient_r.so 26 1153391670 00000000000000000000000000000000 0120777 root
root 0 0 18692 libmysqlclient_r.so.14.0.0
/usr/lib/libmysqlclient_r.so.14 26 1153391670 00000000000000000000000000000000 0120777
root root 0 0 18700 libmysqlclient_r.so.14.0.0
/usr/lib/libmysqlclient_r.so.14.0.0 1182664 1153391671 a7dbf18b56a1b1f6313d954d2d63398a
0100755 root root 0 0 0 X
And note that it is almost identical to the contents of the non-compatibility RPM:
/usr/lib/libmysqlclient.so 24 1153331468 00000000000000000000000000000000 0120777 root
root 0 0 35523 libmysqlclient.so.14.0.0
/usr/lib/libmysqlclient.so.14 24 1153331468 00000000000000000000000000000000 0120777 root
root 0 0 12627 libmysqlclient.so.14.0.0
/usr/lib/libmysqlclient.so.14.0.0 1180748 1153333472 96ca3a562098a4f8e4b2c70490b5071b
0100755 root root 0 0 0 X
/usr/lib/libmysqlclient_r.so 26 1153331468 00000000000000000000000000000000 0120777 root
root 0 0 0 libmysqlclient_r.so.14.0.0
/usr/lib/libmysqlclient_r.so.14 26 1153331468 00000000000000000000000000000000 0120777
root root 0 0 16991 libmysqlclient_r.so.14.0.0
/usr/lib/libmysqlclient_r.so.14.0.0 1189008 1153333474 b51c25cb41e28d6eaeebf818ab7b3a33
0100755 root root 0 0 12696 X
Compare this with version 4.1.20 of the compatibility libraries, and note that they
contain more files:
/usr/lib/libmysqlclient.so 24 1148687703 00000000000000000000000000000000 0120777 root
root 0 0 0 libmysqlclient.so.14.0.0
/usr/lib/libmysqlclient.so.10 24 1148687704 00000000000000000000000000000000 0120777 root
root 0 0 0 libmysqlclient.so.10.0.0
/usr/lib/libmysqlclient.so.10.0.0 224606 1148687704 579c6fecfad48cb3e8748811026f4890
0100755 root root 0 0 0 X
/usr/lib/libmysqlclient.so.12 24 1148687703 00000000000000000000000000000000 0120777 root
root 0 0 0 libmysqlclient.so.12.0.0
/usr/lib/libmysqlclient.so.12.0.0 251559 1148687703 2fae279de1a3929b178d89333103eacc
0100755 root root 0 0 0 X
/usr/lib/libmysqlclient.so.14 24 1148687703 00000000000000000000000000000000 0120777 root
root 0 0 0 libmysqlclient.so.14.0.0
/usr/lib/libmysqlclient.so.14.0.0 1174404 1148687704 3321ec4c92a8aa37869f45ae461d6a0b
0100755 root root 0 0 0 X
/usr/lib/libmysqlclient_r.so 26 1148687703 00000000000000000000000000000000 0120777 root
root 0 0 0 libmysqlclient_r.so.14.0.0
/usr/lib/libmysqlclient_r.so.10 26 1148687704 00000000000000000000000000000000 0120777
root root 0 0 0 libmysqlclient_r.so.10.0.0
/usr/lib/libmysqlclient_r.so.10.0.0 230560 1148687704 f358f523cb4a364eb8105d9a0f49f943
0100755 root root 0 0 17384 X
/usr/lib/libmysqlclient_r.so.12 26 1148687703 00000000000000000000000000000000 0120777
root root 0 0 0 libmysqlclient_r.so.12.0.0
/usr/lib/libmysqlclient_r.so.12.0.0 259501 1148687703 ab26ebef4759527211545190ccedebb5
0100755 root root 0 0 0 X
/usr/lib/libmysqlclient_r.so.14 26 1148687703 00000000000000000000000000000000 0120777
root root 0 0 0 libmysqlclient_r.so.14.0.0
/usr/lib/libmysqlclient_r.so.14.0.0 1182664 1148687704 975c049c8d71a123c30392fdb182cf98
0100755 root root 0 0 0 X
How to repeat:
Download the RPMs from http://dev.mysql.com/downloads/mysql/4.1.html
Perform comparisons using "rpm -q --dump --package full-name-of.rpm"
Suggested fix:
Workaround:
Go back to 4.1.20:
Permanent fix:
Repackage the RPM files for 4.1.21 so that they contain missing files.