On Friday 10 of September 2010 15:48:22 Harald Hoyer wrote: > On 09/08/2010 06:48 PM, Tomasz Paweł Gajc wrote: > > Dnia 2010-09-08, o godz. 18:52:13 > > > > Andrey Borzenkov<arvidjaar@xxxxxxx> napisał(a): > >> Thomas pointed out that default module path may not be correct > >> (Mandriva installs modules under architecture dependent path). > >> Unfortunately rsyslog does not seem to offer any way to query > >> for > >> default configuration values. Here is rather hack - try to load > >> non-existing module and fetch path from error message. > >> > >> Example of error message from version 4.6.4: > >> > >> rsyslogd: could not load module > >> '/lib64/rsyslog/_No_sUcH_MOduLe.so', dlopen: > >> /lib64/rsyslog/_No_sUcH_MOduLe.so: cannot open shared object > >> file: No such file or directory > >> > >> Signed-off-by: Andrey Borzenkov<arvidjaar@xxxxxxx> > >> > >> --- > >> > >> modules.d/98syslog/install | 17 ++++++++++++++++- > >> 1 files changed, 16 insertions(+), 1 deletions(-) > >> > >> diff --git a/modules.d/98syslog/install > >> b/modules.d/98syslog/install index 1fd1b6f..e3d02bf 100755 > >> --- a/modules.d/98syslog/install > >> +++ b/modules.d/98syslog/install > >> @@ -1,6 +1,21 @@ > >> > >> #!/bin/sh > >> if type -P rsyslogd>/dev/null; then > >> > >> - > >> installs="rsyslogd /lib/rsyslog/lmnet.so /lib/rsyslog/imklog.so > >> /lib/rsyslog/imuxsock.so" + # module path can be changed during > >> build and currently rsyslog > >> + # does not provide any means to query for it. Use hack - try > >> to > >> + # load non-existent module and look at error message > >> + R_CONF=/tmp/dracut.rsyslog.conf.$$ > >> + R_ERR=/tmp/dracut.rsyslog.err.$$ > >> + R_MODDIR> >> + echo '$ModLoad _No_sUcH_MOduLe'> $R_CONF > >> + if [ -s $R_CONF ]; then > >> + rsyslogd -N 1 -f $R_CONF 2> $R_ERR> /dev/null > >> + R_MODDIR=$(grep ' could not load > >> module .*_No_sUcH_MOduLe' $R_ERR) > >> + R_MODDIR=${R_MODDIR#*could not load module \'} > >> + R_MODDIR=${R_MODDIR%\', *} > >> + R_MODDIR=${R_MODDIR%/*} > >> + fi > >> + [ -n "$R_MODDIR" ] || R_MODDIR=/lib/rsyslog > >> + installs="rsyslogd $R_MODDIR/lmnet.so $R_MODDIR/imklog.so > >> $R_MODDIR/imuxsock.so" elif type -P syslogd>/dev/null; then > >> > >> installs="syslogd" > >> > >> elif type -P syslog-ng>/dev/null; then > > > > Indeed this patch is more precise than my simplified one ;) > > ugly hack :-/ plus you want mktemp to prevent attacks.. Just to make sure - it was NAK? :)
Attachment:
signature.asc
Description: This is a digitally signed message part.