execve-problem



  • Hi

    #include <iostream>
    #include <string>
    #include <fstream>
    #include <cstdlib>
    #include <unistd.h>
    
    using namespace std;
    
    int main(){
    
     string eingabe = getenv("QUERY_STRING");
    
     int pos = eingabe.find('&');
     int laenge = eingabe.length();
    
     string alias = eingabe;
     string user = eingabe;
    
     alias = alias.erase(0, pos+1);
     user = user.erase(pos, laenge-pos);
    
     pos = alias.find('=');
     alias = alias.erase(0, pos+1);
    
     pos = user.find('=');
     user = user.erase(0, pos+1);
    
     ofstream aliasdatei("/etc/aliases", ios::app);
    
     aliasdatei << alias << ": " << user << endl;
    
     aliasdatei.close();
    
     if (fork() == 0){
      char *parameter[]={"newaliases", NULL};
      execve("/usr/bin/newaliases", parameter, NULL);
     }
     else{
    
     cout << "Content-type: text/html" << endl << endl;
     cout << "<HTML>" << endl;
     cout << "<BODY>" << endl;
     cout << "Useralias angelegt" << endl;
     cout << "</BODY>" << endl;
     cout << "</HTML>" << endl;
    }
    return 0;
    }
    

    Leider wird bei dem code newaliases nicht ausgeführt oder wenns ausgeführt wird greift es nicht ich hab kein Ahnung warum. In /etc/aliases wird alles korrekt eingetragen und wenn ich newaliases von Hand ausführe funktionierts auch, aber es muss eben aus dem Prog herraus laufen.

    Tipps??

    MFG eiskalt



  • prüfe doch mal execve auf Fehler und lass dir den genauen Fehler ausgeben





  • Hi also ich hab das Problem mittlerweile gelöst
    ich hab die aliases.db der gruppe www-data zugeordnet und der gruppe schreibrecht gegeben -rw-rw-r-- dann gehts allerdings bin ich mir nicht sicher ob das so ne gut lösung ist?

    THX eiskalt


Anmelden zum Antworten