Forum Programmation.python module rexec

Posté par  (site web personnel) .
Étiquettes : aucune
0
23
fév.
2005
J'esssaie d'utiliser rexec mais ce n'est pas facile a comprendre comment ca fonctionne alors je demande de l'aide.

D'abord, un howto que j'ai trouvé: http://cdrom.gnutemberg.org/python/rexec.pdf(...)
La doc: http://docs.python.org/lib/module-rexec.html(...)

Je souhaite faire un programme qui téléchargerait un fichier python qui importerait des modules qui seraient téléchargés ou non. Les fichiers téléchargés doivent se trouver dans un environnement protégé ...

Il est apparament possible d'instancier la classe RExec:

import rexec

r_env = rexec.RExec()


Le problème: c'est qu'une fois qu'on a notre environnement r_env, comment faire pour qu'il devienne "environnement par défaut" ?

Je veux dire: comment faire pour que tout ce que je fais soit dans cet environnement protégé, dans préfixer toutes mes lignes de code par "r_env.". Des idées ?


Merci des réponses

Mildred
  • # Disabled?

    Posté par  . Évalué à 3.

    Si j'en crois la documentation de Rexec, il semblerait que la fonctionnalité soit désactivée depuis python 2.3 (ou alors ils ont oublié de mettre la doc à jour pour la 2.4, mais ça paraît bizarre).

    Toujours d'après la doc, il semble que ce soit lié à des problèmes de securité.

    Cela dit, je serais bien content de me tromper : j'avais beaucoup regretté la disparition de ce module.
    • [^] # Re: Disabled?

      Posté par  (site web personnel) . Évalué à 1.

      Effectivement, il déclenche une exception lorsqu'on essaie de l'utiliser. Mais il doit bien y avoir un moyen de l'activer ...
      C'est vrai, il y a aussi un problème de sécurité mais je ne pense pas que ce soit très grave pour mon programme. Il restera peut être en développement peandant 10 ans et les choses ont le temps de changer.

      Apparament tu as l'air de connaître un peu ce motule ... sais-tu comment on l'utilise ?
      • [^] # Re: Disabled?

        Posté par  . Évalué à 2.

        Apparament tu as l'air de connaître un peu ce motule ... sais-tu comment on l'utilise ?

        Hélas non, j'en suis bien navré. Je commençais à peine à m'y intéresser quand il a été retiré.

        Mais c'est vrai que c'est une fonctionnalité importante, pour python, et j'espère qu'on le reverra dans une prochaine version pas trop lointaine.
        • [^] # Re: Disabled?

          Posté par  (site web personnel) . Évalué à 1.

          Si tu veux l'utiliser (pas en prod, c'est pas sécurisé), tu peux enlever la ligne
          raise RuntimeError, "This code is not secure in Python 2.2 and 2.3"
          dans la méthode __init__ de la classe RExec

          Apparament, il serait possible de redéfinir des fonctions dans __builtin__ (pas __builtins__), sais tu comment on fait ...
          Il me suffirait de redéfinir la fonction __import__() [1], file(), open() et peut être d'autres pour que mon enironnement soit sécurisé ...
          Jepeux créer mes propres fonctions ou prendre celles de rexec ...

          Voila, je n'ai presque pas fait de python alors je demande :-) Merci des réponses.

          [1]: http://docs.python.org/lib/built-in-funcs.html(...)
  • # rexec.RExec.make_builtin()

    Posté par  (site web personnel) . Évalué à 1.

    La source est la: http://cvs.sourceforge.net/viewcvs.py/python/python/dist/src/Lib/re(...)

    Apparament, ce que je cherche est dans la méthode make_builtin dont voici le code:
    def make_builtin(self):
    m = self.copy_except(__builtin__, self.nok_builtin_names)
    m.__import__ = self.r_import
    m.reload = self.r_reload
    m.open = m.file = self.r_open

    (em passant, notmalement l'élément <tt> est inline et pas block ... Ce serait mieux d'utiliser <code>)

    Cette méthode copie le module __builtin__ et remplace les fonctions critiques par les siennes. mais ce que je ne comprend pas c'est que rien d'est renvoyé. "m" ne remplace pas "__builtin__" ...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.