#include <stdlib.h>
#include <unistd.h>

#define ROOT            "/home/cvsuser/jail"
#define REPOSITORY      "/repository"

/* Look up uid of cvsuser in /etc/passwd */
#define OWNER_UID 501
/* Look up gid of cvsuser in /etc/group */
#define OWNER_GID 501

int main(int argc, char *argv[])
{
	int res;

	/* Why do this?  See doc/cvs.info-8, Node: Connection. */
	/* (Suggested by Scott Bronson) */
	unsetenv("HOME");

	res = chdir(ROOT);
	if ( res ) exit(1);

	res = chroot(ROOT);
	if ( res ) exit(2);

	res = setresgid(OWNER_GID, OWNER_GID, OWNER_GID);
	if ( res ) exit(3);

	res = setresuid(OWNER_UID, OWNER_UID, OWNER_UID);
	if ( res ) exit(4);

	execl("/bin/cvs", "cvs",
		"-f",
		"--allow-root=" REPOSITORY,
		"pserver",
		NULL);

	exit(5);
}
