Re: C: Inhalt in Kommentaren

2020-03-29 Diskussionsfäden Heiko Schlittermann
Ich habe das jetzt nicht tiefgründig verfolgt, aber der proftpd hat in
der Ausgabe von `ldd` auch `libdl` dabei, verfügt also vermutlich über
die Fähigkeit, Libraries über `dlopen()` zur Laufzeit zu laden.
Vielleicht wird das dann gemacht.
--
Heiko


signature.asc
Description: PGP signature


Re: C: Inhalt in Kommentaren

2020-03-29 Diskussionsfäden Andreas Fett
Hallo,

On Sun, Mar 29, 2020 at 11:48:41PM +0200, Hilmar Preuße wrote:
> > Schau mal in configure resp. configure.in. Dort wir der Kram mit sed
> > aus den Source Files "verwursted".
> > 
> Hmm, leider weiß ich nicht welches configure Du meinst. In contrib
> selber gibt es keines und im Main Directory finde ich nicht zum Thema odbc.

Ich mein configure(.in) im Toplevel Verzeichnis des Upstream oder Debian
Source Repositories (~ line 3650 im master des Debian Repos).

if test -f $srcdir/contrib/$moduledir/$src ; then
  srcarch=`sed -n '/.*\$Archive: \(.*\)\$.*/s//\1/p' 
"$srcdir/contrib/$moduledir/$src"`
  srclib=`sed -n '/.*\$Libraries: \(.*\)\$.*/s//\1/p' 
"$srcdir/contrib/$moduledir/$src"`
else
  srcarch=
  srclib=
fi

if test -f $srcdir/contrib/$moduledir/$srcinc ; then
  if test -z $srcarch ; then
incarch=`sed -n '/.*\$Archive: \(.*\)\$.*/s//\1/p' 
"$srcdir/contrib/$moduledir/$srcinc"`
  else
incarch=
  fi

  inclib=`sed -n '/.*\$Libraries: \(.*\)\$.*/s//\1/p' 
"$srcdir/contrib/$moduledir/$srcinc"`
else
  incarch=
  inclib=
fi

Da werden die entsprechenden Angaben offensichtlich extrahiert.

> So, ich habe jetzt das Paket zweimal gebaut: einmal mit, einmal ohne
> Patch. Wenn man das erzeugte Shared Object vergleicht fällt nur auf, daß
> das eine gegen libodbc.so.2 gelinkt ist, das Andere nicht.
> 
> hille@debian-amd64-sid:~/devel/proftp_debian/git$ ldd mod_sql_odbc.so
> linux-vdso.so.1 (0x7ffd2f185000)
> libodbc.so.2 => /usr/lib/x86_64-linux-gnu/libodbc.so.2
> (0x7f6c7ec9)
> libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x7f6c7eacd000)
> libltdl.so.7 => /usr/lib/x86_64-linux-gnu/libltdl.so.7
> (0x7f6c7eac2000)
> libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0
> (0x7f6c7eaa1000)
> /lib64/ld-linux-x86-64.so.2 (0x7f6c7ed1f000)
> libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x7f6c7ea9c000)
> hille@debian-amd64-sid:~/devel/proftp_debian/git$ ldd mod_sql_odbc_wo.so
> linux-vdso.so.1 (0x7ffe497b6000)
> libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x7f30a3bf9000)
> /lib64/ld-linux-x86-64.so.2 (0x7f30a3dd9000)
Was auch immer mod_sql_odbc_wo.so sein mag. Vll. "without"?

> Wenn man sich nm -D anschaut gibt es keine Unterschiede. Das einzige
> Symbol, was auf odbc hinweist ist "sql_odbc_module". Ich wäre schon mal
> schwer davon ausgegangen, daß der Link fehlschlägt, wenn ein Symbol
> nicht aufgelöst werden kann. Weiterhin läßt sich der proftp auch mit der
> "reduzierten" Variante des Moduls laden.
Ich denke mal die Module werden via dlopen(3) geladen. Damit ist das
Starten des daemons erstmal kein Problem solange das Modul nicht in der Config
auftaucht. Siehe modules/mod_dso.c. Vll. ist diese _wo.so auch sonne
Art Dummy, dass es sogar dann funzt. Ich bezweifele allerding, dass das Paket
proftpd-mod-mysql dann wirklich funktioniert.

Grüsse
Andreas

-- 
The three chief virtues of a programmer are:
Laziness, Impatience and Hubris. -- Larry Wall


signature.asc
Description: PGP signature


Re: C: Inhalt in Kommentaren

2020-03-29 Diskussionsfäden Daniel Leidert
Am Sonntag, den 29.03.2020, 21:47 +0200 schrieb Hilmar Preuße:
> Moin,
>
> in proftp in Debian haben wir folgenden Patch:
>
> Index: proftpd-dfsg/contrib/mod_sql_odbc.c
> ===
> --- proftpd-dfsg.orig/contrib/mod_sql_odbc.c2018-01-14
> 23:24:03.0 +0100
> +++ proftpd-dfsg/contrib/mod_sql_odbc.c 2018-01-15 20:49:02.0 +0100
> @@ -19,6 +19,7 @@
>   * As a special exemption, TJ Saunders gives permission to link this
> program
>   * with OpenSSL, and distribute the resulting executable, without including
>   * the source code for OpenSSL in the source distribution.
> + * $Libraries: -lodbc $
>   */
>
>  #include "conf.h"
>
> i.e. im Kommentar wird etwas eingefügt. Da ich nicht so recht weiß,
> wonach ich googeln soll: wozu ist der Kommentar gut?

Wenn ich die debian/changelog-Datei richtig interpretiere nutzt proftpd
irgendein System um die Linker flags in den Kommentaren aus dem $Libraries$
keyword zu sammeln. Ggf. werden damit die Linker-flags für die Module definiert
(#519029 deutet auf so etwas hin). Mit `grep -rn Libraries` hat man etliche
Treffer im Quellcode. In ./configure(.in) kann man das gut sehen (Zeile 3635 in
der .in). Sowas ist ganz und gar nicht in den autotools vorgesehen oder muss
ein Relikt ein. Ich habe lange mit den autotools gearbeit und kenne das nicht.

Der Patch fügt nur den Linker-Flag für das Modul hinzu. Warum der zwingend
notwendig ist, geht aus debian/changelog nicht hervor.

MfG Daniel




Re: C: Inhalt in Kommentaren

2020-03-29 Diskussionsfäden Hilmar Preuße
Am 29.03.2020 um 22:31 teilte Andreas Fett mit:
> On Sun, Mar 29, 2020 at 09:47:33PM +0200, Hilmar Preuße wrote:

Moin,

> -lodbc ist ein Linker Flag und gegen das entsprechende Shared Object zu
> linken. In diesem Fall libodbc (www.unixodbc.org resp. libodbc1 Debian
> Package).
> 
OK, klar soweit.

> Schau mal in configure resp. configure.in. Dort wir der Kram mit sed
> aus den Source Files "verwursted".
> 
Hmm, leider weiß ich nicht welches configure Du meinst. In contrib
selber gibt es keines und im Main Directory finde ich nicht zum Thema odbc.

> TL;DR; es sollte IMHO drin bleiben wenn man mod_sql_odbc erfolgreich
> kompilieren möchte. Es sei denn das Debian Paket fummelt noch
> anderweitig in den Linker Flags rum (hab ich mir jetzt nicht
> angeschaut).
> 
So, ich habe jetzt das Paket zweimal gebaut: einmal mit, einmal ohne
Patch. Wenn man das erzeugte Shared Object vergleicht fällt nur auf, daß
das eine gegen libodbc.so.2 gelinkt ist, das Andere nicht.

hille@debian-amd64-sid:~/devel/proftp_debian/git$ ldd mod_sql_odbc.so
linux-vdso.so.1 (0x7ffd2f185000)
libodbc.so.2 => /usr/lib/x86_64-linux-gnu/libodbc.so.2
(0x7f6c7ec9)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x7f6c7eacd000)
libltdl.so.7 => /usr/lib/x86_64-linux-gnu/libltdl.so.7
(0x7f6c7eac2000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0
(0x7f6c7eaa1000)
/lib64/ld-linux-x86-64.so.2 (0x7f6c7ed1f000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x7f6c7ea9c000)
hille@debian-amd64-sid:~/devel/proftp_debian/git$ ldd mod_sql_odbc_wo.so
linux-vdso.so.1 (0x7ffe497b6000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x7f30a3bf9000)
/lib64/ld-linux-x86-64.so.2 (0x7f30a3dd9000)

Wenn man sich nm -D anschaut gibt es keine Unterschiede. Das einzige
Symbol, was auf odbc hinweist ist "sql_odbc_module". Ich wäre schon mal
schwer davon ausgegangen, daß der Link fehlschlägt, wenn ein Symbol
nicht aufgelöst werden kann. Weiterhin läßt sich der proftp auch mit der
"reduzierten" Variante des Moduls laden.

H.
-- 
sigfault
#206401 http://counter.li.org



signature.asc
Description: OpenPGP digital signature


Re: C: Inhalt in Kommentaren

2020-03-29 Diskussionsfäden Andreas Fett
Hallo,

On Sun, Mar 29, 2020 at 09:47:33PM +0200, Hilmar Preuße wrote:
> Index: proftpd-dfsg/contrib/mod_sql_odbc.c
> ===
> --- proftpd-dfsg.orig/contrib/mod_sql_odbc.c2018-01-14
> 23:24:03.0 +0100
> +++ proftpd-dfsg/contrib/mod_sql_odbc.c 2018-01-15 20:49:02.0 +0100
> @@ -19,6 +19,7 @@
>   * As a special exemption, TJ Saunders gives permission to link this
> program
>   * with OpenSSL, and distribute the resulting executable, without including
>   * the source code for OpenSSL in the source distribution.
> + * $Libraries: -lodbc $
>   */
> 

-lodbc ist ein Linker Flag und gegen das entsprechende Shared Object zu
linken. In diesem Fall libodbc (www.unixodbc.org resp. libodbc1 Debian
Package).

proftpd hat da einen recht "interessanten" Mechanismus für seine contrib
Module um das in der autoconf/automake zu verwursten. Idee scheint zu
sein, die contrib Module einfach in den Source Tree packen zu können,
ohne dass der Build Mechanismus angepasst werden muss.

Schau mal in configure resp. configure.in. Dort wir der Kram mit sed
aus den Source Files "verwursted".

Ob das tatsächlich auf die Erkennung der libs beim configure Lauf
einwirkt, oder bloss die Flags beim Linken hinzufügt kann ich nicht
genau sagen, dazu kenne ich das automake Zeugs zu schlecht.

TL;DR; es sollte IMHO drin bleiben wenn man mod_sql_odbc erfolgreich
kompilieren möchte. Es sei denn das Debian Paket fummelt noch
anderweitig in den Linker Flags rum (hab ich mir jetzt nicht
angeschaut).

Grüsse
Andreas

-- 
The three chief virtues of a programmer are:
Laziness, Impatience and Hubris. -- Larry Wall


signature.asc
Description: PGP signature


C: Inhalt in Kommentaren

2020-03-29 Diskussionsfäden Hilmar Preuße
Moin,

in proftp in Debian haben wir folgenden Patch:

Index: proftpd-dfsg/contrib/mod_sql_odbc.c
===
--- proftpd-dfsg.orig/contrib/mod_sql_odbc.c2018-01-14
23:24:03.0 +0100
+++ proftpd-dfsg/contrib/mod_sql_odbc.c 2018-01-15 20:49:02.0 +0100
@@ -19,6 +19,7 @@
  * As a special exemption, TJ Saunders gives permission to link this
program
  * with OpenSSL, and distribute the resulting executable, without including
  * the source code for OpenSSL in the source distribution.
+ * $Libraries: -lodbc $
  */

 #include "conf.h"

i.e. im Kommentar wird etwas eingefügt. Da ich nicht so recht weiß,
wonach ich googeln soll: wozu ist der Kommentar gut?

Hilmar
-- 
sigfault
#206401 http://counter.li.org



signature.asc
Description: OpenPGP digital signature