Bonjour à tous,

Je viens d'installer mon petit serveur web et mail et je dois faire quelque chose de similaire à ça. Il faudrait que je puisse rajouter un compte mail depuis une page php sécurisée bien entendu (php -> programme C/C++).

Pour se faire, j'ai besoin d'accéder à MySQL (par l'API C, pas de problème) et faire des commandes comme maildirmake depuis un utilisateur (vmail) normal à qui appartient les dossiers de mails. Apache tournant sur l'utilisateur apache, je pense faire du setuid pour donner les droits temporairement de vmail. Toutes les commandes "natives" au C/C++ se font bien sous l'utilisateur vmail mais dès que je fais un appel avec system() sur une commande comme touch/mkdir/maildirmake c'est l'utilisateur apache qui est utilisé, pourquoi ?

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
17
18
19
20
21
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std; 
 
int main(void)
{
    static uid_t ruid, rgid;
 
    ruid = getuid();
    rgid = getgid();
    setuid(geteuid());
    setgid(getegid());
    ofstream file("test.txt");
    file << "Hello test \n";
    file.close();
    system("touch test2.txt");
    setuid(ruid);
    setgid(rgid);
    return EXIT_SUCCESS;
}

Je précise que j'ai bien fait :
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
g++ suid-print.c -o suid-print && chown vmail:vmail suid-print && chmod +s suid-print

Quand j'exécute le programme, le fichier test.txt appartient bien à vmail alors que le fichier test2.txt appartient à celui qui a lancer le programme. Comment ça se fait ? On dirait que system n'affecte pas les programme au setuid donné.
Avez-vous une solution ?