On 02/03/2018 04:29 PM, Demetris Demetriou wrote: > Package: pure-ftpd-mysql > Severity: important > > Hello, > > Pure-ftpd fails to start on newer MariaDB versions (>=10.2) due to an issue > with my_make_scrambled_password. Full comment by MariaDB developers below. > More > info at > https://jira.mariadb.org/browse/MDEV-12889?focusedCommentId=97156&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment- > tabpanel#comment-97156 > > Quoted comment: > "There is definitely an issue with pureftpd. Or, rather, there was. Here's the > full story: > > In its early days, say, about 20 years ago, libmysqlclient did not version > symbols and did not limit their visibility. Some functions were documented — > they were client API, and we promised to keep them stable, working over years. > Other functions were not documented, they were internal, no promises. But they > were exported and available too. > > Later, in MariaDB time, we took a closer look at that. RedHat was versioning > libmysqlclient symbols. Old symbols from libmysqlclient.so.16.0.0 had the > version libmysqlclient_16, newer symbols had the version libmysqlclient_18. > Internal symols was hidden, with few exceptions. One of such exceptions was > my_make_scrambled_password, because pureftpd started using it since the old > days, when everything was kind of allowed. Debian had a different, simpler > (and > less correct) approach to versioning, all symbols had libmysqlclient_18 > version. In MariaDB we managed to create a library compatible with both > approaches. my_make_scrambled_password was not hidden, with the comment "for > pureftpd". > > Now, a couple of days ago, I wanted to report this bug to pureftpd, to have it > finally fixed and not use internal non-public libmysqlclient symbols. And I > found that pureftpd source have this: > > # ifdef HAVE_MY_MAKE_SCRAMBLED_PASSWORD > my_make_scrambled_password(scrambled_password, password, > strlen(password)); > # elif defined(HAVE_MAKE_SCRAMBLED_PASSWORD) > make_scrambled_password(scrambled_password, password); > # else > { > SHA1_CTX ctx; > unsigned char h0[20], h1[20]; > char *p; > > SHA1Init(&ctx); > SHA1Update(&ctx, password, strlen(password)); > SHA1Final(h0, &ctx); > SHA1Init(&ctx); > SHA1Update(&ctx, h0, sizeof h0); > pure_memzero(h0, sizeof h0); > SHA1Final(h1, &ctx); > *scrambled_password = '*'; > hexify(scrambled_password + 1U, h1, > (sizeof scrambled_password) - 1U, sizeof h1); > *(p = scrambled_password) = '*'; > while (*p++ != 0) { > *p = (char) toupper((unsigned char) *p); > } > } > # endif > That is, it only uses make_scrambled_password if it's available, otherwise it > can perfectly do without. So, now it's Debian bug, because they build pureftpd > to use internal libmysqlclient symbols, while they perfectly can avoid that. > > Even more, I've found that in the latest pureftpd sources on github, they've > removed this ifdef and don't use make_scrambled_password at all anymore. > https://github.com/jedisct1/pure- > ftpd/commit/27443b29320d85352d8b52c0120836843e10c0f9 > > So it was pureftpd issue, and they've fixed it. > Sergei Golubchik > Missing versioning is our issue and we'll fix it." - Sergei Golubchik > > > Waiting for the newer version to trickle down through the normal release cycle > would mean that every one that uses pure-ftpd with newer MariaDB servers will > wait at least a couple of years for a solution, which in production > environments is not an acceptable solution. The easiest solution would be to > provide an up-to-date version through debian-backports, or alternatively bump > up the package in Debian stable to the latest version through an exception to > the normal release schedule. >
Hello Demetris, I will checkout your suggestions how to solve this problems. Thanks for your report. Regards Racke > > > > -- System Information: > Debian Release: 9.3 > APT prefers stable-updates > APT policy: (500, 'stable-updates'), (500, 'stable') > Architecture: amd64 (x86_64) > Foreign Architectures: i386 > > Kernel: Linux 4.9.0-5-amd64 (SMP w/4 CPU cores) > Locale: LANG=en_US.utf8, LC_CTYPE=en_US.utf8 (charmap=UTF-8), > LANGUAGE=en_US:en (charmap=UTF-8) > Shell: /bin/sh linked to /bin/dash > Init: systemd (via /run/systemd/system) > > Versions of packages pure-ftpd-mysql depends on: > ii libc6 2.24-11+deb9u1 > ii libcap2 1:2.25-1 > pn libmariadbclient18 <none> > ii libpam0g 1.1.8-3.6 > ii libssl1.1 1.1.0f-3+deb9u1 > ii lsb-base 9.20161125 > pn openbsd-inetd | inet-superserver <none> > pn pure-ftpd-common <none> > ii zlib1g 1:1.2.8.dfsg-5 > > pure-ftpd-mysql recommends no packages. > > pure-ftpd-mysql suggests no packages. > -- Ecommerce and Linux consulting + Perl and web application programming. Debian and Sympa administration. Provisioning with Ansible.