Question sur "exec" dans un .oef

Accueil Forums Programmation WIMS Programmation d’exercices OEF Question sur "exec" dans un .oef

Vous lisez 7 fils de discussion
  • Auteur
    Messages
    • #4261
      Avatar photoFrançois Lafont
      Participant
      Up
      0
      Down
      ::

      Bonjour à tous, 🙂

      Attention, je préfère prévenir, je n’y connais pas grand chose en fait en .oef (voire presque rien), je suis plutôt côté administration système, alors désolé par avance si mes questions sont triviales.

      Actuellement, nous disposons d’un web service WebMathematica que j’aimerais « plugger » à Wims afin que ceux qui créent des .oef (pas moi donc) puissent faire appel à ce Web service afin d’enrichir leurs ressources. En l’état, sur le serveur Wims, je peux requêter le serveur WebMathematica via un script. En clair, dans un shell du serveur Wims, si je fais :

      webmathematica.sh '... du code mathematica....'

      ie si je fournis en argument du script du code Mathematica, alors le script fait une requête POST via un curl au serveur WebMathematica, le serveur WebMathematica exécute le code mathematica et renvoie le résultat qui est affiché par le script. Par exemple :

      
      ~$ webmathematica.sh 'result = Table[Prime, {i, 20}]'
      {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71}
      

      1. Est-il possible d’appeler ce programme via Wims dans un .oef ? Apparemment, il y a la commande wims exec pour faire ça, j’ai bon ? Mais je me pose une question au niveau syntaxe. L’argument du script est du code mathematica, il peut potentiellement contenir plein de caractères comme des accolades, des points-virgules, des doubles quotes, des dollars, des crochets etc. Comment ça se passe au niveau de la syntaxe dans le .oef ? Car j’imagine que certains des caractères que j’ai cités ci-dessus sont interprétés par Wims au sein du langage .oef, non ?

      2. Mon autre question est plus une question de sécurité. Si j’ai bien compris, un utilisateur Wims non authentifié peut créer et tester des .oef. Du coup, avec l’instruction exec, un utilisateur non authentifié peut-il potentiellement faire exécuter n’importe quelle commande sur le système ? Ou alors peut-être que Wims a-t-il certaines restrictions qui limitent les commandes appelables par exec ?

      Voilà, merci d’avance pour vos explications. Si vous avez des liens qui expliquent tout ça, ça me va aussi.

      Bonne journée.

    • #4262
      bernadette
      Maître des clés
      Up
      0
      Down
      ::

      Pour la question 2. On ne peut pas en effet lancer n’importe quel script à partir de exec. Soit il doit être dans un répertoire particulier (si on rajoute quelque chose c’est la responsabilité de celui qui rajoute !) ou on peut lancer certaines commandes.
      Par exemple (je vais me mettre dans le langage wims, oef fait des conversions d’un langage spécifique dans le langage wims (voir src/OefMsg2wims ))
      !exec pari xxx
      va lancer le programme pari (source dans src/Interfaces/).
      Ce programme lance le logiciel GP/Pari mais en faisant des conversions dans les entrées et les sorties et en bridant les commandes pouvant être utilisés).
      Par exemple, pour mettre les objets dans un format unique (matrice par exemple), ou enlever tout ce qui est prompt, erreur, ou autre.

      D’autres se trouvent dans public_html/bin/ . Mais il faut faire attention à la sécurité quand on rajoute quelque chose.

      Pour le premier point, si on lance en OEF
      wims(exec pari xxxx)
      (ou le raccourci pari( ) par exemple, ou maxima( xx) ,
      il peut y avoir des incompatibilités mais en général non.
      Maintenant, je ne sais pas si c’est parce que cela passe par le programme pari.
      Il y a d’abord évaluation des variables (représentés en OEF par \
      (\a est la valeur de la variable a). La seule chose est que le convertisseur OEF refuse les accolades mal fermées. (cela n’est pas le cas, si on travaille directement dans wims).
      Je ne sais pas si je suis clair et si je réponds à une partie des questions !

      Pour Mathematica, je conseillerai de regarder ce qui a été fait pour les autres logiciels de calcul (dans src/Interfaces) histoire de bien contrôler les commandes permises. C’est ce que je vous ai dit dès le début des discussions.
      Mais je croyais que la licence Mathematica ne le permettait pas ??

      Bernadette

    • #4276
      Avatar photoFrançois Lafont
      Participant
      Up
      0
      Down
      ::

      Ok, merci Bernadette pour ta réponse qui m’aide beaucoup.

      a) Donc déjà, si j’ai bien compris, un programme exécutable prog pourra être lancé par Wims dans un .oef via un wims(exec prog ...) si et seulement si celui-ci se trouve dans le répertoire ./public_html/bin/, j’ai bon ?

      b) Du coup, j’ai mis mon script dans ./public_html/bin/, il s’appelle testwm (comme « Test Web-Mathematica). L’exécutable marche parfaitement dans un shell, par exemple j’ai ça :

      
      ~# /opt/wims/public_html/bin/testwm 'result = Table[Prime, {i, 20}]'
      {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71}
      

      Maintenant j’essaye d’utiliser cet exécutable dans un .oef et c’est là que ça coince. Par exemple, j’ai juste testé ceci (copier-coller verbatim) :

      
      \text{ c = wims (exec testwm arg) }
      \statement{ valeur de c: \c .}
      

      Hélas, ça ne marche pas. La valeur de \c semble vide. Par ailleurs, je suis sûr de moi (vérifié via la sortie stderr que wims affiche pour moi lorsque je teste mon exercice), l’exécutable est bien lancé par Wims mais sans argument, autrement dit, avec mon .oef ci-dessus Wims me lance ceci :

      
      /opt/wims/public_html/bin/testwm
      

      et ne tient absolument pas compte de arg juste après. Or moi j’aurais voulu qu’il me lance ceci :

      
      /opt/wims/public_html/bin/testwm arg
      

      même si arg dans ce contexte là n’a pas vraiment de sens évidemment. Un argument qui aurait du sens ici serait par exemple result = Table[Prime, {i, 20}] mais j’ai voulu tester au plus simple afin d’écarter (dans un premier temps au moins) les éventuels problèmes de crochet, d’accolade etc.

      Est-il possible de faire en sorte de lancer mon exécutable testwm en lui passant un argument que j’indique dans le fichier .oef ?

    • #4277
      Avatar photoFrançois Lafont
      Participant
      Up
      0
      Down
      ::

      Je ne comprends pas j’ai posté une réponse ici mais elle ne s’affiche pas. Lorsque j’essaye de la reposter j’ai l’erreur :

      ERREUR: Réponse dupliquée détectée, il semble que vous avez déjà dit cela!

      J’espère que ma réponse n’est pas perdue et qu’elle finira par s’afficher.

    • #4278
      Avatar photoFrançois Lafont
      Participant
      Up
      0
      Down
      ::

      [Je retente de poster ma réponse]

      Ok, merci Bernadette pour ta réponse qui m’aide beaucoup.

      a) Donc déjà, si j’ai bien compris, un programme exécutable prog pourra être lancé par Wims dans un .oef via un wims(exec prog ...) si et seulement si celui-ci se trouve dans le répertoire ./public_html/bin/, j’ai bon ?

      b) Du coup, j’ai mis mon script dans ./public_html/bin/, il s’appelle testwm (comme « Test Web-Mathematica). L’exécutable marche parfaitement dans un shell, par exemple j’ai ça :

      ~# /opt/wims/public_html/bin/testwm 'result = Table[Prime, {i, 20}]'
      {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71}
      

      Maintenant j’essaye d’utiliser cet exécutable dans un .oef et c’est là que ça coince. Par exemple, j’ai juste testé ceci (copier-coller verbatim) :

      
      \text{ c = wims (exec testwm arg) }
      \statement{ valeur de c: \c .}
      

      Hélas, ça ne marche pas. La valeur de \c semble vide. Par ailleurs, je suis sûr de moi (vérifié via la sortie stderr que wims affiche pour moi lorsque je teste mon exercice), l’exécutable est bien lancé par Wims mais sans argument, autrement dit, avec mon .oef ci-dessus Wims me lance ceci :

      
      /opt/wims/public_html/bin/testwm
      

      et ne tient absolument pas compte de arg juste après. Or moi j’aurais voulu qu’il me lance ceci :

      
      /opt/wims/public_html/bin/testwm arg
      

      même si arg dans ce contexte là n’a pas vraiment de sens évidemment. Un argument qui aurait du sens ici serait par exemple result = Table[Prime, {i, 20}] mais j’ai voulu tester au plus simple afin d’écarter (dans un premier temps au moins) les éventuels problèmes de crochet, d’accolade etc.

      Est-il possible de faire en sorte de lancer mon exécutable testwm en lui passant un argument que j’indique dans le fichier .oef ?

    • #4279
      bernadette
      Maître des clés
      Up
      0
      Down
      ::

      Je pense qu’il vaudrait mieux que tu testes dans un module wims (pas OEF), cela
      évitera les surcouches. Si cela fonctionne alors, on pourra regarder dans OEF.

      Bernadette

    • #4281
      Avatar photoFrançois Lafont
      Participant
      Up
      0
      Down
      ::

      Hello,

      J’avoue que les « modules Wims », je ne sais pas trop ce que c’est. En fait, j’ai découvert (et à peine effleuré) les .oef à l’occasion de ce fil de discussion (je suis plutôt sur la couche administration système à la base). Mais j’essayerai de me documenter.

      À la base, je me suis aidé de ce document https://wims.unice.fr/docs/introProgOEF.pdf 😉 section « 2.5 utilisation de logiciels extérieurs » où j’ai tenté les wims (exec ...) avec un script perso mais sans succès pour l’instant.

    • #4282
      bernadette
      Maître des clés
      Up
      0
      Down
      ::

      Passe par un compte modtool et crée un module Module libre noté

      Ensuite dans le fichier var.proc
      tu pourras essayer d’écrire
      !set a=!exec ton_script

      ensuite soit tu fais un
      !debug $a
      soit tu écris $a dans main.phtml

      En testant, tu verras directement ce que te renvoie ton_script.
      Cela sera beaucoup plus simple que de tester par oef.

      Bernadette

      • Cette réponse a été modifiée le il y a 6 années et 2 mois par bernadette.
Vous lisez 7 fils de discussion
  • Vous devez être connecté pour répondre à ce sujet.