[gull] changer LD_LIBRARY_PATH en cours d'execution

Marc SCHAEFER schaefer at alphanet.ch
Fri Oct 24 19:31:02 CEST 2003


On Fri, Oct 24, 2003 at 05:18:25PM +0000, Vuko Brigljevic wrote:
> d'execution en cherchant la librairie dans le sentier definit
> dynamiquement, soit en "pseudo-code":
> 
> libName  = getLibNameFromRequest();
> loadPath = getLoadPathFromRequest();
> 
> /* chercher la librairie dans le sentier defini   */
> fullLibPath = searchLibInPath(libName,loadPath);
> 
> dlopen(fullLibPath);

en validant loadPath et libName pour des problèmes de sécurité, et en
destant le code de retour de dlopen(), d'accord.

> Ce serait tout a fait faisable, et probablement
> pas si difficile a ecrire, mais je ne peux pas me 
> permettre de le faire dans mon cas, notamment car
> je ne peux modifier la partie du code ou se trouve
> reellement l'appel a dlopen:

Très dommage.

Si le code est *compilable*, alors faire en sorte que cette partie de
code soit compilée avec gcc -Ddlopen(x)=mon_dlopen(x) et écrire
cette fonction-wrapper.

Si le code n'est pas compilable, alors il reste une possibilité:
redéfinir la fonction de bibliothèque dlopen() via un LD_PRELOAD
en une nouvelle fonction qui fait ce qui est nécessaire puis appelle
dlopen(). Cela fonctionnera même si le code est propriétaire -- à ma
connaissance.

On a donné ici même un tel exemple (qui redéfinit le wrapper libc de
open):

http://search.alphanet.ch/cgi-bin/search.cgi?max_results=10&type=long&msgid=Pine.LNX.4.10.10002191148200.25891-100000%40vulcan.alphanet.ch&domain=ml-gull

le code:

http://www.uwsg.indiana.edu/hypermail/linux/kernel/9811.2/0639.html

Pas testé en dehors de la libc, mais ça devrait marcher.

> Si j'ai mal compris ou se trouvait la contradiction,
> je demande pardon pour la generation de bruit inutile ;)

Ce qui manquait c'était l'information essentielle: `ce code est
propriétaire / closed source', ce qui semble maintenant être
le cas: ça complique les choses de ne pas avoir la source.





More information about the gull mailing list