[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) |