[Cvs-nserver-commits] CVS: cvs-nserver/acl default-file-acl.h,1.1.2.2,1.1.2.3 dir-acl.c,1.1.2.24,1.1
Brought to you by:
tyranny
|
From: Alexey M. <mo...@us...> - 2002-06-13 13:44:38
|
Update of /cvsroot/cvs-nserver/cvs-nserver/acl
In directory usw-pr-cvs1:/tmp/cvs-serv18537/acl
Modified Files:
Tag: NCLI-1-11-1
default-file-acl.h dir-acl.c
Log Message:
Dir/Branch management (old semantics) implemented for racl subcommand
Index: default-file-acl.h
===================================================================
RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/default-file-acl.h,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -d -r1.1.2.2 -r1.1.2.3
--- default-file-acl.h 13 Jun 2002 09:20:44 -0000 1.1.2.2
+++ default-file-acl.h 13 Jun 2002 13:44:33 -0000 1.1.2.3
@@ -38,6 +38,8 @@
#include "dir-acl.h"
+#define DEFAULT_FILE_ACL_PREFIX "default:"
+
int store_default_file_acl (FILE *acl_file, struct DEFAULT_FILE_ACL *dfacl);
int set_default_file_acl (struct DIR_ACL *dir_acl,const char *branch, const char *username, int perm);
Index: dir-acl.c
===================================================================
RCS file: /cvsroot/cvs-nserver/cvs-nserver/acl/Attic/dir-acl.c,v
retrieving revision 1.1.2.24
retrieving revision 1.1.2.25
diff -u -d -r1.1.2.24 -r1.1.2.25
--- dir-acl.c 13 Jun 2002 09:20:44 -0000 1.1.2.24
+++ dir-acl.c 13 Jun 2002 13:44:33 -0000 1.1.2.25
@@ -138,10 +138,23 @@
{
struct DIR_ACL *dir_acl = NULL;
char *dir_copy = NULL;
+ size_t tldlen = strlen(current_toplevel_directory);
+ size_t dirlen = strlen(dir);
- /* check that requested directory derives from top-level directory */
- if (strncmp(dir, current_toplevel_directory, strlen(current_toplevel_directory)) != 0)
+ /* check that requested directory derives from top-level directory
+ There's one special case for this check: if dir requested is
+ current_toplevel_directory itself, its length is less than
+ length of the current_toplevel_directory because of trailing
+ slash. Handle this case sui generis....
+ */
+ if (!(((tldlen == (dirlen+1))
+ && (current_toplevel_directory[tldlen-1] == '/')
+ && (strncmp(dir,current_toplevel_directory,dirlen) == 0))
+ || (strncmp(dir, current_toplevel_directory,tldlen) == 0))) {
+ /* error(0,0,"Trying to access Dir ACL in '%s' outside of '%s'",
+ dir,current_toplevel_directory); */
goto out;
+ }
dir_acl = create_and_load_dir_acl(dir);
if (!dir_acl)
|