433 lines
32 KiB
HTML
433 lines
32 KiB
HTML
|
<HTML><HEAD>
|
|||
|
<BASEFONT FACE="Times New Roman" SIZE="2" COLOR="#000000">
|
|||
|
</HEAD>
|
|||
|
<BODY>
|
|||
|
<div><H3><b>interp Commandes Internes Tcl</b></H3></div>
|
|||
|
<HR ALIGN="center">
|
|||
|
<div><b>NOM</b></div> <br>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">interp - Cr<43>e et manipule des interpr<70>teurs Tcl
|
|||
|
</div> <br>
|
|||
|
<div><b>SYNTAXE</b></div> <br>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;"><b>interp </b><i>option </i>?<i>arg arg ...</i>?
|
|||
|
</div><br>
|
|||
|
<div><b>DESCRIPTION</b></div> <br>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Cette commande permet la cr<63>ation d'un ou plusieurs nouveaux interpr<70>teurs Tcl qui coexistent avec l'interpr<70>teur cr<63>ateur dans la m<>me application. L'interpr<70>teur cr<63>ateur est appel<65> le <i>ma<EFBFBD>tre</i> et le nouvel interpr<70>teur est appel<65> l'<i>esclave</i>. Un ma<6D>tre peut cr<63>er n'importe quel nombre d'esclaves, et chaque esclave peut lui-m<>me cr<63>er des esclaves suppl<70>mentaires pour lequel il est ma<6D>tre, cr<63>ant ainsi une hi<68>rarchie d'interpr<70>teurs. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Chaque interpr<70>teur est ind<6E>pendant des autres: il a son propre namespace pour les commandes, fonctions, et variables globales. Un ma<6D>tre interpr<70>teur peut cr<63>er des connections entre ses esclaves et lui-m<>me en utilisant un m<>canisme appel<65> un <i>alias</i> Un <i>alias</i> est une commande dans un interpr<70>teur esclave qui, quand elle est appel<65>e, provoque l'appel d'une commande dans son interpr<70>teur ma<6D>tre ou dans un autre interpr<70>teur esclave Les seules autres connections entre interpr<70>teurs sont au travers de variable d'environnements (la variable<b> env</b>), qui sont normalement partag<61>es entre tous les interpr<70>teurs dans l'application. Notez que le namespace pour les fichiers (tel que les noms renvoy<6F> par la commande<A HREF="142.htm"><b> open</b></A>) n'est pas partag<61> entre interpr<70>teurs. Des commandes explicites sont fournies pour partager les fichiers et transf<73>rer les r<>f<EFBFBD>rences <20> un fichier ouvert d'un interpr<70>teur <20> un autre. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">La commande <b>interp</b> fournit aussi le support des interpr<70>teurs<i> safe</i> Un interpr<70>teur s<>r est un esclave dont les fonctions ont <20>t<EFBFBD> grandement restreintes, ainsi il est plus s<>r d'ex<65>cuter un script <20>tranger sans risque pour les autres interpr<70>teurs ou l'environnement d'application. Par exemple, toutes commandes de cr<63>ation de canal IO et les commandes de cr<63>ation de sous-process sont rendues inaccessible aux interpr<70>teurs s<>rs. Voir INTERPRETEURS SURS ci-dessous pour plus d'information sur les fonctionnalit<69>s pr<70>sentes dans un interpr<70>teur s<>r. Les fonctionalit<69>s dangereuses ne sont pas enlev<65>es de l'interpr<70>teur s<>r; par contre, elle sont <i>cach<EFBFBD>es</i>, ainsi seul les interpr<70>teurs de confiance peuvent y acceder. Pour une explication d<>taill<6C>e des commandes cach<63>es, voir COMMANDES CACHEES, ci-dessous. Le m<>canisme d'alias peut <20>tre utilis<69> pour une communication prot<6F>g<EFBFBD>e (analogue <20> un appel kernel) entre un interpr<70>teur esclave et son ma<6D>tre. Voir INVOCATION D'ALIAS, ci-dessous, pour plus de d<>tails sur comment le m<>canisme d'alias fonctionne. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Un nom d'interpr<70>teur qualifi<66> est une liste Tcl correcte contenant une sous ensemble de ses anc<6E>tres dans la hi<68>rarchie de l'interpr<70>teur, termin<69>e par les cha<68>ne d<>signant l'interpr<70>teur dans son ma<6D>tre imm<6D>diat. Les noms d'interpr<70>teur sont relatif <20> l'interpr<70>teur dans lequel ils sont utilis<69>s. Par exemple, si <b>a</b> est un esclave de l'interpr<70>teur courant et qu'il a un esclave <b>a1</b>, qui <20> son tour a un esclave <b>a11</b>, le nom qualifi<66> de <b>a11</b> dans <b>a</b> est la liste <b>a1 a11</b>. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">La commande<b> interp</b>, d<>crite ci-dessous, accepte des noms d'interpr<70>teur qualifi<66>s comme arguments; l'interpr<70>teur dans lequel la commande est <20>valu<6C>e peut toujours <20>tre r<>f<EFBFBD>renc<6E> comme <b>{}</b> (la liste ou cha<68>ne vide). Notez qu'il est impossible de se referer <20> un ma<6D>tre (ancestor) interpr<70>teur par son nom dans un interpr<70>teur esclave except<70> au travers d'alias. Egalement, il n'y a pas de nom global par lequel se referer au premier interpr<70>teur cr<63><72> dans une application. L'ensemble de ces restrictions sont motiv<69>es par des raisons de s<>curit<69> <br>
|
|||
|
</div> <br>
|
|||
|
<div><b>LA COMMANDE INTERP </b></div> <br>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">La commande <b>interp</b> est utilis<69>e pour cr<63>er, effacer, et manipuler des interpr<70>teurs esclaves, et pour partager ou transferer des canaux entre interpr<70>teurs Elle peut avoir une parmi plusieurs formes, d<>pendantes de l'argument<i> option</i>:
|
|||
|
<DL>
|
|||
|
<DT><br><b>interp</b> <b>alias</b> <i>srcPath</i> <i>srcCmd</i>
|
|||
|
</DT><DD>Renvoie une liste Tcl dont les <20>l<EFBFBD>ments sont les <i>targetCmd</i> et <i>arg</i>s associ<63>s <20> l'alias nomm<6D> <i>srcCmd</i> (ce sont toutes les valeurs sp<73>cifi<66>es quand l'alias a <20>t<EFBFBD> cr<63><72>; il est possible que la commande source actuelle dans l'esclave soit diff<66>rente de <i>srcCmd</i> si elle a <20>t<EFBFBD> renomm<6D>e).
|
|||
|
</DD>
|
|||
|
<DT><br><b>interp</b> <b>alias</b> <i>srcPath</i> <i>srcCmd</i> <b>{}</b>
|
|||
|
</DT><DD>Efface l'alias de <i>srcCmd</i> dans l'interpr<70>teur esclave identifi<66> par <i>srcPath</i>. <i>srcCmd</i> se r<>f<EFBFBD>re au nom sous lequel l'alias a <20>t<EFBFBD> cr<63><72> si la commande source a <20>t<EFBFBD> renomm<6D>e, la commande renomm<6D>e sera effac<61>e.
|
|||
|
</DD>
|
|||
|
<DT><br><b>interp</b> <b>alias</b> <i>srcPath</i> <i>srcCmd</i> <i>targetPath</i> <i>targetCmd </i>?<i>arg arg ...</i>?
|
|||
|
</DT><DD>Cette commande cr<63>e un alias entre un esclave et un autre (voyez la commande <b>alias</b> esclave ci-dessous pour la cr<63>ation d'alias entre un esclave et son ma<6D>tre) Dans cette commande, chacun des interpr<70>teurs esclave peut <20>tre n'importe o<> dans la hi<68>rarchie des interpr<70>teurs sous l'interpr<70>teur qui appelle la commande. <i>SrcPath</i> et <i>srcCmd</i> identifient le source de l'alias. <i>SrcPath</i> est une liste Tcl dont les <20>l<EFBFBD>ments d<>signent un interpr<70>teur particulier Par exemple, "<b>a b</b>" identifie un interpr<70>teur <b>b</b>, qui est une esclave de l'interpr<70>teur <b>a</b>, qui est un esclave de l'interpr<70>teur appelant Une liste vide sp<73>cifie l'interpr<70>teur appelant la commande <i>srcCmd</i> donne le nom d'une nouvelle commande, qui sera cr<63><72>e dans l'interpr<70>teur source. <i>TargetPath</i> et <i>targetCmd</i> sp<73>cifient une cible interpr<70>teur et commande, et l'arguments<i> arg</i>, s'il existe, Sp<53>cifie les arguments suppl<70>mentaires <20> <i>targetCmd</i> qui sont ajout<75>s <20> tout argument sp<73>cifi<66> dans l'appel de <i>srcCmd</i>. <i>TargetCmd</i> peut <20>tre ind<6E>fini <20> l'instant de cet appel, ou il peut existe d<>j<EFBFBD>r; il n'est pas cr<63><72> par cette commande. L'alias pr<70>pare la commande cible <20> <20>tre appel<65>e dans l'interpr<70>teur cible chaque fois que la commande source est appel<65>e dans l'interpr<70>teur source Voir APPEL D'ALIAS ci-dessous pour plus de d<>tails.
|
|||
|
</DD>
|
|||
|
<DT><br><b>interp</b> <b>aliases </b>?<i>path</i>?
|
|||
|
</DT><DD>Cette commande retourne une liste Tcl de noms de toutes les commandes source des alias d<>finis dans l'interpr<70>teur identifi<66> par <i>path</i>.
|
|||
|
<b>interp</b> <b>create </b>?<b>-safe</b>? ?<b>--</b>? ?<i>path</i>?<br>
|
|||
|
Cr<EFBFBD>e un interpr<70>teur esclave identifi<66> par <i>path</i> et une nouvelle commande, appel<65> une <i>slave command</i>. Le nom de la commande esclave est le dernier composant de <i>path</i>. Le nouvel interpr<70>teur esclave et la commande esclave sont cr<63><72>e dans l'interpr<70>teur identifi<66> par le chemin obtenu en enlevant le dernier composant de <i>path</i>. Par exemple, si <i>path </i>est<i> </i><b>a bc</b> alors un nouvel interpr<70>teur et commande esclave nomm<6D>s <b>c</b> sont cr<63><72>s dans l'interpr<70>teur identifi<66> par les chemin <b>a b</b>. La commande esclave peut <20>tre employ<6F>e pour manipuler le nouvel interpr<70>teur comme d<>crit ci-dessous. Si <i>path</i> est omis, Tcl cr<63>e un nom unique de la forme <b>interp</b><i>x</i>, o<> <i>x</i> est un entier, et l'utilise pour l'interpr<70>teur et la commande esclave. Si le switch <b>-safe</b> est sp<73>cifi<66> (ou si le ma<6D>tre interpr<70>teur est un interpr<70>teur s<>r), le nouvel interpr<70>teur esclave sera cr<63><72> comme un interpr<70>teur s<>r avec des fonctionalit<69> limit<69>es; autrement l'esclave inclutra le jeu complet des commandes et variables Tcl internes. Le <b>--</b> switch peut <20>tre utilis<69> pour marquer la fin des commutateurs; il peut <20>tre n<>cessaires si <i>path</i> est une valeur inhabituelle telle que <b>-safe</b>. Le r<>sultat de la commande est le nom du nouvel interpr<70>teur. Le nom d'un interpr<70>teur esclave doit <20>tre unique parmi tout les esclaves; une erreur se produit si le nom d'un interpr<70>teur esclave existe d<>j<EFBFBD> pour ce ma<6D>tre.
|
|||
|
</DD>
|
|||
|
<DT><br><b>interp</b> <b>delete </b>?<i>path ...?</i>
|
|||
|
</DT><DD>Efface z<>ro ou plus interpr<70>teurs donn<6E>s par les arguments optionnels <i>path</i>, et pour chaque interpr<70>teur, efface aussi ses esclaves. La commande efface aussi la commande esclave de chaque interpr<70>teur effac<61>. Pour chaque argument<i> path</i>, si aucun interpr<70>teur de ce nom existe, la commande l<>ve une erreur.
|
|||
|
</DD>
|
|||
|
<DT><br><b>interp</b> <b>eval</b> <i>path arg </i>?<i>arg ...</i>?
|
|||
|
</DT><DD>Cette commande concat<61>ne tous les arguments <i>arg</i> de la m<>me fa<66>on que la commande<A HREF="98.htm"><b> concat</b></A>, et <20>value alors la cha<68>ne r<>sultante comme script Tcl dans l'interpr<70>teur esclave identifi<66> par <i>path</i>. Le r<>sultat de cette evaluation (incluant l'information d'erreur telle que les variables<b> errorInfo</b> et <b>errorCode</b>, si une erreur se produit) est renvoy<6F> <20> l'interpr<70>teur appelant .
|
|||
|
</DD>
|
|||
|
<DT><br><b>interp exists </b><i>path</i></DT><DD>Renvoie <b>1</b> si un interpr<70>teur esclave du <i>path</i> sp<73>cifi<66> existe dans ce ma<6D>tre, <b>0</b> autrement. Si <i>path</i> est omis, l'interpr<70>teur appelant est utilis<69>.
|
|||
|
</DD>
|
|||
|
<DT><br><b>interp expose </b><i>path</i> <i>hiddenName</i> ?<i>exposedCmdName</i>?
|
|||
|
</DT><DD>Rend la commande cach<63>e <i>hiddenName</i> visible, en lui donnant <20>ventuellement un nouveau nom <i>exposedCmdName</i> (ce nom est couramment accept<70> seulement si c'est un nom global valide sans quelconque ::), dans l'interpr<70>teur d<>sign<67> par <i>path</i>. Si une commande visible avec le nom cible existe d<>j<EFBFBD>, cette commande <20>choue. Les commandes cach<63>es sont expliqu<71>es plus en d<>tail dans COMMANDES CACHEES , ci-dessous.
|
|||
|
</DD>
|
|||
|
<DT><br><b>interp</b> <b>hide</b> <i>path</i> <i>exposedCmdName</i> ?<i>hiddenCmdName</i>?
|
|||
|
</DT><DD>Cache la commande visible <i>exposedCmdName</i>, en la renommant en commande cach<63>e <i>hiddenCmdName</i>, ou conservant le m<>me nom si <i>hiddenCmdName</i> n'est pas donn<6E>, dans l'interpr<70>teur d<>sign<67> par <i>path</i>. Si une commande cach<63>e avec le nom cibl<62> existe d<>j<EFBFBD>, cette commande <20>choue. <i>exposedCmdName</i> et <i>hiddenCmdNamene </i> peuvent pas contenir en m<>me temps de qualificateurs namespace, ou une erreur est lev<65>e. Les commandes <20> cacher par <b>interp hide</b> sont recherch<63>es dans le namespace global m<>me si le namespace courant n'est pas le global. Ceci emp<6D>che les esclaves d'abuser un ma<6D>tre interpr<70>teur en cachant les mauvaises commandes, en rendant le namespace courant diff<66>rent du global. Les commandes cach<63>es sont expliqu<71>es plus en d<>tail dans COMMANDES CACHEES , ci-dessous.
|
|||
|
</DD>
|
|||
|
<DT><br><b>interp</b> <b>hidden</b> <i>path</i>
|
|||
|
</DT><DD>Renvoie une liste des noms de toutes les commandes cach<63>es dans l'interpr<70>teur identifi<66> par <i>path</i>.
|
|||
|
</DD>
|
|||
|
<DT><br><b>interp</b> <b>invokehidden</b> <i>path</i> ?<b>-global</b>? <i>hiddenCmdName</i> ?<i>arg ...</i>?
|
|||
|
</DT><DD>Appelle la commande cach<63>e <i>hiddenCmdName</i> avec les arguments fournis dans l'interpr<70>teur d<>sign<67> par <i>path</i>. Aucune substitution ou <20>valuation ne sont appliqu<71>es aux arguments. Si le flag <b>-global</b> est pr<70>sent, la commande cach<63>e est appel<65>e au niveau global dans l'interpr<70>teur cible; autrement elle est appel<65>e dans le cadre d'appel courant et peut acceder aux variables locales dans ce cadre et appeler des cadres externes. Les commandes cach<63>es sont expliqu<71>es plus en d<>tail dans COMMANDES CACHEES , ci-dessous.
|
|||
|
</DD>
|
|||
|
<DT><br><b>interp issafe</b> ?<i>path</i>?
|
|||
|
</DT><DD>Renvoie <b>1</b> si l'interpr<70>teur identifi<66> par le <i>path</i> sp<73>cifi<66> est s<>r, <b>0</b> autrement.
|
|||
|
</DD>
|
|||
|
<DT><br><b>interp marktrusted</b> <i>path</i>
|
|||
|
</DT><DD>Marque l'interpr<70>teur identifi<66> par <i>path</i> comme fiable. Ne montre pas les commande cach<63>es. Cette commande peut seulement <20>tre appel<65>e <20> partir d'un interpr<70>teur de confiance. La commande n'a pas d'effet si l'interpr<70>teur identifi<66> par <i>path</i> est d<>j<EFBFBD> fiable.
|
|||
|
</DD>
|
|||
|
<DT><br><b>interp</b> <b>share</b> <i>srcPath channelId destPath</i>
|
|||
|
</DT><DD>Met en place le partage du canal IO identifi<66> par <i>channelId</i> entre l'interpr<70>teur identifi<66> par <i>srcPath</i> et l'interpr<70>teur identifi<66> par <i>destPath</i>. Les deux interpr<70>teurs ont les m<>me permissions sur le canal IO. Les deux interpr<70>teurs doivent le fermer pour fermer le IO canal sous-jacent; les canaux IO accessibles dans un interpr<70>teur sont automatiquement ferm<72>s quand un interpr<70>teur est d<>truit.
|
|||
|
</DD>
|
|||
|
<DT><br><b>interp</b> <b>slaves</b> ?<i>path</i>?
|
|||
|
</DT><DD>Renvoie une liste Tcl des noms de tous les interpr<70>teurs esclaves associ<63>s <20> l'interpr<70>teur identifi<66> par <i>path</i>. Si <i>path</i> est omis, l'interpr<70>teur appelant est utilis<69>.
|
|||
|
</DD>
|
|||
|
<DT><br><b>interp</b> <b>target</b> <i>path alias</i>
|
|||
|
</DT><DD>Renvoie une liste Tcl d<>crivant l'interpr<70>teur cible d'un alias. L'alias est sp<73>cifi<66> avec un chemin d'interpr<70>teur et le nom de la commande source, juste comme dans <b>interp </b><b>alias</b> plus haut. Le nom de l'interpr<70>teur cible est renvoy<6F> comme un chemin d'interpr<70>teur, relatif <20> l'interpr<70>teur appelant . Si l'interpr<70>teur cible de l'alias est l'interpr<70>teur appelant alors une liste vide est renvoy<6F>e. Si l'interpr<70>teur cible de l'alias n'est pas l'interpr<70>teur appelant ou un de ses descendants alors une erreur est g<>n<EFBFBD>r<EFBFBD>e. La commande cible n'a pas a <20>tre d<>finie <20> l'instant de cet appel.
|
|||
|
</DD>
|
|||
|
<DT><br><b>interp</b> <b>transfer</b> <i>srcPath channelId destPath</i>
|
|||
|
</DT><DD>Rends le canal IO identifi<66> par <i>channelId</i> disponible dans l'interpr<70>teur identifi<66> par <i>destPath</i> et indisponible dans l'interpr<70>teur identifi<66> par <i>srcPath</i>
|
|||
|
</DD>
|
|||
|
</DL>
|
|||
|
</div><br>
|
|||
|
<div><b>LA COMMANDE SLAVE </b></div><br>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Pour chaque interpr<70>teur esclave cr<63><72> avec lA commande<b> interp</b>, une nouvelle commande Tcl est cr<63><72>e dans le ma<6D>tre interpr<70>teur avec le m<>me nom que le nouvel interpr<70>teur. Cette commande peut <20>tre employ<6F>e pour faire des op<6F>rations vari<72>es sur l'interpr<70>teur Elle a la forme g<>n<EFBFBD>rale suivante:
|
|||
|
<i>slave command </i>?<i>arg arg ...</i>?</div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;"><i>Slave</i> est le nom de l'interpr<70>teur, et <i>command</i> et <i>arg</i>s determinent le comportement exact de la commande. Les formes valides de cette commande sont:
|
|||
|
<DL>
|
|||
|
<DT><br><i>slave </i><b>aliases</b>
|
|||
|
</DT><DD>Renvoie une liste Tcl dont les <20>l<EFBFBD>ments sont les noms de tous les alias dans <i>slave</i> Les noms renvoy<6F>s sont les valeurs <i>srcCmd</i> utilis<69>es quand les alias ont <20>t<EFBFBD> cr<63><72>s (qui ne peuvent pas <20>tre les m<>me que les noms des commandes courantes, si elles ont <20>t<EFBFBD> renomm<6D>es).
|
|||
|
</DD>
|
|||
|
<DT><br><i>slave </i><b>alias </b><i>srcCmd</i>
|
|||
|
</DT><DD>Renvoie une liste Tcl dont les <20>l<EFBFBD>ments sont les <i>targetCmd</i> et <i>arg</i>s associ<63>s <20> l'alias nomm<6D> <i>srcCmd</i> (toutes sont les valeurs sp<73>cifi<66>es quand l'alias a <20>t<EFBFBD> cr<63><72>e; il est possible que la commande source actuelle dans l'esclave soit diff<66>rente de <i>srcCmd</i> si elle a <20>t<EFBFBD> renomm<6D>e).
|
|||
|
</DD>
|
|||
|
<DT><br><i>slave </i><b>alias </b><i>srcCmd </i><b>{}</b>
|
|||
|
</DT><DD>Efface l'alias de <i>srcCmd</i> dans l'interpr<70>teur esclave. <i>srcCmd</i> se r<>f<EFBFBD>re au nom sous lequel l'alias a <20>t<EFBFBD> cr<63><72> si la commande source a <20>t<EFBFBD> renomm<6D>e, la commande renomm<6D>e sera effac<61>.
|
|||
|
</DD>
|
|||
|
<DT><br><i>slave </i><b>alias </b><i>srcCmd targetCmd </i>?<i>arg ..</i>?
|
|||
|
</DT><DD>Cr<EFBFBD>e un alias tel que chaque fois que <i>srcCmd</i> est appel<65>e dans <i>slave</i>, <i>targetCmd</i> est appel<65>e dans le ma<6D>tre. Les arguments <i>arg</i> seront transmis <20> <i>targetCmd</i> comme arguments suppl<70>mentaires, ajout<75>s avant tout argument transmis dans l'appel de <i>srcCmd</i>. Voir APPEL D'ALIAS ci-dessous pour les d<>tails.
|
|||
|
</DD>
|
|||
|
<DT><br><i>slave </i><b>eval </b><i>arg </i>?<i>arg ..</i>?</DT><DD>Cette commande concat<61>ne tous les arguments <i>arg</i> de la m<>me fa<66>on que la commande<A HREF="98.htm"><b> concat</b></A>, et <20>value la cha<68>ne r<>sultante comme un script Tcl dans <i>slave</i>. Le r<>sultat de cette <20>valuation (incluant information erreur telle que les variables<b> </b><b>errorInfo</b> et <b>errorCode</b>, si une erreur se produit) est renvoy<6F> <20> l'interpr<70>teur appelant .
|
|||
|
</DD>
|
|||
|
<DT><br><i>slave </i><b>expose </b><i>hiddenName </i>?<i>exposedCmdName</i>?
|
|||
|
</DT><DD>Cette commande expose la commande cach<63>e<i>hiddenName</i>, lui donnant <20>ventuellement un nouveau nom <i>exposedCmdName</i> (ce nom est couramment accept<70> seulement si c'est une nom global valide sans quelconque ::), dans <i>slave</i>. Si une commande visible avec le nom cibl<62> existe d<>j<EFBFBD>, cette commande <20>choue. Pour plus details sur les commande cach<63>es, voir COMMANDES CACHEES , ci-dessous.
|
|||
|
</DD>
|
|||
|
<DT><br><i>slave </i><b>hide </b><i>exposedCmdName</i> ?<i>hiddenCmdName</i>?
|
|||
|
</DT><DD>Cette commande cache la commande visible <i>exposedCmdName</i>, en la renommant en la commande cach<63>e <i>hiddenCmdName</i>, ou gardant le m<>me nom si l'argument n'est pas donn<6E>, dans l'interpr<70>teur<i> slave</i>. Si une commande cach<63>e avec le nom cibl<62> existe d<>j<EFBFBD>, cette commande <20>choue. Autant <i>exposedCmdName</i> que <i>hiddenCmdName</i> ne peuvent contenir de qualificateurs namespace, ou une erreur est lev<65>e. Les commandes a cacher sont recherch<63>e dans le namespace global m<>me si le namespace courant n'est pas le global un . Ceci emp<6D>che les esclaves d'abuser un ma<6D>tre interpr<70>teur en cachant les mauvaises commandes, en rendant le namespace courant diff<66>rent du global. Pour plus details sur les commande cach<63>es, voir COMMANDES CACHEES , ci-dessous.
|
|||
|
</DD>
|
|||
|
<DT><br><i>slave </i><b>hidden</b></DT><DD>Renvoie une liste des noms de toutes les commande cach<63>es dans <i>slave</i>.
|
|||
|
<i>slave </i><b>invokehidden</b> ?<b>-global</b> <i>hiddenName </i>?<i>arg ..</i>?<br>
|
|||
|
Cette commande appelle la commande cach<63>e <i>hiddenName</i> avec les arguments fournis, dans <i>slave</i>. Aucune substitutions ou <20>valuations ne sont appliqu<71>es aux arguments. Si le flag <b>-global</b> est donn<6E>, la commande est appel<65>e au niveau global dans l'esclave; autrement elle est appel<65>e dans le cadre d'appel courant et peut acceder <20> ses variables locales ou appeler des cadres externes. Pour plus details sur les commande cach<63>es, voir COMMANDES CACHEES , ci-dessous.
|
|||
|
</DD>
|
|||
|
<DT><br><i>slave </i><b>issafe</b>
|
|||
|
</DT><DD>Renvoie <b>1</b> si l'interpr<70>teur esclave est s<>r, <b>0</b> autrement.
|
|||
|
<DT><br><i>slave </i><b>marktrusted</b>
|
|||
|
</DT><DD>Marque l'interpr<70>teur esclave comme fiable. Peut seulement <20>tre appel<65>e par un interpr<70>teur de confiance. Cette commande ne rend visible aucune commande cach<63>e dans l'interpr<70>teur esclave. La commande n'a pas d'effet si l'esclave est d<>j<EFBFBD> fiable <br>
|
|||
|
</DD>
|
|||
|
</DL>
|
|||
|
</div><br>
|
|||
|
<div><b>SAFE INTERPRETERS</b></div><br>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Un interpr<70>teur s<>r a des fonctionalit<69> restreintes, ainsi il est s<>r d'ex<65>cuter un script arbitraire donn<6E> par votre pire ennemi sans s'inqui<75>ter pour l'application h<>te ou le reste de votre environnement de travail De mani<6E>re <20> rendre un interpr<70>teur s<>r, certaines commandes et variables sont enlev<65>se de l'interpr<70>teur. Par exemple, les commandes pour cr<63>er fichiers sur disque sont enlev<65>es, et la commande <A HREF="105.htm"><b>exec</b></A> est enlev<65>e, car elle pourrait <20>tre utilis<69>e pour faire des d<>gats <20> l'aide de sous-processus. Un acc<63>s limit<69> <20> ces facilit<69>s peut <20>tre fourni, par cr<63>ation d'alias du ma<6D>tre interpr<70>teur pour v<>rifier leurs arguments soigneusement et fournir un acc<63>s restreint <20> une sous ensemble s<>r de facilit<69>s. Par exemple, la cr<63>ation de fichier pourra <20>tre autoris<69> dans un sous r<>pertoire particulier et l'appel de sous-processus pourra <20>tre autoris<69> pour un ensemble soigneusement choisi de programmes. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Un interpr<70>teur s<>r est cr<63><72>e en specifiant le switch <b>-safe</b> <20> la commande<b> interp create</b> N<>anmoins, tout esclave cr<63><72> par un interpr<70>teur s<>r sera aussi s<>r. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Un interpr<70>teur s<>r est cr<63><72>e avec exactement ce jeu de commandes internes: </div><br>
|
|||
|
<b><TABLE ALIGN="center" BORDER="0" CELLSPACING="0" CELLPADDING="0" WIDTH="60%">
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
after
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
append
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
array
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
binary
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
break
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
case
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
catch
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
clock
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
close
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
concat
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
continue
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
eof
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
error
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
eval
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
expr
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
fblocked
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
fcopy
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
fileevent
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
flush
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
for
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
foreach
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
format
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
gets
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
global
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
history
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
if
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
incr
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
info
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
interp
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
join
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
lappend
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
lindex
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
linsert
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
list
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
llength
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
lrange
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
lreplace
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
lsearch
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
lsort
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
namespace
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
package
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
pid
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
proc
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
puts
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
read
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
regexp
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
regsub
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
rename
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
return
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
scan
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
seek
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
set
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
split
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
string
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
subst
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
switch
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
tell
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
trace
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
unset
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
update
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
uplevel
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
upvar
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
variable
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
vwait
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
while
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
<!--R17C2-->
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
<!--R17C3-->
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
<!--R17C4-->
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
</TABLE></b>
|
|||
|
|
|||
|
<br>
|
|||
|
</div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Les commandes suivantes sont cach<63>es par <b>interp create</b> quand il cr<63>e un interpr<70>teur s<>r: </div><br>
|
|||
|
<TABLE ALIGN="center" BORDER="0" CELLSPACING="0" CELLPADDING="0" WIDTH="60%">
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
cd
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
exec
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
exit
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
fconfigure
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
file
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
glob
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
load
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
open
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
<TR>
|
|||
|
<TD>
|
|||
|
pwd
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
socket
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
source
|
|||
|
</TD>
|
|||
|
<TD>
|
|||
|
vwait
|
|||
|
</TD>
|
|||
|
</TR>
|
|||
|
</TABLE><br>
|
|||
|
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Ces commandes peuvent <20>tre recr<63><72>es plus tard comme fonctions ou alias Tcl, ou r<>expos<6F>es avec <b>interp expose</b>. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">De plus, la variable <b>env</b> n'est pas pr<70>sente dans un interpr<70>teur s<>r, donc il ne peut partager des variables d'environnement avec les autres interpr<70>teurs. La variable <b>env</b> pose un probl<62>me de s<>curit<69>, parce que les utilisateurs peuvent stocker de l'information sensible dans une variable d'environnement. Par exemple, le manuel PGP recommende de stocker le mot de passe de protection de la cl<63> PGP priv<69>e dans la variable d'environnement <i>PGPPASS</i>. Rendre cette variable disponible <20> l'ex<65>cution de code <20>tranger dans un interpr<70>teur s<>r induirait une faille de s<>curit<69>. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Si les extensions sont charg<72>es dans un interpr<70>teur s<>r, elles peuvent aussi restraindre leur propre fonctionalit<69> pour <20>liminer les commandes sensibles. Pour une discussion sur la getion des extensions pour la s<>curit<69> voyez l 'entr<74>e de manuel des commandes Tcl<A HREF="158.htm"><b> Safe</b></A><b>-</b><A HREF="78.htm"><b>Tcl</b></A> et <A HREF="134.htm"><b>load</b></A>
|
|||
|
</div><br>
|
|||
|
<div><b>APPEL D'ALIAS</b></div><br>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Le m<>canisme alias a <20>t<EFBFBD> soigneusement con<6F>u ainsi il peut <20>tre utilis<69> s<>rement quand un script non fiable est ex<65>cut<75> dans un esclave s<>r et que le cible de l'alias est une ma<6D>tres<65>r Lachose la plus importante pour garantir la s<>curit<69> est de s'assurer qui l'information transmise de l'esclave au ma<6D>tre n'est jamais <20>valu<6C>e ou substitu<74>e dans le ma<6D>tre; si ceci se produisait, cela pourrait activer un script de la mort dans l'esclave qui appelerait des fonctions arbitraires dans le ma<6D>tre, pour compromettre la s<>curit<69>. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Quand la source d'un alias est appel<65>e dans l'interpr<70>teur esclave, les substitutions Tcl usuelles sont effectu<74>es <20> l'analyse de la commande. Ces substitutions sont effectu<74>es dans l'interpr<70>teur source juste comme elles seraient faites pour tout autre commande appel<65>e dans cet interpr<70>teur. La fonction de commande de la commande source prend ses arguments et les m<>lange avec les <i>targetCmd</i> et <i>arg</i>s de l'alias pour cr<63>er un nouveau tableau d'arguments Si les mots de <i>srcCmd</i> etaient "<i>srcCmd arg1 arg2 ... argN</i>", le nouvel ensemble de mots sera "<i>targetCmd arg arg ... arg arg1 arg2 ... argN</i>", o<> <i>targetCmd</i> et <i>arg</i>s sont les valeurs fournies quand l'alias a <20>t<EFBFBD> cr<63><72>. <i>TargetCmd</i> est alors utilis<69>e pour localiser une fonction de commande dans l'interpr<70>teur cible, et cette fonction de commande est appel<65>e avec le nouveau jeu d'aguments Un erreur se produit s'il n'y a pas commande nomm<6D>e <i>targetCmd</i> dans l'interpr<70>teur cible. Aucunes substitutions suppl<70>mentaires ne sont effectu<74>es sur les mots, la fonction de commande cible est appel<65>e directement, sans passer au travers du m<>canisme evaluation Tcl normal. Les substitutions sont ainsi effectu<74>es sur chaque mot exactement une seule fois: <i>targetCmd</i> et <i>args</i> ont <20>t<EFBFBD> substitu<74>es pendant l'analyse de la commande qui cr<63><72>e l'alias, et <i>arg1 - argN</i> sont substitu<74>es quand la commande source de l'alias est analys<79>e dans l'interpr<70>teur source. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">A l'<27>criture de <i>targetCmd</i>s pour des alias dans des interpr<70>teurs s<>rs, il est tr<74>s important que les arguments de cette commande ne soient jamais <20>valu<6C>s ou substitu<74>s, car ceci fournirait un m<>canisme d'<27>chappement par lequel les interpr<70>teurs esclaves pourraient ex<65>cuter du code arbitraire dans le ma<6D>tre Par cons<6E>quent, ceci pourrait compromettre la s<>curit<69> du syst<73>me
|
|||
|
</div><br>
|
|||
|
<div><b>COMMANDES CACHEES</b></div><br>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Les interpr<70>teurs s<>rs restreignent grandement les fonctionalit<69>s disponibles pour les programmes Tcl qui seraient <20>xecut<75>s. Permettre <20> du code Tcl non fiable un acc<63>s direct <20> ces fonctionalit<69>s est dangeureux, parce que il peut <20>tre utilis<69> pour un grand nombre d'attaques sur l'environnement. N<>anmoins, il y a parfois un besoin legitime d'utiliser les fonctionalit<69>s dangereuses dans le contexte de l'interpr<70>teur s<>r. Par exemple, parfois un programme doit <20>tre <A HREF="163.htm"><b>source</b></A>d dans l'interpr<70>teur. Un autre exemple est Tk, ou des fen<65>tres sont attach<63>es <20> une hi<68>rarchie de fen<65>tres pour un interpr<70>teur sp<73>cifique; quelque potentiellement dangereuse fonctions, ex. gestion de fen<65>tres, doit <20>tre effectu<74>e sur ces fen<65>tres dans le contexte de l'interpr<70>teur. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">La commande <b>interp</b> fournit une solution <20> ce probl<62>me sous la forme des <i>hidden commands</i>. Au lieu d'enlever enti<74>rement les commandes dangereuses d'un interpr<70>teur s<>r, ces commandes sont cach<63>es donc elles deviennent indisponibles pour les l'ex<65>cution de scripts Tcl dans l'interpr<70>teur. N<>anmoins, ces commande cach<63>es peuvent <20>tre appel<65>e par anc<6E>tre fiable de l'interpr<70>teur s<>r, dans le contexte de l'interpr<70>teur s<>r, en utilisant <b>interpinvoke</b>. Les commandes cach<63>es et commandes visibles r<>sident dans des namespaces s<>par<61>s. Il est possible de definir une commande cach<63>e et un commande visible portant les m<>me nom dans un interpr<70>teur. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Les commandes cach<63>es dans un interpr<70>teur esclave peuvent <20>tre appel<65>es dans le corps des fonctions appel<65>es dans le ma<6D>tre pendant l'appel d'alias. Par exemple, un alias de <A HREF="163.htm"><b>source</b></A> pourrait <20>tre cr<63><72> dans un interpr<70>teur esclave. Quand elle est appel<65>e dans l'interpr<70>teur esclave, une fonction est appel<65>e dans le ma<6D>tre interpr<70>teur pour v<>rifier si l'op<6F>ration est autoris<69>e (ex. il demande de <i>sourcer</i> un fichier que l'interpr<70>teur esclave est autoris<69> <20> acc<63>der). La fonction alors appelle la commande <A HREF="163.htm"><b>source</b></A> cach<63>e dans l'interpr<70>teur esclave pour <i>sourcer</i> le contenu du fichier. Notez que deux commandes nomm<6D>es <A HREF="163.htm"><b>source</b></A> existent dans l'interpr<70>teur esclave: l'alias, et la commande cach<63>e. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Parcequ'un interpr<70>teur ma<6D>tre peut appeller une commande cach<63>e comme partie de la gestion d'un appel d'alias, grans soin doit <20>tre pris d'<27>viter l'<27>valualuation de tout arguments transmis au travers de l'appel de l'alias. Autrement, un interpr<70>teur esclave malin pourrait faire ex<65>cuter <20> l'interpr<70>teur ma<6D>tre de confiance des commandes dangereuses. Voir la section sur l' APPEL D'ALIAS pour une discussion plus compl<70>te de ce topic. Pour aider <20> <20>viter ce probl<62>me, aucune substitutions ou <20>valuations ne sont appliqu<71>es aux arguments de <b>interp </b><b>invokehidden</b>. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Les interpr<70>teurs s<>rs ne sont pas autoris<69>s <20> appeler des commande cach<63>es dans eux-m<>mes ou dans leurs descendants. Ceci emp<6D>che les esclaves s<>r d'acceder aux fonctionalit<69> cach<63>es dans eux-m<>mes ou leurs descendants. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">L'ensemble des commandes cach<63>es dans un interpr<70>teur peut <20>tre manipul<75> par un interpr<70>teur de confiance en utilisant <b>interp expose</b> et <b>interp hide</b>. La commande <b>interp expose</b> d<>place une commande cach<63>e dans le jeu de commande visibles dans l'interpr<70>teur identifi<66> par <i>path</i>, potentiellement renommant la commande dans le processus. Si une commande visible du nom cibl<62> existe d<>j<EFBFBD>, l'op<6F>ration <20>choue. Pareillement, <b>interp hide</b> d<>place une commande visible dans le jeu de commande cach<63>es dans cet interpr<70>teur. Les interpr<70>teurs s<>rs ne sont pas autoris<69>s <20> d<>placer les commandes entre l'ensemble des commandes cach<63>es et visibles, dans soit eux-m<>me ou leurs descendants. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Actuellement, les noms des commande cach<63>es ne peuvent pas contenir de qualificateurs namespace, et vous devez en premier renommer une commande d'un namespace dans le namespace global avant de pouvoir la cacher. Les commandes cach<63>es par <b>interp hide</b> sont recherch<63>e dans le namespace global m<>me si le namespace courant n'est pas le global. Ceci emp<6D>che les esclaves d'abuser un ma<6D>tre interpr<70>teur en cachant les mauvaises commandes, en rendant le namespace courant diff<66>rent du global.
|
|||
|
</div><br>
|
|||
|
<div><b>CREDITS</b></div><br>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Ce m<>canisme est bas<61> sur le prototype Safe-Tcl impl<70>ment<6E> par Nathaniel Borenstein et Marshall Rose
|
|||
|
</div><br>
|
|||
|
<div><b>VOIR EGALEMENT</b></div><br>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;"><A HREF="134.htm">load</A>(n), safe(n), Tcl_CreateSlave(3) </div>
|
|||
|
<div>Derni<EFBFBD>re r<>vision: 7.6</div>
|
|||
|
<br>
|
|||
|
<br><div ALIGN="CENTER"><A HREF="index.htm"><b>Index</b></A> <A HREF="125.htm"><b>Pr<EFBFBD>c<EFBFBD>dent</b></A> <A HREF="127.htm"><b>Suivant</b></A></div>
|
|||
|
</BODY></HTML>
|