Commande !tcl publique sécurisée
#1
salut,

ce script a pour but de fournir un accès publique pour tous (et biensur sécurisée) à la commande !tcl.
Il crée un interpréteur sécurisé (commande "interp create -safe") ce qui isole complétement les commandes exécutées par le script de celle de votre eggdrop.
liste des commandes présente par défaut dans un interp safe
TCL
after   append   apply   array   binary   break
catch   chan   clock   close   concat   continue
dict   eof   error   eval   expr   fblocked
fcopy   fileevent   flush   for   foreach   format
gets   global   if   incr   info   interp
join   lappend   lassign   lindex   linsert   list
llength   lrange   lrepeat   lreplace   lsearch
lset   lsort   namespace   package   pid   proc
puts   read   regexp   regsub   rename   return
scan   seek   set   split   string   subst
switch  tell   time   trace   unset   update
uplevel   upvar   variable   vwait   while



Il est possible de configurer des aliases afin de pouvoir utiliser les commandes eggdrop (putserv isop .....)
[attachment=171]

vous aurez aussi besoin du package timing que j'ai créé
[attachment=172]
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#2
Merci, ce sera certainement fort utile.
Répondre
#3
Super TcL. Merci Dj_KennY c'est toi le meilleur Very Happy
Si les Cons volaient, certains seraient Chef d'Escadrille !
Répondre Avertir
#4
salut,

j ai oublié de préciser que certaine commandes eggdrop tel que putserv, putquick, puthelp... (bref les commandes qui permettent d envoyer des messages au serveur) pourrais poser problème
par exemple si quelqu'un tape
Code :
!tcl putserv "QUIT :"

certaine commandes de boucle peuvent aussi poser problème lors de création de boucles infini

j ai corrigé le problème en ajoutant une variable permettant de désactiver certaine commandes

je penses créer une commande pour activer/désactiver les commandes sans avoir besoin de rehash
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#5
ajout des commandes:

!hide <cmd> ?cmd1 ...?
supprime l accès à une (plusieurs) commande

!expose <cmd> ?cmd1 ...?
ajoute l accès à une (plusieurs) commande

biensur pour exécuter ces 2 commandes il faut être admin (+n)
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#6
bon voila la version final
j'y ai ajouté une limite de temps d'exécution (en secondes) dans l'interp histoire de ne pas bloquer sur une boucle infinie
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#7
Salut, hmm dit moi si ont tape !tcl botnick ou !tcl $::botnick ceci doit retourner le pseudo de l'eggdrop non ?
Répondre Avertir
#8
Est-ce que .tcl $::botnick affiche le pseudo ? Non, ça te dira "Tcl error: invalid command name "Machin""

Je pense que !tcl putserv "PRIVMSG #chan :$::botnick" fonctionnera mieux.
Répondre
#9
oui sauf que la ça dit "Tcl error: invalid command name "$::botnick""

alors que si j'utilise mon ex système de .tcl sa me dira pareil sauf avec l'exemple que tu as donner.
Répondre Avertir
#10
Bien sûr, la commande !tcl n'est en fait qu'un alias (protégé) vers le .tcl, pour éviter d'aller en party-line pour tester une commande tcl ou un code.
Sauf qu'avec les protections, il y a certaines choses que tu ne pourras pas faire.

Ce script est fort utile lorsque tu veux montrer en direct quelque chose, sans avoir à copier/coller ce que tu fais en party-line.
Répondre
#11
salut,
en réalité ce script est assez différent de la commande .tcl de la pl
il crée un un interpréteur sécurisé, bien distinct de l interpréteur de l'eggdrop.
Ce nouvel interpréteur (appelé (slave) esclave) ne partage ni les variables ni les procédures (sauf exception ajoutée dans la conf) de l’interpréteur eggdrop
de base il n'a que les commande (considéré sécurisée) de TCL
(cf la liste de commande placé au début du poste)
au niveau variable il ne contient que les variables d environnement et global classique de tcl
Code :
% info global
tcl_rcFileName tcl_version argv0 argv tcl_interactive auto_path errorCode auto_index env tcl_pkgPath tcl_patchLevel argc tcl_library tcl_platform
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#12
le code qui permet de copier la commande .tcl de la pl est
TCL
bind pub n !tcl tcleval
 
proc tcleval {nick host hand chan arg} {
    catch [list uplevel #0 $ag] error
    foreach line [split $error "\n"] {
        if {$line!=""} {
            putserv "PRIVMSG $chan :\002TCL ->\002 $line"
        }
    }
    putserv "PRIVMSG $chan :\002Done.\002"
}


comme tu peux voir il est très différent
@CrasyCat:
Citation :Ce script est fort utile lorsque tu veux montrer en direct quelque chose, sans avoir à copier/coller ce que tu fais en party-line.
en réalité (meme si tu n'as pas tout a fait tord) c'était plutôt dans l esprit de procurer une commande publique accessible à tous les users (ou une partie selon le % de boulets présent :p ) permettant donc de tester publiquement son code (par exemple sur un chan réserve au tcl ou à eggdrop) sans avoir besoin de ramener le bot ou de faire des c/c a rallonge.
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#13
djkenny a écrit :en réalité (meme si tu n'as pas tout a fait tord) c'était plutôt dans l esprit de procurer une commande publique accessible à tous les users (ou une partie selon le % de boulets présent :p ) permettant donc de tester publiquement son code (par exemple sur un chan réserve au tcl ou à eggdrop) sans avoir besoin de ramener le bot ou de faire des c/c a rallonge.

Oui oui, j'avais très simplifié l'explication, mais j'avais bien compris le but du tcl Smile
Répondre
#14
Ok bah après c'est une question de goût aussi..

Moi personellement je préfére le !tcl de base que celui sécurisé.
car si je veux savoir à quoi correspond $::botnick sur un salon sans aller en PL bah je préfére.

Ensuite les boulets ne peuvent pas l'utilisé sauf s'il sont le flag adéquat donc +n sa reste dans le contexte plus ou moins sécurisé.

Sinon oui c'est sympa mais pour moi et l'utilité que j'utilise certaine chose pour mon projet actuel cette source ne peux pas me convenir Smile
Répondre Avertir
#15
Ben si ça ne te convient pas, tu n'utilise pas, et puis c'est tout.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté