Bonjour à tous ,
Je developpe un shell a distance , j'ai fais une fonction qui execute une commande et renvoie le resultat seulement quelque problemes se posent à moi :
- lorsque tape une commande neccessitant le root , mon programme ne renvoie rien au serveur
- lorsque je tape la commande su , le mot de passe est demandé sur la console du client au lieu d'etre dans la console du serveur.

Voilà , merci d'avance pour votre aide, voici la fonction qui utilise my_popen et la fonction my_popen elle même :

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
string getResponse(string buffer,int sock)
{
	string delimiter = ":";
	string prefix = buffer.substr(0,buffer.find(delimiter));
	char* command = (char*)(buffer.substr(buffer.find(delimiter)+1	,buffer.size()-1)).c_str();
	string mystring;
	if(prefix=="sh")
	{	 	
		FILE* myfile ;
        my_popen(command,mystring);
		if(mystring.size()==0)
		{
			mystring= "Commande non verbeuse";
		}    
	    return mystring;
 
	}
	return "error";
 
}
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
 
bool my_popen (const std::string& cmd,std::string& out ) {
    bool            ret_boolValue = true;
    FILE*           fp;
    const int       SIZEBUF = 1234;
    char            buf [SIZEBUF];
 
    if ((fp = popen(cmd.c_str (), "r")) == NULL) {
    	perror("popen");
        return false;
    }
    std::string  cur_string = "";
    while (fgets(buf, sizeof (buf), fp)) {
        out += buf;
    }
    pclose(fp);
    return true;
}

Ainsi que l'envoie de la reponse dans la socket :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
string buf(buffer);
		       	string rep(getResponse(buf,sock));
		       	int size = rep.size();
		        if(send(sock,rep.c_str(),size,0)!=size)
		        {
		        	perror("send");
		        }