# HG changeset patch # User Robert McIntyre # Date 1357707239 0 # Node ID a0c0ccd22ca52a7d6d5f8e7665788a53e91ef1c3 # Parent 7b9d471fc1d3065b446abdbec0173218e7128b7b progress on setuid wrapper script. diff -r 7b9d471fc1d3 -r a0c0ccd22ca5 .hgignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Wed Jan 09 04:53:59 2013 +0000 @@ -0,0 +1,2 @@ +syntax:glob +./defaults/hg-wrapper \ No newline at end of file diff -r 7b9d471fc1d3 -r a0c0ccd22ca5 defaults/Makefile --- a/defaults/Makefile Tue Jan 08 18:13:48 2013 +0000 +++ b/defaults/Makefile Wed Jan 09 04:53:59 2013 +0000 @@ -1,2 +1,5 @@ all: - gcc hg-wrapper.c -o hg-wrapper + g++ -I/usr/include hg-wrapper.cpp -o hg-wrapper + chmod +s hg-wrapper +clean: + rm hg-wrapper diff -r 7b9d471fc1d3 -r a0c0ccd22ca5 defaults/create-skeleton.sh --- a/defaults/create-skeleton.sh Tue Jan 08 18:13:48 2013 +0000 +++ b/defaults/create-skeleton.sh Wed Jan 09 04:53:59 2013 +0000 @@ -1,4 +1,4 @@ mkdir -pv /pkg/defaults -ln -sfv $(pwd)ls/profile /pkg/defaults/.profile +ln -sfv $(pwd)/profile /pkg/defaults/.profile ln -sfv $(pwd)/hg-wrapper /pkg/defaults/.hg-wrapper diff -r 7b9d471fc1d3 -r a0c0ccd22ca5 defaults/hg-wrapper Binary file defaults/hg-wrapper has changed diff -r 7b9d471fc1d3 -r a0c0ccd22ca5 defaults/hg-wrapper.c --- a/defaults/hg-wrapper.c Tue Jan 08 18:13:48 2013 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ -#include -#include - -main( int argc, char ** argv, char ** envp ) -{ - if( setgid(getegid()) ) perror( "setgid" ); - if( setuid(geteuid()) ) perror( "setuid" ); - envp = 0; /* blocks IFS attack on non-bash shells */ - system( "/usr/bin/hg", argv, envp ); - perror( argv[0] ); - return errno; -} diff -r 7b9d471fc1d3 -r a0c0ccd22ca5 defaults/hg-wrapper.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/defaults/hg-wrapper.cpp Wed Jan 09 04:53:59 2013 +0000 @@ -0,0 +1,59 @@ +#include +//#include +#include +#include +#include +#include + +#include + +#include +//#include + + +#include + +// void print_element(std::string x){ +// std::cout << x << std::endl; +// } + + +main( int argc, char ** argv){ + + // remove first element of argv, the program's name + std::vector input(argv, argv+argc); + + + //std::cout << input.size() << std::endl; + + input[0] = std::string("hg"); + + //input.insert(input.begin(),std::string("hg")); + + //std::cout << input.size() << std::endl; + + // for(unsigned i = 0; i < input.size(); i++){ + // std::cout << input[i] << std::endl; + + // } + + //for_each(input.begin(),input.end(), print_element); + + + // std::string command = + // accumulate(input.begin(), input.end(), std::string(" ")); + + std::string command = boost::algorithm::join(input, " "); + + + //.c_str(); + + //std::cout << command << std::endl; + + setreuid( geteuid(), geteuid() ); + //envp = 0; /* blocks IFS attack on non-bash shells */ + //system( "/usr/bin/hg", argv, envp ); + return system(command.c_str()); + //perror( argv[0] ); + //return errno; +} diff -r 7b9d471fc1d3 -r a0c0ccd22ca5 src/pkg.pl --- a/src/pkg.pl Tue Jan 08 18:13:48 2013 +0000 +++ b/src/pkg.pl Wed Jan 09 04:53:59 2013 +0000 @@ -69,7 +69,7 @@ @pkg_create_home_cmd = ("install", "-d", "-g", $pkg_name, "-o", $pkg_name, - "-m", "700", $pkg_home); + "-m", "755", $pkg_home); @pkg_add_install_cmd = ("gpasswd", "--add", $pkg_name, "install"); @@ -82,8 +82,8 @@ "/pkg/defaults/.profile", "$pkg_home/.profile"); @pkg_copy_hg_wrapper_cmd = - (install, "-g", "hg-commit", "-o", "hg-commit", - "-m", "4711", "/pkg/defaults/.hg-wrapper", $pkg_home); + (install, "-g", "users", "-o", "r", + "-m", "4777", "/pkg/defaults/.hg-wrapper", $pkg_home); #determine if the user already exists: `id $pkg_name 2>/dev/null`;