Ho un repository git che deve eseguire un hook post-receive come sudo. Il binario che ho compilato per testare questo appare come:l'hook git 'post-receive' fallisce con setuid
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int main() {
int ret;
ret = setuid(geteuid());
if(!ret) {
fprintf(stderr, "error setting uid %d \n", ret);
}
system("[...command only sudo can access...]");
return 0;
}
Il geteuid()
richiama l'ID proprietario di post-receive
, poi cerca di setuid. Quando viene eseguito con qualsiasi utente (incluso l'utente super) esegue correttamente lo script come root. Tuttavia, quando viene attivato da git hook, i sistemi non riescono a impostare l'uid. Ho provato a eseguire chmod u+s post-receive
Ho anche provato alcune altre configurazioni, ma sono a corto di idee. Qualche ragione per cui dovrebbe funzionare in tutti i casi tranne quando lo fa git?
btw, piattaforma Ubuntu Server 9.04 (2.6.28-15), git1.6.0.4, gcc version 4.3.3 (Ubuntu 4.3.3-5ubuntu4)
Lo hai mai capito? – Ibrahim
Un problema è che si stampa un messaggio di errore, ma poi si continua a eseguire la chiamata di sistema(). Inoltre, ignori il risultato della chiamata di sistema() e quindi esci con uno stato di successo (0). –
@ Blake: il bit "-come il- con qualsiasi utente" non è chiaro - il programma viene eseguito correttamente quando viene eseguito come utente che si sta spingendo come? Penso che il modo più vicino per duplicare l'ambiente in cui gira sia: 'ssh hostname 'cd/path/to/repo; .git/hooks/post-receive'' – Cascabel