[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
EmptyDir and remote repository permissions problem
From: |
krz |
Subject: |
EmptyDir and remote repository permissions problem |
Date: |
10 Apr 2001 04:07:08 -0000 |
>Submitter-Id: net
>Originator: Keith Zaback
>Organization: net
>Confidential: no
>Synopsis: Receive "Cannot create_adm_p" and "Permission denied" error
>when using remote repository
>Severity: serious
>Priority: low
>Category: cvs
>Class: sw-bug
>Release: cvs-1.11
>Environment:
System: Linux kanuka.confusatron.org 2.2.13 #4 SMP Thu Oct 28 14:52:58 CDT 1999
i586 unknown
Architecture: i586
>Description:
Here is my repository setup
$ ls -l /home
drwxrwxr-x 5 root root 4096 Apr 4 17:04 cvs/
$ ls -l /home/cvs
drwxrwxr-x 2 root root 4096 Apr 9 20:45 CVSROOT/
drwxr-xr-x 2 krz krz 4096 Apr 9 20:02 project1/
drwxr-xr-x 6 krz krz 4096 Apr 9 22:30 project2/
I (user krz) own the project1 and project2 directories, but root
owns /home/cvs. Everything works great, except remote repostiory
commands. When using a remote repository, the "cvs server" process
creates a /tmp/cvs-serv{pid} directory, then starts populating that
directory with the CVS admin directory ("CVS") and other
sub-directories of the project. Then in "server.c" line 417, it
looks for a file "/tmp/cvs-serv{pid}/{subdirectory}/CVS/Repository"
and if that is not a file, it tries to create
"/home/CVS/CVSROOT/EmptyDir" which my user (krz) does not have
permission to create. Therefore, nothing works :)
>How-To-Repeat:
The description contains the information needed to test/repeat this.
>Fix:
I could work around this problem by giving my user (krz) permissions
to create directories inside of /home/cvs/CVSROOT. Instead, I made
a small patch to have it create the EmpryDir at:
"/tmp/cvs-serv{pid}/{subdirectory}/CVS/EmptyDir" which seems to work
for me.
--- server.c Fri Jul 28 15:18:40 2000
+++ server.c.new Mon Apr 9 23:04:24 2001
@@ -420,8 +420,8 @@
differently. */
char *empty;
- empty = malloc (strlen (CVSroot_directory)
- + sizeof (CVSROOTADM)
+ empty = malloc (strlen (dir_where_cvsadm_lives)
+ + sizeof (CVSADM)
+ sizeof (CVSNULLREPOS)
+ 10);
if (! empty)
@@ -431,8 +431,8 @@
}
/* Create the directory name. */
- (void) sprintf (empty, "%s/%s/%s", CVSroot_directory,
- CVSROOTADM, CVSNULLREPOS);
+ (void) sprintf (empty, "%s/%s/%s", dir_where_cvsadm_lives,
+ CVSADM, CVSNULLREPOS);
/* Create the directory if it doesn't exist. */
if (! isfile (empty))
- EmptyDir and remote repository permissions problem,
krz <=