server-socket mit shell binden?



  • Ich probiere gerade ein kleines Programm zu schreiben, welches als Verbindungstunnel zwischen zwei Computern fungiert. Dem enstprechend gibt der Client befehle auf seinem Terminal an das Programm welches diese dann zum Server weiter leitet. Dieser weiderum soll selbige ausführen um dann die Ausgabe der Konsole an den Client wieder zurück zu leiten.
    Aktuell benutze ich dafür folgendes:

    std::string exec(char* cmd) throw(char const*) {
    
        if(string(cmd).size() == 0)
        	    return "-1";
    
        if(string(cmd) == "STOP\n")
        	    return "STOP";
    
        string com(cmd);
        com += " 2>&1";
        for(int i = 0; i != com.size(); ++i)
        	    if(com[i] == '\n' || com[i] == '^')
        	    	com[i] = ' ';
    
        FILE* pipe = popen(com.c_str(), "r");
        if (!pipe) return "ERROR";
        char buffer[2000];
        std::string result = "";
        while(!feof(pipe)) {
            if(fgets(buffer, 2000, pipe) != NULL)
                    result += buffer;
        }
        pclose(pipe);
        return result;
    }
    

    Dies birgt allerdings den Nachteil das "interaktive" Funktionalitäten wie Passwortabfragen (in Linux z.b. "sudo") nicht funktionieren und scheitern.
    Gibt es eine Möglichkeit das zu optimieren ohne den aktuellen Weg auf zu geben, oder muss da ein neues Konzept her? Wenn ja wäre nett wenn ihr mir da mit ein oder zwei Links aufwarten könntet.

    lg ich


Anmelden zum Antworten