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 Larry Cow . Évalué à 3.
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 Mildred (site web personnel) . Évalué à 1.
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 Larry Cow . Évalué à 2.
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 Mildred (site web personnel) . Évalué à 1.
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 Mildred (site web personnel) . Évalué à 1.
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.