[syslog-ng] [PATCH 0/3] WIP: Convert syslog-ng to use upstream ivykis
Lennert Buytenhek
buytenh at wantstofly.org
Tue May 8 05:14:19 CEST 2012
On Mon, May 07, 2012 at 11:42:30PM +0200, Gergely Nagy wrote:
> A long long time ago, upstream and BalaBit's version of ivykis started
> to diverge, which - at the time - was necessary, but the intent always
> was to eventually get things upstream and merged, to allow syslog-ng
> to use upstream ivykis, as-is.
>
> With the help of Lennert Buytenhek (ivykis upstream) and Balazs
> Scheidler, I present you the first work in progress patch set against
> syslog-ng that enables it to work with an unmodified ivykis!
(Whoops, I didn't see this email until now.)
Yay! Thanks for doing this work.
> Another thing is that the first patch stops libsyslog-ng-crypto from
> being directly linked to ivykis. This is not an issue when ivykis is
> statically compiled into libsyslog-ng, since all those symbols will be
> exported to other modules, including libsyslog-ng-crypto. However, it
> might become a problem when using a dynamically linked ivykis. I
> haven't tested that case yet.
>
> The reason I remove the link is that if ivykis is statically compiled
> in to both shared objects, the constructors will run twice, as
> dlopen()ing anything linked against libsyslog-ng-crypto will trigger
> them again. This leads to an abort() inside ivykis.
>
> This can be done on the ivykis side too: separate the constructors
> from the init functions, and make the constructors no-op if they ran
> already: this allows the init functions to continue aborting if called
> more than once, but allows the constructors to run twice. I have to
> discuss this with upstream, and see if we need this at all, or if my
> workaround of removing the linkage from libsyslog-ng-crypto is enough
> and without side effects.
If the constructors run twice but bss variables are still shared,
then yeah, we should do something like what you said.
> But alas, there is another issue!
>
> With the first two patches applied, we'd have a syslog-ng that
> compiles fine against upstream ivykis, and even works. Except it
> doesn't: whenever we try to set an io handler for an fd, we'd end up
> in an abort, because for some reason, we already had a handler set.
>
> I do not understand it quite yet why this happens - the old BalaBit
> fork of ivykis was similarly picky and abort-happy and they did not
> trigger.
(I screwed up here -- mea culpa -- but let's discuss this in the other
thread.)
> Nevertheless! The good news still is, that we're *very* close to being
> able to build with upstream ivykis! A few issues to fix, and then
> comes the next part: going over all the changes that were made to the
> BalaBit fork of ivykis, and send everything upstream that has not been
> sent yet.
Right, there's several changes still in your version of ivykis that
haven't made it into mine (e.g. to have an abstraction for syslog(),
which seems a generally good idea to have, and probably there's more
bits as well). Do you think syslog-ng is ready for inclusion into
e.g. Fedora as-is, or do you want to get those changes merged into
upstream ivykis as well first?
cheers,
Lennert
More information about the syslog-ng
mailing list