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 :

Compilation g++ exécution programme non autorisée


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mai 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Mai 2020
    Messages : 7
    Par défaut Compilation g++ exécution programme non autorisée
    Bonjour à tous,

    J'ai un problème digne d'un débutant mais je me trouve quand même face à un mur. Je m'amuse à la programmation réseau en C++. J'ai un mini client qui fonctionne sur un premier PC, mais pour le fun je le compile sur un deuxième (aussi sous Debian).

    La compilation se passe correctement.
    Suivant ls mon fichier est éxecutable, j'ai fait un petit chmod +x pour vérifier, mais rien ne le fait.
    => permission non accordée

    Si quelqu'un a une idée.
    Merci beaucoup.

    Nom : Screenshot_20200527_204731.png
Affichages : 258
Taille : 39,2 Ko

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    Bonjour,

    bienvenue.

    ne poste pas de capture d'écran. fais un copier/coller, s'il te plaît.

    ensuite, on ne sait pas ce que fait le programme; peut-être simplement quelque chose qu'un simple utilisateur n'a pas les droits de faire...
    il faudrait poster (copier/coller) le code.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mai 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Mai 2020
    Messages : 7
    Par défaut
    Bonsoir,

    Le code est ultra basique, il s'agit du cour de Bousk sur le reseau:

    main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #include "TCPSocket.h"
     
     
     
    int main()
    {
      TCPSocket socket;
      if (!socket.Connect("192.168.0.50", 9999))
        {
          cout << "Erreur connection : " << errno << endl;
          return 0;
        }
      cout << "Socket connecte !" <<endl;
    }
    et la classe principale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    #include "TCPSocket.h"
     
    #include <stdexcept>
    #include <sstream>
     
    TCPSocket::TCPSocket()
    {
    	mSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    	if (mSocket == -1)
    	{
    		std::ostringstream error;
    		error << "Erreur initialisation socket [" << errno << "]";
    		throw std::runtime_error(error.str());
    	}
    }
    TCPSocket::~TCPSocket()
    {
    	close(mSocket);
    }
     
     
    bool TCPSocket::Connect(const std::string& ipaddress, unsigned short port)
    {
    	sockaddr_in server;
    	server.sin_addr.s_addr = inet_addr(ipaddress.c_str());
    	server.sin_family = AF_INET;
    	server.sin_port = htons(port);
    	return connect(mSocket,(const sockaddr*) &server, sizeof(server)) == 0;
    }
     
    bool TCPSocket::Send(const unsigned char* data, unsigned short len)
    {
      //Unsigned short pour la taille limite d'un paquet de 64ko
      //Taille du paquet envoyé converti en homt to network short
      unsigned short networkLen = htons(len);
     
     
      //Suivant le protocole, on envoie un paquet avec la taille du data
      //Deuxième envoi avec les données
      //Send renvoie le nombre de données réellement envoyé, si les deux paquets sont bien partis return 1
      return send(mSocket, reinterpret_cast<const char*>(& networkLen), sizeof(networkLen), 0) == sizeof(networkLen)
          && send(mSocket, reinterpret_cast<const char*>(data), len, 0) == len;
     
    }
     
    bool TCPSocket::Receive(std::vector<unsigned char>& buffer)
    {
      //Avec le protocole, on vide le buffer de la taille short pour connaitre la taille du paquet envoyé
      unsigned short expectedSize;
      int pending = recv(mSocket, reinterpret_cast<char*>(&expectedSize), sizeof(expectedSize), 0);
     
      //Si jamais on a lu plus que la taille d'un short (comment possible) ou si buffer vide
      if ( pending <= 0 || pending != sizeof(unsigned short) )
        {
          //!< Erreur
          return false;
        }
     
      //Maintenant on connait la taille de données du paquet à récupérer dans le buffer
      expectedSize = ntohs(expectedSize);
      buffer.resize(expectedSize);
      int receivedSize = 0;
      //Maintenant on vide le buffer tant que l'on n'a pas reçu la taille suffisante
      do {
        int ret = recv(mSocket, reinterpret_cast<char*>(&buffer[receivedSize]), (expectedSize - receivedSize) * sizeof(unsigned char), 0);
        if ( ret <= 0 )
          {
    	//!< Erreur
    	buffer.clear();
    	return false;
          }
        else
          {
    	receivedSize += ret;
          }
        } while ( receivedSize < expectedSize );
      return true;
     
     
      //return recv(mSocket, buffer, len, 0);
    }
    Merci

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    tu as essayé d'exécuter le programme en tant que root ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mai 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Mai 2020
    Messages : 7
    Par défaut
    Oui, je n'aurais pas osé poster sans les tests de base.
    Ce que je ne comprends pas c'est que le systeme ne le considère vraiment pas comme un choix possible, car il ne me le propose pas dans la liste de "tab" (avec le ./cl + tab )... Ce qui est habituel quand il est pas considéré comme executable, mais ce n'est pas le cas. Il y a sans doute autre chose que je ne connais pas...

    Merci d'avance,

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    Oui, je n'aurais pas osé poster sans les tests de base.
    tu postes bien des captures d'écran...


    tu peux décrire ton installation (OS, physique/virtuelle, montage des partitions...) ?

    mais, je vais probablement botter en touche, et transférer la discussion sur le forum C++.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut
    Bah, pour lever le doute, yaka tester avec ça :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #include "TCPSocket.h"
     
    int main()
    {
      TCPSocket socket;
    /*  if (!socket.Connect("192.168.0.50", 9999))
        {
          cout << "Erreur connection : " << errno << endl;
          return 0;
        }
      cout << "Socket connecte !" <<endl; */
     
      cout << "Hello world";
      return 0;
    }

  8. #8
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 779
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 779
    Par défaut
    D'après le man de mount, c'est écrit que l'option user active l'option noexec

    user
    Autoriser les utilisateurs ordinaires à monter le système de fichiers. Le nom de l'utilisateur qui a monté le système de fichiers est noté dans mtab pour qu'il puisse le démonter ensuite. Cela entraîne l'utilisation des options noexec, nosuid et nodev (à moins qu'elles ne soient explicitement surchargées, comme dans la ligne d'options user,exec,dev,suid).

  9. #9
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 324
    Par défaut
    Je pense que cette piste est intéressante, mais pour le cas ou le fichier se trouve dans un montage fait après le boot je pense non ?
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mai 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Mai 2020
    Messages : 7
    Par défaut
    Bonjour,

    Merci à tous pour votre aide.

    Vous avez vu juste.

    Sur le même répertoire, le mini script "Hello World" est bloqué de la même façon.
    J'ai copié les deux éxécutables sur la partition racine (répertoire personnel) et plus de soucis. Les deux s'éxécutent normalement.

    Je vais donc fouiller le man de mount pour comprendre comment "surcharger".

    Merci beaucoup, je n'aurais pas compris tout seul.

    Cordialement,

  11. #11
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    Chapeau bas foetus.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lancer du code .NET non compilé dans son programme
    Par Risike dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 02/02/2009, 12h53
  2. aide sur la compilation d'un programme console
    Par angelo2 dans le forum MFC
    Réponses: 6
    Dernier message: 18/10/2005, 07h44
  3. compilation d'un programme à partir d'un autre programme??
    Par Naruseb dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/08/2005, 15h05

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