Hi,
I'm trying to implement the suggestions from
http://subversion.tigris.org/faq.html#website-auto-update to allow me
to update code via a web interface. My code is a bit different from
the example as the example wasn't even trying to work. The code I'm
using is below. However, it appears that the code that is execl()'d
is still not running as the user I'd like. The executable created
from the code below is set to 4755 permissions but it doesn't seem to
matter. I've also tried a variety of the set*uid() methods with
various failures. The printf()'s indicate what I'd expect but the
execl()'d program is still apparently not running as the correct user.
I'm running on
Linux habanero.xigole.com 2.6.18-6-amd64 #1 SMP Tue Aug 19 04:30:56
UTC 2008 x86_64 GNU/Linux
and
$ cat /etc/debian_version
4.0
Is there something obvious going on to prevent the execl()'d process
from running as the correct user? An strace shows that, in this case,
the svn command is still accessing information from the original
user's home account.
Thanks for any help.
Code I'm using:
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
int main( int argc, char** argv )
{
if( argc != 2 )
{
fprintf( stderr, "usage: %s <dir_to_update>\n", argv[0] );
return(EXIT_FAILURE);
}
printf( "(1) euid is %d, uid is %d\n", geteuid(), getuid() );
if( setreuid(geteuid(), geteuid()) != 0 )
{
fprintf( stderr, "Cannot change users. Reason: %s\n",
strerror(errno) );
return(EXIT_FAILURE);
}
printf( "(2) euid is %d, uid is %d\n", geteuid(), getuid() );
execl("/usr/local/bin/svn", "svn", "update", argv[1], (const char
*) NULL);
return(EXIT_FAILURE);
}