IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

iotcl: operation non permise


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 108
    Points : 67
    Points
    67
    Par défaut iotcl: operation non permise
    Bonjour,
    A l'intérieur d'une application complexe de LINUX RHES 5, j'ai écrit un petit module beeper classique pour activer / désactiver le son avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
      int frequency, console_fd ;
     
      if((console_fd = open("/dev/console", O_WRONLY)) == -1) {
        perror("open");
        return;
      }
      else
      {
          frequency = 6000;
          if (ioctl(console_fd, KIOCSOUND, frequency) == -1)
                  perror("ioctl");
      }
    Ce module fonctionne parfaitement quand j'exécute mon application en "su". Par contre, il sort un message d'erreur "ioctl: Opération non permise" quand l'application est activée avec un utilisateur sans privilège particulier. Or cela est une exigence.

    J'aimerais savoir si quelqu'un parmi vous a une solution pour que ce module soit exécuté sans erreur par un utilisateur courant.

    Mes recherches ont été vaines sur le net: la solution de contournement (chown root myappli; chmod a+s myappli) ne marche pas car d'autres contrôles d'identification de l'application l'arrêtent quand l'application n'est pas exécutée par le bon destinataire.

    Merci à l'avance et cordialement.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    si tu es avec X, tu as

    ou

    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 108
    Points : 67
    Points
    67
    Par défaut XBell à la place de ioctl (Suite) ?
    Bonsoir,
    J'ai déjà essayé XBell / XKeyboardControl ... Mais cette solution ne me convient pas a priori. La durée du beeper peut être très longue (quelques heures ...) selon mes besoins. Or selon mes tests, quand je met bell_duration à quelques minutes, XServer sort déjà des erreurs de paramétrage. De plus, je pense que cette solution consomme beaucoup plus de ressources de machine que ioctl.
    Merci à l'avance.

  4. #4
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par KiKiTiTi Voir le message
    Mes recherches ont été vaines sur le net: la solution de contournement (chown root myappli; chmod a+s myappli) ne marche pas car d'autres contrôles d'identification de l'application l'arrêtent quand l'application n'est pas exécutée par le bon destinataire.
    Tu peux faire quelque chose de plus propre sur la même base avec setreuid(), qui règlera ce problème d'identité.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 108
    Points : 67
    Points
    67
    Par défaut Précisions
    Bonjour,

    Pourrais-tu préciser ta suggestion ?
    L'utilisation des fonctions du type set/getuid ... permet à super-user de devenir un user sans privilèges mais il ne fonctionne pas dans le sens inverse. Or notre application doit être activée par un user sans privilèges.

    Merci à l'avance et cordialement.

  6. #6
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    tu actives le bit set UID root, et tu joues avec setreuid() pour passer user quand tu as besoin d'être user, ou root quand tu as besoin d'être root.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 108
    Points : 67
    Points
    67
    Par défaut Suite
    Excusez-moi. Je ne vois toujours pas l'issue par ta suggestion. Pour activer les flags eui ou rui du su, je dois lancer l'application en tant que su. Or c'est ce que je cherche à l'éviter pour des raisons indiquées précédemment. Sinon l'application lancée par un user courant n'est pas un processus privilégié. Donc on ne peux pas basculer à ui du su à l'intérieur de cette application ?

    Merci à l'avance

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    peut-etre si on savait un peu plus sur ce que tu veux faire, en fait...
    on pourrait peut-etre aider...mieux....
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  9. #9
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    peut-etre si on savait un peu plus sur ce que tu veux faire, en fait...
    on pourrait peut-etre aider...mieux....
    Je n'aurais pas dis mieux!
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 108
    Points : 67
    Points
    67
    Par défaut Capacité LINUX
    Bonsoir,
    Avec ce problème, je voulais trouver une solution en jouant sur les capacités (flags) des processus de LINUX via des paramètres comme CAP_SYS_ADMIN, ...Mais il s'agit des opérations près du noyau. Donc à risque ??
    Ce serait formidable si quelqu'un parmi en dispose des info.

    Merci à l'avance et cordialement

  11. #11
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    2 choses :
    - tu n'as toujours pas exposé ton problème et tes contraintes clairement
    - oublie les capacités : ça n'a rien de "près du noyau" en tout cas pas plus que le reste, parcontre ça n'est pas encore supporté par vfs donc pour le moment...

    Je persiste à croire que la solution que je t'ai proposé est la meilleure dans ton cas mais sans plus de précision...
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  12. #12
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    KiKiTiTi, pourquoi ne pas utiliser l'utilitaire beep ? Il fait exactement ce que tu veux, et il le fait bien.

    Sa façon de procéder est exactement la tienne, à la différence près que c'est un programme suid (chown root; chmod u+s) de façon à pouvoir écrire sur /dev/console. (Attention, j'ai pas dit qu'il fallait faire appel à la fonction setuid()).

    Sinon, si le programme est lancé depuis une console Linux (et pas un terminal virtuel), tu peux ouvrir le terminal donné par la fonction ttyname() et jouer le son dessus.

    Ou encore, tu peux chercher un terminal dont le nom commence par /dev/tty sur lequel tu as le droit d'écrire, mais ça devient un peu crade et ça ne marchera pas forcément à tous les coups.
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

Discussions similaires

  1. mise à jour non permise en VB6
    Par roura dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 23/08/2007, 08h40
  2. XMLHttpRequest -> erreur HTTP 405 (méthode non permise)
    Par prgasp77 dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 17/07/2007, 09h04
  3. [8.5] message "operation non prise en charge a été tentée"
    Par JJTIRODE dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 23/05/2007, 14h38
  4. Operation non applicable
    Par mario9 dans le forum Bases de données
    Réponses: 1
    Dernier message: 13/08/2006, 19h15
  5. [JDBC] Opération non valide sur un ensemble
    Par marti dans le forum JDBC
    Réponses: 2
    Dernier message: 13/10/2005, 19h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo